agent-messenger 2.14.1 → 2.15.1
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/README.md +3 -0
- package/dist/package.json +1 -1
- package/dist/src/platforms/kakaotalk/client.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/client.js +15 -0
- package/dist/src/platforms/kakaotalk/client.js.map +1 -1
- package/dist/src/platforms/kakaotalk/index.d.ts +2 -2
- package/dist/src/platforms/kakaotalk/index.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/index.js +1 -1
- package/dist/src/platforms/kakaotalk/index.js.map +1 -1
- package/dist/src/platforms/kakaotalk/listener.d.ts +1 -1
- package/dist/src/platforms/kakaotalk/listener.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/listener.js +58 -6
- package/dist/src/platforms/kakaotalk/listener.js.map +1 -1
- package/dist/src/platforms/kakaotalk/types.d.ts +46 -1
- package/dist/src/platforms/kakaotalk/types.d.ts.map +1 -1
- package/dist/src/platforms/kakaotalk/types.js +22 -0
- package/dist/src/platforms/kakaotalk/types.js.map +1 -1
- package/dist/src/platforms/slack/commands/auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/commands/auth.js +6 -2
- package/dist/src/platforms/slack/commands/auth.js.map +1 -1
- package/dist/src/platforms/slack/ensure-auth.d.ts +8 -2
- package/dist/src/platforms/slack/ensure-auth.d.ts.map +1 -1
- package/dist/src/platforms/slack/ensure-auth.js +67 -10
- package/dist/src/platforms/slack/ensure-auth.js.map +1 -1
- package/docs/content/docs/cli/kakaotalk.mdx +4 -3
- package/docs/content/docs/sdk/kakaotalk.mdx +2 -0
- package/package.json +1 -1
- package/skills/agent-channeltalk/SKILL.md +1 -1
- package/skills/agent-channeltalkbot/SKILL.md +1 -1
- package/skills/agent-discord/SKILL.md +1 -1
- package/skills/agent-discordbot/SKILL.md +1 -1
- package/skills/agent-instagram/SKILL.md +1 -1
- package/skills/agent-kakaotalk/SKILL.md +5 -4
- package/skills/agent-line/SKILL.md +1 -1
- package/skills/agent-slack/SKILL.md +1 -1
- package/skills/agent-slackbot/SKILL.md +1 -1
- package/skills/agent-teams/SKILL.md +1 -1
- package/skills/agent-telegram/SKILL.md +1 -1
- package/skills/agent-telegrambot/SKILL.md +1 -1
- package/skills/agent-webex/SKILL.md +1 -1
- package/skills/agent-wechatbot/SKILL.md +1 -1
- package/skills/agent-whatsapp/SKILL.md +1 -1
- package/skills/agent-whatsappbot/SKILL.md +1 -1
- package/src/platforms/kakaotalk/client.test.ts +61 -0
- package/src/platforms/kakaotalk/client.ts +13 -0
- package/src/platforms/kakaotalk/index.ts +6 -0
- package/src/platforms/kakaotalk/listener.test.ts +383 -0
- package/src/platforms/kakaotalk/listener.ts +69 -12
- package/src/platforms/kakaotalk/types.ts +48 -0
- package/src/platforms/slack/commands/auth.ts +6 -4
- package/src/platforms/slack/ensure-auth.test.ts +223 -1
- package/src/platforms/slack/ensure-auth.ts +80 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../src/platforms/slack/commands/auth.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../src/platforms/slack/commands/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { CredentialManager } from './credential-manager.js';
|
|
2
2
|
import { type ExtractedWorkspace } from './token-extractor.js';
|
|
3
3
|
export declare function ensureSlackAuth(): Promise<void>;
|
|
4
|
-
export
|
|
4
|
+
export type RefreshResult = {
|
|
5
5
|
token: string;
|
|
6
|
+
workspace_id: string;
|
|
6
7
|
workspace_name: string;
|
|
7
|
-
}
|
|
8
|
+
};
|
|
9
|
+
export type RefreshContext = {
|
|
10
|
+
resolvedTeamIds?: Set<string>;
|
|
11
|
+
refreshCache?: Map<string, RefreshResult | null>;
|
|
12
|
+
};
|
|
13
|
+
export declare function tryWebTokenRefresh(ws: ExtractedWorkspace, workspaceDomains: Record<string, string>, context?: RefreshContext): Promise<RefreshResult | null>;
|
|
8
14
|
export declare function refreshTokenFromWeb(domain: string, cookie: string): Promise<string | null>;
|
|
9
15
|
export declare function refreshCookie(token: string, credManager: CredentialManager): Promise<{
|
|
10
16
|
user_id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-auth.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/ensure-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,KAAK,kBAAkB,EAAkB,MAAM,mBAAmB,CAAA;AAE3E,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"ensure-auth.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/ensure-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,KAAK,kBAAkB,EAAkB,MAAM,mBAAmB,CAAA;AAE3E,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CA2DrD;AAUD,MAAM,MAAM,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC7B,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC,CAAA;CACjD,CAAA;AAED,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,kBAAkB,EACtB,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACxC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CA4B/B;AAmCD,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAchG;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAiBpF"}
|
|
@@ -20,20 +20,29 @@ export async function ensureSlackAuth() {
|
|
|
20
20
|
const workspaces = await extractor.extract();
|
|
21
21
|
const workspaceDomains = extractor.getWorkspaceDomains();
|
|
22
22
|
const validWorkspaces = [];
|
|
23
|
+
const resolvedTeamIds = new Set();
|
|
24
|
+
const refreshCache = new Map();
|
|
23
25
|
for (const ws of workspaces) {
|
|
24
26
|
try {
|
|
25
27
|
const client = await new SlackClient().login({ token: ws.token, cookie: ws.cookie });
|
|
26
28
|
const authInfo = await client.testAuth();
|
|
29
|
+
if (!authInfo.team_id)
|
|
30
|
+
throw new Error('testAuth returned empty team_id');
|
|
27
31
|
ws.workspace_id = authInfo.team_id;
|
|
28
32
|
ws.workspace_name = authInfo.team || ws.workspace_name;
|
|
29
|
-
|
|
30
|
-
|
|
33
|
+
if (!resolvedTeamIds.has(ws.workspace_id)) {
|
|
34
|
+
resolvedTeamIds.add(ws.workspace_id);
|
|
35
|
+
await credManager.setWorkspace(ws);
|
|
36
|
+
validWorkspaces.push(ws);
|
|
37
|
+
}
|
|
31
38
|
}
|
|
32
39
|
catch {
|
|
33
|
-
const refreshed = await tryWebTokenRefresh(ws, workspaceDomains);
|
|
34
|
-
if (refreshed) {
|
|
40
|
+
const refreshed = await tryWebTokenRefresh(ws, workspaceDomains, { resolvedTeamIds, refreshCache });
|
|
41
|
+
if (refreshed && !resolvedTeamIds.has(refreshed.workspace_id)) {
|
|
35
42
|
ws.token = refreshed.token;
|
|
43
|
+
ws.workspace_id = refreshed.workspace_id;
|
|
36
44
|
ws.workspace_name = refreshed.workspace_name;
|
|
45
|
+
resolvedTeamIds.add(ws.workspace_id);
|
|
37
46
|
await credManager.setWorkspace(ws);
|
|
38
47
|
validWorkspaces.push(ws);
|
|
39
48
|
}
|
|
@@ -52,19 +61,67 @@ export async function ensureSlackAuth() {
|
|
|
52
61
|
}
|
|
53
62
|
}
|
|
54
63
|
}
|
|
55
|
-
|
|
64
|
+
// Bound worst-case HTTP traffic for users with very large root-state.json workspace lists.
|
|
65
|
+
const MAX_DOMAIN_ATTEMPTS = 16;
|
|
66
|
+
// Slack workspace subdomains match `^[a-z][a-z0-9-]*$` per signup rules; validating here
|
|
67
|
+
// prevents a tampered root-state.json from steering the cookie-bearing fetch to a non-Slack
|
|
68
|
+
// host (e.g. a domain value containing `.`, `/`, `:`, `@`, `#`, or `?`).
|
|
69
|
+
const SLACK_DOMAIN_REGEX = /^[a-zA-Z0-9][a-zA-Z0-9-]*$/;
|
|
70
|
+
export async function tryWebTokenRefresh(ws, workspaceDomains, context = {}) {
|
|
56
71
|
if (!ws.cookie)
|
|
57
72
|
return null;
|
|
58
|
-
|
|
59
|
-
|
|
73
|
+
// Try the domain that maps to this workspace_id first (when known), then fall back to
|
|
74
|
+
// every other known domain. Slack tokens extracted from LevelDB blobs sometimes carry
|
|
75
|
+
// workspace_id="unknown" because the regex window around the xoxc- bytes does not
|
|
76
|
+
// contain the T... team id; in that case the cookie may still be valid for one of the
|
|
77
|
+
// other workspaces the user is signed into.
|
|
78
|
+
const candidates = orderCandidateDomains(ws.workspace_id, workspaceDomains);
|
|
79
|
+
if (candidates.length === 0)
|
|
60
80
|
return null;
|
|
81
|
+
for (const { domain } of candidates) {
|
|
82
|
+
if (!SLACK_DOMAIN_REGEX.test(domain))
|
|
83
|
+
continue;
|
|
84
|
+
const cacheKey = `${ws.cookie}\u0000${domain}`;
|
|
85
|
+
const cached = context.refreshCache?.get(cacheKey);
|
|
86
|
+
let result;
|
|
87
|
+
if (cached !== undefined) {
|
|
88
|
+
result = cached;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
result = await refreshAndVerify(ws.cookie, domain, ws.workspace_name);
|
|
92
|
+
context.refreshCache?.set(cacheKey, result);
|
|
93
|
+
}
|
|
94
|
+
if (!result)
|
|
95
|
+
continue;
|
|
96
|
+
if (context.resolvedTeamIds?.has(result.workspace_id))
|
|
97
|
+
continue;
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
function orderCandidateDomains(workspaceId, workspaceDomains) {
|
|
103
|
+
const entries = Object.entries(workspaceDomains).map(([workspace_id, domain]) => ({ workspace_id, domain }));
|
|
104
|
+
const exact = entries.findIndex((e) => e.workspace_id === workspaceId);
|
|
105
|
+
if (exact > 0) {
|
|
106
|
+
const [match] = entries.splice(exact, 1);
|
|
107
|
+
entries.unshift(match);
|
|
108
|
+
}
|
|
109
|
+
return entries.slice(0, MAX_DOMAIN_ATTEMPTS);
|
|
110
|
+
}
|
|
111
|
+
async function refreshAndVerify(cookie, domain, fallbackName) {
|
|
61
112
|
try {
|
|
62
|
-
const freshToken = await refreshTokenFromWeb(domain,
|
|
113
|
+
const freshToken = await refreshTokenFromWeb(domain, cookie);
|
|
63
114
|
if (!freshToken)
|
|
64
115
|
return null;
|
|
65
|
-
const client = await new SlackClient().login({ token: freshToken, cookie
|
|
116
|
+
const client = await new SlackClient().login({ token: freshToken, cookie });
|
|
66
117
|
const authInfo = await client.testAuth();
|
|
67
|
-
|
|
118
|
+
if (!authInfo.team_id)
|
|
119
|
+
return null;
|
|
120
|
+
return {
|
|
121
|
+
token: freshToken,
|
|
122
|
+
workspace_id: authInfo.team_id,
|
|
123
|
+
workspace_name: authInfo.team || fallbackName,
|
|
124
|
+
};
|
|
68
125
|
}
|
|
69
126
|
catch {
|
|
70
127
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-auth.js","sourceRoot":"","sources":["../../../../src/platforms/slack/ensure-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAA2B,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAE3E,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,WAAW,GAAG,IAAI,iBAAiB,EAAE,CAAA;IAC3C,MAAM,SAAS,GAAG,MAAM,WAAW,CAAC,YAAY,EAAE,CAAA;IAElD,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;YAClG,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAA;YACvB,OAAM;QACR,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,MAAM,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,WAAW,CAAC;gBAAE,OAAM;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,cAAc,EAAE,CAAA;QACtC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;QAC5C,MAAM,gBAAgB,GAAG,SAAS,CAAC,mBAAmB,EAAE,CAAA;QAExD,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"ensure-auth.js","sourceRoot":"","sources":["../../../../src/platforms/slack/ensure-auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -184,10 +184,11 @@ agent-kakaotalk message send <chat-id> "Hello" --account <account-id>
|
|
|
184
184
|
Each message includes:
|
|
185
185
|
|
|
186
186
|
- `log_id` — unique message identifier
|
|
187
|
-
- `type` — message type (1 = text, 2 = photo, etc.)
|
|
187
|
+
- `type` — message type (1 = text, 2 = photo, 12 = sticker, 20 = animated sticker, etc.)
|
|
188
188
|
- `author_id` — sender's user ID
|
|
189
189
|
- `author_name` — sender's nickname when known from the chat list (otherwise `null`; only the room's "display members" are cached)
|
|
190
|
-
- `message` — message text content
|
|
190
|
+
- `message` — message text content (empty string for non-text messages like stickers)
|
|
191
|
+
- `attachment` — parsed JSON metadata for non-text messages (e.g. photo URL/dimensions, sticker path), or `null` for plain text. Shape varies by `type`; treat as an opaque object and narrow per message type.
|
|
191
192
|
- `sent_at` — Unix timestamp (milliseconds)
|
|
192
193
|
|
|
193
194
|
#### Fetching More Messages
|
|
@@ -253,7 +254,7 @@ Output includes:
|
|
|
253
254
|
- No open chat browsing or joining
|
|
254
255
|
- No search across chats
|
|
255
256
|
|
|
256
|
-
-
|
|
257
|
+
- Read-only for rich content: photos, stickers, files, and other non-text messages are exposed via the `attachment` field on each message, but sending them is not supported
|
|
257
258
|
- Chat IDs are numeric and not human-readable — use `chat list` to discover them
|
|
258
259
|
|
|
259
260
|
## Troubleshooting
|
|
@@ -71,6 +71,8 @@ const newer = await client.getMessages('9876543210', { from: '123456789' })
|
|
|
71
71
|
|
|
72
72
|
Each `KakaoMessage` carries an `author_name: string | null`. The SDK auto-populates this from the same chat-list response that already arrives at login (no extra LOCO calls). It resolves for "display members" — the small set of nicknames KakaoTalk includes in the chat list — and is `null` for everyone else.
|
|
73
73
|
|
|
74
|
+
Each `KakaoMessage` also carries an `attachment: Record<string, unknown> | null`. For text messages this is `null`. For non-text messages (photos, videos, files, stickers, etc.) it is the parsed LOCO attachment payload — a JSON object whose shape varies by `type`. Photo messages use fields like `k` (CDN key), `w`/`h` (dimensions), `mt` (mime type), and `url`; sticker messages use `path`/`emoticonItemPath`. Treat it as opaque and narrow per `type`.
|
|
75
|
+
|
|
74
76
|
### Members
|
|
75
77
|
|
|
76
78
|
```typescript
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.15.1",
|
|
4
4
|
"description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, Instagram, KakaoTalk, Channel Talk)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-channeltalk
|
|
3
3
|
description: Interact with Channel Talk using extracted desktop app or browser credentials - read chats, send messages, search messages, manage groups
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.15.1
|
|
5
5
|
allowed-tools: Bash(agent-channeltalk:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-kakaotalk
|
|
3
3
|
description: Interact with KakaoTalk - send messages, read chats, manage conversations
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.15.1
|
|
5
5
|
allowed-tools: Bash(agent-kakaotalk:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -368,10 +368,11 @@ Notes:
|
|
|
368
368
|
|
|
369
369
|
Each message includes:
|
|
370
370
|
- `log_id` — unique message identifier
|
|
371
|
-
- `type` — message type (1 = text, 2 = photo, etc.)
|
|
371
|
+
- `type` — message type (1 = text, 2 = photo, 12 = sticker, 20 = animated sticker, etc.)
|
|
372
372
|
- `author_id` — sender's user ID
|
|
373
373
|
- `author_name` — sender's nickname when known from the chat list (otherwise `null`; only the room's "display members" are cached)
|
|
374
|
-
- `message` — message text content
|
|
374
|
+
- `message` — message text content (empty string for non-text messages like stickers)
|
|
375
|
+
- `attachment` — parsed JSON metadata for non-text messages (e.g. photo URL/dimensions, sticker path), or `null` for plain text. Shape varies by `type`; treat as an opaque object and narrow per message type.
|
|
375
376
|
- `sent_at` — Unix timestamp (milliseconds)
|
|
376
377
|
|
|
377
378
|
#### Fetching More Messages
|
|
@@ -547,7 +548,7 @@ See the [KakaoTalk SDK documentation](https://agent-messenger.dev/docs/sdk/kakao
|
|
|
547
548
|
- No message editing or deletion
|
|
548
549
|
- No open chat (오픈채팅) browsing or joining
|
|
549
550
|
- No search across chats
|
|
550
|
-
-
|
|
551
|
+
- Read-only for rich content: photos, stickers, files, and other non-text messages are exposed via the `attachment` field on each message, but sending them is not supported
|
|
551
552
|
- Chat IDs are numeric and not human-readable — use `chat list` to discover them
|
|
552
553
|
|
|
553
554
|
## Troubleshooting
|
|
@@ -774,6 +774,7 @@ describe('KakaoTalkClient', () => {
|
|
|
774
774
|
author_id: 42,
|
|
775
775
|
author_name: null,
|
|
776
776
|
message: 'hello',
|
|
777
|
+
attachment: null,
|
|
777
778
|
sent_at: 1700000001,
|
|
778
779
|
})
|
|
779
780
|
expect(messages[1]).toEqual({
|
|
@@ -782,6 +783,7 @@ describe('KakaoTalkClient', () => {
|
|
|
782
783
|
author_id: 43,
|
|
783
784
|
author_name: null,
|
|
784
785
|
message: 'world',
|
|
786
|
+
attachment: null,
|
|
785
787
|
sent_at: 1700000002,
|
|
786
788
|
})
|
|
787
789
|
|
|
@@ -858,6 +860,65 @@ describe('KakaoTalkClient', () => {
|
|
|
858
860
|
|
|
859
861
|
client.close()
|
|
860
862
|
})
|
|
863
|
+
|
|
864
|
+
it('parses chatLog.attachment JSON for photo messages', async () => {
|
|
865
|
+
mockGetChatLogs.mockResolvedValueOnce({
|
|
866
|
+
body: {
|
|
867
|
+
status: 0,
|
|
868
|
+
chatLogs: [
|
|
869
|
+
{
|
|
870
|
+
logId: makeLong(20),
|
|
871
|
+
chatId: 100,
|
|
872
|
+
type: 2,
|
|
873
|
+
authorId: 42,
|
|
874
|
+
message: '사진',
|
|
875
|
+
sendAt: 1700000010,
|
|
876
|
+
attachment: '{"k":"path/to/img.jpg","w":1320,"h":2868,"mt":"image/jpeg"}',
|
|
877
|
+
},
|
|
878
|
+
],
|
|
879
|
+
eof: true,
|
|
880
|
+
},
|
|
881
|
+
})
|
|
882
|
+
|
|
883
|
+
const client = await new KakaoTalkClient().login({ oauthToken: 'token', userId: 'user1', deviceUuid: 'device1' })
|
|
884
|
+
const messages = await client.getMessages('100')
|
|
885
|
+
|
|
886
|
+
expect(messages[0].attachment).toEqual({
|
|
887
|
+
k: 'path/to/img.jpg',
|
|
888
|
+
w: 1320,
|
|
889
|
+
h: 2868,
|
|
890
|
+
mt: 'image/jpeg',
|
|
891
|
+
})
|
|
892
|
+
|
|
893
|
+
client.close()
|
|
894
|
+
})
|
|
895
|
+
|
|
896
|
+
it('returns null attachment for malformed JSON', async () => {
|
|
897
|
+
mockGetChatLogs.mockResolvedValueOnce({
|
|
898
|
+
body: {
|
|
899
|
+
status: 0,
|
|
900
|
+
chatLogs: [
|
|
901
|
+
{
|
|
902
|
+
logId: makeLong(21),
|
|
903
|
+
chatId: 100,
|
|
904
|
+
type: 1,
|
|
905
|
+
authorId: 42,
|
|
906
|
+
message: 'broken',
|
|
907
|
+
sendAt: 1700000011,
|
|
908
|
+
attachment: 'not-json',
|
|
909
|
+
},
|
|
910
|
+
],
|
|
911
|
+
eof: true,
|
|
912
|
+
},
|
|
913
|
+
})
|
|
914
|
+
|
|
915
|
+
const client = await new KakaoTalkClient().login({ oauthToken: 'token', userId: 'user1', deviceUuid: 'device1' })
|
|
916
|
+
const messages = await client.getMessages('100')
|
|
917
|
+
|
|
918
|
+
expect(messages[0].attachment).toBeNull()
|
|
919
|
+
|
|
920
|
+
client.close()
|
|
921
|
+
})
|
|
861
922
|
})
|
|
862
923
|
|
|
863
924
|
describe('sendMessage', () => {
|
|
@@ -113,6 +113,18 @@ function longToString(v: unknown): string {
|
|
|
113
113
|
return String(v ?? 0)
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
+
function parseAttachmentJson(raw: unknown): Record<string, unknown> | null {
|
|
117
|
+
if (typeof raw !== 'string' || raw.length === 0) return null
|
|
118
|
+
try {
|
|
119
|
+
const parsed = JSON.parse(raw) as unknown
|
|
120
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) return null
|
|
121
|
+
const attachment = parsed as Record<string, unknown>
|
|
122
|
+
return Object.keys(attachment).length > 0 ? attachment : null
|
|
123
|
+
} catch {
|
|
124
|
+
return null
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
116
128
|
function parseLong(s: string): Long {
|
|
117
129
|
const big = BigInt(s)
|
|
118
130
|
const low = Number(big & 0xffffffffn)
|
|
@@ -422,6 +434,7 @@ function formatMessages(
|
|
|
422
434
|
author_id: log.authorId as number,
|
|
423
435
|
author_name: nameCache.lookup(chatId, log.authorId as number),
|
|
424
436
|
message: log.message as string,
|
|
437
|
+
attachment: parseAttachmentJson(log.attachment),
|
|
425
438
|
sent_at: log.sendAt as number,
|
|
426
439
|
}))
|
|
427
440
|
}
|
|
@@ -10,11 +10,14 @@ export type {
|
|
|
10
10
|
KakaoChat,
|
|
11
11
|
KakaoConfig,
|
|
12
12
|
KakaoDeviceType,
|
|
13
|
+
KakaoEmoticonKind,
|
|
14
|
+
KakaoEmoticonMessageType,
|
|
13
15
|
KakaoMember,
|
|
14
16
|
KakaoMessage,
|
|
15
17
|
KakaoProfile,
|
|
16
18
|
KakaoSendResult,
|
|
17
19
|
KakaoTalkListenerEventMap,
|
|
20
|
+
KakaoTalkPushEmoticonEvent,
|
|
18
21
|
KakaoTalkPushEvent,
|
|
19
22
|
KakaoTalkPushGenericEvent,
|
|
20
23
|
KakaoTalkPushMemberEvent,
|
|
@@ -22,6 +25,8 @@ export type {
|
|
|
22
25
|
KakaoTalkPushReadEvent,
|
|
23
26
|
} from './types'
|
|
24
27
|
export {
|
|
28
|
+
KAKAO_EMOTICON_KIND_BY_TYPE,
|
|
29
|
+
KAKAO_EMOTICON_MESSAGE_TYPES,
|
|
25
30
|
KakaoAccountCredentialsSchema,
|
|
26
31
|
KakaoChatSchema,
|
|
27
32
|
KakaoConfigSchema,
|
|
@@ -29,6 +34,7 @@ export {
|
|
|
29
34
|
KakaoMessageSchema,
|
|
30
35
|
KakaoProfileSchema,
|
|
31
36
|
KakaoSendResultSchema,
|
|
37
|
+
KakaoTalkPushEmoticonEventSchema,
|
|
32
38
|
KakaoTalkPushMemberEventSchema,
|
|
33
39
|
KakaoTalkPushMessageEventSchema,
|
|
34
40
|
KakaoTalkPushReadEventSchema,
|