itd-api 0.1.0 → 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.
Files changed (80) hide show
  1. package/README.md +121 -495
  2. package/dist/index.cjs +9212 -412
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +5176 -1
  5. package/dist/index.d.ts +5176 -1
  6. package/dist/index.js +9118 -2
  7. package/dist/index.js.map +1 -1
  8. package/dist/multi-storage-BhcA2Izn.d.ts +198 -0
  9. package/dist/multi-storage-CyMe404l.js +805 -0
  10. package/dist/multi-storage-CyMe404l.js.map +1 -0
  11. package/dist/multi-storage-D1keK2Op.cjs +930 -0
  12. package/dist/multi-storage-D1keK2Op.cjs.map +1 -0
  13. package/dist/multi-storage-NDqzRQcD.d.cts +198 -0
  14. package/dist/node.cjs +225 -548
  15. package/dist/node.cjs.map +1 -1
  16. package/dist/node.d.cts +46 -59
  17. package/dist/node.d.ts +46 -59
  18. package/dist/node.js +223 -126
  19. package/dist/node.js.map +1 -1
  20. package/dist/runtime-CFEsf-jD.cjs +185 -0
  21. package/dist/runtime-CFEsf-jD.cjs.map +1 -0
  22. package/dist/runtime-DHxDn8gf.js +126 -0
  23. package/dist/runtime-DHxDn8gf.js.map +1 -0
  24. package/dist/storage-BjNRlkbE.d.cts +82 -0
  25. package/dist/storage-BjNRlkbE.d.ts +82 -0
  26. package/dist/storage-D9tfHx7Z.js +424 -0
  27. package/dist/storage-D9tfHx7Z.js.map +1 -0
  28. package/dist/storage-ycBqLBRB.cjs +615 -0
  29. package/dist/storage-ycBqLBRB.cjs.map +1 -0
  30. package/dist/web.cjs +87 -0
  31. package/dist/web.cjs.map +1 -0
  32. package/dist/web.d.cts +27 -0
  33. package/dist/web.d.ts +27 -0
  34. package/dist/web.js +86 -0
  35. package/dist/web.js.map +1 -0
  36. package/package.json +34 -14
  37. package/dist/chunk-6FB4HTKH.js +0 -7763
  38. package/dist/chunk-6FB4HTKH.js.map +0 -1
  39. package/dist/chunk-73CISRBG.cjs +0 -7873
  40. package/dist/chunk-73CISRBG.cjs.map +0 -1
  41. package/dist/index-BZF4K90s.d.cts +0 -4961
  42. package/dist/index-BZF4K90s.d.ts +0 -4961
  43. package/guides/README.md +0 -24
  44. package/guides/authentication/README.md +0 -176
  45. package/guides/authentication/examples/bot-with-session.mjs +0 -98
  46. package/guides/authentication/examples/turnstile-login.mjs +0 -56
  47. package/guides/integrations/README.md +0 -62
  48. package/guides/integrations/examples/proxy.mjs +0 -26
  49. package/guides/multi-accounts/README.md +0 -143
  50. package/guides/multi-accounts/examples/multi-accounts.mjs +0 -71
  51. package/guides/plugins/README.md +0 -253
  52. package/guides/plugins/examples/cache.mjs +0 -33
  53. package/guides/plugins/examples/crypto.mjs +0 -54
  54. package/guides/quickstart/README.md +0 -124
  55. package/guides/quickstart/examples/quick-start.mjs +0 -44
  56. package/guides/quickstart/examples/typescript.ts +0 -90
  57. package/guides/realtime/README.md +0 -109
  58. package/guides/realtime/examples/notifications.mjs +0 -62
  59. package/guides/reference/README.md +0 -67
  60. package/guides/reference/accounts.md +0 -101
  61. package/guides/reference/auth.md +0 -141
  62. package/guides/reference/builders.md +0 -135
  63. package/guides/reference/client.md +0 -184
  64. package/guides/reference/comments.md +0 -58
  65. package/guides/reference/discovery.md +0 -81
  66. package/guides/reference/enums.md +0 -103
  67. package/guides/reference/errors.md +0 -107
  68. package/guides/reference/files.md +0 -73
  69. package/guides/reference/models.md +0 -448
  70. package/guides/reference/notifications.md +0 -77
  71. package/guides/reference/pagination.md +0 -82
  72. package/guides/reference/platform.md +0 -47
  73. package/guides/reference/posts.md +0 -157
  74. package/guides/reference/realtime.md +0 -78
  75. package/guides/reference/reports.md +0 -28
  76. package/guides/reference/subscription.md +0 -41
  77. package/guides/reference/users.md +0 -146
  78. package/guides/reference/verification.md +0 -24
  79. package/guides/text-markup/README.md +0 -214
  80. package/guides/text-markup/examples/create-post.mjs +0 -64
