@xwang152/claw-lark 0.1.25 → 0.1.27

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/index.d.ts CHANGED
@@ -12,6 +12,8 @@ export { createLarkClient, createLarkWSClient } from "./src/client.js";
12
12
  export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
13
13
  export { startWebhookServer } from "./src/webhook.js";
14
14
  export { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./src/directory.js";
15
+ export { sendMessageLark, sendCardLark, updateCardLark, buildMarkdownCard, sendMarkdownCardLark, editMessageLark, } from "./src/send.js";
16
+ export type { LarkSendResult, SendLarkMessageParams, SendLarkCardParams, SendLarkMarkdownCardParams } from "./src/send.js";
15
17
  export { downloadImageLark, downloadFileLark, uploadImageLark, uploadFileLark, sendImageLark, sendFileLark, sendMediaLark, detectFileType, } from "./src/media.js";
16
18
  export { addReactionLark, removeReactionLark, listReactionsLark } from "./src/reactions.js";
17
19
  export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, buildMentionedMessage, buildMentionedCardContent, } from "./src/mention.js";
@@ -21,6 +23,10 @@ export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, p
21
23
  export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
22
24
  export type { LarkDomain, LarkConnectionMode, DmPolicy, GroupPolicy, RenderMode, LarkAccountConfig, ResolvedLarkAccount, LarkChannelConfig, LarkGroupConfig, LarkMessageEvent, LarkMention, ParsedMessage, SendResult, } from "./src/types.js";
23
25
  export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
