@adriangalilea/utils 0.6.0 → 0.8.0

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 (77) hide show
  1. package/README.md +2 -5
  2. package/dist/bot/access-control.d.ts +91 -58
  3. package/dist/bot/access-control.d.ts.map +1 -1
  4. package/dist/bot/access-control.js +105 -75
  5. package/dist/bot/access-control.js.map +1 -1
  6. package/dist/bot/coalesce.d.ts +107 -0
  7. package/dist/bot/coalesce.d.ts.map +1 -0
  8. package/dist/bot/coalesce.js +155 -0
  9. package/dist/bot/coalesce.js.map +1 -0
  10. package/dist/bot/index.d.ts +4 -0
  11. package/dist/bot/index.d.ts.map +1 -1
  12. package/dist/bot/index.js +4 -0
  13. package/dist/bot/index.js.map +1 -1
  14. package/dist/bot/kit.d.ts.map +1 -1
  15. package/dist/bot/kit.js +6 -0
  16. package/dist/bot/kit.js.map +1 -1
  17. package/dist/bot/language.d.ts +279 -0
  18. package/dist/bot/language.d.ts.map +1 -0
  19. package/dist/bot/language.js +222 -0
  20. package/dist/bot/language.js.map +1 -0
  21. package/dist/bot/menu.d.ts +175 -0
  22. package/dist/bot/menu.d.ts.map +1 -0
  23. package/dist/bot/menu.js +284 -0
  24. package/dist/bot/menu.js.map +1 -0
  25. package/dist/bot/message-history.d.ts +259 -0
  26. package/dist/bot/message-history.d.ts.map +1 -0
  27. package/dist/bot/message-history.js +111 -0
  28. package/dist/bot/message-history.js.map +1 -0
  29. package/package.json +17 -1
  30. package/dist/currency/crypto-symbols-data.d.ts +0 -10
  31. package/dist/currency/crypto-symbols-data.d.ts.map +0 -1
  32. package/dist/currency/crypto-symbols-data.js +0 -13765
  33. package/dist/currency/crypto-symbols-data.js.map +0 -1
  34. package/dist/currency/crypto-symbols.d.ts +0 -20
  35. package/dist/currency/crypto-symbols.d.ts.map +0 -1
  36. package/dist/currency/crypto-symbols.js +0 -23
  37. package/dist/currency/crypto-symbols.js.map +0 -1
  38. package/dist/currency/download-crypto-list.d.ts +0 -10
  39. package/dist/currency/download-crypto-list.d.ts.map +0 -1
  40. package/dist/currency/download-crypto-list.js +0 -69
  41. package/dist/currency/download-crypto-list.js.map +0 -1
  42. package/dist/currency/index.d.ts +0 -84
  43. package/dist/currency/index.d.ts.map +0 -1
  44. package/dist/currency/index.js +0 -230
  45. package/dist/currency/index.js.map +0 -1
  46. package/dist/dir.d.ts +0 -40
  47. package/dist/dir.d.ts.map +0 -1
  48. package/dist/dir.js +0 -108
  49. package/dist/dir.js.map +0 -1
  50. package/dist/file.d.ts +0 -53
  51. package/dist/file.d.ts.map +0 -1
  52. package/dist/file.js +0 -211
  53. package/dist/file.js.map +0 -1
  54. package/dist/format.d.ts +0 -40
  55. package/dist/format.d.ts.map +0 -1
  56. package/dist/format.js +0 -83
  57. package/dist/format.js.map +0 -1
  58. package/dist/kev.d.ts +0 -149
  59. package/dist/kev.d.ts.map +0 -1
  60. package/dist/kev.js +0 -761
  61. package/dist/kev.js.map +0 -1
  62. package/dist/log.d.ts +0 -91
  63. package/dist/log.d.ts.map +0 -1
  64. package/dist/log.js +0 -300
  65. package/dist/log.js.map +0 -1
  66. package/dist/logger.d.ts +0 -91
  67. package/dist/logger.d.ts.map +0 -1
  68. package/dist/logger.js +0 -269
  69. package/dist/logger.js.map +0 -1
  70. package/dist/path.d.ts +0 -67
  71. package/dist/path.d.ts.map +0 -1
  72. package/dist/path.js +0 -107
  73. package/dist/path.js.map +0 -1
  74. package/dist/project.d.ts +0 -35
  75. package/dist/project.d.ts.map +0 -1
  76. package/dist/project.js +0 -154
  77. package/dist/project.js.map +0 -1
