botmux 1.4.3 → 1.4.4

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.
Files changed (86) hide show
  1. package/.env.example +5 -0
  2. package/dist/bot-registry.d.ts +31 -0
  3. package/dist/bot-registry.d.ts.map +1 -0
  4. package/dist/bot-registry.js +125 -0
  5. package/dist/bot-registry.js.map +1 -0
  6. package/dist/cli.js +0 -0
  7. package/dist/core/command-handler.d.ts.map +1 -1
  8. package/dist/core/command-handler.js +6 -4
  9. package/dist/core/command-handler.js.map +1 -1
  10. package/dist/core/session-manager.d.ts +4 -3
  11. package/dist/core/session-manager.d.ts.map +1 -1
  12. package/dist/core/session-manager.js +42 -10
  13. package/dist/core/session-manager.js.map +1 -1
  14. package/dist/core/types.d.ts +1 -0
  15. package/dist/core/types.d.ts.map +1 -1
  16. package/dist/core/worker-pool.d.ts +3 -2
  17. package/dist/core/worker-pool.d.ts.map +1 -1
  18. package/dist/core/worker-pool.js +39 -26
  19. package/dist/core/worker-pool.js.map +1 -1
  20. package/dist/daemon.d.ts.map +1 -1
  21. package/dist/daemon.js +83 -61
  22. package/dist/daemon.js.map +1 -1
  23. package/dist/im/lark/card-handler.d.ts.map +1 -1
  24. package/dist/im/lark/card-handler.js +30 -13
  25. package/dist/im/lark/card-handler.js.map +1 -1
  26. package/dist/im/lark/client.d.ts +11 -13
  27. package/dist/im/lark/client.d.ts.map +1 -1
  28. package/dist/im/lark/client.js +23 -45
  29. package/dist/im/lark/client.js.map +1 -1
  30. package/dist/im/lark/event-dispatcher.d.ts +10 -10
  31. package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
  32. package/dist/im/lark/event-dispatcher.js +36 -33
  33. package/dist/im/lark/event-dispatcher.js.map +1 -1
  34. package/dist/server.d.ts.map +1 -1
  35. package/dist/server.js +10 -1
  36. package/dist/server.js.map +1 -1
  37. package/dist/tools/get-thread-messages.d.ts.map +1 -1
  38. package/dist/tools/get-thread-messages.js +2 -1
  39. package/dist/tools/get-thread-messages.js.map +1 -1
  40. package/dist/tools/react-to-message.d.ts.map +1 -1
  41. package/dist/tools/react-to-message.js +3 -2
  42. package/dist/tools/react-to-message.js.map +1 -1
  43. package/dist/tools/send-to-thread.js +1 -1
  44. package/dist/tools/send-to-thread.js.map +1 -1
  45. package/dist/types.d.ts +3 -0
  46. package/dist/types.d.ts.map +1 -1
  47. package/dist/types.js.map +1 -1
  48. package/dist/worker.js +7 -1
  49. package/dist/worker.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/scheduler.d.ts +0 -38
  52. package/dist/scheduler.d.ts.map +0 -1
  53. package/dist/scheduler.js +0 -221
  54. package/dist/scheduler.js.map +0 -1
  55. package/dist/services/lark-client.d.ts +0 -22
  56. package/dist/services/lark-client.d.ts.map +0 -1
  57. package/dist/services/lark-client.js +0 -238
  58. package/dist/services/lark-client.js.map +0 -1
  59. package/dist/services/lark-ws.d.ts +0 -5
  60. package/dist/services/lark-ws.d.ts.map +0 -1
  61. package/dist/services/lark-ws.js +0 -79
  62. package/dist/services/lark-ws.js.map +0 -1
  63. package/dist/services/message-router.d.ts +0 -8
  64. package/dist/services/message-router.d.ts.map +0 -1
  65. package/dist/services/message-router.js +0 -73
  66. package/dist/services/message-router.js.map +0 -1
  67. package/dist/tools/close-session.d.ts +0 -22
  68. package/dist/tools/close-session.d.ts.map +0 -1
  69. package/dist/tools/close-session.js +0 -38
  70. package/dist/tools/close-session.js.map +0 -1
  71. package/dist/tools/create-session.d.ts +0 -28
  72. package/dist/tools/create-session.d.ts.map +0 -1
  73. package/dist/tools/create-session.js +0 -40
  74. package/dist/tools/create-session.js.map +0 -1
  75. package/dist/tools/wait-for-reply.d.ts +0 -17
  76. package/dist/tools/wait-for-reply.d.ts.map +0 -1
  77. package/dist/tools/wait-for-reply.js +0 -65
  78. package/dist/tools/wait-for-reply.js.map +0 -1
  79. package/dist/utils/card-builder.d.ts +0 -16
  80. package/dist/utils/card-builder.d.ts.map +0 -1
  81. package/dist/utils/card-builder.js +0 -183
  82. package/dist/utils/card-builder.js.map +0 -1
  83. package/dist/utils/message-parser.d.ts +0 -45
  84. package/dist/utils/message-parser.d.ts.map +0 -1
  85. package/dist/utils/message-parser.js +0 -132
  86. package/dist/utils/message-parser.js.map +0 -1
@@ -4,6 +4,7 @@
4
4
  * Extracted from daemon.ts for modularity.
5
5
  */
6
6
  import { config } from '../../config.js';
7
+ import { getBot, getAllBots } from '../../bot-registry.js';
7
8
  import { sendUserMessage, updateMessage } from './client.js';
8
9
  import { buildSessionCard, buildStreamingCard, getCliDisplayName } from './card-builder.js';
9
10
  import { logger } from '../../utils/logger.js';
