katanakit-js 6.2.0 → 6.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -3
- package/dist/adapters/better-auth/better-auth.service.d.ts +83 -0
- package/dist/adapters/better-auth/better-auth.service.d.ts.map +1 -0
- package/dist/adapters/better-auth/better-auth.service.js +110 -0
- package/dist/adapters/better-auth/better-auth.service.js.map +1 -0
- package/dist/adapters/better-auth/client.d.ts +51 -0
- package/dist/adapters/better-auth/client.d.ts.map +1 -0
- package/dist/adapters/better-auth/client.js +67 -0
- package/dist/adapters/better-auth/client.js.map +1 -0
- package/dist/adapters/better-auth/index.d.ts +3 -0
- package/dist/adapters/better-auth/index.d.ts.map +1 -0
- package/dist/adapters/better-auth/index.js +3 -0
- package/dist/adapters/better-auth/index.js.map +1 -0
- package/dist/adapters/express/server.d.ts +133 -1
- package/dist/adapters/express/server.d.ts.map +1 -1
- package/dist/adapters/express/server.js +199 -97
- package/dist/adapters/express/server.js.map +1 -1
- package/dist/adapters/index.d.ts +2 -0
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +2 -0
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/insforge/insforge.service.d.ts +139 -4
- package/dist/adapters/insforge/insforge.service.d.ts.map +1 -1
- package/dist/adapters/insforge/insforge.service.js +383 -213
- package/dist/adapters/insforge/insforge.service.js.map +1 -1
- package/dist/adapters/notion/notion.service.d.ts +130 -144
- package/dist/adapters/notion/notion.service.d.ts.map +1 -1
- package/dist/adapters/notion/notion.service.js +330 -341
- package/dist/adapters/notion/notion.service.js.map +1 -1
- package/dist/adapters/photoswipe/index.d.ts +2 -0
- package/dist/adapters/photoswipe/index.d.ts.map +1 -0
- package/dist/adapters/photoswipe/index.js +2 -0
- package/dist/adapters/photoswipe/index.js.map +1 -0
- package/dist/adapters/photoswipe/photoswipe.service.d.ts +99 -0
- package/dist/adapters/photoswipe/photoswipe.service.d.ts.map +1 -0
- package/dist/adapters/photoswipe/photoswipe.service.js +150 -0
- package/dist/adapters/photoswipe/photoswipe.service.js.map +1 -0
- package/dist/adapters/telegram/telegram.service.d.ts +82 -13
- package/dist/adapters/telegram/telegram.service.d.ts.map +1 -1
- package/dist/adapters/telegram/telegram.service.js +133 -55
- package/dist/adapters/telegram/telegram.service.js.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.d.ts +181 -110
- package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
- package/dist/adapters/wordpress/wordpress.service.js +556 -465
- package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
- package/dist/config/seo.service.d.ts +1 -1
- package/dist/config/seo.service.d.ts.map +1 -1
- package/dist/config/seo.service.js +1 -1
- package/dist/config/seo.service.js.map +1 -1
- package/dist/core/services/access.service.d.ts +167 -4
- package/dist/core/services/access.service.d.ts.map +1 -1
- package/dist/core/services/access.service.js +241 -31
- package/dist/core/services/access.service.js.map +1 -1
- package/dist/core/services/agent.service.d.ts +182 -27
- package/dist/core/services/agent.service.d.ts.map +1 -1
- package/dist/core/services/agent.service.js +296 -164
- package/dist/core/services/agent.service.js.map +1 -1
- package/dist/core/services/assistant.service.d.ts +96 -5
- package/dist/core/services/assistant.service.d.ts.map +1 -1
- package/dist/core/services/assistant.service.js +171 -66
- package/dist/core/services/assistant.service.js.map +1 -1
- package/dist/core/services/dates.service.d.ts +183 -11
- package/dist/core/services/dates.service.d.ts.map +1 -1
- package/dist/core/services/dates.service.js +256 -57
- package/dist/core/services/dates.service.js.map +1 -1
- package/dist/core/services/http.service.d.ts +172 -133
- package/dist/core/services/http.service.d.ts.map +1 -1
- package/dist/core/services/http.service.js +367 -310
- package/dist/core/services/http.service.js.map +1 -1
- package/dist/core/services/logger.service.d.ts +96 -34
- package/dist/core/services/logger.service.d.ts.map +1 -1
- package/dist/core/services/logger.service.js +128 -41
- package/dist/core/services/logger.service.js.map +1 -1
- package/dist/core/services/query.service.d.ts +101 -0
- package/dist/core/services/query.service.d.ts.map +1 -1
- package/dist/core/services/query.service.js +131 -14
- package/dist/core/services/query.service.js.map +1 -1
- package/dist/core/services/utils.service.d.ts +286 -131
- package/dist/core/services/utils.service.d.ts.map +1 -1
- package/dist/core/services/utils.service.js +417 -227
- package/dist/core/services/utils.service.js.map +1 -1
- package/dist/core/services/validation.service.d.ts +48 -3
- package/dist/core/services/validation.service.d.ts.map +1 -1
- package/dist/core/services/validation.service.js +75 -23
- package/dist/core/services/validation.service.js.map +1 -1
- package/dist/infrastructure/decorators/cache.decorator.d.ts +53 -0
- package/dist/infrastructure/decorators/cache.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/cache.decorator.js +47 -0
- package/dist/infrastructure/decorators/cache.decorator.js.map +1 -0
- package/dist/infrastructure/decorators/index.d.ts +4 -0
- package/dist/infrastructure/decorators/index.d.ts.map +1 -0
- package/dist/infrastructure/decorators/index.js +4 -0
- package/dist/infrastructure/decorators/index.js.map +1 -0
- package/dist/infrastructure/decorators/logger.decorator.d.ts +38 -0
- package/dist/infrastructure/decorators/logger.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/logger.decorator.js +66 -0
- package/dist/infrastructure/decorators/logger.decorator.js.map +1 -0
- package/dist/infrastructure/decorators/retry.decorator.d.ts +37 -0
- package/dist/infrastructure/decorators/retry.decorator.d.ts.map +1 -0
- package/dist/infrastructure/decorators/retry.decorator.js +54 -0
- package/dist/infrastructure/decorators/retry.decorator.js.map +1 -0
- package/dist/infrastructure/index.d.ts +1 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +1 -0
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/styles.css +2 -0
- package/package.json +49 -14
- package/scss/_flags.scss +179 -0
- package/scss/_functions.scss +168 -0
- package/scss/_mixins.scss +658 -0
- package/scss/_reset.scss +275 -0
- package/scss/_utilities.scss +449 -0
- package/scss/_variables.scss +539 -0
- package/scss/components/_index.scss +50 -0
- package/scss/demo.scss +12 -0
- package/scss/main.scss +56 -0
|
@@ -3,27 +3,142 @@ import { useLogger } from "../../core/services/logger.service.js";
|
|
|
3
3
|
import { useSleep } from "../../core/services/utils.service.js";
|
|
4
4
|
/** Default Telegram Bot API base URL. */
|
|
5
5
|
export const TELEGRAM_API_BASE = "https://api.telegram.org";
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
/**
|
|
7
|
+
* TelegramService - Singleton para el bot de Telegram.
|
|
8
|
+
*
|
|
9
|
+
* Aplica el patrón Singleton: una única instancia centraliza la configuración,
|
|
10
|
+
* el envío de mensajes y el bucle de polling. La configuración se registra una
|
|
11
|
+
* sola vez y todas las operaciones comparten ese estado.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* TelegramService.getInstance().useInit({ token: process.env.TELEGRAM_BOT_TOKEN });
|
|
16
|
+
* await TelegramService.getInstance().useSendMessage(chatId, "Hello");
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class TelegramService {
|
|
20
|
+
static instance;
|
|
21
|
+
/** Module-level bot configuration. */
|
|
22
|
+
config = null;
|
|
23
|
+
/**
|
|
24
|
+
* Constructor privado - enforce singleton.
|
|
25
|
+
*/
|
|
26
|
+
constructor() { }
|
|
27
|
+
/**
|
|
28
|
+
* Obtiene la instancia única del TelegramService (Singleton).
|
|
29
|
+
*
|
|
30
|
+
* @returns La instancia única de {@link TelegramService}.
|
|
31
|
+
*/
|
|
32
|
+
static getInstance() {
|
|
33
|
+
if (!TelegramService.instance) {
|
|
34
|
+
TelegramService.instance = new TelegramService();
|
|
35
|
+
}
|
|
36
|
+
return TelegramService.instance;
|
|
37
|
+
}
|
|
38
|
+
/** Retrieves the configured bot or throws. */
|
|
39
|
+
useGetConfig() {
|
|
40
|
+
if (!this.config) {
|
|
41
|
+
throw new Error("[Telegram] Not configured. Call defineTelegramConfig() first.");
|
|
42
|
+
}
|
|
43
|
+
return this.config;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Registers the Telegram bot configuration.
|
|
47
|
+
*
|
|
48
|
+
* @param cfg - Bot token (from BotFather) and optional API base URL.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* TelegramService.getInstance().useInit({ token: process.env.TELEGRAM_BOT_TOKEN });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
useInit(cfg) {
|
|
56
|
+
this.config = { ...cfg };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Sends a text message to a Telegram chat.
|
|
60
|
+
*
|
|
61
|
+
* @param chatId - Destination chat id.
|
|
62
|
+
* @param text - Message body.
|
|
63
|
+
* @returns The Telegram API response.
|
|
64
|
+
*/
|
|
65
|
+
async useSendMessage(chatId, text) {
|
|
66
|
+
const { token, apiBaseUrl } = this.useGetConfig();
|
|
67
|
+
return fetch(`${apiBaseUrl ?? TELEGRAM_API_BASE}/bot${token}/sendMessage`, {
|
|
68
|
+
method: "POST",
|
|
69
|
+
headers: { "Content-Type": "application/json" },
|
|
70
|
+
body: JSON.stringify({ chat_id: chatId, text }),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Handles a single Telegram update: replies to inbound text messages.
|
|
75
|
+
*
|
|
76
|
+
* @param update - A Telegram update object (from `getUpdates` or a webhook).
|
|
77
|
+
* @param reply - Reply callback. Defaults to the assistant `useReply`.
|
|
78
|
+
*
|
|
79
|
+
* @example
|
|
80
|
+
* ```ts
|
|
81
|
+
* await TelegramService.getInstance().useHandleUpdate(update);
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
async useHandleUpdate(update, reply = useReply) {
|
|
85
|
+
const message = update?.message;
|
|
86
|
+
if (!message?.text || message.text.trim() === "")
|
|
87
|
+
return;
|
|
88
|
+
const sessionId = `telegram:${message.chat.id}`;
|
|
89
|
+
const result = await reply(sessionId, message.text);
|
|
90
|
+
if (result.ok) {
|
|
91
|
+
await this.useSendMessage(message.chat.id, result.data.reply);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Starts the long-polling loop that keeps fetching and answering updates.
|
|
96
|
+
* Runs until the provided signal aborts (or forever).
|
|
97
|
+
*
|
|
98
|
+
* @param options - Polling cadence, abort signal and reply callback.
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```ts
|
|
102
|
+
* await TelegramService.getInstance().useStartPolling();
|
|
103
|
+
* ```
|
|
104
|
+
*/
|
|
105
|
+
async useStartPolling(options = {}) {
|
|
106
|
+
const { intervalMs = 2000, signal, reply = useReply } = options;
|
|
107
|
+
const { token, apiBaseUrl } = this.useGetConfig();
|
|
108
|
+
const base = apiBaseUrl ?? TELEGRAM_API_BASE;
|
|
109
|
+
let offset = 0;
|
|
110
|
+
while (!signal?.aborted) {
|
|
111
|
+
try {
|
|
112
|
+
const response = await fetch(`${base}/bot${token}/getUpdates?timeout=30&offset=${offset}`, {
|
|
113
|
+
signal,
|
|
114
|
+
});
|
|
115
|
+
if (!response.ok) {
|
|
116
|
+
throw new Error(`getUpdates HTTP ${response.status}`);
|
|
117
|
+
}
|
|
118
|
+
const data = (await response.json());
|
|
119
|
+
for (const update of data.result ?? []) {
|
|
120
|
+
offset = Math.max(offset, update.update_id + 1);
|
|
121
|
+
await this.useHandleUpdate(update, reply);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
if (signal?.aborted)
|
|
126
|
+
break;
|
|
127
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
128
|
+
useLogger(`[Telegram] ${message}`, undefined, "error");
|
|
129
|
+
}
|
|
130
|
+
await useSleep(intervalMs);
|
|
131
|
+
}
|
|
12
132
|
}
|
|
13
|
-
return config;
|
|
14
133
|
}
|
|
15
134
|
/**
|
|
16
|
-
* Registers the Telegram bot configuration
|
|
135
|
+
* Registers the Telegram bot configuration - the config-file entry point.
|
|
17
136
|
*
|
|
18
137
|
* One call is the whole setup: the literal is registered and handed back on
|
|
19
138
|
* `config`, so `export default defineTelegramConfig({ … })` is enough.
|
|
20
139
|
*
|
|
21
|
-
* Config-only service: it accepts {@link TelegramConfig} and nothing else, so
|
|
22
|
-
* declaring methods here is a compile error (use the API, Notion, WordPress or
|
|
23
|
-
* InsForge `define*Config` when you need them).
|
|
24
|
-
*
|
|
25
140
|
* @param input - Bot token (from BotFather) and optional API base URL.
|
|
26
|
-
* @returns The registered config as a
|
|
141
|
+
* @returns The registered config as a `ConfigFacade`.
|
|
27
142
|
*
|
|
28
143
|
* @example
|
|
29
144
|
* ```ts
|
|
@@ -50,7 +165,7 @@ export function defineTelegramConfig(input) {
|
|
|
50
165
|
* ```
|
|
51
166
|
*/
|
|
52
167
|
export function useInitTelegram(cfg) {
|
|
53
|
-
|
|
168
|
+
TelegramService.getInstance().useInit(cfg);
|
|
54
169
|
}
|
|
55
170
|
/**
|
|
56
171
|
* Sends a text message to a Telegram chat.
|
|
@@ -60,18 +175,13 @@ export function useInitTelegram(cfg) {
|
|
|
60
175
|
* @returns The Telegram API response.
|
|
61
176
|
*/
|
|
62
177
|
export async function useTelegramSendMessage(chatId, text) {
|
|
63
|
-
|
|
64
|
-
return fetch(`${apiBaseUrl ?? TELEGRAM_API_BASE}/bot${token}/sendMessage`, {
|
|
65
|
-
method: "POST",
|
|
66
|
-
headers: { "Content-Type": "application/json" },
|
|
67
|
-
body: JSON.stringify({ chat_id: chatId, text }),
|
|
68
|
-
});
|
|
178
|
+
return TelegramService.getInstance().useSendMessage(chatId, text);
|
|
69
179
|
}
|
|
70
180
|
/**
|
|
71
181
|
* Handles a single Telegram update: replies to inbound text messages.
|
|
72
182
|
*
|
|
73
183
|
* @param update - A Telegram update object (from `getUpdates` or a webhook).
|
|
74
|
-
* @param reply - Reply callback. Defaults to the assistant
|
|
184
|
+
* @param reply - Reply callback. Defaults to the assistant `useReply`.
|
|
75
185
|
*
|
|
76
186
|
* @example
|
|
77
187
|
* ```ts
|
|
@@ -79,14 +189,7 @@ export async function useTelegramSendMessage(chatId, text) {
|
|
|
79
189
|
* ```
|
|
80
190
|
*/
|
|
81
191
|
export async function useHandleTelegramUpdate(update, reply = useReply) {
|
|
82
|
-
|
|
83
|
-
if (!message?.text || message.text.trim() === "")
|
|
84
|
-
return;
|
|
85
|
-
const sessionId = `telegram:${message.chat.id}`;
|
|
86
|
-
const result = await reply(sessionId, message.text);
|
|
87
|
-
if (result.ok) {
|
|
88
|
-
await useTelegramSendMessage(message.chat.id, result.data.reply);
|
|
89
|
-
}
|
|
192
|
+
return TelegramService.getInstance().useHandleUpdate(update, reply);
|
|
90
193
|
}
|
|
91
194
|
/**
|
|
92
195
|
* Starts the long-polling loop that keeps fetching and answering updates.
|
|
@@ -100,31 +203,6 @@ export async function useHandleTelegramUpdate(update, reply = useReply) {
|
|
|
100
203
|
* ```
|
|
101
204
|
*/
|
|
102
205
|
export async function useStartTelegramPolling(options = {}) {
|
|
103
|
-
|
|
104
|
-
const { token, apiBaseUrl } = getConfig();
|
|
105
|
-
const base = apiBaseUrl ?? TELEGRAM_API_BASE;
|
|
106
|
-
let offset = 0;
|
|
107
|
-
while (!signal?.aborted) {
|
|
108
|
-
try {
|
|
109
|
-
const response = await fetch(`${base}/bot${token}/getUpdates?timeout=30&offset=${offset}`, {
|
|
110
|
-
signal,
|
|
111
|
-
});
|
|
112
|
-
if (!response.ok) {
|
|
113
|
-
throw new Error(`getUpdates HTTP ${response.status}`);
|
|
114
|
-
}
|
|
115
|
-
const data = (await response.json());
|
|
116
|
-
for (const update of data.result ?? []) {
|
|
117
|
-
offset = Math.max(offset, update.update_id + 1);
|
|
118
|
-
await useHandleTelegramUpdate(update, reply);
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
catch (error) {
|
|
122
|
-
if (signal?.aborted)
|
|
123
|
-
break;
|
|
124
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
125
|
-
useLogger(`[Telegram] ${message}`, undefined, "error");
|
|
126
|
-
}
|
|
127
|
-
await useSleep(intervalMs);
|
|
128
|
-
}
|
|
206
|
+
return TelegramService.getInstance().useStartPolling(options);
|
|
129
207
|
}
|
|
130
208
|
//# sourceMappingURL=telegram.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.service.js","sourceRoot":"","sources":["../../../src/adapters/telegram/telegram.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAGhE,yCAAyC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.service.js","sourceRoot":"","sources":["../../../src/adapters/telegram/telegram.service.ts"],"names":[],"mappings":"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"}
|