@@ -0,0 +1,198 @@
1
+ import { r as TokenStorage, t as ItdSession } from "./storage-BjNRlkbE.js";
2
+ //#region src/core/attachments.d.ts
3
+ /** Способ передачи содержимого вложения. */
4
+ declare const FileTransferMode: Readonly<{
5
+ /** Сначала получить файл целиком, затем отправить его как `Blob`. */
6
+ readonly Buffer: "buffer";
7
+ /** Передавать данные по мере чтения, не собирая файл целиком в памяти. */
8
+ readonly Stream: "stream";
9
+ }>;
10
+ type FileTransferMode = (typeof FileTransferMode)[keyof typeof FileTransferMode];
11
+ /** Размер очереди потокового вложения по умолчанию — 4 МиБ. */
12
+ declare const DEFAULT_FILE_STREAM_BUFFER_BYTES: number;
13
+ /** Предел размера файла, скачиваемого по адресу, — 100 МиБ. */
14
+ declare const DEFAULT_URL_FILE_MAX_BYTES: number;
15
+ /** Что доступно источнику при открытии файла. */
16
+ interface FileContext {
17
+ /** Общая отмена текущей попытки, включая её таймаут. */
18
+ signal?: AbortSignal | undefined;
19
+ /** `fetch` клиента — с переданными пользователем настройками. */
20
+ fetch: typeof fetch;
21
+ /** Номер попытки отправки, начиная с 1. */
22
+ attempt: number;
23
+ }
24
+ /** Готовое содержимое файла. */
25
+ interface FileContent {
26
+ file: Blob | ArrayBuffer | Uint8Array;
27
+ /** Имя влияет на определение MIME, если `contentType` не задан. */
28
+ filename?: string | undefined;
29
+ /** MIME без параметров. Если не указан, определяется по имени или `Blob`. */
30
+ contentType?: string | undefined;
31
+ }
32
+ /** Открытый поток файла. */
33
+ interface FileStreamContent {
34
+ stream: ReadableStream<Uint8Array>;
35
+ filename?: string | undefined;
36
+ contentType?: string | undefined;
37
+ /** Размер, если он известен до чтения. */
38
+ size?: number | undefined;
39
+ /** Освобождает внешний ресурс после завершения попытки. */
40
+ close?: (() => void | Promise<void>) | undefined;
41
+ }
42
+ /** Буферный источник, который вычисляется непосредственно перед первой попыткой. */
43
+ interface LazyFile {
44
+ load: (context: FileContext) => FileContent | Promise<FileContent>;
45
+ }
46
+ /**
47
+ * Повторяемый потоковый источник.
48
+ *
49
+ * `open` вызывается для каждой попытки отправки. Он обязан возвращать новый поток:
50
+ * уже прочитанный `ReadableStream` повторно использовать нельзя.
51
+ */
52
+ interface StreamFile {
53
+ open: (context: FileContext) => FileStreamContent | Promise<FileStreamContent>;
54
+ }
55
+ /** Общие настройки потоковой передачи. */
56
+ interface FileStreamOptions {
57
+ /** Буферный или потоковый режим. По умолчанию `'buffer'`. */
58
+ mode?: FileTransferMode | undefined;
59
+ /** Максимальный размер файла. Без значения размер не ограничивается. */
60
+ maxBytes?: number | undefined;
61
+ /**
62
+ * Верхняя граница очереди, которой управляет библиотека. По умолчанию 4 МиБ.
63
+ *
64
+ * Сетевой рантайм может иметь собственные внутренние буферы сверх этого значения.
65
+ */
66
+ streamBufferBytes?: number | undefined;
67
+ }
68
+ /** Файл, который нужно получить по HTTP(S). */
69
+ interface UrlFile extends UrlFileOptions {
70
+ url: string;
71
+ }
72
+ /** Настройки файла по HTTP(S). */
73
+ interface UrlFileOptions extends FileStreamOptions {
74
+ filename?: string | undefined;
75
+ /** По умолчанию берётся из `Content-Type` ответа. */
76
+ contentType?: string | undefined;
77
+ }
78
+ /** Файл для загрузки. Голый поток не принимается, потому что его нельзя повторить. */
79
+ type FileInput = Blob | ArrayBuffer | Uint8Array | FileContent | UrlFile | LazyFile | StreamFile;
80
+ /** Настройки фабрики пользовательского потока. */
81
+ interface FromStreamOptions extends Omit<FileStreamOptions, 'mode'> {
82
+ filename?: string | undefined;
83
+ contentType?: string | undefined;
84
+ /** Размер, если он известен заранее. */
85
+ size?: number | undefined;
86
+ }
87
+ /** Создаёт URL-источник в выбранном режиме. */
88
+ declare function fromUrl(url: string, options: UrlFileOptions & {
89
+ mode: typeof FileTransferMode.Stream;
90
+ }): StreamFile;
91
+ declare function fromUrl(url: string, options?: UrlFileOptions & {
92
+ mode?: typeof FileTransferMode.Buffer;
93
+ }): LazyFile;
94
+ declare function fromUrl(url: string, options: UrlFileOptions): LazyFile | StreamFile;
95
+ /**
96
+ * Создаёт повторяемый пользовательский поток.
97
+ *
98
+ * Фабрика вызывается заново для каждой попытки; возвращать один и тот же поток нельзя.
99
+ */
100
+ declare function fromStream(factory: (context: FileContext) => ReadableStream<Uint8Array> | FileStreamContent | Promise<ReadableStream<Uint8Array> | FileStreamContent>, options?: FromStreamOptions): StreamFile;
101
+ //#endregion
102
+ //#region src/core/multi-storage.d.ts
103
+ /**
104
+ * Хранилище сессий нескольких аккаунтов.
105
+ *
106
+ * Отличается от {@link TokenStorage} тем, что каждый метод получает **имя аккаунта**:
107
+ * так адаптер сам решает, как строить ключ, и Redis, БД или связка ключей получают то,
108
+ * что им нужно. Имя приходит ровно тем, под которым аккаунт заведён в {@link ItdAccounts}:
109
+ * библиотека его не нормализует и не экранирует — префиксы, экранирование и ограничения
110
+ * на длину ключа остаются за адаптером.
111
+ *
112
+ * Все методы могут быть как синхронными, так и асинхронными.
113
+ *
114
+ * @example Своё хранилище поверх Redis
115
+ * ```ts
116
+ * const storage = createMultiTokenStorage({
117
+ * get: async (account) => JSON.parse((await redis.get(`itd:session:${account}`)) ?? 'null'),
118
+ * set: async (account, session) => {
119
+ * await redis.set(`itd:session:${account}`, JSON.stringify(session));
120
+ * await redis.sadd('itd:accounts', account);
121
+ * },
122
+ * clear: async (account) => {
123
+ * await redis.del(`itd:session:${account}`);
124
+ * await redis.srem('itd:accounts', account);
125
+ * },
126
+ * accounts: () => redis.smembers('itd:accounts'),
127
+ * });
128
+ * ```
129
+ */
130
+ interface MultiTokenStorage {
131
+ /** Прочитать сессию аккаунта. `null`, если её нет. */
132
+ get(account: string): ItdSession | null | Promise<ItdSession | null>;
133
+ /** Сохранить сессию аккаунта целиком. */
134
+ set(account: string, session: ItdSession): void | Promise<void>;
135
+ /** Удалить сессию аккаунта. Вызывается при выходе и при неудачном обновлении токена. */
136
+ clear(account: string): void | Promise<void>;
137
+ /**
138
+ * Имена сохранённых записей — по ним `ItdAccounts.restore()` находит кандидатов
139
+ * после перезапуска процесса.
140
+ *
141
+ * Список ведёт сам адаптер: у файлового и памятного он виден из самой записи,
142
+ * а хранилищу «ключ — значение» придётся держать множество имён рядом с сессиями.
143
+ * Перед восстановлением контейнер читает каждую запись и пропускает оставшийся после
144
+ * выхода одинокий `deviceId`: без токена или refresh-сессии авторизоваться невозможно.
145
+ * Пустой список означает лишь то, что кандидатов нет, — сами записи при этом могут быть
146
+ * доступны по имени.
147
+ */
148
+ accounts(): readonly string[] | Promise<readonly string[]>;
149
+ }
150
+ /**
151
+ * Срез мультихранилища как обычное {@link TokenStorage} — в таком виде его получает
152
+ * отдельный `ItdClient`, который про соседние аккаунты ничего не знает.
153
+ */
154
+ declare function scopedTokenStorage(storage: MultiTokenStorage, account: string): TokenStorage;
155
+ /**
156
+ * Мультихранилище в памяти процесса — вариант по умолчанию.
157
+ *
158
+ * Сессии теряются при перезапуске. Для долгоживущих ботов возьмите `FileMultiTokenStorage`
159
+ * из `itd-api/node` либо соберите своё через {@link createMultiTokenStorage}.
160
+ */
161
+ declare class MemoryMultiTokenStorage implements MultiTokenStorage {
162
+ #private;
163
+ constructor(initial?: Readonly<Record<string, ItdSession>> | null);
164
+ get(account: string): ItdSession | null;
165
+ set(account: string, session: ItdSession): void;
166
+ clear(account: string): void;
167
+ accounts(): string[];
168
+ }
169
+ /**
170
+ * Собирает {@link MultiTokenStorage} из четырёх функций — когда заводить класс избыточно.
171
+ * Аналог `createTokenStorage` для нескольких аккаунтов.
172
+ */
173
+ declare function createMultiTokenStorage(handlers: MultiTokenStorage): MultiTokenStorage;
174
+ /** Источник, который читается и пишется целиком: файл, ключ в `localStorage`, строка в БД. */
175
+ interface RecordStorageSource {
176
+ /** Прочитать все сессии разом. `null` — записи ещё нет. */
177
+ read(): Promise<Record<string, ItdSession> | null>;
178
+ /** Записать все сессии разом. */
179
+ write(record: Record<string, ItdSession>): Promise<void>;
180
+ /** Вызывается вместо {@link RecordStorageSource.write}, когда не осталось ни одной сессии. */
181
+ remove?(): Promise<void>;
182
+ }
183
+ /**
184
+ * Мультихранилище поверх источника, который читается и пишется целиком.
185
+ *
186
+ * Решает главную проблему такого способа хранения — **гонку «прочитать, изменить,
187
+ * записать»**: десять аккаунтов пишут в одну запись, и наивная реализация теряла бы
188
+ * чужие сессии. Источник читается один раз, дальше слепок живёт в памяти, а записи
189
+ * выстраиваются в цепочку и идут по очереди.
190
+ *
191
+ * Внутри процесса этого достаточно. Несколько процессов, пишущих в одну запись,
192
+ * по-прежнему затирают друг друга — как и несколько экземпляров этого адаптера,
193
+ * направленных на один источник в одном процессе.
194
+ */
195
+ declare function createRecordMultiStorage(source: RecordStorageSource): MultiTokenStorage;
196
+ //#endregion
197
+ export { StreamFile as _, createRecordMultiStorage as a, fromStream as b, DEFAULT_URL_FILE_MAX_BYTES as c, FileInput as d, FileStreamContent as f, LazyFile as g, FromStreamOptions as h, createMultiTokenStorage as i, FileContent as l, FileTransferMode as m, MultiTokenStorage as n, scopedTokenStorage as o, FileStreamOptions as p, RecordStorageSource as r, DEFAULT_FILE_STREAM_BUFFER_BYTES as s, MemoryMultiTokenStorage as t, FileContext as u, UrlFile as v, fromUrl as x, UrlFileOptions as y };
198
+ //# sourceMappingURL=multi-storage-BhcA2Izn.d.ts.map