agent-messenger 2.10.1 → 2.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +1 -1
- package/.env.template +4 -1
- package/README.md +77 -27
- package/bun.lock +26 -0
- package/dist/package.json +14 -1
- package/dist/src/platforms/channeltalk/commands/auth.d.ts +2 -1
- package/dist/src/platforms/channeltalk/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/commands/auth.js +5 -3
- package/dist/src/platforms/channeltalk/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.d.ts +2 -1
- package/dist/src/platforms/channeltalk/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/channeltalk/token-extractor.js +22 -6
- package/dist/src/platforms/channeltalk/token-extractor.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/cli.js +11 -1
- package/dist/src/platforms/channeltalkbot/cli.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/auth.js +1 -5
- package/dist/src/platforms/channeltalkbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/bot.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/bot.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/bot.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/chat.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/chat.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/chat.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/group.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/group.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/group.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/manager.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/manager.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/manager.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/message.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/message.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/commands/whoami.js +1 -6
- package/dist/src/platforms/channeltalkbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/channeltalkbot/credential-manager.d.ts +5 -0
- package/dist/src/platforms/channeltalkbot/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/channeltalkbot/credential-manager.js +34 -4
- package/dist/src/platforms/channeltalkbot/credential-manager.js.map +1 -1
- package/dist/src/platforms/discord/commands/auth.d.ts +1 -0
- package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/auth.js +3 -1
- package/dist/src/platforms/discord/commands/auth.js.map +1 -1
- package/dist/src/platforms/discord/listener.d.ts +2 -0
- package/dist/src/platforms/discord/listener.d.ts.map +1 -1
- package/dist/src/platforms/discord/listener.js +51 -21
- package/dist/src/platforms/discord/listener.js.map +1 -1
- package/dist/src/platforms/discord/token-extractor.d.ts +2 -1
- package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/discord/token-extractor.js +21 -6
- package/dist/src/platforms/discord/token-extractor.js.map +1 -1
- package/dist/src/platforms/discordbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/cli.js +12 -1
- package/dist/src/platforms/discordbot/cli.js.map +1 -1
- package/dist/src/platforms/discordbot/client.d.ts +3 -0
- package/dist/src/platforms/discordbot/client.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/client.js +3 -0
- package/dist/src/platforms/discordbot/client.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/auth.js +1 -5
- package/dist/src/platforms/discordbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/message.js +1 -6
- package/dist/src/platforms/discordbot/commands/message.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/server.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/server.js +1 -4
- package/dist/src/platforms/discordbot/commands/server.js.map +1 -1
- package/dist/src/platforms/discordbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/commands/whoami.js +1 -6
- package/dist/src/platforms/discordbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/discordbot/index.d.ts +3 -1
- package/dist/src/platforms/discordbot/index.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/index.js +2 -1
- package/dist/src/platforms/discordbot/index.js.map +1 -1
- package/dist/src/platforms/discordbot/listener.d.ts +43 -0
- package/dist/src/platforms/discordbot/listener.d.ts.map +1 -0
- package/dist/src/platforms/discordbot/listener.js +292 -0
- package/dist/src/platforms/discordbot/listener.js.map +1 -0
- package/dist/src/platforms/discordbot/types.d.ts +161 -0
- package/dist/src/platforms/discordbot/types.d.ts.map +1 -1
- package/dist/src/platforms/discordbot/types.js +34 -0
- package/dist/src/platforms/discordbot/types.js.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/instagram/commands/auth.js +3 -1
- package/dist/src/platforms/instagram/commands/auth.js.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.d.ts +2 -1
- package/dist/src/platforms/instagram/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/instagram/token-extractor.js +11 -2
- package/dist/src/platforms/instagram/token-extractor.js.map +1 -1
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/auth.js +4 -2
- package/dist/src/platforms/slack/commands/auth.js.map +1 -1
- package/dist/src/platforms/slack/token-extractor.d.ts +4 -1
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/slack/token-extractor.js +64 -15
- package/dist/src/platforms/slack/token-extractor.js.map +1 -1
- package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/cli.js +15 -3
- package/dist/src/platforms/slackbot/cli.js.map +1 -1
- package/dist/src/platforms/slackbot/client.d.ts +22 -1
- package/dist/src/platforms/slackbot/client.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/client.js +104 -1
- package/dist/src/platforms/slackbot/client.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/auth.js +1 -5
- package/dist/src/platforms/slackbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/file.d.ts +3 -0
- package/dist/src/platforms/slackbot/commands/file.d.ts.map +1 -0
- package/dist/src/platforms/slackbot/commands/file.js +164 -0
- package/dist/src/platforms/slackbot/commands/file.js.map +1 -0
- package/dist/src/platforms/slackbot/commands/index.d.ts +1 -0
- package/dist/src/platforms/slackbot/commands/index.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/index.js +1 -0
- package/dist/src/platforms/slackbot/commands/index.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.js +19 -0
- package/dist/src/platforms/slackbot/commands/message.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/whoami.js +1 -6
- package/dist/src/platforms/slackbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.d.ts +1 -0
- package/dist/src/platforms/slackbot/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.js +30 -2
- package/dist/src/platforms/slackbot/credential-manager.js.map +1 -1
- package/dist/src/platforms/slackbot/index.d.ts +4 -1
- package/dist/src/platforms/slackbot/index.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/index.js +1 -0
- package/dist/src/platforms/slackbot/index.js.map +1 -1
- package/dist/src/platforms/slackbot/listener.d.ts +44 -0
- package/dist/src/platforms/slackbot/listener.d.ts.map +1 -0
- package/dist/src/platforms/slackbot/listener.js +313 -0
- package/dist/src/platforms/slackbot/listener.js.map +1 -0
- package/dist/src/platforms/slackbot/types.d.ts +196 -1
- package/dist/src/platforms/slackbot/types.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/types.js +4 -1
- package/dist/src/platforms/slackbot/types.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts +1 -0
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js +37 -6
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/ensure-auth.js +31 -9
- package/dist/src/platforms/teams/ensure-auth.js.map +1 -1
- package/dist/src/platforms/teams/token-extractor.d.ts +4 -1
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +80 -31
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/dist/src/platforms/webex/commands/auth.d.ts +1 -0
- package/dist/src/platforms/webex/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/webex/commands/auth.js +3 -1
- package/dist/src/platforms/webex/commands/auth.js.map +1 -1
- package/dist/src/platforms/webex/token-extractor.d.ts +3 -1
- package/dist/src/platforms/webex/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/webex/token-extractor.js +16 -2
- package/dist/src/platforms/webex/token-extractor.js.map +1 -1
- package/dist/src/platforms/wechatbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/cli.js +11 -1
- package/dist/src/platforms/wechatbot/cli.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/auth.js +1 -5
- package/dist/src/platforms/wechatbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/message.js +1 -6
- package/dist/src/platforms/wechatbot/commands/message.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/template.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/template.js +1 -6
- package/dist/src/platforms/wechatbot/commands/template.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/user.js +1 -6
- package/dist/src/platforms/wechatbot/commands/user.js.map +1 -1
- package/dist/src/platforms/wechatbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/wechatbot/commands/whoami.js +1 -6
- package/dist/src/platforms/wechatbot/commands/whoami.js.map +1 -1
- package/dist/src/platforms/whatsappbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/cli.js +11 -1
- package/dist/src/platforms/whatsappbot/cli.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/auth.js +1 -5
- package/dist/src/platforms/whatsappbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/message.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/message.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/template.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/template.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/template.js.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/whoami.d.ts.map +1 -1
- package/dist/src/platforms/whatsappbot/commands/whoami.js +1 -6
- package/dist/src/platforms/whatsappbot/commands/whoami.js.map +1 -1
- package/dist/src/shared/chromium/browsers.d.ts +8 -0
- package/dist/src/shared/chromium/browsers.d.ts.map +1 -1
- package/dist/src/shared/chromium/browsers.js +58 -3
- package/dist/src/shared/chromium/browsers.js.map +1 -1
- package/dist/src/shared/chromium/cli-options.d.ts +5 -0
- package/dist/src/shared/chromium/cli-options.d.ts.map +1 -0
- package/dist/src/shared/chromium/cli-options.js +8 -0
- package/dist/src/shared/chromium/cli-options.js.map +1 -0
- package/dist/src/shared/chromium/decryptor.d.ts +6 -0
- package/dist/src/shared/chromium/decryptor.d.ts.map +1 -1
- package/dist/src/shared/chromium/decryptor.js +26 -6
- package/dist/src/shared/chromium/decryptor.js.map +1 -1
- package/dist/src/shared/chromium/index.d.ts +3 -1
- package/dist/src/shared/chromium/index.d.ts.map +1 -1
- package/dist/src/shared/chromium/index.js +2 -1
- package/dist/src/shared/chromium/index.js.map +1 -1
- package/dist/src/shared/utils/cli-output.d.ts +7 -0
- package/dist/src/shared/utils/cli-output.d.ts.map +1 -0
- package/dist/src/shared/utils/cli-output.js +7 -0
- package/dist/src/shared/utils/cli-output.js.map +1 -0
- package/dist/src/tui/app.d.ts.map +1 -1
- package/dist/src/tui/app.js +73 -20
- package/dist/src/tui/app.js.map +1 -1
- package/docs/content/docs/cli/channeltalk.mdx +4 -0
- package/docs/content/docs/cli/discord.mdx +5 -0
- package/docs/content/docs/cli/instagram.mdx +3 -0
- package/docs/content/docs/cli/slack.mdx +5 -0
- package/docs/content/docs/cli/slackbot.mdx +60 -22
- package/docs/content/docs/cli/teams.mdx +5 -0
- package/docs/content/docs/cli/webex.mdx +3 -0
- package/docs/content/docs/sdk/channeltalkbot.mdx +38 -1
- package/docs/content/docs/sdk/discordbot.mdx +501 -0
- package/docs/content/docs/sdk/meta.json +2 -0
- package/docs/content/docs/sdk/slackbot.mdx +576 -0
- package/e2e/README.md +1 -1
- package/e2e/channeltalk.e2e.test.ts +13 -13
- package/e2e/channeltalkbot.e2e.test.ts +13 -13
- package/e2e/config.ts +9 -4
- package/e2e/discord.e2e.test.ts +24 -24
- package/e2e/discordbot.e2e.test.ts +16 -16
- package/e2e/instagram.e2e.test.ts +10 -10
- package/e2e/kakaotalk.e2e.test.ts +7 -7
- package/e2e/line.e2e.test.ts +8 -8
- package/e2e/slack.e2e.test.ts +34 -34
- package/e2e/slackbot.e2e.test.ts +14 -14
- package/e2e/teams.e2e.test.ts +23 -23
- package/e2e/telegram.e2e.test.ts +8 -8
- package/e2e/webex.e2e.test.ts +14 -14
- package/e2e/whatsapp.e2e.test.ts +8 -8
- package/e2e/whatsappbot.e2e.test.ts +6 -6
- package/examples/discordbot-listen.ts +65 -0
- package/examples/slackbot-listen.ts +65 -0
- package/package.json +14 -1
- package/skills/agent-channeltalk/SKILL.md +5 -1
- package/skills/agent-channeltalk/references/authentication.md +5 -1
- package/skills/agent-channeltalkbot/SKILL.md +17 -3
- package/skills/agent-channeltalkbot/references/authentication.md +7 -5
- package/skills/agent-discord/SKILL.md +5 -1
- package/skills/agent-discord/references/authentication.md +7 -1
- package/skills/agent-discordbot/SKILL.md +13 -2
- package/skills/agent-discordbot/references/common-patterns.md +1 -1
- package/skills/agent-instagram/SKILL.md +7 -1
- package/skills/agent-instagram/references/authentication.md +6 -0
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +5 -1
- package/skills/agent-slack/references/authentication.md +7 -1
- package/skills/agent-slackbot/SKILL.md +56 -4
- package/skills/agent-slackbot/references/authentication.md +4 -0
- package/skills/agent-teams/SKILL.md +5 -1
- package/skills/agent-teams/references/authentication.md +7 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +7 -1
- package/skills/agent-webex/references/authentication.md +6 -0
- package/skills/agent-wechatbot/SKILL.md +16 -1
- package/skills/agent-wechatbot/references/authentication.md +219 -0
- package/skills/agent-wechatbot/references/common-patterns.md +358 -0
- package/skills/agent-wechatbot/templates/account-summary.sh +122 -0
- package/skills/agent-wechatbot/templates/post-message.sh +122 -0
- package/skills/agent-wechatbot/templates/send-template.sh +152 -0
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +30 -1
- package/src/platforms/channeltalk/client.test.ts +26 -26
- package/src/platforms/channeltalk/commands/auth.test.ts +31 -19
- package/src/platforms/channeltalk/commands/auth.ts +15 -5
- package/src/platforms/channeltalk/commands/bot.test.ts +2 -2
- package/src/platforms/channeltalk/commands/chat.test.ts +3 -3
- package/src/platforms/channeltalk/commands/group.test.ts +4 -4
- package/src/platforms/channeltalk/commands/manager.test.ts +2 -2
- package/src/platforms/channeltalk/commands/message.test.ts +17 -17
- package/src/platforms/channeltalk/commands/snapshot.test.ts +7 -7
- package/src/platforms/channeltalk/commands/whoami.test.ts +3 -3
- package/src/platforms/channeltalk/credential-manager.test.ts +18 -18
- package/src/platforms/channeltalk/ensure-auth.test.ts +5 -5
- package/src/platforms/channeltalk/index.test.ts +23 -23
- package/src/platforms/channeltalk/token-extractor.test.ts +21 -21
- package/src/platforms/channeltalk/token-extractor.ts +24 -5
- package/src/platforms/channeltalk/types.test.ts +12 -12
- package/src/platforms/channeltalkbot/cli.ts +9 -0
- package/src/platforms/channeltalkbot/client.test.ts +14 -14
- package/src/platforms/channeltalkbot/commands/auth.test.ts +16 -16
- package/src/platforms/channeltalkbot/commands/auth.ts +1 -5
- package/src/platforms/channeltalkbot/commands/bot.test.ts +6 -6
- package/src/platforms/channeltalkbot/commands/bot.ts +1 -6
- package/src/platforms/channeltalkbot/commands/chat.test.ts +9 -9
- package/src/platforms/channeltalkbot/commands/chat.ts +1 -6
- package/src/platforms/channeltalkbot/commands/group.test.ts +6 -6
- package/src/platforms/channeltalkbot/commands/group.ts +1 -6
- package/src/platforms/channeltalkbot/commands/manager.test.ts +3 -3
- package/src/platforms/channeltalkbot/commands/manager.ts +1 -6
- package/src/platforms/channeltalkbot/commands/message.test.ts +10 -10
- package/src/platforms/channeltalkbot/commands/message.ts +1 -6
- package/src/platforms/channeltalkbot/commands/snapshot.test.ts +7 -7
- package/src/platforms/channeltalkbot/commands/whoami.test.ts +6 -4
- package/src/platforms/channeltalkbot/commands/whoami.ts +1 -6
- package/src/platforms/channeltalkbot/credential-manager.test.ts +123 -29
- package/src/platforms/channeltalkbot/credential-manager.ts +37 -4
- package/src/platforms/channeltalkbot/index.test.ts +15 -15
- package/src/platforms/discord/client.test.ts +28 -28
- package/src/platforms/discord/commands/auth.test.ts +7 -7
- package/src/platforms/discord/commands/auth.ts +13 -2
- package/src/platforms/discord/commands/channel.test.ts +7 -7
- package/src/platforms/discord/commands/dm.test.ts +4 -4
- package/src/platforms/discord/commands/file.test.ts +4 -4
- package/src/platforms/discord/commands/friend.test.ts +6 -6
- package/src/platforms/discord/commands/member.test.ts +5 -5
- package/src/platforms/discord/commands/mention.test.ts +5 -5
- package/src/platforms/discord/commands/message.test.ts +9 -9
- package/src/platforms/discord/commands/note.test.ts +6 -6
- package/src/platforms/discord/commands/profile.test.ts +4 -4
- package/src/platforms/discord/commands/reaction.test.ts +5 -5
- package/src/platforms/discord/commands/server.test.ts +7 -7
- package/src/platforms/discord/commands/snapshot.test.ts +6 -6
- package/src/platforms/discord/commands/thread.test.ts +6 -6
- package/src/platforms/discord/commands/user.test.ts +5 -5
- package/src/platforms/discord/commands/whoami.test.ts +6 -6
- package/src/platforms/discord/credential-manager.test.ts +16 -16
- package/src/platforms/discord/ensure-auth.test.ts +8 -8
- package/src/platforms/discord/index.test.ts +17 -17
- package/src/platforms/discord/listener.test.ts +92 -34
- package/src/platforms/discord/listener.ts +43 -19
- package/src/platforms/discord/token-extractor.test.ts +53 -53
- package/src/platforms/discord/token-extractor.ts +30 -6
- package/src/platforms/discord/types.test.ts +26 -26
- package/src/platforms/discordbot/cli.ts +10 -0
- package/src/platforms/discordbot/client.test.ts +31 -31
- package/src/platforms/discordbot/client.ts +4 -0
- package/src/platforms/discordbot/commands/auth.test.ts +18 -18
- package/src/platforms/discordbot/commands/auth.ts +1 -5
- package/src/platforms/discordbot/commands/channel.test.ts +11 -11
- package/src/platforms/discordbot/commands/file.test.ts +7 -7
- package/src/platforms/discordbot/commands/message.test.ts +25 -25
- package/src/platforms/discordbot/commands/message.ts +1 -6
- package/src/platforms/discordbot/commands/reaction.test.ts +6 -6
- package/src/platforms/discordbot/commands/server.test.ts +12 -12
- package/src/platforms/discordbot/commands/server.ts +1 -5
- package/src/platforms/discordbot/commands/snapshot.test.ts +13 -13
- package/src/platforms/discordbot/commands/thread.test.ts +10 -10
- package/src/platforms/discordbot/commands/user.test.ts +9 -9
- package/src/platforms/discordbot/commands/whoami.test.ts +4 -4
- package/src/platforms/discordbot/commands/whoami.ts +1 -6
- package/src/platforms/discordbot/credential-manager.test.ts +28 -28
- package/src/platforms/discordbot/index.test.ts +82 -0
- package/src/platforms/discordbot/index.ts +27 -9
- package/src/platforms/discordbot/listener.test.ts +1002 -0
- package/src/platforms/discordbot/listener.ts +321 -0
- package/src/platforms/discordbot/types.ts +163 -0
- package/src/platforms/instagram/client.test.ts +18 -18
- package/src/platforms/instagram/commands/auth.test.ts +11 -11
- package/src/platforms/instagram/commands/auth.ts +9 -1
- package/src/platforms/instagram/commands/chat.test.ts +6 -6
- package/src/platforms/instagram/commands/message.test.ts +11 -11
- package/src/platforms/instagram/commands/shared.test.ts +12 -12
- package/src/platforms/instagram/commands/whoami.test.ts +3 -3
- package/src/platforms/instagram/credential-manager.test.ts +21 -21
- package/src/platforms/instagram/ensure-auth.test.ts +4 -4
- package/src/platforms/instagram/index.test.ts +9 -9
- package/src/platforms/instagram/listener.test.ts +8 -8
- package/src/platforms/instagram/token-extractor.test.ts +35 -35
- package/src/platforms/instagram/token-extractor.ts +13 -1
- package/src/platforms/kakaotalk/client.test.ts +33 -33
- package/src/platforms/kakaotalk/commands/auth.test.ts +11 -11
- package/src/platforms/kakaotalk/commands/chat.test.ts +6 -6
- package/src/platforms/kakaotalk/commands/message.test.ts +7 -7
- package/src/platforms/kakaotalk/commands/whoami.test.ts +5 -5
- package/src/platforms/kakaotalk/credential-manager.test.ts +15 -15
- package/src/platforms/kakaotalk/index.test.ts +15 -15
- package/src/platforms/kakaotalk/listener.test.ts +17 -17
- package/src/platforms/line/client.test.ts +17 -17
- package/src/platforms/line/commands/auth.test.ts +8 -8
- package/src/platforms/line/commands/chat.test.ts +7 -7
- package/src/platforms/line/commands/friend.test.ts +6 -6
- package/src/platforms/line/commands/message.test.ts +7 -7
- package/src/platforms/line/commands/whoami.test.ts +6 -6
- package/src/platforms/line/credential-manager.test.ts +17 -17
- package/src/platforms/line/index.test.ts +10 -10
- package/src/platforms/line/listener.test.ts +15 -15
- package/src/platforms/line/types.test.ts +14 -14
- package/src/platforms/slack/cli.test.ts +8 -8
- package/src/platforms/slack/client.test.ts +151 -151
- package/src/platforms/slack/commands/activity.test.ts +13 -13
- package/src/platforms/slack/commands/auth.test.ts +34 -34
- package/src/platforms/slack/commands/auth.ts +11 -2
- package/src/platforms/slack/commands/bookmark.test.ts +9 -9
- package/src/platforms/slack/commands/channel.test.ts +17 -17
- package/src/platforms/slack/commands/drafts.test.ts +7 -7
- package/src/platforms/slack/commands/emoji.test.ts +3 -3
- package/src/platforms/slack/commands/file.test.ts +12 -12
- package/src/platforms/slack/commands/message.test.ts +19 -19
- package/src/platforms/slack/commands/pin.test.ts +7 -7
- package/src/platforms/slack/commands/reaction.test.ts +10 -10
- package/src/platforms/slack/commands/reminder.test.ts +9 -9
- package/src/platforms/slack/commands/saved.test.ts +7 -7
- package/src/platforms/slack/commands/sections.test.ts +5 -5
- package/src/platforms/slack/commands/snapshot.test.ts +13 -13
- package/src/platforms/slack/commands/unread.test.ts +6 -6
- package/src/platforms/slack/commands/user.test.ts +10 -10
- package/src/platforms/slack/commands/usergroup.test.ts +15 -15
- package/src/platforms/slack/commands/whoami.test.ts +6 -6
- package/src/platforms/slack/commands/workspace.test.ts +26 -26
- package/src/platforms/slack/credential-manager.test.ts +14 -14
- package/src/platforms/slack/ensure-auth.test.ts +21 -21
- package/src/platforms/slack/index.test.ts +12 -12
- package/src/platforms/slack/listener.test.ts +17 -17
- package/src/platforms/slack/token-extractor-node.test.ts +2 -2
- package/src/platforms/slack/token-extractor.test.ts +133 -37
- package/src/platforms/slack/token-extractor.ts +76 -13
- package/src/platforms/slack/types.test.ts +21 -21
- package/src/platforms/slackbot/cli.ts +13 -1
- package/src/platforms/slackbot/client.test.ts +296 -22
- package/src/platforms/slackbot/client.ts +130 -2
- package/src/platforms/slackbot/commands/auth.test.ts +14 -14
- package/src/platforms/slackbot/commands/auth.ts +1 -5
- package/src/platforms/slackbot/commands/channel.test.ts +7 -7
- package/src/platforms/slackbot/commands/file.test.ts +201 -0
- package/src/platforms/slackbot/commands/file.ts +212 -0
- package/src/platforms/slackbot/commands/index.ts +1 -0
- package/src/platforms/slackbot/commands/message.test.ts +13 -13
- package/src/platforms/slackbot/commands/message.ts +22 -0
- package/src/platforms/slackbot/commands/reaction.test.ts +6 -6
- package/src/platforms/slackbot/commands/user.test.ts +7 -7
- package/src/platforms/slackbot/commands/whoami.test.ts +4 -4
- package/src/platforms/slackbot/commands/whoami.ts +1 -6
- package/src/platforms/slackbot/credential-manager.test.ts +83 -23
- package/src/platforms/slackbot/credential-manager.ts +32 -2
- package/src/platforms/slackbot/index.test.ts +59 -0
- package/src/platforms/slackbot/index.ts +31 -7
- package/src/platforms/slackbot/listener.test.ts +1012 -0
- package/src/platforms/slackbot/listener.ts +362 -0
- package/src/platforms/slackbot/types.test.ts +7 -7
- package/src/platforms/slackbot/types.ts +224 -1
- package/src/platforms/teams/client.test.ts +30 -30
- package/src/platforms/teams/commands/auth.test.ts +9 -9
- package/src/platforms/teams/commands/auth.ts +66 -7
- package/src/platforms/teams/commands/channel.test.ts +7 -7
- package/src/platforms/teams/commands/file.test.ts +4 -4
- package/src/platforms/teams/commands/message.test.ts +5 -5
- package/src/platforms/teams/commands/reaction.test.ts +4 -4
- package/src/platforms/teams/commands/snapshot.test.ts +7 -7
- package/src/platforms/teams/commands/team.test.ts +8 -8
- package/src/platforms/teams/commands/user.test.ts +4 -4
- package/src/platforms/teams/commands/whoami.test.ts +6 -6
- package/src/platforms/teams/credential-manager.test.ts +17 -17
- package/src/platforms/teams/ensure-auth.test.ts +69 -18
- package/src/platforms/teams/ensure-auth.ts +39 -11
- package/src/platforms/teams/index.test.ts +15 -15
- package/src/platforms/teams/token-extractor.test.ts +251 -69
- package/src/platforms/teams/token-extractor.ts +94 -31
- package/src/platforms/teams/types.test.ts +26 -26
- package/src/platforms/telegram/app-config.test.ts +4 -4
- package/src/platforms/telegram/chat-utils.test.ts +12 -12
- package/src/platforms/telegram/client.test.ts +4 -4
- package/src/platforms/telegram/commands/auth.test.ts +16 -16
- package/src/platforms/telegram/commands/chat.test.ts +9 -9
- package/src/platforms/telegram/commands/message.test.ts +6 -6
- package/src/platforms/telegram/commands/shared.test.ts +3 -3
- package/src/platforms/telegram/commands/whoami.test.ts +3 -3
- package/src/platforms/telegram/credential-manager.test.ts +10 -10
- package/src/platforms/telegram/types.test.ts +6 -6
- package/src/platforms/webex/app-config.test.ts +8 -8
- package/src/platforms/webex/cli.test.ts +5 -5
- package/src/platforms/webex/client.test.ts +65 -65
- package/src/platforms/webex/commands/auth.test.ts +18 -18
- package/src/platforms/webex/commands/auth.ts +13 -2
- package/src/platforms/webex/commands/member.test.ts +5 -5
- package/src/platforms/webex/commands/message.test.ts +12 -12
- package/src/platforms/webex/commands/snapshot.test.ts +5 -5
- package/src/platforms/webex/commands/space.test.ts +10 -10
- package/src/platforms/webex/commands/whoami.test.ts +6 -6
- package/src/platforms/webex/credential-manager.test.ts +22 -22
- package/src/platforms/webex/encryption.test.ts +4 -4
- package/src/platforms/webex/ensure-auth.test.ts +5 -5
- package/src/platforms/webex/index.test.ts +5 -5
- package/src/platforms/webex/markdown-to-html.test.ts +33 -33
- package/src/platforms/webex/token-extractor.test.ts +23 -23
- package/src/platforms/webex/token-extractor.ts +25 -3
- package/src/platforms/webex/types.test.ts +27 -27
- package/src/platforms/wechatbot/cli.ts +9 -0
- package/src/platforms/wechatbot/client.test.ts +27 -27
- package/src/platforms/wechatbot/commands/auth.test.ts +15 -15
- package/src/platforms/wechatbot/commands/auth.ts +1 -5
- package/src/platforms/wechatbot/commands/message.test.ts +8 -8
- package/src/platforms/wechatbot/commands/message.ts +1 -6
- package/src/platforms/wechatbot/commands/template.test.ts +9 -9
- package/src/platforms/wechatbot/commands/template.ts +1 -6
- package/src/platforms/wechatbot/commands/user.test.ts +7 -7
- package/src/platforms/wechatbot/commands/user.ts +1 -6
- package/src/platforms/wechatbot/commands/whoami.test.ts +5 -5
- package/src/platforms/wechatbot/commands/whoami.ts +1 -6
- package/src/platforms/wechatbot/credential-manager.test.ts +18 -18
- package/src/platforms/wechatbot/index.test.ts +10 -10
- package/src/platforms/wechatbot/types.test.ts +25 -25
- package/src/platforms/whatsapp/commands/auth.test.ts +13 -13
- package/src/platforms/whatsapp/commands/chat.test.ts +8 -8
- package/src/platforms/whatsapp/commands/message.test.ts +10 -10
- package/src/platforms/whatsapp/commands/whoami.test.ts +3 -3
- package/src/platforms/whatsapp/credential-manager.test.ts +23 -23
- package/src/platforms/whatsapp/ensure-auth.test.ts +4 -4
- package/src/platforms/whatsapp/index.test.ts +8 -8
- package/src/platforms/whatsapp/types.test.ts +42 -42
- package/src/platforms/whatsappbot/cli.ts +9 -0
- package/src/platforms/whatsappbot/client.test.ts +27 -27
- package/src/platforms/whatsappbot/commands/auth.test.ts +14 -14
- package/src/platforms/whatsappbot/commands/auth.ts +1 -5
- package/src/platforms/whatsappbot/commands/message.test.ts +16 -16
- package/src/platforms/whatsappbot/commands/message.ts +1 -6
- package/src/platforms/whatsappbot/commands/template.test.ts +9 -9
- package/src/platforms/whatsappbot/commands/template.ts +1 -6
- package/src/platforms/whatsappbot/commands/whoami.test.ts +5 -5
- package/src/platforms/whatsappbot/commands/whoami.ts +1 -6
- package/src/platforms/whatsappbot/credential-manager.test.ts +18 -18
- package/src/platforms/whatsappbot/index.test.ts +7 -7
- package/src/platforms/whatsappbot/types.test.ts +18 -18
- package/src/shared/chromium/browsers.test.ts +102 -22
- package/src/shared/chromium/browsers.ts +72 -3
- package/src/shared/chromium/cli-options.test.ts +22 -0
- package/src/shared/chromium/cli-options.ts +12 -0
- package/src/shared/chromium/cookie-reader.test.ts +13 -13
- package/src/shared/chromium/decryptor.test.ts +97 -32
- package/src/shared/chromium/decryptor.ts +27 -6
- package/src/shared/chromium/index.ts +3 -0
- package/src/shared/utils/cli-output.test.ts +57 -0
- package/src/shared/utils/cli-output.ts +8 -0
- package/src/shared/utils/concurrency.test.ts +6 -6
- package/src/shared/utils/derived-key-cache.test.ts +11 -11
- package/src/tui/app.ts +129 -20
- package/src/tui/utils.test.ts +31 -31
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterAll, describe, expect, mock,
|
|
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
|
|
|
@@ -43,7 +43,7 @@ afterAll(() => {
|
|
|
43
43
|
})
|
|
44
44
|
|
|
45
45
|
describe('sendAction', () => {
|
|
46
|
-
|
|
46
|
+
it('sends text message and returns success', async () => {
|
|
47
47
|
const credManager = await makeCredManagerWithCreds()
|
|
48
48
|
const result = await sendAction('openid-123', 'Hello world', { _credManager: credManager })
|
|
49
49
|
|
|
@@ -51,7 +51,7 @@ describe('sendAction', () => {
|
|
|
51
51
|
expect(sendTextMessageMock).toHaveBeenCalledWith('openid-123', 'Hello world')
|
|
52
52
|
})
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
it('returns error when client throws', async () => {
|
|
55
55
|
mock.module('../client', () => ({
|
|
56
56
|
WeChatBotClient: class MockWeChatBotClient {
|
|
57
57
|
async login() {
|
|
@@ -71,7 +71,7 @@ describe('sendAction', () => {
|
|
|
71
71
|
})
|
|
72
72
|
|
|
73
73
|
describe('sendImageAction', () => {
|
|
74
|
-
|
|
74
|
+
it('sends image message and returns success', async () => {
|
|
75
75
|
mock.module('../client', () => ({
|
|
76
76
|
WeChatBotClient: class MockWeChatBotClient {
|
|
77
77
|
async login() {
|
|
@@ -88,7 +88,7 @@ describe('sendImageAction', () => {
|
|
|
88
88
|
expect(result.success).toBe(true)
|
|
89
89
|
})
|
|
90
90
|
|
|
91
|
-
|
|
91
|
+
it('returns error when client throws', async () => {
|
|
92
92
|
mock.module('../client', () => ({
|
|
93
93
|
WeChatBotClient: class MockWeChatBotClient {
|
|
94
94
|
async login() {
|
|
@@ -107,7 +107,7 @@ describe('sendImageAction', () => {
|
|
|
107
107
|
})
|
|
108
108
|
|
|
109
109
|
describe('sendNewsAction', () => {
|
|
110
|
-
|
|
110
|
+
it('returns error when required options are missing', async () => {
|
|
111
111
|
const credManager = await makeCredManagerWithCreds()
|
|
112
112
|
const result = await sendNewsAction('openid-123', { _credManager: credManager })
|
|
113
113
|
|
|
@@ -115,7 +115,7 @@ describe('sendNewsAction', () => {
|
|
|
115
115
|
expect(result.success).toBeUndefined()
|
|
116
116
|
})
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
it('returns error when title is missing', async () => {
|
|
119
119
|
const credManager = await makeCredManagerWithCreds()
|
|
120
120
|
const result = await sendNewsAction('openid-123', {
|
|
121
121
|
description: 'Test desc',
|
|
@@ -127,7 +127,7 @@ describe('sendNewsAction', () => {
|
|
|
127
127
|
expect(result.error).toContain('--title')
|
|
128
128
|
})
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
it('sends news message with all required options', async () => {
|
|
131
131
|
mock.module('../client', () => ({
|
|
132
132
|
WeChatBotClient: class MockWeChatBotClient {
|
|
133
133
|
async login() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
4
4
|
|
|
5
5
|
import type { WeChatBotNewsArticle } from '../types'
|
|
6
6
|
import type { AccountOption } from './shared'
|
|
@@ -63,11 +63,6 @@ export async function sendNewsAction(openId: string, options: MessageOptions): P
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
function cliOutput(result: MessageResult, pretty?: boolean): void {
|
|
67
|
-
console.log(formatOutput(result, pretty))
|
|
68
|
-
if (result.error) process.exit(1)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
66
|
export const messageCommand = new Command('message')
|
|
72
67
|
.description('Message commands')
|
|
73
68
|
.addCommand(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterAll, describe, expect, mock,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
179
|
+
it('returns error when client throws', async () => {
|
|
180
180
|
mock.module('../client', () => ({
|
|
181
181
|
WeChatBotClient: class MockWeChatBotClient {
|
|
182
182
|
async login() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
4
4
|
|
|
5
5
|
import type { WeChatBotTemplate } from '../types'
|
|
6
6
|
import type { AccountOption } from './shared'
|
|
@@ -61,11 +61,6 @@ export async function deleteAction(templateId: string, options: TemplateOptions)
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
-
function cliOutput(result: TemplateResult, pretty?: boolean): void {
|
|
65
|
-
console.log(formatOutput(result, pretty))
|
|
66
|
-
if (result.error) process.exit(1)
|
|
67
|
-
}
|
|
68
|
-
|
|
69
64
|
export const templateCommand = new Command('template')
|
|
70
65
|
.description('Template message commands')
|
|
71
66
|
.addCommand(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterAll, describe, expect, mock,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
4
4
|
|
|
5
5
|
import type { WeChatBotUserInfo } from '../types'
|
|
6
6
|
import type { AccountOption } from './shared'
|
|
@@ -45,11 +45,6 @@ export async function getAction(openId: string, options: UserOptions): Promise<U
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
function cliOutput(result: UserResult, pretty?: boolean): void {
|
|
49
|
-
console.log(formatOutput(result, pretty))
|
|
50
|
-
if (result.error) process.exit(1)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
48
|
export const userCommand = new Command('user')
|
|
54
49
|
.description('User management commands')
|
|
55
50
|
.addCommand(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, mock,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { cliOutput } from '@/shared/utils/cli-output'
|
|
4
4
|
|
|
5
5
|
import { WeChatBotCredentialManager } from '../credential-manager'
|
|
6
6
|
import type { AccountOption } from './shared'
|
|
@@ -29,11 +29,6 @@ export async function whoamiAction(options: AccountOption): Promise<WhoamiResult
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
function cliOutput(result: WhoamiResult, pretty?: boolean): void {
|
|
33
|
-
console.log(formatOutput(result, pretty))
|
|
34
|
-
if (result.error) process.exit(1)
|
|
35
|
-
}
|
|
36
|
-
|
|
37
32
|
export const whoamiCommand = new Command('whoami')
|
|
38
33
|
.description('Show current authenticated bot')
|
|
39
34
|
.option('--account <id>', 'Account ID to use')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterAll, describe, expect,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
15
|
+
it('WeChatBotClient is exported from barrel', () => {
|
|
16
16
|
expect(typeof WeChatBotClient).toBe('function')
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
it('WeChatBotCredentialManager is exported from barrel', () => {
|
|
20
20
|
expect(typeof WeChatBotCredentialManager).toBe('function')
|
|
21
21
|
})
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
it('WeChatBotError is exported from barrel', () => {
|
|
24
24
|
expect(typeof WeChatBotError).toBe('function')
|
|
25
25
|
})
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
it('WeChatBotAccountEntrySchema is exported from barrel', () => {
|
|
28
28
|
expect(typeof WeChatBotAccountEntrySchema.parse).toBe('function')
|
|
29
29
|
})
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
it('WeChatBotConfigSchema is exported from barrel', () => {
|
|
32
32
|
expect(typeof WeChatBotConfigSchema.parse).toBe('function')
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
it('WeChatBotCredentialsSchema is exported from barrel', () => {
|
|
36
36
|
expect(typeof WeChatBotCredentialsSchema.parse).toBe('function')
|
|
37
37
|
})
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
it('WeChatBotNewsArticleSchema is exported from barrel', () => {
|
|
40
40
|
expect(typeof WeChatBotNewsArticleSchema.parse).toBe('function')
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
it('WeChatBotTemplateSchema is exported from barrel', () => {
|
|
44
44
|
expect(typeof WeChatBotTemplateSchema.parse).toBe('function')
|
|
45
45
|
})
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
it('WeChatBotUserInfoSchema is exported from barrel', () => {
|
|
48
48
|
expect(typeof WeChatBotUserInfoSchema.parse).toBe('function')
|
|
49
49
|
})
|