26
+ export { detectLarkIdType, normalizeLarkTarget, formatLarkTarget, inferReceiveIdType, looksLikeLarkId, } from "./src/utils.js";
27
+ export type { LarkIdType } from "./src/utils.js";
28
+ export { probeLark } from "./src/probe.js";
29
+ export type { LarkProbeResult } from "./src/probe.js";
24
30
  declare const plugin: {
25
31
  id: string;
26
32
  name: string;
package/dist/index.js CHANGED
@@ -16,6 +16,7 @@ export { createLarkClient, createLarkWSClient } from "./src/client.js";
16
16
  export { monitorLarkProvider, stopMonitor } from "./src/monitor.js";
17
17
  export { startWebhookServer } from "./src/webhook.js";
18
18
  export { listLarkDirectoryPeers, listLarkDirectoryGroups } from "./src/directory.js";
19
+ export { sendMessageLark, sendCardLark, updateCardLark, buildMarkdownCard, sendMarkdownCardLark, editMessageLark, } from "./src/send.js";
19
20
  export { downloadImageLark, downloadFileLark, uploadImageLark, uploadFileLark, sendImageLark, sendFileLark, sendMediaLark, detectFileType, } from "./src/media.js";
20
21
  export { addReactionLark, removeReactionLark, listReactionsLark } from "./src/reactions.js";
21
22
  export { extractMentionTargets, extractMessageBody, isMentionForwardRequest, formatMentionForText, formatMentionForCard, formatMentionAllForText, formatMentionAllForCard, buildMentionedMessage, buildMentionedCardContent, } from "./src/mention.js";
@@ -23,6 +24,8 @@ export { addTypingIndicator, removeTypingIndicator, createTypingController, } fr
23
24
  export { resolveLarkSenderName, clearSenderNameCache, getSenderNameCacheStats, prefetchLarkSenderNames, } from "./src/sender-name.js";
24
25
  export { getLarkMessage, formatQuotedContext, isReplyMessage, buildMessageContextWithQuote, } from "./src/message-context.js";
25
26
  export { resolveLarkAllowlistMatch, resolveLarkGroupConfig, resolveLarkGroupToolPolicy, isLarkGroupAllowed, resolveLarkGroupRequireMention, resolveLarkReplyToMode, } from "./src/policy.js";
27
+ export { detectLarkIdType, normalizeLarkTarget, formatLarkTarget, inferReceiveIdType, looksLikeLarkId, } from "./src/utils.js";
28
+ export { probeLark } from "./src/probe.js";
26
29
  const plugin = {
27
30
  id: "claw-lark",
28
31
  name: "Lark",
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,mCAAmC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,GAChB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5F,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,4BAA4B,GAC7B,MAAM,0BAA0B,CAAC;AAgBlC,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EACtB,0BAA0B,EAC1B,kBAAkB,EAClB,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,MAAM,GAAG;IACb,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,4CAA4C;IACzD,YAAY,EAAE,uBAAuB,EAAE;IACvC,QAAQ,CAAC,GAAsB;QAC7B,cAAc,CAAC,GAAG,CAAC,CAAC;QACpB,wCAAwC;QACxC,GAAG,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5C,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;IAC3C,CAAC;CACF,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Lark/Feishu Connection Probe
3
+ *
4
+ * Tests connectivity and retrieves bot information.
5
+ * Useful for configuration verification and debugging.
6
+ */
7
+ import type { ResolvedLarkAccount } from "./types.js";
8
+ export type LarkProbeResult = {
9
+ ok: true;
10
+ appId: string;
11
+ botName?: string;
12
+ botOpenId?: string;
13
+ } | {
14
+ ok: false;
15
+ appId?: string;
16
+ error: string;
17
+ };
18
+ /**
19
+ * Probe Lark/Feishu API to verify credentials and get bot info.
20
+ *
21
+ * @param account - The Lark account to test
22
+ * @returns Probe result with bot info if successful
23
+ */
24
+ export declare function probeLark(account: ResolvedLarkAccount): Promise<LarkProbeResult>;
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Lark/Feishu Connection Probe
3
+ *
4
+ * Tests connectivity and retrieves bot information.
5
+ * Useful for configuration verification and debugging.
6
+ */
7
+ import { createLarkClient } from "./client.js";
8
+ /**
9
+ * Probe Lark/Feishu API to verify credentials and get bot info.
10
+ *
11
+ * @param account - The Lark account to test
12
+ * @returns Probe result with bot info if successful
13
+ */
14
+ export async function probeLark(account) {
15
+ if (!account.appId || !account.appSecret) {
16
+ return {
17
+ ok: false,
18
+ error: "missing credentials (appId, appSecret)",
19
+ };
20
+ }
21
+ try {
22
+ const client = createLarkClient(account);
23
+ // Use bot info API to test connectivity
24
+ const response = await client.request({
25
+ method: "GET",
26
+ url: "/open-apis/bot/v3/info",
27
+ data: {},
28
+ });
29
+ if (response.code !== 0) {
30
+ return {
31
+ ok: false,
32
+ appId: account.appId,
33
+ error: `API error: ${response.msg || `code ${response.code}`}`,
34
+ };
35
+ }
36
+ const bot = response.bot || response.data?.bot;
37
+ return {
38
+ ok: true,
39
+ appId: account.appId,
40
+ botName: bot?.bot_name,
41
+ botOpenId: bot?.open_id,
42
+ };
43
+ }
44
+ catch (err) {
45
+ return {
46
+ ok: false,
47
+ appId: account.appId,
48
+ error: err instanceof Error ? err.message : String(err),
49
+ };
50
+ }
51
+ }
52
+ //# sourceMappingURL=probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"probe.js","sourceRoot":"","sources":["../../src/probe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAe/C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAA4B;IAC1D,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,wCAAwC;SAChD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEzC,wCAAwC;QACxC,MAAM,QAAQ,GAAG,MAAO,MAAc,CAAC,OAAO,CAAC;YAC7C,MAAM,EAAE,KAAK;YACb,GAAG,EAAE,wBAAwB;YAC7B,IAAI,EAAE,EAAE;SACT,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,cAAc,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE;aAC/D,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,GAAG,EAAE,QAAQ;YACtB,SAAS,EAAE,GAAG,EAAE,OAAO;SACxB,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;SACxD,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Lark/Feishu Message Sending Utilities
3
+ *
4
+ * Functions for sending text, cards, and editing messages.
5
+ * Includes markdown card support for rich content rendering.
6
+ */
7
+ import type { ResolvedLarkAccount } from "./types.js";
8
+ import type { MentionTarget } from "./mention.js";
9
+ export type LarkSendResult = {
10
+ messageId: string;
11
+ chatId: string;
12
+ };
13
+ export type SendLarkMessageParams = {
14
+ account: ResolvedLarkAccount;
15
+ to: string;
16
+ text: string;
17
+ replyToMessageId?: string;
18
+ /** Mention target users */
19
+ mentions?: MentionTarget[];
20
+ };
21
+ /**
22
+ * Send a text message to Lark/Feishu.
23
+ *
24
+ * @param params - Account, recipient, message content, and optional reply/mentions
25
+ * @returns Send result with messageId and chatId
26
+ */
27
+ export declare function sendMessageLark(params: SendLarkMessageParams): Promise<LarkSendResult>;
28
+ export type SendLarkCardParams = {
29
+ account: ResolvedLarkAccount;
30
+ to: string;
31
+ card: Record<string, unknown>;
32
+ replyToMessageId?: string;
33
+ };
34
+ /**
35
+ * Send an interactive card message to Lark/Feishu.
36
+ *
37
+ * @param params - Account, recipient, card content, and optional reply
38
+ * @returns Send result with messageId and chatId
39
+ */
40
+ export declare function sendCardLark(params: SendLarkCardParams): Promise<LarkSendResult>;
41
+ /**
42
+ * Update an existing card message.
43
+ *
44
+ * @param params - Account, messageId, and new card content
45
+ */
46
+ export declare function updateCardLark(params: {
47
+ account: ResolvedLarkAccount;
48
+ messageId: string;
49
+ card: Record<string, unknown>;
50
+ }): Promise<void>;
51
+ /**
52
+ * Build a Lark/Feishu interactive card with markdown content.
53
+ *
54
+ * Cards render markdown properly (code blocks, tables, links, etc.)
55
+ *
56
+ * @param text - Markdown content to display in the card
57
+ * @returns Card object for Lark API
58
+ */
59
+ export declare function buildMarkdownCard(text: string): Record<string, unknown>;
60
+ export type SendLarkMarkdownCardParams = {
61
+ account: ResolvedLarkAccount;
62
+ to: string;
63
+ text: string;
64
+ replyToMessageId?: string;
65
+ /** Mention target users */
66
+ mentions?: MentionTarget[];
67
+ };
68
+ /**
69
+ * Send a message as a markdown card (interactive message).
70
+ *
71
+ * This renders markdown properly in Lark/Feishu (code blocks, tables, bold/italic, etc.)
72
+ *
73
+ * @param params - Account, recipient, markdown text, and optional reply/mentions
74
+ * @returns Send result with messageId and chatId
75
+ */
76
+ export declare function sendMarkdownCardLark(params: SendLarkMarkdownCardParams): Promise<LarkSendResult>;
77
+ /**
78
+ * Edit an existing text message.
79
+ *
80
+ * Note: Lark/Feishu only allows editing messages within a certain time window.
81
+ *
82
+ * @param params - Account, messageId, and new text content
83
+ */
84
+ export declare function editMessageLark(params: {
85
+ account: ResolvedLarkAccount;
86
+ messageId: string;
87
+ text: string;
88
+ }): Promise<void>;
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Lark/Feishu Message Sending Utilities
3
+ *
4
+ * Functions for sending text, cards, and editing messages.
5
+ * Includes markdown card support for rich content rendering.
6
+ */
7
+ import { createLarkClient } from "./client.js";
8
+ import { inferReceiveIdType, normalizeLarkTarget } from "./utils.js";
9
+ import { buildMentionedCardContent } from "./mention.js";
10
+ /**
11
+ * Send a text message to Lark/Feishu.
12
+ *
13
+ * @param params - Account, recipient, message content, and optional reply/mentions
14
+ * @returns Send result with messageId and chatId
15
+ */
16
+ export async function sendMessageLark(params) {
17
+ const { account, to, text, replyToMessageId, mentions } = params;
18
+ const client = createLarkClient(account);
19
+ const receiveId = normalizeLarkTarget(to);
20
+ if (!receiveId) {
21
+ throw new Error(`Invalid Lark target: ${to}`);
22
+ }
23
+ const receiveIdType = inferReceiveIdType(receiveId);
24
+ // Build message content (with @mention support)
25
+ let messageText = text ?? "";
26
+ if (mentions && mentions.length > 0) {
27
+ // For text messages, mentions use a special format
28
+ // This is a simplified version - full mention support requires more complex formatting
29
+ messageText = text; // TODO: Implement proper mention formatting for text messages
30
+ }
31
+ const content = JSON.stringify({ text: messageText });
32
+ if (replyToMessageId) {
33
+ const response = await client.im.message.reply({
34
+ path: { message_id: replyToMessageId },
35
+ data: {
36
+ content,
37
+ msg_type: "text",
38
+ },
39
+ });
40
+ if (response.code !== 0) {
41
+ throw new Error(`Lark reply failed: ${response.msg || `code ${response.code}`}`);
42
+ }
43
+ return {
44
+ messageId: response.data?.message_id ?? "unknown",
45
+ chatId: receiveId,
46
+ };
47
+ }
48
+ const response = await client.im.message.create({
49
+ params: { receive_id_type: receiveIdType },
50
+ data: {
51
+ receive_id: receiveId,
52
+ content,
53
+ msg_type: "text",
54
+ },
55
+ });
56
+ if (response.code !== 0) {
57
+ throw new Error(`Lark send failed: ${response.msg || `code ${response.code}`}`);
58
+ }
59
+ return {
60
+ messageId: response.data?.message_id ?? "unknown",
61
+ chatId: receiveId,
62
+ };
63
+ }
64
+ /**
65
+ * Send an interactive card message to Lark/Feishu.
66
+ *
67
+ * @param params - Account, recipient, card content, and optional reply
68
+ * @returns Send result with messageId and chatId
69
+ */
70
+ export async function sendCardLark(params) {
71
+ const { account, to, card, replyToMessageId } = params;
72
+ const client = createLarkClient(account);
73
+ const receiveId = normalizeLarkTarget(to);
74
+ if (!receiveId) {
75
+ throw new Error(`Invalid Lark target: ${to}`);
76
+ }
77
+ const receiveIdType = inferReceiveIdType(receiveId);
78
+ const content = JSON.stringify(card);
79
+ if (replyToMessageId) {
80
+ const response = await client.im.message.reply({
81
+ path: { message_id: replyToMessageId },
82
+ data: {
83
+ content,
84
+ msg_type: "interactive",
85
+ },
86
+ });
87
+ if (response.code !== 0) {
88
+ throw new Error(`Lark card reply failed: ${response.msg || `code ${response.code}`}`);
89
+ }
90
+ return {
91
+ messageId: response.data?.message_id ?? "unknown",
92
+ chatId: receiveId,
93
+ };
94
+ }
95
+ const response = await client.im.message.create({
96
+ params: { receive_id_type: receiveIdType },
97
+ data: {
98
+ receive_id: receiveId,
99
+ content,
100
+ msg_type: "interactive",
101
+ },
102
+ });
103
+ if (response.code !== 0) {
104
+ throw new Error(`Lark card send failed: ${response.msg || `code ${response.code}`}`);
105
+ }
106
+ return {
107
+ messageId: response.data?.message_id ?? "unknown",
108
+ chatId: receiveId,
109
+ };
110
+ }
111
+ /**
112
+ * Update an existing card message.
113
+ *
114
+ * @param params - Account, messageId, and new card content
115
+ */
116
+ export async function updateCardLark(params) {
117
+ const { account, messageId, card } = params;
118
+ const client = createLarkClient(account);
119
+ const content = JSON.stringify(card);
120
+ const response = await client.im.message.patch({
121
+ path: { message_id: messageId },
122
+ data: { content },
123
+ });
124
+ if (response.code !== 0) {
125
+ throw new Error(`Lark card update failed: ${response.msg || `code ${response.code}`}`);
126
+ }
127
+ }
128
+ /**
129
+ * Build a Lark/Feishu interactive card with markdown content.
130
+ *
131
+ * Cards render markdown properly (code blocks, tables, links, etc.)
132
+ *
133
+ * @param text - Markdown content to display in the card
134
+ * @returns Card object for Lark API
135
+ */
136
+ export function buildMarkdownCard(text) {
137
+ return {
138
+ config: {
139
+ wide_screen_mode: true,
140
+ },
141
+ elements: [
142
+ {
143
+ tag: "markdown",
144
+ content: text,
145
+ },
146
+ ],
147
+ };
148
+ }
149
+ /**
150
+ * Send a message as a markdown card (interactive message).
151
+ *
152
+ * This renders markdown properly in Lark/Feishu (code blocks, tables, bold/italic, etc.)
153
+ *
154
+ * @param params - Account, recipient, markdown text, and optional reply/mentions
155
+ * @returns Send result with messageId and chatId
156
+ */
157
+ export async function sendMarkdownCardLark(params) {
158
+ const { account, to, text, replyToMessageId, mentions } = params;
159
+ // Build message content (with @mention support)
160
+ let cardText = text;
161
+ if (mentions && mentions.length > 0) {
162
+ cardText = buildMentionedCardContent(mentions, text);
163
+ }
164
+ const card = buildMarkdownCard(cardText);
165
+ return sendCardLark({ account, to, card, replyToMessageId });
166
+ }
167
+ /**
168
+ * Edit an existing text message.
169
+ *
170
+ * Note: Lark/Feishu only allows editing messages within a certain time window.
171
+ *
172
+ * @param params - Account, messageId, and new text content
173
+ */
174
+ export async function editMessageLark(params) {
175
+ const { account, messageId, text } = params;
176
+ const client = createLarkClient(account);
177
+ const messageText = text ?? "";
178
+ const content = JSON.stringify({ text: messageText });
179
+ const response = await client.im.message.update({
180
+ path: { message_id: messageId },
181
+ data: {
182
+ msg_type: "text",
183
+ content,
184
+ },
185
+ });
186
+ if (response.code !== 0) {
187
+ throw new Error(`Lark message edit failed: ${response.msg || `code ${response.code}`}`);
188
+ }
189
+ }
190
+ //# sourceMappingURL=send.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../src/send.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAErE,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAgBzD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAA6B;IACjE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEjE,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAEpD,gDAAgD;IAChD,IAAI,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,mDAAmD;QACnD,uFAAuF;QACvF,WAAW,GAAG,IAAI,CAAC,CAAC,8DAA8D;IACpF,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAEtD,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;YACtC,IAAI,EAAE;gBACJ,OAAO;gBACP,QAAQ,EAAE,MAAM;aACjB;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;YACjD,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE;QAC1C,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,QAAQ,EAAE,MAAM;SACjB;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;QACjD,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AASD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAA0B;IAC3D,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC;IAEvD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAErC,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;YAC7C,IAAI,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;YACtC,IAAI,EAAE;gBACJ,OAAO;gBACP,QAAQ,EAAE,aAAa;aACxB;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QAED,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;YACjD,MAAM,EAAE,SAAS;SAClB,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9C,MAAM,EAAE,EAAE,eAAe,EAAE,aAAa,EAAE;QAC1C,IAAI,EAAE;YACJ,UAAU,EAAE,SAAS;YACrB,OAAO;YACP,QAAQ,EAAE,aAAa;SACxB;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,OAAO;QACL,SAAS,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,IAAI,SAAS;QACjD,MAAM,EAAE,SAAS;KAClB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAIpC;IACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAErC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QAC7C,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE,EAAE,OAAO,EAAE;KAClB,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,OAAO;QACL,MAAM,EAAE;YACN,gBAAgB,EAAE,IAAI;SACvB;QACD,QAAQ,EAAE;YACR;gBACE,GAAG,EAAE,UAAU;gBACf,OAAO,EAAE,IAAI;aACd;SACF;KACF,CAAC;AACJ,CAAC;AAWD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAkC;IAC3E,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEjE,gDAAgD;IAChD,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,QAAQ,GAAG,yBAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAC/D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAIrC;IACC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAE5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAEtD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QAC9C,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE;YACJ,QAAQ,EAAE,MAAM;YAChB,OAAO;SACR;KACF,CAAC,CAAC;IAEH,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,CAAC,GAAG,IAAI,QAAQ,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Lark/Feishu Target Utilities
3
+ *
4
+ * Helper functions for ID detection, normalization, and type inference.
5
+ * Used across the plugin for consistent ID handling.
6
+ */
7
+ export type LarkIdType = "chat_id" | "open_id" | "union_id" | "user_id";
8
+ /**
9
+ * Detect the type of a Lark ID from its format.
10
+ */
11
+ export declare function detectLarkIdType(id: string): LarkIdType | null;
12
+ /**
13
+ * Normalize a Lark target ID by removing prefixes.
14
+ *
15
+ * Handles "chat:", "user:", "open_id:" prefixes.
16
+ */
17
+ export declare function normalizeLarkTarget(raw: string): string | null;
18
+ /**
19
+ * Format a Lark ID with its type prefix for display.
20
+ */
21
+ export declare function formatLarkTarget(id: string, type?: LarkIdType): string;
22
+ /**
23
+ * Infer the receive_id_type parameter for Lark API calls.
24
+ *
25
+ * Lark API requires receive_id_type to specify how to interpret the receive_id.
26
+ * This function detects the type based on the ID prefix.
27
+ */
28
+ export declare function inferReceiveIdType(recipientId: string): "chat_id" | "open_id" | "union_id";
29
+ /**
30
+ * Check if a string looks like a Lark ID.
31
+ */
32
+ export declare function looksLikeLarkId(raw: string): boolean;
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Lark/Feishu Target Utilities
3
+ *
4
+ * Helper functions for ID detection, normalization, and type inference.
5
+ * Used across the plugin for consistent ID handling.
6
+ */
7
+ const CHAT_ID_PREFIX = "oc_";
8
+ const OPEN_ID_PREFIX = "ou_";
9
+ const UNION_ID_PREFIX = "on_";
10
+ const USER_ID_REGEX = /^[a-zA-Z0-9_-]+$/;
11
+ /**
12
+ * Detect the type of a Lark ID from its format.
13
+ */
14
+ export function detectLarkIdType(id) {
15
+ const trimmed = id.trim();
16
+ if (trimmed.startsWith(CHAT_ID_PREFIX))
17
+ return "chat_id";
18
+ if (trimmed.startsWith(OPEN_ID_PREFIX))
19
+ return "open_id";
20
+ if (trimmed.startsWith(UNION_ID_PREFIX))
21
+ return "union_id";
22
+ if (USER_ID_REGEX.test(trimmed))
23
+ return "user_id";
24
+ return null;
25
+ }
26
+ /**
27
+ * Normalize a Lark target ID by removing prefixes.
28
+ *
29
+ * Handles "chat:", "user:", "open_id:" prefixes.
30
+ */
31
+ export function normalizeLarkTarget(raw) {
32
+ const trimmed = raw.trim();
33
+ if (!trimmed)
34
+ return null;
35
+ const lowered = trimmed.toLowerCase();
36
+ if (lowered.startsWith("chat:")) {
37
+ return trimmed.slice("chat:".length).trim() || null;
38
+ }
39
+ if (lowered.startsWith("user:")) {
40
+ return trimmed.slice("user:".length).trim() || null;
41
+ }
42
+ if (lowered.startsWith("open_id:")) {
43
+ return trimmed.slice("open_id:".length).trim() || null;
44
+ }
45
+ return trimmed;
46
+ }
47
+ /**
48
+ * Format a Lark ID with its type prefix for display.
49
+ */
50
+ export function formatLarkTarget(id, type) {
51
+ const trimmed = id.trim();
52
+ if (type === "chat_id" || trimmed.startsWith(CHAT_ID_PREFIX)) {
53
+ return `chat:${trimmed}`;
54
+ }
55
+ if (type === "open_id" || trimmed.startsWith(OPEN_ID_PREFIX)) {
56
+ return `user:${trimmed}`;
57
+ }
58
+ return trimmed;
59
+ }
60
+ /**
61
+ * Infer the receive_id_type parameter for Lark API calls.
62
+ *
63
+ * Lark API requires receive_id_type to specify how to interpret the receive_id.
64
+ * This function detects the type based on the ID prefix.
65
+ */
66
+ export function inferReceiveIdType(recipientId) {
67
+ if (recipientId.startsWith("oc_")) {
68
+ return "chat_id";
69
+ }
70
+ if (recipientId.startsWith("ou_")) {
71
+ return "open_id";
72
+ }
73
+ if (recipientId.startsWith("on_")) {
74
+ return "union_id";
75
+ }
76
+ // Default to open_id for other formats
77
+ return "open_id";
78
+ }
79
+ /**
80
+ * Check if a string looks like a Lark ID.
81
+ */
82
+ export function looksLikeLarkId(raw) {
83
+ const trimmed = raw.trim();
84
+ if (!trimmed)
85
+ return false;
86
+ if (/^(chat|user|open_id):/i.test(trimmed))
87
+ return true;
88
+ if (trimmed.startsWith(CHAT_ID_PREFIX))
89
+ return true;
90
+ if (trimmed.startsWith(OPEN_ID_PREFIX))
91
+ return true;
92
+ if (trimmed.startsWith(UNION_ID_PREFIX))
93
+ return true;
94
+ return false;
95
+ }
96
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xwang152/claw-lark",
3
- "version": "0.1.25",
3
+ "version": "0.1.27",
4
4
  "type": "module",
5
5
  "description": "Lark/Feishu channel plugin for OpenClaw with WebSocket and Webhook support",
6
6
  "license": "MIT",