@sojaner/telex 0.2.2 → 0.3.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.
- package/dist/ask.js +6 -2
- package/dist/ask.js.map +1 -1
- package/dist/inbox.js +144 -0
- package/dist/inbox.js.map +1 -0
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/dist/registry.js +18 -0
- package/dist/registry.js.map +1 -1
- package/dist/telegram.js +24 -17
- package/dist/telegram.js.map +1 -1
- package/package.json +1 -1
package/dist/ask.js
CHANGED
|
@@ -73,8 +73,12 @@ export async function receipt(session, chatId, message) {
|
|
|
73
73
|
parse_mode: "HTML",
|
|
74
74
|
reply_parameters: { message_id: message.message_id, allow_sending_without_reply: true },
|
|
75
75
|
}).catch(() => undefined);
|
|
76
|
-
if (sent)
|
|
77
|
-
|
|
76
|
+
if (!sent)
|
|
77
|
+
return;
|
|
78
|
+
message.receipt_id = sent.message_id;
|
|
79
|
+
// A shared queue holds a copy, so the id has to be written back or no other process could
|
|
80
|
+
// settle this receipt.
|
|
81
|
+
session.recordReceipt(chatId, message.message_id, sent.message_id);
|
|
78
82
|
}
|
|
79
83
|
function updateReceipt(session, chatId, message, text) {
|
|
80
84
|
if (message.receipt_id === undefined)
|
package/dist/ask.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|
package/dist/inbox.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The queue of unprompted user messages, shared by every telex process on one machine.
|
|
3
|
+
*
|
|
4
|
+
* It used to be a field on each process's session object. That is wrong the moment a project runs
|
|
5
|
+
* more than one agent: the process that polls queues the message, and a different process's
|
|
6
|
+
* heartbeat truthfully finds nothing, so the user watches "held" sit there until the holder
|
|
7
|
+
* happens to send something of its own. A message belongs to the bot and chat it arrived on, not
|
|
8
|
+
* to whichever process happened to be listening.
|
|
9
|
+
*/
|
|
10
|
+
import { closeSync, mkdirSync, openSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
|
|
11
|
+
import { dirname, join } from "node:path";
|
|
12
|
+
import { statePath } from "./registry.js";
|
|
13
|
+
/** An agent that never checks in must not grow the queue without bound; oldest go first. */
|
|
14
|
+
const LIMIT = 50;
|
|
15
|
+
export const inboxPath = () => process.env.TELEX_INBOX ?? join(dirname(statePath()), "inbox.json");
|
|
16
|
+
const read = () => {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = JSON.parse(readFileSync(inboxPath(), "utf8"));
|
|
19
|
+
return Array.isArray(parsed?.held) ? parsed.held : [];
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return []; // missing or corrupt reads as empty, the same as nothing queued
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
const write = (held) => {
|
|
26
|
+
const path = inboxPath();
|
|
27
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
28
|
+
const tmp = `${path}.${process.pid}.tmp`;
|
|
29
|
+
writeFileSync(tmp, `${JSON.stringify({ held }, null, 2)}\n`, { mode: 0o600 });
|
|
30
|
+
renameSync(tmp, path);
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Exclusive-create is the portable atomic primitive, and a queue needs one: a read-modify-write
|
|
34
|
+
* racing another can drop a message, and a dropped message is the user's, not ours.
|
|
35
|
+
*
|
|
36
|
+
* ponytail: a bounded synchronous spin. Only the bot's owner pushes and heartbeats are seconds
|
|
37
|
+
* apart, so contention is rare; if that changes, move the store behind an async interface.
|
|
38
|
+
*/
|
|
39
|
+
function withLock(fn) {
|
|
40
|
+
const lock = `${inboxPath()}.lock`;
|
|
41
|
+
mkdirSync(dirname(lock), { recursive: true });
|
|
42
|
+
const deadline = Date.now() + 2000;
|
|
43
|
+
let held = false;
|
|
44
|
+
while (Date.now() < deadline) {
|
|
45
|
+
try {
|
|
46
|
+
closeSync(openSync(lock, "wx"));
|
|
47
|
+
held = true;
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// A lock left behind by a crash must not wedge every agent on the machine.
|
|
52
|
+
try {
|
|
53
|
+
if (Date.now() - statSync(lock).mtimeMs > 10_000)
|
|
54
|
+
unlinkSync(lock);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// it went away on its own
|
|
58
|
+
}
|
|
59
|
+
const until = Date.now() + 20;
|
|
60
|
+
while (Date.now() < until)
|
|
61
|
+
;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
return fn();
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
if (held) {
|
|
69
|
+
try {
|
|
70
|
+
unlinkSync(lock);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// already gone
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/** The queue every telex process on this machine shares. */
|
|
79
|
+
export function fileInbox() {
|
|
80
|
+
const strip = ({ key: _key, expires_at: _expires, ...message }) => message;
|
|
81
|
+
return {
|
|
82
|
+
push(key, message, expiresAt) {
|
|
83
|
+
withLock(() => {
|
|
84
|
+
const held = read().filter((m) => !(m.key === key && m.message_id === message.message_id));
|
|
85
|
+
const mine = held.filter((m) => m.key === key);
|
|
86
|
+
const others = held.filter((m) => m.key !== key);
|
|
87
|
+
write([...others, ...[...mine, { ...message, key, expires_at: expiresAt }].slice(-LIMIT)]);
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
take(key) {
|
|
91
|
+
return withLock(() => {
|
|
92
|
+
const held = read();
|
|
93
|
+
write(held.filter((m) => m.key !== key));
|
|
94
|
+
return held.filter((m) => m.key === key).map(strip);
|
|
95
|
+
});
|
|
96
|
+
},
|
|
97
|
+
expire(key, now) {
|
|
98
|
+
return withLock(() => {
|
|
99
|
+
const held = read();
|
|
100
|
+
const dead = held.filter((m) => m.key === key && m.expires_at !== undefined && now > m.expires_at);
|
|
101
|
+
if (dead.length)
|
|
102
|
+
write(held.filter((m) => !dead.includes(m)));
|
|
103
|
+
return dead.map(strip);
|
|
104
|
+
});
|
|
105
|
+
},
|
|
106
|
+
receipt(key, messageId, receiptId) {
|
|
107
|
+
withLock(() => {
|
|
108
|
+
const held = read();
|
|
109
|
+
const found = held.find((m) => m.key === key && m.message_id === messageId);
|
|
110
|
+
if (!found)
|
|
111
|
+
return;
|
|
112
|
+
found.receipt_id = receiptId;
|
|
113
|
+
write(held);
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** The default: private to one process, which is all a single-agent project ever needed. */
|
|
119
|
+
export function memoryInbox() {
|
|
120
|
+
// Holds the very object it was handed: callers stamp a receipt id onto a queued message after
|
|
121
|
+
// Telegram answers, and a copy would silently lose it.
|
|
122
|
+
const held = new Map();
|
|
123
|
+
return {
|
|
124
|
+
push(key, message, expiresAt) {
|
|
125
|
+
held.set(key, [...(held.get(key) ?? []), { message, expiresAt }].slice(-LIMIT));
|
|
126
|
+
},
|
|
127
|
+
take(key) {
|
|
128
|
+
const queued = held.get(key) ?? [];
|
|
129
|
+
held.delete(key);
|
|
130
|
+
return queued.map((entry) => entry.message);
|
|
131
|
+
},
|
|
132
|
+
expire(key, now) {
|
|
133
|
+
const queued = held.get(key) ?? [];
|
|
134
|
+
const dead = queued.filter((entry) => entry.expiresAt !== undefined && now > entry.expiresAt);
|
|
135
|
+
if (dead.length)
|
|
136
|
+
held.set(key, queued.filter((entry) => !dead.includes(entry)));
|
|
137
|
+
return dead.map((entry) => entry.message);
|
|
138
|
+
},
|
|
139
|
+
receipt() {
|
|
140
|
+
// Nothing to do: the caller already holds the object it queued.
|
|
141
|
+
},
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../src/inbox.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,7 +5,8 @@ import { z } from "zod";
|
|
|
5
5
|
import { loadConfig, pickBot } from "./config.js";
|
|
6
6
|
import { sessionFor } from "./telegram.js";
|
|
7
7
|
import { ask, receipt, markExpired, refuse, heartbeat, deliver } from "./ask.js";
|
|
8
|
-
import { touch, release, repoOf } from "./registry.js";
|
|
8
|
+
import { touch, release, repoOf, ownerOf } from "./registry.js";
|
|
9
|
+
import { fileInbox } from "./inbox.js";
|
|
9
10
|
import { randomUUID } from "node:crypto";
|
|
10
11
|
const config = loadConfig();
|
|
11
12
|
const botNames = Object.keys(config.bots);
|
|
@@ -13,9 +14,20 @@ const botNames = Object.keys(config.bots);
|
|
|
13
14
|
const defaultBot = process.env.TELEX_BOT || config.defaultBot;
|
|
14
15
|
/** Set once the agent has identified itself; until then telex has no interval and no owner. */
|
|
15
16
|
let checkedIn = false;
|
|
17
|
+
/**
|
|
18
|
+
* Every telex on this machine queues into the same place. One process polls and a different one
|
|
19
|
+
* may be the one that heartbeats, so a queue private to a process leaves the user's message held
|
|
20
|
+
* by an agent that is not the one checking in.
|
|
21
|
+
*/
|
|
22
|
+
const shared = fileInbox();
|
|
23
|
+
function bind(bot) {
|
|
24
|
+
const session = sessionFor(bot.token);
|
|
25
|
+
session.setInboxStore(shared);
|
|
26
|
+
return session;
|
|
27
|
+
}
|
|
16
28
|
/** Listen to a bot's chat for messages nobody asked for, and acknowledge each one to the user. */
|
|
17
29
|
function watch(bot) {
|
|
18
|
-
const session =
|
|
30
|
+
const session = bind(bot);
|
|
19
31
|
session.watch(bot.chatId, {
|
|
20
32
|
allowFrom: bot.allowFrom,
|
|
21
33
|
accept: () => checkedIn,
|
|
@@ -25,16 +37,33 @@ function watch(bot) {
|
|
|
25
37
|
});
|
|
26
38
|
return session;
|
|
27
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Poll only while this process holds the bot.
|
|
42
|
+
*
|
|
43
|
+
* Telegram serves an update to whoever asks and confirms it only when that asker returns with a
|
|
44
|
+
* higher offset, so two pollers on one token duplicate receipts and swallow replies. Symphony runs
|
|
45
|
+
* a lead and its workers inside one repository, all on one bot, each with its own telex — which is
|
|
46
|
+
* how a single message came back acknowledged twice.
|
|
47
|
+
*/
|
|
48
|
+
function claim(botName, bot, sessionId) {
|
|
49
|
+
// Nobody registered yet means nobody to defer to: the first process up starts listening.
|
|
50
|
+
// Two starting in the same instant both listen until their first check-in settles it, which
|
|
51
|
+
// is one poll cycle and self-correcting; registering needs an identity a caller supplies.
|
|
52
|
+
const owns = (ownerOf(botName) ?? sessionId) === sessionId;
|
|
53
|
+
if (owns)
|
|
54
|
+
return { session: watch(bot), owns };
|
|
55
|
+
const session = bind(bot);
|
|
56
|
+
session.stop();
|
|
57
|
+
return { session, owns };
|
|
58
|
+
}
|
|
28
59
|
const warned = new Set();
|
|
29
60
|
/**
|
|
30
61
|
* Every call says who is calling. That fixes the expiry clock from the very first interaction and,
|
|
31
62
|
* through the shared registry, lets separate telex processes notice they share a bot.
|
|
32
63
|
*/
|
|
33
64
|
function checkIn(botName, bot, caller) {
|
|
34
|
-
const session = watch(bot);
|
|
35
65
|
const sessionId = caller.session_id ?? processSession;
|
|
36
|
-
|
|
37
|
-
checkedIn = true;
|
|
66
|
+
// Register before claiming: ownership is decided from the registry, so this call has to be in it.
|
|
38
67
|
const others = touch({
|
|
39
68
|
session_id: sessionId,
|
|
40
69
|
bot: botName,
|
|
@@ -44,13 +73,16 @@ function checkIn(botName, bot, caller) {
|
|
|
44
73
|
pid: process.pid,
|
|
45
74
|
interval_seconds: caller.interval_seconds,
|
|
46
75
|
});
|
|
76
|
+
const { session, owns } = claim(botName, bot, sessionId);
|
|
77
|
+
session.setInboxTtl(bot.chatId, caller.interval_seconds * MISSED_BEATS * 1000);
|
|
78
|
+
checkedIn = true;
|
|
47
79
|
for (const other of others) {
|
|
48
80
|
if (warned.has(other.session_id))
|
|
49
81
|
continue;
|
|
50
82
|
warned.add(other.session_id);
|
|
51
83
|
void conflictWarning(session, bot, caller, other);
|
|
52
84
|
}
|
|
53
|
-
return { session, sessionId };
|
|
85
|
+
return { session, sessionId, owns };
|
|
54
86
|
}
|
|
55
87
|
/** Telegram hands each update to one poller only, so a shared bot silently loses half the traffic. */
|
|
56
88
|
function conflictWarning(session, bot, mine, other) {
|
|
@@ -169,8 +201,10 @@ server.registerTool("heartbeat", {
|
|
|
169
201
|
const { session, sessionId } = checkIn(targetName, target, caller);
|
|
170
202
|
return json({ messages: heartbeat(session, target.chatId), interval_seconds: caller.interval_seconds, session_id: sessionId });
|
|
171
203
|
});
|
|
172
|
-
// Start listening before any agent checks in, so early messages get refused rather than ignored
|
|
173
|
-
|
|
204
|
+
// Start listening before any agent checks in, so early messages get refused rather than ignored —
|
|
205
|
+
// unless another process in this project already holds the bot, in which case it is doing that.
|
|
206
|
+
const startup = pickBot(config);
|
|
207
|
+
claim(startup.name, startup.bot, processSession);
|
|
174
208
|
const transport = new StdioServerTransport();
|
|
175
209
|
// Polling now outlives any single request, so the process has to be told when the agent is gone.
|
|
176
210
|
transport.onclose = () => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,OAAO,EAAY,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACjF,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAgB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/registry.js
CHANGED
|
@@ -81,6 +81,24 @@ export function touch(entry, now = Date.now()) {
|
|
|
81
81
|
// Worktrees of one repository are one project sharing one bot deliberately; that is not a clash.
|
|
82
82
|
return others.filter((s) => s.bot === entry.bot && s.repo !== repo);
|
|
83
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* The one session allowed to poll a bot.
|
|
86
|
+
*
|
|
87
|
+
* Telegram serves an update to whoever asks, and confirms it only when that asker comes back with
|
|
88
|
+
* a higher offset, so two pollers on one token either lose messages or acknowledge the same one
|
|
89
|
+
* twice. Symphony runs a lead and its workers inside one repository, each with its own telex
|
|
90
|
+
* process, which is exactly that case: sharing a repo can mean sharing a bot, but it can never
|
|
91
|
+
* mean sharing the poll.
|
|
92
|
+
*
|
|
93
|
+
* The oldest live claim wins and hands over by itself once that process stops, so the lead keeps
|
|
94
|
+
* the channel while it lives and a worker never takes it.
|
|
95
|
+
*/
|
|
96
|
+
export function ownerOf(bot, now = Date.now()) {
|
|
97
|
+
const live = read()
|
|
98
|
+
.filter((s) => s.bot === bot && isLive(s, now))
|
|
99
|
+
.sort((a, b) => a.started_at.localeCompare(b.started_at) || a.session_id.localeCompare(b.session_id));
|
|
100
|
+
return live[0]?.session_id;
|
|
101
|
+
}
|
|
84
102
|
/** Drop this session's record. Best effort — a crash is covered by the liveness check instead. */
|
|
85
103
|
export function release(sessionId) {
|
|
86
104
|
try {
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/telegram.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** Thin Telegram Bot API client plus an on-demand long-poll loop per bot token. */
|
|
2
|
+
import { memoryInbox } from "./inbox.js";
|
|
2
3
|
export class TelegramError extends Error {
|
|
3
4
|
method;
|
|
4
5
|
description;
|
|
@@ -86,8 +87,6 @@ export const stripHtml = (text) => text
|
|
|
86
87
|
.replace(/&/g, "&");
|
|
87
88
|
/** Telegram counts message length in UTF-16 code units, which is what JS strings already are. */
|
|
88
89
|
export const MAX_MESSAGE_LEN = 4000;
|
|
89
|
-
/** An agent that never checks in must not grow the inbox without bound; oldest go first. */
|
|
90
|
-
const INBOX_LIMIT = 50;
|
|
91
90
|
/**
|
|
92
91
|
* One session per bot token. Polling runs while a question is open and, once a chat is watched,
|
|
93
92
|
* for the rest of the process's life — a project that is not running simply never answers.
|
|
@@ -101,7 +100,8 @@ export class BotSession {
|
|
|
101
100
|
callbackWaiters = new Map();
|
|
102
101
|
textWaiters = new Map();
|
|
103
102
|
watched = new Map();
|
|
104
|
-
|
|
103
|
+
/** Where queued messages live. Shared across processes in the server; private in tests. */
|
|
104
|
+
store = memoryInbox();
|
|
105
105
|
ttl = new Map();
|
|
106
106
|
listening = false;
|
|
107
107
|
constructor(api, pollTimeout = 30) {
|
|
@@ -140,12 +140,21 @@ export class BotSession {
|
|
|
140
140
|
setInboxTtl(chatId, ms) {
|
|
141
141
|
this.ttl.set(String(chatId), ms);
|
|
142
142
|
}
|
|
143
|
+
/**
|
|
144
|
+
* Queue somewhere every telex process can reach. One process polls and another one heartbeats,
|
|
145
|
+
* so a queue private to one of them leaves the user's message held by an agent that is not the
|
|
146
|
+
* one checking in.
|
|
147
|
+
*/
|
|
148
|
+
setInboxStore(store) {
|
|
149
|
+
this.store = store;
|
|
150
|
+
}
|
|
143
151
|
/** Hand over everything held for this chat. */
|
|
144
152
|
take(chatId) {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
153
|
+
return this.store.take(String(chatId));
|
|
154
|
+
}
|
|
155
|
+
/** Remember telex's reply to a message, so whichever process settles it can find the receipt. */
|
|
156
|
+
recordReceipt(chatId, messageId, receiptId) {
|
|
157
|
+
this.store.receipt(String(chatId), messageId, receiptId);
|
|
149
158
|
}
|
|
150
159
|
get idle() {
|
|
151
160
|
return this.callbackWaiters.size === 0 && this.textWaiters.size === 0;
|
|
@@ -225,7 +234,10 @@ export class BotSession {
|
|
|
225
234
|
const message = { message_id: msg.message_id, from_id: msg.from?.id, text: msg.text, received_at: now };
|
|
226
235
|
if (watch.accept && !watch.accept())
|
|
227
236
|
return watch.onRefused?.(message);
|
|
228
|
-
|
|
237
|
+
// The deadline is fixed when the message is queued, so any process can expire it without
|
|
238
|
+
// knowing whose interval set it. Before an agent declares one there is no deadline at all.
|
|
239
|
+
const ttl = this.ttl.get(key);
|
|
240
|
+
this.store.push(key, message, ttl === undefined ? undefined : now + ttl);
|
|
229
241
|
watch.onQueued?.(message);
|
|
230
242
|
}
|
|
231
243
|
/**
|
|
@@ -233,15 +245,10 @@ export class BotSession {
|
|
|
233
245
|
* has stopped checking in entirely — which is exactly when the user most needs telling.
|
|
234
246
|
*/
|
|
235
247
|
sweepInbox(now = Date.now()) {
|
|
236
|
-
for (const [key,
|
|
237
|
-
const
|
|
238
|
-
if (
|
|
239
|
-
|
|
240
|
-
const expired = held.filter((m) => now - m.received_at > ttl);
|
|
241
|
-
if (!expired.length)
|
|
242
|
-
continue;
|
|
243
|
-
this.inbox.set(key, held.filter((m) => now - m.received_at <= ttl));
|
|
244
|
-
this.watched.get(key)?.onExpired?.(expired);
|
|
248
|
+
for (const [key, watch] of this.watched) {
|
|
249
|
+
const expired = this.store.expire(key, now);
|
|
250
|
+
if (expired.length)
|
|
251
|
+
watch.onExpired?.(expired);
|
|
245
252
|
}
|
|
246
253
|
}
|
|
247
254
|
}
|
package/dist/telegram.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"AAAA,mFAAmF;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../src/telegram.ts"],"names":[],"mappings":"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"}
|