botmux 3.18.6 → 3.18.7
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/.runtime-build-id +1 -1
- package/dist/adapters/backend/riff-backend.d.ts +158 -0
- package/dist/adapters/backend/riff-backend.d.ts.map +1 -1
- package/dist/adapters/backend/riff-backend.js +330 -7
- package/dist/adapters/backend/riff-backend.js.map +1 -1
- package/dist/adapters/backend/sandbox.d.ts +42 -0
- package/dist/adapters/backend/sandbox.d.ts.map +1 -1
- package/dist/adapters/backend/sandbox.js +95 -5
- package/dist/adapters/backend/sandbox.js.map +1 -1
- package/dist/adapters/cli/codex-app.d.ts.map +1 -1
- package/dist/adapters/cli/codex-app.js +2 -1
- package/dist/adapters/cli/codex-app.js.map +1 -1
- package/dist/adapters/cli/dsh.d.ts.map +1 -1
- package/dist/adapters/cli/dsh.js +2 -1
- package/dist/adapters/cli/dsh.js.map +1 -1
- package/dist/adapters/cli/mir.d.ts.map +1 -1
- package/dist/adapters/cli/mir.js +2 -1
- package/dist/adapters/cli/mir.js.map +1 -1
- package/dist/adapters/cli/mira.d.ts.map +1 -1
- package/dist/adapters/cli/mira.js +2 -1
- package/dist/adapters/cli/mira.js.map +1 -1
- package/dist/adapters/hook-command.d.ts +3 -5
- package/dist/adapters/hook-command.d.ts.map +1 -1
- package/dist/adapters/hook-command.js +59 -13
- package/dist/adapters/hook-command.js.map +1 -1
- package/dist/autostart.d.ts +76 -0
- package/dist/autostart.d.ts.map +1 -1
- package/dist/autostart.js +105 -28
- package/dist/autostart.js.map +1 -1
- package/dist/bot-registry.d.ts +12 -0
- package/dist/bot-registry.d.ts.map +1 -1
- package/dist/bot-registry.js +43 -3
- package/dist/bot-registry.js.map +1 -1
- package/dist/cli/dashboard-command.d.ts +142 -0
- package/dist/cli/dashboard-command.d.ts.map +1 -1
- package/dist/cli/dashboard-command.js +160 -0
- package/dist/cli/dashboard-command.js.map +1 -1
- package/dist/cli/dashboard-endpoint.d.ts +66 -0
- package/dist/cli/dashboard-endpoint.d.ts.map +1 -1
- package/dist/cli/dashboard-endpoint.js +144 -30
- package/dist/cli/dashboard-endpoint.js.map +1 -1
- package/dist/cli/send-dispatch.d.ts +2 -0
- package/dist/cli/send-dispatch.d.ts.map +1 -1
- package/dist/cli/send-dispatch.js +8 -2
- package/dist/cli/send-dispatch.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +270 -38
- package/dist/cli.js.map +1 -1
- package/dist/core/binary-self-update.d.ts +7 -0
- package/dist/core/binary-self-update.d.ts.map +1 -1
- package/dist/core/binary-self-update.js +17 -0
- package/dist/core/binary-self-update.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +52 -1
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/cost-calculator.d.ts +9 -1
- package/dist/core/cost-calculator.d.ts.map +1 -1
- package/dist/core/cost-calculator.js +5 -0
- package/dist/core/cost-calculator.js.map +1 -1
- package/dist/core/passthrough-commands.d.ts.map +1 -1
- package/dist/core/passthrough-commands.js +1 -1
- package/dist/core/passthrough-commands.js.map +1 -1
- package/dist/core/self-spawn.d.ts +46 -1
- package/dist/core/self-spawn.d.ts.map +1 -1
- package/dist/core/self-spawn.js +57 -0
- package/dist/core/self-spawn.js.map +1 -1
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +81 -5
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +93 -0
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/autostart-api.d.ts.map +1 -1
- package/dist/dashboard/autostart-api.js +16 -3
- package/dist/dashboard/autostart-api.js.map +1 -1
- package/dist/dashboard/bot-onboarding.d.ts +2 -1
- package/dist/dashboard/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/bot-onboarding.js +22 -6
- package/dist/dashboard/bot-onboarding.js.map +1 -1
- package/dist/dashboard/bot-payload.d.ts +1 -0
- package/dist/dashboard/bot-payload.d.ts.map +1 -1
- package/dist/dashboard/bot-payload.js +3 -0
- package/dist/dashboard/bot-payload.js.map +1 -1
- package/dist/dashboard/connector-api.d.ts.map +1 -1
- package/dist/dashboard/connector-api.js +28 -0
- package/dist/dashboard/connector-api.js.map +1 -1
- package/dist/dashboard/trigger-api.d.ts.map +1 -1
- package/dist/dashboard/trigger-api.js +33 -21
- package/dist/dashboard/trigger-api.js.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults-page.js +12 -2
- package/dist/dashboard/web/bot-defaults-page.js.map +1 -1
- package/dist/dashboard/web/bot-defaults.d.ts +2 -0
- package/dist/dashboard/web/bot-defaults.d.ts.map +1 -1
- package/dist/dashboard/web/bot-defaults.js.map +1 -1
- package/dist/dashboard/web/bot-onboarding.d.ts +40 -1
- package/dist/dashboard/web/bot-onboarding.d.ts.map +1 -1
- package/dist/dashboard/web/bot-onboarding.js +52 -2
- package/dist/dashboard/web/bot-onboarding.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +2 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/webhook-routes.d.ts.map +1 -1
- package/dist/dashboard/webhook-routes.js +272 -30
- package/dist/dashboard/webhook-routes.js.map +1 -1
- package/dist/dashboard-web/app.js +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-dock-page-XHJUYFGN.js → agent-workbench-dock-page-6LC422N6.js} +1 -1
- package/dist/dashboard-web/chunks/{agent-workbench-page-FLKTLIRM.js → agent-workbench-page-RSAWY7O2.js} +1 -1
- package/dist/dashboard-web/chunks/{bot-defaults-page-XMGLZZ2E.js → bot-defaults-page-67RAWCSQ.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-TLG45URB.js → chunk-IA5KMD5O.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-BU3Q6XC6.js → chunk-K232GT3M.js} +2 -2
- package/dist/dashboard-web/chunks/chunk-MMLTCXHP.js +10 -0
- package/dist/dashboard-web/chunks/{chunk-ECFC7UG2.js → chunk-R3LJUCEO.js} +1 -1
- package/dist/dashboard-web/chunks/{chunk-Z67OSM5P.js → chunk-YJA3KY3J.js} +1 -1
- package/dist/dashboard-web/chunks/{connectors-page-WDM4CEAU.js → connectors-page-DJCTHSFB.js} +1 -1
- package/dist/dashboard-web/chunks/{feedback-page-GMJ4FLJ4.js → feedback-page-O7SZRKNM.js} +1 -1
- package/dist/dashboard-web/chunks/{groups-page-L4ZJNWVR.js → groups-page-7PONUYHE.js} +1 -1
- package/dist/dashboard-web/chunks/{insights-page-7LUJU2CX.js → insights-page-J6DAAJ6D.js} +1 -1
- package/dist/dashboard-web/chunks/{monitor-room-7LZUJQPF.js → monitor-room-F3QNEW7N.js} +1 -1
- package/dist/dashboard-web/chunks/{monitoring-page-AUSXMPYO.js → monitoring-page-JHDD2VS2.js} +1 -1
- package/dist/dashboard-web/chunks/{office-page-6ZU6MAZN.js → office-page-MMTN4IKD.js} +1 -1
- package/dist/dashboard-web/chunks/{overview-page-QBC5CIYH.js → overview-page-IQ2UJAJP.js} +1 -1
- package/dist/dashboard-web/chunks/{roles-page-QO3YCA7D.js → roles-page-FNI4MGX6.js} +1 -1
- package/dist/dashboard-web/chunks/{schedules-page-YNGSKDQW.js → schedules-page-6PUU63KS.js} +1 -1
- package/dist/dashboard-web/chunks/{sessions-page-BWR4UB6X.js → sessions-page-O4N72EXT.js} +4 -4
- package/dist/dashboard-web/chunks/{settings-page-2IRIS3FP.js → settings-page-G7B3STUF.js} +1 -1
- package/dist/dashboard-web/chunks/{skills-page-5RZPM6HJ.js → skills-page-CEWKQOIG.js} +1 -1
- package/dist/dashboard-web/chunks/{team-federation-page-KERG6LKC.js → team-federation-page-NUP4VK4H.js} +1 -1
- package/dist/dashboard-web/chunks/{v3-page-766CBD7H.js → v3-page-M4XF6D5Z.js} +1 -1
- package/dist/dashboard-web/chunks/{whiteboards-page-2M6XZD5C.js → whiteboards-page-L755NZX6.js} +1 -1
- package/dist/dashboard-web/style.css +13 -0
- package/dist/dashboard.js +3 -0
- package/dist/dashboard.js.map +1 -1
- package/dist/global-config.d.ts +3 -0
- package/dist/global-config.d.ts.map +1 -1
- package/dist/global-config.js +10 -3
- package/dist/global-config.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +19 -1
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +19 -1
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/api-gate.d.ts +53 -0
- package/dist/im/lark/api-gate.d.ts.map +1 -0
- package/dist/im/lark/api-gate.js +322 -0
- package/dist/im/lark/api-gate.js.map +1 -0
- package/dist/im/lark/audio-transcribe.d.ts +23 -0
- package/dist/im/lark/audio-transcribe.d.ts.map +1 -0
- package/dist/im/lark/audio-transcribe.js +126 -0
- package/dist/im/lark/audio-transcribe.js.map +1 -0
- package/dist/im/lark/card-builder.d.ts +6 -0
- package/dist/im/lark/card-builder.d.ts.map +1 -1
- package/dist/im/lark/card-builder.js +53 -1
- package/dist/im/lark/card-builder.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +10 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +68 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +247 -224
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/event-dispatcher.d.ts.map +1 -1
- package/dist/im/lark/event-dispatcher.js +34 -3
- package/dist/im/lark/event-dispatcher.js.map +1 -1
- package/dist/im/lark/message-parser.d.ts +16 -0
- package/dist/im/lark/message-parser.d.ts.map +1 -1
- package/dist/im/lark/message-parser.js +31 -0
- package/dist/im/lark/message-parser.js.map +1 -1
- package/dist/services/budget-tracker.d.ts +61 -0
- package/dist/services/budget-tracker.d.ts.map +1 -0
- package/dist/services/budget-tracker.js +306 -0
- package/dist/services/budget-tracker.js.map +1 -0
- package/dist/services/connector-store.d.ts +16 -0
- package/dist/services/connector-store.d.ts.map +1 -1
- package/dist/services/connector-store.js.map +1 -1
- package/dist/services/failed-turn-retry.d.ts +43 -0
- package/dist/services/failed-turn-retry.d.ts.map +1 -0
- package/dist/services/failed-turn-retry.js +50 -0
- package/dist/services/failed-turn-retry.js.map +1 -0
- package/dist/services/model-pricing.d.ts +80 -0
- package/dist/services/model-pricing.d.ts.map +1 -0
- package/dist/services/model-pricing.js +182 -0
- package/dist/services/model-pricing.js.map +1 -0
- package/dist/services/session-store.d.ts.map +1 -1
- package/dist/services/session-store.js +13 -3
- package/dist/services/session-store.js.map +1 -1
- package/dist/services/trigger-types.d.ts +10 -0
- package/dist/services/trigger-types.d.ts.map +1 -1
- package/dist/services/trigger-types.js.map +1 -1
- package/dist/services/usage-ledger.d.ts +10 -0
- package/dist/services/usage-ledger.d.ts.map +1 -1
- package/dist/services/usage-ledger.js +36 -0
- package/dist/services/usage-ledger.js.map +1 -1
- package/dist/services/voice/asr.d.ts +17 -0
- package/dist/services/voice/asr.d.ts.map +1 -0
- package/dist/services/voice/asr.js +64 -0
- package/dist/services/voice/asr.js.map +1 -0
- package/dist/services/voice/index.d.ts +17 -2
- package/dist/services/voice/index.d.ts.map +1 -1
- package/dist/services/voice/index.js +43 -0
- package/dist/services/voice/index.js.map +1 -1
- package/dist/services/voice/types.d.ts +15 -0
- package/dist/services/voice/types.d.ts.map +1 -1
- package/dist/services/webhook-idempotency.d.ts +134 -0
- package/dist/services/webhook-idempotency.d.ts.map +1 -0
- package/dist/services/webhook-idempotency.js +265 -0
- package/dist/services/webhook-idempotency.js.map +1 -0
- package/dist/setup/app-name.d.ts +1 -0
- package/dist/setup/app-name.d.ts.map +1 -1
- package/dist/setup/app-name.js +7 -0
- package/dist/setup/app-name.js.map +1 -1
- package/dist/setup/bot-config-editor.d.ts +28 -0
- package/dist/setup/bot-config-editor.d.ts.map +1 -1
- package/dist/setup/bot-config-editor.js +73 -0
- package/dist/setup/bot-config-editor.js.map +1 -1
- package/dist/setup/open-platform-automation.d.ts +26 -0
- package/dist/setup/open-platform-automation.d.ts.map +1 -1
- package/dist/setup/open-platform-automation.js +90 -1
- package/dist/setup/open-platform-automation.js.map +1 -1
- package/dist/setup/open-platform-outcome.d.ts.map +1 -1
- package/dist/setup/open-platform-outcome.js +8 -2
- package/dist/setup/open-platform-outcome.js.map +1 -1
- package/dist/types.d.ts +20 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/usage-limit-tracker.d.ts +29 -9
- package/dist/utils/usage-limit-tracker.d.ts.map +1 -1
- package/dist/utils/usage-limit-tracker.js +122 -14
- package/dist/utils/usage-limit-tracker.js.map +1 -1
- package/dist/worker.js +27 -6
- package/dist/worker.js.map +1 -1
- package/dist/workflows/definition.d.ts +56 -56
- package/dist/workflows/events/payloads.d.ts +2 -2
- package/dist/workflows/events/schema.d.ts +430 -430
- package/dist/workflows/migration/v2-run-archive-schema.d.ts +2 -2
- package/dist/workflows/v3/run-envelope.d.ts +56 -56
- package/package.json +9 -8
- package/scripts/postinstall-bin.mjs +25 -0
- package/dist/dashboard-web/chunks/chunk-NJCJR3U2.js +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAyE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAG1I,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/im/lark/client.ts"],"names":[],"mappings":"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"}
|
package/dist/im/lark/client.js
CHANGED
|
@@ -15,6 +15,7 @@ import { resolveTeamRoleFile } from '../../core/role-resolver.js';
|
|
|
15
15
|
import { larkHosts, normalizeBrand, sdkDomain } from './lark-hosts.js';
|
|
16
16
|
import { canonicalMobileKey, isMobileEntry, normalizeMobileEntry } from '../../setup/bot-config-editor.js';
|
|
17
17
|
import { stampBotmuxCallbackMarkers } from './callback-button-marker.js';
|
|
18
|
+
import { executeWithLarkGate } from './api-gate.js';
|
|
18
19
|
function larkRequestDeadline(options) {
|
|
19
20
|
const timeout = options?.timeoutMs;
|
|
20
21
|
return {
|
|
@@ -224,47 +225,49 @@ async function emitOutboundHookIfAllowed(options, event, payload) {
|
|
|
224
225
|
}
|
|
225
226
|
export async function sendMessage(larkAppId, chatId, content, msgType = 'text', uuid, hookContext, options) {
|
|
226
227
|
assertLarkTransport(larkAppId, 'sendMessage');
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
catch (err) {
|
|
244
|
-
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
245
|
-
throw new MessageWithdrawnError(chatId);
|
|
228
|
+
return executeWithLarkGate(larkAppId, 'sendMessage', async () => {
|
|
229
|
+
const c = getBotClient(larkAppId);
|
|
230
|
+
const body = msgType === 'text'
|
|
231
|
+
? JSON.stringify({ text: content })
|
|
232
|
+
: msgType === 'interactive' ? stampBotmuxCallbackMarkers(content) : content;
|
|
233
|
+
let res;
|
|
234
|
+
try {
|
|
235
|
+
res = await c.im.v1.message.create({
|
|
236
|
+
params: { receive_id_type: 'chat_id' },
|
|
237
|
+
data: {
|
|
238
|
+
receive_id: chatId,
|
|
239
|
+
msg_type: msgType,
|
|
240
|
+
content: body,
|
|
241
|
+
...(uuid ? { uuid } : {}),
|
|
242
|
+
},
|
|
243
|
+
});
|
|
246
244
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
throw
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
chatId
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
245
|
+
catch (err) {
|
|
246
|
+
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
247
|
+
throw new MessageWithdrawnError(chatId);
|
|
248
|
+
}
|
|
249
|
+
throw err;
|
|
250
|
+
}
|
|
251
|
+
if (res.code !== 0) {
|
|
252
|
+
if (res.code === LARK_CODE_MESSAGE_WITHDRAWN)
|
|
253
|
+
throw new MessageWithdrawnError(chatId);
|
|
254
|
+
throw new Error(`Failed to send message: ${res.msg} (code: ${res.code})`);
|
|
255
|
+
}
|
|
256
|
+
const messageId = res.data?.message_id;
|
|
257
|
+
if (!messageId)
|
|
258
|
+
throw new Error('No message_id in response');
|
|
259
|
+
logger.info(`Sent message ${messageId} to chat ${chatId}`);
|
|
260
|
+
await emitOutboundHookIfAllowed(options, 'outbound.send', {
|
|
261
|
+
...hookContext,
|
|
262
|
+
larkAppId,
|
|
263
|
+
chatId,
|
|
264
|
+
messageId,
|
|
265
|
+
msgType,
|
|
266
|
+
uuid,
|
|
267
|
+
content,
|
|
268
|
+
});
|
|
269
|
+
return messageId;
|
|
266
270
|
});
|
|
267
|
-
return messageId;
|
|
268
271
|
}
|
|
269
272
|
/**
|
|
270
273
|
* Reply to an existing message. See {@link sendMessage} for the `uuid`
|
|
@@ -275,73 +278,79 @@ export async function sendMessage(larkAppId, chatId, content, msgType = 'text',
|
|
|
275
278
|
*/
|
|
276
279
|
export async function replyMessage(larkAppId, messageId, content, msgType = 'text', replyInThread = false, uuid, hookContext, options) {
|
|
277
280
|
assertLarkTransport(larkAppId, 'replyMessage');
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
catch (err) {
|
|
295
|
-
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
296
|
-
throw new MessageWithdrawnError(messageId);
|
|
281
|
+
return executeWithLarkGate(larkAppId, 'replyMessage', async () => {
|
|
282
|
+
const c = getBotClient(larkAppId);
|
|
283
|
+
const body = msgType === 'text'
|
|
284
|
+
? JSON.stringify({ text: content })
|
|
285
|
+
: msgType === 'interactive' ? stampBotmuxCallbackMarkers(content) : content;
|
|
286
|
+
let res;
|
|
287
|
+
try {
|
|
288
|
+
res = await c.im.v1.message.reply({
|
|
289
|
+
path: { message_id: messageId },
|
|
290
|
+
data: {
|
|
291
|
+
msg_type: msgType,
|
|
292
|
+
content: body,
|
|
293
|
+
...(replyInThread ? { reply_in_thread: true } : {}),
|
|
294
|
+
...(uuid ? { uuid } : {}),
|
|
295
|
+
},
|
|
296
|
+
});
|
|
297
297
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
throw
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
messageId,
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
298
|
+
catch (err) {
|
|
299
|
+
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
300
|
+
throw new MessageWithdrawnError(messageId);
|
|
301
|
+
}
|
|
302
|
+
throw err;
|
|
303
|
+
}
|
|
304
|
+
if (res.code !== 0) {
|
|
305
|
+
if (res.code === LARK_CODE_MESSAGE_WITHDRAWN)
|
|
306
|
+
throw new MessageWithdrawnError(messageId);
|
|
307
|
+
throw new Error(`Failed to reply message: ${res.msg} (code: ${res.code})`);
|
|
308
|
+
}
|
|
309
|
+
const replyId = res.data?.message_id;
|
|
310
|
+
if (!replyId)
|
|
311
|
+
throw new Error('No message_id in reply response');
|
|
312
|
+
logger.info(`Replied ${replyId} to message ${messageId} [msgType=${msgType}, replyInThread=${replyInThread}]`);
|
|
313
|
+
await emitOutboundHookIfAllowed(options, 'outbound.reply', {
|
|
314
|
+
...hookContext,
|
|
315
|
+
larkAppId,
|
|
316
|
+
messageId,
|
|
317
|
+
replyId,
|
|
318
|
+
msgType,
|
|
319
|
+
replyInThread,
|
|
320
|
+
uuid,
|
|
321
|
+
content,
|
|
322
|
+
});
|
|
323
|
+
return replyId;
|
|
318
324
|
});
|
|
319
|
-
return replyId;
|
|
320
325
|
}
|
|
321
326
|
export async function addReaction(larkAppId, messageId, emojiType) {
|
|
322
327
|
assertLarkTransport(larkAppId, 'addReaction');
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
328
|
+
return executeWithLarkGate(larkAppId, 'addReaction', async () => {
|
|
329
|
+
const c = getBotClient(larkAppId);
|
|
330
|
+
const res = await c.im.v1.messageReaction.create({
|
|
331
|
+
path: { message_id: messageId },
|
|
332
|
+
data: { reaction_type: { emoji_type: emojiType } },
|
|
333
|
+
});
|
|
334
|
+
if (res.code !== 0) {
|
|
335
|
+
throw new Error(`Failed to add reaction: ${res.msg} (code: ${res.code})`);
|
|
336
|
+
}
|
|
337
|
+
const reactionId = res.data?.reaction_id;
|
|
338
|
+
logger.info(`Added reaction ${emojiType} (${reactionId}) to message ${messageId}`);
|
|
339
|
+
return reactionId ?? '';
|
|
327
340
|
});
|
|
328
|
-
if (res.code !== 0) {
|
|
329
|
-
throw new Error(`Failed to add reaction: ${res.msg} (code: ${res.code})`);
|
|
330
|
-
}
|
|
331
|
-
const reactionId = res.data?.reaction_id;
|
|
332
|
-
logger.info(`Added reaction ${emojiType} (${reactionId}) to message ${messageId}`);
|
|
333
|
-
return reactionId ?? '';
|
|
334
341
|
}
|
|
335
342
|
export async function removeReaction(larkAppId, messageId, reactionId) {
|
|
336
343
|
assertLarkTransport(larkAppId, 'removeReaction');
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
344
|
+
return executeWithLarkGate(larkAppId, 'removeReaction', async () => {
|
|
345
|
+
const c = getBotClient(larkAppId);
|
|
346
|
+
const res = await c.im.v1.messageReaction.delete({
|
|
347
|
+
path: { message_id: messageId, reaction_id: reactionId },
|
|
348
|
+
});
|
|
349
|
+
if (res.code !== 0) {
|
|
350
|
+
throw new Error(`Failed to remove reaction: ${res.msg} (code: ${res.code})`);
|
|
351
|
+
}
|
|
352
|
+
logger.info(`Removed reaction ${reactionId} from message ${messageId}`);
|
|
340
353
|
});
|
|
341
|
-
if (res.code !== 0) {
|
|
342
|
-
throw new Error(`Failed to remove reaction: ${res.msg} (code: ${res.code})`);
|
|
343
|
-
}
|
|
344
|
-
logger.info(`Removed reaction ${reactionId} from message ${messageId}`);
|
|
345
354
|
}
|
|
346
355
|
/**
|
|
347
356
|
* Resolve a user's tenant-stable `union_id` from their app-scoped `open_id`.
|
|
@@ -474,44 +483,46 @@ export async function isHumanOpenId(larkAppId, openId) {
|
|
|
474
483
|
}
|
|
475
484
|
export async function sendUserMessage(larkAppId, openId, content, msgType = 'text', uuid, requestOptions) {
|
|
476
485
|
assertLarkTransport(larkAppId, 'sendUserMessage');
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
486
|
+
return executeWithLarkGate(larkAppId, 'sendUserMessage', async () => {
|
|
487
|
+
const c = getBotClient(larkAppId);
|
|
488
|
+
// Stamp callback-button ownership markers on interactive DMs too: this is the
|
|
489
|
+
// FIFTH card egress surface (config / write-link / substitute / overload / …
|
|
490
|
+
// cards all DM their callback buttons through here). Without it a peer bot
|
|
491
|
+
// reading such a DM via history flattens the buttons into its prompt, and —
|
|
492
|
+
// worse — a future botmux DM button with a new action would leak past the
|
|
493
|
+
// parser's legacy wordlist. Shared `body` feeds BOTH branches below (plain
|
|
494
|
+
// create + deadline request), so one stamp covers both. Same total-function
|
|
495
|
+
// contract as send/reply/ephemeral/update: any JSON anomaly returns unchanged.
|
|
496
|
+
const body = msgType === 'text'
|
|
497
|
+
? JSON.stringify({ text: content })
|
|
498
|
+
: msgType === 'interactive' ? stampBotmuxCallbackMarkers(content) : content;
|
|
499
|
+
const data = {
|
|
500
|
+
receive_id: openId,
|
|
501
|
+
msg_type: msgType,
|
|
502
|
+
content: body,
|
|
503
|
+
...(uuid ? { uuid } : {}),
|
|
504
|
+
};
|
|
505
|
+
const res = requestOptions
|
|
506
|
+
? await c.request({
|
|
507
|
+
method: 'POST',
|
|
508
|
+
url: '/open-apis/im/v1/messages',
|
|
509
|
+
params: { receive_id_type: 'open_id' },
|
|
510
|
+
data,
|
|
511
|
+
...larkRequestDeadline(requestOptions),
|
|
512
|
+
})
|
|
513
|
+
: await c.im.v1.message.create({
|
|
514
|
+
params: { receive_id_type: 'open_id' },
|
|
515
|
+
data,
|
|
516
|
+
});
|
|
517
|
+
if (res.code !== 0) {
|
|
518
|
+
throw new Error(`Failed to send user message: ${res.msg} (code: ${res.code})`);
|
|
519
|
+
}
|
|
520
|
+
const messageId = res.data?.message_id;
|
|
521
|
+
if (!messageId)
|
|
522
|
+
throw new Error('No message_id in response');
|
|
523
|
+
logger.info(`Sent DM ${messageId} to user ${openId}`);
|
|
524
|
+
return messageId;
|
|
525
|
+
}, requestOptions?.signal ? { signal: requestOptions.signal } : undefined);
|
|
515
526
|
}
|
|
516
527
|
export async function getChatInfo(larkAppId, chatId) {
|
|
517
528
|
const c = getBotClient(larkAppId);
|
|
@@ -761,19 +772,21 @@ export async function getChatMode(larkAppId, chatId, options = {}) {
|
|
|
761
772
|
*/
|
|
762
773
|
export async function deleteMessage(larkAppId, messageId) {
|
|
763
774
|
assertLarkTransport(larkAppId, 'deleteMessage');
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
775
|
+
return executeWithLarkGate(larkAppId, 'deleteMessage', async () => {
|
|
776
|
+
const c = getBotClient(larkAppId);
|
|
777
|
+
try {
|
|
778
|
+
const res = await c.im.v1.message.delete({ path: { message_id: messageId } });
|
|
779
|
+
if (res && typeof res.code === 'number' && res.code !== 0) {
|
|
780
|
+
logger.debug(`Delete message ${messageId} returned non-zero code: ${res.code} ${res.msg ?? ''}`);
|
|
781
|
+
return false;
|
|
782
|
+
}
|
|
783
|
+
return true;
|
|
784
|
+
}
|
|
785
|
+
catch (err) {
|
|
786
|
+
logger.debug(`Failed to delete message ${messageId}: ${err}`);
|
|
769
787
|
return false;
|
|
770
788
|
}
|
|
771
|
-
|
|
772
|
-
}
|
|
773
|
-
catch (err) {
|
|
774
|
-
logger.debug(`Failed to delete message ${messageId}: ${err}`);
|
|
775
|
-
return false;
|
|
776
|
-
}
|
|
789
|
+
});
|
|
777
790
|
}
|
|
778
791
|
/** Error code Feishu returns from `ephemeral/v1/send` when the target chat is a
|
|
779
792
|
* topic / thread chat. Ephemeral cards only work in plain `group` chats (see
|
|
@@ -788,25 +801,27 @@ export const LARK_CODE_EPHEMERAL_NOT_GROUP = 18053;
|
|
|
788
801
|
*/
|
|
789
802
|
export async function sendEphemeralCard(larkAppId, chatId, openId, cardJson) {
|
|
790
803
|
assertLarkTransport(larkAppId, 'sendEphemeralCard');
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
804
|
+
return executeWithLarkGate(larkAppId, 'sendEphemeralCard', async () => {
|
|
805
|
+
const c = getBotClient(larkAppId);
|
|
806
|
+
let card;
|
|
807
|
+
try {
|
|
808
|
+
card = JSON.parse(stampBotmuxCallbackMarkers(cardJson));
|
|
809
|
+
}
|
|
810
|
+
catch (err) {
|
|
811
|
+
throw new Error(`Invalid ephemeral card JSON: ${err}`);
|
|
812
|
+
}
|
|
813
|
+
const res = await c.request({
|
|
814
|
+
method: 'POST',
|
|
815
|
+
url: '/open-apis/ephemeral/v1/send',
|
|
816
|
+
data: { chat_id: chatId, open_id: openId, msg_type: 'interactive', card },
|
|
817
|
+
});
|
|
818
|
+
if (res.code !== 0) {
|
|
819
|
+
throw new Error(`Failed to send ephemeral card: ${res.msg} (code: ${res.code})`);
|
|
820
|
+
}
|
|
821
|
+
const messageId = res.data?.message_id;
|
|
822
|
+
logger.info(`Sent ephemeral card ${messageId ?? '(no id)'} to ${openId} in chat ${chatId}`);
|
|
823
|
+
return messageId ?? '';
|
|
803
824
|
});
|
|
804
|
-
if (res.code !== 0) {
|
|
805
|
-
throw new Error(`Failed to send ephemeral card: ${res.msg} (code: ${res.code})`);
|
|
806
|
-
}
|
|
807
|
-
const messageId = res.data?.message_id;
|
|
808
|
-
logger.info(`Sent ephemeral card ${messageId ?? '(no id)'} to ${openId} in chat ${chatId}`);
|
|
809
|
-
return messageId ?? '';
|
|
810
825
|
}
|
|
811
826
|
/**
|
|
812
827
|
* Delete a previously-sent ephemeral card (`ephemeral/v1/delete`). Ephemeral
|
|
@@ -819,45 +834,49 @@ export async function sendEphemeralCard(larkAppId, chatId, openId, cardJson) {
|
|
|
819
834
|
*/
|
|
820
835
|
export async function deleteEphemeralCard(larkAppId, messageId) {
|
|
821
836
|
assertLarkTransport(larkAppId, 'deleteEphemeralCard');
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
837
|
+
return executeWithLarkGate(larkAppId, 'deleteEphemeralCard', async () => {
|
|
838
|
+
const c = getBotClient(larkAppId);
|
|
839
|
+
try {
|
|
840
|
+
const res = await c.request({
|
|
841
|
+
method: 'POST',
|
|
842
|
+
url: '/open-apis/ephemeral/v1/delete',
|
|
843
|
+
data: { message_id: messageId },
|
|
844
|
+
});
|
|
845
|
+
if (res && typeof res.code === 'number' && res.code !== 0) {
|
|
846
|
+
logger.debug(`Delete ephemeral card ${messageId} returned non-zero code: ${res.code} ${res.msg ?? ''}`);
|
|
847
|
+
return false;
|
|
848
|
+
}
|
|
849
|
+
return true;
|
|
850
|
+
}
|
|
851
|
+
catch (err) {
|
|
852
|
+
logger.debug(`Failed to delete ephemeral card ${messageId}: ${err}`);
|
|
831
853
|
return false;
|
|
832
854
|
}
|
|
833
|
-
|
|
834
|
-
}
|
|
835
|
-
catch (err) {
|
|
836
|
-
logger.debug(`Failed to delete ephemeral card ${messageId}: ${err}`);
|
|
837
|
-
return false;
|
|
838
|
-
}
|
|
855
|
+
});
|
|
839
856
|
}
|
|
840
857
|
export async function updateMessage(larkAppId, messageId, cardJson) {
|
|
841
858
|
assertLarkTransport(larkAppId, 'updateMessage');
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
catch (err) {
|
|
851
|
-
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
852
|
-
throw new MessageWithdrawnError(messageId);
|
|
859
|
+
return executeWithLarkGate(larkAppId, 'updateMessage', async () => {
|
|
860
|
+
const c = getBotClient(larkAppId);
|
|
861
|
+
let res;
|
|
862
|
+
try {
|
|
863
|
+
res = await c.im.v1.message.patch({
|
|
864
|
+
path: { message_id: messageId },
|
|
865
|
+
data: { content: stampBotmuxCallbackMarkers(cardJson) },
|
|
866
|
+
});
|
|
853
867
|
}
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
throw
|
|
859
|
-
|
|
860
|
-
|
|
868
|
+
catch (err) {
|
|
869
|
+
if (getLarkErrorCode(err) === LARK_CODE_MESSAGE_WITHDRAWN) {
|
|
870
|
+
throw new MessageWithdrawnError(messageId);
|
|
871
|
+
}
|
|
872
|
+
throw err;
|
|
873
|
+
}
|
|
874
|
+
if (res.code !== 0) {
|
|
875
|
+
if (res.code === LARK_CODE_MESSAGE_WITHDRAWN)
|
|
876
|
+
throw new MessageWithdrawnError(messageId);
|
|
877
|
+
throw new Error(`Failed to update message: ${res.msg} (code: ${res.code})`);
|
|
878
|
+
}
|
|
879
|
+
});
|
|
861
880
|
}
|
|
862
881
|
export async function getMessageDetail(larkAppId, messageId, options = {}) {
|
|
863
882
|
const c = getBotClient(larkAppId);
|
|
@@ -1027,39 +1046,43 @@ const EXT_TO_FILE_TYPE = {
|
|
|
1027
1046
|
};
|
|
1028
1047
|
export async function uploadImage(larkAppId, imagePath) {
|
|
1029
1048
|
assertLarkTransport(larkAppId, 'uploadImage');
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1049
|
+
return executeWithLarkGate(larkAppId, 'uploadImage', async () => {
|
|
1050
|
+
const c = getBotUploadClient(larkAppId);
|
|
1051
|
+
const buf = readFileSync(imagePath);
|
|
1052
|
+
// SDK returns { image_key } directly (not wrapped in { code, data })
|
|
1053
|
+
const res = await c.im.v1.image.create({
|
|
1054
|
+
data: { image_type: 'message', image: buf },
|
|
1055
|
+
});
|
|
1056
|
+
const imageKey = res?.image_key;
|
|
1057
|
+
if (!imageKey)
|
|
1058
|
+
throw new Error(`Failed to upload image: no image_key in response (${JSON.stringify(res)})`);
|
|
1059
|
+
logger.info(`Uploaded image ${imagePath} → ${imageKey}`);
|
|
1060
|
+
return imageKey;
|
|
1035
1061
|
});
|
|
1036
|
-
const imageKey = res?.image_key;
|
|
1037
|
-
if (!imageKey)
|
|
1038
|
-
throw new Error(`Failed to upload image: no image_key in response (${JSON.stringify(res)})`);
|
|
1039
|
-
logger.info(`Uploaded image ${imagePath} → ${imageKey}`);
|
|
1040
|
-
return imageKey;
|
|
1041
1062
|
}
|
|
1042
1063
|
export async function uploadFile(larkAppId, filePath, opts) {
|
|
1043
1064
|
assertLarkTransport(larkAppId, 'uploadFile');
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1065
|
+
return executeWithLarkGate(larkAppId, 'uploadFile', async () => {
|
|
1066
|
+
const c = getBotUploadClient(larkAppId);
|
|
1067
|
+
const buf = readFileSync(filePath);
|
|
1068
|
+
const ext = extname(filePath).toLowerCase();
|
|
1069
|
+
const fileType = EXT_TO_FILE_TYPE[ext] ?? 'stream';
|
|
1070
|
+
const fileName = basename(filePath);
|
|
1071
|
+
// `duration` (ms) only applies to opus voice uploads — it sets the length
|
|
1072
|
+
// shown on the Feishu voice bubble. Lark wants ≥1000ms; clamp up.
|
|
1073
|
+
const duration = fileType === 'opus' && opts?.duration
|
|
1074
|
+
? Math.max(1000, Math.round(opts.duration))
|
|
1075
|
+
: undefined;
|
|
1076
|
+
// SDK returns { file_key } directly (not wrapped in { code, data })
|
|
1077
|
+
const res = await c.im.v1.file.create({
|
|
1078
|
+
data: { file_type: fileType, file_name: fileName, file: buf, ...(duration ? { duration } : {}) },
|
|
1079
|
+
});
|
|
1080
|
+
const fileKey = res?.file_key;
|
|
1081
|
+
if (!fileKey)
|
|
1082
|
+
throw new Error(`Failed to upload file: no file_key in response (${JSON.stringify(res)})`);
|
|
1083
|
+
logger.info(`Uploaded file ${filePath} → ${fileKey}`);
|
|
1084
|
+
return fileKey;
|
|
1057
1085
|
});
|
|
1058
|
-
const fileKey = res?.file_key;
|
|
1059
|
-
if (!fileKey)
|
|
1060
|
-
throw new Error(`Failed to upload file: no file_key in response (${JSON.stringify(res)})`);
|
|
1061
|
-
logger.info(`Uploaded file ${filePath} → ${fileKey}`);
|
|
1062
|
-
return fileKey;
|
|
1063
1086
|
}
|
|
1064
1087
|
export async function resolveAllowedUsersWithMap(larkAppId, raw) {
|
|
1065
1088
|
const map = new Map();
|