@@ -21,12 +22,23 @@ export async function handleCardAction(data, deps) {
21
22
  const value = action?.value;
22
23
  // Check ALLOWED_USERS for sensitive actions
23
24
  const operatorOpenId = data?.operator?.open_id;
24
- const allowedUsers = config.daemon.allowedUsers;
25
25
  const isSensitive = value?.action && ['restart', 'close', 'skip_repo', 'get_write_link'].includes(value.action);
26
- if (isSensitive && allowedUsers.length > 0) {
27
- if (!operatorOpenId || !allowedUsers.includes(operatorOpenId)) {
28
- logger.info(`Card action "${value.action}" blocked for non-allowed user: ${operatorOpenId}`);
29
- return;
26
+ if (isSensitive) {
27
+ const rootId = value?.root_id;
28
+ const ds = rootId ? activeSessions.get(rootId) : undefined;
29
+ let allowedUsers;
30
+ if (ds) {
31
+ allowedUsers = getBot(ds.larkAppId).resolvedAllowedUsers;
32
+ }
33
+ else {
34
+ // No session yet — merge allowedUsers from all bots
35
+ allowedUsers = getAllBots().flatMap(b => b.resolvedAllowedUsers);
36
+ }
37
+ if (allowedUsers.length > 0) {
38
+ if (!operatorOpenId || !allowedUsers.includes(operatorOpenId)) {
39
+ logger.info(`Card action "${value.action}" blocked for non-allowed user: ${operatorOpenId}`);
40
+ return;
41
+ }
30
42
  }
31
43
  }
32
44
  // Handle session card button actions (restart/close)
@@ -34,18 +46,19 @@ export async function handleCardAction(data, deps) {
34
46
  const { action: actionType, root_id: rootId } = value;
35
47
  const ds = activeSessions.get(rootId);
36
48
  if (actionType === 'restart' && ds) {
49
+ const botCfg = getBot(ds.larkAppId).config;
37
50
  if (ds.worker) {
38
51
  // Worker alive — tell it to restart Claude
39
52
  logger.info(`[${tag(ds)}] Restart via card button`);
40
53
  ds.worker.send({ type: 'restart' });
41
- const cliName = getCliDisplayName(config.daemon.cliId);
54
+ const cliName = getCliDisplayName(botCfg.cliId);
42
55
  await sessionReply(rootId, `🔄 已重启 ${cliName}`);
43
56
  }
44
57
  else {
45
58
  // Worker gone (e.g. after daemon restart) — re-fork
46
59
  logger.info(`[${tag(ds)}] Re-forking worker via card button`);
47
60
  forkWorker(ds, '', ds.hasHistory);
48
- const cliName = getCliDisplayName(config.daemon.cliId);
61
+ const cliName = getCliDisplayName(botCfg.cliId);
49
62
  await sessionReply(rootId, `🔄 已重新启动 ${cliName}`);
50
63
  // DM card will be sent by the ready handler when worker starts
51
64
  }
@@ -58,10 +71,11 @@ export async function handleCardAction(data, deps) {
58
71
  logger.info(`[${tag(ds)}] Closed via card button`);
59
72
  }
60
73
  if (actionType === 'get_write_link' && ds && operatorOpenId) {
74
+ const botCfg = getBot(ds.larkAppId).config;
61
75
  if (ds.workerPort && ds.workerToken) {
62
76
  const writeUrl = `http://${config.web.externalHost}:${ds.workerPort}?token=${ds.workerToken}`;
63
- const dmCardJson = buildSessionCard(ds.session.sessionId, ds.session.rootMessageId, writeUrl, ds.session.title || 'Claude Code', config.daemon.cliId);
64
- sendUserMessage(operatorOpenId, dmCardJson, 'interactive').catch(err => logger.warn(`[${tag(ds)}] Failed to DM write link: ${err}`));
77
+ const dmCardJson = buildSessionCard(ds.session.sessionId, ds.session.rootMessageId, writeUrl, ds.session.title || 'Claude Code', botCfg.cliId);
78
+ sendUserMessage(ds.larkAppId, operatorOpenId, dmCardJson, 'interactive').catch(err => logger.warn(`[${tag(ds)}] Failed to DM write link: ${err}`));
65
79
  logger.info(`[${tag(ds)}] Sent write link via DM to ${operatorOpenId}`);
66
80
  }
67
81
  else {
@@ -69,20 +83,22 @@ export async function handleCardAction(data, deps) {
69
83
  }
70
84
  }
71
85
  if (actionType === 'toggle_stream' && ds) {
86
+ const botCfg = getBot(ds.larkAppId).config;
72
87
  ds.streamExpanded = !ds.streamExpanded;
73
88
  // Immediately rebuild and PATCH the current streaming card
74
89
  if (ds.streamCardId && ds.workerPort) {
75
90
  const readUrl = `http://${config.web.externalHost}:${ds.workerPort}`;
76
91
  const turnTitle = ds.currentTurnTitle || ds.session.title || 'Claude Code';
77
- const cardJson = buildStreamingCard(ds.session.sessionId, ds.session.rootMessageId, readUrl, turnTitle, ds.lastScreenContent || '', ds.lastScreenStatus || 'working', config.daemon.cliId, ds.streamExpanded);
78
- updateMessage(ds.streamCardId, cardJson).catch(err => logger.warn(`[${tag(ds)}] Failed to update card on toggle: ${err}`));
92
+ const cardJson = buildStreamingCard(ds.session.sessionId, ds.session.rootMessageId, readUrl, turnTitle, ds.lastScreenContent || '', ds.lastScreenStatus || 'working', botCfg.cliId, ds.streamExpanded);
93
+ updateMessage(ds.larkAppId, ds.streamCardId, cardJson).catch(err => logger.warn(`[${tag(ds)}] Failed to update card on toggle: ${err}`));
79
94
  }
80
95
  logger.info(`[${tag(ds)}] Stream display toggled: ${ds.streamExpanded ? 'expanded' : 'collapsed'}`);
81
96
  }
82
97
  if (actionType === 'skip_repo' && ds && ds.pendingRepo) {
98
+ const botCfg = getBot(ds.larkAppId).config;
83
99
  // Skip repo selection — spawn Claude with default working dir
84
100
  ds.pendingRepo = false;
85
- const prompt = buildNewTopicPrompt(ds.pendingPrompt ?? '', ds.session.sessionId, ds.pendingAttachments);
101
+ const prompt = buildNewTopicPrompt(ds.pendingPrompt ?? '', ds.session.sessionId, botCfg.cliId, botCfg.cliPathOverride, ds.pendingAttachments);
86
102
  ds.pendingPrompt = undefined;
87
103
  ds.pendingAttachments = undefined;
88
104
  forkWorker(ds, prompt);
@@ -118,9 +134,10 @@ export async function handleCardAction(data, deps) {
118
134
  targetDs.session.workingDir = selectedPath;
119
135
  sessionStore.updateSession(targetDs.session);
120
136
  if (targetDs.pendingRepo) {
137
+ const botCfg = getBot(targetDs.larkAppId).config;
121
138
  // First-time repo selection — now spawn Claude with the original prompt
122
139
  targetDs.pendingRepo = false;
123
- const prompt = buildNewTopicPrompt(targetDs.pendingPrompt ?? '', targetDs.session.sessionId, targetDs.pendingAttachments);
140
+ const prompt = buildNewTopicPrompt(targetDs.pendingPrompt ?? '', targetDs.session.sessionId, botCfg.cliId, botCfg.cliPathOverride, targetDs.pendingAttachments);
124
141
  targetDs.pendingPrompt = undefined;
125
142
  targetDs.pendingAttachments = undefined;
126
143
  forkWorker(targetDs, prompt);
@@ -1 +1 @@
1
- {"version":3,"file":"card-handler.js","sourceRoot":"","sources":["../../../src/im/lark/card-handler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"card-handler.js","sourceRoot":"","sources":["../../../src/im/lark/card-handler.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC5F,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,YAAY,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAa1F,6EAA6E;AAE7E,SAAS,GAAG,CAAC,EAAiB;IAC5B,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,6EAA6E;AAE7E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAS,EAAE,IAAqB;IACrE,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC;IAE5B,4CAA4C;IAC5C,MAAM,cAAc,GAAuB,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;IACnE,MAAM,WAAW,GAAG,KAAK,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChH,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,IAAI,YAAsB,CAAC;QAC3B,IAAI,EAAE,EAAE,CAAC;YACP,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC;QAC3D,CAAC;aAAM,CAAC;YACN,oDAAoD;YACpD,YAAY,GAAG,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;gBAC9D,MAAM,CAAC,IAAI,CAAC,gBAAgB,KAAK,CAAC,MAAM,mCAAmC,cAAc,EAAE,CAAC,CAAC;gBAC7F,OAAO;YACT,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;QACtD,MAAM,EAAE,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEtC,IAAI,UAAU,KAAK,SAAS,IAAI,EAAE,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC3C,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;gBACd,2CAA2C;gBAC3C,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,2BAA2B,CAAC,CAAC;gBACpD,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAoB,CAAC,CAAC;gBACtD,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,MAAM,YAAY,CAAC,MAAM,EAAE,UAAU,OAAO,EAAE,CAAC,CAAC;YAClD,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,qCAAqC,CAAC,CAAC;gBAC9D,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChD,MAAM,YAAY,CAAC,MAAM,EAAE,YAAY,OAAO,EAAE,CAAC,CAAC;gBAClD,+DAA+D;YACjE,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,OAAO,IAAI,EAAE,EAAE,CAAC;YACjC,UAAU,CAAC,EAAE,CAAC,CAAC;YACf,YAAY,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChD,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9B,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,0BAA0B,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,UAAU,KAAK,gBAAgB,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;YAC5D,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC3C,IAAI,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpC,MAAM,QAAQ,GAAG,UAAU,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,UAAU,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC9F,MAAM,UAAU,GAAG,gBAAgB,CACjC,EAAE,CAAC,OAAO,CAAC,SAAS,EACpB,EAAE,CAAC,OAAO,CAAC,aAAa,EACxB,QAAQ,EACR,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,aAAa,EACjC,MAAM,CAAC,KAAK,CACb,CAAC;gBACF,eAAe,CAAC,EAAE,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACnF,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,8BAA8B,GAAG,EAAE,CAAC,CAC5D,CAAC;gBACF,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,+BAA+B,cAAc,EAAE,CAAC,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;QAED,IAAI,UAAU,KAAK,eAAe,IAAI,EAAE,EAAE,CAAC;YACzC,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC3C,EAAE,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC;YACvC,2DAA2D;YAC3D,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAG,UAAU,MAAM,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;gBACrE,MAAM,SAAS,GAAG,EAAE,CAAC,gBAAgB,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,IAAI,aAAa,CAAC;gBAC3E,MAAM,QAAQ,GAAG,kBAAkB,CACjC,EAAE,CAAC,OAAO,CAAC,SAAS,EACpB,EAAE,CAAC,OAAO,CAAC,aAAa,EACxB,OAAO,EACP,SAAS,EACT,EAAE,CAAC,iBAAiB,IAAI,EAAE,EAC1B,EAAE,CAAC,gBAAgB,IAAI,SAAS,EAChC,MAAM,CAAC,KAAK,EACZ,EAAE,CAAC,cAAc,CAClB,CAAC;gBACF,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CACjE,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,sCAAsC,GAAG,EAAE,CAAC,CACpE,CAAC;YACJ,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,6BAA6B,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,IAAI,UAAU,KAAK,WAAW,IAAI,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;YAC3C,8DAA8D;YAC9D,EAAE,CAAC,WAAW,GAAG,KAAK,CAAC;YACvB,MAAM,MAAM,GAAG,mBAAmB,CAChC,EAAE,CAAC,aAAa,IAAI,EAAE,EACtB,EAAE,CAAC,OAAO,CAAC,SAAS,EACpB,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,eAAe,EACtB,EAAE,CAAC,kBAAkB,CACtB,CAAC;YACF,EAAE,CAAC,aAAa,GAAG,SAAS,CAAC;YAC7B,EAAE,CAAC,kBAAkB,GAAG,SAAS,CAAC;YAClC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;YACrC,MAAM,YAAY,CAAC,MAAM,EAAE,mBAAmB,GAAG,GAAG,CAAC,CAAC;YACtD,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,OAAO;IACT,CAAC;IAED,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC;IAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC;IACtC,MAAM,CAAC,IAAI,CAAC,+BAA+B,YAAY,cAAc,MAAM,GAAG,CAAC,CAAC;IAEhF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,iDAAiD,MAAM,EAAE,CAAC,CAAC;QACvE,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC;IAEnF,QAAQ,CAAC,UAAU,GAAG,YAAY,CAAC;IACnC,QAAQ,CAAC,OAAO,CAAC,UAAU,GAAG,YAAY,CAAC;IAC3C,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,QAAQ,CAAC,WAAW,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QACjD,wEAAwE;QACxE,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,mBAAmB,CAChC,QAAQ,CAAC,aAAa,IAAI,EAAE,EAC5B,QAAQ,CAAC,OAAO,CAAC,SAAS,EAC1B,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,eAAe,EACtB,QAAQ,CAAC,kBAAkB,CAC5B,CAAC;QACF,QAAQ,CAAC,aAAa,GAAG,SAAS,CAAC;QACnC,QAAQ,CAAC,kBAAkB,GAAG,SAAS,CAAC;QACxC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,oBAAoB,YAAY,mBAAmB,CAAC,CAAC;IACpF,CAAC;SAAM,CAAC;QACN,2DAA2D;QAC3D,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrB,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpG,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAC3B,QAAQ,CAAC,UAAU,GAAG,KAAK,CAAC;QAC5B,UAAU,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;QAChC,MAAM,YAAY,CAAC,MAAM,EAAE,WAAW,WAAW,kBAAkB,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,sBAAsB,YAAY,uBAAuB,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC"}
@@ -1,22 +1,20 @@
1
- import * as Lark from '@larksuiteoapi/node-sdk';
2
- export declare function getLarkClient(): Lark.Client;
3
- export declare function sendMessage(chatId: string, content: string, msgType?: string): Promise<string>;
4
- export declare function replyMessage(messageId: string, content: string, msgType?: string, replyInThread?: boolean): Promise<string>;
5
- export declare function addReaction(messageId: string, emojiType: string): Promise<string>;
6
- export declare function removeReaction(messageId: string, reactionId: string): Promise<void>;
7
- export declare function sendUserMessage(openId: string, content: string, msgType?: string): Promise<string>;
8
- export declare function getChatInfo(chatId: string): Promise<{
1
+ export declare function sendMessage(larkAppId: string, chatId: string, content: string, msgType?: string): Promise<string>;
2
+ export declare function replyMessage(larkAppId: string, messageId: string, content: string, msgType?: string, replyInThread?: boolean): Promise<string>;
3
+ export declare function addReaction(larkAppId: string, messageId: string, emojiType: string): Promise<string>;
4
+ export declare function removeReaction(larkAppId: string, messageId: string, reactionId: string): Promise<void>;
5
+ export declare function sendUserMessage(larkAppId: string, openId: string, content: string, msgType?: string): Promise<string>;
6
+ export declare function getChatInfo(larkAppId: string, chatId: string): Promise<{
9
7
  userCount: number;
10
8
  }>;
11
- export declare function updateMessage(messageId: string, cardJson: string): Promise<void>;
12
- export declare function getMessageDetail(messageId: string): Promise<any>;
13
- export declare function downloadMessageResource(messageId: string, fileKey: string, type: 'image' | 'file', savePath: string): Promise<void>;
9
+ export declare function updateMessage(larkAppId: string, messageId: string, cardJson: string): Promise<void>;
10
+ export declare function getMessageDetail(larkAppId: string, messageId: string): Promise<any>;
11
+ export declare function downloadMessageResource(larkAppId: string, messageId: string, fileKey: string, type: 'image' | 'file', savePath: string): Promise<void>;
14
12
  /**
15
13
  * Resolve emails to Lark open_ids via batch user lookup.
16
14
  * Accepts mixed input: items starting with "ou_" are kept as-is; everything else
17
15
  * must be a full email address (e.g. "alice@example.com") and is looked up.
18
16
  * Returns an array of open_ids (unresolvable entries are dropped with a warning).
19
17
  */
20
- export declare function resolveAllowedUsers(raw: string[]): Promise<string[]>;
21
- export declare function listThreadMessages(chatId: string, rootMessageId: string, pageSize?: number): Promise<any[]>;
18
+ export declare function resolveAllowedUsers(larkAppId: string, raw: string[]): Promise<string[]>;
19
+ export declare function listThreadMessages(larkAppId: string, chatId: string, rootMessageId: string, pageSize?: number): Promise<any[]>;
22
20
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAQhD,wBAAgB,aAAa,IAAI,IAAI,CAAC,MAAM,CAmB3C;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB5G;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBhJ;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYvF;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBhH;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhF;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAStF;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAStE;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BzI;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmC1E;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuCrH"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqB/H;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,EAAE,aAAa,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnK;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY1G;AAED,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS5G;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,MAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBnI;AAED,wBAAsB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAUnG;AAED,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzG;AAED,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CASzF;AAED,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B5J;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAmC7F;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAuCxI"}
@@ -1,31 +1,9 @@
1
- import * as Lark from '@larksuiteoapi/node-sdk';
2
1
  import { writeFileSync, mkdirSync, existsSync } from 'node:fs';
3
2
  import { dirname } from 'node:path';
4
- import { config } from '../../config.js';
3
+ import { getBotClient } from '../../bot-registry.js';
5
4
  import { logger } from '../../utils/logger.js';
6
- let client;
7
- export function getLarkClient() {
8
- if (!client) {
9
- // Provide a custom logger that writes to stderr.
10
- // The default Lark SDK logger uses console.log (stdout), which corrupts
11
- // MCP stdio protocol when the server is spawned as an MCP child process.
12
- const stderrLogger = {
13
- error: (...msg) => { process.stderr.write(`[lark:error] ${msg.map(m => JSON.stringify(m)).join(' ')}\n`); },
14
- warn: (...msg) => { process.stderr.write(`[lark:warn] ${msg.map(m => JSON.stringify(m)).join(' ')}\n`); },
15
- info: (...msg) => { process.stderr.write(`[lark:info] ${msg.map(m => JSON.stringify(m)).join(' ')}\n`); },
16
- debug: (...msg) => { process.stderr.write(`[lark:debug] ${msg.map(m => JSON.stringify(m)).join(' ')}\n`); },
17
- trace: (...msg) => { process.stderr.write(`[lark:trace] ${msg.map(m => JSON.stringify(m)).join(' ')}\n`); },
18
- };
19
- client = new Lark.Client({
20
- appId: config.lark.appId,
21
- appSecret: config.lark.appSecret,
22
- logger: stderrLogger,
23
- });
24
- }
25
- return client;
26
- }
27
- export async function sendMessage(chatId, content, msgType = 'text') {
28
- const c = getLarkClient();
5
+ export async function sendMessage(larkAppId, chatId, content, msgType = 'text') {
6
+ const c = getBotClient(larkAppId);
29
7
  const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
30
8
  const res = await c.im.v1.message.create({
31
9
  params: { receive_id_type: 'chat_id' },
@@ -44,8 +22,8 @@ export async function sendMessage(chatId, content, msgType = 'text') {
44
22
  logger.info(`Sent message ${messageId} to chat ${chatId}`);
45
23
  return messageId;
46
24
  }
47
- export async function replyMessage(messageId, content, msgType = 'text', replyInThread = false) {
48
- const c = getLarkClient();
25
+ export async function replyMessage(larkAppId, messageId, content, msgType = 'text', replyInThread = false) {
26
+ const c = getBotClient(larkAppId);
49
27
  const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
50
28
  const res = await c.im.v1.message.reply({
51
29
  path: { message_id: messageId },
@@ -64,8 +42,8 @@ export async function replyMessage(messageId, content, msgType = 'text', replyIn
64
42
  logger.info(`Replied ${replyId} to message ${messageId}${replyInThread ? ' (in thread)' : ''}`);
65
43
  return replyId;
66
44
  }
67
- export async function addReaction(messageId, emojiType) {
68
- const c = getLarkClient();
45
+ export async function addReaction(larkAppId, messageId, emojiType) {
46
+ const c = getBotClient(larkAppId);
69
47
  const res = await c.im.v1.messageReaction.create({
70
48
  path: { message_id: messageId },
71
49
  data: { reaction_type: { emoji_type: emojiType } },
@@ -77,8 +55,8 @@ export async function addReaction(messageId, emojiType) {
77
55
  logger.info(`Added reaction ${emojiType} (${reactionId}) to message ${messageId}`);
78
56
  return reactionId ?? '';
79
57
  }
80
- export async function removeReaction(messageId, reactionId) {
81
- const c = getLarkClient();
58
+ export async function removeReaction(larkAppId, messageId, reactionId) {
59
+ const c = getBotClient(larkAppId);
82
60
  const res = await c.im.v1.messageReaction.delete({
83
61
  path: { message_id: messageId, reaction_id: reactionId },
84
62
  });
@@ -87,8 +65,8 @@ export async function removeReaction(messageId, reactionId) {
87
65
  }
88
66
  logger.info(`Removed reaction ${reactionId} from message ${messageId}`);
89
67
  }
90
- export async function sendUserMessage(openId, content, msgType = 'text') {
91
- const c = getLarkClient();
68
+ export async function sendUserMessage(larkAppId, openId, content, msgType = 'text') {
69
+ const c = getBotClient(larkAppId);
92
70
  const body = msgType === 'text' ? JSON.stringify({ text: content }) : content;
93
71
  const res = await c.im.v1.message.create({
94
72
  params: { receive_id_type: 'open_id' },
@@ -107,8 +85,8 @@ export async function sendUserMessage(openId, content, msgType = 'text') {
107
85
  logger.info(`Sent DM ${messageId} to user ${openId}`);
108
86
  return messageId;
109
87
  }
110
- export async function getChatInfo(chatId) {
111
- const c = getLarkClient();
88
+ export async function getChatInfo(larkAppId, chatId) {
89
+ const c = getBotClient(larkAppId);
112
90
  const res = await c.im.v1.chat.get({
113
91
  path: { chat_id: chatId },
114
92
  });
@@ -118,8 +96,8 @@ export async function getChatInfo(chatId) {
118
96
  // user_count excludes bots, only real users
119
97
  return { userCount: Number(res.data?.user_count ?? 0) };
120
98
  }
121
- export async function updateMessage(messageId, cardJson) {
122
- const c = getLarkClient();
99
+ export async function updateMessage(larkAppId, messageId, cardJson) {
100
+ const c = getBotClient(larkAppId);
123
101
  const res = await c.im.v1.message.patch({
124
102
  path: { message_id: messageId },
125
103
  data: { content: cardJson },
@@ -128,8 +106,8 @@ export async function updateMessage(messageId, cardJson) {
128
106
  throw new Error(`Failed to update message: ${res.msg} (code: ${res.code})`);
129
107
  }
130
108
  }
131
- export async function getMessageDetail(messageId) {
132
- const c = getLarkClient();
109
+ export async function getMessageDetail(larkAppId, messageId) {
110
+ const c = getBotClient(larkAppId);
133
111
  const res = await c.im.v1.message.get({
134
112
  path: { message_id: messageId },
135
113
  });
@@ -138,8 +116,8 @@ export async function getMessageDetail(messageId) {
138
116
  }
139
117
  return res.data;
140
118
  }
141
- export async function downloadMessageResource(messageId, fileKey, type, savePath) {
142
- const c = getLarkClient();
119
+ export async function downloadMessageResource(larkAppId, messageId, fileKey, type, savePath) {
120
+ const c = getBotClient(larkAppId);
143
121
  const dir = dirname(savePath);
144
122
  if (!existsSync(dir)) {
145
123
  mkdirSync(dir, { recursive: true });
@@ -170,7 +148,7 @@ export async function downloadMessageResource(messageId, fileKey, type, savePath
170
148
  * must be a full email address (e.g. "alice@example.com") and is looked up.
171
149
  * Returns an array of open_ids (unresolvable entries are dropped with a warning).
172
150
  */
173
- export async function resolveAllowedUsers(raw) {
151
+ export async function resolveAllowedUsers(larkAppId, raw) {
174
152
  const openIds = [];
175
153
  const emails = [];
176
154
  for (const v of raw) {
@@ -183,7 +161,7 @@ export async function resolveAllowedUsers(raw) {
183
161
  }
184
162
  if (emails.length === 0)
185
163
  return openIds;
186
- const c = getLarkClient();
164
+ const c = getBotClient(larkAppId);
187
165
  try {
188
166
  const res = await c.contact.v3.user.batchGetId({
189
167
  params: { user_id_type: 'open_id' },
@@ -209,8 +187,8 @@ export async function resolveAllowedUsers(raw) {
209
187
  }
210
188
  return openIds;
211
189
  }
212
- export async function listThreadMessages(chatId, rootMessageId, pageSize = 50) {
213
- const c = getLarkClient();
190
+ export async function listThreadMessages(larkAppId, chatId, rootMessageId, pageSize = 50) {
191
+ const c = getBotClient(larkAppId);
214
192
  const allMessages = [];
215
193
  let pageToken;
216
194
  // Lark API only supports container_id_type="chat", so we list chat messages
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,MAAc,EAAE,OAAe,EAAE,UAAkB,MAAM;IAC5G,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;QACtC,IAAI,EAAE;YACJ,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,OAAc;YACxB,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;IACvC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,gBAAgB,SAAS,YAAY,MAAM,EAAE,CAAC,CAAC;IAC3D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe,EAAE,UAAkB,MAAM,EAAE,gBAAyB,KAAK;IAChJ,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE;YACJ,QAAQ,EAAE,OAAc;YACxB,OAAO,EAAE,IAAI;YACb,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpD;KACF,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;IACrC,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACjE,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,eAAe,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,SAAiB,EAAE,SAAiB;IACvF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAO,CAAS,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACxD,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE,EAAE,aAAa,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE;KACnD,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC;IACzC,MAAM,CAAC,IAAI,CAAC,kBAAkB,SAAS,KAAK,UAAU,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACnF,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAiB,EAAE,SAAiB,EAAE,UAAkB;IAC3F,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAO,CAAS,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC;QACxD,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE;KACzD,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,oBAAoB,UAAU,iBAAiB,SAAS,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB,EAAE,MAAc,EAAE,OAAe,EAAE,UAAkB,MAAM;IAChH,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAE9E,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;QACvC,MAAM,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;QACtC,IAAI,EAAE;YACJ,UAAU,EAAE,MAAM;YAClB,QAAQ,EAAE,OAAc;YACxB,OAAO,EAAE,IAAI;SACd;KACF,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IACjF,CAAC;IAED,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;IACvC,IAAI,CAAC,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,SAAS,YAAY,MAAM,EAAE,CAAC,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,SAAiB,EAAE,MAAc;IACjE,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAO,CAAS,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;QAC1C,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;KAC1B,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC7E,CAAC;IACD,4CAA4C;IAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB,EAAE,SAAiB,EAAE,QAAgB;IACxF,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACtC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;QAC/B,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC9E,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,SAAiB,EAAE,SAAiB;IACzE,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC;QACpC,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE;KAChC,CAAC,CAAC;IACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAiB,EAAE,SAAiB,EAAE,OAAe,EAAE,IAAsB,EAAE,QAAgB;IAC3I,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAElC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,GAAG,GAAG,MAAO,CAAS,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC;QACrD,IAAI,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;QAClD,MAAM,EAAE,EAAE,IAAI,EAAE;KACjB,CAAC,CAAC;IAEH,IAAI,GAAG,YAAY,MAAM,EAAE,CAAC;QAC1B,aAAa,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;SAAM,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,WAAW,IAAI,GAAG,EAAE,CAAC;QAChE,MAAM,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,sDAAsD;QACtD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAA4B,EAAE,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,OAAO,MAAM,QAAQ,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,SAAiB,EAAE,GAAa;IACxE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC;IAExC,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAO,CAAS,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YACtD,MAAM,EAAE,EAAE,YAAY,EAAE,SAAS,EAAE;YACnC,IAAI,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAE,KAAK,EAAE;SAC1C,CAAC,CAAC;QACH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,yCAAyC,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACpF,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAU,GAAG,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC3B,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,SAAiB,EAAE,MAAc,EAAE,aAAqB,EAAE,WAAmB,EAAE;IACtH,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,WAAW,GAAU,EAAE,CAAC;IAC9B,IAAI,SAA6B,CAAC;IAElC,4EAA4E;IAC5E,+CAA+C;IAC/C,GAAG,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;YACrC,MAAM,EAAE;gBACN,iBAAiB,EAAE,MAAa;gBAChC,YAAY,EAAE,MAAM;gBACpB,SAAS,EAAE,QAAQ;gBACnB,SAAS,EAAE,kBAAyB;gBACpC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAChD;SACF,CAAC,CAAC;QAEH,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7E,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAClC,6DAA6D;gBAC7D,IAAI,IAAI,CAAC,UAAU,KAAK,aAAa,IAAI,IAAI,CAAC,OAAO,KAAK,aAAa,EAAE,CAAC;oBACxE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC;QACjC,+EAA+E;QAC/E,IAAI,WAAW,CAAC,MAAM,IAAI,QAAQ;YAAE,MAAM;IAC5C,CAAC,QAAQ,SAAS,EAAE;IAEpB,gCAAgC;IAChC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,CAAC;IACrF,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -4,31 +4,31 @@
4
4
  * Extracted from daemon.ts for modularity.
5
5
  */
6
6
  import * as Lark from '@larksuiteoapi/node-sdk';
7
- export declare function getBotOpenId(): string | undefined;
8
- export declare function setBotOpenId(id: string): void;
7
+ export declare function getBotOpenId(larkAppId: string): string | undefined;
8
+ export declare function setBotOpenId(larkAppId: string, id: string): void;
9
9
  /**
10
10
  * Probe the bot's own open_id at startup via the Lark bot info API.
11
11
  */
12
- export declare function probeBotOpenId(): Promise<void>;
12
+ export declare function probeBotOpenId(larkAppId: string): Promise<void>;
13
13
  export declare const CHAT_CACHE_TTL: number;
14
- export declare function getGroupUserCount(chatId: string): Promise<number>;
14
+ export declare function getGroupUserCount(larkAppId: string, chatId: string): Promise<number>;
15
15
  /** Check if the bot was @mentioned in this message */
16
- export declare function isBotMentioned(message: any, _senderOpenId: string | undefined): boolean;
16
+ export declare function isBotMentioned(larkAppId: string, message: any, _senderOpenId: string | undefined): boolean;
17
17
  /**
18
18
  * Check group message addressing:
19
19
  * - 'allowed' -> sender is allowed, bot was @mentioned or solo group
20
20
  * - 'not_allowed' -> bot was @mentioned but sender is not in allowlist
21
21
  * - 'ignore' -> not addressed to bot at all
22
22
  */
23
- export declare function checkGroupMessageAccess(message: any, chatId: string, senderOpenId: string | undefined): Promise<'allowed' | 'not_allowed' | 'ignore'>;
23
+ export declare function checkGroupMessageAccess(larkAppId: string, message: any, chatId: string, senderOpenId: string | undefined): Promise<'allowed' | 'not_allowed' | 'ignore'>;
24
24
  export interface EventHandlers {
25
- handleCardAction: (data: any) => Promise<void>;
26
- handleNewTopic: (data: any, chatId: string, messageId: string, chatType: 'group' | 'p2p') => Promise<void>;
27
- handleThreadReply: (data: any, rootId: string) => Promise<void>;
25
+ handleCardAction: (data: any, larkAppId: string) => Promise<void>;
26
+ handleNewTopic: (data: any, chatId: string, messageId: string, chatType: 'group' | 'p2p', larkAppId: string) => Promise<void>;
27
+ handleThreadReply: (data: any, rootId: string, larkAppId: string) => Promise<void>;
28
28
  }
29
29
  /**
30
30
  * Create and start the Lark WSClient with event dispatching.
31
31
  * Returns the WSClient instance for lifecycle management.
32
32
  */
33
- export declare function startLarkEventDispatcher(handlers: EventHandlers): Lark.WSClient;
33
+ export declare function startLarkEventDispatcher(larkAppId: string, larkAppSecret: string, handlers: EventHandlers): Lark.WSClient;
34
34
  //# sourceMappingURL=event-dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"event-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/im/lark/event-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAShD,wBAAgB,YAAY,IAAI,MAAM,GAAG,SAAS,CAEjD;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA6BpD;AAKD,eAAO,MAAM,cAAc,QAAa,CAAC;AAEzC,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAavE;AAID,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAYvF;AAID;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAC7D,OAAO,CAAC,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,CAkB/C;AAID,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3G,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAiG/E"}
1
+ {"version":3,"file":"event-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/im/lark/event-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,IAAI,MAAM,yBAAyB,CAAC;AAOhD,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BrE;AAKD,eAAO,MAAM,cAAc,QAAa,CAAC;AAEzC,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAc1F;AAID,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAa1G;AAID;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAChF,OAAO,CAAC,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC,CAkB/C;AAID,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9H,iBAAiB,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACpF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC,QAAQ,CAkGzH"}
@@ -4,28 +4,28 @@
4
4
  * Extracted from daemon.ts for modularity.
5
5
  */
6
6
  import * as Lark from '@larksuiteoapi/node-sdk';
7
- import { config } from '../../config.js';
7
+ import { getBot } from '../../bot-registry.js';
8
8
  import { getChatInfo, replyMessage } from './client.js';
9
9
  import { logger } from '../../utils/logger.js';
10
10
  // ─── Bot identity ─────────────────────────────────────────────────────────
11
- let botOpenId;
12
- export function getBotOpenId() {
13
- return botOpenId;
11
+ export function getBotOpenId(larkAppId) {
12
+ return getBot(larkAppId).botOpenId;
14
13
  }
15
- export function setBotOpenId(id) {
16
- botOpenId = id;
14
+ export function setBotOpenId(larkAppId, id) {
15
+ getBot(larkAppId).botOpenId = id;
17
16
  }
18
17
  /**
19
18
  * Probe the bot's own open_id at startup via the Lark bot info API.
20
19
  */
21
- export async function probeBotOpenId() {
22
- if (botOpenId)
20
+ export async function probeBotOpenId(larkAppId) {
21
+ const bot = getBot(larkAppId);
22
+ if (bot.botOpenId)
23
23
  return; // already known
24
24
  // Call /bot/v3/info to get the bot's open_id using tenant_access_token
25
25
  const tokenRes = await fetch('https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal', {
26
26
  method: 'POST',
27
27
  headers: { 'Content-Type': 'application/json' },
28
- body: JSON.stringify({ app_id: config.lark.appId, app_secret: config.lark.appSecret }),
28
+ body: JSON.stringify({ app_id: bot.config.larkAppId, app_secret: bot.config.larkAppSecret }),
29
29
  });
30
30
  const tokenData = await tokenRes.json();
31
31
  if (tokenData.code !== 0) {
@@ -40,8 +40,8 @@ export async function probeBotOpenId() {
40
40
  }
41
41
  const openId = botData.bot?.open_id;
42
42
  if (openId) {
43
- botOpenId = openId;
44
- logger.info(`Bot open_id: ${botOpenId}`);
43
+ bot.botOpenId = openId;
44
+ logger.info(`Bot open_id: ${bot.botOpenId}`);
45
45
  }
46
46
  else {
47
47
  throw new Error('No open_id in bot info response');
@@ -50,14 +50,15 @@ export async function probeBotOpenId() {
50
50
  // ─── Group user count cache ───────────────────────────────────────────────
51
51
  const chatUserCountCache = new Map();
52
52
  export const CHAT_CACHE_TTL = 5 * 60_000; // 5 minutes
53
- export async function getGroupUserCount(chatId) {
54
- const cached = chatUserCountCache.get(chatId);
53
+ export async function getGroupUserCount(larkAppId, chatId) {
54
+ const cacheKey = `${larkAppId}:${chatId}`;
55
+ const cached = chatUserCountCache.get(cacheKey);
55
56
  if (cached && Date.now() - cached.fetchedAt < CHAT_CACHE_TTL) {
56
57
  return cached.count;
57
58
  }
58
59
  try {
59
- const info = await getChatInfo(chatId);
60
- chatUserCountCache.set(chatId, { count: info.userCount, fetchedAt: Date.now() });
60
+ const info = await getChatInfo(larkAppId, chatId);
61
+ chatUserCountCache.set(cacheKey, { count: info.userCount, fetchedAt: Date.now() });
61
62
  return info.userCount;
62
63
  }
63
64
  catch (err) {
@@ -67,10 +68,11 @@ export async function getGroupUserCount(chatId) {
67
68
  }
68
69
  // ─── @mention detection ──────────────────────────────────────────────────
69
70
  /** Check if the bot was @mentioned in this message */
70
- export function isBotMentioned(message, _senderOpenId) {
71
+ export function isBotMentioned(larkAppId, message, _senderOpenId) {
71
72
  const mentions = message.mentions ?? [];
72
73
  if (mentions.length === 0)
73
74
  return false;
75
+ const botOpenId = getBot(larkAppId).botOpenId;
74
76
  if (!botOpenId) {
75
77
  // Bot open_id unknown — cannot reliably detect @bot mentions.
76
78
  // Will be resolved once probeBotOpenId() completes or first bot message event arrives.
@@ -86,16 +88,16 @@ export function isBotMentioned(message, _senderOpenId) {
86
88
  * - 'not_allowed' -> bot was @mentioned but sender is not in allowlist
87
89
  * - 'ignore' -> not addressed to bot at all
88
90
  */
89
- export async function checkGroupMessageAccess(message, chatId, senderOpenId) {
90
- const mentioned = isBotMentioned(message, senderOpenId);
91
- const allowedUsers = config.daemon.allowedUsers;
91
+ export async function checkGroupMessageAccess(larkAppId, message, chatId, senderOpenId) {
92
+ const mentioned = isBotMentioned(larkAppId, message, senderOpenId);
93
+ const allowedUsers = getBot(larkAppId).resolvedAllowedUsers;
92
94
  const isAllowed = allowedUsers.length === 0 || (!!senderOpenId && allowedUsers.includes(senderOpenId));
93
95
  if (mentioned) {
94
96
  return isAllowed ? 'allowed' : 'not_allowed';
95
97
  }
96
98
  // No @mention — only allow if sender is the sole human in the group
97
99
  if (isAllowed) {
98
- const userCount = await getGroupUserCount(chatId);
100
+ const userCount = await getGroupUserCount(larkAppId, chatId);
99
101
  if (userCount <= 1) {
100
102
  return 'allowed';
101
103
  }
@@ -106,11 +108,11 @@ export async function checkGroupMessageAccess(message, chatId, senderOpenId) {
106
108
  * Create and start the Lark WSClient with event dispatching.
107
109
  * Returns the WSClient instance for lifecycle management.
108
110
  */
109
- export function startLarkEventDispatcher(handlers) {
111
+ export function startLarkEventDispatcher(larkAppId, larkAppSecret, handlers) {
110
112
  const eventDispatcher = new Lark.EventDispatcher({}).register({
111
113
  'card.action.trigger': async (data) => {
112
114
  try {
113
- await handlers.handleCardAction(data);
115
+ await handlers.handleCardAction(data, larkAppId);
114
116
  }
115
117
  catch (err) {
116
118
  logger.error(`Error handling card action: ${err}`);
@@ -126,9 +128,10 @@ export function startLarkEventDispatcher(handlers) {
126
128
  return;
127
129
  // Learn bot's own open_id from its outgoing messages
128
130
  if (sender?.sender_type === 'app') {
131
+ const botOpenId = getBotOpenId(larkAppId);
129
132
  if (!botOpenId && sender.sender_id?.open_id) {
130
- botOpenId = sender.sender_id.open_id;
131
- logger.info(`Learned bot open_id from message event: ${botOpenId}`);
133
+ setBotOpenId(larkAppId, sender.sender_id.open_id);
134
+ logger.info(`Learned bot open_id from message event: ${getBotOpenId(larkAppId)}`);
132
135
  }
133
136
  // Allow bot's own messages only if they are /close commands in threads
134
137
  const rootId = message.root_id;
@@ -142,7 +145,7 @@ export function startLarkEventDispatcher(handlers) {
142
145
  catch {
143
146
  return;
144
147
  }
145
- handlers.handleThreadReply(data, rootId).catch(err => logger.error(`Error handling message event: ${err}`));
148
+ handlers.handleThreadReply(data, rootId, larkAppId).catch(err => logger.error(`Error handling message event: ${err}`));
146
149
  return;
147
150
  }
148
151
  const rootId = message.root_id;
@@ -150,13 +153,13 @@ export function startLarkEventDispatcher(handlers) {
150
153
  const chatType = message.chat_type; // 'group' or 'p2p'
151
154
  const messageId = message.message_id;
152
155
  const senderOpenId = sender?.sender_id?.open_id;
153
- const allowedUsers = config.daemon.allowedUsers;
156
+ const allowedUsers = getBot(larkAppId).resolvedAllowedUsers;
154
157
  const isAllowed = allowedUsers.length === 0 || (!!senderOpenId && allowedUsers.includes(senderOpenId));
155
158
  // Group new topics (no rootId): check @mention + permissions
156
159
  if (chatType === 'group' && !rootId) {
157
- const access = await checkGroupMessageAccess(message, chatId, senderOpenId);
160
+ const access = await checkGroupMessageAccess(larkAppId, message, chatId, senderOpenId);
158
161
  if (access === 'not_allowed') {
159
- replyMessage(messageId, JSON.stringify({ text: '⚠️ 无操作权限' }))
162
+ replyMessage(larkAppId, messageId, JSON.stringify({ text: '⚠️ 无操作权限' }))
160
163
  .catch(err => logger.debug(`Failed to send permission denied: ${err}`));
161
164
  return;
162
165
  }
@@ -167,7 +170,7 @@ export function startLarkEventDispatcher(handlers) {
167
170
  }
168
171
  else if (chatType === 'group' && rootId) {
169
172
  // Group thread replies: require @mention or solo group (same as new topics)
170
- const access = await checkGroupMessageAccess(message, chatId, senderOpenId);
173
+ const access = await checkGroupMessageAccess(larkAppId, message, chatId, senderOpenId);
171
174
  if (access === 'not_allowed') {
172
175
  // @mentioned but not in allowlist — silently ignore in threads
173
176
  logger.debug(`Ignoring thread reply from non-allowed user: ${senderOpenId}`);
@@ -186,8 +189,8 @@ export function startLarkEventDispatcher(handlers) {
186
189
  // p2p messages without rootId -> create session directly in the DM chat
187
190
  // group messages -> normal flow
188
191
  const promise = !rootId
189
- ? handlers.handleNewTopic(data, chatId, messageId, chatType)
190
- : handlers.handleThreadReply(data, rootId);
192
+ ? handlers.handleNewTopic(data, chatId, messageId, chatType, larkAppId)
193
+ : handlers.handleThreadReply(data, rootId, larkAppId);
191
194
  promise.catch(err => logger.error(`Error handling message event: ${err}`));
192
195
  }
193
196
  catch (err) {
@@ -197,8 +200,8 @@ export function startLarkEventDispatcher(handlers) {
197
200
  });
198
201
  // Start WSClient
199
202
  const wsClient = new Lark.WSClient({
200
- appId: config.lark.appId,
201
- appSecret: config.lark.appSecret,
203
+ appId: larkAppId,
204
+ appSecret: larkAppSecret,
202
205
  loggerLevel: Lark.LoggerLevel.info,
203
206
  });
204
207
  wsClient.start({ eventDispatcher });