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,43 +1,43 @@
|
|
|
1
|
-
import { describe, expect,
|
|
1
|
+
import { describe, expect, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
import { LineClient } from './client'
|
|
4
4
|
import { LineError } from './types'
|
|
5
5
|
import type { LineChat, LineDevice, LineLoginResult, LineMessage, LineSendResult } from './types'
|
|
6
6
|
|
|
7
7
|
describe('LineClient', () => {
|
|
8
|
-
|
|
8
|
+
it('constructor creates instance without errors', () => {
|
|
9
9
|
const client = new LineClient()
|
|
10
10
|
expect(client).toBeInstanceOf(LineClient)
|
|
11
11
|
})
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
it('constructor accepts a custom credential manager', () => {
|
|
14
14
|
const { LineCredentialManager } = require('./credential-manager')
|
|
15
15
|
const manager = new LineCredentialManager()
|
|
16
16
|
const client = new LineClient(manager)
|
|
17
17
|
expect(client).toBeInstanceOf(LineClient)
|
|
18
18
|
})
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
it('close() is idempotent - can be called multiple times without error', () => {
|
|
21
21
|
const client = new LineClient()
|
|
22
22
|
expect(() => client.close()).not.toThrow()
|
|
23
23
|
expect(() => client.close()).not.toThrow()
|
|
24
24
|
expect(() => client.close()).not.toThrow()
|
|
25
25
|
})
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
it('close() is idempotent after login attempt fails', async () => {
|
|
28
28
|
const client = new LineClient()
|
|
29
29
|
client.close()
|
|
30
30
|
client.close()
|
|
31
31
|
})
|
|
32
32
|
|
|
33
33
|
describe('ensureClient throws when not logged in', () => {
|
|
34
|
-
|
|
34
|
+
it('getChats() throws LineError with code not_connected', async () => {
|
|
35
35
|
const client = new LineClient()
|
|
36
36
|
await expect(client.getChats()).rejects.toThrow(LineError)
|
|
37
37
|
await expect(client.getChats()).rejects.toMatchObject({ code: 'not_connected' })
|
|
38
38
|
})
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
it('getMessages() throws LineError when not logged in', async () => {
|
|
41
41
|
const client = new LineClient()
|
|
42
42
|
await expect(client.getMessages('chat123')).rejects.toThrow(LineError)
|
|
43
43
|
await expect(client.getMessages('chat123')).rejects.toMatchObject({
|
|
@@ -45,7 +45,7 @@ describe('LineClient', () => {
|
|
|
45
45
|
})
|
|
46
46
|
})
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
it('sendMessage() throws LineError when not logged in', async () => {
|
|
49
49
|
const client = new LineClient()
|
|
50
50
|
await expect(client.sendMessage('chat123', 'hello')).rejects.toThrow(LineError)
|
|
51
51
|
await expect(client.sendMessage('chat123', 'hello')).rejects.toMatchObject({
|
|
@@ -55,7 +55,7 @@ describe('LineClient', () => {
|
|
|
55
55
|
})
|
|
56
56
|
|
|
57
57
|
describe('login() without credentials', () => {
|
|
58
|
-
|
|
58
|
+
it('throws LineError when no saved credentials exist', async () => {
|
|
59
59
|
const { LineCredentialManager } = require('./credential-manager')
|
|
60
60
|
const { mkdtemp } = require('node:fs/promises')
|
|
61
61
|
const { tmpdir } = require('node:os')
|
|
@@ -71,7 +71,7 @@ describe('LineClient', () => {
|
|
|
71
71
|
})
|
|
72
72
|
|
|
73
73
|
describe('LineError', () => {
|
|
74
|
-
|
|
74
|
+
it('LineError has correct name, code, and message', () => {
|
|
75
75
|
const err = new LineError('test_code', 'test message')
|
|
76
76
|
expect(err).toBeInstanceOf(Error)
|
|
77
77
|
expect(err).toBeInstanceOf(LineError)
|
|
@@ -80,7 +80,7 @@ describe('LineClient', () => {
|
|
|
80
80
|
expect(err.message).toBe('test message')
|
|
81
81
|
})
|
|
82
82
|
|
|
83
|
-
|
|
83
|
+
it('LineError is thrown by getChats and wraps the not_connected error', async () => {
|
|
84
84
|
const client = new LineClient()
|
|
85
85
|
try {
|
|
86
86
|
await client.getChats()
|
|
@@ -95,13 +95,13 @@ describe('LineClient', () => {
|
|
|
95
95
|
})
|
|
96
96
|
|
|
97
97
|
describe('default device detection', () => {
|
|
98
|
-
|
|
98
|
+
it('LineClient can be instantiated (device detection does not throw)', () => {
|
|
99
99
|
expect(() => new LineClient()).not.toThrow()
|
|
100
100
|
})
|
|
101
101
|
})
|
|
102
102
|
|
|
103
103
|
describe('type exports', () => {
|
|
104
|
-
|
|
104
|
+
it('LineChat type is correctly shaped', () => {
|
|
105
105
|
const chat: LineChat = {
|
|
106
106
|
chat_id: 'c1234567890abcdef1234567890abcdef',
|
|
107
107
|
type: 'group',
|
|
@@ -114,7 +114,7 @@ describe('LineClient', () => {
|
|
|
114
114
|
expect(chat.member_count).toBe(5)
|
|
115
115
|
})
|
|
116
116
|
|
|
117
|
-
|
|
117
|
+
it('LineMessage type is correctly shaped', () => {
|
|
118
118
|
const msg: LineMessage = {
|
|
119
119
|
message_id: 'msg123',
|
|
120
120
|
chat_id: 'chat456',
|
|
@@ -127,7 +127,7 @@ describe('LineClient', () => {
|
|
|
127
127
|
expect(msg.text).toBe('Hello')
|
|
128
128
|
})
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
it('LineMessage text can be null', () => {
|
|
131
131
|
const msg: LineMessage = {
|
|
132
132
|
message_id: 'msg123',
|
|
133
133
|
chat_id: 'chat456',
|
|
@@ -139,7 +139,7 @@ describe('LineClient', () => {
|
|
|
139
139
|
expect(msg.text).toBeNull()
|
|
140
140
|
})
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
it('LineSendResult type is correctly shaped', () => {
|
|
143
143
|
const result: LineSendResult = {
|
|
144
144
|
success: true,
|
|
145
145
|
chat_id: 'chat456',
|
|
@@ -149,7 +149,7 @@ describe('LineClient', () => {
|
|
|
149
149
|
expect(result.success).toBe(true)
|
|
150
150
|
})
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
it('LineLoginResult type is correctly shaped', () => {
|
|
153
153
|
const result: LineLoginResult = {
|
|
154
154
|
authenticated: true,
|
|
155
155
|
account_id: 'u1234567890abcdef1234567890abcdef',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, expect, mock, spyOn,
|
|
1
|
+
import { afterEach, beforeEach, expect, mock, spyOn, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const originalConsoleLog = console.log
|
|
4
4
|
|
|
@@ -55,7 +55,7 @@ afterEach(() => {
|
|
|
55
55
|
console.log = originalConsoleLog
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
it('status: outputs account info when account exists', async () => {
|
|
59
59
|
// when
|
|
60
60
|
await authCommand.parseAsync(['node', 'auth', 'status'])
|
|
61
61
|
|
|
@@ -68,7 +68,7 @@ test('status: outputs account info when account exists', async () => {
|
|
|
68
68
|
expect(output.device).toBe('ANDROIDSECONDARY')
|
|
69
69
|
})
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
it('status: outputs error when no account configured', async () => {
|
|
72
72
|
// given
|
|
73
73
|
getAccountSpy.mockResolvedValue(null)
|
|
74
74
|
|
|
@@ -81,7 +81,7 @@ test('status: outputs error when no account configured', async () => {
|
|
|
81
81
|
expect(output.error).toBe('No LINE account configured')
|
|
82
82
|
})
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
it('list: outputs all accounts', async () => {
|
|
85
85
|
// when
|
|
86
86
|
await authCommand.parseAsync(['node', 'auth', 'list'])
|
|
87
87
|
|
|
@@ -94,7 +94,7 @@ test('list: outputs all accounts', async () => {
|
|
|
94
94
|
expect(output[1].account_id).toBe('u456')
|
|
95
95
|
})
|
|
96
96
|
|
|
97
|
-
|
|
97
|
+
it('list: outputs empty array when no accounts', async () => {
|
|
98
98
|
// given
|
|
99
99
|
listAccountsSpy.mockResolvedValue([])
|
|
100
100
|
|
|
@@ -106,7 +106,7 @@ test('list: outputs empty array when no accounts', async () => {
|
|
|
106
106
|
expect(output).toHaveLength(0)
|
|
107
107
|
})
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
it('use: sets current account and outputs result', async () => {
|
|
110
110
|
// when
|
|
111
111
|
await authCommand.parseAsync(['node', 'auth', 'use', 'u456'])
|
|
112
112
|
|
|
@@ -117,7 +117,7 @@ test('use: sets current account and outputs result', async () => {
|
|
|
117
117
|
expect(output.current_account).toBe('u456')
|
|
118
118
|
})
|
|
119
119
|
|
|
120
|
-
|
|
120
|
+
it('logout: removes specific account when account-id provided', async () => {
|
|
121
121
|
// when
|
|
122
122
|
await authCommand.parseAsync(['node', 'auth', 'logout', 'u123'])
|
|
123
123
|
|
|
@@ -129,7 +129,7 @@ test('logout: removes specific account when account-id provided', async () => {
|
|
|
129
129
|
expect(output.message).toContain('u123')
|
|
130
130
|
})
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
it('logout: clears all accounts when no account-id provided', async () => {
|
|
133
133
|
// when
|
|
134
134
|
await authCommand.parseAsync(['node', 'auth', 'logout'])
|
|
135
135
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, expect, mock, spyOn,
|
|
1
|
+
import { afterEach, beforeEach, expect, mock, spyOn, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const originalConsoleLog = console.log
|
|
4
4
|
|
|
@@ -48,7 +48,7 @@ afterEach(() => {
|
|
|
48
48
|
console.log = originalConsoleLog
|
|
49
49
|
})
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
it('list: fetches and outputs chats', async () => {
|
|
52
52
|
// when
|
|
53
53
|
await chatCommand.parseAsync(['node', 'chat', 'list'])
|
|
54
54
|
|
|
@@ -62,7 +62,7 @@ test('list: fetches and outputs chats', async () => {
|
|
|
62
62
|
expect(output[1].chat_id).toBe('c222')
|
|
63
63
|
})
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
it('list: uses default limit of 50 when no limit provided', async () => {
|
|
66
66
|
// when
|
|
67
67
|
await chatCommand.parseAsync(['node', 'chat', 'list'])
|
|
68
68
|
|
|
@@ -70,7 +70,7 @@ test('list: uses default limit of 50 when no limit provided', async () => {
|
|
|
70
70
|
expect(getChatsSpy).toHaveBeenCalledWith({ limit: 50 })
|
|
71
71
|
})
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
it('list: uses custom limit when --limit option provided', async () => {
|
|
74
74
|
// when
|
|
75
75
|
await chatCommand.parseAsync(['node', 'chat', 'list', '--limit', '10'])
|
|
76
76
|
|
|
@@ -78,7 +78,7 @@ test('list: uses custom limit when --limit option provided', async () => {
|
|
|
78
78
|
expect(getChatsSpy).toHaveBeenCalledWith({ limit: 10 })
|
|
79
79
|
})
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
it('list: closes client after fetching chats', async () => {
|
|
82
82
|
// when
|
|
83
83
|
await chatCommand.parseAsync(['node', 'chat', 'list'])
|
|
84
84
|
|
|
@@ -86,7 +86,7 @@ test('list: closes client after fetching chats', async () => {
|
|
|
86
86
|
expect(closeSpy).toHaveBeenCalledTimes(1)
|
|
87
87
|
})
|
|
88
88
|
|
|
89
|
-
|
|
89
|
+
it('list: outputs chat metadata', async () => {
|
|
90
90
|
// when
|
|
91
91
|
await chatCommand.parseAsync(['node', 'chat', 'list'])
|
|
92
92
|
|
|
@@ -98,7 +98,7 @@ test('list: outputs chat metadata', async () => {
|
|
|
98
98
|
expect(chat.display_name).toBeDefined()
|
|
99
99
|
})
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
it('list: includes different chat types', async () => {
|
|
102
102
|
// when
|
|
103
103
|
await chatCommand.parseAsync(['node', 'chat', 'list'])
|
|
104
104
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, expect, mock, spyOn,
|
|
1
|
+
import { afterEach, beforeEach, expect, mock, spyOn, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const originalConsoleLog = console.log
|
|
4
4
|
|
|
@@ -42,7 +42,7 @@ afterEach(() => {
|
|
|
42
42
|
console.log = originalConsoleLog
|
|
43
43
|
})
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
it('list: fetches and outputs friends', async () => {
|
|
46
46
|
// when
|
|
47
47
|
await friendCommand.parseAsync(['node', 'friend', 'list'])
|
|
48
48
|
|
|
@@ -56,7 +56,7 @@ test('list: fetches and outputs friends', async () => {
|
|
|
56
56
|
expect(output[0].display_name).toBe('Alice')
|
|
57
57
|
})
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
it('list: outputs friends with metadata', async () => {
|
|
60
60
|
// when
|
|
61
61
|
await friendCommand.parseAsync(['node', 'friend', 'list'])
|
|
62
62
|
|
|
@@ -67,7 +67,7 @@ test('list: outputs friends with metadata', async () => {
|
|
|
67
67
|
expect(friend.display_name).toBeDefined()
|
|
68
68
|
})
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
it('list: closes client after fetching friends', async () => {
|
|
71
71
|
// when
|
|
72
72
|
await friendCommand.parseAsync(['node', 'friend', 'list'])
|
|
73
73
|
|
|
@@ -75,7 +75,7 @@ test('list: closes client after fetching friends', async () => {
|
|
|
75
75
|
expect(closeSpy).toHaveBeenCalledTimes(1)
|
|
76
76
|
})
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
it('list: outputs empty array when no friends', async () => {
|
|
79
79
|
// given
|
|
80
80
|
getFriendsSpy.mockResolvedValue([])
|
|
81
81
|
|
|
@@ -87,7 +87,7 @@ test('list: outputs empty array when no friends', async () => {
|
|
|
87
87
|
expect(output).toHaveLength(0)
|
|
88
88
|
})
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
it('list: includes all friend fields', async () => {
|
|
91
91
|
// when
|
|
92
92
|
await friendCommand.parseAsync(['node', 'friend', 'list'])
|
|
93
93
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, expect, mock, spyOn,
|
|
1
|
+
import { afterEach, beforeEach, expect, mock, spyOn, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const originalConsoleLog = console.log
|
|
4
4
|
|
|
@@ -55,7 +55,7 @@ afterEach(() => {
|
|
|
55
55
|
console.log = originalConsoleLog
|
|
56
56
|
})
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
it('list: fetches and outputs messages for a chat', async () => {
|
|
59
59
|
// when
|
|
60
60
|
await messageCommand.parseAsync(['node', 'message', 'list', 'chat-1'])
|
|
61
61
|
|
|
@@ -69,7 +69,7 @@ test('list: fetches and outputs messages for a chat', async () => {
|
|
|
69
69
|
expect(output[0].text).toBe('Hello world')
|
|
70
70
|
})
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
it('list: uses custom count when --count option provided', async () => {
|
|
73
73
|
// when
|
|
74
74
|
await messageCommand.parseAsync(['node', 'message', 'list', 'chat-1', '--count', '5'])
|
|
75
75
|
|
|
@@ -77,7 +77,7 @@ test('list: uses custom count when --count option provided', async () => {
|
|
|
77
77
|
expect(getMessagesSpy).toHaveBeenCalledWith('chat-1', { count: 5 })
|
|
78
78
|
})
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
it('list: closes client after fetching messages', async () => {
|
|
81
81
|
// when
|
|
82
82
|
await messageCommand.parseAsync(['node', 'message', 'list', 'chat-1'])
|
|
83
83
|
|
|
@@ -85,7 +85,7 @@ test('list: closes client after fetching messages', async () => {
|
|
|
85
85
|
expect(closeSpy).toHaveBeenCalledTimes(1)
|
|
86
86
|
})
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
it('send: sends message and outputs result', async () => {
|
|
89
89
|
// when
|
|
90
90
|
await messageCommand.parseAsync(['node', 'message', 'send', 'chat-1', 'Hello!'])
|
|
91
91
|
|
|
@@ -98,7 +98,7 @@ test('send: sends message and outputs result', async () => {
|
|
|
98
98
|
expect(output.message_id).toBe('msg-new')
|
|
99
99
|
})
|
|
100
100
|
|
|
101
|
-
|
|
101
|
+
it('send: closes client after sending message', async () => {
|
|
102
102
|
// when
|
|
103
103
|
await messageCommand.parseAsync(['node', 'message', 'send', 'chat-1', 'Hello!'])
|
|
104
104
|
|
|
@@ -106,7 +106,7 @@ test('send: closes client after sending message', async () => {
|
|
|
106
106
|
expect(closeSpy).toHaveBeenCalledTimes(1)
|
|
107
107
|
})
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
it('list: outputs messages with metadata', async () => {
|
|
110
110
|
// when
|
|
111
111
|
await messageCommand.parseAsync(['node', 'message', 'list', 'chat-1'])
|
|
112
112
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, expect, mock, spyOn,
|
|
1
|
+
import { afterEach, beforeEach, expect, mock, spyOn, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const originalConsoleLog = console.log
|
|
4
4
|
|
|
@@ -34,7 +34,7 @@ afterEach(() => {
|
|
|
34
34
|
console.log = originalConsoleLog
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
it('whoami: fetches and outputs profile', async () => {
|
|
38
38
|
// when
|
|
39
39
|
await whoamiCommand.parseAsync(['node', 'whoami'])
|
|
40
40
|
|
|
@@ -47,7 +47,7 @@ test('whoami: fetches and outputs profile', async () => {
|
|
|
47
47
|
expect(output.display_name).toBe('Test User')
|
|
48
48
|
})
|
|
49
49
|
|
|
50
|
-
|
|
50
|
+
it('whoami: outputs profile with all fields', async () => {
|
|
51
51
|
// when
|
|
52
52
|
await whoamiCommand.parseAsync(['node', 'whoami'])
|
|
53
53
|
|
|
@@ -59,7 +59,7 @@ test('whoami: outputs profile with all fields', async () => {
|
|
|
59
59
|
expect(output.status_message).toBeDefined()
|
|
60
60
|
})
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
it('whoami: closes client after fetching profile', async () => {
|
|
63
63
|
// when
|
|
64
64
|
await whoamiCommand.parseAsync(['node', 'whoami'])
|
|
65
65
|
|
|
@@ -67,7 +67,7 @@ test('whoami: closes client after fetching profile', async () => {
|
|
|
67
67
|
expect(closeSpy).toHaveBeenCalledTimes(1)
|
|
68
68
|
})
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
it('whoami: outputs profile with picture_url', async () => {
|
|
71
71
|
// when
|
|
72
72
|
await whoamiCommand.parseAsync(['node', 'whoami'])
|
|
73
73
|
|
|
@@ -76,7 +76,7 @@ test('whoami: outputs profile with picture_url', async () => {
|
|
|
76
76
|
expect(output.picture_url).toBe('https://example.com/pic.jpg')
|
|
77
77
|
})
|
|
78
78
|
|
|
79
|
-
|
|
79
|
+
it('whoami: outputs profile with status_message', async () => {
|
|
80
80
|
// when
|
|
81
81
|
await whoamiCommand.parseAsync(['node', 'whoami'])
|
|
82
82
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect,
|
|
1
|
+
import { afterEach, beforeEach, describe, expect, it } from 'bun:test'
|
|
2
2
|
import { mkdir, rm, stat } from 'node:fs/promises'
|
|
3
3
|
import { tmpdir } from 'node:os'
|
|
4
4
|
import { join } from 'node:path'
|
|
@@ -29,12 +29,12 @@ afterEach(async () => {
|
|
|
29
29
|
})
|
|
30
30
|
|
|
31
31
|
describe('LineCredentialManager', () => {
|
|
32
|
-
|
|
32
|
+
it('load returns default config when file does not exist', async () => {
|
|
33
33
|
const config = await manager.load()
|
|
34
34
|
expect(config).toEqual({ current_account: null, accounts: {} })
|
|
35
35
|
})
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
it('saves and loads in a round trip', async () => {
|
|
38
38
|
const account = makeAccount('alice')
|
|
39
39
|
const config = { current_account: 'alice', accounts: { alice: account } }
|
|
40
40
|
|
|
@@ -44,14 +44,14 @@ describe('LineCredentialManager', () => {
|
|
|
44
44
|
expect(loaded).toEqual(config)
|
|
45
45
|
})
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
it('file is created with 0o600 permissions', async () => {
|
|
48
48
|
await manager.save({ current_account: null, accounts: {} })
|
|
49
49
|
const fileStat = await stat(join(tempDir, 'line-credentials.json'))
|
|
50
50
|
// Check owner read/write only (0o600)
|
|
51
51
|
expect(fileStat.mode & 0o777).toBe(0o600)
|
|
52
52
|
})
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
it('setAccount adds account and sets as current if first', async () => {
|
|
55
55
|
const account = makeAccount('alice')
|
|
56
56
|
await manager.setAccount(account)
|
|
57
57
|
|
|
@@ -60,7 +60,7 @@ describe('LineCredentialManager', () => {
|
|
|
60
60
|
expect(loaded.current_account).toBe('alice')
|
|
61
61
|
})
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
it('setAccount does not change current if already set', async () => {
|
|
64
64
|
await manager.setAccount(makeAccount('alice'))
|
|
65
65
|
await manager.setAccount(makeAccount('bob'))
|
|
66
66
|
|
|
@@ -68,12 +68,12 @@ describe('LineCredentialManager', () => {
|
|
|
68
68
|
expect(loaded.current_account).toBe('alice')
|
|
69
69
|
})
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
it('getAccount returns null when no accounts', async () => {
|
|
72
72
|
const result = await manager.getAccount()
|
|
73
73
|
expect(result).toBeNull()
|
|
74
74
|
})
|
|
75
75
|
|
|
76
|
-
|
|
76
|
+
it('getAccount returns current account when no id given', async () => {
|
|
77
77
|
const account = makeAccount('alice')
|
|
78
78
|
await manager.setAccount(account)
|
|
79
79
|
|
|
@@ -81,7 +81,7 @@ describe('LineCredentialManager', () => {
|
|
|
81
81
|
expect(result).toEqual(account)
|
|
82
82
|
})
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
it('getAccount returns account by id', async () => {
|
|
85
85
|
await manager.setAccount(makeAccount('alice'))
|
|
86
86
|
const bob = makeAccount('bob')
|
|
87
87
|
await manager.setAccount(bob)
|
|
@@ -90,13 +90,13 @@ describe('LineCredentialManager', () => {
|
|
|
90
90
|
expect(result).toEqual(bob)
|
|
91
91
|
})
|
|
92
92
|
|
|
93
|
-
|
|
93
|
+
it('getAccount returns null for unknown id', async () => {
|
|
94
94
|
await manager.setAccount(makeAccount('alice'))
|
|
95
95
|
const result = await manager.getAccount('unknown')
|
|
96
96
|
expect(result).toBeNull()
|
|
97
97
|
})
|
|
98
98
|
|
|
99
|
-
|
|
99
|
+
it('removeAccount removes the account', async () => {
|
|
100
100
|
await manager.setAccount(makeAccount('alice'))
|
|
101
101
|
await manager.removeAccount('alice')
|
|
102
102
|
|
|
@@ -104,7 +104,7 @@ describe('LineCredentialManager', () => {
|
|
|
104
104
|
expect(loaded.accounts['alice']).toBeUndefined()
|
|
105
105
|
})
|
|
106
106
|
|
|
107
|
-
|
|
107
|
+
it('removeAccount clears current if it was active', async () => {
|
|
108
108
|
await manager.setAccount(makeAccount('alice'))
|
|
109
109
|
await manager.removeAccount('alice')
|
|
110
110
|
|
|
@@ -112,7 +112,7 @@ describe('LineCredentialManager', () => {
|
|
|
112
112
|
expect(loaded.current_account).toBeNull()
|
|
113
113
|
})
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
it('removeAccount sets next account as current when active is removed', async () => {
|
|
116
116
|
await manager.setAccount(makeAccount('alice'))
|
|
117
117
|
await manager.setAccount(makeAccount('bob'))
|
|
118
118
|
await manager.removeAccount('alice')
|
|
@@ -121,7 +121,7 @@ describe('LineCredentialManager', () => {
|
|
|
121
121
|
expect(loaded.current_account).toBe('bob')
|
|
122
122
|
})
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
it('setCurrentAccount updates current account', async () => {
|
|
125
125
|
await manager.setAccount(makeAccount('alice'))
|
|
126
126
|
await manager.setAccount(makeAccount('bob'))
|
|
127
127
|
await manager.setCurrentAccount('bob')
|
|
@@ -130,7 +130,7 @@ describe('LineCredentialManager', () => {
|
|
|
130
130
|
expect(loaded.current_account).toBe('bob')
|
|
131
131
|
})
|
|
132
132
|
|
|
133
|
-
|
|
133
|
+
it('listAccounts returns correct format', async () => {
|
|
134
134
|
await manager.setAccount(makeAccount('alice'))
|
|
135
135
|
await manager.setAccount(makeAccount('bob'))
|
|
136
136
|
|
|
@@ -148,7 +148,7 @@ describe('LineCredentialManager', () => {
|
|
|
148
148
|
expect(bob?.is_current).toBe(false)
|
|
149
149
|
})
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
it('clearAll removes the credentials file', async () => {
|
|
152
152
|
await manager.setAccount(makeAccount('alice'))
|
|
153
153
|
await manager.clearAll()
|
|
154
154
|
|
|
@@ -156,7 +156,7 @@ describe('LineCredentialManager', () => {
|
|
|
156
156
|
expect(config).toEqual({ current_account: null, accounts: {} })
|
|
157
157
|
})
|
|
158
158
|
|
|
159
|
-
|
|
159
|
+
it('clearAll does not throw if file does not exist', async () => {
|
|
160
160
|
await expect(manager.clearAll()).resolves.toBeUndefined()
|
|
161
161
|
})
|
|
162
162
|
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { expect,
|
|
1
|
+
import { expect, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
4
|
CredentialManager,
|
|
@@ -12,38 +12,38 @@ import {
|
|
|
12
12
|
LineSendResultSchema,
|
|
13
13
|
} from '@/platforms/line/index'
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
it('LineClient is exported from barrel', () => {
|
|
16
16
|
expect(typeof LineClient).toBe('function')
|
|
17
17
|
})
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
it('LineError is exported from barrel', () => {
|
|
20
20
|
expect(typeof LineError).toBe('function')
|
|
21
21
|
})
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
it('CredentialManager is exported from barrel', () => {
|
|
24
24
|
expect(typeof CredentialManager).toBe('function')
|
|
25
25
|
})
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
it('LineCredentialManager is exported from barrel', () => {
|
|
28
28
|
expect(typeof LineCredentialManager).toBe('function')
|
|
29
29
|
})
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
it('LineChatSchema is exported from barrel', () => {
|
|
32
32
|
expect(typeof LineChatSchema.parse).toBe('function')
|
|
33
33
|
})
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
it('LineMessageSchema is exported from barrel', () => {
|
|
36
36
|
expect(typeof LineMessageSchema.parse).toBe('function')
|
|
37
37
|
})
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
it('LineSendResultSchema is exported from barrel', () => {
|
|
40
40
|
expect(typeof LineSendResultSchema.parse).toBe('function')
|
|
41
41
|
})
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
it('LineAccountCredentialsSchema is exported from barrel', () => {
|
|
44
44
|
expect(typeof LineAccountCredentialsSchema.parse).toBe('function')
|
|
45
45
|
})
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
it('LineConfigSchema is exported from barrel', () => {
|
|
48
48
|
expect(typeof LineConfigSchema.parse).toBe('function')
|
|
49
49
|
})
|