@deadragdoll/tellymcp 0.0.9 → 0.0.11
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/.env.example.client +42 -50
- package/.env.example.gateway +49 -61
- package/CHANGELOG.md +3 -3
- package/README-ru.md +205 -384
- package/README.md +195 -1194
- package/TOOLS.md +294 -377
- package/VERSION.md +36 -10
- package/config/codex/plugins/telly-workflows/.codex-plugin/plugin.json +18 -0
- package/config/codex/plugins/telly-workflows/references/invariants.md +10 -0
- package/config/codex/plugins/telly-workflows/skills/telly-browser-screenshot/SKILL.md +27 -0
- package/config/codex/plugins/telly-workflows/skills/telly-collab-artifact/SKILL.md +22 -0
- package/config/codex/plugins/telly-workflows/skills/telly-human-telegram/SKILL.md +31 -0
- package/config/codex/plugins/telly-workflows/skills/telly-partner-note/SKILL.md +36 -0
- package/config/templates/env.both.template +40 -20
- package/config/templates/env.client.template +34 -18
- package/config/templates/env.gateway.template +38 -22
- package/dist/cli.js +322 -75
- package/dist/codexPluginInstaller.js +215 -0
- package/dist/lib/mixins/session.errors.js +34 -1
- package/dist/lib/pinoTargets.js +2 -2
- package/dist/moleculer.config.js +7 -5
- package/dist/services/features/telegram-mcp/approval.service.js +1 -1
- package/dist/services/features/telegram-mcp/browser.service.js +95 -2
- package/dist/services/features/telegram-mcp/collaboration.service.js +41 -4
- package/dist/services/features/telegram-mcp/ensuredb.service.js +145 -26
- package/dist/services/features/telegram-mcp/gateway-delivery.service.js +285 -103
- package/dist/services/features/telegram-mcp/gateway-rmq.service.js +3 -2
- package/dist/services/features/telegram-mcp/gateway-socket.service.js +905 -87
- package/dist/services/features/telegram-mcp/gateway.service.js +876 -81
- package/dist/services/features/telegram-mcp/mcp-http.service.js +9 -1
- package/dist/services/features/telegram-mcp/mcp-server.service.js +17 -26
- package/dist/services/features/telegram-mcp/notify.service.js +128 -2
- package/dist/services/features/telegram-mcp/runtime.service.js +27 -7
- package/dist/services/features/telegram-mcp/session-context.service.js +29 -2
- package/dist/services/features/telegram-mcp/src/app/bootstrap/runtime.js +133 -10
- package/dist/services/features/telegram-mcp/src/app/config/env.js +161 -51
- package/dist/services/features/telegram-mcp/src/app/http.js +375 -42
- package/dist/services/features/telegram-mcp/src/app/webapp/assets.js +386 -58
- package/dist/services/features/telegram-mcp/src/app/webapp/auth.js +3 -0
- package/dist/services/features/telegram-mcp/src/app/webapp/terminal.js +12 -0
- package/dist/services/features/telegram-mcp/src/entities/request/model/schema.js +116 -104
- package/dist/services/features/telegram-mcp/src/entities/xchange/model/types.js +2 -0
- package/dist/services/features/telegram-mcp/src/features/ask-user/model/askUserTelegram.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserScreenshotTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/browser/model/browserService.js +249 -19
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/gatewaySessionsService.js +71 -0
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/listGatewaySessionsTool.js +33 -0
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/localCollaborationBackend.js +93 -82
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileService.js +47 -5
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerFileTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/collaboration/model/sendPartnerNoteTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayClientAccess.js +82 -0
- package/dist/services/features/telegram-mcp/src/features/distributed-client/model/gatewayCollaborationBackend.js +22 -14
- package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/gatewayHttpService.js +649 -75
- package/dist/services/features/telegram-mcp/src/features/distributed-gateway/model/remoteConsoleActionClient.js +76 -0
- package/dist/services/features/telegram-mcp/src/features/embedded-runtime/model/embeddedRuntimeBroker.js +92 -0
- package/dist/services/features/telegram-mcp/src/features/foreground-terminal/model/foregroundTerminalRuntime.js +192 -0
- package/dist/services/features/telegram-mcp/src/features/notify/model/notifyService.js +382 -3
- package/dist/services/features/telegram-mcp/src/features/notify/model/notifyTelegramTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/notify/model/sendFileToTelegramTool.js +33 -0
- package/dist/services/features/telegram-mcp/src/features/session-context/model/clearSessionContextTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/session-context/model/getSessionContextTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/session-context/model/renameSessionTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/session-context/model/sessionContextService.js +42 -200
- package/dist/services/features/telegram-mcp/src/features/session-context/model/setSessionContextTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/terminal-buffer/model/terminalBufferService.js +96 -0
- package/dist/services/features/telegram-mcp/src/features/terminal-input/model/terminalInputService.js +97 -0
- package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownService.js +107 -58
- package/dist/services/features/telegram-mcp/src/features/tools-sync/model/refreshToolsMarkdownTool.js +1 -1
- package/dist/services/features/telegram-mcp/src/features/xchange/model/getXchangeRecordTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/xchange/model/listXchangeRecordsTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/xchange/model/markXchangeRecordReadTool.js +28 -0
- package/dist/services/features/telegram-mcp/src/features/xchange/model/xchangeService.js +169 -0
- package/dist/services/features/telegram-mcp/src/processes/human-approval/model/orchestrator.js +5 -4
- package/dist/services/features/telegram-mcp/src/shared/i18n/index.js +46 -0
- package/dist/services/features/telegram-mcp/src/shared/i18n/resources/en.js +652 -0
- package/dist/services/features/telegram-mcp/src/shared/i18n/resources/ru.js +652 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/memory/processLocalSessionStore.js +27 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/object-storage/minioExchangeStore.js +11 -8
- package/dist/services/features/telegram-mcp/src/shared/integrations/redis/stateStore.js +51 -71
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/proxyFetch.js +21 -22
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transport.js +411 -6524
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportAttachmentStore.js +93 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportBroadcastActions.js +385 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConsoleRegistry.js +143 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportConstructorWiring.js +633 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContent.js +84 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportContext.js +78 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportDocumentActions.js +36 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportEventActions.js +292 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFileHandoffActions.js +352 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportFormatting.js +75 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportGatewayActions.js +44 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLifecycleActions.js +161 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLive.js +56 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportLiveActions.js +77 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuCallbacks.js +254 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFactories.js +538 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFingerprints.js +93 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuFlow.js +344 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuShell.js +62 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuState.js +408 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMenuText.js +216 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportMessageFlow.js +452 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportOutputActions.js +189 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPartnerActions.js +286 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportPayloadState.js +101 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectActions.js +463 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEntryActions.js +202 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectEvents.js +99 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectMenus.js +138 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectState.js +308 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportProjectView.js +426 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportRequestFlow.js +278 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportSessionActions.js +143 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalActions.js +468 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTerminalRuntime.js +171 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportTypes.js +2 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportUtils.js +330 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/telegram/transportXchangeState.js +107 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/client.js +255 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/terminal/ptyRegistry.js +543 -0
- package/dist/services/features/telegram-mcp/src/shared/integrations/xchange/sqliteRecordStore.js +223 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/gatewayScope.js +24 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/logger/logger.js +6 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/project-identity/projectIdentity.js +147 -76
- package/dist/services/features/telegram-mcp/src/shared/lib/telegramXchangeRecords.js +72 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/terminalPromptDetection.js +237 -0
- package/dist/services/features/telegram-mcp/src/shared/lib/version/versionHandshake.js +129 -1
- package/dist/services/features/telegram-mcp/src/shared/lib/xchangeRecordHints.js +98 -0
- package/dist/services/features/telegram-mcp/standalone-http.service.js +13 -1
- package/dist/services/features/telegram-mcp/terminal-buffer.service.js +42 -0
- package/dist/services/features/telegram-mcp/terminal-input.service.js +41 -0
- package/dist/services/features/telegram-mcp/tools-sync.service.js +16 -2
- package/dist/services/features/telegram-mcp/xchange.service.js +123 -0
- package/docs/STANDALONE-ru.md +172 -0
- package/docs/STANDALONE.md +172 -0
- package/package.json +11 -5
- package/scripts/build-package-artifact.sh +27 -0
- package/scripts/deploy-gateway.sh +64 -0
- package/scripts/deploy-onebot-branch.sh +27 -0
- package/scripts/postinstall.js +11 -36
- package/STANDALONE-ru.md +0 -274
- package/STANDALONE.md +0 -274
- package/dist/services/features/telegram-mcp/inbox.service.js +0 -33
- package/dist/services/features/telegram-mcp/pair.service.js +0 -33
- package/dist/services/features/telegram-mcp/src/app/webapp/tmux.js +0 -10
- package/dist/services/features/telegram-mcp/src/features/inbox/model/deleteTelegramInboxMessageTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxCountTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/inbox/model/getTelegramInboxTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/inbox/model/inboxService.js +0 -77
- package/dist/services/features/telegram-mcp/src/features/pair-session/model/clearSessionPairingTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/pair-session/model/createSessionPairCodeTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/pair-session/model/generatePairCode.js +0 -202
- package/dist/services/features/telegram-mcp/src/features/session-context/model/getTmuxTargetTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/features/session-context/model/setTmuxTargetTool.js +0 -33
- package/dist/services/features/telegram-mcp/src/shared/integrations/tmux/client.js +0 -363
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProcessLocalSessionStore = void 0;
|
|
4
|
+
class ProcessLocalSessionStore {
|
|
5
|
+
sessions = new Map();
|
|
6
|
+
onClearSession;
|
|
7
|
+
constructor(input = {}) {
|
|
8
|
+
this.onClearSession = input.onClearSession;
|
|
9
|
+
for (const session of input.initialSessions ?? []) {
|
|
10
|
+
this.sessions.set(session.sessionId, session);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async getSession(sessionId) {
|
|
14
|
+
return this.sessions.get(sessionId) ?? null;
|
|
15
|
+
}
|
|
16
|
+
async listSessions() {
|
|
17
|
+
return Array.from(this.sessions.values()).sort((left, right) => left.sessionId.localeCompare(right.sessionId));
|
|
18
|
+
}
|
|
19
|
+
async setSession(session) {
|
|
20
|
+
this.sessions.set(session.sessionId, session);
|
|
21
|
+
}
|
|
22
|
+
async clearSession(sessionId) {
|
|
23
|
+
this.sessions.delete(sessionId);
|
|
24
|
+
await this.onClearSession?.(sessionId);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.ProcessLocalSessionStore = ProcessLocalSessionStore;
|
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.MinioExchangeStore = void 0;
|
|
7
7
|
const node_path_1 = __importDefault(require("node:path"));
|
|
8
8
|
const promises_1 = require("node:fs/promises");
|
|
9
|
-
const client_1 = require("../
|
|
9
|
+
const client_1 = require("../terminal/client");
|
|
10
10
|
function normalizeRelativePath(relativePath) {
|
|
11
11
|
const normalized = relativePath
|
|
12
12
|
.split(/[/\\]+/u)
|
|
@@ -18,21 +18,24 @@ function normalizeRelativePath(relativePath) {
|
|
|
18
18
|
}
|
|
19
19
|
return normalized;
|
|
20
20
|
}
|
|
21
|
-
function resolveWorkspaceDir(session,
|
|
21
|
+
function resolveWorkspaceDir(session, _terminalConfig) {
|
|
22
22
|
const workspaceDir = session?.cwd?.trim() || "";
|
|
23
|
-
|
|
23
|
+
if (!workspaceDir) {
|
|
24
|
+
throw new Error("Workspace cwd is not registered for this console.");
|
|
25
|
+
}
|
|
26
|
+
return workspaceDir;
|
|
24
27
|
}
|
|
25
28
|
class MinioExchangeStore {
|
|
26
|
-
|
|
29
|
+
terminalConfig;
|
|
27
30
|
exchangeDirName;
|
|
28
31
|
logger;
|
|
29
|
-
constructor(_callBroker, _bindingStore,
|
|
30
|
-
this.
|
|
32
|
+
constructor(_callBroker, _bindingStore, terminalConfig, exchangeDirName, _vfsScope, logger, _distributedMode = "client", _gatewayPublicUrl, _gatewayAuthToken) {
|
|
33
|
+
this.terminalConfig = terminalConfig;
|
|
31
34
|
this.exchangeDirName = exchangeDirName;
|
|
32
35
|
this.logger = logger;
|
|
33
36
|
}
|
|
34
37
|
resolveWorkspaceDir(session) {
|
|
35
|
-
return resolveWorkspaceDir(session, this.
|
|
38
|
+
return resolveWorkspaceDir(session, this.terminalConfig);
|
|
36
39
|
}
|
|
37
40
|
getTempSessionDir(sessionId) {
|
|
38
41
|
return node_path_1.default.resolve(process.cwd(), this.exchangeDirName, "__legacy__", sessionId);
|
|
@@ -40,7 +43,7 @@ class MinioExchangeStore {
|
|
|
40
43
|
async storeFile(params) {
|
|
41
44
|
const relativePath = normalizeRelativePath(params.relativePath);
|
|
42
45
|
const workspaceDir = this.resolveWorkspaceDir(params.session);
|
|
43
|
-
const filePath = await (0, client_1.writeXchangeRelativeFile)(this.
|
|
46
|
+
const filePath = await (0, client_1.writeXchangeRelativeFile)(this.terminalConfig, workspaceDir, this.exchangeDirName, relativePath, Buffer.from(params.content));
|
|
44
47
|
this.logger.info("Exchange file stored locally", {
|
|
45
48
|
sessionId: params.sessionId,
|
|
46
49
|
source: params.source,
|
|
@@ -26,15 +26,18 @@ function principalActiveSessionKey(principal) {
|
|
|
26
26
|
function principalActiveSessionMatchPattern(telegramUserId) {
|
|
27
27
|
return `${KEY_PREFIX}:principal:*:${telegramUserId}:active-session`;
|
|
28
28
|
}
|
|
29
|
-
function inboxListKey(sessionId) {
|
|
30
|
-
return `${KEY_PREFIX}:inbox:${sessionId}`;
|
|
31
|
-
}
|
|
32
|
-
function inboxMessageKey(sessionId, messageId) {
|
|
33
|
-
return `${KEY_PREFIX}:inbox-message:${sessionId}:${messageId}`;
|
|
34
|
-
}
|
|
35
29
|
function menuPayloadKey(key) {
|
|
36
30
|
return `${KEY_PREFIX}:menu-payload:${key}`;
|
|
37
31
|
}
|
|
32
|
+
function userLocaleKey(telegramUserId) {
|
|
33
|
+
return `${KEY_PREFIX}:user-locale:${telegramUserId}`;
|
|
34
|
+
}
|
|
35
|
+
function adminAuthorizedKey(principal) {
|
|
36
|
+
return `${KEY_PREFIX}:admin-auth:${principal.telegramChatId}:${principal.telegramUserId}`;
|
|
37
|
+
}
|
|
38
|
+
function adminAuthorizedMatchPattern() {
|
|
39
|
+
return `${KEY_PREFIX}:admin-auth:*:*`;
|
|
40
|
+
}
|
|
38
41
|
function gatewayClientUuidKey() {
|
|
39
42
|
return `${KEY_PREFIX}:gateway:client-uuid`;
|
|
40
43
|
}
|
|
@@ -94,8 +97,6 @@ class RedisStateStore {
|
|
|
94
97
|
await this.sessionAdapter.write(sessionKey(session.sessionId), session);
|
|
95
98
|
}
|
|
96
99
|
async clearSession(sessionId) {
|
|
97
|
-
await this.unlinkPartnerSession(sessionId);
|
|
98
|
-
await this.clearInboxMessages(sessionId);
|
|
99
100
|
await this.clearXchangeFileMetas(sessionId);
|
|
100
101
|
await this.clearProjectMenuViewStates(sessionId);
|
|
101
102
|
await this.clearOutgoingDeliveryNoticesForSession(sessionId);
|
|
@@ -113,6 +114,45 @@ class RedisStateStore {
|
|
|
113
114
|
const raw = await this.redis.get(bindingKey(sessionId));
|
|
114
115
|
return parseJson(raw);
|
|
115
116
|
}
|
|
117
|
+
async getUserLocale(telegramUserId) {
|
|
118
|
+
return (await this.redis.get(userLocaleKey(telegramUserId))) ?? null;
|
|
119
|
+
}
|
|
120
|
+
async setUserLocale(telegramUserId, locale) {
|
|
121
|
+
await this.redis.set(userLocaleKey(telegramUserId), locale);
|
|
122
|
+
}
|
|
123
|
+
async isAdminAuthorized(principal) {
|
|
124
|
+
return (await this.redis.get(adminAuthorizedKey(principal))) === "1";
|
|
125
|
+
}
|
|
126
|
+
async setAdminAuthorized(principal) {
|
|
127
|
+
await this.redis.set(adminAuthorizedKey(principal), "1");
|
|
128
|
+
}
|
|
129
|
+
async clearAdminAuthorized(principal) {
|
|
130
|
+
await this.redis.del(adminAuthorizedKey(principal));
|
|
131
|
+
}
|
|
132
|
+
async listAdminAuthorizedPrincipals() {
|
|
133
|
+
const principals = [];
|
|
134
|
+
let cursor = "0";
|
|
135
|
+
do {
|
|
136
|
+
const [nextCursor, keys] = await this.redis.scan(cursor, "MATCH", adminAuthorizedMatchPattern(), "COUNT", 100);
|
|
137
|
+
cursor = nextCursor;
|
|
138
|
+
for (const key of keys) {
|
|
139
|
+
const match = key.match(/^telegram-mcp:admin-auth:(-?\d+):(-?\d+)$/u);
|
|
140
|
+
if (!match) {
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const telegramChatId = Number(match[1]);
|
|
144
|
+
const telegramUserId = Number(match[2]);
|
|
145
|
+
if (!Number.isFinite(telegramChatId) || !Number.isFinite(telegramUserId)) {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
principals.push({
|
|
149
|
+
telegramChatId,
|
|
150
|
+
telegramUserId,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
} while (cursor !== "0");
|
|
154
|
+
return principals;
|
|
155
|
+
}
|
|
116
156
|
async setBinding(binding) {
|
|
117
157
|
const previous = await this.getBinding(binding.sessionId);
|
|
118
158
|
if (previous &&
|
|
@@ -125,7 +165,6 @@ class RedisStateStore {
|
|
|
125
165
|
await this.redis.set(principalActiveSessionKey(binding), binding.sessionId);
|
|
126
166
|
}
|
|
127
167
|
async clearBinding(sessionId) {
|
|
128
|
-
await this.unlinkPartnerSession(sessionId);
|
|
129
168
|
const existing = await this.getBinding(sessionId);
|
|
130
169
|
await this.redis.del(bindingKey(sessionId));
|
|
131
170
|
if (existing) {
|
|
@@ -152,6 +191,9 @@ class RedisStateStore {
|
|
|
152
191
|
} while (cursor !== "0");
|
|
153
192
|
return null;
|
|
154
193
|
}
|
|
194
|
+
async clearActiveSessionIdForPrincipal(principal) {
|
|
195
|
+
await this.redis.del(principalActiveSessionKey(principal));
|
|
196
|
+
}
|
|
155
197
|
async setActiveSessionIdForPrincipal(principal, sessionId) {
|
|
156
198
|
const isBound = await this.redis.sismember(principalSessionsKey(principal), sessionId);
|
|
157
199
|
if (!isBound) {
|
|
@@ -214,32 +256,6 @@ class RedisStateStore {
|
|
|
214
256
|
const raw = await this.redis.get(requestKey(requestId));
|
|
215
257
|
return parseJson(raw);
|
|
216
258
|
}
|
|
217
|
-
async createInboxMessage(message) {
|
|
218
|
-
await this.redis.set(inboxMessageKey(message.sessionId, message.id), JSON.stringify(message));
|
|
219
|
-
await this.redis.lpush(inboxListKey(message.sessionId), message.id);
|
|
220
|
-
}
|
|
221
|
-
async listInboxMessages(sessionId, limit) {
|
|
222
|
-
const ids = await this.redis.lrange(inboxListKey(sessionId), 0, limit - 1);
|
|
223
|
-
if (ids.length === 0) {
|
|
224
|
-
return [];
|
|
225
|
-
}
|
|
226
|
-
const rows = await this.redis.mget(...ids.map((messageId) => inboxMessageKey(sessionId, messageId)));
|
|
227
|
-
return rows
|
|
228
|
-
.map((row) => parseJson(row))
|
|
229
|
-
.filter((row) => row !== null);
|
|
230
|
-
}
|
|
231
|
-
async countInboxMessages(sessionId) {
|
|
232
|
-
return this.redis.llen(inboxListKey(sessionId));
|
|
233
|
-
}
|
|
234
|
-
async getInboxMessage(sessionId, messageId) {
|
|
235
|
-
const raw = await this.redis.get(inboxMessageKey(sessionId, messageId));
|
|
236
|
-
return parseJson(raw);
|
|
237
|
-
}
|
|
238
|
-
async deleteInboxMessage(sessionId, messageId) {
|
|
239
|
-
const deletedCount = await this.redis.del(inboxMessageKey(sessionId, messageId));
|
|
240
|
-
await this.redis.lrem(inboxListKey(sessionId), 0, messageId);
|
|
241
|
-
return deletedCount > 0;
|
|
242
|
-
}
|
|
243
259
|
async createMenuPayload(record, ttlSeconds) {
|
|
244
260
|
await this.redis.set(menuPayloadKey(record.key), JSON.stringify(record), "EX", ttlSeconds);
|
|
245
261
|
}
|
|
@@ -364,42 +380,6 @@ class RedisStateStore {
|
|
|
364
380
|
}
|
|
365
381
|
await this.redis.del(activeKey);
|
|
366
382
|
}
|
|
367
|
-
async unlinkPartnerSession(sessionId) {
|
|
368
|
-
const sourceSession = await this.getSession(sessionId);
|
|
369
|
-
if (!sourceSession?.linkedSessionId) {
|
|
370
|
-
return;
|
|
371
|
-
}
|
|
372
|
-
const { linkedSessionId: partnerId } = sourceSession;
|
|
373
|
-
const { linkedSessionId: _linkedSessionId, ...restSource } = sourceSession;
|
|
374
|
-
await this.setSession({
|
|
375
|
-
...restSource,
|
|
376
|
-
updatedAt: new Date().toISOString(),
|
|
377
|
-
});
|
|
378
|
-
const partnerSession = await this.getSession(partnerId);
|
|
379
|
-
if (!partnerSession || partnerSession.linkedSessionId !== sessionId) {
|
|
380
|
-
return;
|
|
381
|
-
}
|
|
382
|
-
const { linkedSessionId: _partnerLinkedSessionId, ...restPartner } = partnerSession;
|
|
383
|
-
await this.setSession({
|
|
384
|
-
...restPartner,
|
|
385
|
-
updatedAt: new Date().toISOString(),
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
async clearInboxMessages(sessionId) {
|
|
389
|
-
const listKey = inboxListKey(sessionId);
|
|
390
|
-
const messageKeys = [];
|
|
391
|
-
let cursor = "0";
|
|
392
|
-
const pattern = `${KEY_PREFIX}:inbox-message:${sessionId}:*`;
|
|
393
|
-
do {
|
|
394
|
-
const [nextCursor, keys] = await this.redis.scan(cursor, "MATCH", pattern, "COUNT", 200);
|
|
395
|
-
cursor = nextCursor;
|
|
396
|
-
messageKeys.push(...keys);
|
|
397
|
-
} while (cursor !== "0");
|
|
398
|
-
if (messageKeys.length > 0) {
|
|
399
|
-
await this.redis.del(...messageKeys);
|
|
400
|
-
}
|
|
401
|
-
await this.redis.del(listKey);
|
|
402
|
-
}
|
|
403
383
|
async clearXchangeFileMetas(sessionId) {
|
|
404
384
|
let cursor = "0";
|
|
405
385
|
const pattern = `${KEY_PREFIX}:xchange-file:${sessionId}:*`;
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTelegramBaseFetchConfig = createTelegramBaseFetchConfig;
|
|
6
4
|
exports.createTelegramFetch = createTelegramFetch;
|
|
7
|
-
const node_fetch_1 = __importDefault(require("node-fetch"));
|
|
8
5
|
const https_proxy_agent_1 = require("https-proxy-agent");
|
|
9
6
|
const socks_proxy_agent_1 = require("socks-proxy-agent");
|
|
10
7
|
function maskProxyUrl(rawUrl) {
|
|
@@ -22,25 +19,27 @@ function maskProxyUrl(rawUrl) {
|
|
|
22
19
|
return "[INVALID_PROXY_URL]";
|
|
23
20
|
}
|
|
24
21
|
}
|
|
25
|
-
function
|
|
26
|
-
|
|
22
|
+
function createTelegramBaseFetchConfig(config, logger) {
|
|
23
|
+
const agent = config.telegram.proxy
|
|
24
|
+
? config.telegram.proxy.type === "http"
|
|
25
|
+
? new https_proxy_agent_1.HttpsProxyAgent(config.telegram.proxy.url)
|
|
26
|
+
: new socks_proxy_agent_1.SocksProxyAgent(config.telegram.proxy.url)
|
|
27
|
+
: undefined;
|
|
28
|
+
if (config.telegram.proxy) {
|
|
29
|
+
logger.info("Telegram proxy configured", {
|
|
30
|
+
proxyType: config.telegram.proxy.type,
|
|
31
|
+
proxyUrl: maskProxyUrl(config.telegram.proxy.url),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
27
35
|
logger.debug("Telegram proxy disabled");
|
|
28
|
-
return globalThis.fetch.bind(globalThis);
|
|
29
36
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
return agent ? { agent } : {};
|
|
38
|
+
}
|
|
39
|
+
function createTelegramFetch(config, logger) {
|
|
40
|
+
const baseFetchConfig = createTelegramBaseFetchConfig(config, logger);
|
|
41
|
+
return async (input, init) => globalThis.fetch(input, {
|
|
42
|
+
...baseFetchConfig,
|
|
43
|
+
...(init ?? {}),
|
|
36
44
|
});
|
|
37
|
-
const proxiedFetch = async (...args) => {
|
|
38
|
-
const [input, init] = args;
|
|
39
|
-
const requestInit = {
|
|
40
|
-
...(init ? init : {}),
|
|
41
|
-
agent,
|
|
42
|
-
};
|
|
43
|
-
return (0, node_fetch_1.default)(input, requestInit);
|
|
44
|
-
};
|
|
45
|
-
return proxiedFetch;
|
|
46
45
|
}
|