@elizaos/plugin-feishu 2.0.0-alpha

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.
@@ -0,0 +1,288 @@
1
+ import type { Content, EntityPayload, MessagePayload, WorldPayload } from "@elizaos/core";
2
+ /**
3
+ * Feishu event data structure (local type since lark SDK doesn't export it)
4
+ */
5
+ export interface FeishuEventData {
6
+ event?: Record<string, unknown>;
7
+ header?: {
8
+ event_id?: string;
9
+ token?: string;
10
+ create_time?: string;
11
+ event_type?: string;
12
+ tenant_key?: string;
13
+ app_id?: string;
14
+ };
15
+ }
16
+ /**
17
+ * Base content type for Feishu messages (extends Content for compatibility).
18
+ * Note: Do not add FeishuCard directly to this interface as it conflicts with Content's index signature.
19
+ */
20
+ export interface FeishuContent extends Content {
21
+ /** Image key for image messages */
22
+ feishuImageKey?: string;
23
+ /** File key for file messages */
24
+ feishuFileKey?: string;
25
+ }
26
+ /**
27
+ * Internal type for Feishu-specific content with card support (not exported to Content).
28
+ * This type is used internally for message sending/receiving.
29
+ */
30
+ export interface FeishuMessageContent {
31
+ text?: string;
32
+ /** Interactive card content */
33
+ card?: FeishuCard;
34
+ /** Image key for image messages */
35
+ imageKey?: string;
36
+ /** File key for file messages */
37
+ fileKey?: string;
38
+ }
39
+ /**
40
+ * Helper type for accessing Feishu-specific card content (internal use)
41
+ */
42
+ export type FeishuCardContent = {
43
+ card?: FeishuCard;
44
+ imageKey?: string;
45
+ fileKey?: string;
46
+ };
47
+ /**
48
+ * Feishu interactive card structure.
49
+ */
50
+ export interface FeishuCard {
51
+ /** Card configuration */
52
+ config?: {
53
+ wideScreenMode?: boolean;
54
+ enableForward?: boolean;
55
+ };
56
+ /** Card header */
57
+ header?: {
58
+ title?: {
59
+ tag: string;
60
+ content: string;
61
+ };
62
+ template?: string;
63
+ };
64
+ /** Card elements */
65
+ elements?: FeishuCardElement[];
66
+ }
67
+ /**
68
+ * Card element types.
69
+ */
70
+ export type FeishuCardElement = {
71
+ tag: "div";
72
+ text: {
73
+ tag: string;
74
+ content: string;
75
+ };
76
+ } | {
77
+ tag: "action";
78
+ actions: FeishuCardAction[];
79
+ } | {
80
+ tag: "hr";
81
+ } | {
82
+ tag: "note";
83
+ elements: {
84
+ tag: string;
85
+ content: string;
86
+ }[];
87
+ };
88
+ /**
89
+ * Card action types.
90
+ */
91
+ export interface FeishuCardAction {
92
+ tag: "button";
93
+ text: {
94
+ tag: string;
95
+ content: string;
96
+ };
97
+ type?: "default" | "primary" | "danger";
98
+ url?: string;
99
+ value?: Record<string, string>;
100
+ }
101
+ /**
102
+ * Event types emitted by the Feishu plugin.
103
+ */
104
+ export declare enum FeishuEventTypes {
105
+ WORLD_JOINED = "FEISHU_WORLD_JOINED",
106
+ WORLD_CONNECTED = "FEISHU_WORLD_CONNECTED",
107
+ WORLD_LEFT = "FEISHU_WORLD_LEFT",
108
+ ENTITY_JOINED = "FEISHU_ENTITY_JOINED",
109
+ ENTITY_LEFT = "FEISHU_ENTITY_LEFT",
110
+ ENTITY_UPDATED = "FEISHU_ENTITY_UPDATED",
111
+ MESSAGE_RECEIVED = "FEISHU_MESSAGE_RECEIVED",
112
+ MESSAGE_SENT = "FEISHU_MESSAGE_SENT",
113
+ REACTION_RECEIVED = "FEISHU_REACTION_RECEIVED",
114
+ INTERACTION_RECEIVED = "FEISHU_INTERACTION_RECEIVED",
115
+ SLASH_START = "FEISHU_SLASH_START"
116
+ }
117
+ /**
118
+ * Map of event types to their payload types.
119
+ */
120
+ export interface FeishuEventPayloadMap {
121
+ [FeishuEventTypes.MESSAGE_RECEIVED]: FeishuMessageReceivedPayload;
122
+ [FeishuEventTypes.MESSAGE_SENT]: FeishuMessageSentPayload;
123
+ [FeishuEventTypes.REACTION_RECEIVED]: FeishuReactionReceivedPayload;
124
+ [FeishuEventTypes.WORLD_JOINED]: FeishuWorldPayload;
125
+ [FeishuEventTypes.WORLD_CONNECTED]: FeishuWorldPayload;
126
+ [FeishuEventTypes.WORLD_LEFT]: FeishuWorldPayload;
127
+ [FeishuEventTypes.SLASH_START]: {
128
+ chatId: string;
129
+ };
130
+ [FeishuEventTypes.ENTITY_JOINED]: FeishuEntityPayload;
131
+ [FeishuEventTypes.ENTITY_LEFT]: FeishuEntityPayload;
132
+ [FeishuEventTypes.ENTITY_UPDATED]: FeishuEntityPayload;
133
+ [FeishuEventTypes.INTERACTION_RECEIVED]: FeishuInteractionPayload;
134
+ }
135
+ /**
136
+ * Feishu chat types.
137
+ */
138
+ export declare enum FeishuChatType {
139
+ /** Private one-on-one chat */
140
+ P2P = "p2p",
141
+ /** Group chat */
142
+ GROUP = "group"
143
+ }
144
+ /**
145
+ * Feishu user information.
146
+ */
147
+ export interface FeishuUser {
148
+ /** Open ID (user identifier) */
149
+ openId: string;
150
+ /** Union ID (cross-app identifier) */
151
+ unionId?: string;
152
+ /** User ID (tenant-level identifier) */
153
+ userId?: string;
154
+ /** User's display name */
155
+ name?: string;
156
+ /** User's avatar URL */
157
+ avatarUrl?: string;
158
+ /** Whether the user is a bot */
159
+ isBot?: boolean;
160
+ }
161
+ /**
162
+ * Feishu chat information.
163
+ */
164
+ export interface FeishuChat {
165
+ /** Chat ID */
166
+ chatId: string;
167
+ /** Chat type */
168
+ chatType: FeishuChatType;
169
+ /** Chat name/title */
170
+ name?: string;
171
+ /** Chat owner's open ID */
172
+ ownerOpenId?: string;
173
+ /** Chat description */
174
+ description?: string;
175
+ /** Tenant key */
176
+ tenantKey?: string;
177
+ }
178
+ /**
179
+ * Feishu message information.
180
+ */
181
+ export interface FeishuMessage {
182
+ /** Message ID */
183
+ messageId: string;
184
+ /** Root message ID (for threads) */
185
+ rootId?: string;
186
+ /** Parent message ID (for replies) */
187
+ parentId?: string;
188
+ /** Message type */
189
+ msgType: string;
190
+ /** Message content (JSON string) */
191
+ content: string;
192
+ /** Create time (Unix timestamp in milliseconds) */
193
+ createTime: string;
194
+ /** Update time (Unix timestamp in milliseconds) */
195
+ updateTime?: string;
196
+ /** Whether the message is deleted */
197
+ deleted?: boolean;
198
+ /** Chat ID */
199
+ chatId: string;
200
+ /** Sender information */
201
+ sender: {
202
+ id: string;
203
+ idType: string;
204
+ senderType: string;
205
+ tenantKey?: string;
206
+ };
207
+ /** Mentions in the message */
208
+ mentions?: FeishuMention[];
209
+ }
210
+ /**
211
+ * Mention information in a message.
212
+ */
213
+ export interface FeishuMention {
214
+ /** Mention key in the message */
215
+ key: string;
216
+ /** Mentioned user's ID */
217
+ id: string;
218
+ /** ID type */
219
+ idType: string;
220
+ /** Mentioned user's name */
221
+ name: string;
222
+ /** Tenant key */
223
+ tenantKey?: string;
224
+ }
225
+ /**
226
+ * Payload for received messages.
227
+ */
228
+ export interface FeishuMessageReceivedPayload extends MessagePayload {
229
+ /** Original Feishu message */
230
+ originalMessage: FeishuMessage;
231
+ /** Chat information */
232
+ chat: FeishuChat;
233
+ /** Sender information */
234
+ sender: FeishuUser;
235
+ }
236
+ /**
237
+ * Payload for sent messages.
238
+ */
239
+ export interface FeishuMessageSentPayload extends MessagePayload {
240
+ /** Message IDs of sent messages */
241
+ messageIds: string[];
242
+ /** Chat ID */
243
+ chatId: string;
244
+ }
245
+ /**
246
+ * Payload for reaction events.
247
+ */
248
+ export interface FeishuReactionReceivedPayload extends FeishuMessageReceivedPayload {
249
+ /** Reaction type/emoji */
250
+ reactionType: string;
251
+ }
252
+ /**
253
+ * Payload for world/chat events.
254
+ */
255
+ export interface FeishuWorldPayload extends WorldPayload {
256
+ /** Chat information */
257
+ chat: FeishuChat;
258
+ /** Bot's open ID */
259
+ botOpenId?: string;
260
+ }
261
+ /**
262
+ * Payload for entity (user) events.
263
+ */
264
+ export interface FeishuEntityPayload extends EntityPayload {
265
+ /** Feishu user information */
266
+ feishuUser: FeishuUser;
267
+ /** Chat where the event occurred */
268
+ chat: FeishuChat;
269
+ }
270
+ /**
271
+ * Payload for interaction events (card actions, etc.).
272
+ */
273
+ export interface FeishuInteractionPayload {
274
+ /** Interaction type */
275
+ type: string;
276
+ /** Action data */
277
+ action: {
278
+ tag: string;
279
+ value?: Record<string, string>;
280
+ };
281
+ /** User who triggered the interaction */
282
+ user: FeishuUser;
283
+ /** Chat where the interaction occurred */
284
+ chat?: FeishuChat;
285
+ /** Token for responding to the interaction */
286
+ token?: string;
287
+ }
288
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@elizaos/plugin-feishu",
3
+ "version": "2.0.0-alpha",
4
+ "type": "module",
5
+ "main": "dist/index.js",
6
+ "module": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ "./package.json": "./package.json",
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ }
15
+ }
16
+ },
17
+ "files": [
18
+ "dist"
19
+ ],
20
+ "dependencies": {
21
+ "@elizaos/core": "workspace:*",
22
+ "@types/node": "^25.0.3",
23
+ "@larksuiteoapi/node-sdk": "^1.40.0",
24
+ "typescript": "^5.9.3"
25
+ },
26
+ "devDependencies": {
27
+ "vitest": "^4.0.0",
28
+ "@biomejs/biome": "^2.3.11"
29
+ },
30
+ "scripts": {
31
+ "build": "bun run build.ts",
32
+ "dev": "bun --hot build.ts",
33
+ "test": "vitest run",
34
+ "test:watch": "vitest",
35
+ "lint": "bunx @biomejs/biome check --write --unsafe .",
36
+ "clean": "rm -rf dist .turbo node_modules .turbo-tsconfig.json tsconfig.tsbuildinfo",
37
+ "format": "bunx @biomejs/biome format --write .",
38
+ "format:check": "bunx @biomejs/biome format .",
39
+ "lint:check": "bunx @biomejs/biome check .",
40
+ "build:ts": "bun run build",
41
+ "typecheck": "tsc --noEmit"
42
+ },
43
+ "publishConfig": {
44
+ "access": "public"
45
+ },
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "git+https://github.com/elizaos/eliza.git"
49
+ },
50
+ "agentConfig": {
51
+ "pluginType": "elizaos:plugin:1.0.0",
52
+ "pluginParameters": {
53
+ "FEISHU_APP_ID": {
54
+ "type": "string",
55
+ "description": "Feishu/Lark application ID (cli_xxx format) for bot authentication.",
56
+ "required": true,
57
+ "sensitive": false
58
+ },
59
+ "FEISHU_APP_SECRET": {
60
+ "type": "string",
61
+ "description": "Feishu/Lark application secret for bot authentication.",
62
+ "required": true,
63
+ "sensitive": true
64
+ },
65
+ "FEISHU_DOMAIN": {
66
+ "type": "string",
67
+ "description": "Domain to use: 'feishu' for China or 'lark' for global.",
68
+ "required": false,
69
+ "sensitive": false
70
+ },
71
+ "FEISHU_ALLOWED_CHATS": {
72
+ "type": "string",
73
+ "description": "JSON-encoded array of chat IDs authorized to interact with the bot.",
74
+ "required": false,
75
+ "sensitive": false
76
+ },
77
+ "FEISHU_TEST_CHAT_ID": {
78
+ "type": "string",
79
+ "description": "Chat ID used by the test suite for validation.",
80
+ "required": false,
81
+ "sensitive": false
82
+ }
83
+ }
84
+ },
85
+ "milaidy": {
86
+ "platforms": [
87
+ "node"
88
+ ],
89
+ "runtime": "node",
90
+ "platformDetails": {
91
+ "node": "ESM build available via exports.import"
92
+ }
93
+ }
94
+ }