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, beforeEach, describe, expect, mock,
|
|
1
|
+
import { afterAll, beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
type WorkspaceEntry = {
|
|
4
4
|
workspace_id: string
|
|
@@ -20,6 +20,9 @@ const mockListChannels = mock(() =>
|
|
|
20
20
|
]),
|
|
21
21
|
)
|
|
22
22
|
const mockExtract = mock(() => Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]))
|
|
23
|
+
const mockCreateTokenExtractor = mock((_browserProfile?: string[]) => ({
|
|
24
|
+
extract: mockExtract,
|
|
25
|
+
}))
|
|
23
26
|
|
|
24
27
|
import {
|
|
25
28
|
clearAction,
|
|
@@ -89,9 +92,7 @@ setChannelAuthCommandDependenciesForTesting({
|
|
|
89
92
|
return true
|
|
90
93
|
},
|
|
91
94
|
}),
|
|
92
|
-
createTokenExtractor:
|
|
93
|
-
extract: mockExtract,
|
|
94
|
-
}),
|
|
95
|
+
createTokenExtractor: mockCreateTokenExtractor,
|
|
95
96
|
})
|
|
96
97
|
|
|
97
98
|
describe('channel auth commands', () => {
|
|
@@ -105,6 +106,7 @@ describe('channel auth commands', () => {
|
|
|
105
106
|
mockGetAccount.mockReset()
|
|
106
107
|
mockListChannels.mockReset()
|
|
107
108
|
mockExtract.mockReset()
|
|
109
|
+
mockCreateTokenExtractor.mockReset()
|
|
108
110
|
|
|
109
111
|
mockGetAccount.mockImplementation(() => Promise.resolve({ id: 'acct-1', name: 'Alice' }))
|
|
110
112
|
mockListChannels.mockImplementation(() =>
|
|
@@ -116,10 +118,13 @@ describe('channel auth commands', () => {
|
|
|
116
118
|
mockExtract.mockImplementation(() =>
|
|
117
119
|
Promise.resolve([{ accountCookie: 'fresh-account', sessionCookie: 'fresh-session' }]),
|
|
118
120
|
)
|
|
121
|
+
mockCreateTokenExtractor.mockImplementation((_browserProfile?: string[]) => ({
|
|
122
|
+
extract: mockExtract,
|
|
123
|
+
}))
|
|
119
124
|
})
|
|
120
125
|
|
|
121
126
|
describe('extractAction', () => {
|
|
122
|
-
|
|
127
|
+
it('extracts fresh cookies and saves all workspaces', async () => {
|
|
123
128
|
const result = await extractAction()
|
|
124
129
|
|
|
125
130
|
expect(mockExtract).toHaveBeenCalledTimes(1)
|
|
@@ -136,7 +141,14 @@ describe('channel auth commands', () => {
|
|
|
136
141
|
expect(workspaceStore.get('ws-2')?.account_cookie).toBe('fresh-account')
|
|
137
142
|
})
|
|
138
143
|
|
|
139
|
-
|
|
144
|
+
it('passes custom browser profile paths to the token extractor', async () => {
|
|
145
|
+
await extractAction({ browserProfile: ['/tmp/profile-a', '/tmp/profile-b'] })
|
|
146
|
+
|
|
147
|
+
expect(mockCreateTokenExtractor).toHaveBeenCalledWith(['/tmp/profile-a', '/tmp/profile-b'])
|
|
148
|
+
expect(mockExtract).toHaveBeenCalledTimes(1)
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
it('preserves current workspace if it still exists after re-extraction', async () => {
|
|
140
152
|
workspaceStore.set('ws-2', {
|
|
141
153
|
workspace_id: 'ws-2',
|
|
142
154
|
workspace_name: 'Workspace 2',
|
|
@@ -157,7 +169,7 @@ describe('channel auth commands', () => {
|
|
|
157
169
|
})
|
|
158
170
|
})
|
|
159
171
|
|
|
160
|
-
|
|
172
|
+
it('switches to first workspace when previous current no longer exists', async () => {
|
|
161
173
|
workspaceStore.set('ws-old', {
|
|
162
174
|
workspace_id: 'ws-old',
|
|
163
175
|
workspace_name: 'Old Workspace',
|
|
@@ -178,7 +190,7 @@ describe('channel auth commands', () => {
|
|
|
178
190
|
})
|
|
179
191
|
})
|
|
180
192
|
|
|
181
|
-
|
|
193
|
+
it('returns error when token extraction fails', async () => {
|
|
182
194
|
mockExtract.mockImplementation(() => Promise.resolve([]))
|
|
183
195
|
|
|
184
196
|
const result = await extractAction()
|
|
@@ -188,7 +200,7 @@ describe('channel auth commands', () => {
|
|
|
188
200
|
})
|
|
189
201
|
})
|
|
190
202
|
|
|
191
|
-
|
|
203
|
+
it('returns error when no workspaces found', async () => {
|
|
192
204
|
mockListChannels.mockImplementation(() => Promise.resolve([]))
|
|
193
205
|
|
|
194
206
|
const result = await extractAction()
|
|
@@ -200,14 +212,14 @@ describe('channel auth commands', () => {
|
|
|
200
212
|
})
|
|
201
213
|
|
|
202
214
|
describe('statusAction', () => {
|
|
203
|
-
|
|
215
|
+
it('returns an error when no credentials exist', async () => {
|
|
204
216
|
const result = await statusAction()
|
|
205
217
|
|
|
206
218
|
expect(result.valid).toBe(false)
|
|
207
219
|
expect(result.error).toBe('No credentials. Run "agent-channeltalk auth extract" first.')
|
|
208
220
|
})
|
|
209
221
|
|
|
210
|
-
|
|
222
|
+
it('returns valid status for current workspace', async () => {
|
|
211
223
|
workspaceStore.set('ws-1', {
|
|
212
224
|
workspace_id: 'ws-1',
|
|
213
225
|
workspace_name: 'Workspace 1',
|
|
@@ -228,7 +240,7 @@ describe('channel auth commands', () => {
|
|
|
228
240
|
})
|
|
229
241
|
})
|
|
230
242
|
|
|
231
|
-
|
|
243
|
+
it('returns invalid status with stored info when api validation fails', async () => {
|
|
232
244
|
workspaceStore.set('ws-1', {
|
|
233
245
|
workspace_id: 'ws-1',
|
|
234
246
|
workspace_name: 'Workspace 1',
|
|
@@ -251,7 +263,7 @@ describe('channel auth commands', () => {
|
|
|
251
263
|
})
|
|
252
264
|
})
|
|
253
265
|
|
|
254
|
-
|
|
266
|
+
it('returns workspace-specific error for unknown workspace', async () => {
|
|
255
267
|
const result = await statusAction({ workspace: 'missing' })
|
|
256
268
|
|
|
257
269
|
expect(result).toEqual({
|
|
@@ -262,7 +274,7 @@ describe('channel auth commands', () => {
|
|
|
262
274
|
})
|
|
263
275
|
|
|
264
276
|
describe('clearAction', () => {
|
|
265
|
-
|
|
277
|
+
it('removes all stored credentials', async () => {
|
|
266
278
|
workspaceStore.set('ws-1', {
|
|
267
279
|
workspace_id: 'ws-1',
|
|
268
280
|
workspace_name: 'Workspace 1',
|
|
@@ -280,7 +292,7 @@ describe('channel auth commands', () => {
|
|
|
280
292
|
})
|
|
281
293
|
|
|
282
294
|
describe('listAction', () => {
|
|
283
|
-
|
|
295
|
+
it('lists all workspaces with current flag', async () => {
|
|
284
296
|
workspaceStore.set('ws-1', {
|
|
285
297
|
workspace_id: 'ws-1',
|
|
286
298
|
workspace_name: 'Workspace 1',
|
|
@@ -305,7 +317,7 @@ describe('channel auth commands', () => {
|
|
|
305
317
|
})
|
|
306
318
|
|
|
307
319
|
describe('useAction', () => {
|
|
308
|
-
|
|
320
|
+
it('switches current workspace', async () => {
|
|
309
321
|
workspaceStore.set('ws-1', {
|
|
310
322
|
workspace_id: 'ws-1',
|
|
311
323
|
workspace_name: 'Workspace 1',
|
|
@@ -326,7 +338,7 @@ describe('channel auth commands', () => {
|
|
|
326
338
|
expect(currentWorkspaceId).toBe('ws-1')
|
|
327
339
|
})
|
|
328
340
|
|
|
329
|
-
|
|
341
|
+
it('returns error for unknown workspace', async () => {
|
|
330
342
|
const result = await useAction('missing')
|
|
331
343
|
|
|
332
344
|
expect(result).toEqual({
|
|
@@ -336,7 +348,7 @@ describe('channel auth commands', () => {
|
|
|
336
348
|
})
|
|
337
349
|
|
|
338
350
|
describe('removeAction', () => {
|
|
339
|
-
|
|
351
|
+
it('removes a stored workspace', async () => {
|
|
340
352
|
workspaceStore.set('ws-1', {
|
|
341
353
|
workspace_id: 'ws-1',
|
|
342
354
|
workspace_name: 'Workspace 1',
|
|
@@ -351,7 +363,7 @@ describe('channel auth commands', () => {
|
|
|
351
363
|
expect(workspaceStore.has('ws-1')).toBe(false)
|
|
352
364
|
})
|
|
353
365
|
|
|
354
|
-
|
|
366
|
+
it('returns error for unknown workspace', async () => {
|
|
355
367
|
const result = await removeAction('missing')
|
|
356
368
|
|
|
357
369
|
expect(result).toEqual({
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
2
|
|
|
3
|
+
import { collectBrowserProfileOption } from '@/shared/chromium'
|
|
3
4
|
import { formatOutput } from '@/shared/utils/output'
|
|
4
5
|
|
|
5
6
|
import { ChannelClient } from '../client'
|
|
@@ -9,6 +10,7 @@ import { ChannelTokenExtractor } from '../token-extractor'
|
|
|
9
10
|
interface ActionOptions {
|
|
10
11
|
workspace?: string
|
|
11
12
|
pretty?: boolean
|
|
13
|
+
browserProfile?: string[]
|
|
12
14
|
_credManager?: ChannelCredentialManager
|
|
13
15
|
}
|
|
14
16
|
|
|
@@ -60,7 +62,8 @@ let createChannelClient: (
|
|
|
60
62
|
|
|
61
63
|
let createCredentialManager = (): ChannelCredentialManagerLike => new ChannelCredentialManager()
|
|
62
64
|
|
|
63
|
-
let createTokenExtractor = (): ChannelTokenExtractorLike =>
|
|
65
|
+
let createTokenExtractor = (browserProfile?: string[]): ChannelTokenExtractorLike =>
|
|
66
|
+
new ChannelTokenExtractor(undefined, browserProfile)
|
|
64
67
|
|
|
65
68
|
export function setChannelAuthCommandDependenciesForTesting(dependencies: {
|
|
66
69
|
createChannelClient?: (
|
|
@@ -68,7 +71,7 @@ export function setChannelAuthCommandDependenciesForTesting(dependencies: {
|
|
|
68
71
|
sessionCookie?: string,
|
|
69
72
|
) => ChannelClientLike | Promise<ChannelClientLike>
|
|
70
73
|
createCredentialManager?: () => ChannelCredentialManagerLike
|
|
71
|
-
createTokenExtractor?: () => ChannelTokenExtractorLike
|
|
74
|
+
createTokenExtractor?: (browserProfile?: string[]) => ChannelTokenExtractorLike
|
|
72
75
|
}): void {
|
|
73
76
|
if (dependencies.createChannelClient) createChannelClient = dependencies.createChannelClient
|
|
74
77
|
if (dependencies.createCredentialManager) createCredentialManager = dependencies.createCredentialManager
|
|
@@ -79,13 +82,14 @@ export function resetChannelAuthCommandDependenciesForTesting(): void {
|
|
|
79
82
|
createChannelClient = async (accountCookie: string, sessionCookie?: string): Promise<ChannelClientLike> =>
|
|
80
83
|
new ChannelClient().login({ accountCookie, sessionCookie })
|
|
81
84
|
createCredentialManager = (): ChannelCredentialManagerLike => new ChannelCredentialManager()
|
|
82
|
-
createTokenExtractor = (): ChannelTokenExtractorLike =>
|
|
85
|
+
createTokenExtractor = (browserProfile?: string[]): ChannelTokenExtractorLike =>
|
|
86
|
+
new ChannelTokenExtractor(undefined, browserProfile)
|
|
83
87
|
}
|
|
84
88
|
|
|
85
89
|
export async function extractAction(options: ActionOptions = {}): Promise<ExtractResult | ErrorResult> {
|
|
86
90
|
try {
|
|
87
91
|
const credManager = options._credManager ?? createCredentialManager()
|
|
88
|
-
const extractor = createTokenExtractor()
|
|
92
|
+
const extractor = createTokenExtractor(options.browserProfile)
|
|
89
93
|
const extracted = await extractor.extract()
|
|
90
94
|
|
|
91
95
|
if (extracted.length === 0) {
|
|
@@ -270,7 +274,13 @@ export function createAuthCommand(): Command {
|
|
|
270
274
|
new Command('extract')
|
|
271
275
|
.description('Extract cookies from Channel Talk desktop app or a supported Chromium browser')
|
|
272
276
|
.option('--pretty', 'Pretty print JSON output')
|
|
273
|
-
.
|
|
277
|
+
.option(
|
|
278
|
+
'--browser-profile <path>',
|
|
279
|
+
'Additional Chromium profile/user-data directory to scan (repeatable, comma-separated supported)',
|
|
280
|
+
collectBrowserProfileOption,
|
|
281
|
+
[],
|
|
282
|
+
)
|
|
283
|
+
.action(async (opts: { pretty?: boolean; browserProfile?: string[] }) => {
|
|
274
284
|
cliOutput(await extractAction(opts), opts.pretty)
|
|
275
285
|
}),
|
|
276
286
|
)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockListBots = mock(() =>
|
|
4
4
|
Promise.resolve([
|
|
@@ -35,7 +35,7 @@ describe('bot commands', () => {
|
|
|
35
35
|
)
|
|
36
36
|
})
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
it('listAction lists bots', async () => {
|
|
39
39
|
const result = await listAction({ limit: '8' })
|
|
40
40
|
|
|
41
41
|
expect(mockListBots).toHaveBeenCalledWith('ws-1', { limit: 8 })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockListUserChats = mock(() =>
|
|
4
4
|
Promise.resolve([
|
|
@@ -62,7 +62,7 @@ describe('chat commands', () => {
|
|
|
62
62
|
)
|
|
63
63
|
})
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
it('listAction lists user chats with the requested state filter', async () => {
|
|
66
66
|
const result = await listAction({ state: 'closed', limit: '5' })
|
|
67
67
|
|
|
68
68
|
expect(mockListUserChats).toHaveBeenCalledWith('ws-1', { state: 'closed', limit: 5 })
|
|
@@ -78,7 +78,7 @@ describe('chat commands', () => {
|
|
|
78
78
|
])
|
|
79
79
|
})
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
it('getAction gets a specific user chat', async () => {
|
|
82
82
|
const result = await getAction('chat-1')
|
|
83
83
|
|
|
84
84
|
expect(mockGetUserChat).toHaveBeenCalledWith('ws-1', 'chat-1')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockListGroups = mock(() =>
|
|
4
4
|
Promise.resolve([
|
|
@@ -103,7 +103,7 @@ describe('group commands', () => {
|
|
|
103
103
|
)
|
|
104
104
|
})
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
it('listAction lists groups', async () => {
|
|
107
107
|
const result = await listAction({ limit: '3' })
|
|
108
108
|
|
|
109
109
|
expect(mockListGroups).toHaveBeenCalledWith('ws-1', { limit: 3 })
|
|
@@ -121,7 +121,7 @@ describe('group commands', () => {
|
|
|
121
121
|
])
|
|
122
122
|
})
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
it('getAction gets a specific group', async () => {
|
|
125
125
|
const result = await getAction('grp-1')
|
|
126
126
|
|
|
127
127
|
expect(mockGetGroup).toHaveBeenCalledWith('ws-1', 'grp-1')
|
|
@@ -137,7 +137,7 @@ describe('group commands', () => {
|
|
|
137
137
|
})
|
|
138
138
|
})
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
it('messagesAction gets group messages with limit and sort', async () => {
|
|
141
141
|
const result = await messagesAction('grp-1', { limit: '7', sort: 'asc' })
|
|
142
142
|
|
|
143
143
|
expect(mockGetGroupMessages).toHaveBeenCalledWith('ws-1', 'grp-1', { limit: 7, sortOrder: 'asc' })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockListManagers = mock(() =>
|
|
4
4
|
Promise.resolve([
|
|
@@ -43,7 +43,7 @@ describe('manager commands', () => {
|
|
|
43
43
|
)
|
|
44
44
|
})
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
it('listAction lists managers', async () => {
|
|
47
47
|
const result = await listAction({ limit: '12' })
|
|
48
48
|
|
|
49
49
|
expect(mockListManagers).toHaveBeenCalledWith('ws-1', { limit: 12 })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockSendGroupMessage = mock(() =>
|
|
4
4
|
Promise.resolve({
|
|
@@ -306,7 +306,7 @@ describe('message commands', () => {
|
|
|
306
306
|
)
|
|
307
307
|
})
|
|
308
308
|
|
|
309
|
-
|
|
309
|
+
it('sendAction sends a group message with wrapped blocks', async () => {
|
|
310
310
|
const result = await sendAction('group', 'grp-1', 'Hello group')
|
|
311
311
|
|
|
312
312
|
expect(mockSendGroupMessage).toHaveBeenCalledWith('ws-1', 'grp-1', [{ type: 'text', value: 'Hello group' }])
|
|
@@ -319,7 +319,7 @@ describe('message commands', () => {
|
|
|
319
319
|
})
|
|
320
320
|
})
|
|
321
321
|
|
|
322
|
-
|
|
322
|
+
it('sendAction sends a user chat message with wrapped blocks', async () => {
|
|
323
323
|
const result = await sendAction('user-chat', 'chat-1', 'Hello user chat')
|
|
324
324
|
|
|
325
325
|
expect(mockSendUserChatMessage).toHaveBeenCalledWith('ws-1', 'chat-1', [{ type: 'text', value: 'Hello user chat' }])
|
|
@@ -332,7 +332,7 @@ describe('message commands', () => {
|
|
|
332
332
|
})
|
|
333
333
|
})
|
|
334
334
|
|
|
335
|
-
|
|
335
|
+
it('sendAction sends a direct chat message with wrapped blocks', async () => {
|
|
336
336
|
const result = await sendAction('direct-chat', 'dm-1', 'Hello direct chat')
|
|
337
337
|
|
|
338
338
|
expect(mockSendDirectChatMessage).toHaveBeenCalledWith('ws-1', 'dm-1', [
|
|
@@ -347,7 +347,7 @@ describe('message commands', () => {
|
|
|
347
347
|
})
|
|
348
348
|
})
|
|
349
349
|
|
|
350
|
-
|
|
350
|
+
it('listAction lists group messages with limit and sort options', async () => {
|
|
351
351
|
const result = await listAction('group', 'grp-1', { limit: '10', sort: 'asc' })
|
|
352
352
|
|
|
353
353
|
expect(mockGetGroupMessages).toHaveBeenCalledWith('ws-1', 'grp-1', { limit: 10, sortOrder: 'asc' })
|
|
@@ -365,7 +365,7 @@ describe('message commands', () => {
|
|
|
365
365
|
])
|
|
366
366
|
})
|
|
367
367
|
|
|
368
|
-
|
|
368
|
+
it('listAction lists user chat messages', async () => {
|
|
369
369
|
const result = await listAction('user-chat', 'chat-1')
|
|
370
370
|
|
|
371
371
|
expect(mockGetUserChatMessages).toHaveBeenCalledWith('ws-1', 'chat-1', { limit: 25, sortOrder: 'desc' })
|
|
@@ -376,7 +376,7 @@ describe('message commands', () => {
|
|
|
376
376
|
})
|
|
377
377
|
})
|
|
378
378
|
|
|
379
|
-
|
|
379
|
+
it('listAction lists direct chat messages', async () => {
|
|
380
380
|
const result = await listAction('direct-chat', 'dm-1')
|
|
381
381
|
|
|
382
382
|
expect(mockGetDirectChatMessages).toHaveBeenCalledWith('ws-1', 'dm-1', { limit: 25, sortOrder: 'desc' })
|
|
@@ -387,21 +387,21 @@ describe('message commands', () => {
|
|
|
387
387
|
})
|
|
388
388
|
})
|
|
389
389
|
|
|
390
|
-
|
|
390
|
+
it('getAction returns specific message by ID', async () => {
|
|
391
391
|
const result = await getAction('group', 'grp-1', 'msg-group-list-1')
|
|
392
392
|
|
|
393
393
|
expect(result.error).toBeUndefined()
|
|
394
394
|
expect(result.id).toBe('msg-group-list-1')
|
|
395
395
|
})
|
|
396
396
|
|
|
397
|
-
|
|
397
|
+
it('getAction returns error when message not found', async () => {
|
|
398
398
|
const result = await getAction('group', 'grp-1', 'nonexistent')
|
|
399
399
|
|
|
400
400
|
expect(result.error).toBeDefined()
|
|
401
401
|
expect(result.error).toContain('not found')
|
|
402
402
|
})
|
|
403
403
|
|
|
404
|
-
|
|
404
|
+
it('searchAction searches team chat messages by default', async () => {
|
|
405
405
|
const result = await searchAction('search')
|
|
406
406
|
|
|
407
407
|
expect(mockSearchTeamChatMessages).toHaveBeenCalledWith('ws-1', 'search', { limit: undefined })
|
|
@@ -420,7 +420,7 @@ describe('message commands', () => {
|
|
|
420
420
|
])
|
|
421
421
|
})
|
|
422
422
|
|
|
423
|
-
|
|
423
|
+
it('searchAction searches user chat messages with scope option', async () => {
|
|
424
424
|
const result = await searchAction('search', { scope: 'user-chat' })
|
|
425
425
|
|
|
426
426
|
expect(mockSearchUserChatMessages).toHaveBeenCalledWith('ws-1', 'search', { limit: undefined })
|
|
@@ -439,13 +439,13 @@ describe('message commands', () => {
|
|
|
439
439
|
])
|
|
440
440
|
})
|
|
441
441
|
|
|
442
|
-
|
|
442
|
+
it('searchAction passes limit parameter', async () => {
|
|
443
443
|
await searchAction('test', { limit: '5' })
|
|
444
444
|
|
|
445
445
|
expect(mockSearchTeamChatMessages).toHaveBeenCalledWith('ws-1', 'test', { limit: 5 })
|
|
446
446
|
})
|
|
447
447
|
|
|
448
|
-
|
|
448
|
+
it('searchAction returns error on failure', async () => {
|
|
449
449
|
mockSearchTeamChatMessages.mockImplementation(() => Promise.reject(new Error('Network error')))
|
|
450
450
|
|
|
451
451
|
const result = await searchAction('test')
|
|
@@ -454,7 +454,7 @@ describe('message commands', () => {
|
|
|
454
454
|
expect(result.results).toBeUndefined()
|
|
455
455
|
})
|
|
456
456
|
|
|
457
|
-
|
|
457
|
+
it('searchAction returns error for invalid scope', async () => {
|
|
458
458
|
const result = await searchAction('test', { scope: 'invalid' })
|
|
459
459
|
|
|
460
460
|
expect(result.error).toContain('Invalid --scope value')
|
|
@@ -462,7 +462,7 @@ describe('message commands', () => {
|
|
|
462
462
|
expect(result.results).toBeUndefined()
|
|
463
463
|
})
|
|
464
464
|
|
|
465
|
-
|
|
465
|
+
it('searchAction handles zero hits', async () => {
|
|
466
466
|
mockSearchTeamChatMessages.mockImplementation(() =>
|
|
467
467
|
Promise.resolve({ hits: [], bots: [], sessions: [], groups: [] }),
|
|
468
468
|
)
|
|
@@ -473,7 +473,7 @@ describe('message commands', () => {
|
|
|
473
473
|
expect(result.error).toBeUndefined()
|
|
474
474
|
})
|
|
475
475
|
|
|
476
|
-
|
|
476
|
+
it('searchAction handles missing highlight plainText key', async () => {
|
|
477
477
|
mockSearchTeamChatMessages.mockImplementation(() =>
|
|
478
478
|
Promise.resolve({
|
|
479
479
|
hits: [
|
|
@@ -506,7 +506,7 @@ describe('message commands', () => {
|
|
|
506
506
|
expect(result.results?.[0]?.plain_text).toBe('some message')
|
|
507
507
|
})
|
|
508
508
|
|
|
509
|
-
|
|
509
|
+
it('searchAction uses extractText for block-only messages', async () => {
|
|
510
510
|
mockSearchTeamChatMessages.mockImplementation(() =>
|
|
511
511
|
Promise.resolve({
|
|
512
512
|
hits: [
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockGetChannel = mock(() => Promise.resolve({ id: 'ws-1', name: 'Workspace One' }))
|
|
4
4
|
const mockListManagers = mock(() =>
|
|
@@ -81,7 +81,7 @@ describe('snapshot command', () => {
|
|
|
81
81
|
mockListUserChats.mockClear()
|
|
82
82
|
})
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
it('brief snapshot returns workspace, groups (name only), chat counts, and hint', async () => {
|
|
85
85
|
const result = await snapshotAction()
|
|
86
86
|
|
|
87
87
|
expect(result.error).toBeUndefined()
|
|
@@ -100,7 +100,7 @@ describe('snapshot command', () => {
|
|
|
100
100
|
expect(mockGetGroupMessages).not.toHaveBeenCalled()
|
|
101
101
|
})
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
it('brief groups-only returns group names without messages', async () => {
|
|
104
104
|
const result = await snapshotAction({ groupsOnly: true })
|
|
105
105
|
|
|
106
106
|
expect(result.workspace).toEqual({ id: 'ws-1', name: 'Workspace One' })
|
|
@@ -112,7 +112,7 @@ describe('snapshot command', () => {
|
|
|
112
112
|
expect(mockListUserChats).not.toHaveBeenCalled()
|
|
113
113
|
})
|
|
114
114
|
|
|
115
|
-
|
|
115
|
+
it('brief chats-only returns counts without recent details', async () => {
|
|
116
116
|
const result = await snapshotAction({ chatsOnly: true })
|
|
117
117
|
|
|
118
118
|
expect(result.workspace).toEqual({ id: 'ws-1', name: 'Workspace One' })
|
|
@@ -126,7 +126,7 @@ describe('snapshot command', () => {
|
|
|
126
126
|
expect(mockGetGroupMessages).not.toHaveBeenCalled()
|
|
127
127
|
})
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
it('full snapshot returns workspace, managers, bots, groups, and user chats', async () => {
|
|
130
130
|
const result = await snapshotAction({ full: true })
|
|
131
131
|
|
|
132
132
|
expect(result.error).toBeUndefined()
|
|
@@ -201,7 +201,7 @@ describe('snapshot command', () => {
|
|
|
201
201
|
})
|
|
202
202
|
})
|
|
203
203
|
|
|
204
|
-
|
|
204
|
+
it('full groups-only includes messages', async () => {
|
|
205
205
|
const result = await snapshotAction({ full: true, groupsOnly: true, limit: 3 })
|
|
206
206
|
|
|
207
207
|
expect(mockGetGroupMessages).toHaveBeenCalledWith('ws-1', 'grp-1', { limit: 3, sortOrder: 'desc' })
|
|
@@ -214,7 +214,7 @@ describe('snapshot command', () => {
|
|
|
214
214
|
})
|
|
215
215
|
})
|
|
216
216
|
|
|
217
|
-
|
|
217
|
+
it('full chats-only includes recent details', async () => {
|
|
218
218
|
const result = await snapshotAction({ full: true, chatsOnly: true, limit: 1 })
|
|
219
219
|
|
|
220
220
|
expect(result.workspace).toEqual({ id: 'ws-1', name: 'Workspace One' })
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beforeEach, describe, expect, mock,
|
|
1
|
+
import { beforeEach, describe, expect, mock, it } from 'bun:test'
|
|
2
2
|
|
|
3
3
|
const mockGetAccount = mock(() =>
|
|
4
4
|
Promise.resolve({
|
|
@@ -37,7 +37,7 @@ describe('whoami command', () => {
|
|
|
37
37
|
)
|
|
38
38
|
})
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
it('returns account info', async () => {
|
|
41
41
|
const result = await whoamiAction({})
|
|
42
42
|
|
|
43
43
|
expect(mockGetAccount).toHaveBeenCalled()
|
|
@@ -53,7 +53,7 @@ describe('whoami command', () => {
|
|
|
53
53
|
expect(result.error).toBeUndefined()
|
|
54
54
|
})
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
it('returns error when getAccount fails', async () => {
|
|
57
57
|
mockGetAccount.mockImplementation(() => Promise.reject(new Error('Not authenticated')))
|
|
58
58
|
|
|
59
59
|
const result = await whoamiAction({})
|