@@ -17,53 +17,67 @@
17
17
  * │
18
18
  * stranger's session updated · stranger gets DM
19
19
  *
20
- * **Storage layout.** Per-user state lives in its own key, written
21
- * through `@gramio/session` so the gate read on the hot path costs
22
- * nothing extra (session is loaded for the user already). A single
23
- * tiny index key keeps track of who's pending / approved / denied so
24
- * the `/access` admin menu can list without scanning the whole DB.
20
+ * **Storage layout.** This plugin stores its per-user record under
21
+ * the `access` field of the shared session record (see
22
+ * `bot/CLAUDE.md` § "Shared session, one record per user"). All
23
+ * per-user state across our plugins coexists in the same record:
25
24
  *
26
- * storage:
27
- * access:<userId> → AccessRecord (the user's session)
28
- * ac:index → { pending, approved, denied }
25
+ * storage[String(userId)] = {
26
+ * access: { status, approvedAt, … }, // ← this plugin
27
+ * language: 'es', // bot/language
28
+ * history: { items: [...] }, // ← bot/message-history
29
+ * }
29
30
  *
30
- * **Cross-user mutations.** When you tap `[✅ Aprobar]` on Pepe's
31
- * notification, ctx is *yours* (the admin), so `ctx.access` is your
32
- * own record. To mutate Pepe's record we hit the storage at the same
33
- * key format we registered the session with (`access:<id>`) and
34
- * update the index. This isn't a hack — it's our own module
35
- * coordinating with itself.
31
+ * Plus one tiny admin-side index so `/access` can list pending /
32
+ * approved / denied without scanning every user:
36
33
  *
37
- * **Composes with `adminContext`** (kit.ts) that plugin must be
38
- * extended first or `bot.start()` throws. Inside this plugin,
39
- * `ctx.adminId` and `ctx.isAdmin` are typed.
34
+ * storage['ac:index'] = { pending: [...ids], approved: [...], denied: [...] }
40
35
  *
41
- * Peer deps: `gramio`, `@gramio/storage`, `@gramio/session`.
36
+ * **Cross-user mutations.** When the admin taps `[✅ Aprobar]` on
37
+ * Pepe's notification, `ctx` is the admin's, so `ctx.session` is the
38
+ * admin's record — useless for mutating Pepe. We reach for Pepe's
39
+ * record directly via `storage.get(String(pepeId))`, preserve other
40
+ * plugins' fields in it (read-modify-write), and put it back.
41
+ *
42
+ * **Composes with**:
43
+ * - `adminContext` (kit.ts) — required, gives us `ctx.adminId` /
44
+ * `ctx.isAdmin`. Declared as a runtime dependency.
45
+ * - `@gramio/session` — the user creates ONE session at bot level
46
+ * and passes it to this plugin (and the other session-using
47
+ * ones). gramio's runtime dedup ensures the session derive runs
48
+ * exactly once per update.
49
+ *
50
+ * Peer deps: `gramio`, `@gramio/session`, `@gramio/storage`.
42
51
  *
43
52
  * @example
44
53
  * import { Bot } from 'gramio'
54
+ * import { session } from '@gramio/session'
45
55
  * import { redisStorage } from '@gramio/storage-redis'
46
56
  * import { adminContext, gracefulStart } from '@adriangalilea/utils/bot/kit'
47
57
  * import { accessControl } from '@adriangalilea/utils/bot/access-control'
48
58
  *
49
59
  * const storage = redisStorage()
60
+ * const userSession = session({ storage, key: 'session', initial: () => ({}) })
50
61
  *
51
62
  * const bot = new Bot(process.env.BOT_TOKEN!)
52
63
  * .extend(adminContext({ adminId: 190202471 }))
53
- * .extend(accessControl({ storage, defaults: [1158734055] }))
54
- * .command('start', (ctx) => ctx.send(`hola, source=${ctx.access.source}`))
64
+ * .extend(userSession)
65
+ * .extend(accessControl({ session: userSession, storage, defaults: [1158734055] }))
66
+ * .command('start', (ctx) => ctx.send(`source=${ctx.access.source ?? 'denied'}`))
55
67
  *
56
68
  * await gracefulStart(bot)
57
69
  */
58
70
  import { CallbackData, InlineKeyboard, Plugin, } from 'gramio';
59
- import { session } from '@gramio/session';
60
- import { inMemoryStorage } from '@gramio/storage';
61
- const SESSION_KEY_PREFIX = 'access:';
71
+ // Cross-user mutations (admin approves Pepe → write to Pepe's session)
72
+ // hit `storage` directly using the same key format `@gramio/session`
73
+ // uses by default: `String(userId)`. We preserve other plugins' fields
74
+ // in the same session record by read-modify-write.
62
75
  const INDEX_KEY = 'ac:index';
63
76
  const FIRST_MSG_LIMIT = 200;
64
77
  const DEFAULT_DENY_MSG = 'Este bot es privado. Tu solicitud se ha enviado al admin.';
65
78
  const DEFAULT_THROTTLE_MS = 6 * 60 * 60 * 1000;
66
- const userSessionKey = (userId) => `${SESSION_KEY_PREFIX}${userId}`;
79
+ /** gramio's `@gramio/session` default `getSessionKey` is `String(senderId)`. */
80
+ const sessionKey = (userId) => String(userId);
67
81
  // ─── callback schemas ──────────────────────────────────────────────
68
82
  //
69
83
  // Short `nameId`s keep callback_data under Telegram's 64-byte cap.
@@ -112,15 +126,6 @@ const requestNotificationText = (uid, r, repeat) => {
112
126
  const requestKeyboard = (uid) => new InlineKeyboard()
113
127
  .text('✅ Aprobar', acApprove.pack({ uid }))
114
128
  .text('❌ Denegar', acDeny.pack({ uid }));
115
- let warnedMemory = false;
116
- const warnedMemoryStorage = () => {
117
- if (!warnedMemory) {
118
- warnedMemory = true;
119
- console.warn('[access-control] using inMemoryStorage — approvals will not survive restarts. ' +
120
- 'Pass `storage: redisStorage()` (or sqliteStorage / cloudflareStorage) for persistence.');
121
- }
122
- return inMemoryStorage();
123
- };
124
129
  // ─── index helpers ─────────────────────────────────────────────────
125
130
  const emptyIndex = () => ({ pending: [], approved: [], denied: [] });
126
131
  const loadIndex = async (storage) => {
@@ -157,27 +162,33 @@ const indexMove = async (storage, uid, from, to) => {
157
162
  idx[to].push(uid);
158
163
  await saveIndex(storage, idx);
159
164
  };
160
- // ─── per-user record helpers (cross-user storage access) ───────────
161
- const loadRecord = async (storage, userId) => (await storage.get(userSessionKey(userId)));
162
- const saveRecord = (storage, userId, rec) => storage.set(userSessionKey(userId), rec);
165
+ const loadFullRecord = async (storage, userId) => (await storage.get(sessionKey(userId))) ?? {};
166
+ const saveAccess = async (storage, userId, rec) => {
167
+ const full = await loadFullRecord(storage, userId);
168
+ full.access = rec;
169
+ await storage.set(sessionKey(userId), full);
170
+ };
171
+ const loadAccess = async (storage, userId) => {
172
+ const full = await loadFullRecord(storage, userId);
173
+ return full.access;
174
+ };
163
175
  // ─── plugin ────────────────────────────────────────────────────────
164
- export const accessControl = (opts = {}) => {
165
- const storage = opts.storage ?? warnedMemoryStorage();
176
+ export const accessControl = (opts) => {
177
+ const { session: sessionPlugin, storage } = opts;
166
178
  const defaults = new Set(opts.defaults ?? []);
167
179
  const denyMessage = opts.denyMessage === false ? null : (opts.denyMessage ?? DEFAULT_DENY_MSG);
168
180
  const throttleMs = opts.notifyThrottleMs ?? DEFAULT_THROTTLE_MS;
169
- return (new Plugin('@adriangalilea/utils/bot/access-control', {
181
+ return (
182
+ // Generic declares dependency on adminContext's derives so
183
+ // ctx.adminId / ctx.isAdmin are typed inside our handlers.
184
+ // Session-side types flow through `.extend(opts.session)` below
185
+ // and TypeScript merges them with our generic via the chain.
186
+ new Plugin('@adriangalilea/utils/bot/access-control', {
170
187
  dependencies: ['@adriangalilea/utils/bot/admin'],
171
188
  })
172
- // Per-user record lives in this session (storage key `access:<senderId>`).
173
- // The internal name `_accessSession` is plumbing consumers read
174
- // `ctx.access` (computed below) instead.
175
- .extend(session({
176
- storage,
177
- key: '_accessSession',
178
- getSessionKey: (ctx) => userSessionKey(ctx.senderId ?? 0),
179
- initial: () => ({ status: 'unknown' }),
180
- }))
189
+ // Declare the shared session as a dependency. gramio's runtime
190
+ // dedups against the bot's top-level extension; types flow.
191
+ .extend(sessionPlugin)
181
192
  // Compute the gate decision so handlers can read `ctx.access` ergonomically.
182
193
  .derive((ctx) => {
183
194
  // Only message + callback_query carry a senderId we can gate on.
@@ -191,7 +202,9 @@ export const accessControl = (opts = {}) => {
191
202
  if (defaults.has(senderId)) {
192
203
  return { access: { allowed: true, source: 'default' } };
193
204
  }
194
- const rec = ctx._accessSession;
205
+ // ctx.session.access may be undefined for first-ever interaction
206
+ // (session.initial() returns {} so .access isn't set yet).
207
+ const rec = ctx.session.access ?? { status: 'unknown' };
195
208
  if (rec.status === 'approved') {
196
209
  return { access: { allowed: true, source: 'store', record: rec } };
197
210
  }
@@ -205,9 +218,14 @@ export const accessControl = (opts = {}) => {
205
218
  if (ctx.access.allowed) {
206
219
  // Activity bump (only for store-approved users — admins/defaults
207
220
  // don't have a session record we want to clutter).
208
- if (ctx.access.source === 'store' && ctx.is('message')) {
209
- ctx._accessSession.lastActivityAt = Date.now();
210
- ctx._accessSession.messageCount = (ctx._accessSession.messageCount ?? 0) + 1;
221
+ if (ctx.access.source === 'store' &&
222
+ ctx.is('message') &&
223
+ ctx.session.access) {
224
+ ctx.session.access = {
225
+ ...ctx.session.access,
226
+ lastActivityAt: Date.now(),
227
+ messageCount: (ctx.session.access.messageCount ?? 0) + 1,
228
+ };
211
229
  }
212
230
  return next();
213
231
  }
@@ -220,22 +238,26 @@ export const accessControl = (opts = {}) => {
220
238
  if (!ctx.is('message'))
221
239
  return;
222
240
  const userId = ctx.from.id;
223
- const rec = ctx._accessSession;
241
+ const existing = ctx.session.access;
224
242
  const now = Date.now();
225
- const isFirstRequest = rec.status === 'unknown';
243
+ const isFirstRequest = !existing || existing.status === 'unknown';
244
+ const rec = isFirstRequest
245
+ ? {
246
+ status: 'pending',
247
+ user: {
248
+ id: userId,
249
+ firstName: ctx.from.firstName,
250
+ lastName: ctx.from.lastName,
251
+ username: ctx.from.username,
252
+ },
253
+ chatId: ctx.chat.id,
254
+ requestedAt: now,
255
+ firstMessage: ctx.text?.slice(0, FIRST_MSG_LIMIT),
256
+ messageCount: 0,
257
+ rejectedAttempts: 0,
258
+ }
259
+ : { ...existing };
226
260
  if (isFirstRequest) {
227
- rec.status = 'pending';
228
- rec.user = {
229
- id: userId,
230
- firstName: ctx.from.firstName,
231
- lastName: ctx.from.lastName,
232
- username: ctx.from.username,
233
- };
234
- rec.chatId = ctx.chat.id;
235
- rec.requestedAt = now;
236
- rec.firstMessage = ctx.text?.slice(0, FIRST_MSG_LIMIT);
237
- rec.messageCount = 0;
238
- rec.rejectedAttempts = 0;
239
261
  await indexAdd(storage, 'pending', userId);
240
262
  }
241
263
  else {
@@ -256,6 +278,8 @@ export const accessControl = (opts = {}) => {
256
278
  }
257
279
  opts.onAccessRequest?.({ user: rec.user, firstMessage: rec.firstMessage });
258
280
  }
281
+ // Persist the updated record to the user's session.
282
+ ctx.session.access = rec;
259
283
  if (denyMessage && isFirstRequest) {
260
284
  try {
261
285
  await ctx.send(denyMessage);
@@ -271,7 +295,7 @@ export const accessControl = (opts = {}) => {
271
295
  if (!ctx.isAdmin)
272
296
  return ctx.answer({ text: 'Solo admin.', show_alert: true });
273
297
  const uid = ctx.queryData.uid;
274
- const rec = await loadRecord(storage, uid);
298
+ const rec = await loadAccess(storage, uid);
275
299
  if (!rec)
276
300
  return ctx.answer({ text: 'No encontrado.' });
277
301
  const wasDenied = rec.status === 'denied';
@@ -281,7 +305,7 @@ export const accessControl = (opts = {}) => {
281
305
  rec.approvedBy = ctx.adminId;
282
306
  rec.deniedAt = undefined;
283
307
  rec.deniedBy = undefined;
284
- await saveRecord(storage, uid, rec);
308
+ await saveAccess(storage, uid, rec);
285
309
  await indexMove(storage, uid, wasPending ? 'pending' : wasDenied ? 'denied' : 'any', 'approved');
286
310
  if (rec.chatId !== undefined) {
287
311
  try {
@@ -314,14 +338,14 @@ export const accessControl = (opts = {}) => {
314
338
  if (!ctx.isAdmin)
315
339
  return ctx.answer({ text: 'Solo admin.', show_alert: true });
316
340
  const uid = ctx.queryData.uid;
317
- const rec = await loadRecord(storage, uid);
341
+ const rec = await loadAccess(storage, uid);
318
342
  if (!rec)
319
343
  return ctx.answer({ text: 'No encontrado.' });
320
344
  const wasPending = rec.status === 'pending';
321
345
  rec.status = 'denied';
322
346
  rec.deniedAt = Date.now();
323
347
  rec.deniedBy = ctx.adminId;
324
- await saveRecord(storage, uid, rec);
348
+ await saveAccess(storage, uid, rec);
325
349
  await indexMove(storage, uid, wasPending ? 'pending' : 'any', 'denied');
326
350
  if (rec.chatId !== undefined) {
327
351
  try {
@@ -352,13 +376,13 @@ export const accessControl = (opts = {}) => {
352
376
  if (!ctx.isAdmin)
353
377
  return ctx.answer({ text: 'Solo admin.', show_alert: true });
354
378
  const uid = ctx.queryData.uid;
355
- const rec = await loadRecord(storage, uid);
379
+ const rec = await loadAccess(storage, uid);
356
380
  if (!rec)
357
381
  return ctx.answer({ text: 'No encontrado.' });
358
382
  rec.status = 'denied';
359
383
  rec.deniedAt = Date.now();
360
384
  rec.deniedBy = ctx.adminId;
361
- await saveRecord(storage, uid, rec);
385
+ await saveAccess(storage, uid, rec);
362
386
  await indexMove(storage, uid, 'approved', 'denied');
363
387
  if (rec.chatId !== undefined) {
364
388
  try {
@@ -391,7 +415,13 @@ export const accessControl = (opts = {}) => {
391
415
  // ignore
392
416
  }
393
417
  })
394
- .command('access', async (ctx) => {
418
+ .command('access', {
419
+ // Admin-only; hidden from Telegram's `/` menu so it doesn't
420
+ // tempt other users to type it. Admin still invokes via /access.
421
+ // See https://gramio.dev/triggers/command.html#commandmeta-fields
422
+ description: 'Admin: access control menu',
423
+ hide: true,
424
+ }, async (ctx) => {
395
425
  if (!ctx.isAdmin)
396
426
  return;
397
427
  const v = await mainView(storage, defaults);
@@ -438,7 +468,7 @@ const listView = async (storage, filter, defaults) => {
438
468
  const ids = idx[filter];
439
469
  // Cap at 20 to keep callback_data + rendering sane.
440
470
  const shownIds = ids.slice(0, 20);
441
- const records = await Promise.all(shownIds.map(async (id) => ({ id, rec: await loadRecord(storage, id) })));
471
+ const records = await Promise.all(shownIds.map(async (id) => ({ id, rec: await loadAccess(storage, id) })));
442
472
  const headerEmoji = filter === 'approved' ? '✅' : filter === 'pending' ? '⏳' : '❌';
443
473
  const headerLabel = filter === 'approved' ? 'Aprobados' : filter === 'pending' ? 'Pendientes' : 'Denegados';
444
474
  if (ids.length === 0) {
@@ -505,7 +535,7 @@ export const simulateAccessRequest = async (bot, storage, adminId, fakeUser, mes
505
535
  rejectedAttempts: 0,
506
536
  lastNotifiedAt: now,
507
537
  };
508
- await saveRecord(storage, fakeUser.id, rec);
538
+ await saveAccess(storage, fakeUser.id, rec);
509
539
  await indexAdd(storage, 'pending', fakeUser.id);
510
540
  await bot.api.sendMessage({
511
541
  chat_id: adminId,
@@ -1 +1 @@
1
- {"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"access-control.js","sourceRoot":"","sources":["../../src/bot/access-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * Coalesce client-split inbound messages.
3
+ *
4
+ * Telegram clients (Desktop / iOS / web) split a single message > 4096
5
+ * chars into multiple `sendMessage` calls before they ever reach the
6
+ * server. The bot receives them as **separate** `message` updates with
7
+ * no marker linking them. This middleware joins them back into one
8
+ * event so your handlers see the full text.
9
+ *
10
+ * user pastes 8000 chars → client splits in 2 → bot gets 2 updates
11
+ * │
12
+ * ▼
13
+ * coalesce middleware
14
+ * │
15
+ * hold + join
16
+ * │
17
+ * ▼
18
+ * handler sees ONE event
19
+ * with full ctx.text
20
+ *
21
+ * ## Detection rule (strict)
22
+ *
23
+ * We coalesce only when ALL hold. Otherwise fragments pass through
24
+ * as separate events — false negatives are preferred over silently
25
+ * merging unrelated messages.
26
+ *
27
+ * 1. Same chat.
28
+ * 2. Same user (override with `acrossUsers: true`).
29
+ * 3. Leading fragment length ≥ `minLeadingLength` (a current
30
+ * guess — see the type definition for the default and the
31
+ * reasoning). Short messages never start a real client split.
32
+ * 4. Each subsequent fragment within `windowMs` of the previous.
33
+ *
34
+ * ## Known caveats
35
+ *
36
+ * - `ctx.entities` is cleared on coalesced messages — per-fragment
37
+ * entity offsets would point at the wrong characters once joined.
38
+ * Plain-text consumers don't care; formatted-input consumers
39
+ * should disable this plugin.
40
+ * - In-memory buffer; doesn't survive bot restart mid-burst.
41
+ *
42
+ * Peer deps: `gramio`.
43
+ *
44
+ * @example
45
+ * import { Bot } from 'gramio'
46
+ * import { coalesceLongMessages } from '@adriangalilea/utils/bot/coalesce'
47
+ *
48
+ * const bot = new Bot(process.env.BOT_TOKEN!)
49
+ * .extend(coalesceLongMessages()) // ← before .on / .command handlers
50
+ * .on('message', (ctx) => {
51
+ * // ctx.text is the full pasted text even if Telegram split it
52
+ * return ctx.send(`got ${ctx.text?.length} chars`)
53
+ * })
54
+ *
55
+ * @example Power-user escape hatch
56
+ *
57
+ * import { isCoalescent } from '@adriangalilea/utils/bot/coalesce'
58
+ *
59
+ * if (isCoalescent(prev, curr)) {
60
+ * // do your own thing
61
+ * }
62
+ */
63
+ import { Plugin } from 'gramio';
64
+ export type CoalesceCriteria = {
65
+ /**
66
+ * Minimum length of the leading fragment to consider a possible
67
+ * client split. Below this → never coalesce, zero latency. Once
68
+ * the buffer is open, follow-up fragments of any size join.
69
+ */
70
+ minLeadingLength?: number;
71
+ /**
72
+ * Max ms between consecutive fragments to consider them part of
73
+ * one client-split burst.
74
+ */
75
+ windowMs?: number;
76
+ /**
77
+ * If true, fragments from different users (same chat) can coalesce.
78
+ * Useful for "user forwarded a multi-author conversation as one
79
+ * logical block."
80
+ */
81
+ acrossUsers?: boolean;
82
+ };
83
+ export type CoalesceLongMessagesOptions = CoalesceCriteria & {
84
+ /**
85
+ * Log each fragment + buffer transition to stderr for debugging.
86
+ * Off by default.
87
+ */
88
+ log?: boolean;
89
+ };
90
+ /**
91
+ * Pure check: are these two fragments part of the same client-split
92
+ * burst? Use this if you want to make your own decision instead of
93
+ * letting the middleware do it.
94
+ *
95
+ * The two fragments are passed as plain objects so this function is
96
+ * decoupled from gramio's context type. Adapt your context as needed.
97
+ */
98
+ export type CoalesceFragment = {
99
+ text: string;
100
+ chatId: number;
101
+ userId: number;
102
+ /** Timestamp in **milliseconds** (use `Date.now()` or `msg.date * 1000`). */
103
+ dateMs: number;
104
+ };
105
+ export declare const isCoalescent: (prev: CoalesceFragment, curr: CoalesceFragment, opts?: CoalesceCriteria) => boolean;
106
+ export declare const coalesceLongMessages: (opts?: CoalesceLongMessagesOptions) => Plugin<{}, import("gramio").DeriveDefinitions, {}>;
107
+ //# sourceMappingURL=coalesce.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coalesce.d.ts","sourceRoot":"","sources":["../../src/bot/coalesce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,gBAAgB,GAAG;IAC3D;;;OAGG;IACH,GAAG,CAAC,EAAE,OAAO,CAAA;CACd,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,eAAO,MAAM,YAAY,GACvB,MAAM,gBAAgB,EACtB,MAAM,gBAAgB,EACtB,OAAM,gBAAqB,KAC1B,OAUF,CAAA;AAWD,eAAO,MAAM,oBAAoB,GAAI,OAAM,2BAAgC,uDA8E1E,CAAA"}