fix(feishu): validate retry timestamp

This commit is contained in:
Vincent Koc
2026-06-16 16:35:28 +08:00
parent e42a516678
commit 230266c0ba
2 changed files with 14 additions and 1 deletions

View File

@@ -64,6 +64,13 @@ describe("resolveFeishuMessageDedupeKey", () => {
expect(key).toBe("om_no_time");
});
it("falls back to message_id for malformed create_time", () => {
const key = resolveFeishuMessageDedupeKey(
textEvent({ messageId: "om_bad_time", createTime: "1710000000000ms" }),
);
expect(key).toBe("om_bad_time");
});
it("keeps media keyed by message_id plus media key", () => {
const event: FeishuMessageEvent = {
sender: { sender_id: { open_id: "ou-user" } },

View File

@@ -1,5 +1,6 @@
// Feishu plugin module implements dedupe key behavior.
import { createHash } from "node:crypto";
import { parseStrictNonNegativeInteger } from "openclaw/plugin-sdk/number-runtime";
import { asNullableRecord as readRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
import type { FeishuMessageEvent } from "./event-types.js";
import { normalizeFeishuExternalKey } from "./external-keys.js";
@@ -79,7 +80,12 @@ function resolveTextRetryDedupeKey(event: FeishuMessageDedupeInput): string | un
const createTime = event.message.create_time?.trim();
const chatId = event.message.chat_id?.trim();
const senderId = resolveSenderIdentity(event);
if (!createTime || !chatId || !senderId) {
if (
!createTime ||
parseStrictNonNegativeInteger(createTime) === undefined ||
!chatId ||
!senderId
) {
return undefined;
}
const contentHash = createHash("sha256")