agent-messenger 2.10.1 → 2.10.2

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 (239) hide show
  1. package/.claude-plugin/plugin.json +1 -1
  2. package/dist/package.json +1 -1
  3. package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
  4. package/dist/src/platforms/teams/token-extractor.js +9 -2
  5. package/dist/src/platforms/teams/token-extractor.js.map +1 -1
  6. package/dist/src/shared/chromium/decryptor.d.ts +6 -0
  7. package/dist/src/shared/chromium/decryptor.d.ts.map +1 -1
  8. package/dist/src/shared/chromium/decryptor.js +26 -6
  9. package/dist/src/shared/chromium/decryptor.js.map +1 -1
  10. package/e2e/channeltalk.e2e.test.ts +13 -13
  11. package/e2e/channeltalkbot.e2e.test.ts +13 -13
  12. package/e2e/discord.e2e.test.ts +24 -24
  13. package/e2e/discordbot.e2e.test.ts +16 -16
  14. package/e2e/instagram.e2e.test.ts +10 -10
  15. package/e2e/kakaotalk.e2e.test.ts +7 -7
  16. package/e2e/line.e2e.test.ts +8 -8
  17. package/e2e/slack.e2e.test.ts +34 -34
  18. package/e2e/slackbot.e2e.test.ts +14 -14
  19. package/e2e/teams.e2e.test.ts +23 -23
  20. package/e2e/telegram.e2e.test.ts +8 -8
  21. package/e2e/webex.e2e.test.ts +14 -14
  22. package/e2e/whatsapp.e2e.test.ts +8 -8
  23. package/e2e/whatsappbot.e2e.test.ts +6 -6
  24. package/package.json +1 -1
  25. package/skills/agent-channeltalk/SKILL.md +1 -1
  26. package/skills/agent-channeltalkbot/SKILL.md +1 -1
  27. package/skills/agent-discord/SKILL.md +1 -1
  28. package/skills/agent-discordbot/SKILL.md +1 -1
  29. package/skills/agent-instagram/SKILL.md +1 -1
  30. package/skills/agent-kakaotalk/SKILL.md +1 -1
  31. package/skills/agent-line/SKILL.md +1 -1
  32. package/skills/agent-slack/SKILL.md +1 -1
  33. package/skills/agent-slackbot/SKILL.md +1 -1
  34. package/skills/agent-teams/SKILL.md +1 -1
  35. package/skills/agent-telegram/SKILL.md +1 -1
  36. package/skills/agent-webex/SKILL.md +1 -1
  37. package/skills/agent-wechatbot/SKILL.md +1 -1
  38. package/skills/agent-whatsapp/SKILL.md +1 -1
  39. package/skills/agent-whatsappbot/SKILL.md +1 -1
  40. package/src/platforms/channeltalk/client.test.ts +26 -26
  41. package/src/platforms/channeltalk/commands/auth.test.ts +16 -16
  42. package/src/platforms/channeltalk/commands/bot.test.ts +2 -2
  43. package/src/platforms/channeltalk/commands/chat.test.ts +3 -3
  44. package/src/platforms/channeltalk/commands/group.test.ts +4 -4
  45. package/src/platforms/channeltalk/commands/manager.test.ts +2 -2
  46. package/src/platforms/channeltalk/commands/message.test.ts +17 -17
  47. package/src/platforms/channeltalk/commands/snapshot.test.ts +7 -7
  48. package/src/platforms/channeltalk/commands/whoami.test.ts +3 -3
  49. package/src/platforms/channeltalk/credential-manager.test.ts +18 -18
  50. package/src/platforms/channeltalk/ensure-auth.test.ts +5 -5
  51. package/src/platforms/channeltalk/index.test.ts +23 -23
  52. package/src/platforms/channeltalk/token-extractor.test.ts +21 -21
  53. package/src/platforms/channeltalk/types.test.ts +12 -12
  54. package/src/platforms/channeltalkbot/client.test.ts +14 -14
  55. package/src/platforms/channeltalkbot/commands/auth.test.ts +16 -16
  56. package/src/platforms/channeltalkbot/commands/bot.test.ts +6 -6
  57. package/src/platforms/channeltalkbot/commands/chat.test.ts +9 -9
  58. package/src/platforms/channeltalkbot/commands/group.test.ts +6 -6
  59. package/src/platforms/channeltalkbot/commands/manager.test.ts +3 -3
  60. package/src/platforms/channeltalkbot/commands/message.test.ts +10 -10
  61. package/src/platforms/channeltalkbot/commands/snapshot.test.ts +7 -7
  62. package/src/platforms/channeltalkbot/commands/whoami.test.ts +4 -4
  63. package/src/platforms/channeltalkbot/credential-manager.test.ts +27 -27
  64. package/src/platforms/channeltalkbot/index.test.ts +15 -15
  65. package/src/platforms/discord/client.test.ts +28 -28
  66. package/src/platforms/discord/commands/auth.test.ts +7 -7
  67. package/src/platforms/discord/commands/channel.test.ts +7 -7
  68. package/src/platforms/discord/commands/dm.test.ts +4 -4
  69. package/src/platforms/discord/commands/file.test.ts +4 -4
  70. package/src/platforms/discord/commands/friend.test.ts +6 -6
  71. package/src/platforms/discord/commands/member.test.ts +5 -5
  72. package/src/platforms/discord/commands/mention.test.ts +5 -5
  73. package/src/platforms/discord/commands/message.test.ts +9 -9
  74. package/src/platforms/discord/commands/note.test.ts +6 -6
  75. package/src/platforms/discord/commands/profile.test.ts +4 -4
  76. package/src/platforms/discord/commands/reaction.test.ts +5 -5
  77. package/src/platforms/discord/commands/server.test.ts +7 -7
  78. package/src/platforms/discord/commands/snapshot.test.ts +6 -6
  79. package/src/platforms/discord/commands/thread.test.ts +6 -6
  80. package/src/platforms/discord/commands/user.test.ts +5 -5
  81. package/src/platforms/discord/commands/whoami.test.ts +6 -6
  82. package/src/platforms/discord/credential-manager.test.ts +16 -16
  83. package/src/platforms/discord/ensure-auth.test.ts +8 -8
  84. package/src/platforms/discord/index.test.ts +17 -17
  85. package/src/platforms/discord/listener.test.ts +33 -33
  86. package/src/platforms/discord/token-extractor.test.ts +53 -53
  87. package/src/platforms/discord/types.test.ts +26 -26
  88. package/src/platforms/discordbot/client.test.ts +31 -31
  89. package/src/platforms/discordbot/commands/auth.test.ts +18 -18
  90. package/src/platforms/discordbot/commands/channel.test.ts +11 -11
  91. package/src/platforms/discordbot/commands/file.test.ts +7 -7
  92. package/src/platforms/discordbot/commands/message.test.ts +25 -25
  93. package/src/platforms/discordbot/commands/reaction.test.ts +6 -6
  94. package/src/platforms/discordbot/commands/server.test.ts +12 -12
  95. package/src/platforms/discordbot/commands/snapshot.test.ts +13 -13
  96. package/src/platforms/discordbot/commands/thread.test.ts +10 -10
  97. package/src/platforms/discordbot/commands/user.test.ts +9 -9
  98. package/src/platforms/discordbot/commands/whoami.test.ts +4 -4
  99. package/src/platforms/discordbot/credential-manager.test.ts +28 -28
  100. package/src/platforms/instagram/client.test.ts +18 -18
  101. package/src/platforms/instagram/commands/auth.test.ts +11 -11
  102. package/src/platforms/instagram/commands/chat.test.ts +6 -6
  103. package/src/platforms/instagram/commands/message.test.ts +11 -11
  104. package/src/platforms/instagram/commands/shared.test.ts +12 -12
  105. package/src/platforms/instagram/commands/whoami.test.ts +3 -3
  106. package/src/platforms/instagram/credential-manager.test.ts +21 -21
  107. package/src/platforms/instagram/ensure-auth.test.ts +4 -4
  108. package/src/platforms/instagram/index.test.ts +9 -9
  109. package/src/platforms/instagram/listener.test.ts +8 -8
  110. package/src/platforms/instagram/token-extractor.test.ts +35 -35
  111. package/src/platforms/kakaotalk/client.test.ts +33 -33
  112. package/src/platforms/kakaotalk/commands/auth.test.ts +11 -11
  113. package/src/platforms/kakaotalk/commands/chat.test.ts +6 -6
  114. package/src/platforms/kakaotalk/commands/message.test.ts +7 -7
  115. package/src/platforms/kakaotalk/commands/whoami.test.ts +5 -5
  116. package/src/platforms/kakaotalk/credential-manager.test.ts +15 -15
  117. package/src/platforms/kakaotalk/index.test.ts +15 -15
  118. package/src/platforms/kakaotalk/listener.test.ts +17 -17
  119. package/src/platforms/line/client.test.ts +17 -17
  120. package/src/platforms/line/commands/auth.test.ts +8 -8
  121. package/src/platforms/line/commands/chat.test.ts +7 -7
  122. package/src/platforms/line/commands/friend.test.ts +6 -6
  123. package/src/platforms/line/commands/message.test.ts +7 -7
  124. package/src/platforms/line/commands/whoami.test.ts +6 -6
  125. package/src/platforms/line/credential-manager.test.ts +17 -17
  126. package/src/platforms/line/index.test.ts +10 -10
  127. package/src/platforms/line/listener.test.ts +15 -15
  128. package/src/platforms/line/types.test.ts +14 -14
  129. package/src/platforms/slack/cli.test.ts +8 -8
  130. package/src/platforms/slack/client.test.ts +151 -151
  131. package/src/platforms/slack/commands/activity.test.ts +13 -13
  132. package/src/platforms/slack/commands/auth.test.ts +34 -34
  133. package/src/platforms/slack/commands/bookmark.test.ts +9 -9
  134. package/src/platforms/slack/commands/channel.test.ts +17 -17
  135. package/src/platforms/slack/commands/drafts.test.ts +7 -7
  136. package/src/platforms/slack/commands/emoji.test.ts +3 -3
  137. package/src/platforms/slack/commands/file.test.ts +12 -12
  138. package/src/platforms/slack/commands/message.test.ts +19 -19
  139. package/src/platforms/slack/commands/pin.test.ts +7 -7
  140. package/src/platforms/slack/commands/reaction.test.ts +10 -10
  141. package/src/platforms/slack/commands/reminder.test.ts +9 -9
  142. package/src/platforms/slack/commands/saved.test.ts +7 -7
  143. package/src/platforms/slack/commands/sections.test.ts +5 -5
  144. package/src/platforms/slack/commands/snapshot.test.ts +13 -13
  145. package/src/platforms/slack/commands/unread.test.ts +6 -6
  146. package/src/platforms/slack/commands/user.test.ts +10 -10
  147. package/src/platforms/slack/commands/usergroup.test.ts +15 -15
  148. package/src/platforms/slack/commands/whoami.test.ts +6 -6
  149. package/src/platforms/slack/commands/workspace.test.ts +26 -26
  150. package/src/platforms/slack/credential-manager.test.ts +14 -14
  151. package/src/platforms/slack/ensure-auth.test.ts +21 -21
  152. package/src/platforms/slack/index.test.ts +12 -12
  153. package/src/platforms/slack/listener.test.ts +17 -17
  154. package/src/platforms/slack/token-extractor-node.test.ts +2 -2
  155. package/src/platforms/slack/token-extractor.test.ts +37 -37
  156. package/src/platforms/slack/types.test.ts +21 -21
  157. package/src/platforms/slackbot/client.test.ts +22 -22
  158. package/src/platforms/slackbot/commands/auth.test.ts +14 -14
  159. package/src/platforms/slackbot/commands/channel.test.ts +7 -7
  160. package/src/platforms/slackbot/commands/message.test.ts +13 -13
  161. package/src/platforms/slackbot/commands/reaction.test.ts +6 -6
  162. package/src/platforms/slackbot/commands/user.test.ts +7 -7
  163. package/src/platforms/slackbot/commands/whoami.test.ts +4 -4
  164. package/src/platforms/slackbot/credential-manager.test.ts +22 -22
  165. package/src/platforms/slackbot/types.test.ts +7 -7
  166. package/src/platforms/teams/client.test.ts +30 -30
  167. package/src/platforms/teams/commands/auth.test.ts +8 -8
  168. package/src/platforms/teams/commands/channel.test.ts +7 -7
  169. package/src/platforms/teams/commands/file.test.ts +4 -4
  170. package/src/platforms/teams/commands/message.test.ts +5 -5
  171. package/src/platforms/teams/commands/reaction.test.ts +4 -4
  172. package/src/platforms/teams/commands/snapshot.test.ts +7 -7
  173. package/src/platforms/teams/commands/team.test.ts +8 -8
  174. package/src/platforms/teams/commands/user.test.ts +4 -4
  175. package/src/platforms/teams/commands/whoami.test.ts +6 -6
  176. package/src/platforms/teams/credential-manager.test.ts +17 -17
  177. package/src/platforms/teams/ensure-auth.test.ts +13 -13
  178. package/src/platforms/teams/index.test.ts +15 -15
  179. package/src/platforms/teams/token-extractor.test.ts +109 -49
  180. package/src/platforms/teams/token-extractor.ts +7 -2
  181. package/src/platforms/teams/types.test.ts +26 -26
  182. package/src/platforms/telegram/app-config.test.ts +4 -4
  183. package/src/platforms/telegram/chat-utils.test.ts +12 -12
  184. package/src/platforms/telegram/client.test.ts +4 -4
  185. package/src/platforms/telegram/commands/auth.test.ts +16 -16
  186. package/src/platforms/telegram/commands/chat.test.ts +9 -9
  187. package/src/platforms/telegram/commands/message.test.ts +6 -6
  188. package/src/platforms/telegram/commands/shared.test.ts +3 -3
  189. package/src/platforms/telegram/commands/whoami.test.ts +3 -3
  190. package/src/platforms/telegram/credential-manager.test.ts +10 -10
  191. package/src/platforms/telegram/types.test.ts +6 -6
  192. package/src/platforms/webex/app-config.test.ts +8 -8
  193. package/src/platforms/webex/cli.test.ts +5 -5
  194. package/src/platforms/webex/client.test.ts +65 -65
  195. package/src/platforms/webex/commands/auth.test.ts +18 -18
  196. package/src/platforms/webex/commands/member.test.ts +5 -5
  197. package/src/platforms/webex/commands/message.test.ts +12 -12
  198. package/src/platforms/webex/commands/snapshot.test.ts +5 -5
  199. package/src/platforms/webex/commands/space.test.ts +10 -10
  200. package/src/platforms/webex/commands/whoami.test.ts +6 -6
  201. package/src/platforms/webex/credential-manager.test.ts +22 -22
  202. package/src/platforms/webex/encryption.test.ts +4 -4
  203. package/src/platforms/webex/ensure-auth.test.ts +5 -5
  204. package/src/platforms/webex/index.test.ts +5 -5
  205. package/src/platforms/webex/markdown-to-html.test.ts +33 -33
  206. package/src/platforms/webex/token-extractor.test.ts +23 -23
  207. package/src/platforms/webex/types.test.ts +27 -27
  208. package/src/platforms/wechatbot/client.test.ts +27 -27
  209. package/src/platforms/wechatbot/commands/auth.test.ts +15 -15
  210. package/src/platforms/wechatbot/commands/message.test.ts +8 -8
  211. package/src/platforms/wechatbot/commands/template.test.ts +9 -9
  212. package/src/platforms/wechatbot/commands/user.test.ts +7 -7
  213. package/src/platforms/wechatbot/commands/whoami.test.ts +5 -5
  214. package/src/platforms/wechatbot/credential-manager.test.ts +18 -18
  215. package/src/platforms/wechatbot/index.test.ts +10 -10
  216. package/src/platforms/wechatbot/types.test.ts +25 -25
  217. package/src/platforms/whatsapp/commands/auth.test.ts +13 -13
  218. package/src/platforms/whatsapp/commands/chat.test.ts +8 -8
  219. package/src/platforms/whatsapp/commands/message.test.ts +10 -10
  220. package/src/platforms/whatsapp/commands/whoami.test.ts +3 -3
  221. package/src/platforms/whatsapp/credential-manager.test.ts +23 -23
  222. package/src/platforms/whatsapp/ensure-auth.test.ts +4 -4
  223. package/src/platforms/whatsapp/index.test.ts +8 -8
  224. package/src/platforms/whatsapp/types.test.ts +42 -42
  225. package/src/platforms/whatsappbot/client.test.ts +27 -27
  226. package/src/platforms/whatsappbot/commands/auth.test.ts +14 -14
  227. package/src/platforms/whatsappbot/commands/message.test.ts +16 -16
  228. package/src/platforms/whatsappbot/commands/template.test.ts +9 -9
  229. package/src/platforms/whatsappbot/commands/whoami.test.ts +5 -5
  230. package/src/platforms/whatsappbot/credential-manager.test.ts +18 -18
  231. package/src/platforms/whatsappbot/index.test.ts +7 -7
  232. package/src/platforms/whatsappbot/types.test.ts +18 -18
  233. package/src/shared/chromium/browsers.test.ts +22 -22
  234. package/src/shared/chromium/cookie-reader.test.ts +13 -13
  235. package/src/shared/chromium/decryptor.test.ts +97 -32
  236. package/src/shared/chromium/decryptor.ts +27 -6
  237. package/src/shared/utils/concurrency.test.ts +6 -6
  238. package/src/shared/utils/derived-key-cache.test.ts +11 -11
  239. package/src/tui/utils.test.ts +31 -31
