@clowder-ai/connector-telegram 0.0.0-stage → 0.1.0-alpha.5
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.en.md +48 -0
- package/README.md +24 -2
- package/assets/icon.svg +4 -0
- package/dist/TelegramAdapter.d.ts +229 -0
- package/dist/TelegramAdapter.d.ts.map +1 -0
- package/dist/TelegramAdapter.js +923 -0
- package/dist/TelegramAdapter.js.map +1 -0
- package/dist/command-ingress.d.ts +10 -0
- package/dist/command-ingress.d.ts.map +1 -0
- package/dist/command-ingress.js +13 -0
- package/dist/command-ingress.js.map +1 -0
- package/dist/execution-status.d.ts +27 -0
- package/dist/execution-status.d.ts.map +1 -0
- package/dist/execution-status.js +48 -0
- package/dist/execution-status.js.map +1 -0
- package/dist/inbound-download.d.ts +13 -0
- package/dist/inbound-download.d.ts.map +1 -0
- package/dist/inbound-download.js +70 -0
- package/dist/inbound-download.js.map +1 -0
- package/dist/inbound-media-source.d.ts +25 -0
- package/dist/inbound-media-source.d.ts.map +1 -0
- package/dist/inbound-media-source.js +111 -0
- package/dist/inbound-media-source.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle-action.d.ts +30 -0
- package/dist/lifecycle-action.d.ts.map +1 -0
- package/dist/lifecycle-action.js +457 -0
- package/dist/lifecycle-action.js.map +1 -0
- package/dist/materialize-media.d.ts +7 -0
- package/dist/materialize-media.d.ts.map +1 -0
- package/dist/materialize-media.js +35 -0
- package/dist/materialize-media.js.map +1 -0
- package/dist/media-notice.d.ts +6 -0
- package/dist/media-notice.d.ts.map +1 -0
- package/dist/media-notice.js +50 -0
- package/dist/media-notice.js.map +1 -0
- package/dist/plugin-entrypoint.d.ts +7 -0
- package/dist/plugin-entrypoint.d.ts.map +1 -0
- package/dist/plugin-entrypoint.js +445 -0
- package/dist/plugin-entrypoint.js.map +1 -0
- package/dist/reply-sender-map.d.ts +10 -0
- package/dist/reply-sender-map.d.ts.map +1 -0
- package/dist/reply-sender-map.js +123 -0
- package/dist/reply-sender-map.js.map +1 -0
- package/dist/runtime.d.ts +61 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +82 -0
- package/dist/runtime.js.map +1 -0
- package/dist/telegram-html-formatter.d.ts +3 -0
- package/dist/telegram-html-formatter.d.ts.map +1 -0
- package/dist/telegram-html-formatter.js +42 -0
- package/dist/telegram-html-formatter.js.map +1 -0
- package/dist/thread-mappings.d.ts +46 -0
- package/dist/thread-mappings.d.ts.map +1 -0
- package/dist/thread-mappings.js +62 -0
- package/dist/thread-mappings.js.map +1 -0
- package/dist/token.d.ts +2 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +8 -0
- package/dist/token.js.map +1 -0
- package/dist/types.d.ts +58 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/npm-shrinkwrap.json +229 -0
- package/package.json +55 -4
- package/plugin.yaml +59 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { TelegramAdapter, type InlineFinalPersistence, type TelegramInboundMessage } from './TelegramAdapter.js';
|
|
2
|
+
import type { ConnectorLogger } from './types.js';
|
|
3
|
+
export interface TelegramRuntimeConfig {
|
|
4
|
+
/** Manifest-declared secret projected explicitly by the Host. */
|
|
5
|
+
readonly botToken: string;
|
|
6
|
+
}
|
|
7
|
+
export interface TelegramInboundAttachment {
|
|
8
|
+
readonly type: 'image' | 'file' | 'audio';
|
|
9
|
+
readonly platformKey: string;
|
|
10
|
+
readonly fileName?: string;
|
|
11
|
+
readonly duration?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Provider facts delivered to the Host-owned connector binding layer.
|
|
15
|
+
*
|
|
16
|
+
* This deliberately carries no Clowder address or thread identifier: only the
|
|
17
|
+
* Host may resolve the installed connector instance to an authenticated
|
|
18
|
+
* `connector_binding` and derive admission or wake behavior.
|
|
19
|
+
*/
|
|
20
|
+
export interface TelegramHostInboundMessage {
|
|
21
|
+
readonly externalConversationId: string;
|
|
22
|
+
readonly externalSenderId: string;
|
|
23
|
+
readonly providerMessageId: string;
|
|
24
|
+
readonly text: string;
|
|
25
|
+
readonly attachments?: readonly TelegramInboundAttachment[];
|
|
26
|
+
}
|
|
27
|
+
export interface TelegramRuntimeHost {
|
|
28
|
+
deliver(message: TelegramHostInboundMessage): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export interface TelegramOutbound {
|
|
31
|
+
readonly connectorId: string;
|
|
32
|
+
sendReply(externalChatId: string, content: string, metadata?: Record<string, unknown>): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
export interface TelegramRuntimeAdapter extends TelegramOutbound {
|
|
35
|
+
startPolling(handler: (message: TelegramInboundMessage) => Promise<void>): void | Promise<void>;
|
|
36
|
+
stopPolling(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export interface TelegramConnectorRuntime<Adapter extends TelegramRuntimeAdapter = TelegramAdapter> {
|
|
39
|
+
/** Provider egress implementation consumed by the Host's generic delivery adapter. */
|
|
40
|
+
readonly outbound: Adapter;
|
|
41
|
+
start(): Promise<void>;
|
|
42
|
+
stop(): Promise<void>;
|
|
43
|
+
/** True while the provider polling loop is running. */
|
|
44
|
+
isPolling(): boolean;
|
|
45
|
+
}
|
|
46
|
+
export interface TelegramConnectorRuntimeOptions<Adapter extends TelegramRuntimeAdapter = TelegramAdapter> {
|
|
47
|
+
readonly config: TelegramRuntimeConfig;
|
|
48
|
+
readonly host: TelegramRuntimeHost;
|
|
49
|
+
readonly logger: ConnectorLogger;
|
|
50
|
+
/** Durable backing for the lifecycle-keyed inline-final map; omitting keeps it in-memory only. */
|
|
51
|
+
readonly inlineFinalPersistence?: InlineFinalPersistence;
|
|
52
|
+
readonly createAdapter?: (normalizedBotToken: string, logger: ConnectorLogger, persistence?: InlineFinalPersistence) => Adapter;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Composes Telegram provider I/O without importing Core or reading ambient
|
|
56
|
+
* process state. The Host injects the declared secret and receives provider
|
|
57
|
+
* facts; binding lookup, admission, wake routing, retry, and settlement remain
|
|
58
|
+
* outside this package runtime.
|
|
59
|
+
*/
|
|
60
|
+
export declare function createTelegramConnectorRuntime<Adapter extends TelegramRuntimeAdapter = TelegramAdapter>(options: TelegramConnectorRuntimeOptions<Adapter>): TelegramConnectorRuntime<Adapter>;
|
|
61
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,KAAK,sBAAsB,EAC3B,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,qBAAqB;IACpC,iEAAiE;IACjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC7D;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,OAAO,EAAE,0BAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,SAAS,CACP,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,sBAAuB,SAAQ,gBAAgB;IAC9D,YAAY,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,sBAAsB,GAAG,eAAe;IAChG,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,uDAAuD;IACvD,SAAS,IAAI,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,+BAA+B,CAAC,OAAO,SAAS,sBAAsB,GAAG,eAAe;IACvG,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,kGAAkG;IAClG,QAAQ,CAAC,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IACzD,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,sBAAsB,KAAK,OAAO,CAAC;CACjI;AAkBD;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,sBAAsB,GAAG,eAAe,EACrG,OAAO,EAAE,+BAA+B,CAAC,OAAO,CAAC,GAChD,wBAAwB,CAAC,OAAO,CAAC,CAwDnC"}
|
package/dist/runtime.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { TelegramAdapter, } from './TelegramAdapter.js';
|
|
2
|
+
import { normalizeTelegramBotToken } from './token.js';
|
|
3
|
+
function hostMessage(message) {
|
|
4
|
+
const attachments = message.attachments?.map(attachment => ({
|
|
5
|
+
type: attachment.type,
|
|
6
|
+
platformKey: attachment.telegramFileId,
|
|
7
|
+
...(attachment.fileName === undefined ? {} : { fileName: attachment.fileName }),
|
|
8
|
+
...(attachment.duration === undefined ? {} : { duration: attachment.duration }),
|
|
9
|
+
}));
|
|
10
|
+
return {
|
|
11
|
+
externalConversationId: message.chatId,
|
|
12
|
+
externalSenderId: message.senderId,
|
|
13
|
+
providerMessageId: message.messageId,
|
|
14
|
+
text: message.text,
|
|
15
|
+
...(attachments === undefined ? {} : { attachments }),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Composes Telegram provider I/O without importing Core or reading ambient
|
|
20
|
+
* process state. The Host injects the declared secret and receives provider
|
|
21
|
+
* facts; binding lookup, admission, wake routing, retry, and settlement remain
|
|
22
|
+
* outside this package runtime.
|
|
23
|
+
*/
|
|
24
|
+
export function createTelegramConnectorRuntime(options) {
|
|
25
|
+
const token = normalizeTelegramBotToken(options.config.botToken);
|
|
26
|
+
if (token === null)
|
|
27
|
+
throw new TypeError('botToken must be a valid Telegram Bot token');
|
|
28
|
+
const createAdapter = options.createAdapter ?? ((value, logger, persistence) => new TelegramAdapter(value, logger, persistence));
|
|
29
|
+
const outbound = createAdapter(token, options.logger, options.inlineFinalPersistence);
|
|
30
|
+
let state = 'idle';
|
|
31
|
+
let startPromise;
|
|
32
|
+
let stopPromise;
|
|
33
|
+
const deliverIfRunning = async (message) => {
|
|
34
|
+
if (state !== 'running')
|
|
35
|
+
return;
|
|
36
|
+
await options.host.deliver(hostMessage(message));
|
|
37
|
+
};
|
|
38
|
+
return {
|
|
39
|
+
outbound,
|
|
40
|
+
start() {
|
|
41
|
+
if (state === 'stopped')
|
|
42
|
+
return Promise.reject(new Error('Telegram connector runtime has been stopped'));
|
|
43
|
+
if (startPromise !== undefined)
|
|
44
|
+
return startPromise;
|
|
45
|
+
state = 'starting';
|
|
46
|
+
startPromise = Promise.resolve()
|
|
47
|
+
.then(() => outbound.startPolling(deliverIfRunning))
|
|
48
|
+
.then(() => {
|
|
49
|
+
if (state !== 'stopped') {
|
|
50
|
+
state = 'running';
|
|
51
|
+
options.logger.info('[TelegramRuntime] Provider polling started');
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
.catch((error) => {
|
|
55
|
+
if (state !== 'stopped') {
|
|
56
|
+
state = 'idle';
|
|
57
|
+
startPromise = undefined;
|
|
58
|
+
}
|
|
59
|
+
throw error;
|
|
60
|
+
});
|
|
61
|
+
return startPromise;
|
|
62
|
+
},
|
|
63
|
+
isPolling() {
|
|
64
|
+
return state === 'running';
|
|
65
|
+
},
|
|
66
|
+
stop() {
|
|
67
|
+
if (stopPromise !== undefined)
|
|
68
|
+
return stopPromise;
|
|
69
|
+
if (state === 'idle') {
|
|
70
|
+
state = 'stopped';
|
|
71
|
+
return Promise.resolve();
|
|
72
|
+
}
|
|
73
|
+
state = 'stopped';
|
|
74
|
+
stopPromise = (async () => {
|
|
75
|
+
await startPromise?.catch(() => undefined);
|
|
76
|
+
await outbound.stopPolling();
|
|
77
|
+
})();
|
|
78
|
+
return stopPromise;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-html-formatter.d.ts","sourceRoot":"","sources":["../src/telegram-html-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAmC5C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ5G"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
function esc(s) {
|
|
2
|
+
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
3
|
+
}
|
|
4
|
+
function blockToHtml(block) {
|
|
5
|
+
switch (block.kind) {
|
|
6
|
+
case 'card': {
|
|
7
|
+
const parts = [`📋 <b>${esc(block.title)}</b>`];
|
|
8
|
+
if (block.bodyMarkdown)
|
|
9
|
+
parts.push(esc(block.bodyMarkdown));
|
|
10
|
+
if (block.fields?.length) {
|
|
11
|
+
parts.push(block.fields.map((f) => `<b>${esc(f.label)}</b>: ${esc(f.value)}`).join('\n'));
|
|
12
|
+
}
|
|
13
|
+
return parts.join('\n');
|
|
14
|
+
}
|
|
15
|
+
case 'checklist': {
|
|
16
|
+
const header = block.title ? `☑️ <b>${esc(block.title)}</b>` : '☑️ <b>Checklist</b>';
|
|
17
|
+
const items = block.items.map((i) => `${i.checked ? '✅' : '☐'} ${esc(i.text)}`).join('\n');
|
|
18
|
+
return `${header}\n${items}`;
|
|
19
|
+
}
|
|
20
|
+
case 'diff':
|
|
21
|
+
return `📝 <b>${esc(block.filePath)}</b>\n<pre>${esc(block.diff)}</pre>`;
|
|
22
|
+
case 'audio':
|
|
23
|
+
return block.text ? `🔊 ${esc(block.text)}` : '🔊 [Audio]';
|
|
24
|
+
case 'media_gallery': {
|
|
25
|
+
const header = block.title ? `🖼️ <b>${esc(block.title)}</b>` : '🖼️ <b>Gallery</b>';
|
|
26
|
+
const items = block.items.map((i) => esc(i.caption || i.alt || i.url)).join('\n');
|
|
27
|
+
return `${header}\n${items}`;
|
|
28
|
+
}
|
|
29
|
+
default:
|
|
30
|
+
return `[${esc(block.kind)}]`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export function formatTelegramHtml(blocks, catDisplayName, textContent) {
|
|
34
|
+
const header = `<b>【${esc(catDisplayName)}🐱】</b>`;
|
|
35
|
+
const parts = [header];
|
|
36
|
+
if (textContent) {
|
|
37
|
+
parts.push(esc(textContent));
|
|
38
|
+
}
|
|
39
|
+
parts.push(blocks.map(blockToHtml).join('\n\n'));
|
|
40
|
+
return parts.join('\n\n');
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=telegram-html-formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram-html-formatter.js","sourceRoot":"","sources":["../src/telegram-html-formatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { FeatureContext } from '@clowder-ai/plugin-sdk';
|
|
2
|
+
type Mapping = {
|
|
3
|
+
readonly key: string;
|
|
4
|
+
readonly threadId: string;
|
|
5
|
+
readonly createdAt: number;
|
|
6
|
+
};
|
|
7
|
+
type Creation = {
|
|
8
|
+
readonly title: string;
|
|
9
|
+
readonly parentThreadId?: string;
|
|
10
|
+
readonly participants?: readonly string[];
|
|
11
|
+
};
|
|
12
|
+
export declare function threadMappings(context: FeatureContext): {
|
|
13
|
+
findByKey: (name: string) => Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary | null>;
|
|
14
|
+
bind: (name: string, threadId: string) => Promise<boolean | Mapping>;
|
|
15
|
+
unbind: (name: string) => Promise<boolean | Mapping>;
|
|
16
|
+
listBindings: () => Promise<Mapping[]>;
|
|
17
|
+
ensureByKey: (name: string, input: Creation) => Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary>;
|
|
18
|
+
ensureSystemThread: () => Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary>;
|
|
19
|
+
get(threadId: string): Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary | null>;
|
|
20
|
+
list(options?: {
|
|
21
|
+
readonly limit?: number;
|
|
22
|
+
readonly before?: {
|
|
23
|
+
readonly lastActiveAt: number;
|
|
24
|
+
readonly id: string;
|
|
25
|
+
};
|
|
26
|
+
}): Promise<readonly import("@clowder-ai/plugin-sdk").PluginThreadSummary[]>;
|
|
27
|
+
readMessages(threadId: string, options: {
|
|
28
|
+
readonly before?: {
|
|
29
|
+
readonly timestamp: number;
|
|
30
|
+
readonly id: string;
|
|
31
|
+
};
|
|
32
|
+
readonly limit: number;
|
|
33
|
+
}): Promise<readonly import("@clowder-ai/plugin-sdk").PluginThreadMessage[]>;
|
|
34
|
+
getCats(threadId: string): Promise<import("@clowder-ai/plugin-sdk").PluginThreadCats>;
|
|
35
|
+
addParticipants(input: {
|
|
36
|
+
readonly threadId: string;
|
|
37
|
+
readonly catIds: readonly string[];
|
|
38
|
+
}): Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary>;
|
|
39
|
+
create(input: import("@clowder-ai/plugin-sdk").PluginThreadCreateInput): Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary>;
|
|
40
|
+
update(threadId: string, patch: {
|
|
41
|
+
readonly title?: string;
|
|
42
|
+
readonly preferredCats?: readonly string[];
|
|
43
|
+
}): Promise<import("@clowder-ai/plugin-sdk").PluginThreadSummary>;
|
|
44
|
+
};
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=thread-mappings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-mappings.d.ts","sourceRoot":"","sources":["../src/thread-mappings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,KAAK,OAAO,GAAG;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/F,KAAK,QAAQ,GAAG;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AA+CxH,wBAAgB,cAAc,CAAC,OAAO,EAAE,cAAc;sBA/B1B,MAAM;iBAwBjB,MAAM,YAAY,MAAM;mBACtB,MAAM;;wBAVD,MAAM,SAAS,QAAQ;;;;sBAkBT,CAAC;uBAAiC,CAAC;;;;;;uBAG2M,CAAC;;;;;;;;;;;;;sBAA2f,CAAC;8BAAwC,CAAC;;EADzzB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const contexts = new WeakMap();
|
|
2
|
+
/** Package-owned external-conversation mapping. Host receives ordinary thread calls only. */
|
|
3
|
+
function createMappings(context) {
|
|
4
|
+
const key = 'thread-mappings.v1';
|
|
5
|
+
let tail = Promise.resolve();
|
|
6
|
+
const serialize = (run) => {
|
|
7
|
+
const next = tail.then(run, run);
|
|
8
|
+
tail = next.catch(() => { });
|
|
9
|
+
return next;
|
|
10
|
+
};
|
|
11
|
+
const read = async () => {
|
|
12
|
+
const stored = await context.storage.get(key);
|
|
13
|
+
const rows = stored?.value ?? [];
|
|
14
|
+
if (!Array.isArray(rows) || rows.some(row => !row || typeof row.key !== 'string' || typeof row.threadId !== 'string' || typeof row.createdAt !== 'number'))
|
|
15
|
+
throw new Error('Invalid plugin thread mappings');
|
|
16
|
+
return { stored, rows: rows };
|
|
17
|
+
};
|
|
18
|
+
const find = async (name) => {
|
|
19
|
+
const { rows } = await read();
|
|
20
|
+
const row = rows.find(row => row.key === name);
|
|
21
|
+
return row ? context.threads.get(row.threadId) : null;
|
|
22
|
+
};
|
|
23
|
+
const save = async (name, threadId) => {
|
|
24
|
+
const { stored, rows } = await read();
|
|
25
|
+
const next = rows.filter(row => row.key !== name);
|
|
26
|
+
if (threadId !== null) {
|
|
27
|
+
if (!await context.threads.get(threadId))
|
|
28
|
+
throw new Error('Thread unavailable');
|
|
29
|
+
next.push({ key: name, threadId, createdAt: Date.now() });
|
|
30
|
+
}
|
|
31
|
+
const result = await context.storage.compareAndSet(key, stored?.revision ?? null, next);
|
|
32
|
+
if (!result.applied)
|
|
33
|
+
throw new Error('Plugin thread mappings changed concurrently');
|
|
34
|
+
return threadId === null ? rows.length !== next.length : next.find(row => row.key === name);
|
|
35
|
+
};
|
|
36
|
+
const ensure = (name, input) => serialize(async () => {
|
|
37
|
+
const existing = await find(name);
|
|
38
|
+
if (existing)
|
|
39
|
+
return existing;
|
|
40
|
+
const thread = await context.threads.create(input);
|
|
41
|
+
await save(name, thread.id);
|
|
42
|
+
return thread;
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
...context.threads,
|
|
46
|
+
findByKey: find,
|
|
47
|
+
bind: (name, threadId) => serialize(() => save(name, threadId)),
|
|
48
|
+
unbind: (name) => serialize(() => save(name, null)),
|
|
49
|
+
listBindings: async () => (await read()).rows,
|
|
50
|
+
ensureByKey: ensure,
|
|
51
|
+
ensureSystemThread: () => ensure('command-audit', { title: '连接器命令记录' }),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export function threadMappings(context) {
|
|
55
|
+
let value = contexts.get(context);
|
|
56
|
+
if (!value) {
|
|
57
|
+
value = createMappings(context);
|
|
58
|
+
contexts.set(context, value);
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=thread-mappings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thread-mappings.js","sourceRoot":"","sources":["../src/thread-mappings.ts"],"names":[],"mappings":"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"}
|
package/dist/token.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAEA,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIzF"}
|
package/dist/token.js
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
const TELEGRAM_BOT_TOKEN_PATTERN = /^\d+:[A-Za-z0-9_-]{10,}$/;
|
|
2
|
+
export function normalizeTelegramBotToken(token) {
|
|
3
|
+
const value = token?.trim();
|
|
4
|
+
if (!value)
|
|
5
|
+
return null;
|
|
6
|
+
return TELEGRAM_BOT_TOKEN_PATTERN.test(value) ? value : null;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=token.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../src/token.ts"],"names":[],"mappings":"AAAA,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAE9D,MAAM,UAAU,yBAAyB,CAAC,KAAgC;IACxE,MAAM,KAAK,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type ConnectorLogMethod = (...args: readonly unknown[]) => void;
|
|
2
|
+
export interface ConnectorLogger {
|
|
3
|
+
info: ConnectorLogMethod;
|
|
4
|
+
warn: ConnectorLogMethod;
|
|
5
|
+
error: ConnectorLogMethod;
|
|
6
|
+
}
|
|
7
|
+
interface RichBlockBase {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly v: 1;
|
|
10
|
+
}
|
|
11
|
+
export interface CardBlock extends RichBlockBase {
|
|
12
|
+
readonly kind: 'card';
|
|
13
|
+
readonly title: string;
|
|
14
|
+
readonly bodyMarkdown?: string;
|
|
15
|
+
readonly fields?: ReadonlyArray<{
|
|
16
|
+
readonly label: string;
|
|
17
|
+
readonly value: string;
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
export interface ChecklistBlock extends RichBlockBase {
|
|
21
|
+
readonly kind: 'checklist';
|
|
22
|
+
readonly title?: string;
|
|
23
|
+
readonly items: ReadonlyArray<{
|
|
24
|
+
readonly id: string;
|
|
25
|
+
readonly checked?: boolean;
|
|
26
|
+
readonly text: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
29
|
+
export interface DiffBlock extends RichBlockBase {
|
|
30
|
+
readonly kind: 'diff';
|
|
31
|
+
readonly filePath: string;
|
|
32
|
+
readonly diff: string;
|
|
33
|
+
}
|
|
34
|
+
export interface AudioBlock extends RichBlockBase {
|
|
35
|
+
readonly kind: 'audio';
|
|
36
|
+
readonly text?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface MediaGalleryBlock extends RichBlockBase {
|
|
39
|
+
readonly kind: 'media_gallery';
|
|
40
|
+
readonly title?: string;
|
|
41
|
+
readonly items: ReadonlyArray<{
|
|
42
|
+
readonly caption?: string;
|
|
43
|
+
readonly alt?: string;
|
|
44
|
+
readonly url: string;
|
|
45
|
+
}>;
|
|
46
|
+
}
|
|
47
|
+
export interface InteractiveBlock extends RichBlockBase {
|
|
48
|
+
readonly kind: 'interactive';
|
|
49
|
+
}
|
|
50
|
+
export interface HtmlWidgetBlock extends RichBlockBase {
|
|
51
|
+
readonly kind: 'html_widget';
|
|
52
|
+
}
|
|
53
|
+
export interface FileBlock extends RichBlockBase {
|
|
54
|
+
readonly kind: 'file';
|
|
55
|
+
}
|
|
56
|
+
export type RichBlock = CardBlock | ChecklistBlock | DiffBlock | AudioBlock | MediaGalleryBlock | InteractiveBlock | HtmlWidgetBlock | FileBlock;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,SAAS,OAAO,EAAE,KAAK,IAAI,CAAC;AAEvE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,kBAAkB,CAAC;IACzB,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC;CACf;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrF;AAED,MAAM,WAAW,cAAe,SAAQ,aAAa;IACnD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3G;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3G;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,eAAgB,SAAQ,aAAa;IACpD,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,SAAU,SAAQ,aAAa;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,cAAc,GACd,SAAS,GACT,UAAU,GACV,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,SAAS,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|