@ihazz/bitrix24 1.1.2 → 1.1.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.
- package/README.md +5 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/src/access-control.d.ts +43 -0
- package/dist/src/access-control.d.ts.map +1 -0
- package/dist/src/access-control.js +128 -0
- package/dist/src/access-control.js.map +1 -0
- package/dist/src/api.d.ts +161 -0
- package/dist/src/api.d.ts.map +1 -0
- package/dist/src/api.js +357 -0
- package/dist/src/api.js.map +1 -0
- package/dist/src/bot-avatar.d.ts +7 -0
- package/dist/src/bot-avatar.d.ts.map +1 -0
- package/dist/src/bot-avatar.js +7 -0
- package/dist/src/bot-avatar.js.map +1 -0
- package/dist/src/channel.d.ts +216 -0
- package/dist/src/channel.d.ts.map +1 -0
- package/dist/src/channel.js +2324 -0
- package/dist/src/channel.js.map +1 -0
- package/dist/src/commands.d.ts +22 -0
- package/dist/src/commands.d.ts.map +1 -0
- package/dist/src/commands.js +160 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/config-schema.d.ts +356 -0
- package/dist/src/config-schema.d.ts.map +1 -0
- package/dist/src/config-schema.js +43 -0
- package/dist/src/config-schema.js.map +1 -0
- package/dist/src/config.d.ts +11 -0
- package/dist/src/config.d.ts.map +1 -0
- package/dist/src/config.js +50 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/dedup.d.ts +22 -0
- package/dist/src/dedup.d.ts.map +1 -0
- package/dist/src/dedup.js +49 -0
- package/dist/src/dedup.js.map +1 -0
- package/dist/src/group-access.d.ts +52 -0
- package/dist/src/group-access.d.ts.map +1 -0
- package/dist/src/group-access.js +180 -0
- package/dist/src/group-access.js.map +1 -0
- package/dist/src/history-cache.d.ts +41 -0
- package/dist/src/history-cache.d.ts.map +1 -0
- package/dist/src/history-cache.js +82 -0
- package/dist/src/history-cache.js.map +1 -0
- package/dist/src/i18n.d.ts +22 -0
- package/dist/src/i18n.d.ts.map +1 -0
- package/dist/src/i18n.js +175 -0
- package/dist/src/i18n.js.map +1 -0
- package/dist/src/inbound-handler.d.ts +92 -0
- package/dist/src/inbound-handler.d.ts.map +1 -0
- package/dist/src/inbound-handler.js +417 -0
- package/dist/src/inbound-handler.js.map +1 -0
- package/dist/src/media-service.d.ts +52 -0
- package/dist/src/media-service.d.ts.map +1 -0
- package/dist/src/media-service.js +423 -0
- package/dist/src/media-service.js.map +1 -0
- package/dist/src/message-utils.d.ts +34 -0
- package/dist/src/message-utils.d.ts.map +1 -0
- package/dist/src/message-utils.js +392 -0
- package/dist/src/message-utils.js.map +1 -0
- package/dist/src/polling-service.d.ts +39 -0
- package/dist/src/polling-service.d.ts.map +1 -0
- package/dist/src/polling-service.js +204 -0
- package/dist/src/polling-service.js.map +1 -0
- package/dist/src/rate-limiter.d.ts +22 -0
- package/dist/src/rate-limiter.d.ts.map +1 -0
- package/dist/src/rate-limiter.js +72 -0
- package/dist/src/rate-limiter.js.map +1 -0
- package/dist/src/runtime.d.ts +106 -0
- package/dist/src/runtime.d.ts.map +1 -0
- package/dist/src/runtime.js +11 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/send-service.d.ts +66 -0
- package/dist/src/send-service.d.ts.map +1 -0
- package/dist/src/send-service.js +177 -0
- package/dist/src/send-service.js.map +1 -0
- package/dist/src/state-paths.d.ts +3 -0
- package/dist/src/state-paths.d.ts.map +1 -0
- package/dist/src/state-paths.js +23 -0
- package/dist/src/state-paths.js.map +1 -0
- package/dist/src/types.d.ts +381 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +3 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +60 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +131 -0
- package/dist/src/utils.js.map +1 -0
- package/index.ts +1 -1
- package/openclaw.plugin.json +278 -1
- package/package.json +11 -2
- package/src/api.ts +0 -3
- package/src/channel.ts +76 -73
- package/src/config-schema.ts +1 -2
- package/src/config.ts +6 -8
- package/src/group-access.ts +1 -8
- package/src/inbound-handler.ts +128 -15
- package/src/media-service.ts +160 -45
- package/src/polling-service.ts +2 -3
- package/src/send-service.ts +4 -3
- package/src/state-paths.ts +4 -0
- package/src/types.ts +1 -2
- package/src/utils.ts +31 -4
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
import { parse as parseQueryString } from 'qs';
|
|
2
|
+
import { Dedup } from './dedup.js';
|
|
3
|
+
import { createVerboseLogger, defaultLogger } from './utils.js';
|
|
4
|
+
export class InboundHandler {
|
|
5
|
+
dedup;
|
|
6
|
+
config;
|
|
7
|
+
logger;
|
|
8
|
+
verboseLog;
|
|
9
|
+
onMessage;
|
|
10
|
+
onJoinChat;
|
|
11
|
+
onReactionChange;
|
|
12
|
+
onCommand;
|
|
13
|
+
onBotDelete;
|
|
14
|
+
constructor(opts) {
|
|
15
|
+
this.dedup = new Dedup();
|
|
16
|
+
this.config = opts.config;
|
|
17
|
+
this.verboseLog = Boolean(opts.config.verboseLog);
|
|
18
|
+
this.logger = createVerboseLogger(opts.logger ?? defaultLogger, this.verboseLog);
|
|
19
|
+
this.onMessage = opts.onMessage;
|
|
20
|
+
this.onJoinChat = opts.onJoinChat;
|
|
21
|
+
this.onReactionChange = opts.onReactionChange;
|
|
22
|
+
this.onCommand = opts.onCommand;
|
|
23
|
+
this.onBotDelete = opts.onBotDelete;
|
|
24
|
+
}
|
|
25
|
+
// ─── V2 FETCH mode event handling ───────────────────────────────────────
|
|
26
|
+
/**
|
|
27
|
+
* Handle a single event item from imbot.v2.Event.get (FETCH mode).
|
|
28
|
+
* V2 events have camelCase fields and nested bot/message/chat/user objects.
|
|
29
|
+
*/
|
|
30
|
+
async handleFetchEvent(item, fetchCtx) {
|
|
31
|
+
const eventType = item.type;
|
|
32
|
+
this.logger.debug(`Fetch event: ${eventType} (id=${item.eventId})`);
|
|
33
|
+
switch (eventType) {
|
|
34
|
+
case 'ONIMBOTV2MESSAGEADD':
|
|
35
|
+
return this.handleV2Message(item, fetchCtx, 'bot');
|
|
36
|
+
case 'ONIMV2MESSAGEADD':
|
|
37
|
+
return this.handleV2Message(item, fetchCtx, 'user');
|
|
38
|
+
case 'ONIMBOTV2JOINCHAT':
|
|
39
|
+
return this.handleV2JoinChat(item, fetchCtx);
|
|
40
|
+
case 'ONIMBOTV2COMMANDADD':
|
|
41
|
+
return this.handleV2Command(item, fetchCtx);
|
|
42
|
+
case 'ONIMBOTV2REACTIONCHANGE':
|
|
43
|
+
return this.handleV2ReactionChange(item, fetchCtx, 'bot');
|
|
44
|
+
case 'ONIMV2REACTIONCHANGE':
|
|
45
|
+
return this.handleV2ReactionChange(item, fetchCtx, 'user');
|
|
46
|
+
case 'ONIMBOTV2DELETE':
|
|
47
|
+
await this.onBotDelete?.(item.data);
|
|
48
|
+
return true;
|
|
49
|
+
case 'ONIMBOTV2MESSAGEUPDATE':
|
|
50
|
+
case 'ONIMBOTV2MESSAGEDELETE':
|
|
51
|
+
case 'ONIMBOTV2CONTEXTGET':
|
|
52
|
+
case 'ONIMV2MESSAGEUPDATE':
|
|
53
|
+
case 'ONIMV2MESSAGEDELETE':
|
|
54
|
+
case 'ONIMV2JOINCHAT':
|
|
55
|
+
this.logger.debug(`Fetch: skipping ${eventType} (not handled)`);
|
|
56
|
+
return true;
|
|
57
|
+
default:
|
|
58
|
+
this.logger.debug(`Fetch: unhandled event type ${eventType}`);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Handle V2 ONIMBOTV2MESSAGEADD event.
|
|
64
|
+
* V2 data: { bot, message, chat, user, language }
|
|
65
|
+
*/
|
|
66
|
+
async handleV2Message(item, fetchCtx, eventScope) {
|
|
67
|
+
const data = item.data;
|
|
68
|
+
// Runtime guard: ensure essential V2 data fields exist
|
|
69
|
+
if (!data?.message || !data?.user) {
|
|
70
|
+
this.logger.warn('Fetch: MESSAGEADD event missing message or user data, skipping', { eventId: item.eventId });
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
const rawMessageId = data.message.id ?? item.eventId;
|
|
74
|
+
if (rawMessageId == null) {
|
|
75
|
+
this.logger.warn('Fetch: MESSAGEADD event missing both message.id and eventId, skipping');
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
const messageId = String(rawMessageId);
|
|
79
|
+
const dedupKey = `${eventScope}:${messageId}`;
|
|
80
|
+
if (this.dedup.isDuplicate(dedupKey)) {
|
|
81
|
+
this.logger.debug(`Fetch: duplicate message ${messageId} for scope ${eventScope}, skipping`);
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
const dialogId = String(data.chat?.dialogId ?? data.message.chatId ?? data.user.id ?? '');
|
|
85
|
+
if (!dialogId) {
|
|
86
|
+
this.logger.warn('Fetch: message event has no dialogId, skipping');
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
const isP2P = !dialogId.startsWith('chat');
|
|
90
|
+
// Extract file attachments from message params
|
|
91
|
+
const media = extractFilesFromParams(data.message.params);
|
|
92
|
+
if (this.verboseLog) {
|
|
93
|
+
this.logger.info('Fetch: message payload', {
|
|
94
|
+
eventId: item.eventId,
|
|
95
|
+
messageId,
|
|
96
|
+
dialogId,
|
|
97
|
+
chatId: data.message.chatId,
|
|
98
|
+
forward: data.message.forward,
|
|
99
|
+
params: data.message.params,
|
|
100
|
+
text: data.message.text,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this.logger.info('Fetch: message payload', {
|
|
105
|
+
eventId: item.eventId,
|
|
106
|
+
messageId,
|
|
107
|
+
dialogId,
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const ctx = {
|
|
111
|
+
channel: 'bitrix24',
|
|
112
|
+
eventScope,
|
|
113
|
+
senderId: String(data.user?.id ?? dialogId),
|
|
114
|
+
senderName: data.user?.name ?? dialogId,
|
|
115
|
+
senderFirstName: data.user?.firstName,
|
|
116
|
+
chatId: dialogId,
|
|
117
|
+
chatInternalId: String(data.message?.chatId ?? dialogId),
|
|
118
|
+
chatName: data.chat?.name,
|
|
119
|
+
chatType: data.chat?.type,
|
|
120
|
+
messageId,
|
|
121
|
+
replyToMessageId: extractReplyToMessageId(data.message.params),
|
|
122
|
+
isForwarded: isForwardedMessage(data.message.forward),
|
|
123
|
+
wasMentioned: eventScope === 'bot' && !isP2P && isMessageMentioningBot({
|
|
124
|
+
text: data.message?.text ?? '',
|
|
125
|
+
botId: fetchCtx.botId,
|
|
126
|
+
botName: this.config.botName,
|
|
127
|
+
botCode: this.config.botCode,
|
|
128
|
+
}),
|
|
129
|
+
text: data.message?.text ?? '',
|
|
130
|
+
isDm: isP2P,
|
|
131
|
+
isGroup: !isP2P,
|
|
132
|
+
media,
|
|
133
|
+
language: data.language,
|
|
134
|
+
timestamp: parseEventTimestamp(data.message?.date ?? item.date),
|
|
135
|
+
raw: item,
|
|
136
|
+
botId: fetchCtx.botId,
|
|
137
|
+
memberId: '',
|
|
138
|
+
};
|
|
139
|
+
await this.onMessage?.(ctx);
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Handle V2 ONIMBOTV2REACTIONCHANGE / ONIMV2REACTIONCHANGE event.
|
|
144
|
+
*/
|
|
145
|
+
async handleV2ReactionChange(item, fetchCtx, eventScope) {
|
|
146
|
+
const data = item.data;
|
|
147
|
+
if (!data?.message || !data?.user) {
|
|
148
|
+
this.logger.warn('Fetch: REACTIONCHANGE event missing message or user data, skipping', { eventId: item.eventId });
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
const messageId = String(data.message.id ?? '');
|
|
152
|
+
if (!messageId) {
|
|
153
|
+
this.logger.warn('Fetch: reaction event has no message id, skipping', { eventId: item.eventId });
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
const action = normalizeReactionAction(data.action);
|
|
157
|
+
if (!action) {
|
|
158
|
+
this.logger.warn('Fetch: reaction event has invalid action, skipping', {
|
|
159
|
+
eventId: item.eventId,
|
|
160
|
+
action: data.action,
|
|
161
|
+
});
|
|
162
|
+
return true;
|
|
163
|
+
}
|
|
164
|
+
const dialogId = String(data.chat?.dialogId ?? data.message.chatId ?? data.user.id ?? '');
|
|
165
|
+
if (!dialogId) {
|
|
166
|
+
this.logger.warn('Fetch: reaction event has no dialogId, skipping', { eventId: item.eventId });
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
await this.onReactionChange?.({
|
|
170
|
+
eventScope,
|
|
171
|
+
senderId: String(data.user.id ?? ''),
|
|
172
|
+
dialogId,
|
|
173
|
+
chatId: String(data.chat?.id ?? data.message.chatId ?? dialogId),
|
|
174
|
+
messageId,
|
|
175
|
+
messageAuthorId: String(data.message.authorId ?? ''),
|
|
176
|
+
reaction: String(data.reaction ?? ''),
|
|
177
|
+
action,
|
|
178
|
+
language: data.language,
|
|
179
|
+
fetchCtx,
|
|
180
|
+
});
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Handle V2 ONIMBOTV2JOINCHAT event.
|
|
185
|
+
*/
|
|
186
|
+
async handleV2JoinChat(item, fetchCtx) {
|
|
187
|
+
const data = item.data;
|
|
188
|
+
if (!data?.chat || !data?.dialogId) {
|
|
189
|
+
this.logger.warn('Fetch: JOINCHAT event missing chat or dialogId, skipping', { eventId: item.eventId });
|
|
190
|
+
return true;
|
|
191
|
+
}
|
|
192
|
+
const joinCtx = {
|
|
193
|
+
senderId: String(data.user?.id ?? data.dialogId),
|
|
194
|
+
dialogId: data.dialogId,
|
|
195
|
+
chatId: String(data.chat.id ?? data.dialogId),
|
|
196
|
+
chatType: data.chat.type,
|
|
197
|
+
language: data.language,
|
|
198
|
+
fetchCtx,
|
|
199
|
+
};
|
|
200
|
+
await this.onJoinChat?.(joinCtx);
|
|
201
|
+
return true;
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Handle V2 ONIMBOTV2COMMANDADD event.
|
|
205
|
+
* V2 data: { bot, command, message, chat, user, language }
|
|
206
|
+
*/
|
|
207
|
+
async handleV2Command(item, fetchCtx) {
|
|
208
|
+
const data = item.data;
|
|
209
|
+
const rawCommand = typeof data.command?.command === 'string' ? data.command.command : '';
|
|
210
|
+
const commandName = rawCommand.replace(/^\//, '');
|
|
211
|
+
if (!commandName) {
|
|
212
|
+
this.logger.warn('Fetch: command event has no command name, skipping');
|
|
213
|
+
return true;
|
|
214
|
+
}
|
|
215
|
+
const commandId = Number(data.command?.id ?? 0);
|
|
216
|
+
if (!Number.isFinite(commandId) || commandId <= 0) {
|
|
217
|
+
this.logger.warn('Fetch: command event has no commandId, skipping');
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
const commandParams = typeof data.command?.params === 'string'
|
|
221
|
+
? data.command.params.trim()
|
|
222
|
+
: '';
|
|
223
|
+
const commandText = commandParams
|
|
224
|
+
? `/${commandName} ${commandParams}`
|
|
225
|
+
: `/${commandName}`;
|
|
226
|
+
const dialogId = String(data.chat?.dialogId ?? data.message?.chatId ?? data.user?.id ?? '');
|
|
227
|
+
if (!dialogId) {
|
|
228
|
+
this.logger.warn('Fetch: command event has no dialogId, skipping');
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
const isP2P = !dialogId.startsWith('chat');
|
|
232
|
+
const cmdCtx = {
|
|
233
|
+
commandId,
|
|
234
|
+
commandName,
|
|
235
|
+
commandParams,
|
|
236
|
+
commandText,
|
|
237
|
+
senderId: String(data.user?.id ?? dialogId),
|
|
238
|
+
dialogId,
|
|
239
|
+
chatId: String(data.chat?.id ?? data.message?.chatId ?? dialogId),
|
|
240
|
+
chatType: isP2P ? 'P' : String(data.chat?.type ?? ''),
|
|
241
|
+
messageId: String(data.message?.id ?? item.eventId),
|
|
242
|
+
language: data.language,
|
|
243
|
+
fetchCtx,
|
|
244
|
+
};
|
|
245
|
+
await this.onCommand?.(cmdCtx);
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
// ─── V2 Webhook mode event handling ─────────────────────────────────────
|
|
249
|
+
/**
|
|
250
|
+
* Handle an incoming V2 webhook POST body.
|
|
251
|
+
* V2 webhooks deliver JSON with { event, data } structure.
|
|
252
|
+
*/
|
|
253
|
+
async handleWebhook(rawBody) {
|
|
254
|
+
let payload;
|
|
255
|
+
if (typeof rawBody === 'string') {
|
|
256
|
+
try {
|
|
257
|
+
payload = JSON.parse(rawBody);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
const parsedBody = parseQueryString(rawBody, {
|
|
261
|
+
allowDots: true,
|
|
262
|
+
depth: 3,
|
|
263
|
+
parameterLimit: 200,
|
|
264
|
+
parseArrays: true,
|
|
265
|
+
});
|
|
266
|
+
if (!parsedBody || typeof parsedBody !== 'object' || !('event' in parsedBody)) {
|
|
267
|
+
this.logger.warn('Failed to parse V2 webhook body');
|
|
268
|
+
return false;
|
|
269
|
+
}
|
|
270
|
+
payload = parsedBody;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else if (rawBody && typeof rawBody === 'object' && 'event' in rawBody) {
|
|
274
|
+
payload = rawBody;
|
|
275
|
+
}
|
|
276
|
+
else {
|
|
277
|
+
this.logger.warn('Webhook body missing "event" field', { type: typeof rawBody });
|
|
278
|
+
return false;
|
|
279
|
+
}
|
|
280
|
+
const eventType = payload.event;
|
|
281
|
+
if (!eventType) {
|
|
282
|
+
const payloadPreview = this.verboseLog
|
|
283
|
+
? {
|
|
284
|
+
hasData: Boolean(payload.data),
|
|
285
|
+
dataKeys: payload.data && typeof payload.data === 'object'
|
|
286
|
+
? Object.keys(payload.data)
|
|
287
|
+
: [],
|
|
288
|
+
hasAuth: Boolean(payload.auth),
|
|
289
|
+
authKeys: payload.auth && typeof payload.auth === 'object'
|
|
290
|
+
? Object.keys(payload.auth)
|
|
291
|
+
: [],
|
|
292
|
+
}
|
|
293
|
+
: undefined;
|
|
294
|
+
this.logger.warn('Received webhook without event type', {
|
|
295
|
+
keys: Object.keys(payload),
|
|
296
|
+
...(payloadPreview ? { payloadPreview } : {}),
|
|
297
|
+
});
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
this.logger.debug(`Received V2 webhook event: ${eventType}`);
|
|
301
|
+
// Convert webhook event to fetch event format and reuse handlers
|
|
302
|
+
// V2 webhook data has same structure as fetch events
|
|
303
|
+
const syntheticItem = {
|
|
304
|
+
eventId: 0,
|
|
305
|
+
type: eventType,
|
|
306
|
+
date: new Date().toISOString(),
|
|
307
|
+
data: payload.data,
|
|
308
|
+
};
|
|
309
|
+
// For webhook mode we need botId from the bot object in the event
|
|
310
|
+
const botData = payload.data;
|
|
311
|
+
const botId = botData?.bot?.id ?? 0;
|
|
312
|
+
const fetchCtx = {
|
|
313
|
+
webhookUrl: this.config.webhookUrl ?? '',
|
|
314
|
+
botId,
|
|
315
|
+
botToken: this.config.botToken ?? '',
|
|
316
|
+
};
|
|
317
|
+
return this.handleFetchEvent(syntheticItem, fetchCtx);
|
|
318
|
+
}
|
|
319
|
+
destroy() {
|
|
320
|
+
this.dedup.destroy();
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
324
|
+
/**
|
|
325
|
+
* Extract media items from V2 message params.
|
|
326
|
+
* In V2, file info may come in params.FILE_ID array.
|
|
327
|
+
* File details are available via imbot.v2.File.download.
|
|
328
|
+
*/
|
|
329
|
+
function normalizeMessageParams(params) {
|
|
330
|
+
if (!params || Array.isArray(params) || typeof params !== 'object') {
|
|
331
|
+
return {};
|
|
332
|
+
}
|
|
333
|
+
return params;
|
|
334
|
+
}
|
|
335
|
+
function extractFilesFromParams(params) {
|
|
336
|
+
const normalizedParams = normalizeMessageParams(params);
|
|
337
|
+
// V2 events may include file IDs in params (array or single value)
|
|
338
|
+
const rawFileIds = normalizedParams.FILE_ID;
|
|
339
|
+
if (rawFileIds == null)
|
|
340
|
+
return [];
|
|
341
|
+
const fileIds = Array.isArray(rawFileIds) ? rawFileIds : [rawFileIds];
|
|
342
|
+
if (!fileIds.length)
|
|
343
|
+
return [];
|
|
344
|
+
return fileIds.map((id) => ({
|
|
345
|
+
id: String(id),
|
|
346
|
+
name: `file_${id}`,
|
|
347
|
+
extension: '',
|
|
348
|
+
size: 0,
|
|
349
|
+
type: 'file',
|
|
350
|
+
}));
|
|
351
|
+
}
|
|
352
|
+
function extractReplyToMessageId(params) {
|
|
353
|
+
const normalizedParams = normalizeMessageParams(params);
|
|
354
|
+
const rawReplyId = normalizedParams.REPLY_ID;
|
|
355
|
+
if (rawReplyId == null) {
|
|
356
|
+
return undefined;
|
|
357
|
+
}
|
|
358
|
+
if (Array.isArray(rawReplyId)) {
|
|
359
|
+
const firstReplyId = rawReplyId.find((value) => value != null && String(value).trim() !== '');
|
|
360
|
+
return firstReplyId == null ? undefined : String(firstReplyId).trim();
|
|
361
|
+
}
|
|
362
|
+
const normalizedReplyId = String(rawReplyId).trim();
|
|
363
|
+
return normalizedReplyId.length > 0 ? normalizedReplyId : undefined;
|
|
364
|
+
}
|
|
365
|
+
function isForwardedMessage(forward) {
|
|
366
|
+
if (forward == null) {
|
|
367
|
+
return false;
|
|
368
|
+
}
|
|
369
|
+
if (typeof forward === 'string') {
|
|
370
|
+
return forward.trim().length > 0;
|
|
371
|
+
}
|
|
372
|
+
return true;
|
|
373
|
+
}
|
|
374
|
+
function parseEventTimestamp(value) {
|
|
375
|
+
if (!value) {
|
|
376
|
+
return undefined;
|
|
377
|
+
}
|
|
378
|
+
const parsed = Date.parse(value);
|
|
379
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
380
|
+
}
|
|
381
|
+
function isMessageMentioningBot(params) {
|
|
382
|
+
const text = params.text.trim();
|
|
383
|
+
if (!text) {
|
|
384
|
+
return false;
|
|
385
|
+
}
|
|
386
|
+
if (params.botId > 0) {
|
|
387
|
+
const botIdPattern = new RegExp(`\\[[A-Z_]+=${params.botId}(?:[^\\]]*)\\]`, 'i');
|
|
388
|
+
if (botIdPattern.test(text)) {
|
|
389
|
+
return true;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
const candidates = [
|
|
393
|
+
params.botCode,
|
|
394
|
+
params.botName,
|
|
395
|
+
]
|
|
396
|
+
.map((candidate) => String(candidate ?? '').trim())
|
|
397
|
+
.filter(Boolean);
|
|
398
|
+
return candidates.some((candidate) => {
|
|
399
|
+
const escaped = escapeRegExp(candidate);
|
|
400
|
+
const mentionPattern = new RegExp(`(^|\\s)@?${escaped}(?=$|[\\s,.:;!?])`, 'i');
|
|
401
|
+
return mentionPattern.test(text);
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
function escapeRegExp(value) {
|
|
405
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
406
|
+
}
|
|
407
|
+
function normalizeReactionAction(value) {
|
|
408
|
+
const action = String(value ?? '').trim().toLowerCase();
|
|
409
|
+
if (action === 'set' || action === 'add') {
|
|
410
|
+
return 'set';
|
|
411
|
+
}
|
|
412
|
+
if (action === 'delete' || action === 'remove') {
|
|
413
|
+
return 'delete';
|
|
414
|
+
}
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=inbound-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbound-handler.js","sourceRoot":"","sources":["../../src/inbound-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Bitrix24Api } from './api.js';
|
|
2
|
+
import type { BotContext } from './api.js';
|
|
3
|
+
import type { Logger } from './types.js';
|
|
4
|
+
export interface DownloadedMedia {
|
|
5
|
+
path: string;
|
|
6
|
+
contentType: string;
|
|
7
|
+
name: string;
|
|
8
|
+
}
|
|
9
|
+
export interface UploadedMedia {
|
|
10
|
+
ok: boolean;
|
|
11
|
+
messageId?: number;
|
|
12
|
+
}
|
|
13
|
+
export { resolveManagedMediaDir } from './state-paths.js';
|
|
14
|
+
export declare class MediaService {
|
|
15
|
+
private api;
|
|
16
|
+
private logger;
|
|
17
|
+
private dirReady;
|
|
18
|
+
constructor(api: Bitrix24Api, logger?: Logger);
|
|
19
|
+
private ensureDir;
|
|
20
|
+
private buildManagedMediaPath;
|
|
21
|
+
private streamResponseToFile;
|
|
22
|
+
private encodeFileToBase64;
|
|
23
|
+
private resolveManagedUploadPath;
|
|
24
|
+
private fetchDownloadResponse;
|
|
25
|
+
/**
|
|
26
|
+
* Download a file from B24 using imbot.v2.File.download.
|
|
27
|
+
* Single-step: get download URL, then fetch the file.
|
|
28
|
+
*/
|
|
29
|
+
downloadMedia(params: {
|
|
30
|
+
fileId: string;
|
|
31
|
+
fileName: string;
|
|
32
|
+
extension: string;
|
|
33
|
+
webhookUrl: string;
|
|
34
|
+
bot: BotContext;
|
|
35
|
+
dialogId: string;
|
|
36
|
+
}): Promise<DownloadedMedia | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Upload a local file to a B24 chat using imbot.v2.File.upload.
|
|
39
|
+
* Single call replaces the old 3-step process (folder.get → upload → commit).
|
|
40
|
+
*/
|
|
41
|
+
uploadMediaToChat(params: {
|
|
42
|
+
localPath: string;
|
|
43
|
+
fileName: string;
|
|
44
|
+
webhookUrl: string;
|
|
45
|
+
bot: BotContext;
|
|
46
|
+
dialogId: string;
|
|
47
|
+
message?: string;
|
|
48
|
+
}): Promise<UploadedMedia>;
|
|
49
|
+
cleanupDownloadedMedia(paths: string[]): Promise<void>;
|
|
50
|
+
private isManagedMediaPath;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=media-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-service.d.ts","sourceRoot":"","sources":["../../src/media-service.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAIzC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+GD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAsB1D,qBAAa,YAAY;IACvB,OAAO,CAAC,GAAG,CAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;gBAEb,GAAG,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM;YAK/B,SAAS;IAMvB,OAAO,CAAC,qBAAqB;YAcf,oBAAoB;YAiCpB,kBAAkB;YAyBlB,wBAAwB;YAexB,qBAAqB;IAkBnC;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,UAAU,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IA+HnC;;;OAGG;IACG,iBAAiB,CAAC,MAAM,EAAE;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,UAAU,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC,aAAa,CAAC;IAiDpB,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YA2B9C,kBAAkB;CAcjC"}
|