agent-messenger 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +27 -1
- package/.claude-plugin/plugin.json +17 -4
- package/.env.template +3 -0
- package/.github/workflows/release.yml +80 -0
- package/AGENTS.md +48 -0
- package/README.md +25 -20
- package/biome.json +15 -39
- package/bun.lock +69 -0
- package/dist/package.json +10 -3
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +1 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/platforms/discord/client.d.ts.map +1 -1
- package/dist/src/platforms/discord/client.js.map +1 -1
- package/dist/src/platforms/discord/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/auth.js.map +1 -1
- package/dist/src/platforms/discord/commands/channel.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/channel.js.map +1 -1
- package/dist/src/platforms/discord/commands/dm.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/dm.js.map +1 -1
- package/dist/src/platforms/discord/commands/file.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/file.js +1 -4
- package/dist/src/platforms/discord/commands/file.js.map +1 -1
- package/dist/src/platforms/discord/commands/friend.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/friend.js +1 -3
- package/dist/src/platforms/discord/commands/friend.js.map +1 -1
- package/dist/src/platforms/discord/commands/member.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/member.js.map +1 -1
- package/dist/src/platforms/discord/commands/mention.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/mention.js.map +1 -1
- package/dist/src/platforms/discord/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/message.js.map +1 -1
- package/dist/src/platforms/discord/commands/note.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/note.js.map +1 -1
- package/dist/src/platforms/discord/commands/profile.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/profile.js.map +1 -1
- package/dist/src/platforms/discord/commands/reaction.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/reaction.js.map +1 -1
- package/dist/src/platforms/discord/commands/server.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/server.js.map +1 -1
- package/dist/src/platforms/discord/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/discord/commands/thread.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/thread.js.map +1 -1
- package/dist/src/platforms/discord/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/discord/commands/user.js.map +1 -1
- package/dist/src/platforms/discord/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/discord/credential-manager.js.map +1 -1
- package/dist/src/platforms/discord/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/discord/token-extractor.js +2 -7
- package/dist/src/platforms/discord/token-extractor.js.map +1 -1
- package/dist/src/platforms/slack/client.d.ts.map +1 -1
- package/dist/src/platforms/slack/client.js +2 -0
- package/dist/src/platforms/slack/client.js.map +1 -1
- package/dist/src/platforms/slack/commands/activity.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/activity.js.map +1 -1
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/auth.js.map +1 -1
- package/dist/src/platforms/slack/commands/channel.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/channel.js.map +1 -1
- package/dist/src/platforms/slack/commands/drafts.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/drafts.js.map +1 -1
- package/dist/src/platforms/slack/commands/file.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/file.js +1 -4
- package/dist/src/platforms/slack/commands/file.js.map +1 -1
- package/dist/src/platforms/slack/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/message.js.map +1 -1
- package/dist/src/platforms/slack/commands/reaction.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/reaction.js +1 -2
- package/dist/src/platforms/slack/commands/reaction.js.map +1 -1
- package/dist/src/platforms/slack/commands/saved.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/saved.js.map +1 -1
- package/dist/src/platforms/slack/commands/sections.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/sections.js.map +1 -1
- package/dist/src/platforms/slack/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/slack/commands/unread.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/unread.js.map +1 -1
- package/dist/src/platforms/slack/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/user.js.map +1 -1
- package/dist/src/platforms/slack/commands/workspace.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/workspace.js.map +1 -1
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/slack/token-extractor.js +4 -5
- package/dist/src/platforms/slack/token-extractor.js.map +1 -1
- package/dist/src/platforms/slack/types.d.ts +24 -0
- package/dist/src/platforms/slack/types.d.ts.map +1 -1
- package/dist/src/platforms/slack/types.js +7 -0
- package/dist/src/platforms/slack/types.js.map +1 -1
- package/dist/src/platforms/slackbot/cli.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/cli.js +1 -1
- package/dist/src/platforms/slackbot/cli.js.map +1 -1
- package/dist/src/platforms/slackbot/client.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/client.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/auth.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/channel.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/message.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/reaction.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/reaction.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/shared.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/commands/shared.js.map +1 -1
- package/dist/src/platforms/slackbot/commands/user.js.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.d.ts.map +1 -1
- package/dist/src/platforms/slackbot/credential-manager.js +2 -4
- package/dist/src/platforms/slackbot/credential-manager.js.map +1 -1
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/auth.js.map +1 -1
- package/dist/src/platforms/teams/commands/channel.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/channel.js.map +1 -1
- package/dist/src/platforms/teams/commands/file.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/file.js.map +1 -1
- package/dist/src/platforms/teams/commands/message.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/message.js.map +1 -1
- package/dist/src/platforms/teams/commands/reaction.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/reaction.js.map +1 -1
- package/dist/src/platforms/teams/commands/snapshot.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/snapshot.js.map +1 -1
- package/dist/src/platforms/teams/commands/team.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/team.js +1 -4
- package/dist/src/platforms/teams/commands/team.js.map +1 -1
- package/dist/src/platforms/teams/commands/user.d.ts.map +1 -1
- package/dist/src/platforms/teams/commands/user.js.map +1 -1
- package/dist/src/platforms/teams/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/teams/token-extractor.js +3 -1
- package/dist/src/platforms/teams/token-extractor.js.map +1 -1
- package/docs/content/docs/agent-skills.mdx +4 -4
- package/docs/content/docs/index.mdx +11 -18
- package/docs/content/docs/integrations/discord.mdx +65 -1
- package/docs/content/docs/integrations/slack.mdx +51 -1
- package/docs/content/docs/integrations/slackbot.mdx +11 -1
- package/docs/content/docs/integrations/teams.mdx +4 -1
- package/docs/content/docs/quick-start.mdx +3 -2
- package/docs/src/app/icon.png +0 -0
- package/docs/src/app/layout.config.tsx +8 -1
- package/package.json +16 -9
- package/scripts/prepublish.ts +11 -0
- package/skills/agent-discord/SKILL.md +14 -0
- package/skills/agent-slack/SKILL.md +14 -0
- package/skills/agent-slackbot/SKILL.md +14 -0
- package/skills/agent-teams/SKILL.md +14 -0
- package/src/cli.ts +1 -4
- package/src/platforms/discord/client.test.ts +6 -14
- package/src/platforms/discord/client.ts +12 -34
- package/src/platforms/discord/commands/auth.test.ts +2 -7
- package/src/platforms/discord/commands/auth.ts +14 -19
- package/src/platforms/discord/commands/channel.test.ts +18 -20
- package/src/platforms/discord/commands/channel.ts +9 -18
- package/src/platforms/discord/commands/dm.test.ts +1 -3
- package/src/platforms/discord/commands/dm.ts +6 -10
- package/src/platforms/discord/commands/file.ts +10 -23
- package/src/platforms/discord/commands/friend.ts +33 -35
- package/src/platforms/discord/commands/member.ts +5 -7
- package/src/platforms/discord/commands/mention.ts +5 -11
- package/src/platforms/discord/commands/message.test.ts +1 -3
- package/src/platforms/discord/commands/message.ts +23 -61
- package/src/platforms/discord/commands/note.ts +7 -15
- package/src/platforms/discord/commands/profile.ts +4 -6
- package/src/platforms/discord/commands/reaction.test.ts +1 -3
- package/src/platforms/discord/commands/reaction.ts +19 -29
- package/src/platforms/discord/commands/server.test.ts +14 -18
- package/src/platforms/discord/commands/server.ts +9 -15
- package/src/platforms/discord/commands/snapshot.ts +5 -7
- package/src/platforms/discord/commands/thread.ts +8 -15
- package/src/platforms/discord/commands/user.ts +9 -20
- package/src/platforms/discord/credential-manager.test.ts +2 -2
- package/src/platforms/discord/credential-manager.ts +1 -3
- package/src/platforms/discord/token-extractor.test.ts +28 -57
- package/src/platforms/discord/token-extractor.ts +10 -30
- package/src/platforms/discord/types.ts +1 -1
- package/src/platforms/slack/client.test.ts +14 -20
- package/src/platforms/slack/client.ts +6 -11
- package/src/platforms/slack/commands/activity.test.ts +3 -9
- package/src/platforms/slack/commands/activity.ts +7 -12
- package/src/platforms/slack/commands/auth.test.ts +2 -2
- package/src/platforms/slack/commands/auth.ts +15 -31
- package/src/platforms/slack/commands/channel.ts +10 -32
- package/src/platforms/slack/commands/drafts.ts +5 -14
- package/src/platforms/slack/commands/file.ts +9 -29
- package/src/platforms/slack/commands/message.ts +23 -67
- package/src/platforms/slack/commands/reaction.test.ts +37 -33
- package/src/platforms/slack/commands/reaction.ts +21 -51
- package/src/platforms/slack/commands/saved.ts +5 -14
- package/src/platforms/slack/commands/sections.ts +4 -11
- package/src/platforms/slack/commands/snapshot.test.ts +1 -3
- package/src/platforms/slack/commands/snapshot.ts +5 -10
- package/src/platforms/slack/commands/unread.test.ts +6 -8
- package/src/platforms/slack/commands/unread.ts +10 -33
- package/src/platforms/slack/commands/user.test.ts +1 -4
- package/src/platforms/slack/commands/user.ts +6 -8
- package/src/platforms/slack/commands/workspace.test.ts +1 -1
- package/src/platforms/slack/commands/workspace.ts +7 -12
- package/src/platforms/slack/token-extractor-node-test.ts +1 -1
- package/src/platforms/slack/token-extractor.ts +8 -17
- package/src/platforms/slack/types.ts +11 -1
- package/src/platforms/slackbot/cli.ts +1 -7
- package/src/platforms/slackbot/client.test.ts +7 -7
- package/src/platforms/slackbot/client.ts +4 -11
- package/src/platforms/slackbot/commands/auth.test.ts +1 -1
- package/src/platforms/slackbot/commands/auth.ts +7 -7
- package/src/platforms/slackbot/commands/channel.ts +4 -4
- package/src/platforms/slackbot/commands/message.ts +16 -29
- package/src/platforms/slackbot/commands/reaction.ts +6 -16
- package/src/platforms/slackbot/commands/shared.ts +2 -4
- package/src/platforms/slackbot/commands/user.ts +4 -4
- package/src/platforms/slackbot/credential-manager.ts +2 -7
- package/src/platforms/slackbot/types.ts +1 -1
- package/src/platforms/teams/client.test.ts +15 -32
- package/src/platforms/teams/client.ts +18 -51
- package/src/platforms/teams/commands/auth.test.ts +6 -16
- package/src/platforms/teams/commands/auth.ts +16 -26
- package/src/platforms/teams/commands/channel.test.ts +2 -5
- package/src/platforms/teams/commands/channel.ts +10 -20
- package/src/platforms/teams/commands/file.test.ts +1 -4
- package/src/platforms/teams/commands/file.ts +11 -21
- package/src/platforms/teams/commands/message.test.ts +1 -3
- package/src/platforms/teams/commands/message.ts +15 -25
- package/src/platforms/teams/commands/reaction.test.ts +2 -7
- package/src/platforms/teams/commands/reaction.ts +12 -16
- package/src/platforms/teams/commands/snapshot.ts +6 -11
- package/src/platforms/teams/commands/team.test.ts +15 -26
- package/src/platforms/teams/commands/team.ts +10 -19
- package/src/platforms/teams/commands/user.ts +8 -14
- package/src/platforms/teams/credential-manager.test.ts +2 -5
- package/src/platforms/teams/token-extractor.test.ts +21 -50
- package/src/platforms/teams/token-extractor.ts +12 -20
- package/src/platforms/teams/types.ts +1 -1
- package/src/shared/utils/concurrency.test.ts +2 -2
- package/src/shared/utils/concurrency.ts +1 -1
- package/.claude/commands/release.md +0 -92
- package/dist/src/platforms/discord/commands/guild.d.ts +0 -15
- package/dist/src/platforms/discord/commands/guild.d.ts.map +0 -1
- package/dist/src/platforms/discord/commands/guild.js +0 -102
- package/dist/src/platforms/discord/commands/guild.js.map +0 -1
|
@@ -12,9 +12,7 @@ beforeEach(() => {
|
|
|
12
12
|
// Spy on DiscordClient.prototype methods
|
|
13
13
|
clientAddReactionSpy = spyOn(DiscordClient.prototype, 'addReaction').mockResolvedValue(undefined)
|
|
14
14
|
|
|
15
|
-
clientRemoveReactionSpy = spyOn(DiscordClient.prototype, 'removeReaction').mockResolvedValue(
|
|
16
|
-
undefined
|
|
17
|
-
)
|
|
15
|
+
clientRemoveReactionSpy = spyOn(DiscordClient.prototype, 'removeReaction').mockResolvedValue(undefined)
|
|
18
16
|
|
|
19
17
|
clientGetMessageSpy = spyOn(DiscordClient.prototype, 'getMessage').mockResolvedValue({
|
|
20
18
|
id: 'msg123',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
|
-
import { handleError } from '
|
|
3
|
-
import { formatOutput } from '
|
|
2
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
3
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
4
4
|
import { DiscordClient } from '../client'
|
|
5
5
|
import { DiscordCredentialManager } from '../credential-manager'
|
|
6
6
|
|
|
@@ -8,16 +8,14 @@ export async function addAction(
|
|
|
8
8
|
channelId: string,
|
|
9
9
|
messageId: string,
|
|
10
10
|
emoji: string,
|
|
11
|
-
options: { pretty?: boolean }
|
|
11
|
+
options: { pretty?: boolean },
|
|
12
12
|
): Promise<void> {
|
|
13
13
|
try {
|
|
14
14
|
const credManager = new DiscordCredentialManager()
|
|
15
15
|
const config = await credManager.load()
|
|
16
16
|
|
|
17
17
|
if (!config.token) {
|
|
18
|
-
console.log(
|
|
19
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
20
|
-
)
|
|
18
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
21
19
|
process.exit(1)
|
|
22
20
|
}
|
|
23
21
|
|
|
@@ -32,8 +30,8 @@ export async function addAction(
|
|
|
32
30
|
message_id: messageId,
|
|
33
31
|
emoji,
|
|
34
32
|
},
|
|
35
|
-
options.pretty
|
|
36
|
-
)
|
|
33
|
+
options.pretty,
|
|
34
|
+
),
|
|
37
35
|
)
|
|
38
36
|
} catch (error) {
|
|
39
37
|
handleError(error as Error)
|
|
@@ -44,16 +42,14 @@ export async function removeAction(
|
|
|
44
42
|
channelId: string,
|
|
45
43
|
messageId: string,
|
|
46
44
|
emoji: string,
|
|
47
|
-
options: { pretty?: boolean }
|
|
45
|
+
options: { pretty?: boolean },
|
|
48
46
|
): Promise<void> {
|
|
49
47
|
try {
|
|
50
48
|
const credManager = new DiscordCredentialManager()
|
|
51
49
|
const config = await credManager.load()
|
|
52
50
|
|
|
53
51
|
if (!config.token) {
|
|
54
|
-
console.log(
|
|
55
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
56
|
-
)
|
|
52
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
57
53
|
process.exit(1)
|
|
58
54
|
}
|
|
59
55
|
|
|
@@ -68,27 +64,21 @@ export async function removeAction(
|
|
|
68
64
|
message_id: messageId,
|
|
69
65
|
emoji,
|
|
70
66
|
},
|
|
71
|
-
options.pretty
|
|
72
|
-
)
|
|
67
|
+
options.pretty,
|
|
68
|
+
),
|
|
73
69
|
)
|
|
74
70
|
} catch (error) {
|
|
75
71
|
handleError(error as Error)
|
|
76
72
|
}
|
|
77
73
|
}
|
|
78
74
|
|
|
79
|
-
export async function listAction(
|
|
80
|
-
channelId: string,
|
|
81
|
-
messageId: string,
|
|
82
|
-
options: { pretty?: boolean }
|
|
83
|
-
): Promise<void> {
|
|
75
|
+
export async function listAction(channelId: string, messageId: string, options: { pretty?: boolean }): Promise<void> {
|
|
84
76
|
try {
|
|
85
77
|
const credManager = new DiscordCredentialManager()
|
|
86
78
|
const config = await credManager.load()
|
|
87
79
|
|
|
88
80
|
if (!config.token) {
|
|
89
|
-
console.log(
|
|
90
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
91
|
-
)
|
|
81
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
92
82
|
process.exit(1)
|
|
93
83
|
}
|
|
94
84
|
|
|
@@ -103,8 +93,8 @@ export async function listAction(
|
|
|
103
93
|
channel_id: channelId,
|
|
104
94
|
message_id: messageId,
|
|
105
95
|
},
|
|
106
|
-
options.pretty
|
|
107
|
-
)
|
|
96
|
+
options.pretty,
|
|
97
|
+
),
|
|
108
98
|
)
|
|
109
99
|
process.exit(1)
|
|
110
100
|
}
|
|
@@ -118,8 +108,8 @@ export async function listAction(
|
|
|
118
108
|
message_id: messageId,
|
|
119
109
|
reactions,
|
|
120
110
|
},
|
|
121
|
-
options.pretty
|
|
122
|
-
)
|
|
111
|
+
options.pretty,
|
|
112
|
+
),
|
|
123
113
|
)
|
|
124
114
|
} catch (error) {
|
|
125
115
|
handleError(error as Error)
|
|
@@ -135,7 +125,7 @@ export const reactionCommand = new Command('reaction')
|
|
|
135
125
|
.argument('<message-id>', 'Message ID')
|
|
136
126
|
.argument('<emoji>', 'Emoji name (without colons)')
|
|
137
127
|
.option('--pretty', 'Pretty print JSON output')
|
|
138
|
-
.action(addAction)
|
|
128
|
+
.action(addAction),
|
|
139
129
|
)
|
|
140
130
|
.addCommand(
|
|
141
131
|
new Command('remove')
|
|
@@ -144,7 +134,7 @@ export const reactionCommand = new Command('reaction')
|
|
|
144
134
|
.argument('<message-id>', 'Message ID')
|
|
145
135
|
.argument('<emoji>', 'Emoji name (without colons)')
|
|
146
136
|
.option('--pretty', 'Pretty print JSON output')
|
|
147
|
-
.action(removeAction)
|
|
137
|
+
.action(removeAction),
|
|
148
138
|
)
|
|
149
139
|
.addCommand(
|
|
150
140
|
new Command('list')
|
|
@@ -152,5 +142,5 @@ export const reactionCommand = new Command('reaction')
|
|
|
152
142
|
.argument('<channel-id>', 'Channel ID')
|
|
153
143
|
.argument('<message-id>', 'Message ID')
|
|
154
144
|
.option('--pretty', 'Pretty print JSON output')
|
|
155
|
-
.action(listAction)
|
|
145
|
+
.action(listAction),
|
|
156
146
|
)
|
|
@@ -15,17 +15,15 @@ beforeEach(() => {
|
|
|
15
15
|
{ id: 'server-2', name: 'Server Two', icon: 'icon2', owner: false },
|
|
16
16
|
])
|
|
17
17
|
|
|
18
|
-
clientGetServerSpy = spyOn(DiscordClient.prototype, 'getServer').mockImplementation(
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return { id: 'server-1', name: 'Server One', icon: 'icon1', owner: true }
|
|
22
|
-
}
|
|
23
|
-
if (serverId === 'server-2') {
|
|
24
|
-
return { id: 'server-2', name: 'Server Two', icon: 'icon2', owner: false }
|
|
25
|
-
}
|
|
26
|
-
throw new Error('Server not found')
|
|
18
|
+
clientGetServerSpy = spyOn(DiscordClient.prototype, 'getServer').mockImplementation(async (serverId: string) => {
|
|
19
|
+
if (serverId === 'server-1') {
|
|
20
|
+
return { id: 'server-1', name: 'Server One', icon: 'icon1', owner: true }
|
|
27
21
|
}
|
|
28
|
-
|
|
22
|
+
if (serverId === 'server-2') {
|
|
23
|
+
return { id: 'server-2', name: 'Server Two', icon: 'icon2', owner: false }
|
|
24
|
+
}
|
|
25
|
+
throw new Error('Server not found')
|
|
26
|
+
})
|
|
29
27
|
|
|
30
28
|
// Spy on DiscordCredentialManager.prototype methods
|
|
31
29
|
credManagerLoadSpy = spyOn(DiscordCredentialManager.prototype, 'load').mockResolvedValue({
|
|
@@ -37,15 +35,13 @@ beforeEach(() => {
|
|
|
37
35
|
},
|
|
38
36
|
})
|
|
39
37
|
|
|
40
|
-
credManagerSetCurrentServerSpy = spyOn(
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
).mockResolvedValue(undefined)
|
|
38
|
+
credManagerSetCurrentServerSpy = spyOn(DiscordCredentialManager.prototype, 'setCurrentServer').mockResolvedValue(
|
|
39
|
+
undefined,
|
|
40
|
+
)
|
|
44
41
|
|
|
45
|
-
credManagerGetCurrentServerSpy = spyOn(
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
).mockResolvedValue('server-1')
|
|
42
|
+
credManagerGetCurrentServerSpy = spyOn(DiscordCredentialManager.prototype, 'getCurrentServer').mockResolvedValue(
|
|
43
|
+
'server-1',
|
|
44
|
+
)
|
|
49
45
|
})
|
|
50
46
|
|
|
51
47
|
afterEach(() => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
|
-
import { handleError } from '
|
|
3
|
-
import { formatOutput } from '
|
|
2
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
3
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
4
4
|
import { DiscordClient } from '../client'
|
|
5
5
|
import { DiscordCredentialManager } from '../credential-manager'
|
|
6
6
|
|
|
@@ -28,9 +28,7 @@ export async function infoAction(serverId: string, options: { pretty?: boolean }
|
|
|
28
28
|
const config = await credManager.load()
|
|
29
29
|
|
|
30
30
|
if (!config.token) {
|
|
31
|
-
console.log(
|
|
32
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
33
|
-
)
|
|
31
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
34
32
|
process.exit(1)
|
|
35
33
|
}
|
|
36
34
|
|
|
@@ -73,18 +71,14 @@ export async function currentAction(options: { pretty?: boolean }): Promise<void
|
|
|
73
71
|
const config = await credManager.load()
|
|
74
72
|
|
|
75
73
|
if (!config.current_server) {
|
|
76
|
-
console.log(
|
|
77
|
-
formatOutput({ error: 'No current server set. Run "auth extract" first.' }, options.pretty)
|
|
78
|
-
)
|
|
74
|
+
console.log(formatOutput({ error: 'No current server set. Run "auth extract" first.' }, options.pretty))
|
|
79
75
|
process.exit(1)
|
|
80
76
|
}
|
|
81
77
|
|
|
82
78
|
const server = config.servers[config.current_server]
|
|
83
79
|
|
|
84
80
|
if (!server) {
|
|
85
|
-
console.log(
|
|
86
|
-
formatOutput({ error: 'Current server not found in configuration.' }, options.pretty)
|
|
87
|
-
)
|
|
81
|
+
console.log(formatOutput({ error: 'Current server not found in configuration.' }, options.pretty))
|
|
88
82
|
process.exit(1)
|
|
89
83
|
}
|
|
90
84
|
|
|
@@ -105,25 +99,25 @@ export const serverCommand = new Command('server')
|
|
|
105
99
|
new Command('list')
|
|
106
100
|
.description('List all servers')
|
|
107
101
|
.option('--pretty', 'Pretty print JSON output')
|
|
108
|
-
.action(listAction)
|
|
102
|
+
.action(listAction),
|
|
109
103
|
)
|
|
110
104
|
.addCommand(
|
|
111
105
|
new Command('info')
|
|
112
106
|
.description('Get server info')
|
|
113
107
|
.argument('<server-id>', 'Server ID')
|
|
114
108
|
.option('--pretty', 'Pretty print JSON output')
|
|
115
|
-
.action(infoAction)
|
|
109
|
+
.action(infoAction),
|
|
116
110
|
)
|
|
117
111
|
.addCommand(
|
|
118
112
|
new Command('switch')
|
|
119
113
|
.description('Switch to server')
|
|
120
114
|
.argument('<server-id>', 'Server ID')
|
|
121
115
|
.option('--pretty', 'Pretty print JSON output')
|
|
122
|
-
.action(switchAction)
|
|
116
|
+
.action(switchAction),
|
|
123
117
|
)
|
|
124
118
|
.addCommand(
|
|
125
119
|
new Command('current')
|
|
126
120
|
.description('Show current server')
|
|
127
121
|
.option('--pretty', 'Pretty print JSON output')
|
|
128
|
-
.action(currentAction)
|
|
122
|
+
.action(currentAction),
|
|
129
123
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
|
-
import { parallelMap } from '
|
|
3
|
-
import { handleError } from '
|
|
4
|
-
import { formatOutput } from '
|
|
2
|
+
import { parallelMap } from '@/shared/utils/concurrency'
|
|
3
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
4
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
5
5
|
import { DiscordClient } from '../client'
|
|
6
6
|
import { DiscordCredentialManager } from '../credential-manager'
|
|
7
7
|
import type { DiscordChannel } from '../types'
|
|
@@ -17,9 +17,7 @@ export async function snapshotAction(options: {
|
|
|
17
17
|
const config = await credManager.load()
|
|
18
18
|
|
|
19
19
|
if (!config.token || !config.current_server) {
|
|
20
|
-
console.log(
|
|
21
|
-
formatOutput({ error: 'No current server set. Run "server switch" first.' }, options.pretty)
|
|
22
|
-
)
|
|
20
|
+
console.log(formatOutput({ error: 'No current server set. Run "server switch" first.' }, options.pretty))
|
|
23
21
|
process.exit(1)
|
|
24
22
|
}
|
|
25
23
|
|
|
@@ -58,7 +56,7 @@ export async function snapshotAction(options: {
|
|
|
58
56
|
channel_name: channel.name,
|
|
59
57
|
}))
|
|
60
58
|
},
|
|
61
|
-
5
|
|
59
|
+
5,
|
|
62
60
|
)
|
|
63
61
|
|
|
64
62
|
snapshot.recent_messages = channelMessages.flat().map((msg) => ({
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
|
-
import { handleError } from '
|
|
3
|
-
import { formatOutput } from '
|
|
2
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
3
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
4
4
|
import { DiscordClient } from '../client'
|
|
5
5
|
import { DiscordCredentialManager } from '../credential-manager'
|
|
6
6
|
|
|
7
7
|
export async function createAction(
|
|
8
8
|
channelId: string,
|
|
9
9
|
name: string,
|
|
10
|
-
options: { autoArchiveDuration?: string; pretty?: boolean }
|
|
10
|
+
options: { autoArchiveDuration?: string; pretty?: boolean },
|
|
11
11
|
): Promise<void> {
|
|
12
12
|
try {
|
|
13
13
|
const credManager = new DiscordCredentialManager()
|
|
14
14
|
const config = await credManager.load()
|
|
15
15
|
|
|
16
16
|
if (!config.token) {
|
|
17
|
-
console.log(
|
|
18
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
19
|
-
)
|
|
17
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
20
18
|
process.exit(1)
|
|
21
19
|
}
|
|
22
20
|
|
|
@@ -42,18 +40,13 @@ export async function createAction(
|
|
|
42
40
|
}
|
|
43
41
|
}
|
|
44
42
|
|
|
45
|
-
export async function archiveAction(
|
|
46
|
-
threadId: string,
|
|
47
|
-
options: { pretty?: boolean }
|
|
48
|
-
): Promise<void> {
|
|
43
|
+
export async function archiveAction(threadId: string, options: { pretty?: boolean }): Promise<void> {
|
|
49
44
|
try {
|
|
50
45
|
const credManager = new DiscordCredentialManager()
|
|
51
46
|
const config = await credManager.load()
|
|
52
47
|
|
|
53
48
|
if (!config.token) {
|
|
54
|
-
console.log(
|
|
55
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
56
|
-
)
|
|
49
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
57
50
|
process.exit(1)
|
|
58
51
|
}
|
|
59
52
|
|
|
@@ -81,12 +74,12 @@ export const threadCommand = new Command('thread')
|
|
|
81
74
|
.argument('<name>', 'Thread name')
|
|
82
75
|
.option('--auto-archive-duration <minutes>', 'Auto archive duration in minutes')
|
|
83
76
|
.option('--pretty', 'Pretty print JSON output')
|
|
84
|
-
.action(createAction)
|
|
77
|
+
.action(createAction),
|
|
85
78
|
)
|
|
86
79
|
.addCommand(
|
|
87
80
|
new Command('archive')
|
|
88
81
|
.description('Archive a thread')
|
|
89
82
|
.argument('<thread-id>', 'Thread ID')
|
|
90
83
|
.option('--pretty', 'Pretty print JSON output')
|
|
91
|
-
.action(archiveAction)
|
|
84
|
+
.action(archiveAction),
|
|
92
85
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Command } from 'commander'
|
|
2
|
-
import { handleError } from '
|
|
3
|
-
import { formatOutput } from '
|
|
2
|
+
import { handleError } from '@/shared/utils/error-handler'
|
|
3
|
+
import { formatOutput } from '@/shared/utils/output'
|
|
4
4
|
import { DiscordClient } from '../client'
|
|
5
5
|
import { DiscordCredentialManager } from '../credential-manager'
|
|
6
6
|
import type { DiscordUser } from '../types'
|
|
@@ -11,19 +11,12 @@ async function listAction(options: { pretty?: boolean }): Promise<void> {
|
|
|
11
11
|
const config = await credManager.load()
|
|
12
12
|
|
|
13
13
|
if (!config.token) {
|
|
14
|
-
console.log(
|
|
15
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
16
|
-
)
|
|
14
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
17
15
|
process.exit(1)
|
|
18
16
|
}
|
|
19
17
|
|
|
20
18
|
if (!config.current_server) {
|
|
21
|
-
console.log(
|
|
22
|
-
formatOutput(
|
|
23
|
-
{ error: 'No current server set. Run "server switch <id>" first.' },
|
|
24
|
-
options.pretty
|
|
25
|
-
)
|
|
26
|
-
)
|
|
19
|
+
console.log(formatOutput({ error: 'No current server set. Run "server switch <id>" first.' }, options.pretty))
|
|
27
20
|
process.exit(1)
|
|
28
21
|
}
|
|
29
22
|
|
|
@@ -50,9 +43,7 @@ async function infoAction(userId: string, options: { pretty?: boolean }): Promis
|
|
|
50
43
|
const config = await credManager.load()
|
|
51
44
|
|
|
52
45
|
if (!config.token) {
|
|
53
|
-
console.log(
|
|
54
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
55
|
-
)
|
|
46
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
56
47
|
process.exit(1)
|
|
57
48
|
}
|
|
58
49
|
|
|
@@ -89,9 +80,7 @@ async function meAction(options: { pretty?: boolean }): Promise<void> {
|
|
|
89
80
|
const config = await credManager.load()
|
|
90
81
|
|
|
91
82
|
if (!config.token) {
|
|
92
|
-
console.log(
|
|
93
|
-
formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty)
|
|
94
|
-
)
|
|
83
|
+
console.log(formatOutput({ error: 'Not authenticated. Run "auth extract" first.' }, options.pretty))
|
|
95
84
|
process.exit(1)
|
|
96
85
|
}
|
|
97
86
|
|
|
@@ -118,18 +107,18 @@ export const userCommand = new Command('user')
|
|
|
118
107
|
new Command('list')
|
|
119
108
|
.description('List server members')
|
|
120
109
|
.option('--pretty', 'Pretty print JSON output')
|
|
121
|
-
.action(listAction)
|
|
110
|
+
.action(listAction),
|
|
122
111
|
)
|
|
123
112
|
.addCommand(
|
|
124
113
|
new Command('info')
|
|
125
114
|
.description('Get user info')
|
|
126
115
|
.argument('<user-id>', 'User ID')
|
|
127
116
|
.option('--pretty', 'Pretty print JSON output')
|
|
128
|
-
.action(infoAction)
|
|
117
|
+
.action(infoAction),
|
|
129
118
|
)
|
|
130
119
|
.addCommand(
|
|
131
120
|
new Command('me')
|
|
132
121
|
.description('Show current authenticated user')
|
|
133
122
|
.option('--pretty', 'Pretty print JSON output')
|
|
134
|
-
.action(meAction)
|
|
123
|
+
.action(meAction),
|
|
135
124
|
)
|
|
@@ -8,7 +8,7 @@ const testDirs: string[] = []
|
|
|
8
8
|
function setup(): DiscordCredentialManager {
|
|
9
9
|
const testConfigDir = join(
|
|
10
10
|
import.meta.dir,
|
|
11
|
-
`.test-discord-config-${Date.now()}-${Math.random().toString(36).slice(2)}
|
|
11
|
+
`.test-discord-config-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
12
12
|
)
|
|
13
13
|
testDirs.push(testConfigDir)
|
|
14
14
|
return new DiscordCredentialManager(testConfigDir)
|
|
@@ -35,7 +35,7 @@ describe('DiscordCredentialManager', () => {
|
|
|
35
35
|
test('save creates config file with correct permissions', async () => {
|
|
36
36
|
const testConfigDir = join(
|
|
37
37
|
import.meta.dir,
|
|
38
|
-
`.test-discord-config-${Date.now()}-${Math.random().toString(36).slice(2)}
|
|
38
|
+
`.test-discord-config-${Date.now()}-${Math.random().toString(36).slice(2)}`,
|
|
39
39
|
)
|
|
40
40
|
testDirs.push(testConfigDir)
|
|
41
41
|
const manager = new DiscordCredentialManager(testConfigDir)
|
|
@@ -83,9 +83,7 @@ export class DiscordCredentialManager {
|
|
|
83
83
|
return config.servers
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
async setServers(
|
|
87
|
-
servers: Record<string, { server_id: string; server_name: string }>
|
|
88
|
-
): Promise<void> {
|
|
86
|
+
async setServers(servers: Record<string, { server_id: string; server_name: string }>): Promise<void> {
|
|
89
87
|
const config = await this.load()
|
|
90
88
|
config.servers = servers
|
|
91
89
|
await this.save(config)
|
|
@@ -82,10 +82,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
82
82
|
describe('extract', () => {
|
|
83
83
|
test('returns null when no Discord directories exist on linux', async () => {
|
|
84
84
|
const linuxExtractor = new DiscordTokenExtractor('linux')
|
|
85
|
-
const extractFromLevelDBSpy = spyOn(
|
|
86
|
-
linuxExtractor as any,
|
|
87
|
-
'extractFromLevelDB'
|
|
88
|
-
).mockResolvedValue(null)
|
|
85
|
+
const extractFromLevelDBSpy = spyOn(linuxExtractor as any, 'extractFromLevelDB').mockResolvedValue(null)
|
|
89
86
|
|
|
90
87
|
const result = await linuxExtractor.extract()
|
|
91
88
|
expect(result).toBeNull()
|
|
@@ -97,10 +94,9 @@ describe('DiscordTokenExtractor', () => {
|
|
|
97
94
|
const mockToken = 'XXXXXXXXXXXXXXXXXXXXXXXX.YYYYYY.ZZZZZZZZZZZZZZZZZZZZZZZZZ'
|
|
98
95
|
|
|
99
96
|
const linuxExtractor = new DiscordTokenExtractor('linux')
|
|
100
|
-
const extractFromLevelDBSpy = spyOn(
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
).mockResolvedValue({ token: mockToken })
|
|
97
|
+
const extractFromLevelDBSpy = spyOn(linuxExtractor as any, 'extractFromLevelDB').mockResolvedValue({
|
|
98
|
+
token: mockToken,
|
|
99
|
+
})
|
|
104
100
|
|
|
105
101
|
const result = await linuxExtractor.extract()
|
|
106
102
|
|
|
@@ -114,14 +110,8 @@ describe('DiscordTokenExtractor', () => {
|
|
|
114
110
|
const mockToken = 'XXXXXXXXXXXXXXXXXXXXXXXX.YYYYYY.cdp_token_12345678901234567'
|
|
115
111
|
|
|
116
112
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0)
|
|
117
|
-
const extractFromLevelDBSpy = spyOn(
|
|
118
|
-
|
|
119
|
-
'extractFromLevelDB'
|
|
120
|
-
).mockResolvedValue(null)
|
|
121
|
-
const tryExtractViaCDPSpy = spyOn(
|
|
122
|
-
darwinExtractor as any,
|
|
123
|
-
'tryExtractViaCDP'
|
|
124
|
-
).mockResolvedValue(mockToken)
|
|
113
|
+
const extractFromLevelDBSpy = spyOn(darwinExtractor as any, 'extractFromLevelDB').mockResolvedValue(null)
|
|
114
|
+
const tryExtractViaCDPSpy = spyOn(darwinExtractor as any, 'tryExtractViaCDP').mockResolvedValue(mockToken)
|
|
125
115
|
|
|
126
116
|
const result = await darwinExtractor.extract()
|
|
127
117
|
|
|
@@ -136,10 +126,9 @@ describe('DiscordTokenExtractor', () => {
|
|
|
136
126
|
const mockToken = 'XXXXXXXXXXXXXXXXXXXXXXXX.YYYYYY.first_token_found_1234567'
|
|
137
127
|
|
|
138
128
|
const linuxExtractor = new DiscordTokenExtractor('linux')
|
|
139
|
-
const extractFromLevelDBSpy = spyOn(
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
).mockResolvedValue({ token: mockToken })
|
|
129
|
+
const extractFromLevelDBSpy = spyOn(linuxExtractor as any, 'extractFromLevelDB').mockResolvedValue({
|
|
130
|
+
token: mockToken,
|
|
131
|
+
})
|
|
143
132
|
|
|
144
133
|
const result = await linuxExtractor.extract()
|
|
145
134
|
|
|
@@ -186,10 +175,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
186
175
|
describe('isDiscordRunning', () => {
|
|
187
176
|
test('returns true when Discord process is found', async () => {
|
|
188
177
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
189
|
-
const checkProcessRunningSpy = spyOn(
|
|
190
|
-
darwinExtractor as any,
|
|
191
|
-
'checkProcessRunning'
|
|
192
|
-
).mockReturnValue(true)
|
|
178
|
+
const checkProcessRunningSpy = spyOn(darwinExtractor as any, 'checkProcessRunning').mockReturnValue(true)
|
|
193
179
|
|
|
194
180
|
const result = await darwinExtractor.isDiscordRunning('stable')
|
|
195
181
|
expect(result).toBe(true)
|
|
@@ -199,10 +185,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
199
185
|
|
|
200
186
|
test('returns false when no Discord process is found', async () => {
|
|
201
187
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
202
|
-
const checkProcessRunningSpy = spyOn(
|
|
203
|
-
darwinExtractor as any,
|
|
204
|
-
'checkProcessRunning'
|
|
205
|
-
).mockReturnValue(false)
|
|
188
|
+
const checkProcessRunningSpy = spyOn(darwinExtractor as any, 'checkProcessRunning').mockReturnValue(false)
|
|
206
189
|
|
|
207
190
|
const result = await darwinExtractor.isDiscordRunning('stable')
|
|
208
191
|
expect(result).toBe(false)
|
|
@@ -213,13 +196,12 @@ describe('DiscordTokenExtractor', () => {
|
|
|
213
196
|
test('checks all variants when no specific variant provided', async () => {
|
|
214
197
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
215
198
|
const checkedProcesses: string[] = []
|
|
216
|
-
const checkProcessRunningSpy = spyOn(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
})
|
|
199
|
+
const checkProcessRunningSpy = spyOn(darwinExtractor as any, 'checkProcessRunning').mockImplementation(
|
|
200
|
+
(name: string) => {
|
|
201
|
+
checkedProcesses.push(name)
|
|
202
|
+
return false
|
|
203
|
+
},
|
|
204
|
+
)
|
|
223
205
|
|
|
224
206
|
await darwinExtractor.isDiscordRunning()
|
|
225
207
|
|
|
@@ -235,11 +217,9 @@ describe('DiscordTokenExtractor', () => {
|
|
|
235
217
|
test('kills Discord process', async () => {
|
|
236
218
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
237
219
|
const killedProcesses: string[] = []
|
|
238
|
-
const killProcessSpy = spyOn(darwinExtractor as any, 'killProcess').mockImplementation(
|
|
239
|
-
(name
|
|
240
|
-
|
|
241
|
-
}
|
|
242
|
-
)
|
|
220
|
+
const killProcessSpy = spyOn(darwinExtractor as any, 'killProcess').mockImplementation((name: string) => {
|
|
221
|
+
killedProcesses.push(name)
|
|
222
|
+
})
|
|
243
223
|
|
|
244
224
|
await darwinExtractor.killDiscord('stable')
|
|
245
225
|
|
|
@@ -251,11 +231,9 @@ describe('DiscordTokenExtractor', () => {
|
|
|
251
231
|
test('kills all variants when no specific variant provided', async () => {
|
|
252
232
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
253
233
|
const killedProcesses: string[] = []
|
|
254
|
-
const killProcessSpy = spyOn(darwinExtractor as any, 'killProcess').mockImplementation(
|
|
255
|
-
(name
|
|
256
|
-
|
|
257
|
-
}
|
|
258
|
-
)
|
|
234
|
+
const killProcessSpy = spyOn(darwinExtractor as any, 'killProcess').mockImplementation((name: string) => {
|
|
235
|
+
killedProcesses.push(name)
|
|
236
|
+
})
|
|
259
237
|
|
|
260
238
|
await darwinExtractor.killDiscord()
|
|
261
239
|
|
|
@@ -270,13 +248,9 @@ describe('DiscordTokenExtractor', () => {
|
|
|
270
248
|
describe('launchDiscordWithDebug', () => {
|
|
271
249
|
test('throws error when Discord app not found', async () => {
|
|
272
250
|
const darwinExtractor = new DiscordTokenExtractor('darwin', 0, 0)
|
|
273
|
-
const getAppPathSpy = spyOn(darwinExtractor as any, 'getAppPath').mockReturnValue(
|
|
274
|
-
'/nonexistent/path'
|
|
275
|
-
)
|
|
251
|
+
const getAppPathSpy = spyOn(darwinExtractor as any, 'getAppPath').mockReturnValue('/nonexistent/path')
|
|
276
252
|
|
|
277
|
-
await expect(darwinExtractor.launchDiscordWithDebug('stable')).rejects.toThrow(
|
|
278
|
-
'Discord stable not found'
|
|
279
|
-
)
|
|
253
|
+
await expect(darwinExtractor.launchDiscordWithDebug('stable')).rejects.toThrow('Discord stable not found')
|
|
280
254
|
|
|
281
255
|
getAppPathSpy.mockRestore()
|
|
282
256
|
})
|
|
@@ -429,10 +403,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
429
403
|
globalThis.WebSocket = mockWebSocket as unknown as typeof WebSocket
|
|
430
404
|
|
|
431
405
|
const extractor = new DiscordTokenExtractor('darwin')
|
|
432
|
-
const result = await extractor.executeJSViaCDP(
|
|
433
|
-
'ws://localhost:9222/devtools/page/1',
|
|
434
|
-
TOKEN_EXTRACTION_JS
|
|
435
|
-
)
|
|
406
|
+
const result = await extractor.executeJSViaCDP('ws://localhost:9222/devtools/page/1', TOKEN_EXTRACTION_JS)
|
|
436
407
|
expect(result).toBe(mockToken)
|
|
437
408
|
})
|
|
438
409
|
|
|
@@ -467,7 +438,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
467
438
|
|
|
468
439
|
const extractor = new DiscordTokenExtractor('darwin')
|
|
469
440
|
await expect(
|
|
470
|
-
extractor.executeJSViaCDP('ws://localhost:9222/devtools/page/1', TOKEN_EXTRACTION_JS)
|
|
441
|
+
extractor.executeJSViaCDP('ws://localhost:9222/devtools/page/1', TOKEN_EXTRACTION_JS),
|
|
471
442
|
).rejects.toThrow('Evaluation failed')
|
|
472
443
|
})
|
|
473
444
|
|
|
@@ -491,7 +462,7 @@ describe('DiscordTokenExtractor', () => {
|
|
|
491
462
|
|
|
492
463
|
const extractor = new DiscordTokenExtractor('darwin')
|
|
493
464
|
await expect(
|
|
494
|
-
extractor.executeJSViaCDP('ws://localhost:9222/devtools/page/1', TOKEN_EXTRACTION_JS)
|
|
465
|
+
extractor.executeJSViaCDP('ws://localhost:9222/devtools/page/1', TOKEN_EXTRACTION_JS),
|
|
495
466
|
).rejects.toThrow()
|
|
496
467
|
})
|
|
497
468
|
})
|