agent-messenger 2.5.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 (543) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/.github/workflows/ci.yml +44 -0
  3. package/.oxlintrc.json +1 -1
  4. package/bun.lock +0 -27
  5. package/bunfig.toml +0 -3
  6. package/dist/package.json +1 -2
  7. package/dist/src/platforms/kakaotalk/client.d.ts +4 -1
  8. package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
  9. package/dist/src/platforms/kakaotalk/client.js +21 -7
  10. package/dist/src/platforms/kakaotalk/client.js.map +1 -1
  11. package/dist/src/platforms/kakaotalk/commands/auth.d.ts.map +1 -1
  12. package/dist/src/platforms/kakaotalk/commands/auth.js +24 -55
  13. package/dist/src/platforms/kakaotalk/commands/auth.js.map +1 -1
  14. package/dist/src/platforms/kakaotalk/credential-manager.d.ts.map +1 -1
  15. package/dist/src/platforms/kakaotalk/credential-manager.js +1 -0
  16. package/dist/src/platforms/kakaotalk/credential-manager.js.map +1 -1
  17. package/dist/src/platforms/kakaotalk/index.d.ts +1 -1
  18. package/dist/src/platforms/kakaotalk/index.d.ts.map +1 -1
  19. package/dist/src/platforms/kakaotalk/index.js.map +1 -1
  20. package/dist/src/platforms/kakaotalk/listener.js +2 -2
  21. package/dist/src/platforms/kakaotalk/listener.js.map +1 -1
  22. package/dist/src/platforms/kakaotalk/protocol/config.d.ts +8 -2
  23. package/dist/src/platforms/kakaotalk/protocol/config.d.ts.map +1 -1
  24. package/dist/src/platforms/kakaotalk/protocol/config.js +15 -2
  25. package/dist/src/platforms/kakaotalk/protocol/config.js.map +1 -1
  26. package/dist/src/platforms/kakaotalk/protocol/session.d.ts +3 -1
  27. package/dist/src/platforms/kakaotalk/protocol/session.d.ts.map +1 -1
  28. package/dist/src/platforms/kakaotalk/protocol/session.js +13 -10
  29. package/dist/src/platforms/kakaotalk/protocol/session.js.map +1 -1
  30. package/dist/src/platforms/kakaotalk/types.d.ts +10 -0
  31. package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
  32. package/dist/src/platforms/kakaotalk/types.js +1 -0
  33. package/dist/src/platforms/kakaotalk/types.js.map +1 -1
  34. package/dist/src/platforms/line/client.js +2 -2
  35. package/dist/src/platforms/line/client.js.map +1 -1
  36. package/dist/src/tui/adapters/kakaotalk-adapter.d.ts.map +1 -1
  37. package/dist/src/tui/adapters/kakaotalk-adapter.js +5 -2
  38. package/dist/src/tui/adapters/kakaotalk-adapter.js.map +1 -1
  39. package/dist/src/vendor/linejs/LICENSE +21 -0
  40. package/dist/src/vendor/linejs/README.md +89 -0
  41. package/dist/src/vendor/linejs/_dist/base/core/mod.d.ts +125 -0
  42. package/dist/src/vendor/linejs/_dist/base/core/mod.d.ts.map +1 -0
  43. package/dist/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts +13 -0
  44. package/dist/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts.map +1 -0
  45. package/dist/src/vendor/linejs/_dist/base/core/utils/continue.d.ts +10 -0
  46. package/dist/src/vendor/linejs/_dist/base/core/utils/continue.d.ts.map +1 -0
  47. package/dist/src/vendor/linejs/_dist/base/core/utils/devices.d.ts +8 -0
  48. package/dist/src/vendor/linejs/_dist/base/core/utils/devices.d.ts.map +1 -0
  49. package/dist/src/vendor/linejs/_dist/base/core/utils/error.d.ts +8 -0
  50. package/dist/src/vendor/linejs/_dist/base/core/utils/error.d.ts.map +1 -0
  51. package/dist/src/vendor/linejs/_dist/base/core/utils/events.d.ts +22 -0
  52. package/dist/src/vendor/linejs/_dist/base/core/utils/events.d.ts.map +1 -0
  53. package/dist/src/vendor/linejs/_dist/base/e2ee/mod.d.ts +64 -0
  54. package/dist/src/vendor/linejs/_dist/base/e2ee/mod.d.ts.map +1 -0
  55. package/dist/src/vendor/linejs/_dist/base/login/mod.d.ts +138 -0
  56. package/dist/src/vendor/linejs/_dist/base/login/mod.d.ts.map +1 -0
  57. package/dist/src/vendor/linejs/_dist/base/mod.d.ts +6 -0
  58. package/dist/src/vendor/linejs/_dist/base/mod.d.ts.map +1 -0
  59. package/dist/src/vendor/linejs/_dist/base/obs/mod.d.ts +100 -0
  60. package/dist/src/vendor/linejs/_dist/base/obs/mod.d.ts.map +1 -0
  61. package/dist/src/vendor/linejs/_dist/base/polling/mod.d.ts +55 -0
  62. package/dist/src/vendor/linejs/_dist/base/polling/mod.d.ts.map +1 -0
  63. package/dist/src/vendor/linejs/_dist/base/push/conn.d.ts +39 -0
  64. package/dist/src/vendor/linejs/_dist/base/push/conn.d.ts.map +1 -0
  65. package/dist/src/vendor/linejs/_dist/base/push/connData.d.ts +19 -0
  66. package/dist/src/vendor/linejs/_dist/base/push/connData.d.ts.map +1 -0
  67. package/dist/src/vendor/linejs/_dist/base/push/connManager.d.ts +43 -0
  68. package/dist/src/vendor/linejs/_dist/base/push/connManager.d.ts.map +1 -0
  69. package/dist/src/vendor/linejs/_dist/base/push/mod.d.ts +2 -0
  70. package/dist/src/vendor/linejs/_dist/base/push/mod.d.ts.map +1 -0
  71. package/dist/src/vendor/linejs/_dist/base/request/mod.d.ts +45 -0
  72. package/dist/src/vendor/linejs/_dist/base/request/mod.d.ts.map +1 -0
  73. package/dist/src/vendor/linejs/_dist/base/service/auth/mod.d.ts +32 -0
  74. package/dist/src/vendor/linejs/_dist/base/service/auth/mod.d.ts.map +1 -0
  75. package/dist/src/vendor/linejs/_dist/base/service/call/mod.d.ts +29 -0
  76. package/dist/src/vendor/linejs/_dist/base/service/call/mod.d.ts.map +1 -0
  77. package/dist/src/vendor/linejs/_dist/base/service/channel/mod.d.ts +28 -0
  78. package/dist/src/vendor/linejs/_dist/base/service/channel/mod.d.ts.map +1 -0
  79. package/dist/src/vendor/linejs/_dist/base/service/liff/mod.d.ts +51 -0
  80. package/dist/src/vendor/linejs/_dist/base/service/liff/mod.d.ts.map +1 -0
  81. package/dist/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts +38 -0
  82. package/dist/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts.map +1 -0
  83. package/dist/src/vendor/linejs/_dist/base/service/mod.d.ts +9 -0
  84. package/dist/src/vendor/linejs/_dist/base/service/mod.d.ts.map +1 -0
  85. package/dist/src/vendor/linejs/_dist/base/service/relation/mod.d.ts +30 -0
  86. package/dist/src/vendor/linejs/_dist/base/service/relation/mod.d.ts.map +1 -0
  87. package/dist/src/vendor/linejs/_dist/base/service/square/mod.d.ts +162 -0
  88. package/dist/src/vendor/linejs/_dist/base/service/square/mod.d.ts.map +1 -0
  89. package/dist/src/vendor/linejs/_dist/base/service/talk/mod.d.ts +194 -0
  90. package/dist/src/vendor/linejs/_dist/base/service/talk/mod.d.ts.map +1 -0
  91. package/dist/src/vendor/linejs/_dist/base/service/types.d.ts +9 -0
  92. package/dist/src/vendor/linejs/_dist/base/service/types.d.ts.map +1 -0
  93. package/dist/src/vendor/linejs/_dist/base/storage/base.d.ts +34 -0
  94. package/dist/src/vendor/linejs/_dist/base/storage/base.d.ts.map +1 -0
  95. package/dist/src/vendor/linejs/_dist/base/storage/file.d.ts +20 -0
  96. package/dist/src/vendor/linejs/_dist/base/storage/file.d.ts.map +1 -0
  97. package/dist/src/vendor/linejs/_dist/base/storage/memory.d.ts +19 -0
  98. package/dist/src/vendor/linejs/_dist/base/storage/memory.d.ts.map +1 -0
  99. package/dist/src/vendor/linejs/_dist/base/storage/mod.d.ts +4 -0
  100. package/dist/src/vendor/linejs/_dist/base/storage/mod.d.ts.map +1 -0
  101. package/dist/src/vendor/linejs/_dist/base/thrift/mod.d.ts +14 -0
  102. package/dist/src/vendor/linejs/_dist/base/thrift/mod.d.ts.map +1 -0
  103. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts +20 -0
  104. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts.map +1 -0
  105. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts +7 -0
  106. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts.map +1 -0
  107. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts +1109 -0
  108. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts.map +1 -0
  109. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts +3 -0
  110. package/dist/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts.map +1 -0
  111. package/dist/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts +7 -0
  112. package/dist/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts.map +1 -0
  113. package/dist/src/vendor/linejs/_dist/base/timeline/mod.d.ts +83 -0
  114. package/dist/src/vendor/linejs/_dist/base/timeline/mod.d.ts.map +1 -0
  115. package/dist/src/vendor/linejs/_dist/base/types.d.ts +11 -0
  116. package/dist/src/vendor/linejs/_dist/base/types.d.ts.map +1 -0
  117. package/dist/src/vendor/linejs/_dist/client/client.d.ts +70 -0
  118. package/dist/src/vendor/linejs/_dist/client/client.d.ts.map +1 -0
  119. package/dist/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts +5 -0
  120. package/dist/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts.map +1 -0
  121. package/dist/src/vendor/linejs/_dist/client/features/chat/mod.d.ts +58 -0
  122. package/dist/src/vendor/linejs/_dist/client/features/chat/mod.d.ts.map +1 -0
  123. package/dist/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts +5 -0
  124. package/dist/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts.map +1 -0
  125. package/dist/src/vendor/linejs/_dist/client/features/message/mod.d.ts +3 -0
  126. package/dist/src/vendor/linejs/_dist/client/features/message/mod.d.ts.map +1 -0
  127. package/dist/src/vendor/linejs/_dist/client/features/message/square.d.ts +94 -0
  128. package/dist/src/vendor/linejs/_dist/client/features/message/square.d.ts.map +1 -0
  129. package/dist/src/vendor/linejs/_dist/client/features/message/talk.d.ts +87 -0
  130. package/dist/src/vendor/linejs/_dist/client/features/message/talk.d.ts.map +1 -0
  131. package/dist/src/vendor/linejs/_dist/client/features/message/types.d.ts +29 -0
  132. package/dist/src/vendor/linejs/_dist/client/features/message/types.d.ts.map +1 -0
  133. package/dist/src/vendor/linejs/_dist/client/features/square/mod.d.ts +65 -0
  134. package/dist/src/vendor/linejs/_dist/client/features/square/mod.d.ts.map +1 -0
  135. package/dist/src/vendor/linejs/_dist/client/features/user/mod.d.ts +10 -0
  136. package/dist/src/vendor/linejs/_dist/client/features/user/mod.d.ts.map +1 -0
  137. package/dist/src/vendor/linejs/_dist/client/login.d.ts +41 -0
  138. package/dist/src/vendor/linejs/_dist/client/login.d.ts.map +1 -0
  139. package/dist/src/vendor/linejs/_dist/client/mod.d.ts +3 -0
  140. package/dist/src/vendor/linejs/_dist/client/mod.d.ts.map +1 -0
  141. package/dist/src/vendor/linejs/base/core/mod.js +197 -0
  142. package/dist/src/vendor/linejs/base/core/mod.js.map +1 -0
  143. package/dist/src/vendor/linejs/base/core/typed-event-emitter/index.js +43 -0
  144. package/dist/src/vendor/linejs/base/core/typed-event-emitter/index.js.map +1 -0
  145. package/dist/src/vendor/linejs/base/core/utils/continue.js +42 -0
  146. package/dist/src/vendor/linejs/base/core/utils/continue.js.map +1 -0
  147. package/dist/src/vendor/linejs/base/core/utils/devices.js +67 -0
  148. package/dist/src/vendor/linejs/base/core/utils/devices.js.map +1 -0
  149. package/dist/src/vendor/linejs/base/core/utils/error.js +11 -0
  150. package/dist/src/vendor/linejs/base/core/utils/error.js.map +1 -0
  151. package/dist/src/vendor/linejs/base/core/utils/events.js +1 -0
  152. package/dist/src/vendor/linejs/base/core/utils/events.js.map +1 -0
  153. package/dist/src/vendor/linejs/base/e2ee/mod.js +817 -0
  154. package/dist/src/vendor/linejs/base/e2ee/mod.js.map +1 -0
  155. package/dist/src/vendor/linejs/base/login/mod.js +594 -0
  156. package/dist/src/vendor/linejs/base/login/mod.js.map +1 -0
  157. package/dist/src/vendor/linejs/base/login/regex.js +6 -0
  158. package/dist/src/vendor/linejs/base/login/regex.js.map +1 -0
  159. package/dist/src/vendor/linejs/base/login/rsa-verify.js +73 -0
  160. package/dist/src/vendor/linejs/base/login/rsa-verify.js.map +1 -0
  161. package/dist/src/vendor/linejs/base/mod.js +6 -0
  162. package/dist/src/vendor/linejs/base/mod.js.map +1 -0
  163. package/dist/src/vendor/linejs/base/obs/mime.js +138 -0
  164. package/dist/src/vendor/linejs/base/obs/mime.js.map +1 -0
  165. package/dist/src/vendor/linejs/base/obs/mod.js +309 -0
  166. package/dist/src/vendor/linejs/base/obs/mod.js.map +1 -0
  167. package/dist/src/vendor/linejs/base/polling/mod.js +153 -0
  168. package/dist/src/vendor/linejs/base/polling/mod.js.map +1 -0
  169. package/dist/src/vendor/linejs/base/push/conn.js +254 -0
  170. package/dist/src/vendor/linejs/base/push/conn.js.map +1 -0
  171. package/dist/src/vendor/linejs/base/push/connData.js +81 -0
  172. package/dist/src/vendor/linejs/base/push/connData.js.map +1 -0
  173. package/dist/src/vendor/linejs/base/push/connManager.js +422 -0
  174. package/dist/src/vendor/linejs/base/push/connManager.js.map +1 -0
  175. package/dist/src/vendor/linejs/base/push/mod.js +2 -0
  176. package/dist/src/vendor/linejs/base/push/mod.js.map +1 -0
  177. package/dist/src/vendor/linejs/base/request/mod.js +195 -0
  178. package/dist/src/vendor/linejs/base/request/mod.js.map +1 -0
  179. package/dist/src/vendor/linejs/base/service/auth/mod.js +83 -0
  180. package/dist/src/vendor/linejs/base/service/auth/mod.js.map +1 -0
  181. package/dist/src/vendor/linejs/base/service/call/mod.js +63 -0
  182. package/dist/src/vendor/linejs/base/service/call/mod.js.map +1 -0
  183. package/dist/src/vendor/linejs/base/service/channel/mod.js +52 -0
  184. package/dist/src/vendor/linejs/base/service/channel/mod.js.map +1 -0
  185. package/dist/src/vendor/linejs/base/service/liff/mod.js +240 -0
  186. package/dist/src/vendor/linejs/base/service/liff/mod.js.map +1 -0
  187. package/dist/src/vendor/linejs/base/service/livetalk/mod.js +90 -0
  188. package/dist/src/vendor/linejs/base/service/livetalk/mod.js.map +1 -0
  189. package/dist/src/vendor/linejs/base/service/mod.js +9 -0
  190. package/dist/src/vendor/linejs/base/service/mod.js.map +1 -0
  191. package/dist/src/vendor/linejs/base/service/relation/mod.js +86 -0
  192. package/dist/src/vendor/linejs/base/service/relation/mod.js.map +1 -0
  193. package/dist/src/vendor/linejs/base/service/square/mod.js +414 -0
  194. package/dist/src/vendor/linejs/base/service/square/mod.js.map +1 -0
  195. package/dist/src/vendor/linejs/base/service/talk/mod.js +525 -0
  196. package/dist/src/vendor/linejs/base/service/talk/mod.js.map +1 -0
  197. package/dist/src/vendor/linejs/base/service/types.js +1 -0
  198. package/dist/src/vendor/linejs/base/service/types.js.map +1 -0
  199. package/dist/src/vendor/linejs/base/storage/base.js +5 -0
  200. package/dist/src/vendor/linejs/base/storage/base.js.map +1 -0
  201. package/dist/src/vendor/linejs/base/storage/file.js +63 -0
  202. package/dist/src/vendor/linejs/base/storage/file.js.map +1 -0
  203. package/dist/src/vendor/linejs/base/storage/memory.js +46 -0
  204. package/dist/src/vendor/linejs/base/storage/memory.js.map +1 -0
  205. package/dist/src/vendor/linejs/base/storage/mod.js +4 -0
  206. package/dist/src/vendor/linejs/base/storage/mod.js.map +1 -0
  207. package/dist/src/vendor/linejs/base/thrift/README.md +53 -0
  208. package/dist/src/vendor/linejs/base/thrift/mod.js +22 -0
  209. package/dist/src/vendor/linejs/base/thrift/mod.js.map +1 -0
  210. package/dist/src/vendor/linejs/base/thrift/readwrite/declares.js +54 -0
  211. package/dist/src/vendor/linejs/base/thrift/readwrite/declares.js.map +1 -0
  212. package/dist/src/vendor/linejs/base/thrift/readwrite/read.js +115 -0
  213. package/dist/src/vendor/linejs/base/thrift/readwrite/read.js.map +1 -0
  214. package/dist/src/vendor/linejs/base/thrift/readwrite/struct.js +14449 -0
  215. package/dist/src/vendor/linejs/base/thrift/readwrite/struct.js.map +1 -0
  216. package/dist/src/vendor/linejs/base/thrift/readwrite/tmc.js +460 -0
  217. package/dist/src/vendor/linejs/base/thrift/readwrite/tmc.js.map +1 -0
  218. package/dist/src/vendor/linejs/base/thrift/readwrite/write.js +234 -0
  219. package/dist/src/vendor/linejs/base/thrift/readwrite/write.js.map +1 -0
  220. package/dist/src/vendor/linejs/base/thrift/rename/parser.js +121 -0
  221. package/dist/src/vendor/linejs/base/thrift/rename/parser.js.map +1 -0
  222. package/dist/src/vendor/linejs/base/timeline/mod.js +360 -0
  223. package/dist/src/vendor/linejs/base/timeline/mod.js.map +1 -0
  224. package/dist/src/vendor/linejs/base/types.js +8 -0
  225. package/dist/src/vendor/linejs/base/types.js.map +1 -0
  226. package/dist/src/vendor/linejs/client/client.js +185 -0
  227. package/dist/src/vendor/linejs/client/client.js.map +1 -0
  228. package/dist/src/vendor/linejs/client/features/chat/fetcher.js +29 -0
  229. package/dist/src/vendor/linejs/client/features/chat/fetcher.js.map +1 -0
  230. package/dist/src/vendor/linejs/client/features/chat/mod.js +118 -0
  231. package/dist/src/vendor/linejs/client/features/chat/mod.js.map +1 -0
  232. package/dist/src/vendor/linejs/client/features/message/internal-types.js +1 -0
  233. package/dist/src/vendor/linejs/client/features/message/internal-types.js.map +1 -0
  234. package/dist/src/vendor/linejs/client/features/message/mod.js +5 -0
  235. package/dist/src/vendor/linejs/client/features/message/mod.js.map +1 -0
  236. package/dist/src/vendor/linejs/client/features/message/square.js +464 -0
  237. package/dist/src/vendor/linejs/client/features/message/square.js.map +1 -0
  238. package/dist/src/vendor/linejs/client/features/message/talk.js +340 -0
  239. package/dist/src/vendor/linejs/client/features/message/talk.js.map +1 -0
  240. package/dist/src/vendor/linejs/client/features/message/types.js +1 -0
  241. package/dist/src/vendor/linejs/client/features/message/types.js.map +1 -0
  242. package/dist/src/vendor/linejs/client/features/message/utils.js +83 -0
  243. package/dist/src/vendor/linejs/client/features/message/utils.js.map +1 -0
  244. package/dist/src/vendor/linejs/client/features/square/mod.js +173 -0
  245. package/dist/src/vendor/linejs/client/features/square/mod.js.map +1 -0
  246. package/dist/src/vendor/linejs/client/features/user/mod.js +9 -0
  247. package/dist/src/vendor/linejs/client/features/user/mod.js.map +1 -0
  248. package/dist/src/vendor/linejs/client/login.js +36 -0
  249. package/dist/src/vendor/linejs/client/login.js.map +1 -0
  250. package/dist/src/vendor/linejs/client/mod.js +3 -0
  251. package/dist/src/vendor/linejs/client/mod.js.map +1 -0
  252. package/dist/src/vendor/linejs/deno.json +24 -0
  253. package/dist/src/vendor/linejs/package.json +35 -0
  254. package/dist/src/vendor/linejs-types/LICENSE +21 -0
  255. package/dist/src/vendor/linejs-types/README.md +11 -0
  256. package/dist/src/vendor/linejs-types/_dist/line_types.d.ts +11629 -0
  257. package/dist/src/vendor/linejs-types/_dist/line_types.d.ts.map +1 -0
  258. package/dist/src/vendor/linejs-types/_dist/thrift.d.ts +4 -0
  259. package/dist/src/vendor/linejs-types/_dist/thrift.d.ts.map +1 -0
  260. package/dist/src/vendor/linejs-types/deno.json +12 -0
  261. package/dist/src/vendor/linejs-types/line_types.js +2704 -0
  262. package/dist/src/vendor/linejs-types/line_types.js.map +1 -0
  263. package/dist/src/vendor/linejs-types/package.json +20 -0
  264. package/dist/src/vendor/linejs-types/thrift.js +37670 -0
  265. package/dist/src/vendor/linejs-types/thrift.js.map +1 -0
  266. package/dist/src/vendor/loose-types/LICENSE +21 -0
  267. package/dist/src/vendor/loose-types/README.md +30 -0
  268. package/dist/src/vendor/loose-types/_dist/mod.d.ts +23 -0
  269. package/dist/src/vendor/loose-types/_dist/mod.d.ts.map +1 -0
  270. package/dist/src/vendor/loose-types/deno.json +7 -0
  271. package/dist/src/vendor/loose-types/mod.js +7 -0
  272. package/dist/src/vendor/loose-types/mod.js.map +1 -0
  273. package/dist/src/vendor/loose-types/package.json +14 -0
  274. package/dist/src/vendor/runtime-shims.d.ts +13 -0
  275. package/docs/content/docs/cli/kakaotalk.mdx +3 -39
  276. package/e2e/config.ts +1 -1
  277. package/package.json +1 -2
  278. package/scripts/postbuild.ts +5 -1
  279. package/skills/agent-channeltalk/SKILL.md +1 -1
  280. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  281. package/skills/agent-discord/SKILL.md +1 -1
  282. package/skills/agent-discordbot/SKILL.md +1 -1
  283. package/skills/agent-instagram/SKILL.md +1 -1
  284. package/skills/agent-kakaotalk/SKILL.md +11 -63
  285. package/skills/agent-kakaotalk/references/authentication.md +4 -69
  286. package/skills/agent-kakaotalk/references/common-patterns.md +13 -0
  287. package/skills/agent-line/SKILL.md +1 -1
  288. package/skills/agent-slack/SKILL.md +1 -1
  289. package/skills/agent-slackbot/SKILL.md +1 -1
  290. package/skills/agent-teams/SKILL.md +1 -1
  291. package/skills/agent-telegram/SKILL.md +1 -1
  292. package/skills/agent-webex/SKILL.md +1 -1
  293. package/skills/agent-wechatbot/SKILL.md +1 -1
  294. package/skills/agent-whatsapp/SKILL.md +1 -1
  295. package/skills/agent-whatsappbot/SKILL.md +1 -1
  296. package/src/platforms/kakaotalk/client.ts +25 -10
  297. package/src/platforms/kakaotalk/commands/auth.ts +22 -73
  298. package/src/platforms/kakaotalk/credential-manager.ts +1 -0
  299. package/src/platforms/kakaotalk/index.ts +1 -0
  300. package/src/platforms/kakaotalk/listener.test.ts +2 -2
  301. package/src/platforms/kakaotalk/listener.ts +2 -2
  302. package/src/platforms/kakaotalk/protocol/config.ts +26 -2
  303. package/src/platforms/kakaotalk/protocol/session.ts +16 -10
  304. package/src/platforms/kakaotalk/types.ts +4 -0
  305. package/src/platforms/line/client.ts +2 -2
  306. package/src/tui/adapters/kakaotalk-adapter.ts +5 -2
  307. package/src/vendor/linejs/LICENSE +21 -0
  308. package/src/vendor/linejs/README.md +89 -0
  309. package/src/vendor/linejs/_dist/base/core/mod.d.ts +125 -0
  310. package/src/vendor/linejs/_dist/base/core/mod.d.ts.map +1 -0
  311. package/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts +13 -0
  312. package/src/vendor/linejs/_dist/base/core/typed-event-emitter/index.d.ts.map +1 -0
  313. package/src/vendor/linejs/_dist/base/core/utils/continue.d.ts +10 -0
  314. package/src/vendor/linejs/_dist/base/core/utils/continue.d.ts.map +1 -0
  315. package/src/vendor/linejs/_dist/base/core/utils/devices.d.ts +8 -0
  316. package/src/vendor/linejs/_dist/base/core/utils/devices.d.ts.map +1 -0
  317. package/src/vendor/linejs/_dist/base/core/utils/error.d.ts +8 -0
  318. package/src/vendor/linejs/_dist/base/core/utils/error.d.ts.map +1 -0
  319. package/src/vendor/linejs/_dist/base/core/utils/events.d.ts +22 -0
  320. package/src/vendor/linejs/_dist/base/core/utils/events.d.ts.map +1 -0
  321. package/src/vendor/linejs/_dist/base/e2ee/mod.d.ts +64 -0
  322. package/src/vendor/linejs/_dist/base/e2ee/mod.d.ts.map +1 -0
  323. package/src/vendor/linejs/_dist/base/login/mod.d.ts +138 -0
  324. package/src/vendor/linejs/_dist/base/login/mod.d.ts.map +1 -0
  325. package/src/vendor/linejs/_dist/base/mod.d.ts +6 -0
  326. package/src/vendor/linejs/_dist/base/mod.d.ts.map +1 -0
  327. package/src/vendor/linejs/_dist/base/obs/mod.d.ts +100 -0
  328. package/src/vendor/linejs/_dist/base/obs/mod.d.ts.map +1 -0
  329. package/src/vendor/linejs/_dist/base/polling/mod.d.ts +55 -0
  330. package/src/vendor/linejs/_dist/base/polling/mod.d.ts.map +1 -0
  331. package/src/vendor/linejs/_dist/base/push/conn.d.ts +39 -0
  332. package/src/vendor/linejs/_dist/base/push/conn.d.ts.map +1 -0
  333. package/src/vendor/linejs/_dist/base/push/connData.d.ts +19 -0
  334. package/src/vendor/linejs/_dist/base/push/connData.d.ts.map +1 -0
  335. package/src/vendor/linejs/_dist/base/push/connManager.d.ts +43 -0
  336. package/src/vendor/linejs/_dist/base/push/connManager.d.ts.map +1 -0
  337. package/src/vendor/linejs/_dist/base/push/mod.d.ts +2 -0
  338. package/src/vendor/linejs/_dist/base/push/mod.d.ts.map +1 -0
  339. package/src/vendor/linejs/_dist/base/request/mod.d.ts +45 -0
  340. package/src/vendor/linejs/_dist/base/request/mod.d.ts.map +1 -0
  341. package/src/vendor/linejs/_dist/base/service/auth/mod.d.ts +32 -0
  342. package/src/vendor/linejs/_dist/base/service/auth/mod.d.ts.map +1 -0
  343. package/src/vendor/linejs/_dist/base/service/call/mod.d.ts +29 -0
  344. package/src/vendor/linejs/_dist/base/service/call/mod.d.ts.map +1 -0
  345. package/src/vendor/linejs/_dist/base/service/channel/mod.d.ts +28 -0
  346. package/src/vendor/linejs/_dist/base/service/channel/mod.d.ts.map +1 -0
  347. package/src/vendor/linejs/_dist/base/service/liff/mod.d.ts +51 -0
  348. package/src/vendor/linejs/_dist/base/service/liff/mod.d.ts.map +1 -0
  349. package/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts +38 -0
  350. package/src/vendor/linejs/_dist/base/service/livetalk/mod.d.ts.map +1 -0
  351. package/src/vendor/linejs/_dist/base/service/mod.d.ts +9 -0
  352. package/src/vendor/linejs/_dist/base/service/mod.d.ts.map +1 -0
  353. package/src/vendor/linejs/_dist/base/service/relation/mod.d.ts +30 -0
  354. package/src/vendor/linejs/_dist/base/service/relation/mod.d.ts.map +1 -0
  355. package/src/vendor/linejs/_dist/base/service/square/mod.d.ts +162 -0
  356. package/src/vendor/linejs/_dist/base/service/square/mod.d.ts.map +1 -0
  357. package/src/vendor/linejs/_dist/base/service/talk/mod.d.ts +194 -0
  358. package/src/vendor/linejs/_dist/base/service/talk/mod.d.ts.map +1 -0
  359. package/src/vendor/linejs/_dist/base/service/types.d.ts +9 -0
  360. package/src/vendor/linejs/_dist/base/service/types.d.ts.map +1 -0
  361. package/src/vendor/linejs/_dist/base/storage/base.d.ts +34 -0
  362. package/src/vendor/linejs/_dist/base/storage/base.d.ts.map +1 -0
  363. package/src/vendor/linejs/_dist/base/storage/file.d.ts +20 -0
  364. package/src/vendor/linejs/_dist/base/storage/file.d.ts.map +1 -0
  365. package/src/vendor/linejs/_dist/base/storage/memory.d.ts +19 -0
  366. package/src/vendor/linejs/_dist/base/storage/memory.d.ts.map +1 -0
  367. package/src/vendor/linejs/_dist/base/storage/mod.d.ts +4 -0
  368. package/src/vendor/linejs/_dist/base/storage/mod.d.ts.map +1 -0
  369. package/src/vendor/linejs/_dist/base/thrift/mod.d.ts +14 -0
  370. package/src/vendor/linejs/_dist/base/thrift/mod.d.ts.map +1 -0
  371. package/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts +20 -0
  372. package/src/vendor/linejs/_dist/base/thrift/readwrite/declares.d.ts.map +1 -0
  373. package/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts +7 -0
  374. package/src/vendor/linejs/_dist/base/thrift/readwrite/read.d.ts.map +1 -0
  375. package/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts +1109 -0
  376. package/src/vendor/linejs/_dist/base/thrift/readwrite/struct.d.ts.map +1 -0
  377. package/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts +3 -0
  378. package/src/vendor/linejs/_dist/base/thrift/readwrite/write.d.ts.map +1 -0
  379. package/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts +7 -0
  380. package/src/vendor/linejs/_dist/base/thrift/rename/parser.d.ts.map +1 -0
  381. package/src/vendor/linejs/_dist/base/timeline/mod.d.ts +83 -0
  382. package/src/vendor/linejs/_dist/base/timeline/mod.d.ts.map +1 -0
  383. package/src/vendor/linejs/_dist/base/types.d.ts +11 -0
  384. package/src/vendor/linejs/_dist/base/types.d.ts.map +1 -0
  385. package/src/vendor/linejs/_dist/client/client.d.ts +70 -0
  386. package/src/vendor/linejs/_dist/client/client.d.ts.map +1 -0
  387. package/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts +5 -0
  388. package/src/vendor/linejs/_dist/client/features/chat/fetcher.d.ts.map +1 -0
  389. package/src/vendor/linejs/_dist/client/features/chat/mod.d.ts +58 -0
  390. package/src/vendor/linejs/_dist/client/features/chat/mod.d.ts.map +1 -0
  391. package/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts +5 -0
  392. package/src/vendor/linejs/_dist/client/features/message/internal-types.d.ts.map +1 -0
  393. package/src/vendor/linejs/_dist/client/features/message/mod.d.ts +3 -0
  394. package/src/vendor/linejs/_dist/client/features/message/mod.d.ts.map +1 -0
  395. package/src/vendor/linejs/_dist/client/features/message/square.d.ts +94 -0
  396. package/src/vendor/linejs/_dist/client/features/message/square.d.ts.map +1 -0
  397. package/src/vendor/linejs/_dist/client/features/message/talk.d.ts +87 -0
  398. package/src/vendor/linejs/_dist/client/features/message/talk.d.ts.map +1 -0
  399. package/src/vendor/linejs/_dist/client/features/message/types.d.ts +29 -0
  400. package/src/vendor/linejs/_dist/client/features/message/types.d.ts.map +1 -0
  401. package/src/vendor/linejs/_dist/client/features/square/mod.d.ts +65 -0
  402. package/src/vendor/linejs/_dist/client/features/square/mod.d.ts.map +1 -0
  403. package/src/vendor/linejs/_dist/client/features/user/mod.d.ts +10 -0
  404. package/src/vendor/linejs/_dist/client/features/user/mod.d.ts.map +1 -0
  405. package/src/vendor/linejs/_dist/client/login.d.ts +41 -0
  406. package/src/vendor/linejs/_dist/client/login.d.ts.map +1 -0
  407. package/src/vendor/linejs/_dist/client/mod.d.ts +3 -0
  408. package/src/vendor/linejs/_dist/client/mod.d.ts.map +1 -0
  409. package/src/vendor/linejs/base/core/mod.js +197 -0
  410. package/src/vendor/linejs/base/core/mod.js.map +1 -0
  411. package/src/vendor/linejs/base/core/typed-event-emitter/index.js +43 -0
  412. package/src/vendor/linejs/base/core/typed-event-emitter/index.js.map +1 -0
  413. package/src/vendor/linejs/base/core/utils/continue.js +42 -0
  414. package/src/vendor/linejs/base/core/utils/continue.js.map +1 -0
  415. package/src/vendor/linejs/base/core/utils/devices.js +67 -0
  416. package/src/vendor/linejs/base/core/utils/devices.js.map +1 -0
  417. package/src/vendor/linejs/base/core/utils/error.js +11 -0
  418. package/src/vendor/linejs/base/core/utils/error.js.map +1 -0
  419. package/src/vendor/linejs/base/core/utils/events.js +1 -0
  420. package/src/vendor/linejs/base/core/utils/events.js.map +1 -0
  421. package/src/vendor/linejs/base/e2ee/mod.js +817 -0
  422. package/src/vendor/linejs/base/e2ee/mod.js.map +1 -0
  423. package/src/vendor/linejs/base/login/mod.js +594 -0
  424. package/src/vendor/linejs/base/login/mod.js.map +1 -0
  425. package/src/vendor/linejs/base/login/regex.js +6 -0
  426. package/src/vendor/linejs/base/login/regex.js.map +1 -0
  427. package/src/vendor/linejs/base/login/rsa-verify.js +73 -0
  428. package/src/vendor/linejs/base/login/rsa-verify.js.map +1 -0
  429. package/src/vendor/linejs/base/mod.js +6 -0
  430. package/src/vendor/linejs/base/mod.js.map +1 -0
  431. package/src/vendor/linejs/base/obs/mime.js +138 -0
  432. package/src/vendor/linejs/base/obs/mime.js.map +1 -0
  433. package/src/vendor/linejs/base/obs/mod.js +309 -0
  434. package/src/vendor/linejs/base/obs/mod.js.map +1 -0
  435. package/src/vendor/linejs/base/polling/mod.js +153 -0
  436. package/src/vendor/linejs/base/polling/mod.js.map +1 -0
  437. package/src/vendor/linejs/base/push/conn.js +254 -0
  438. package/src/vendor/linejs/base/push/conn.js.map +1 -0
  439. package/src/vendor/linejs/base/push/connData.js +81 -0
  440. package/src/vendor/linejs/base/push/connData.js.map +1 -0
  441. package/src/vendor/linejs/base/push/connManager.js +422 -0
  442. package/src/vendor/linejs/base/push/connManager.js.map +1 -0
  443. package/src/vendor/linejs/base/push/mod.js +2 -0
  444. package/src/vendor/linejs/base/push/mod.js.map +1 -0
  445. package/src/vendor/linejs/base/request/mod.js +195 -0
  446. package/src/vendor/linejs/base/request/mod.js.map +1 -0
  447. package/src/vendor/linejs/base/service/auth/mod.js +83 -0
  448. package/src/vendor/linejs/base/service/auth/mod.js.map +1 -0
  449. package/src/vendor/linejs/base/service/call/mod.js +63 -0
  450. package/src/vendor/linejs/base/service/call/mod.js.map +1 -0
  451. package/src/vendor/linejs/base/service/channel/mod.js +52 -0
  452. package/src/vendor/linejs/base/service/channel/mod.js.map +1 -0
  453. package/src/vendor/linejs/base/service/liff/mod.js +240 -0
  454. package/src/vendor/linejs/base/service/liff/mod.js.map +1 -0
  455. package/src/vendor/linejs/base/service/livetalk/mod.js +90 -0
  456. package/src/vendor/linejs/base/service/livetalk/mod.js.map +1 -0
  457. package/src/vendor/linejs/base/service/mod.js +9 -0
  458. package/src/vendor/linejs/base/service/mod.js.map +1 -0
  459. package/src/vendor/linejs/base/service/relation/mod.js +86 -0
  460. package/src/vendor/linejs/base/service/relation/mod.js.map +1 -0
  461. package/src/vendor/linejs/base/service/square/mod.js +414 -0
  462. package/src/vendor/linejs/base/service/square/mod.js.map +1 -0
  463. package/src/vendor/linejs/base/service/talk/mod.js +525 -0
  464. package/src/vendor/linejs/base/service/talk/mod.js.map +1 -0
  465. package/src/vendor/linejs/base/service/types.js +1 -0
  466. package/src/vendor/linejs/base/service/types.js.map +1 -0
  467. package/src/vendor/linejs/base/storage/base.js +5 -0
  468. package/src/vendor/linejs/base/storage/base.js.map +1 -0
  469. package/src/vendor/linejs/base/storage/file.js +63 -0
  470. package/src/vendor/linejs/base/storage/file.js.map +1 -0
  471. package/src/vendor/linejs/base/storage/memory.js +46 -0
  472. package/src/vendor/linejs/base/storage/memory.js.map +1 -0
  473. package/src/vendor/linejs/base/storage/mod.js +4 -0
  474. package/src/vendor/linejs/base/storage/mod.js.map +1 -0
  475. package/src/vendor/linejs/base/thrift/README.md +53 -0
  476. package/src/vendor/linejs/base/thrift/mod.js +22 -0
  477. package/src/vendor/linejs/base/thrift/mod.js.map +1 -0
  478. package/src/vendor/linejs/base/thrift/readwrite/declares.js +54 -0
  479. package/src/vendor/linejs/base/thrift/readwrite/declares.js.map +1 -0
  480. package/src/vendor/linejs/base/thrift/readwrite/read.js +115 -0
  481. package/src/vendor/linejs/base/thrift/readwrite/read.js.map +1 -0
  482. package/src/vendor/linejs/base/thrift/readwrite/struct.js +14449 -0
  483. package/src/vendor/linejs/base/thrift/readwrite/struct.js.map +1 -0
  484. package/src/vendor/linejs/base/thrift/readwrite/tmc.js +460 -0
  485. package/src/vendor/linejs/base/thrift/readwrite/tmc.js.map +1 -0
  486. package/src/vendor/linejs/base/thrift/readwrite/write.js +234 -0
  487. package/src/vendor/linejs/base/thrift/readwrite/write.js.map +1 -0
  488. package/src/vendor/linejs/base/thrift/rename/parser.js +121 -0
  489. package/src/vendor/linejs/base/thrift/rename/parser.js.map +1 -0
  490. package/src/vendor/linejs/base/timeline/mod.js +360 -0
  491. package/src/vendor/linejs/base/timeline/mod.js.map +1 -0
  492. package/src/vendor/linejs/base/types.js +8 -0
  493. package/src/vendor/linejs/base/types.js.map +1 -0
  494. package/src/vendor/linejs/client/client.js +185 -0
  495. package/src/vendor/linejs/client/client.js.map +1 -0
  496. package/src/vendor/linejs/client/features/chat/fetcher.js +29 -0
  497. package/src/vendor/linejs/client/features/chat/fetcher.js.map +1 -0
  498. package/src/vendor/linejs/client/features/chat/mod.js +118 -0
  499. package/src/vendor/linejs/client/features/chat/mod.js.map +1 -0
  500. package/src/vendor/linejs/client/features/message/internal-types.js +1 -0
  501. package/src/vendor/linejs/client/features/message/internal-types.js.map +1 -0
  502. package/src/vendor/linejs/client/features/message/mod.js +5 -0
  503. package/src/vendor/linejs/client/features/message/mod.js.map +1 -0
  504. package/src/vendor/linejs/client/features/message/square.js +464 -0
  505. package/src/vendor/linejs/client/features/message/square.js.map +1 -0
  506. package/src/vendor/linejs/client/features/message/talk.js +340 -0
  507. package/src/vendor/linejs/client/features/message/talk.js.map +1 -0
  508. package/src/vendor/linejs/client/features/message/types.js +1 -0
  509. package/src/vendor/linejs/client/features/message/types.js.map +1 -0
  510. package/src/vendor/linejs/client/features/message/utils.js +83 -0
  511. package/src/vendor/linejs/client/features/message/utils.js.map +1 -0
  512. package/src/vendor/linejs/client/features/square/mod.js +173 -0
  513. package/src/vendor/linejs/client/features/square/mod.js.map +1 -0
  514. package/src/vendor/linejs/client/features/user/mod.js +9 -0
  515. package/src/vendor/linejs/client/features/user/mod.js.map +1 -0
  516. package/src/vendor/linejs/client/login.js +36 -0
  517. package/src/vendor/linejs/client/login.js.map +1 -0
  518. package/src/vendor/linejs/client/mod.js +3 -0
  519. package/src/vendor/linejs/client/mod.js.map +1 -0
  520. package/src/vendor/linejs/deno.json +24 -0
  521. package/src/vendor/linejs/package.json +35 -0
  522. package/src/vendor/linejs-types/LICENSE +21 -0
  523. package/src/vendor/linejs-types/README.md +11 -0
  524. package/src/vendor/linejs-types/_dist/line_types.d.ts +11629 -0
  525. package/src/vendor/linejs-types/_dist/line_types.d.ts.map +1 -0
  526. package/src/vendor/linejs-types/_dist/thrift.d.ts +4 -0
  527. package/src/vendor/linejs-types/_dist/thrift.d.ts.map +1 -0
  528. package/src/vendor/linejs-types/deno.json +12 -0
  529. package/src/vendor/linejs-types/line_types.js +2704 -0
  530. package/src/vendor/linejs-types/line_types.js.map +1 -0
  531. package/src/vendor/linejs-types/package.json +20 -0
  532. package/src/vendor/linejs-types/thrift.js +37670 -0
  533. package/src/vendor/linejs-types/thrift.js.map +1 -0
  534. package/src/vendor/loose-types/LICENSE +21 -0
  535. package/src/vendor/loose-types/README.md +30 -0
  536. package/src/vendor/loose-types/_dist/mod.d.ts +23 -0
  537. package/src/vendor/loose-types/_dist/mod.d.ts.map +1 -0
  538. package/src/vendor/loose-types/deno.json +7 -0
  539. package/src/vendor/loose-types/mod.js +7 -0
  540. package/src/vendor/loose-types/mod.js.map +1 -0
  541. package/src/vendor/loose-types/package.json +14 -0
  542. package/src/vendor/runtime-shims.d.ts +13 -0
  543. package/tsconfig.json +7 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-wechatbot