@@ -1,4 +1,4 @@
1
- import { afterAll, describe, expect, mock, test } from 'bun:test'
1
+ import { afterAll, describe, expect, mock, it } from 'bun:test'
2
2
  import { rmSync } from 'node:fs'
3
3
  import { join } from 'node:path'
4
4
 
@@ -49,7 +49,7 @@ afterAll(() => {
49
49
  })
50
50
 
51
51
  describe('listAction', () => {
52
- test('returns templates list', async () => {
52
+ it('returns templates list', async () => {
53
53
  const credManager = await makeCredManagerWithCreds()
54
54
  const result = await listAction({ _credManager: credManager })
55
55
 
@@ -58,7 +58,7 @@ describe('listAction', () => {
58
58
  expect(result.templates?.[0].title).toBe('Order Notification')
59
59
  })
60
60
 
61
- test('returns error when client throws', async () => {
61
+ it('returns error when client throws', async () => {
62
62
  mock.module('../client', () => ({
63
63
  WeChatBotClient: class MockWeChatBotClient {
64
64
  async login() {
@@ -78,7 +78,7 @@ describe('listAction', () => {
78
78
  })
79
79
 
80
80
  describe('sendAction (template)', () => {
81
- test('sends template message and returns msgid', async () => {
81
+ it('sends template message and returns msgid', async () => {
82
82
  mock.module('../client', () => ({
83
83
  WeChatBotClient: class MockWeChatBotClient {
84
84
  async login() {
@@ -100,7 +100,7 @@ describe('sendAction (template)', () => {
100
100
  expect(result.error).toBeUndefined()
101
101
  })
102
102
 
103
- test('returns error when data is invalid JSON', async () => {
103
+ it('returns error when data is invalid JSON', async () => {
104
104
  mock.module('../client', () => ({
105
105
  WeChatBotClient: class MockWeChatBotClient {
106
106
  async login() {
@@ -121,7 +121,7 @@ describe('sendAction (template)', () => {
121
121
  expect(result.msgid).toBeUndefined()
122
122
  })
123
123
 
124
- test('sends without data when not provided', async () => {
124
+ it('sends without data when not provided', async () => {
125
125
  const sendTemplateMsg = mock(() => Promise.resolve({ msgid: 777 }))
126
126
  mock.module('../client', () => ({
127
127
  WeChatBotClient: class MockWeChatBotClient {
@@ -139,7 +139,7 @@ describe('sendAction (template)', () => {
139
139
  expect(result.msgid).toBe(777)
140
140
  })
141
141
 
142
- test('returns error when client throws', async () => {
142
+ it('returns error when client throws', async () => {
143
143
  mock.module('../client', () => ({
144
144
  WeChatBotClient: class MockWeChatBotClient {
145
145
  async login() {
@@ -158,7 +158,7 @@ describe('sendAction (template)', () => {
158
158
  })
159
159
 
160
160
  describe('deleteAction', () => {
161
- test('deletes template and returns success', async () => {
161
+ it('deletes template and returns success', async () => {
162
162
  mock.module('../client', () => ({
163
163
  WeChatBotClient: class MockWeChatBotClient {
164
164
  async login() {
@@ -176,7 +176,7 @@ describe('deleteAction', () => {
176
176
  expect(result.error).toBeUndefined()
177
177
  })
178
178
 
179
- test('returns error when client throws', async () => {
179
+ it('returns error when client throws', async () => {
180
180
  mock.module('../client', () => ({
181
181
  WeChatBotClient: class MockWeChatBotClient {
182
182
  async login() {
@@ -1,4 +1,4 @@
1
- import { afterAll, describe, expect, mock, test } from 'bun:test'
1
+ import { afterAll, describe, expect, mock, it } from 'bun:test'
2
2
  import { rmSync } from 'node:fs'
3
3
  import { join } from 'node:path'
4
4
 
@@ -56,7 +56,7 @@ afterAll(() => {
56
56
  })
57
57
 
58
58
  describe('listAction (user)', () => {
59
- test('returns followers list with total, count, openids, next_openid', async () => {
59
+ it('returns followers list with total, count, openids, next_openid', async () => {
60
60
  const credManager = await makeCredManagerWithCreds()
61
61
  const result = await listAction({ _credManager: credManager })
62
62
 
@@ -66,7 +66,7 @@ describe('listAction (user)', () => {
66
66
  expect(result.next_openid).toBe('')
67
67
  })
68
68
 
69
- test('returns error when client throws', async () => {
69
+ it('returns error when client throws', async () => {
70
70
  mock.module('../client', () => ({
71
71
  WeChatBotClient: class MockWeChatBotClient {
72
72
  async login() {
@@ -84,7 +84,7 @@ describe('listAction (user)', () => {
84
84
  expect(result.openids).toBeUndefined()
85
85
  })
86
86
 
87
- test('passes nextOpenid option to client', async () => {
87
+ it('passes nextOpenid option to client', async () => {
88
88
  const getFollowersMock = mock(() => Promise.resolve({ total: 1, count: 1, openids: ['openid-3'], next_openid: '' }))
89
89
  mock.module('../client', () => ({
90
90
  WeChatBotClient: class MockWeChatBotClient {
@@ -104,7 +104,7 @@ describe('listAction (user)', () => {
104
104
  })
105
105
 
106
106
  describe('getAction', () => {
107
- test('returns user info for given openId', async () => {
107
+ it('returns user info for given openId', async () => {
108
108
  mock.module('../client', () => ({
109
109
  WeChatBotClient: class MockWeChatBotClient {
110
110
  async login() {
@@ -122,7 +122,7 @@ describe('getAction', () => {
122
122
  expect(result.user?.openid).toBe('openid-123')
123
123
  })
124
124
 
125
- test('returns error when client throws', async () => {
125
+ it('returns error when client throws', async () => {
126
126
  mock.module('../client', () => ({
127
127
  WeChatBotClient: class MockWeChatBotClient {
128
128
  async login() {
@@ -140,7 +140,7 @@ describe('getAction', () => {
140
140
  expect(result.user).toBeUndefined()
141
141
  })
142
142
 
143
- test('passes lang option to client', async () => {
143
+ it('passes lang option to client', async () => {
144
144
  const getUserInfoMock = mock(() => Promise.resolve({ ...mockUserInfo, language: 'en' }))
145
145
  mock.module('../client', () => ({
146
146
  WeChatBotClient: class MockWeChatBotClient {
@@ -1,4 +1,4 @@
1
- import { afterEach, beforeEach, describe, expect, mock, test } from 'bun:test'
1
+ import { afterEach, beforeEach, describe, expect, mock, it } from 'bun:test'
2
2
  import { existsSync, rmSync } from 'node:fs'
3
3
  import { mkdir } from 'node:fs/promises'
4
4
  import { tmpdir } from 'node:os'
@@ -38,7 +38,7 @@ describe('whoami command', () => {
38
38
  process.env = originalEnv
39
39
  })
40
40
 
41
- test('returns app_id, account_name, and verified status', async () => {
41
+ it('returns app_id, account_name, and verified status', async () => {
42
42
  const manager = new WeChatBotCredentialManager(tempDir)
43
43
  await manager.setCredentials({
44
44
  app_id: 'wx1234567890',
@@ -54,7 +54,7 @@ describe('whoami command', () => {
54
54
  expect(result.error).toBeUndefined()
55
55
  })
56
56
 
57
- test('returns info for specific --account', async () => {
57
+ it('returns info for specific --account', async () => {
58
58
  const manager = new WeChatBotCredentialManager(tempDir)
59
59
  await manager.setCredentials({
60
60
  app_id: 'wxAAA',
@@ -74,7 +74,7 @@ describe('whoami command', () => {
74
74
  expect(result.verified).toBe(true)
75
75
  })
76
76
 
77
- test('returns verified false when credentials are invalid', async () => {
77
+ it('returns verified false when credentials are invalid', async () => {
78
78
  mockVerifyCredentials.mockImplementationOnce(() => Promise.resolve(false))
79
79
 
80
80
  const manager = new WeChatBotCredentialManager(tempDir)
@@ -91,7 +91,7 @@ describe('whoami command', () => {
91
91
  expect(result.error).toBeUndefined()
92
92
  })
93
93
 
94
- test('returns error when client throws', async () => {
94
+ it('returns error when client throws', async () => {
95
95
  mockVerifyCredentials.mockImplementationOnce(() => Promise.reject(new Error('Network error')))
96
96
 
97
97
  const manager = new WeChatBotCredentialManager(tempDir)
@@ -1,4 +1,4 @@
1
- import { afterAll, describe, expect, test } from 'bun:test'
1
+ import { afterAll, describe, expect, it } from 'bun:test'
2
2
  import { existsSync, rmSync } from 'node:fs'
3
3
  import { join } from 'node:path'
4
4
 
@@ -22,7 +22,7 @@ afterAll(() => {
22
22
  })
23
23
 
24
24
  describe('WeChatBotCredentialManager', () => {
25
- test('load returns default config when file does not exist', async () => {
25
+ it('load returns default config when file does not exist', async () => {
26
26
  const manager = setup()
27
27
  const config = await manager.load()
28
28
 
@@ -32,7 +32,7 @@ describe('WeChatBotCredentialManager', () => {
32
32
  })
33
33
  })
34
34
 
35
- test('save creates file with correct content', async () => {
35
+ it('save creates file with correct content', async () => {
36
36
  const testConfigDir = join(
37
37
  import.meta.dir,
38
38
  `.test-wechatbot-config-${Date.now()}-${Math.random().toString(36).slice(2)}`,
@@ -61,13 +61,13 @@ describe('WeChatBotCredentialManager', () => {
61
61
  expect(loaded).toEqual(config)
62
62
  })
63
63
 
64
- test('getCredentials returns null when not configured', async () => {
64
+ it('getCredentials returns null when not configured', async () => {
65
65
  const manager = setup()
66
66
  const creds = await manager.getCredentials()
67
67
  expect(creds).toBeNull()
68
68
  })
69
69
 
70
- test('getCredentials returns credentials from env vars when E2E env vars are set', async () => {
70
+ it('getCredentials returns credentials from env vars when E2E env vars are set', async () => {
71
71
  const originalAppId = process.env.E2E_WECHATBOT_APP_ID
72
72
  const originalAppSecret = process.env.E2E_WECHATBOT_APP_SECRET
73
73
 
@@ -96,7 +96,7 @@ describe('WeChatBotCredentialManager', () => {
96
96
  }
97
97
  })
98
98
 
99
- test('getCredentials ignores env vars when accountId is provided', async () => {
99
+ it('getCredentials ignores env vars when accountId is provided', async () => {
100
100
  const originalAppId = process.env.E2E_WECHATBOT_APP_ID
101
101
  const originalAppSecret = process.env.E2E_WECHATBOT_APP_SECRET
102
102
 
@@ -121,7 +121,7 @@ describe('WeChatBotCredentialManager', () => {
121
121
  }
122
122
  })
123
123
 
124
- test('getCredentials returns specific account by accountId', async () => {
124
+ it('getCredentials returns specific account by accountId', async () => {
125
125
  const manager = setup()
126
126
  await manager.setCredentials({ app_id: 'wx-a', app_secret: 'secret-a', account_name: 'Account A' })
127
127
  await manager.setCredentials({ app_id: 'wx-b', app_secret: 'secret-b', account_name: 'Account B' })
@@ -134,13 +134,13 @@ describe('WeChatBotCredentialManager', () => {
134
134
  })
135
135
  })
136
136
 
137
- test('getCredentials returns null for nonexistent accountId', async () => {
137
+ it('getCredentials returns null for nonexistent accountId', async () => {
138
138
  const manager = setup()
139
139
  const creds = await manager.getCredentials('nonexistent')
140
140
  expect(creds).toBeNull()
141
141
  })
142
142
 
143
- test('setCredentials saves and sets as current', async () => {
143
+ it('setCredentials saves and sets as current', async () => {
144
144
  const manager = setup()
145
145
  await manager.setCredentials({ app_id: 'wx123', app_secret: 'secret123', account_name: 'My Account' })
146
146
 
@@ -155,7 +155,7 @@ describe('WeChatBotCredentialManager', () => {
155
155
  expect(config.current).toEqual({ account_id: 'wx123' })
156
156
  })
157
157
 
158
- test('removeAccount deletes account and adjusts current', async () => {
158
+ it('removeAccount deletes account and adjusts current', async () => {
159
159
  const manager = setup()
160
160
  await manager.setCredentials({ app_id: 'wx123', app_secret: 'secret123', account_name: 'My Account' })
161
161
 
@@ -170,13 +170,13 @@ describe('WeChatBotCredentialManager', () => {
170
170
  expect(config.accounts['wx123']).toBeUndefined()
171
171
  })
172
172
 
173
- test('removeAccount returns false for non-existent account', async () => {
173
+ it('removeAccount returns false for non-existent account', async () => {
174
174
  const manager = setup()
175
175
  const removed = await manager.removeAccount('nonexistent')
176
176
  expect(removed).toBe(false)
177
177
  })
178
178
 
179
- test('removeAccount does not clear current when a different account is removed', async () => {
179
+ it('removeAccount does not clear current when a different account is removed', async () => {
180
180
  const manager = setup()
181
181
  await manager.setCredentials({ app_id: 'wx-a', app_secret: 'secret-a', account_name: 'Account A' })
182
182
  await manager.setCredentials({ app_id: 'wx-b', app_secret: 'secret-b', account_name: 'Account B' })
@@ -188,7 +188,7 @@ describe('WeChatBotCredentialManager', () => {
188
188
  expect(config.current).toEqual({ account_id: 'wx-b' })
189
189
  })
190
190
 
191
- test('setCurrent switches active account', async () => {
191
+ it('setCurrent switches active account', async () => {
192
192
  const manager = setup()
193
193
  await manager.setCredentials({ app_id: 'wx-a', app_secret: 'secret-a', account_name: 'Account A' })
194
194
  await manager.setCredentials({ app_id: 'wx-b', app_secret: 'secret-b', account_name: 'Account B' })
@@ -200,13 +200,13 @@ describe('WeChatBotCredentialManager', () => {
200
200
  expect(config.current).toEqual({ account_id: 'wx-a' })
201
201
  })
202
202
 
203
- test('setCurrent returns false for non-existent account', async () => {
203
+ it('setCurrent returns false for non-existent account', async () => {
204
204
  const manager = setup()
205
205
  const result = await manager.setCurrent('nonexistent')
206
206
  expect(result).toBe(false)
207
207
  })
208
208
 
209
- test('listAll returns all accounts with is_current flag', async () => {
209
+ it('listAll returns all accounts with is_current flag', async () => {
210
210
  const manager = setup()
211
211
  await manager.setCredentials({ app_id: 'wx-a', app_secret: 'secret-a', account_name: 'Account A' })
212
212
  await manager.setCredentials({ app_id: 'wx-b', app_secret: 'secret-b', account_name: 'Account B' })
@@ -221,13 +221,13 @@ describe('WeChatBotCredentialManager', () => {
221
221
  expect(acctB?.is_current).toBe(true)
222
222
  })
223
223
 
224
- test('listAll returns empty array when no accounts', async () => {
224
+ it('listAll returns empty array when no accounts', async () => {
225
225
  const manager = setup()
226
226
  const accounts = await manager.listAll()
227
227
  expect(accounts).toHaveLength(0)
228
228
  })
229
229
 
230
- test('clearCredentials resets everything', async () => {
230
+ it('clearCredentials resets everything', async () => {
231
231
  const manager = setup()
232
232
  await manager.setCredentials({ app_id: 'wx123', app_secret: 'secret123', account_name: 'My Account' })
233
233
 
@@ -238,7 +238,7 @@ describe('WeChatBotCredentialManager', () => {
238
238
  expect(config.accounts).toEqual({})
239
239
  })
240
240
 
241
- test('round-trip: set get remove get null', async () => {
241
+ it('supports round-trip: set, get, remove, then returns null', async () => {
242
242
  const manager = setup()
243
243
 
244
244
  await manager.setCredentials({ app_id: 'wx123', app_secret: 'secret123', account_name: 'My Account' })
@@ -1,4 +1,4 @@
1
- import { expect, test } from 'bun:test'
1
+ import { expect, it } from 'bun:test'
2
2
 
3
3
  import {
4
4
  WeChatBotAccountEntrySchema,
@@ -12,38 +12,38 @@ import {
12
12
  WeChatBotUserInfoSchema,
13
13
  } from '@/platforms/wechatbot/index'
14
14
 
15
- test('WeChatBotClient is exported from barrel', () => {
15
+ it('WeChatBotClient is exported from barrel', () => {
16
16
  expect(typeof WeChatBotClient).toBe('function')
17
17
  })
18
18
 
19
- test('WeChatBotCredentialManager is exported from barrel', () => {
19
+ it('WeChatBotCredentialManager is exported from barrel', () => {
20
20
  expect(typeof WeChatBotCredentialManager).toBe('function')
21
21
  })
22
22
 
23
- test('WeChatBotError is exported from barrel', () => {
23
+ it('WeChatBotError is exported from barrel', () => {
24
24
  expect(typeof WeChatBotError).toBe('function')
25
25
  })
26
26
 
27
- test('WeChatBotAccountEntrySchema is exported from barrel', () => {
27
+ it('WeChatBotAccountEntrySchema is exported from barrel', () => {
28
28
  expect(typeof WeChatBotAccountEntrySchema.parse).toBe('function')
29
29
  })
30
30
 
31
- test('WeChatBotConfigSchema is exported from barrel', () => {
31
+ it('WeChatBotConfigSchema is exported from barrel', () => {
32
32
  expect(typeof WeChatBotConfigSchema.parse).toBe('function')
33
33
  })
34
34
 
35
- test('WeChatBotCredentialsSchema is exported from barrel', () => {
35
+ it('WeChatBotCredentialsSchema is exported from barrel', () => {
36
36
  expect(typeof WeChatBotCredentialsSchema.parse).toBe('function')
37
37
  })
38
38
 
39
- test('WeChatBotNewsArticleSchema is exported from barrel', () => {
39
+ it('WeChatBotNewsArticleSchema is exported from barrel', () => {
40
40
  expect(typeof WeChatBotNewsArticleSchema.parse).toBe('function')
41
41
  })
42
42
 
43
- test('WeChatBotTemplateSchema is exported from barrel', () => {
43
+ it('WeChatBotTemplateSchema is exported from barrel', () => {
44
44
  expect(typeof WeChatBotTemplateSchema.parse).toBe('function')
45
45
  })
46
46
 
47
- test('WeChatBotUserInfoSchema is exported from barrel', () => {
47
+ it('WeChatBotUserInfoSchema is exported from barrel', () => {
48
48
  expect(typeof WeChatBotUserInfoSchema.parse).toBe('function')
49
49
  })
@@ -1,4 +1,4 @@
1
- import { expect, test } from 'bun:test'
1
+ import { expect, it } from 'bun:test'
2
2
 
3
3
  import {
4
4
  WeChatBotAccountEntrySchema,
@@ -10,7 +10,7 @@ import {
10
10
  WeChatBotUserInfoSchema,
11
11
  } from '@/platforms/wechatbot/types'
12
12
 
13
- test('WeChatBotAccountEntrySchema validates correct data', () => {
13
+ it('WeChatBotAccountEntrySchema validates correct data', () => {
14
14
  const result = WeChatBotAccountEntrySchema.safeParse({
15
15
  app_id: 'wx123',
16
16
  app_secret: 'secret123',
@@ -19,7 +19,7 @@ test('WeChatBotAccountEntrySchema validates correct data', () => {
19
19
  expect(result.success).toBe(true)
20
20
  })
21
21
 
22
- test('WeChatBotAccountEntrySchema rejects missing app_id', () => {
22
+ it('WeChatBotAccountEntrySchema rejects missing app_id', () => {
23
23
  const result = WeChatBotAccountEntrySchema.safeParse({
24
24
  app_secret: 'secret123',
25
25
  account_name: 'My Account',
@@ -27,7 +27,7 @@ test('WeChatBotAccountEntrySchema rejects missing app_id', () => {
27
27
  expect(result.success).toBe(false)
28
28
  })
29
29
 
30
- test('WeChatBotAccountEntrySchema rejects missing app_secret', () => {
30
+ it('WeChatBotAccountEntrySchema rejects missing app_secret', () => {
31
31
  const result = WeChatBotAccountEntrySchema.safeParse({
32
32
  app_id: 'wx123',
33
33
  account_name: 'My Account',
@@ -35,7 +35,7 @@ test('WeChatBotAccountEntrySchema rejects missing app_secret', () => {
35
35
  expect(result.success).toBe(false)
36
36
  })
37
37
 
38
- test('WeChatBotAccountEntrySchema rejects missing account_name', () => {
38
+ it('WeChatBotAccountEntrySchema rejects missing account_name', () => {
39
39
  const result = WeChatBotAccountEntrySchema.safeParse({
40
40
  app_id: 'wx123',
41
41
  app_secret: 'secret123',
@@ -43,7 +43,7 @@ test('WeChatBotAccountEntrySchema rejects missing account_name', () => {
43
43
  expect(result.success).toBe(false)
44
44
  })
45
45
 
46
- test('WeChatBotConfigSchema validates with current account', () => {
46
+ it('WeChatBotConfigSchema validates with current account', () => {
47
47
  const result = WeChatBotConfigSchema.safeParse({
48
48
  current: { account_id: 'wx123' },
49
49
  accounts: {
@@ -53,7 +53,7 @@ test('WeChatBotConfigSchema validates with current account', () => {
53
53
  expect(result.success).toBe(true)
54
54
  })
55
55
 
56
- test('WeChatBotConfigSchema validates with current null and empty accounts', () => {
56
+ it('WeChatBotConfigSchema validates with current null and empty accounts', () => {
57
57
  const result = WeChatBotConfigSchema.safeParse({
58
58
  current: null,
59
59
  accounts: {},
@@ -61,7 +61,7 @@ test('WeChatBotConfigSchema validates with current null and empty accounts', ()
61
61
  expect(result.success).toBe(true)
62
62
  })
63
63
 
64
- test('WeChatBotConfigSchema validates with multiple accounts', () => {
64
+ it('WeChatBotConfigSchema validates with multiple accounts', () => {
65
65
  const result = WeChatBotConfigSchema.safeParse({
66
66
  current: { account_id: 'wx-a' },
67
67
  accounts: {
@@ -72,17 +72,17 @@ test('WeChatBotConfigSchema validates with multiple accounts', () => {
72
72
  expect(result.success).toBe(true)
73
73
  })
74
74
 
75
- test('WeChatBotConfigSchema rejects missing accounts field', () => {
75
+ it('WeChatBotConfigSchema rejects missing accounts field', () => {
76
76
  const result = WeChatBotConfigSchema.safeParse({ current: null })
77
77
  expect(result.success).toBe(false)
78
78
  })
79
79
 
80
- test('WeChatBotConfigSchema rejects missing current field', () => {
80
+ it('WeChatBotConfigSchema rejects missing current field', () => {
81
81
  const result = WeChatBotConfigSchema.safeParse({ accounts: {} })
82
82
  expect(result.success).toBe(false)
83
83
  })
84
84
 
85
- test('WeChatBotCredentialsSchema validates correct data', () => {
85
+ it('WeChatBotCredentialsSchema validates correct data', () => {
86
86
  const result = WeChatBotCredentialsSchema.safeParse({
87
87
  app_id: 'wx123',
88
88
  app_secret: 'secret123',
@@ -91,7 +91,7 @@ test('WeChatBotCredentialsSchema validates correct data', () => {
91
91
  expect(result.success).toBe(true)
92
92
  })
93
93
 
94
- test('WeChatBotCredentialsSchema rejects missing app_id', () => {
94
+ it('WeChatBotCredentialsSchema rejects missing app_id', () => {
95
95
  const result = WeChatBotCredentialsSchema.safeParse({
96
96
  app_secret: 'secret123',
97
97
  account_name: 'My Account',
@@ -99,7 +99,7 @@ test('WeChatBotCredentialsSchema rejects missing app_id', () => {
99
99
  expect(result.success).toBe(false)
100
100
  })
101
101
 
102
- test('WeChatBotCredentialsSchema rejects missing app_secret', () => {
102
+ it('WeChatBotCredentialsSchema rejects missing app_secret', () => {
103
103
  const result = WeChatBotCredentialsSchema.safeParse({
104
104
  app_id: 'wx123',
105
105
  account_name: 'My Account',
@@ -107,7 +107,7 @@ test('WeChatBotCredentialsSchema rejects missing app_secret', () => {
107
107
  expect(result.success).toBe(false)
108
108
  })
109
109
 
110
- test('WeChatBotCredentialsSchema rejects missing account_name', () => {
110
+ it('WeChatBotCredentialsSchema rejects missing account_name', () => {
111
111
  const result = WeChatBotCredentialsSchema.safeParse({
112
112
  app_id: 'wx123',
113
113
  app_secret: 'secret123',
@@ -115,7 +115,7 @@ test('WeChatBotCredentialsSchema rejects missing account_name', () => {
115
115
  expect(result.success).toBe(false)
116
116
  })
117
117
 
118
- test('WeChatBotNewsArticleSchema validates correct data', () => {
118
+ it('WeChatBotNewsArticleSchema validates correct data', () => {
119
119
  const result = WeChatBotNewsArticleSchema.safeParse({
120
120
  title: 'Test Article',
121
121
  description: 'Test description',
@@ -125,7 +125,7 @@ test('WeChatBotNewsArticleSchema validates correct data', () => {
125
125
  expect(result.success).toBe(true)
126
126
  })
127
127
 
128
- test('WeChatBotNewsArticleSchema rejects missing title', () => {
128
+ it('WeChatBotNewsArticleSchema rejects missing title', () => {
129
129
  const result = WeChatBotNewsArticleSchema.safeParse({
130
130
  description: 'Test description',
131
131
  url: 'https://example.com',
@@ -134,7 +134,7 @@ test('WeChatBotNewsArticleSchema rejects missing title', () => {
134
134
  expect(result.success).toBe(false)
135
135
  })
136
136
 
137
- test('WeChatBotTemplateSchema validates correct data', () => {
137
+ it('WeChatBotTemplateSchema validates correct data', () => {
138
138
  const result = WeChatBotTemplateSchema.safeParse({
139
139
  template_id: 'tmpl-001',
140
140
  title: 'Order Notification',
@@ -146,7 +146,7 @@ test('WeChatBotTemplateSchema validates correct data', () => {
146
146
  expect(result.success).toBe(true)
147
147
  })
148
148
 
149
- test('WeChatBotTemplateSchema rejects missing template_id', () => {
149
+ it('WeChatBotTemplateSchema rejects missing template_id', () => {
150
150
  const result = WeChatBotTemplateSchema.safeParse({
151
151
  title: 'Order Notification',
152
152
  primary_industry: 'IT科技',
@@ -157,7 +157,7 @@ test('WeChatBotTemplateSchema rejects missing template_id', () => {
157
157
  expect(result.success).toBe(false)
158
158
  })
159
159
 
160
- test('WeChatBotUserInfoSchema validates correct data', () => {
160
+ it('WeChatBotUserInfoSchema validates correct data', () => {
161
161
  const result = WeChatBotUserInfoSchema.safeParse({
162
162
  subscribe: 1,
163
163
  openid: 'openid-123',
@@ -172,7 +172,7 @@ test('WeChatBotUserInfoSchema validates correct data', () => {
172
172
  expect(result.success).toBe(true)
173
173
  })
174
174
 
175
- test('WeChatBotUserInfoSchema validates with optional unionid', () => {
175
+ it('WeChatBotUserInfoSchema validates with optional unionid', () => {
176
176
  const result = WeChatBotUserInfoSchema.safeParse({
177
177
  subscribe: 1,
178
178
  openid: 'openid-123',
@@ -188,7 +188,7 @@ test('WeChatBotUserInfoSchema validates with optional unionid', () => {
188
188
  expect(result.success).toBe(true)
189
189
  })
190
190
 
191
- test('WeChatBotUserInfoSchema rejects missing openid', () => {
191
+ it('WeChatBotUserInfoSchema rejects missing openid', () => {
192
192
  const result = WeChatBotUserInfoSchema.safeParse({
193
193
  subscribe: 1,
194
194
  language: 'zh_CN',
@@ -202,22 +202,22 @@ test('WeChatBotUserInfoSchema rejects missing openid', () => {
202
202
  expect(result.success).toBe(false)
203
203
  })
204
204
 
205
- test('WeChatBotError has correct name', () => {
205
+ it('WeChatBotError has correct name', () => {
206
206
  const error = new WeChatBotError('Test error', 'TEST_CODE')
207
207
  expect(error.name).toBe('WeChatBotError')
208
208
  })
209
209
 
210
- test('WeChatBotError has correct message', () => {
210
+ it('WeChatBotError has correct message', () => {
211
211
  const error = new WeChatBotError('Test error', 'TEST_CODE')
212
212
  expect(error.message).toBe('Test error')
213
213
  })
214
214
 
215
- test('WeChatBotError has correct code', () => {
215
+ it('WeChatBotError has correct code', () => {
216
216
  const error = new WeChatBotError('Test error', 'TEST_CODE')
217
217
  expect(error.code).toBe('TEST_CODE')
218
218
  })
219
219
 
220
- test('WeChatBotError is instance of Error', () => {
220
+ it('WeChatBotError is instance of Error', () => {
221
221
  const error = new WeChatBotError('Test error', 'TEST_CODE')
222
222
  expect(error instanceof Error).toBe(true)
223
223
  })