agent-messenger 2.29.0 → 2.29.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 +12 -1
- package/dist/package.json +1 -1
- package/dist/src/platforms/teams/client.d.ts +1 -0
- package/dist/src/platforms/teams/client.d.ts.map +1 -1
- package/dist/src/platforms/teams/client.js +16 -0
- package/dist/src/platforms/teams/client.js.map +1 -1
- package/dist/src/platforms/teams/index.d.ts +1 -1
- package/dist/src/platforms/teams/index.d.ts.map +1 -1
- package/dist/src/platforms/teams/index.js.map +1 -1
- package/dist/src/platforms/teams/listener.d.ts +5 -0
- package/dist/src/platforms/teams/listener.d.ts.map +1 -1
- package/dist/src/platforms/teams/listener.js +54 -4
- package/dist/src/platforms/teams/listener.js.map +1 -1
- package/dist/src/platforms/teams/trouter.d.ts +7 -0
- package/dist/src/platforms/teams/trouter.d.ts.map +1 -1
- package/dist/src/platforms/teams/trouter.js +85 -0
- package/dist/src/platforms/teams/trouter.js.map +1 -1
- package/dist/src/platforms/teams/types.d.ts +9 -0
- package/dist/src/platforms/teams/types.d.ts.map +1 -1
- package/dist/src/platforms/teams/types.js.map +1 -1
- package/docs/content/docs/cli/teams.mdx +15 -1
- package/docs/content/docs/sdk/teams.mdx +30 -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-imessage/SKILL.md +1 -1
- package/skills/agent-instagram/SKILL.md +1 -1
- package/skills/agent-kakaotalk/SKILL.md +1 -1
- 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 +25 -2
- 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-webexbot/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/teams/client.ts +28 -0
- package/src/platforms/teams/index.ts +1 -0
- package/src/platforms/teams/listener.test.ts +243 -0
- package/src/platforms/teams/listener.ts +59 -3
- package/src/platforms/teams/trouter.test.ts +60 -0
- package/src/platforms/teams/trouter.ts +95 -0
- package/src/platforms/teams/types.ts +10 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/platforms/teams/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -265,13 +265,27 @@ import { TeamsClient, TeamsListener } from 'agent-messenger/teams'
|
|
|
265
265
|
const client = await new TeamsClient().login()
|
|
266
266
|
const listener = new TeamsListener(client)
|
|
267
267
|
|
|
268
|
-
listener.on('message', (message) => {
|
|
268
|
+
listener.on('message', async (message) => {
|
|
269
269
|
console.log(`New message in ${message.chatId}: ${message.content}`)
|
|
270
|
+
|
|
271
|
+
// Channel messages carry team/channel context and parsed @mentions.
|
|
272
|
+
if (message.conversationType === 'channel') {
|
|
273
|
+
for (const mention of message.mentions) {
|
|
274
|
+
console.log(`Mentioned: ${mention.displayName} (${mention.mri})`)
|
|
275
|
+
}
|
|
276
|
+
await client.sendMessage(message.teamId!, message.channelId!, 'On it 👍')
|
|
277
|
+
}
|
|
270
278
|
})
|
|
271
279
|
|
|
272
280
|
await listener.start()
|
|
273
281
|
```
|
|
274
282
|
|
|
283
|
+
Each `message` is a `TeamsRealtimeMessage`. Alongside the unchanged
|
|
284
|
+
`chatId`/`content`/`author`, it carries `conversationType` (`'chat'` or
|
|
285
|
+
`'channel'`), `teamId`/`channelId` (set for channel messages, for use with
|
|
286
|
+
`sendMessage`), and `mentions` (always present, empty when there are no
|
|
287
|
+
`@mentions`; each is `{ id, mri?, displayName }`).
|
|
288
|
+
|
|
275
289
|
The listener reuses your extracted credentials, so the Teams desktop app must be
|
|
276
290
|
logged in. It reconnects automatically and re-authenticates on token expiry.
|
|
277
291
|
|
|
@@ -206,9 +206,39 @@ import type {
|
|
|
206
206
|
TeamsAccount,
|
|
207
207
|
TeamsConfig,
|
|
208
208
|
TeamsConfigLegacy,
|
|
209
|
+
TeamsRealtimeMessage,
|
|
210
|
+
TeamsMention,
|
|
211
|
+
TeamsListenerEventMap,
|
|
212
|
+
TeamsTrouterGenericEvent,
|
|
209
213
|
} from 'agent-messenger/teams'
|
|
210
214
|
```
|
|
211
215
|
|
|
216
|
+
The real-time listener emits `TeamsRealtimeMessage`:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
interface TeamsRealtimeMessage {
|
|
220
|
+
id: string
|
|
221
|
+
chatId: string
|
|
222
|
+
conversationType: 'chat' | 'channel'
|
|
223
|
+
teamId?: string // set for channel messages
|
|
224
|
+
channelId?: string // set for channel messages
|
|
225
|
+
content: string // HTML-stripped text
|
|
226
|
+
mentions: TeamsMention[] // always present; empty when no @mentions
|
|
227
|
+
author: { id: string; displayName: string }
|
|
228
|
+
messageType: string
|
|
229
|
+
timestamp: string
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
interface TeamsMention {
|
|
233
|
+
id: string // positional mention index
|
|
234
|
+
mri?: string // Skype MRI of the mentioned user/tag
|
|
235
|
+
displayName: string
|
|
236
|
+
}
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
These are type-only exports (no Zod schema — the listener constructs the event
|
|
240
|
+
internally rather than parsing untrusted input).
|
|
241
|
+
|
|
212
242
|
### Zod Schemas
|
|
213
243
|
|
|
214
244
|
Runtime-validated schemas are also exported for parsing API responses:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "2.29.
|
|
3
|
+
"version": "2.29.1",
|
|
4
4
|
"description": "Multi-platform messaging CLI for AI agents (Slack, Discord, Teams, Webex, Telegram, Telegram Bot, WhatsApp, LINE, iMessage, 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.29.
|
|
4
|
+
version: 2.29.1
|
|
5
5
|
allowed-tools: Bash(agent-channeltalk:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-teams
|
|
3
3
|
description: Interact with Microsoft Teams - send messages, read channels, manage reactions
|
|
4
|
-
version: 2.29.
|
|
4
|
+
version: 2.29.1
|
|
5
5
|
allowed-tools: Bash(agent-teams:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -473,13 +473,36 @@ import { TeamsClient, TeamsListener } from 'agent-messenger/teams'
|
|
|
473
473
|
const client = await new TeamsClient().login()
|
|
474
474
|
const listener = new TeamsListener(client)
|
|
475
475
|
|
|
476
|
-
listener.on('message', (message) => {
|
|
476
|
+
listener.on('message', async (message) => {
|
|
477
477
|
console.log(`New message in ${message.chatId}: ${message.content}`)
|
|
478
|
+
|
|
479
|
+
// Channel messages carry team/channel context and parsed @mentions.
|
|
480
|
+
if (message.conversationType === 'channel') {
|
|
481
|
+
for (const mention of message.mentions) {
|
|
482
|
+
console.log(`Mentioned: ${mention.displayName} (${mention.mri})`)
|
|
483
|
+
}
|
|
484
|
+
await client.sendMessage(message.teamId!, message.channelId!, 'On it 👍')
|
|
485
|
+
}
|
|
478
486
|
})
|
|
479
487
|
|
|
480
488
|
await listener.start()
|
|
481
489
|
```
|
|
482
490
|
|
|
491
|
+
Each `message` is a `TeamsRealtimeMessage`:
|
|
492
|
+
|
|
493
|
+
| Field | Type | Notes |
|
|
494
|
+
| --- | --- | --- |
|
|
495
|
+
| `id` | `string` | Message id |
|
|
496
|
+
| `chatId` | `string` | Conversation id (unchanged) |
|
|
497
|
+
| `conversationType` | `'chat' \| 'channel'` | `'channel'` for team-channel messages |
|
|
498
|
+
| `teamId` | `string?` | Set for channel messages (use with `sendMessage`) |
|
|
499
|
+
| `channelId` | `string?` | Set for channel messages (use with `sendMessage`) |
|
|
500
|
+
| `content` | `string` | HTML-stripped text (unchanged) |
|
|
501
|
+
| `mentions` | `TeamsMention[]` | Always present; empty when no `@mentions`. Each is `{ id, mri?, displayName }` |
|
|
502
|
+
| `author` | `{ id, displayName }` | Sender (unchanged) |
|
|
503
|
+
| `messageType` | `string` | e.g. `Text`, `RichText/Html` |
|
|
504
|
+
| `timestamp` | `string` | ISO timestamp |
|
|
505
|
+
|
|
483
506
|
### Full API Reference
|
|
484
507
|
|
|
485
508
|
See the [Teams SDK documentation](https://agent-messenger.dev/docs/sdk/teams) for complete method signatures, types, schemas, and examples.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-webexbot
|
|
3
3
|
description: Interact with Cisco Webex using bot tokens - send messages, reply in threads, upload and download files, look up people, read spaces, manage memberships, stream real-time events
|
|
4
|
-
version: 2.29.
|
|
4
|
+
version: 2.29.1
|
|
5
5
|
allowed-tools: Bash(agent-webexbot:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -589,6 +589,34 @@ export class TeamsClient {
|
|
|
589
589
|
return Array.from(teamsMap.values())
|
|
590
590
|
}
|
|
591
591
|
|
|
592
|
+
// Realtime messages only carry a conversation id; a channel's parent teamId
|
|
593
|
+
// (== groupId) lives on the conversation, so the listener resolves it through
|
|
594
|
+
// this channelId -> teamId map.
|
|
595
|
+
async buildChannelTeamMap(): Promise<Map<string, string>> {
|
|
596
|
+
interface Conversation {
|
|
597
|
+
id: string
|
|
598
|
+
threadProperties?: {
|
|
599
|
+
groupId?: string
|
|
600
|
+
productThreadType?: string
|
|
601
|
+
threadType?: string
|
|
602
|
+
}
|
|
603
|
+
}
|
|
604
|
+
interface ConversationsResponse {
|
|
605
|
+
conversations: Conversation[]
|
|
606
|
+
}
|
|
607
|
+
const data = await this.request<ConversationsResponse>('GET', '/users/ME/conversations')
|
|
608
|
+
|
|
609
|
+
const channelToTeam = new Map<string, string>()
|
|
610
|
+
for (const conv of data.conversations ?? []) {
|
|
611
|
+
const tp = conv.threadProperties
|
|
612
|
+
if (!tp?.groupId) continue
|
|
613
|
+
if (!tp.productThreadType?.includes('Teams') && tp.threadType !== 'space') continue
|
|
614
|
+
channelToTeam.set(conv.id, tp.groupId)
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
return channelToTeam
|
|
618
|
+
}
|
|
619
|
+
|
|
592
620
|
async listChats(): Promise<TeamsChat[]> {
|
|
593
621
|
interface ConversationMessage {
|
|
594
622
|
content?: string
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { afterEach, describe, expect, mock, it } from 'bun:test'
|
|
2
|
+
|
|
3
|
+
import { TeamsListener } from '@/platforms/teams/listener'
|
|
4
|
+
import type { TeamsRealtimeMessage } from '@/platforms/teams/types'
|
|
5
|
+
|
|
6
|
+
type WsHandler = (...args: any[]) => void
|
|
7
|
+
|
|
8
|
+
let mockWsInstance: MockWs
|
|
9
|
+
|
|
10
|
+
class MockWs {
|
|
11
|
+
static OPEN = 1
|
|
12
|
+
static CLOSED = 3
|
|
13
|
+
readyState = MockWs.OPEN
|
|
14
|
+
|
|
15
|
+
private handlers = new Map<string, WsHandler[]>()
|
|
16
|
+
sent: string[] = []
|
|
17
|
+
|
|
18
|
+
constructor(_url: string, _options?: any) {
|
|
19
|
+
// oxlint-disable-next-line typescript-eslint/no-this-alias
|
|
20
|
+
mockWsInstance = this
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
on(event: string, handler: WsHandler) {
|
|
24
|
+
const list = this.handlers.get(event) ?? []
|
|
25
|
+
list.push(handler)
|
|
26
|
+
this.handlers.set(event, list)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
send(data: string) {
|
|
30
|
+
this.sent.push(data)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
close() {
|
|
34
|
+
this.readyState = MockWs.CLOSED
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
emit(event: string, ...args: any[]) {
|
|
38
|
+
for (const handler of this.handlers.get(event) ?? []) {
|
|
39
|
+
handler(...args)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
simulateFrame(frame: string) {
|
|
44
|
+
this.emit('message', Buffer.from(frame))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
mock.module('ws', () => ({ default: MockWs, __esModule: true }))
|
|
49
|
+
|
|
50
|
+
const actualTrouter = await import('@/platforms/teams/trouter')
|
|
51
|
+
mock.module('@/platforms/teams/trouter', () => ({
|
|
52
|
+
...actualTrouter,
|
|
53
|
+
fetchTrouterInfo: mock(() => Promise.resolve({ socketio: 'wss://fake/', surl: 'https://fake/', connectparams: {} })),
|
|
54
|
+
fetchTrouterSessionId: mock(() => Promise.resolve('SESSION')),
|
|
55
|
+
registerEndpoint: mock(() => Promise.resolve()),
|
|
56
|
+
}))
|
|
57
|
+
|
|
58
|
+
function messageFrame(resource: Record<string, unknown>): string {
|
|
59
|
+
const body = JSON.stringify({ resourceType: 'NewMessage', resource })
|
|
60
|
+
return `3:::${JSON.stringify({ id: 1, url: '/v4/f/HASH/messaging', body })}`
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function conversationLink(conversationId: string): string {
|
|
64
|
+
return `https://notifications.skype.net/v1/users/ME/conversations/${conversationId}`
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function createMockClient(channelTeamMap: Map<string, string> = new Map()) {
|
|
68
|
+
return {
|
|
69
|
+
getToken: mock(() => 'skype-token'),
|
|
70
|
+
getIdToken: mock(() => Promise.resolve('id-token')),
|
|
71
|
+
getAccountType: mock(() => 'work'),
|
|
72
|
+
buildChannelTeamMap: mock(() => Promise.resolve(channelTeamMap)),
|
|
73
|
+
} as any
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function startAndCapture(
|
|
77
|
+
client: ReturnType<typeof createMockClient>,
|
|
78
|
+
): Promise<{ listener: TeamsListener; messages: TeamsRealtimeMessage[] }> {
|
|
79
|
+
const listener = new TeamsListener(client)
|
|
80
|
+
const messages: TeamsRealtimeMessage[] = []
|
|
81
|
+
listener.on('message', (message) => messages.push(message))
|
|
82
|
+
await listener.start()
|
|
83
|
+
return { listener, messages }
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async function flushMicrotasks(): Promise<void> {
|
|
87
|
+
for (let i = 0; i < 5; i++) await Promise.resolve()
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
describe('TeamsListener.emitMessage', () => {
|
|
91
|
+
let listener: TeamsListener
|
|
92
|
+
|
|
93
|
+
afterEach(() => {
|
|
94
|
+
listener?.stop()
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('classifies a 1:1 chat and carries no team/channel context', async () => {
|
|
98
|
+
const client = createMockClient()
|
|
99
|
+
const started = await startAndCapture(client)
|
|
100
|
+
listener = started.listener
|
|
101
|
+
|
|
102
|
+
mockWsInstance.simulateFrame(
|
|
103
|
+
messageFrame({
|
|
104
|
+
id: 'm1',
|
|
105
|
+
messagetype: 'RichText/Html',
|
|
106
|
+
content: 'hello there',
|
|
107
|
+
from: 'https://x/contacts/8:orgid:alice',
|
|
108
|
+
imdisplayname: 'Alice',
|
|
109
|
+
conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
|
|
110
|
+
}),
|
|
111
|
+
)
|
|
112
|
+
await flushMicrotasks()
|
|
113
|
+
|
|
114
|
+
expect(started.messages).toHaveLength(1)
|
|
115
|
+
const message = started.messages[0]
|
|
116
|
+
expect(message.chatId).toBe('19:uni01_abc@unq.gbl.spaces')
|
|
117
|
+
expect(message.conversationType).toBe('chat')
|
|
118
|
+
expect(message.teamId).toBeUndefined()
|
|
119
|
+
expect(message.channelId).toBeUndefined()
|
|
120
|
+
expect(message.content).toBe('hello there')
|
|
121
|
+
expect(message.mentions).toEqual([])
|
|
122
|
+
expect(message.author).toEqual({ id: '8:orgid:alice', displayName: 'Alice' })
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
it('classifies a group chat thread with no groupId as a chat', async () => {
|
|
126
|
+
const client = createMockClient()
|
|
127
|
+
const started = await startAndCapture(client)
|
|
128
|
+
listener = started.listener
|
|
129
|
+
|
|
130
|
+
mockWsInstance.simulateFrame(
|
|
131
|
+
messageFrame({
|
|
132
|
+
id: 'm2',
|
|
133
|
+
messagetype: 'RichText/Html',
|
|
134
|
+
content: 'group hi',
|
|
135
|
+
from: 'https://x/contacts/8:orgid:bob',
|
|
136
|
+
imdisplayname: 'Bob',
|
|
137
|
+
conversationLink: conversationLink('19:group_xyz@thread.tacv2'),
|
|
138
|
+
}),
|
|
139
|
+
)
|
|
140
|
+
await flushMicrotasks()
|
|
141
|
+
|
|
142
|
+
expect(started.messages).toHaveLength(1)
|
|
143
|
+
const message = started.messages[0]
|
|
144
|
+
expect(message.chatId).toBe('19:group_xyz@thread.tacv2')
|
|
145
|
+
expect(message.conversationType).toBe('chat')
|
|
146
|
+
expect(message.teamId).toBeUndefined()
|
|
147
|
+
expect(message.channelId).toBeUndefined()
|
|
148
|
+
})
|
|
149
|
+
|
|
150
|
+
it('does not refresh the channel map for every group-chat message', async () => {
|
|
151
|
+
const client = createMockClient()
|
|
152
|
+
const started = await startAndCapture(client)
|
|
153
|
+
listener = started.listener
|
|
154
|
+
|
|
155
|
+
for (const id of ['g1', 'g2', 'g3']) {
|
|
156
|
+
mockWsInstance.simulateFrame(
|
|
157
|
+
messageFrame({
|
|
158
|
+
id,
|
|
159
|
+
messagetype: 'RichText/Html',
|
|
160
|
+
content: 'group hi',
|
|
161
|
+
from: 'https://x/contacts/8:orgid:bob',
|
|
162
|
+
imdisplayname: 'Bob',
|
|
163
|
+
conversationLink: conversationLink('19:group_xyz@thread.tacv2'),
|
|
164
|
+
}),
|
|
165
|
+
)
|
|
166
|
+
await flushMicrotasks()
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
expect(started.messages).toHaveLength(3)
|
|
170
|
+
// One build at start() + one refresh on the first miss; the negative cache
|
|
171
|
+
// prevents a fetch on the 2nd and 3rd messages.
|
|
172
|
+
expect(client.buildChannelTeamMap).toHaveBeenCalledTimes(2)
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
it('classifies a team channel message and resolves teamId plus mentions', async () => {
|
|
176
|
+
const channelId = '19:channel_abc@thread.tacv2'
|
|
177
|
+
const client = createMockClient(new Map([[channelId, 'team-group-id']]))
|
|
178
|
+
const started = await startAndCapture(client)
|
|
179
|
+
listener = started.listener
|
|
180
|
+
|
|
181
|
+
mockWsInstance.simulateFrame(
|
|
182
|
+
messageFrame({
|
|
183
|
+
id: 'm3',
|
|
184
|
+
messagetype: 'RichText/Html',
|
|
185
|
+
content: '<span itemtype="http://schema.skype.com/Mention" itemscope itemid="0">Alice</span> please review',
|
|
186
|
+
from: 'https://x/contacts/8:orgid:bob',
|
|
187
|
+
imdisplayname: 'Bob',
|
|
188
|
+
conversationLink: conversationLink(channelId),
|
|
189
|
+
properties: {
|
|
190
|
+
mentions: [{ itemid: '0', mri: '8:orgid:alice', mentionType: 'person', displayName: 'Alice' }],
|
|
191
|
+
},
|
|
192
|
+
}),
|
|
193
|
+
)
|
|
194
|
+
await flushMicrotasks()
|
|
195
|
+
|
|
196
|
+
expect(started.messages).toHaveLength(1)
|
|
197
|
+
const message = started.messages[0]
|
|
198
|
+
expect(message.conversationType).toBe('channel')
|
|
199
|
+
expect(message.teamId).toBe('team-group-id')
|
|
200
|
+
expect(message.channelId).toBe(channelId)
|
|
201
|
+
expect(message.content).toBe('Alice please review')
|
|
202
|
+
expect(message.mentions).toEqual([{ id: '0', mri: '8:orgid:alice', displayName: 'Alice' }])
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
it('does not re-emit a message with a duplicate id', async () => {
|
|
206
|
+
const client = createMockClient()
|
|
207
|
+
const started = await startAndCapture(client)
|
|
208
|
+
listener = started.listener
|
|
209
|
+
|
|
210
|
+
const frame = messageFrame({
|
|
211
|
+
id: 'dup',
|
|
212
|
+
messagetype: 'Text',
|
|
213
|
+
content: 'once',
|
|
214
|
+
from: 'https://x/contacts/8:orgid:alice',
|
|
215
|
+
imdisplayname: 'Alice',
|
|
216
|
+
conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
|
|
217
|
+
})
|
|
218
|
+
mockWsInstance.simulateFrame(frame)
|
|
219
|
+
await flushMicrotasks()
|
|
220
|
+
mockWsInstance.simulateFrame(frame)
|
|
221
|
+
await flushMicrotasks()
|
|
222
|
+
|
|
223
|
+
expect(started.messages).toHaveLength(1)
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
it('ignores non-text message types', async () => {
|
|
227
|
+
const client = createMockClient()
|
|
228
|
+
const started = await startAndCapture(client)
|
|
229
|
+
listener = started.listener
|
|
230
|
+
|
|
231
|
+
mockWsInstance.simulateFrame(
|
|
232
|
+
messageFrame({
|
|
233
|
+
id: 'sys',
|
|
234
|
+
messagetype: 'ThreadActivity/AddMember',
|
|
235
|
+
content: '',
|
|
236
|
+
conversationLink: conversationLink('19:uni01_abc@unq.gbl.spaces'),
|
|
237
|
+
}),
|
|
238
|
+
)
|
|
239
|
+
await flushMicrotasks()
|
|
240
|
+
|
|
241
|
+
expect(started.messages).toHaveLength(0)
|
|
242
|
+
})
|
|
243
|
+
})
|