3
3
  description: Interact with WeChat Official Account using API credentials - send messages, manage templates, list followers
4
- version: 2.5.0
4
+ version: 2.6.1
5
5
  allowed-tools: Bash(agent-wechatbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-whatsapp
3
3
  description: Interact with WhatsApp - send messages, read chats, manage conversations
4
- version: 2.5.0
4
+ version: 2.6.1
5
5
  allowed-tools: Bash(agent-whatsapp:*)
6
6
  metadata:
7
7
  openclaw:
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: agent-whatsappbot
3
3
  description: Interact with WhatsApp using Cloud API credentials - send messages, manage templates
4
- version: 2.5.0
4
+ version: 2.6.1
5
5
  allowed-tools: Bash(agent-whatsappbot:*)
6
6
  metadata:
7
7
  openclaw:
@@ -6,10 +6,10 @@ import { join } from 'node:path'
6
6
 
7
7
  import { warn } from '@/shared/utils/stderr'
8
8
 
9
- import { APP_VERSION, LANG, OS } from './protocol/config'
9
+ import { LANG, PC_OS_NAME, getLocoDeviceConfig } from './protocol/config'
10
10
  import { LocoSession } from './protocol/session'
11
11
  import type { ChatListResponse, LoginListResponse, SyncState } from './protocol/types'
12
- import type { KakaoChat, KakaoMessage, KakaoProfile, KakaoSendResult } from './types'
12
+ import type { KakaoChat, KakaoDeviceType, KakaoMessage, KakaoProfile, KakaoSendResult } from './types'
13
13
 
14
14
  export class KakaoTalkError extends Error {
15
15
  code: string
@@ -231,12 +231,13 @@ export class KakaoTalkClient {
231
231
  private oauthToken: string | null = null
232
232
  private userId: string | null = null
233
233
  private deviceUuid: string | null = null
234
+ private deviceType: KakaoDeviceType = 'tablet'
234
235
  private state: SessionState | null = null
235
236
  private initPromise: Promise<SessionState> | null = null
236
237
  private closed = false
237
238
 
238
239
  async login(
239
- credentials?: { oauthToken: string; userId: string; deviceUuid?: string },
240
+ credentials?: { oauthToken: string; userId: string; deviceUuid?: string; deviceType?: KakaoDeviceType },
240
241
  accountId?: string,
241
242
  ): Promise<this> {
242
243
  if (credentials) {
@@ -245,19 +246,26 @@ export class KakaoTalkClient {
245
246
  this.oauthToken = credentials.oauthToken
246
247
  this.userId = credentials.userId
247
248
  this.deviceUuid = credentials.deviceUuid ?? `agent-messenger-${credentials.userId}`
249
+ this.deviceType = credentials.deviceType ?? 'tablet'
248
250
  return this
249
251
  }
250
252
  const { ensureKakaoAuth } = await import('./ensure-auth')
251
253
  const account = await ensureKakaoAuth(accountId)
252
- return this.login({ oauthToken: account.oauth_token, userId: account.user_id, deviceUuid: account.device_uuid })
254
+ return this.login({
255
+ oauthToken: account.oauth_token,
256
+ userId: account.user_id,
257
+ deviceUuid: account.device_uuid,
258
+ deviceType: account.device_type,
259
+ })
253
260
  }
254
261
 
255
- getCredentials(): { oauthToken: string; userId: string; deviceUuid: string } {
262
+ getCredentials(): { oauthToken: string; userId: string; deviceUuid: string; deviceType: KakaoDeviceType } {
256
263
  this.ensureAuth()
257
264
  return {
258
265
  oauthToken: this.oauthToken!,
259
266
  userId: this.userId!,
260
267
  deviceUuid: this.deviceUuid!,
268
+ deviceType: this.deviceType,
261
269
  }
262
270
  }
263
271
 
@@ -315,7 +323,7 @@ export class KakaoTalkClient {
315
323
  const session = new LocoSession()
316
324
  try {
317
325
  const syncState = await loadSyncState(this.deviceUuid!)
318
- const loginResult = await session.login(this.oauthToken!, this.userId!, this.deviceUuid!, syncState)
326
+ const loginResult = await session.login(this.oauthToken!, this.userId!, this.deviceUuid!, syncState, this.deviceType)
319
327
 
320
328
  const newSyncState = mergeSyncState(syncState, loginResult)
321
329
  await saveSyncState(this.deviceUuid!, newSyncState)
@@ -500,17 +508,24 @@ export class KakaoTalkClient {
500
508
  async getProfile(): Promise<KakaoProfile> {
501
509
  this.ensureAuth()
502
510
  try {
511
+ const deviceConfig = getLocoDeviceConfig(this.deviceType)
512
+ const isPC = deviceConfig.os !== 'android'
513
+ const apiPrefix = isPC ? 'mac' : 'android'
514
+ const userAgent = isPC
515
+ ? `KT/${deviceConfig.appVersion} Md/${PC_OS_NAME} ${LANG}`
516
+ : `KT/${deviceConfig.appVersion} An/13 ${LANG}`
517
+
503
518
  const headers = {
504
519
  Authorization: `${this.oauthToken}-${this.deviceUuid}`,
505
- A: `${OS}/${APP_VERSION}/${LANG}`,
506
- 'User-Agent': `KT/${APP_VERSION} Md/macOS ${LANG}`,
520
+ A: `${deviceConfig.os}/${deviceConfig.appVersion}/${LANG}`,
521
+ 'User-Agent': userAgent,
507
522
  Accept: '*/*',
508
523
  'Accept-Language': LANG,
509
524
  }
510
525
 
511
526
  const [profileRes, settingsRes] = await Promise.all([
512
- fetch('https://katalk.kakao.com/mac/profile3/me.json', { headers }),
513
- fetch('https://katalk.kakao.com/mac/account/more_settings.json?since=0&lang=ko', { headers }),
527
+ fetch(`https://katalk.kakao.com/${apiPrefix}/profile3/me.json`, { headers }),
528
+ fetch(`https://katalk.kakao.com/${apiPrefix}/account/more_settings.json?since=0&lang=ko`, { headers }),
514
529
  ])
515
530
 
516
531
  if (!profileRes.ok) {
@@ -6,7 +6,7 @@ import { handleError } from '@/shared/utils/error-handler'
6
6
  import { formatOutput } from '@/shared/utils/output'
7
7
  import { info, error, debug } from '@/shared/utils/stderr'
8
8
 
9
- import { generateDeviceUuid, loginFlow } from '../auth/kakao-login'
9
+ import { loginFlow } from '../auth/kakao-login'
10
10
  import { CredentialManager } from '../credential-manager'
11
11
  import { KakaoTokenExtractor } from '../token-extractor'
12
12
  import {
@@ -23,7 +23,9 @@ function isInteractiveSession(): boolean {
23
23
  function hasTTY(): boolean {
24
24
  try {
25
25
  const { openSync, closeSync } = require('node:fs') as typeof import('node:fs')
26
- const fd = openSync('/dev/tty', 'r')
26
+ // CONIN$ is the Windows console input device; /dev/tty is the Unix equivalent
27
+ const ttyDevice = process.platform === 'win32' ? 'CONIN$' : '/dev/tty'
28
+ const fd = openSync(ttyDevice, 'r')
27
29
  closeSync(fd)
28
30
  return true
29
31
  } catch { return false }
@@ -178,6 +180,20 @@ async function promptHidden(message: string): Promise<string | undefined> {
178
180
  }
179
181
 
180
182
  async function promptHiddenTTY(message: string): Promise<string | undefined> {
183
+ if (process.platform === 'win32') {
184
+ const { execSync } = require('node:child_process') as typeof import('node:child_process')
185
+ try {
186
+ const escapedMessage = message.replace(/'/g, "''")
187
+ const ps = `$p = Read-Host '${escapedMessage}' -AsSecureString; [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR($p))`
188
+ const result = execSync(`powershell -NoProfile -Command "${ps}"`, {
189
+ encoding: 'utf-8',
190
+ timeout: 120_000,
191
+ stdio: ['inherit', 'pipe', 'inherit'],
192
+ })
193
+ return result.trim() || undefined
194
+ } catch { return undefined }
195
+ }
196
+
181
197
  const { createReadStream } = await import('node:fs')
182
198
  const { createInterface } = await import('node:readline/promises')
183
199
  const ttyIn = createReadStream('/dev/tty')
@@ -277,7 +293,8 @@ async function loginAction(options: KakaoAuthOptions): Promise<void> {
277
293
 
278
294
  const existing = await credManager.getAccount()
279
295
  const pendingState = await credManager.loadPendingLogin()
280
- const savedDeviceUuid = pendingState?.device_uuid ?? existing?.device_uuid
296
+ const existingUuid = existing?.auth_method === 'login' ? existing?.device_uuid : undefined
297
+ const savedDeviceUuid = pendingState?.device_uuid ?? existingUuid
281
298
 
282
299
  const onPasscodeDisplay = (code: string) => {
283
300
  if (interactive) {
@@ -355,6 +372,7 @@ async function handleLoginResult(
355
372
  refresh_token: result.credentials.refresh_token,
356
373
  device_uuid: result.credentials.device_uuid,
357
374
  device_type: result.credentials.device_type,
375
+ auth_method: 'login',
358
376
  created_at: now,
359
377
  updated_at: now,
360
378
  })
@@ -372,67 +390,6 @@ async function handleLoginResult(
372
390
  }
373
391
  }
374
392
 
375
- async function extractAction(options: {
376
- pretty?: boolean
377
- debug?: boolean
378
- unsafelyShowSecrets?: boolean
379
- }): Promise<void> {
380
- try {
381
- if (options.unsafelyShowSecrets) {
382
- options.debug = true
383
- }
384
- const debugLog = options.debug ? (msg: string) => debug(`[debug] ${msg}`) : undefined
385
- const extractor = new KakaoTokenExtractor(undefined, debugLog)
386
-
387
- const token = await extractor.extract()
388
-
389
- if (!token) {
390
- console.log(
391
- formatOutput(
392
- {
393
- error: 'No credentials found. Make sure KakaoTalk desktop app is installed and logged in.',
394
- hint: options.debug ? undefined : 'Run with --debug for more info.',
395
- },
396
- options.pretty,
397
- ),
398
- )
399
- process.exit(1)
400
- }
401
-
402
- if (options.debug) {
403
- const display = options.unsafelyShowSecrets
404
- ? token.oauth_token
405
- : `${token.oauth_token.substring(0, 12)}...`
406
- debug(`[debug] oauth_token: ${display}`)
407
- debug(`[debug] user_id: ${token.user_id}`)
408
- }
409
-
410
- const credManager = new CredentialManager()
411
- const accountId = token.user_id || 'default'
412
- const now = new Date().toISOString()
413
-
414
- await credManager.setAccount({
415
- account_id: accountId,
416
- oauth_token: token.oauth_token,
417
- user_id: token.user_id,
418
- refresh_token: token.refresh_token,
419
- device_uuid: token.device_uuid ?? generateDeviceUuid(),
420
- device_type: 'tablet',
421
- created_at: now,
422
- updated_at: now,
423
- })
424
-
425
- const config = await credManager.load()
426
- if (!config.current_account) {
427
- await credManager.setCurrentAccount(accountId)
428
- }
429
-
430
- console.log(formatOutput({ account_id: accountId, user_id: token.user_id, extracted: true }, options.pretty))
431
- } catch (error) {
432
- handleError(error as Error)
433
- }
434
- }
435
-
436
393
  async function listAction(options: { pretty?: boolean }): Promise<void> {
437
394
  try {
438
395
  const credManager = new CredentialManager()
@@ -483,7 +440,7 @@ async function statusAction(options: { account?: string; pretty?: boolean }): Pr
483
440
  const account = await credManager.getAccount(options.account)
484
441
 
485
442
  if (!account) {
486
- console.log(formatOutput({ error: 'No account configured. Run "auth login" or "auth extract" first.' }, options.pretty))
443
+ console.log(formatOutput({ error: 'No account configured. Run "auth login" first.' }, options.pretty))
487
444
  process.exit(1)
488
445
  }
489
446
 
@@ -533,14 +490,6 @@ export const authCommand = new Command('auth')
533
490
  .option('--debug', 'Show debug output')
534
491
  .action(loginAction),
535
492
  )
536
- .addCommand(
537
- new Command('extract')
538
- .description('Extract credentials from KakaoTalk desktop app (kicks desktop session)')
539
- .option('--pretty', 'Pretty print JSON output')
540
- .option('--debug', 'Show debug output for troubleshooting')
541
- .option('--unsafely-show-secrets', 'Show full token values in debug output')
542
- .action(extractAction),
543
- )
544
493
  .addCommand(
545
494
  new Command('list')
546
495
  .description('List all authenticated KakaoTalk accounts')
@@ -34,6 +34,7 @@ export class KakaoCredentialManager {
34
34
 
35
35
  async save(config: KakaoConfig): Promise<void> {
36
36
  await mkdir(this.configDir, { recursive: true })
37
+ // TODO: Windows does not honor mode 0o600 — consider platform-specific credential storage
37
38
  await writeFile(this.credentialsPath, JSON.stringify(config, null, 2))
38
39
  await chmod(this.credentialsPath, 0o600)
39
40
  }
@@ -4,6 +4,7 @@ export { KakaoTalkListener } from './listener'
4
4
  export type { PendingLoginState } from './credential-manager'
5
5
  export type {
6
6
  KakaoAccountCredentials,
7
+ KakaoAuthMethod,
7
8
  KakaoChat,
8
9
  KakaoConfig,
9
10
  KakaoDeviceType,
@@ -45,7 +45,7 @@ mock.module('./protocol/session', () => ({ LocoSession: MockLocoSession }))
45
45
 
46
46
  function createMockClient(overrides: Record<string, unknown> = {}) {
47
47
  return {
48
- getCredentials: mock(() => ({ oauthToken: 'token', userId: 'user1', deviceUuid: 'device1' })),
48
+ getCredentials: mock(() => ({ oauthToken: 'token', userId: 'user1', deviceUuid: 'device1', deviceType: 'tablet' as const })),
49
49
  ...overrides,
50
50
  } as any
51
51
  }
@@ -68,7 +68,7 @@ describe('KakaoTalkListener', () => {
68
68
  await listener.start()
69
69
 
70
70
  expect(mockLogin).toHaveBeenCalledTimes(1)
71
- expect(mockLogin).toHaveBeenCalledWith('token', 'user1', 'device1')
71
+ expect(mockLogin).toHaveBeenCalledWith('token', 'user1', 'device1', undefined, 'tablet')
72
72
  })
73
73
 
74
74
  test('is idempotent', async () => {
@@ -72,7 +72,7 @@ export class KakaoTalkListener {
72
72
  if (!this.running) return
73
73
 
74
74
  try {
75
- const { oauthToken, userId, deviceUuid } = this.client.getCredentials()
75
+ const { oauthToken, userId, deviceUuid, deviceType } = this.client.getCredentials()
76
76
  if (!this.running) return
77
77
 
78
78
  this.userId = userId
@@ -88,7 +88,7 @@ export class KakaoTalkListener {
88
88
  }
89
89
  })
90
90
 
91
- await session.login(oauthToken, userId, deviceUuid)
91
+ await session.login(oauthToken, userId, deviceUuid, undefined, deviceType)
92
92
 
93
93
  if (!this.running) {
94
94
  session.close()
@@ -1,6 +1,8 @@
1
1
  // Protocol constants for KakaoTalk LOCO.
2
2
  // See protocol/NOTICE.md for attribution of protocol knowledge.
3
3
 
4
+ import type { KakaoDeviceType } from '../types'
5
+
4
6
  // LOCO RSA public key (PKCS#1 DER, base64). RSA-2048, e=3.
5
7
  // Source: openkakao (MIT) — extracted from KakaoTalk macOS binary.
6
8
  export const LOCO_RSA_PUBLIC_KEY_DER_B64 =
@@ -17,8 +19,17 @@ export const BOOKING_PORT = 443
17
19
  export const CHECKIN_HOST = 'ticket-loco.kakao.com'
18
20
  export const CHECKIN_PORT = 995
19
21
 
20
- export const APP_VERSION = '26.2.0'
21
- export const OS = 'mac'
22
+ // PC slot identity — platform-aware: 'win' on Windows, 'mac' on macOS
23
+ const PC_APP_VERSION = '26.2.0'
24
+ const PC_OS: string = process.platform === 'win32' ? 'win' : 'mac'
25
+ export const PC_OS_NAME: string = process.platform === 'win32' ? 'Windows' : 'macOS'
26
+
27
+ // Android (tablet slot) identity — must match the Android sub-device agent
28
+ // used in auth/kakao-login.ts so the server sees a consistent tablet session.
29
+ const ANDROID_APP_VERSION = '25.9.2'
30
+ const ANDROID_OS = 'android'
31
+
32
+ // dtype: 2 = sub-device, 1 = main device (ref: node-kakao config.ts)
22
33
  export const DTYPE = 2
23
34
  export const MCCMNC = '99999'
24
35
  export const LANG = 'ko'
@@ -26,3 +37,16 @@ export const COUNTRY_ISO = 'KR'
26
37
  export const PROTOCOL_VERSION = '1'
27
38
 
28
39
  export const PING_INTERVAL_MS = 300_000
40
+
41
+ export interface LocoDeviceConfig {
42
+ os: string
43
+ appVersion: string
44
+ useSub: boolean
45
+ }
46
+
47
+ export function getLocoDeviceConfig(deviceType: KakaoDeviceType): LocoDeviceConfig {
48
+ if (deviceType === 'tablet') {
49
+ return { os: ANDROID_OS, appVersion: ANDROID_APP_VERSION, useSub: true }
50
+ }
51
+ return { os: PC_OS, appVersion: PC_APP_VERSION, useSub: false }
52
+ }
@@ -1,7 +1,8 @@
1
1
  import { Binary, Long } from 'bson'
2
2
 
3
+ import type { KakaoDeviceType } from '../types'
4
+
3
5
  import {
4
- APP_VERSION,
5
6
  BOOKING_HOST,
6
7
  BOOKING_PORT,
7
8
  CHECKIN_HOST,
@@ -12,6 +13,7 @@ import {
12
13
  MCCMNC,
13
14
  PING_INTERVAL_MS,
14
15
  PROTOCOL_VERSION,
16
+ getLocoDeviceConfig,
15
17
  } from './config'
16
18
  import { LocoConnection } from './connection'
17
19
  import type { BookingResponse, CheckinResponse, LoginListResponse, LocoPacket, SyncState } from './types'
@@ -21,9 +23,13 @@ export class LocoSession {
21
23
  private pingTimer: ReturnType<typeof setInterval> | null = null
22
24
  private pushHandler: ((packet: LocoPacket) => void) | null = null
23
25
  private closeHandler: (() => void) | null = null
26
+ private deviceType: KakaoDeviceType = 'tablet'
27
+
28
+ async login(oauthToken: string, userId: string, deviceUuid: string, syncState?: SyncState, deviceType?: KakaoDeviceType): Promise<LoginListResponse> {
29
+ this.deviceType = deviceType ?? 'tablet'
30
+ const deviceConfig = getLocoDeviceConfig(this.deviceType)
24
31
 
25
- async login(oauthToken: string, userId: string, deviceUuid: string, syncState?: SyncState): Promise<LoginListResponse> {
26
- const { host, port } = await this.bookAndCheckin(userId)
32
+ const { host, port } = await this.bookAndCheckin(userId, deviceConfig)
27
33
 
28
34
  this.connection = new LocoConnection()
29
35
  await this.connection.connectSecure(host, port)
@@ -43,9 +49,9 @@ export class LocoSession {
43
49
  const lbk = syncState?.lbk ?? 0
44
50
 
45
51
  const response = await this.connection.sendPacket('LOGINLIST', {
46
- appVer: APP_VERSION,
52
+ appVer: deviceConfig.appVersion,
47
53
  prtVer: PROTOCOL_VERSION,
48
- os: 'mac',
54
+ os: deviceConfig.os,
49
55
  lang: LANG,
50
56
  dtype: DTYPE,
51
57
  duuid: deviceUuid,
@@ -65,12 +71,12 @@ export class LocoSession {
65
71
  return response.body as unknown as LoginListResponse
66
72
  }
67
73
 
68
- private async bookAndCheckin(userId: string): Promise<{ host: string; port: number }> {
74
+ private async bookAndCheckin(userId: string, deviceConfig: { os: string; appVersion: string; useSub: boolean }): Promise<{ host: string; port: number }> {
69
75
  const bookingConn = new LocoConnection()
70
76
  await bookingConn.connectTls(BOOKING_HOST, BOOKING_PORT)
71
77
 
72
78
  const bookingResponse = await bookingConn.sendPacket('GETCONF', {
73
- os: 'mac',
79
+ os: deviceConfig.os,
74
80
  model: '',
75
81
  })
76
82
  bookingConn.close()
@@ -86,13 +92,13 @@ export class LocoSession {
86
92
 
87
93
  const checkinResponse = await checkinConn.sendPacket('CHECKIN', {
88
94
  userId: Number(userId),
89
- os: 'mac',
95
+ os: deviceConfig.os,
90
96
  ntype: 0,
91
- appVer: APP_VERSION,
97
+ appVer: deviceConfig.appVersion,
92
98
  MCCMNC: MCCMNC,
93
99
  lang: LANG,
94
100
  countryISO: COUNTRY_ISO,
95
- useSub: true,
101
+ useSub: deviceConfig.useSub,
96
102
  })
97
103
  checkinConn.close()
98
104
 
@@ -11,6 +11,8 @@ export interface ExtractedKakaoToken {
11
11
  login_form_body?: string
12
12
  }
13
13
 
14
+ export type KakaoAuthMethod = 'login' | 'extract'
15
+
14
16
  export interface KakaoAccountCredentials {
15
17
  account_id: string
16
18
  oauth_token: string
@@ -18,6 +20,7 @@ export interface KakaoAccountCredentials {
18
20
  refresh_token?: string
19
21
  device_uuid: string
20
22
  device_type: KakaoDeviceType
23
+ auth_method?: KakaoAuthMethod
21
24
  created_at: string
22
25
  updated_at: string
23
26
  }
@@ -162,6 +165,7 @@ export const KakaoAccountCredentialsSchema = z.object({
162
165
  refresh_token: z.string().optional(),
163
166
  device_uuid: z.string(),
164
167
  device_type: z.enum(['pc', 'tablet']),
168
+ auth_method: z.enum(['login', 'extract']).optional(),
165
169
  created_at: z.string(),
166
170
  updated_at: z.string(),
167
171
  })
@@ -7,8 +7,8 @@ import {
7
7
  loginWithPassword as linejsLoginWithPassword,
8
8
  loginWithAuthToken as linejsLoginWithAuthToken,
9
9
  type Client,
10
- } from '@evex/linejs'
11
- import { FileStorage } from '@evex/linejs/storage'
10
+ } from '@/vendor/linejs/client/mod.js'
11
+ import { FileStorage } from '@/vendor/linejs/base/storage/mod.js'
12
12
 
13
13
  import { LineCredentialManager } from './credential-manager'
14
14
  import type {
@@ -64,7 +64,7 @@ export class KakaoTalkAdapter implements PlatformAdapter {
64
64
  if (!creds) throw new Error(`Account ${accountId} not found`)
65
65
 
66
66
  const client = new KakaoTalkClient()
67
- await client.login({ oauthToken: creds.oauth_token, userId: creds.user_id, deviceUuid: creds.device_uuid })
67
+ await client.login({ oauthToken: creds.oauth_token, userId: creds.user_id, deviceUuid: creds.device_uuid, deviceType: creds.device_type })
68
68
  this.client = client
69
69
  this.currentAccount = { id: creds.account_id, name: creds.account_id }
70
70
  }
@@ -86,7 +86,8 @@ export class KakaoTalkAdapter implements PlatformAdapter {
86
86
 
87
87
  const existing = await this.credManager.getAccount()
88
88
  const pendingState = await this.credManager.loadPendingLogin()
89
- const savedDeviceUuid = pendingState?.device_uuid ?? existing?.device_uuid ?? generateDeviceUuid()
89
+ const existingUuid = existing?.auth_method === 'login' ? existing?.device_uuid : undefined
90
+ const savedDeviceUuid = pendingState?.device_uuid ?? existingUuid ?? generateDeviceUuid()
90
91
 
91
92
  let email: string | undefined
92
93
  let password: string | undefined
@@ -139,6 +140,7 @@ export class KakaoTalkAdapter implements PlatformAdapter {
139
140
  refresh_token: result.credentials.refresh_token,
140
141
  device_uuid: result.credentials.device_uuid,
141
142
  device_type: result.credentials.device_type,
143
+ auth_method: 'login',
142
144
  created_at: now,
143
145
  updated_at: now,
144
146
  })
@@ -149,6 +151,7 @@ export class KakaoTalkAdapter implements PlatformAdapter {
149
151
  oauthToken: result.credentials.access_token,
150
152
  userId: result.credentials.user_id,
151
153
  deviceUuid: result.credentials.device_uuid,
154
+ deviceType: result.credentials.device_type,
152
155
  })
153
156
  this.client = client
154
157
  this.currentAccount = { id: result.credentials.user_id, name: email }
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-2026 Evex Developers
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,89 @@
1
+ # LINEJS
2
+
3
+ [![JSR](https://jsr.io/badges/@evex/linejs?from=github)](https://jsr.io/@evex/linejs)
4
+ [![JSR Score](https://jsr.io/badges/@evex/linejs/score?from=github)](https://jsr.io/@evex/linejs)
5
+ [![JSR Scope](https://jsr.io/badges/@evex?from=github)](https://jsr.io/@evex)
6
+ ![release workflow](https://github.com/evex-dev/linejs/actions/workflows/release.yml/badge.svg)\
7
+ [![](https://dcbadge.limes.pink/api/server/evex)](https://discord.gg/evex)
8
+
9
+ <center>
10
+ <img src="https://raw.githubusercontent.com/evex-dev/linejs/main/.github/assets/icon.png" width="150" height="150" alt="LINEJS" />
11
+ </center>
12
+
13
+ <center> <b>LINEJS</b> is a JavaScript library for creating a LINE SelfBot. </center>
14
+
15
+ ---
16
+
17
+ ##### <center>❓ Question: Join our [Discord community](https://discord.gg/evex)</center>
18
+
19
+ ##### <center>📚 Documentation: [Check out the full documentation](https://linejs.evex.land)</center>
20
+
21
+ ##### <center>🤖 AI Generated Documentation: [DeepWiki - LINEJS](https://deepwiki.com/evex-dev/linejs)
22
+
23
+ ---
24
+
25
+ ## Installation
26
+
27
+ Supports all runtimes (Node.js, Deno, and Bun) and Typescript.
28
+
29
+ ```llvm
30
+ npx jsr add @evex/linejs
31
+ bunx --bun jsr add @evex/linejs
32
+ deno add @evex/linejs
33
+ ```
34
+
35
+ You can use `git clone` to download the latest development version and use it in
36
+ Deno.
37
+
38
+ ```llvm
39
+ git clone https://github.com/evex-dev/linejs.git
40
+ cd linejs
41
+ touch main.js
42
+ deno run main.js
43
+ ```
44
+
45
+ ##### Documentation is [https://linejs.evex.land](https://linejs.evex.land/)
46
+
47
+ ## Browser Support
48
+
49
+ For now, please use "https://esm.sh/jsr/@evex/linejs".
50
+
51
+ Example is [here](./example/browser).
52
+
53
+ ## LINEJS Types
54
+
55
+ Please see [@evex/linejs-types](https://jsr.io/@evex/linejs-types).\
56
+ In short, TypeScript types and enums (such as ReactionType (0, 1, 2, 3),
57
+ MessageType, etc.) are provided.
58
+
59
+ ## Provided Packages
60
+
61
+ - client - (@evex/linejs) or (@evex/linejs/client)
62
+ - Client - LINE SelfBot Client
63
+ - base - (@evex/linejs/base)
64
+ - BaseClient - LINE SelfBot API Client
65
+ - thrift - (@evex/linejs/thrift)
66
+ - Thrift - Thrift read/write
67
+ - storage - (@evex/linejs/storage)
68
+ - BaseStorage - LINE Client Storage Type
69
+ - MemoryStorage - LINE Client Memory Storage
70
+ - FileStorage - LINE Client File Storage
71
+ - types - (@evex/linejs-types)
72
+ - All Types for LINE
73
+
74
+ ## Authors
75
+
76
+ - Owner & Developer: [Piloking](https://github.com/piloking)
77
+ - Developer: [EdamAme-x](https://github.com/EdamAme-x)
78
+ - Developer: [MocA-Love](https://github.com/MocA-Love)
79
+ - Developer: [Hafusun](https://github.com/hafusun)
80
+
81
+ ## References
82
+
83
+ - [DeachSword/CHRLINE](https://github.com/DeachSword/CHRLINE)
84
+
85
+ - [DeachSword/CHRLINE-Thrift](https://github.com/DeachSword/CHRLINE-Thrift/)
86
+
87
+ - [WEDeach/CHRLINE-Patch](https://github.com/WEDeach/CHRLINE-Patch)
88
+
89
+ - [discordjs/collection](https://www.npmjs.com/package/@discordjs/collection)