@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 +6 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/src/probe.d.ts +24 -0
- package/dist/src/probe.js +52 -0
- package/dist/src/probe.js.map +1 -0
- package/dist/src/send.d.ts +88 -0
- package/dist/src/send.js +190 -0
- package/dist/src/send.js.map +1 -0
- package/dist/src/utils.d.ts +32 -0
- package/dist/src/utils.js +96 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +1 -1
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;
|
|
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>;
|
package/dist/src/send.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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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"}
|