@openclaw/feishu 2026.5.2 → 2026.5.3-beta.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/dist/accounts-Ba3-WP1z.js +423 -0
- package/dist/api.js +2280 -0
- package/dist/app-registration-B8qc1MCM.js +184 -0
- package/dist/audio-preflight.runtime-BPlzkO3l.js +7 -0
- package/dist/card-interaction-BfRLgvw_.js +96 -0
- package/dist/channel-CSD_Jt8I.js +1668 -0
- package/dist/channel-entry.js +22 -0
- package/dist/channel-plugin-api.js +2 -0
- package/dist/channel.runtime-DYsXcD36.js +700 -0
- package/dist/client-DBVoQL5w.js +157 -0
- package/dist/contract-api.js +9 -0
- package/dist/conversation-id-DWS3Ep2A.js +139 -0
- package/dist/directory.static-f3EeoRJd.js +44 -0
- package/dist/drive-C5eJLJr7.js +883 -0
- package/dist/index.js +68 -0
- package/dist/monitor-CT189QfR.js +60 -0
- package/dist/monitor.account-dJV2jO8C.js +4990 -0
- package/dist/monitor.state-DYM02ipp.js +100 -0
- package/dist/policy-D6c-wMPl.js +118 -0
- package/dist/probe-BNzzU_uR.js +149 -0
- package/dist/rolldown-runtime-DUslC3ob.js +14 -0
- package/dist/runtime-CG0DuRCy.js +8 -0
- package/dist/runtime-api.js +14 -0
- package/dist/secret-contract-Dm4Z_zQN.js +119 -0
- package/dist/secret-contract-api.js +2 -0
- package/dist/security-audit-DqJdocrN.js +11 -0
- package/dist/security-audit-shared-ByuMx9cJ.js +38 -0
- package/dist/security-contract-api.js +2 -0
- package/dist/send-DowxxbpH.js +1218 -0
- package/dist/session-conversation-B4nrW-vo.js +27 -0
- package/dist/session-key-api.js +2 -0
- package/dist/setup-api.js +2 -0
- package/dist/setup-entry.js +15 -0
- package/dist/subagent-hooks-C3UhPVLV.js +227 -0
- package/dist/subagent-hooks-api.js +23 -0
- package/dist/targets-JMFJRKSe.js +48 -0
- package/dist/thread-bindings-BmS6TLes.js +222 -0
- package/package.json +15 -6
- package/api.ts +0 -31
- package/channel-entry.ts +0 -20
- package/channel-plugin-api.ts +0 -1
- package/contract-api.ts +0 -16
- package/index.ts +0 -82
- package/runtime-api.ts +0 -55
- package/secret-contract-api.ts +0 -5
- package/security-contract-api.ts +0 -1
- package/session-key-api.ts +0 -1
- package/setup-api.ts +0 -3
- package/setup-entry.test.ts +0 -14
- package/setup-entry.ts +0 -13
- package/src/accounts.test.ts +0 -459
- package/src/accounts.ts +0 -326
- package/src/app-registration.ts +0 -331
- package/src/approval-auth.test.ts +0 -24
- package/src/approval-auth.ts +0 -25
- package/src/async.test.ts +0 -35
- package/src/async.ts +0 -104
- package/src/audio-preflight.runtime.ts +0 -9
- package/src/bitable.test.ts +0 -131
- package/src/bitable.ts +0 -762
- package/src/bot-content.ts +0 -474
- package/src/bot-group-name.test.ts +0 -108
- package/src/bot-runtime-api.ts +0 -12
- package/src/bot-sender-name.ts +0 -125
- package/src/bot.broadcast.test.ts +0 -463
- package/src/bot.card-action.test.ts +0 -577
- package/src/bot.checkBotMentioned.test.ts +0 -265
- package/src/bot.helpers.test.ts +0 -118
- package/src/bot.stripBotMention.test.ts +0 -126
- package/src/bot.test.ts +0 -3040
- package/src/bot.ts +0 -1559
- package/src/card-action.ts +0 -447
- package/src/card-interaction.test.ts +0 -129
- package/src/card-interaction.ts +0 -159
- package/src/card-test-helpers.ts +0 -47
- package/src/card-ux-approval.ts +0 -65
- package/src/card-ux-launcher.test.ts +0 -99
- package/src/card-ux-launcher.ts +0 -121
- package/src/card-ux-shared.ts +0 -33
- package/src/channel-runtime-api.ts +0 -16
- package/src/channel.runtime.ts +0 -47
- package/src/channel.test.ts +0 -959
- package/src/channel.ts +0 -1313
- package/src/chat-schema.ts +0 -25
- package/src/chat.test.ts +0 -196
- package/src/chat.ts +0 -188
- package/src/client.test.ts +0 -433
- package/src/client.ts +0 -290
- package/src/comment-dispatcher-runtime-api.ts +0 -6
- package/src/comment-dispatcher.test.ts +0 -169
- package/src/comment-dispatcher.ts +0 -107
- package/src/comment-handler-runtime-api.ts +0 -3
- package/src/comment-handler.test.ts +0 -486
- package/src/comment-handler.ts +0 -309
- package/src/comment-reaction.test.ts +0 -166
- package/src/comment-reaction.ts +0 -259
- package/src/comment-shared.test.ts +0 -182
- package/src/comment-shared.ts +0 -406
- package/src/comment-target.ts +0 -44
- package/src/config-schema.test.ts +0 -309
- package/src/config-schema.ts +0 -333
- package/src/conversation-id.test.ts +0 -18
- package/src/conversation-id.ts +0 -199
- package/src/dedup-runtime-api.ts +0 -1
- package/src/dedup.ts +0 -141
- package/src/directory.static.ts +0 -61
- package/src/directory.test.ts +0 -136
- package/src/directory.ts +0 -124
- package/src/doc-schema.ts +0 -182
- package/src/docx-batch-insert.test.ts +0 -91
- package/src/docx-batch-insert.ts +0 -223
- package/src/docx-color-text.ts +0 -154
- package/src/docx-table-ops.test.ts +0 -53
- package/src/docx-table-ops.ts +0 -316
- package/src/docx-types.ts +0 -38
- package/src/docx.account-selection.test.ts +0 -79
- package/src/docx.test.ts +0 -685
- package/src/docx.ts +0 -1616
- package/src/drive-schema.ts +0 -92
- package/src/drive.test.ts +0 -1219
- package/src/drive.ts +0 -829
- package/src/dynamic-agent.ts +0 -137
- package/src/event-types.ts +0 -45
- package/src/external-keys.test.ts +0 -20
- package/src/external-keys.ts +0 -19
- package/src/lifecycle.test-support.ts +0 -220
- package/src/media.test.ts +0 -900
- package/src/media.ts +0 -861
- package/src/mention-target.types.ts +0 -5
- package/src/mention.ts +0 -114
- package/src/message-action-contract.ts +0 -13
- package/src/monitor-state-runtime-api.ts +0 -7
- package/src/monitor-transport-runtime-api.ts +0 -7
- package/src/monitor.account.ts +0 -468
- package/src/monitor.acp-init-failure.lifecycle.test-support.ts +0 -219
- package/src/monitor.bot-identity.ts +0 -86
- package/src/monitor.bot-menu-handler.ts +0 -165
- package/src/monitor.bot-menu.lifecycle.test-support.ts +0 -224
- package/src/monitor.bot-menu.test.ts +0 -178
- package/src/monitor.broadcast.reply-once.lifecycle.test-support.ts +0 -264
- package/src/monitor.card-action.lifecycle.test-support.ts +0 -373
- package/src/monitor.cleanup.test.ts +0 -376
- package/src/monitor.comment-notice-handler.ts +0 -105
- package/src/monitor.comment.test.ts +0 -937
- package/src/monitor.comment.ts +0 -1386
- package/src/monitor.lifecycle.test.ts +0 -4
- package/src/monitor.message-handler.ts +0 -339
- package/src/monitor.reaction.lifecycle.test-support.ts +0 -68
- package/src/monitor.reaction.test.ts +0 -713
- package/src/monitor.startup.test.ts +0 -192
- package/src/monitor.startup.ts +0 -74
- package/src/monitor.state.defaults.test.ts +0 -46
- package/src/monitor.state.ts +0 -170
- package/src/monitor.synthetic-error.ts +0 -18
- package/src/monitor.test-mocks.ts +0 -45
- package/src/monitor.transport.ts +0 -424
- package/src/monitor.ts +0 -100
- package/src/monitor.webhook-e2e.test.ts +0 -272
- package/src/monitor.webhook-security.test.ts +0 -264
- package/src/monitor.webhook.test-helpers.ts +0 -116
- package/src/outbound-runtime-api.ts +0 -1
- package/src/outbound.test.ts +0 -935
- package/src/outbound.ts +0 -718
- package/src/perm-schema.ts +0 -52
- package/src/perm.ts +0 -170
- package/src/pins.ts +0 -108
- package/src/policy.test.ts +0 -334
- package/src/policy.ts +0 -236
- package/src/post.test.ts +0 -105
- package/src/post.ts +0 -275
- package/src/probe.test.ts +0 -275
- package/src/probe.ts +0 -166
- package/src/processing-claims.ts +0 -59
- package/src/qr-terminal.ts +0 -1
- package/src/reactions.ts +0 -123
- package/src/reasoning-preview.test.ts +0 -59
- package/src/reasoning-preview.ts +0 -20
- package/src/reply-dispatcher-runtime-api.ts +0 -7
- package/src/reply-dispatcher.test.ts +0 -1144
- package/src/reply-dispatcher.ts +0 -650
- package/src/runtime.ts +0 -9
- package/src/secret-contract.ts +0 -145
- package/src/secret-input.ts +0 -1
- package/src/security-audit-shared.ts +0 -69
- package/src/security-audit.test.ts +0 -61
- package/src/security-audit.ts +0 -1
- package/src/send-result.ts +0 -29
- package/src/send-target.test.ts +0 -80
- package/src/send-target.ts +0 -35
- package/src/send.reply-fallback.test.ts +0 -292
- package/src/send.test.ts +0 -550
- package/src/send.ts +0 -800
- package/src/sequential-key.test.ts +0 -72
- package/src/sequential-key.ts +0 -28
- package/src/sequential-queue.test.ts +0 -92
- package/src/sequential-queue.ts +0 -16
- package/src/session-conversation.ts +0 -42
- package/src/session-route.ts +0 -48
- package/src/setup-core.ts +0 -51
- package/src/setup-surface.test.ts +0 -174
- package/src/setup-surface.ts +0 -581
- package/src/streaming-card.test.ts +0 -190
- package/src/streaming-card.ts +0 -490
- package/src/subagent-hooks.test.ts +0 -603
- package/src/subagent-hooks.ts +0 -397
- package/src/targets.ts +0 -97
- package/src/test-support/lifecycle-test-support.ts +0 -453
- package/src/thread-bindings.test.ts +0 -143
- package/src/thread-bindings.ts +0 -330
- package/src/tool-account-routing.test.ts +0 -187
- package/src/tool-account.test.ts +0 -44
- package/src/tool-account.ts +0 -93
- package/src/tool-factory-test-harness.ts +0 -79
- package/src/tool-result.test.ts +0 -32
- package/src/tool-result.ts +0 -16
- package/src/tools-config.test.ts +0 -21
- package/src/tools-config.ts +0 -22
- package/src/types.ts +0 -104
- package/src/typing.test.ts +0 -144
- package/src/typing.ts +0 -214
- package/src/wiki-schema.ts +0 -55
- package/src/wiki.ts +0 -227
- package/subagent-hooks-api.ts +0 -31
- package/tsconfig.json +0 -16
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
-
|
|
3
|
-
const resolveFeishuSendTargetMock = vi.hoisted(() => vi.fn());
|
|
4
|
-
const resolveMarkdownTableModeMock = vi.hoisted(() => vi.fn(() => "preserve"));
|
|
5
|
-
const convertMarkdownTablesMock = vi.hoisted(() => vi.fn((text: string) => text));
|
|
6
|
-
|
|
7
|
-
vi.mock("./send-target.js", () => ({
|
|
8
|
-
resolveFeishuSendTarget: resolveFeishuSendTargetMock,
|
|
9
|
-
}));
|
|
10
|
-
|
|
11
|
-
vi.mock("./runtime.js", () => ({
|
|
12
|
-
setFeishuRuntime: vi.fn(),
|
|
13
|
-
getFeishuRuntime: () => ({
|
|
14
|
-
channel: {
|
|
15
|
-
text: {
|
|
16
|
-
resolveMarkdownTableMode: resolveMarkdownTableModeMock,
|
|
17
|
-
convertMarkdownTables: convertMarkdownTablesMock,
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
}),
|
|
21
|
-
}));
|
|
22
|
-
|
|
23
|
-
let sendCardFeishu: typeof import("./send.js").sendCardFeishu;
|
|
24
|
-
let sendMessageFeishu: typeof import("./send.js").sendMessageFeishu;
|
|
25
|
-
|
|
26
|
-
describe("Feishu reply fallback for withdrawn/deleted targets", () => {
|
|
27
|
-
const replyMock = vi.fn();
|
|
28
|
-
const createMock = vi.fn();
|
|
29
|
-
|
|
30
|
-
async function expectFallbackResult(
|
|
31
|
-
send: () => Promise<{ messageId?: string }>,
|
|
32
|
-
expectedMessageId: string,
|
|
33
|
-
) {
|
|
34
|
-
const result = await send();
|
|
35
|
-
expect(replyMock).toHaveBeenCalledTimes(1);
|
|
36
|
-
expect(createMock).toHaveBeenCalledTimes(1);
|
|
37
|
-
expect(result.messageId).toBe(expectedMessageId);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
beforeAll(async () => {
|
|
41
|
-
({ sendCardFeishu, sendMessageFeishu } = await import("./send.js"));
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
beforeEach(() => {
|
|
45
|
-
vi.clearAllMocks();
|
|
46
|
-
resolveFeishuSendTargetMock.mockReturnValue({
|
|
47
|
-
client: {
|
|
48
|
-
im: {
|
|
49
|
-
message: {
|
|
50
|
-
reply: replyMock,
|
|
51
|
-
create: createMock,
|
|
52
|
-
},
|
|
53
|
-
},
|
|
54
|
-
},
|
|
55
|
-
receiveId: "ou_target",
|
|
56
|
-
receiveIdType: "open_id",
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it("preserves Feishu diagnostics when direct sends reject before response checks", async () => {
|
|
61
|
-
const apiError = Object.assign(new Error("Request failed with status code 400"), {
|
|
62
|
-
response: {
|
|
63
|
-
status: 400,
|
|
64
|
-
data: {
|
|
65
|
-
code: 9499,
|
|
66
|
-
msg: "Bad Request",
|
|
67
|
-
error: {
|
|
68
|
-
log_id: "202604291247104BEF4C42D2420A9AD569",
|
|
69
|
-
troubleshooter:
|
|
70
|
-
"https://open.feishu.cn/search?log_id=202604291247104BEF4C42D2420A9AD569",
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
createMock.mockRejectedValue(apiError);
|
|
76
|
-
|
|
77
|
-
await expect(
|
|
78
|
-
sendMessageFeishu({
|
|
79
|
-
cfg: {} as never,
|
|
80
|
-
to: "user:ou_target",
|
|
81
|
-
text: "hello",
|
|
82
|
-
}),
|
|
83
|
-
).rejects.toThrow(
|
|
84
|
-
/Feishu send failed: .*"http_status":400.*"feishu_code":9499.*"feishu_msg":"Bad Request".*"feishu_log_id":"202604291247104BEF4C42D2420A9AD569".*"feishu_troubleshooter":"https:\/\/open\.feishu\.cn\/search\?log_id=202604291247104BEF4C42D2420A9AD569"/,
|
|
85
|
-
);
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
it("falls back to create for withdrawn post replies", async () => {
|
|
89
|
-
replyMock.mockResolvedValue({
|
|
90
|
-
code: 230011,
|
|
91
|
-
msg: "The message was withdrawn.",
|
|
92
|
-
});
|
|
93
|
-
createMock.mockResolvedValue({
|
|
94
|
-
code: 0,
|
|
95
|
-
data: { message_id: "om_new" },
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
await expectFallbackResult(
|
|
99
|
-
() =>
|
|
100
|
-
sendMessageFeishu({
|
|
101
|
-
cfg: {} as never,
|
|
102
|
-
to: "user:ou_target",
|
|
103
|
-
text: "hello",
|
|
104
|
-
replyToMessageId: "om_parent",
|
|
105
|
-
}),
|
|
106
|
-
"om_new",
|
|
107
|
-
);
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
it("falls back to create for withdrawn card replies", async () => {
|
|
111
|
-
replyMock.mockResolvedValue({
|
|
112
|
-
code: 231003,
|
|
113
|
-
msg: "The message is not found",
|
|
114
|
-
});
|
|
115
|
-
createMock.mockResolvedValue({
|
|
116
|
-
code: 0,
|
|
117
|
-
data: { message_id: "om_card_new" },
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
await expectFallbackResult(
|
|
121
|
-
() =>
|
|
122
|
-
sendCardFeishu({
|
|
123
|
-
cfg: {} as never,
|
|
124
|
-
to: "user:ou_target",
|
|
125
|
-
card: { schema: "2.0" },
|
|
126
|
-
replyToMessageId: "om_parent",
|
|
127
|
-
}),
|
|
128
|
-
"om_card_new",
|
|
129
|
-
);
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
it("still throws for non-withdrawn reply failures", async () => {
|
|
133
|
-
replyMock.mockResolvedValue({
|
|
134
|
-
code: 999999,
|
|
135
|
-
msg: "unknown failure",
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
await expect(
|
|
139
|
-
sendMessageFeishu({
|
|
140
|
-
cfg: {} as never,
|
|
141
|
-
to: "user:ou_target",
|
|
142
|
-
text: "hello",
|
|
143
|
-
replyToMessageId: "om_parent",
|
|
144
|
-
}),
|
|
145
|
-
).rejects.toThrow("Feishu reply failed");
|
|
146
|
-
|
|
147
|
-
expect(createMock).not.toHaveBeenCalled();
|
|
148
|
-
});
|
|
149
|
-
|
|
150
|
-
it("falls back to create when reply throws a withdrawn SDK error", async () => {
|
|
151
|
-
const sdkError = Object.assign(new Error("request failed"), { code: 230011 });
|
|
152
|
-
replyMock.mockRejectedValue(sdkError);
|
|
153
|
-
createMock.mockResolvedValue({
|
|
154
|
-
code: 0,
|
|
155
|
-
data: { message_id: "om_thrown_fallback" },
|
|
156
|
-
});
|
|
157
|
-
|
|
158
|
-
await expectFallbackResult(
|
|
159
|
-
() =>
|
|
160
|
-
sendMessageFeishu({
|
|
161
|
-
cfg: {} as never,
|
|
162
|
-
to: "user:ou_target",
|
|
163
|
-
text: "hello",
|
|
164
|
-
replyToMessageId: "om_parent",
|
|
165
|
-
}),
|
|
166
|
-
"om_thrown_fallback",
|
|
167
|
-
);
|
|
168
|
-
});
|
|
169
|
-
|
|
170
|
-
it("falls back to create when card reply throws a not-found AxiosError", async () => {
|
|
171
|
-
const axiosError = Object.assign(new Error("Request failed"), {
|
|
172
|
-
response: { status: 200, data: { code: 231003, msg: "The message is not found" } },
|
|
173
|
-
});
|
|
174
|
-
replyMock.mockRejectedValue(axiosError);
|
|
175
|
-
createMock.mockResolvedValue({
|
|
176
|
-
code: 0,
|
|
177
|
-
data: { message_id: "om_axios_fallback" },
|
|
178
|
-
});
|
|
179
|
-
|
|
180
|
-
await expectFallbackResult(
|
|
181
|
-
() =>
|
|
182
|
-
sendCardFeishu({
|
|
183
|
-
cfg: {} as never,
|
|
184
|
-
to: "user:ou_target",
|
|
185
|
-
card: { schema: "2.0" },
|
|
186
|
-
replyToMessageId: "om_parent",
|
|
187
|
-
}),
|
|
188
|
-
"om_axios_fallback",
|
|
189
|
-
);
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it("re-throws non-withdrawn thrown errors for text messages", async () => {
|
|
193
|
-
const sdkError = Object.assign(new Error("rate limited"), { code: 99991400 });
|
|
194
|
-
replyMock.mockRejectedValue(sdkError);
|
|
195
|
-
|
|
196
|
-
await expect(
|
|
197
|
-
sendMessageFeishu({
|
|
198
|
-
cfg: {} as never,
|
|
199
|
-
to: "user:ou_target",
|
|
200
|
-
text: "hello",
|
|
201
|
-
replyToMessageId: "om_parent",
|
|
202
|
-
}),
|
|
203
|
-
).rejects.toThrow("rate limited");
|
|
204
|
-
|
|
205
|
-
expect(createMock).not.toHaveBeenCalled();
|
|
206
|
-
});
|
|
207
|
-
|
|
208
|
-
it("fails thread replies instead of falling back to a top-level send", async () => {
|
|
209
|
-
replyMock.mockResolvedValue({
|
|
210
|
-
code: 230011,
|
|
211
|
-
msg: "The message was withdrawn.",
|
|
212
|
-
});
|
|
213
|
-
|
|
214
|
-
await expect(
|
|
215
|
-
sendMessageFeishu({
|
|
216
|
-
cfg: {} as never,
|
|
217
|
-
to: "chat:oc_group_1",
|
|
218
|
-
text: "hello",
|
|
219
|
-
replyToMessageId: "om_parent",
|
|
220
|
-
replyInThread: true,
|
|
221
|
-
}),
|
|
222
|
-
).rejects.toThrow(
|
|
223
|
-
"Feishu thread reply failed: reply target is unavailable and cannot safely fall back to a top-level send.",
|
|
224
|
-
);
|
|
225
|
-
|
|
226
|
-
expect(createMock).not.toHaveBeenCalled();
|
|
227
|
-
expect(replyMock).toHaveBeenCalledWith({
|
|
228
|
-
path: { message_id: "om_parent" },
|
|
229
|
-
data: expect.objectContaining({
|
|
230
|
-
reply_in_thread: true,
|
|
231
|
-
}),
|
|
232
|
-
});
|
|
233
|
-
});
|
|
234
|
-
|
|
235
|
-
it("fails thrown withdrawn thread replies instead of falling back to create", async () => {
|
|
236
|
-
const sdkError = Object.assign(new Error("request failed"), { code: 230011 });
|
|
237
|
-
replyMock.mockRejectedValue(sdkError);
|
|
238
|
-
|
|
239
|
-
await expect(
|
|
240
|
-
sendMessageFeishu({
|
|
241
|
-
cfg: {} as never,
|
|
242
|
-
to: "chat:oc_group_1",
|
|
243
|
-
text: "hello",
|
|
244
|
-
replyToMessageId: "om_parent",
|
|
245
|
-
replyInThread: true,
|
|
246
|
-
}),
|
|
247
|
-
).rejects.toThrow(
|
|
248
|
-
"Feishu thread reply failed: reply target is unavailable and cannot safely fall back to a top-level send.",
|
|
249
|
-
);
|
|
250
|
-
|
|
251
|
-
expect(createMock).not.toHaveBeenCalled();
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
it("still falls back for non-thread replies to withdrawn targets", async () => {
|
|
255
|
-
replyMock.mockResolvedValue({
|
|
256
|
-
code: 230011,
|
|
257
|
-
msg: "The message was withdrawn.",
|
|
258
|
-
});
|
|
259
|
-
createMock.mockResolvedValue({
|
|
260
|
-
code: 0,
|
|
261
|
-
data: { message_id: "om_non_thread_fallback" },
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
await expectFallbackResult(
|
|
265
|
-
() =>
|
|
266
|
-
sendMessageFeishu({
|
|
267
|
-
cfg: {} as never,
|
|
268
|
-
to: "user:ou_target",
|
|
269
|
-
text: "hello",
|
|
270
|
-
replyToMessageId: "om_parent",
|
|
271
|
-
replyInThread: false,
|
|
272
|
-
}),
|
|
273
|
-
"om_non_thread_fallback",
|
|
274
|
-
);
|
|
275
|
-
});
|
|
276
|
-
|
|
277
|
-
it("re-throws non-withdrawn thrown errors for card messages", async () => {
|
|
278
|
-
const sdkError = Object.assign(new Error("permission denied"), { code: 99991401 });
|
|
279
|
-
replyMock.mockRejectedValue(sdkError);
|
|
280
|
-
|
|
281
|
-
await expect(
|
|
282
|
-
sendCardFeishu({
|
|
283
|
-
cfg: {} as never,
|
|
284
|
-
to: "user:ou_target",
|
|
285
|
-
card: { schema: "2.0" },
|
|
286
|
-
replyToMessageId: "om_parent",
|
|
287
|
-
}),
|
|
288
|
-
).rejects.toThrow("permission denied");
|
|
289
|
-
|
|
290
|
-
expect(createMock).not.toHaveBeenCalled();
|
|
291
|
-
});
|
|
292
|
-
});
|