evogram-gramjs 1.1.0 → 1.1.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.
Files changed (62) hide show
  1. package/lib/EvogramGramJS.d.ts +51 -0
  2. package/lib/EvogramGramJS.js +99 -0
  3. package/lib/commands/Accounts.command.d.ts +6 -0
  4. package/lib/commands/Accounts.command.js +95 -0
  5. package/lib/commands/AddAccount.command.d.ts +19 -0
  6. package/lib/commands/AddAccount.command.js +461 -0
  7. package/lib/commands/index.d.ts +2 -0
  8. package/lib/commands/index.js +5 -0
  9. package/lib/commands/managment/DeleteAccount.command.d.ts +0 -0
  10. package/{src/commands/managment/DeleteAccount.command.ts → lib/commands/managment/DeleteAccount.command.js} +1 -2
  11. package/lib/config/database.config.d.ts +26 -0
  12. package/lib/config/database.config.js +31 -0
  13. package/lib/entities/Session.entity.d.ts +28 -0
  14. package/lib/entities/Session.entity.js +71 -0
  15. package/lib/entities/SessionEventLog.entity.d.ts +22 -0
  16. package/lib/entities/SessionEventLog.entity.js +50 -0
  17. package/lib/examples/auth.example.d.ts +10 -0
  18. package/lib/examples/auth.example.js +126 -0
  19. package/lib/examples/database.example.d.ts +13 -0
  20. package/lib/examples/database.example.js +109 -0
  21. package/lib/examples/usage.example.d.ts +13 -0
  22. package/lib/examples/usage.example.js +127 -0
  23. package/lib/index.d.ts +7 -0
  24. package/lib/index.js +10 -0
  25. package/lib/services/DatabaseService.d.ts +30 -0
  26. package/lib/services/DatabaseService.js +93 -0
  27. package/lib/services/ImageUploadService.d.ts +15 -0
  28. package/lib/services/ImageUploadService.js +56 -0
  29. package/lib/sessions/Session.d.ts +13 -0
  30. package/lib/sessions/Session.js +25 -0
  31. package/lib/sessions/SessionAuth.d.ts +72 -0
  32. package/lib/sessions/SessionAuth.js +327 -0
  33. package/lib/sessions/SessionLogger.d.ts +84 -0
  34. package/lib/sessions/SessionLogger.js +196 -0
  35. package/lib/sessions/SessionManager.d.ts +84 -0
  36. package/lib/sessions/SessionManager.js +198 -0
  37. package/lib/test.d.ts +1 -0
  38. package/lib/test.js +144 -0
  39. package/lib/types/auth.types.d.ts +90 -0
  40. package/lib/types/auth.types.js +19 -0
  41. package/lib/types/session.types.d.ts +87 -0
  42. package/lib/types/session.types.js +21 -0
  43. package/lib/utils/Deferrer.d.ts +6 -0
  44. package/lib/utils/Deferrer.js +14 -0
  45. package/package.json +1 -2
  46. package/src/EvogramGramJS.ts +0 -98
  47. package/src/commands/Accounts.command.ts +0 -89
  48. package/src/commands/AddAccount.command.ts +0 -449
  49. package/src/commands/index.ts +0 -2
  50. package/src/config/database.config.ts +0 -75
  51. package/src/entities/Session.entity.ts +0 -58
  52. package/src/entities/SessionEventLog.entity.ts +0 -41
  53. package/src/index.ts +0 -7
  54. package/src/services/DatabaseService.ts +0 -82
  55. package/src/services/ImageUploadService.ts +0 -49
  56. package/src/sessions/Session.ts +0 -21
  57. package/src/sessions/SessionAuth.ts +0 -356
  58. package/src/sessions/SessionLogger.ts +0 -208
  59. package/src/sessions/SessionManager.ts +0 -211
  60. package/src/types/auth.types.ts +0 -94
  61. package/src/types/session.types.ts +0 -96
  62. package/src/utils/Deferrer.ts +0 -12
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Состояния процесса авторизации
3
+ */
4
+ export declare enum AuthState {
5
+ /** Начальное состояние - не авторизован */
6
+ INITIAL = "initial",
7
+ /** Ожидание кода подтверждения */
8
+ WAITING_CODE = "waiting_code",
9
+ /** Ожидание пароля (2FA) */
10
+ WAITING_PASSWORD = "waiting_password",
11
+ /** Авторизация завершена */
12
+ AUTHORIZED = "authorized",
13
+ /** Ошибка авторизации */
14
+ ERROR = "error"
15
+ }
16
+ /**
17
+ * Информация о процессе авторизации
18
+ */
19
+ export interface AuthInfo {
20
+ /** Идентификатор сессии */
21
+ sessionId: string;
22
+ /** Текущее состояние авторизации */
23
+ state: AuthState;
24
+ /** Номер телефона (если указан) */
25
+ phoneNumber?: string;
26
+ /** Требуется ли пароль (2FA) */
27
+ isRequiredPassword: boolean;
28
+ /** Код подтверждения (если ожидается) */
29
+ code?: string;
30
+ /** Пароль (2FA) (если ожидается) */
31
+ password?: string;
32
+ /** Хеш кода подтверждения */
33
+ phoneCodeHash?: string;
34
+ /** Сообщение об ошибке (если есть) */
35
+ error?: string;
36
+ /** Время начала авторизации */
37
+ startedAt: Date;
38
+ /** Время последнего обновления */
39
+ updatedAt: Date;
40
+ /** Промисы для ожидания кода и пароля */
41
+ _codeResolver?: (code: string) => void;
42
+ _codeRejecter?: (error: Error) => void;
43
+ _passwordResolver?: (password: string) => void;
44
+ _passwordRejecter?: (error: Error) => void;
45
+ /** Промис для отслеживания начальной ошибки (до запроса кода) */
46
+ _initialErrorRejecter?: (error: Error) => void;
47
+ /** Resolver для промиса, когда код был запрошен (успешное начало) */
48
+ _codeRequestedResolver?: () => void;
49
+ /** Флаг, что код был запрошен (для различения начальной ошибки от ошибки после запроса кода) */
50
+ _codeRequested?: boolean;
51
+ /** Флаг, что была ошибка неверного кода (для отслеживания повторной попытки) */
52
+ _hasCodeError?: boolean;
53
+ }
54
+ /**
55
+ * Результат отправки кода
56
+ */
57
+ export interface SendCodeResult {
58
+ /** Успешно ли отправлен код */
59
+ success: boolean;
60
+ /** Требуется ли пароль (2FA) */
61
+ isRequiredPassword: boolean;
62
+ /** Сообщение об ошибке (если есть) */
63
+ error?: string;
64
+ /** Тип отправки кода (sms, call, etc.) */
65
+ phoneCodeHash?: string;
66
+ }
67
+ /**
68
+ * Результат ввода кода
69
+ */
70
+ export interface SignInResult {
71
+ /** Успешно ли авторизован */
72
+ success: boolean;
73
+ /** Требуется ли пароль (2FA) */
74
+ isRequiredPassword: boolean;
75
+ /** Сообщение об ошибке (если есть) */
76
+ error?: string;
77
+ /** Строка сессии (если авторизация успешна) */
78
+ sessionString?: string;
79
+ }
80
+ /**
81
+ * Результат ввода пароля
82
+ */
83
+ export interface SignInWithPasswordResult {
84
+ /** Успешно ли авторизован */
85
+ success: boolean;
86
+ /** Сообщение об ошибке (если есть) */
87
+ error?: string;
88
+ /** Строка сессии (если авторизация успешна) */
89
+ sessionString?: string;
90
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AuthState = void 0;
4
+ /**
5
+ * Состояния процесса авторизации
6
+ */
7
+ var AuthState;
8
+ (function (AuthState) {
9
+ /** Начальное состояние - не авторизован */
10
+ AuthState["INITIAL"] = "initial";
11
+ /** Ожидание кода подтверждения */
12
+ AuthState["WAITING_CODE"] = "waiting_code";
13
+ /** Ожидание пароля (2FA) */
14
+ AuthState["WAITING_PASSWORD"] = "waiting_password";
15
+ /** Авторизация завершена */
16
+ AuthState["AUTHORIZED"] = "authorized";
17
+ /** Ошибка авторизации */
18
+ AuthState["ERROR"] = "error";
19
+ })(AuthState || (exports.AuthState = AuthState = {}));
@@ -0,0 +1,87 @@
1
+ import { Session } from '../sessions/Session';
2
+ /**
3
+ * Конфигурация для создания новой сессии
4
+ */
5
+ export interface SessionConfig {
6
+ /** Уникальный идентификатор сессии */
7
+ sessionId: string;
8
+ /** API ID из Telegram */
9
+ apiId?: number;
10
+ /** API Hash из Telegram */
11
+ apiHash?: string;
12
+ /** Строка сессии (если уже существует) */
13
+ sessionString?: string;
14
+ /** Дополнительные опции для клиента */
15
+ clientOptions?: {
16
+ /** Использовать IPv6 */
17
+ useIPV6?: boolean;
18
+ /** Таймаут подключения */
19
+ connectionRetries?: number;
20
+ /** Максимальное количество попыток переподключения */
21
+ maxRetries?: number;
22
+ };
23
+ /** Настройки логирования */
24
+ logging?: {
25
+ /** Включить логирование (по умолчанию true) */
26
+ enabled?: boolean;
27
+ /** Директория для хранения логов (по умолчанию './logs') */
28
+ logsDirectory?: string;
29
+ };
30
+ }
31
+ /**
32
+ * Информация о сессии
33
+ * Использует класс Session для представления сессии
34
+ */
35
+ export type SessionInfo = Session;
36
+ /**
37
+ * События, которые может генерировать менеджер сессий
38
+ */
39
+ export declare enum SessionEvent {
40
+ /** Сессия была добавлена */
41
+ SESSION_ADDED = "session:added",
42
+ /** Сессия была удалена */
43
+ SESSION_REMOVED = "session:removed",
44
+ /** Сессия подключилась */
45
+ SESSION_CONNECTED = "session:connected",
46
+ /** Сессия отключилась */
47
+ SESSION_DISCONNECTED = "session:disconnected",
48
+ /** Произошла ошибка в сессии */
49
+ SESSION_ERROR = "session:error",
50
+ /** Сессия стала недействительной */
51
+ SESSION_INVALID = "session:invalid"
52
+ }
53
+ /**
54
+ * Данные события добавления/удаления сессии
55
+ */
56
+ export interface SessionEventData {
57
+ sessionId: string;
58
+ sessionInfo?: Session;
59
+ }
60
+ /**
61
+ * Данные события подключения/отключения
62
+ */
63
+ export interface SessionConnectionEventData {
64
+ sessionId: string;
65
+ isConnected: boolean;
66
+ }
67
+ /**
68
+ * Данные события ошибки
69
+ */
70
+ export interface SessionErrorEventData {
71
+ sessionId: string;
72
+ error: Error;
73
+ }
74
+ /**
75
+ * Данные события удаления сессии
76
+ */
77
+ export interface SessionRemovedEventData {
78
+ sessionId: string;
79
+ error: Error;
80
+ }
81
+ /**
82
+ * Данные события недействительности сессии
83
+ */
84
+ export interface SessionInvalidEventData {
85
+ sessionId: string;
86
+ error: Error;
87
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionEvent = void 0;
4
+ /**
5
+ * События, которые может генерировать менеджер сессий
6
+ */
7
+ var SessionEvent;
8
+ (function (SessionEvent) {
9
+ /** Сессия была добавлена */
10
+ SessionEvent["SESSION_ADDED"] = "session:added";
11
+ /** Сессия была удалена */
12
+ SessionEvent["SESSION_REMOVED"] = "session:removed";
13
+ /** Сессия подключилась */
14
+ SessionEvent["SESSION_CONNECTED"] = "session:connected";
15
+ /** Сессия отключилась */
16
+ SessionEvent["SESSION_DISCONNECTED"] = "session:disconnected";
17
+ /** Произошла ошибка в сессии */
18
+ SessionEvent["SESSION_ERROR"] = "session:error";
19
+ /** Сессия стала недействительной */
20
+ SessionEvent["SESSION_INVALID"] = "session:invalid";
21
+ })(SessionEvent || (exports.SessionEvent = SessionEvent = {}));
@@ -0,0 +1,6 @@
1
+ export declare class Deferred<T> {
2
+ promise: Promise<T>;
3
+ resolve: (value: T | PromiseLike<T>) => void;
4
+ reject: (reason?: any) => void;
5
+ constructor();
6
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Deferred = void 0;
4
+ class Deferred {
5
+ constructor() {
6
+ this.resolve = () => { };
7
+ this.reject = () => { };
8
+ this.promise = new Promise((resolve, reject) => {
9
+ this.resolve = resolve;
10
+ this.reject = reject;
11
+ });
12
+ }
13
+ }
14
+ exports.Deferred = Deferred;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "evogram-gramjs",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "main": "./lib/index.js",
5
5
  "license": "MIT",
6
6
  "dependencies": {
@@ -12,7 +12,6 @@
12
12
  "typeorm": "^0.3.20"
13
13
  },
14
14
  "peerDependencies": {
15
- "evogram": "^2.10.4",
16
15
  "telegram": "^2.26.22"
17
16
  },
18
17
  "devDependencies": {
@@ -1,98 +0,0 @@
1
- import { DatabaseConfig } from './config/database.config'
2
- import { DatabaseService } from './services/DatabaseService'
3
- import { SessionManager } from './sessions/SessionManager'
4
-
5
- /**
6
- * Главный статический класс для работы с EvogramGramJS
7
- * Управляет сессиями Telegram и базой данных
8
- */
9
- export class EvogramGramJS {
10
- private static _sessionManager: SessionManager | null = null
11
- private static _databaseService: DatabaseService | null = null
12
- private static _telegramAppId: number | null = null
13
- private static _telegramAppHash: string | null = null
14
-
15
- /**
16
- * Инициализирует EvogramGramJS
17
- *
18
- * @param telegramAppId API ID из Telegram
19
- * @param telegramAppHash API Hash из Telegram
20
- * @param databaseConfig Конфигурация базы данных (опционально)
21
- */
22
- static initialize(telegramAppId: number, telegramAppHash: string, databaseConfig?: DatabaseConfig): void {
23
- this._telegramAppId = telegramAppId
24
- this._telegramAppHash = telegramAppHash
25
-
26
- // Инициализируем сервис базы данных
27
- this._databaseService = new DatabaseService()
28
-
29
- // Инициализируем менеджер сессий с поддержкой БД
30
- this._sessionManager = new SessionManager(telegramAppId, telegramAppHash, this._databaseService)
31
-
32
- // Инициализируем базу данных асинхронно
33
- if (databaseConfig) {
34
- this._databaseService
35
- .initialize(databaseConfig)
36
- .then(async () => {
37
- // Автоматически загружаем сессии из базы данных после инициализации
38
- if (this._sessionManager) await this._sessionManager.initialize()
39
- })
40
- .catch((error) => {
41
- console.error('Ошибка инициализации базы данных:', error)
42
- })
43
- }
44
- }
45
-
46
- /**
47
- * Получает менеджер сессий
48
- *
49
- * @returns SessionManager
50
- * @throws Error если EvogramGramJS не инициализирован
51
- */
52
- static get sessionManager(): SessionManager {
53
- if (!this._sessionManager) throw new Error('EvogramGramJS не инициализирован. Вызовите EvogramGramJS.initialize() сначала.')
54
-
55
- return this._sessionManager
56
- }
57
-
58
- /**
59
- * Получает сервис базы данных
60
- *
61
- * @returns DatabaseService
62
- * @throws Error если EvogramGramJS не инициализирован
63
- */
64
- static get databaseService(): DatabaseService {
65
- if (!this._databaseService) throw new Error('EvogramGramJS не инициализирован. Вызовите EvogramGramJS.initialize() сначала.')
66
-
67
- return this._databaseService
68
- }
69
-
70
- /**
71
- * Инициализирует базу данных
72
- *
73
- * @param config Конфигурация базы данных
74
- */
75
- static async initializeDatabase(config: DatabaseConfig): Promise<void> {
76
- if (!this._databaseService) throw new Error('EvogramGramJS не инициализирован. Вызовите EvogramGramJS.initialize() сначала.')
77
- await this._databaseService.initialize(config)
78
-
79
- // Автоматически загружаем сессии из базы данных после инициализации
80
- if (this._sessionManager) await this._sessionManager.initialize()
81
- }
82
-
83
- /**
84
- * Закрывает подключение к базе данных
85
- */
86
- static async closeDatabase(): Promise<void> {
87
- if (this._databaseService) await this._databaseService.close()
88
- }
89
-
90
- /**
91
- * Проверяет, инициализирован ли EvogramGramJS
92
- *
93
- * @returns true, если инициализирован
94
- */
95
- static isInitialized(): boolean {
96
- return this._sessionManager !== null && this._databaseService !== null
97
- }
98
- }
@@ -1,89 +0,0 @@
1
- import { Command, CommandArgument, CommandContext, CommandD, CommandUpdate, InlineQueryContext, MessageContext, Pagination } from 'evogram'
2
- import { EvogramGramJS } from '../EvogramGramJS'
3
- import { AddAccountCommand } from './AddAccount.command'
4
-
5
- @CommandD({ name: 'accounts', backButton: 'Главное меню' })
6
- export class AccountsCommand extends Command {
7
- public async execute(context: CommandContext, @CommandArgument('sessionId?') sessionId?: string, @CommandArgument('page?') page?: number) {
8
- if (!sessionId) {
9
- const sessions = await EvogramGramJS.sessionManager.getAllLoadedSessions()
10
-
11
- //@ts-ignore
12
- return context[context.callbackQuery ? 'edit' : 'send']?.({
13
- // prettier-ignore
14
- text:
15
- '<blockquote><b>📊 Список аккаунтов</b></blockquote>\n\n' +
16
-
17
- '<i>Панель управлениями Вашими аккаунтами</i>',
18
- parse_mode: 'HTML',
19
- reply_markup: {
20
- inline_keyboard: [
21
- [
22
- { text: '📋 Список аккаунтов', switch_inline_query_current_chat: ' ', command: AccountsCommand },
23
- { text: '➕ Добавить аккаунт', command: AddAccountCommand },
24
- ],
25
- ...sessions.slice((Number(page) || 0) * 10, (Number(page) || 0) * 10 + 10).map((x) => [{ text: `[${x.db?.error ? '❌' : '✅'}] ${x.db?.firstName || x.db?.username || 'Безымянный'}`, command: AccountsCommand, payload: { sessionId: x.sessionId } }]),
26
- Pagination({ pages: Math.ceil(sessions.length / 10), currentPage: Number(page) || 0, command: AccountsCommand }),
27
- ],
28
- },
29
- })
30
- }
31
-
32
- const session = EvogramGramJS.sessionManager.getSession(sessionId)
33
- const db = await session?.db()
34
- const me = await session?.client
35
- .getMe()
36
- .then((x) => x)
37
- .catch(() => null)
38
-
39
- //@ts-ignore
40
- return context[context.callbackQuery ? 'edit' : 'send']?.({
41
- // prettier-ignore
42
- text:
43
- `<blockquote><b>👤 Аккаунт <a href="tg://user?id=${db?.userId}">${db?.firstName}</a></b></blockquote>\n\n` +
44
-
45
- `<i>— ID: ${db?.userId}</i>\n` +
46
- `<i>— Phone: ${db?.phoneNumber}</i>\n\n` +
47
-
48
- `<b>${me ? '✅ Активен и доступен к работе' : db?.error ? `❌ ${db?.error}` : '❌ Неавторизованный'}</b>`,
49
- parse_mode: 'HTML',
50
- })
51
- }
52
-
53
- @CommandUpdate('message')
54
- public async handleMessage(context: CommandContext, message: MessageContext) {
55
- if (!message.viaBot) return
56
-
57
- message.delete().catch(() => null)
58
- return context.redirect(AccountsCommand, { sessionId: message.text })
59
- }
60
-
61
- public async inlineExecute(context: InlineQueryContext) {
62
- const accounts = EvogramGramJS.sessionManager.getAllSessions()
63
-
64
- context.answer(
65
- await Promise.all(
66
- accounts.map(async (x) => {
67
- const db = await x.db()
68
-
69
- return {
70
- type: 'article',
71
- id: x.sessionId,
72
- title: db ? `${db?.firstName} ${db?.lastName || ''}` : 'Безымянный',
73
- description: db?.error ? `❌ ${db?.error}` : db ? '✅ Аккаунт активен' : '❌ Неавторизованный',
74
- thumbnail_url: db?.avatarUrl || undefined,
75
- input_message_content: {
76
- message_text: x.sessionId,
77
- },
78
- }
79
- })
80
- ),
81
- {
82
- switch_pm_text: accounts.length > 0 ? `Добавлено ${accounts.length} аккаунтов` : 'Нет доступных аккаунтов',
83
- switch_pm_parameter: 'accounts',
84
- cache_time: 0,
85
- is_personal: true,
86
- }
87
- )
88
- }
89
- }