itd-api 0.0.1 → 0.0.3
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 +57 -6
- package/dist/{chunk-QILCVTJI.cjs → chunk-3ODOEKQO.cjs} +354 -115
- package/dist/chunk-3ODOEKQO.cjs.map +1 -0
- package/dist/{chunk-76C65H5J.js → chunk-JIT55WDH.js} +347 -116
- package/dist/chunk-JIT55WDH.js.map +1 -0
- package/dist/{index-RzyK1gKg.d.cts → index-BCuk8jNA.d.cts} +220 -18
- package/dist/{index-RzyK1gKg.d.ts → index-BCuk8jNA.d.ts} +220 -18
- package/dist/index.cjs +94 -62
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/node.cjs +93 -61
- package/dist/node.d.cts +2 -2
- package/dist/node.d.ts +2 -2
- package/dist/node.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-76C65H5J.js.map +0 -1
- package/dist/chunk-QILCVTJI.cjs.map +0 -1
|
@@ -198,8 +198,15 @@ declare const ItdErrorCode: Readonly<{
|
|
|
198
198
|
readonly BUSINESS_RULE_VIOLATION: "BUSINESS_RULE_VIOLATION";
|
|
199
199
|
readonly RATE_LIMIT_EXCEEDED: "RATE_LIMIT_EXCEEDED";
|
|
200
200
|
readonly UNKNOWN_ERROR: "UNKNOWN_ERROR";
|
|
201
|
+
/** Сервер отвечает так на `404`, `ENTITY_NOT_FOUND` в этом случае не приходит. */
|
|
202
|
+
readonly NOT_FOUND: "NOT_FOUND";
|
|
203
|
+
/** На практике не приходит: вместо него сервер шлёт `TURNSTILE_VERIFICATION_FAILED`. */
|
|
201
204
|
readonly CAPTCHA_FAILED: "CAPTCHA_FAILED";
|
|
205
|
+
/** Капча не пройдена: токен Turnstile недействителен, просрочен или уже использован. */
|
|
206
|
+
readonly TURNSTILE_VERIFICATION_FAILED: "TURNSTILE_VERIFICATION_FAILED";
|
|
202
207
|
readonly OTP_INVALID: "OTP_INVALID";
|
|
208
|
+
/** `flowToken` неизвестен или просрочен — поток подтверждения нужно начинать заново. */
|
|
209
|
+
readonly INVALID_FLOW_TOKEN: "INVALID_FLOW_TOKEN";
|
|
203
210
|
readonly ACCOUNT_DEACTIVATED: "ACCOUNT_DEACTIVATED";
|
|
204
211
|
readonly ACCOUNT_EMAIL_DOMAIN_NOT_ALLOWED: "ACCOUNT_EMAIL_DOMAIN_NOT_ALLOWED";
|
|
205
212
|
readonly ACCOUNT_INVALID_CREDENTIALS: "ACCOUNT_INVALID_CREDENTIALS";
|
|
@@ -208,6 +215,10 @@ declare const ItdErrorCode: Readonly<{
|
|
|
208
215
|
readonly SESSION_EXPIRED: "SESSION_EXPIRED";
|
|
209
216
|
readonly SESSION_REVOKED: "SESSION_REVOKED";
|
|
210
217
|
readonly SESSION_INVALID_REFRESH_TOKEN: "SESSION_INVALID_REFRESH_TOKEN";
|
|
218
|
+
/** Запрос обновления пришёл без cookie `refresh_token` — продлевать нечего. */
|
|
219
|
+
readonly REFRESH_TOKEN_MISSING: "REFRESH_TOKEN_MISSING";
|
|
220
|
+
/** Cookie `refresh_token` есть, но сессии за ней уже нет: отозвана или истекла. */
|
|
221
|
+
readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
|
|
211
222
|
readonly MISSING_FLOW_TOKEN: "MISSING_FLOW_TOKEN";
|
|
212
223
|
readonly PROFILE_USERNAME_TAKEN: "PROFILE_USERNAME_TAKEN";
|
|
213
224
|
readonly PROFILE_RESTRICTION_ACTIVE: "PROFILE_RESTRICTION_ACTIVE";
|
|
@@ -1084,6 +1095,14 @@ interface ItdSession {
|
|
|
1084
1095
|
refreshToken?: string | undefined;
|
|
1085
1096
|
/** Сырые cookie в форме `имя=значение`, привязанные к origin API. */
|
|
1086
1097
|
cookies?: string[] | undefined;
|
|
1098
|
+
/**
|
|
1099
|
+
* Идентификатор устройства для заголовка `X-Device-Id`.
|
|
1100
|
+
*
|
|
1101
|
+
* Сервер различает по нему записи в списке сессий, поэтому значение должно пережить
|
|
1102
|
+
* перезапуск процесса — иначе каждый старт бота порождает новую сессию. Библиотека
|
|
1103
|
+
* заводит его сама при первом запросе и хранит здесь.
|
|
1104
|
+
*/
|
|
1105
|
+
deviceId?: string | undefined;
|
|
1087
1106
|
/** Когда сессия получена, мс с начала эпохи. Нужно для диагностики. */
|
|
1088
1107
|
obtainedAt?: number | undefined;
|
|
1089
1108
|
}
|
|
@@ -1159,6 +1178,22 @@ type QueryValue = string | number | boolean | null | undefined | readonly (strin
|
|
|
1159
1178
|
/** Параметры строки запроса. */
|
|
1160
1179
|
type QueryParams = Record<string, QueryValue>;
|
|
1161
1180
|
|
|
1181
|
+
/**
|
|
1182
|
+
* Вход по логину и паролю.
|
|
1183
|
+
*
|
|
1184
|
+
* Вход требует токен капчи Cloudflare Turnstile, поэтому полностью автоматическим он быть
|
|
1185
|
+
* не может: капчу должен решить кто-то снаружи. Токен одноразовый и живёт несколько минут,
|
|
1186
|
+
* так что долгоживущему клиенту нужен `getTurnstileToken` — он спрашивается заново перед
|
|
1187
|
+
* каждой попыткой входа. Одиночный `turnstileToken` годится для разового скрипта.
|
|
1188
|
+
*/
|
|
1189
|
+
interface CredentialsAuth {
|
|
1190
|
+
email: string;
|
|
1191
|
+
password: string;
|
|
1192
|
+
/** Разовый токен капчи. Для повторного входа после истечения сессии не подойдёт. */
|
|
1193
|
+
turnstileToken?: string | undefined;
|
|
1194
|
+
/** Источник свежего токена капчи. Спрашивается перед каждым входом. */
|
|
1195
|
+
getTurnstileToken?: (() => string | Promise<string>) | undefined;
|
|
1196
|
+
}
|
|
1162
1197
|
/**
|
|
1163
1198
|
* Как клиент получает доступ к API.
|
|
1164
1199
|
*
|
|
@@ -1169,17 +1204,14 @@ type QueryParams = Record<string, QueryValue>;
|
|
|
1169
1204
|
* ```ts
|
|
1170
1205
|
* new ItdClient({ auth: '<accessToken>' }); // разовый вызов
|
|
1171
1206
|
* new ItdClient({ auth: { accessToken, refreshToken } }); // восстановить сессию
|
|
1172
|
-
* new ItdClient({ auth: { email, password } });
|
|
1207
|
+
* new ItdClient({ auth: { email, password, getTurnstileToken } }); // залогиниться самому
|
|
1173
1208
|
* new ItdClient({ auth: { getToken: () => vault.read() } }); // токен из внешнего источника
|
|
1174
1209
|
* ```
|
|
1175
1210
|
*/
|
|
1176
1211
|
type AuthInput = string | {
|
|
1177
1212
|
accessToken: string;
|
|
1178
1213
|
refreshToken?: string | undefined;
|
|
1179
|
-
} | {
|
|
1180
|
-
email: string;
|
|
1181
|
-
password: string;
|
|
1182
|
-
} | {
|
|
1214
|
+
} | CredentialsAuth | {
|
|
1183
1215
|
getToken: () => string | null | Promise<string | null>;
|
|
1184
1216
|
};
|
|
1185
1217
|
/** Куда библиотека пишет отладочные сообщения. Совместим с `console`. */
|
|
@@ -1326,6 +1358,22 @@ interface ItdClientOptions {
|
|
|
1326
1358
|
logger?: Logger | boolean | undefined;
|
|
1327
1359
|
/** Заголовки, добавляемые ко всем запросам, — например `User-Agent` для бота. */
|
|
1328
1360
|
headers?: Record<string, string> | undefined;
|
|
1361
|
+
/**
|
|
1362
|
+
* Значение заголовка `X-Device-Id`, который уходит с каждым запросом.
|
|
1363
|
+
*
|
|
1364
|
+
* Сервер различает по нему записи в списке сессий, поэтому значение должно быть стабильным.
|
|
1365
|
+
* Если не задать, библиотека заведёт идентификатор сама и сохранит его в {@link ItdSession},
|
|
1366
|
+
* так что при постоянном хранилище он переживёт перезапуск процесса.
|
|
1367
|
+
*/
|
|
1368
|
+
deviceId?: string | undefined;
|
|
1369
|
+
/**
|
|
1370
|
+
* Значение заголовка `User-Agent`. `false` — не отправлять его вовсе.
|
|
1371
|
+
*
|
|
1372
|
+
* По умолчанию `Mozilla/5.0 (compatible; itd-api/<версия>; …)`: `fetch` в Node не шлёт
|
|
1373
|
+
* `User-Agent` сам, а сайт стоит за DDoS-Guard, который такие запросы может не пропустить.
|
|
1374
|
+
* В браузере опция не действует — там заголовок менять запрещено.
|
|
1375
|
+
*/
|
|
1376
|
+
userAgent?: string | false | undefined;
|
|
1329
1377
|
/** Как обращаться с cookie. По умолчанию определяется по среде исполнения. */
|
|
1330
1378
|
mode?: RuntimeMode | undefined;
|
|
1331
1379
|
}
|
|
@@ -1360,6 +1408,19 @@ interface RawRequestOptions extends RequestOptions {
|
|
|
1360
1408
|
declare const DEFAULT_BASE_URL = "https://xn--d1ah4a.com";
|
|
1361
1409
|
/** Таймаут запроса по умолчанию. Столько же использует официальный клиент итд.com. */
|
|
1362
1410
|
declare const DEFAULT_TIMEOUT = 30000;
|
|
1411
|
+
/** Версия библиотеки. Держится в синхронизации с `package.json` вручную — см. `npm version`. */
|
|
1412
|
+
declare const LIBRARY_VERSION = "0.0.2";
|
|
1413
|
+
/**
|
|
1414
|
+
* `User-Agent` по умолчанию.
|
|
1415
|
+
*
|
|
1416
|
+
* Сайт стоит за DDoS-Guard, и запросы вовсе без `User-Agent` (так делает `fetch` в Node)
|
|
1417
|
+
* имеют шанс не пройти фильтр. Префикс `Mozilla/5.0` — дань традиции таких фильтров,
|
|
1418
|
+
* дальше идёт честное имя библиотеки: подделываться под браузер она не должна.
|
|
1419
|
+
*
|
|
1420
|
+
* В браузере заголовок не выставляется — `User-Agent` там запрещён к изменению, и среда
|
|
1421
|
+
* молча его игнорирует.
|
|
1422
|
+
*/
|
|
1423
|
+
declare const DEFAULT_USER_AGENT = "Mozilla/5.0 (compatible; itd-api/0.0.2; +https://github.com/KiowDev/itd-api)";
|
|
1363
1424
|
/**
|
|
1364
1425
|
* Настройки повторов со всеми значениями по умолчанию.
|
|
1365
1426
|
*
|
|
@@ -1395,6 +1456,10 @@ interface ResolvedConfig {
|
|
|
1395
1456
|
hooks: ClientHooks;
|
|
1396
1457
|
logger: Logger | undefined;
|
|
1397
1458
|
headers: Record<string, string>;
|
|
1459
|
+
/** Значение заголовка `X-Device-Id`, если задано вручную. Иначе заводится само. */
|
|
1460
|
+
deviceId: string | undefined;
|
|
1461
|
+
/** Значение заголовка `User-Agent`. `undefined` — заголовок не выставляется. */
|
|
1462
|
+
userAgent: string | undefined;
|
|
1398
1463
|
mode: RuntimeMode;
|
|
1399
1464
|
/** Вести ли собственный cookie-jar (вне браузера и React Native). */
|
|
1400
1465
|
useCookieJar: boolean;
|
|
@@ -1402,6 +1467,18 @@ interface ResolvedConfig {
|
|
|
1402
1467
|
sendCredentials: boolean;
|
|
1403
1468
|
}
|
|
1404
1469
|
|
|
1470
|
+
/** Имя cookie-флага «есть refresh-сессия». Ставится сайтом итд.com рядом с refresh-токеном. */
|
|
1471
|
+
declare const AUTH_FLAG_COOKIE = "is_auth";
|
|
1472
|
+
/**
|
|
1473
|
+
* Имя cookie с refresh-токеном.
|
|
1474
|
+
*
|
|
1475
|
+
* `POST /api/v1/auth/refresh` читает токен **только отсюда** — тело запроса сервер игнорирует.
|
|
1476
|
+
* Cookie помечена `HttpOnly`, поэтому в браузере её не прочитать и не выставить; вне браузера
|
|
1477
|
+
* она проходит через jar, и туда же кладётся токен, переданный строкой.
|
|
1478
|
+
*/
|
|
1479
|
+
declare const REFRESH_COOKIE = "refresh_token";
|
|
1480
|
+
/** Путь, которым сервер ограничивает {@link REFRESH_COOKIE}. */
|
|
1481
|
+
declare const REFRESH_COOKIE_PATH = "/api/v1/auth";
|
|
1405
1482
|
/**
|
|
1406
1483
|
* Минимальное хранилище cookie для сред без своего.
|
|
1407
1484
|
*
|
|
@@ -1422,6 +1499,13 @@ declare class CookieJar {
|
|
|
1422
1499
|
* внутри `Expires=Wed, 09 Jun 2027 …`. Разделением занимается `set-cookie-parser`.
|
|
1423
1500
|
*/
|
|
1424
1501
|
setFromResponse(url: string, response: Response): void;
|
|
1502
|
+
/**
|
|
1503
|
+
* Кладёт cookie напрямую, минуя `Set-Cookie`.
|
|
1504
|
+
*
|
|
1505
|
+
* Нужно ровно в одном случае: пользователь передал refresh-токен строкой, а сервер читает
|
|
1506
|
+
* его только из cookie. Значение не кодируется — оно уходит в заголовок как есть.
|
|
1507
|
+
*/
|
|
1508
|
+
set(url: string, name: string, value: string, path?: string): void;
|
|
1425
1509
|
/** Сохраняет cookie из готовых строк `Set-Cookie`. */
|
|
1426
1510
|
setFromStrings(url: string, setCookieStrings: string[]): void;
|
|
1427
1511
|
/**
|
|
@@ -1430,6 +1514,15 @@ declare class CookieJar {
|
|
|
1430
1514
|
* @returns строка вида `a=1; b=2` либо `undefined`, если подходящих cookie нет
|
|
1431
1515
|
*/
|
|
1432
1516
|
getHeader(url: string): string | undefined;
|
|
1517
|
+
/**
|
|
1518
|
+
* Значение действующей cookie.
|
|
1519
|
+
*
|
|
1520
|
+
* Нужно, чтобы забрать обновлённый refresh-токен: сервер ротирует его при каждом
|
|
1521
|
+
* продлении сессии, и сохранять надо именно новое значение.
|
|
1522
|
+
*
|
|
1523
|
+
* @param url если указан, учитываются origin, путь и флаг `Secure`
|
|
1524
|
+
*/
|
|
1525
|
+
getValue(name: string, url?: string): string | undefined;
|
|
1433
1526
|
/**
|
|
1434
1527
|
* Есть ли действующая cookie с таким именем.
|
|
1435
1528
|
*
|
|
@@ -1504,6 +1597,13 @@ interface HttpCollaborators {
|
|
|
1504
1597
|
* Повтор выполняется ровно один раз.
|
|
1505
1598
|
*/
|
|
1506
1599
|
onUnauthorized?(): Promise<boolean>;
|
|
1600
|
+
/**
|
|
1601
|
+
* Идентификатор устройства для заголовка `X-Device-Id`.
|
|
1602
|
+
*
|
|
1603
|
+
* Отдельно от {@link getAuthHeaders}, потому что нужен и на анонимных запросах —
|
|
1604
|
+
* например на `sign-in`, где заголовка авторизации ещё нет.
|
|
1605
|
+
*/
|
|
1606
|
+
getDeviceId?(): Promise<string> | string;
|
|
1507
1607
|
/** Значение заголовка `Cookie` для указанного URL. */
|
|
1508
1608
|
getCookieHeader?(url: string): string | undefined;
|
|
1509
1609
|
/** Приём `Set-Cookie` из ответа. */
|
|
@@ -1555,6 +1655,28 @@ declare class HttpClient {
|
|
|
1555
1655
|
request<T = unknown>(options: RawRequestOptions): Promise<T>;
|
|
1556
1656
|
}
|
|
1557
1657
|
|
|
1658
|
+
/** Пути авторизации. Вынесены, чтобы не расходиться между модулями. */
|
|
1659
|
+
declare const AUTH_PATHS: {
|
|
1660
|
+
readonly signIn: "/api/v1/auth/sign-in";
|
|
1661
|
+
readonly refresh: "/api/v1/auth/refresh";
|
|
1662
|
+
};
|
|
1663
|
+
/**
|
|
1664
|
+
* Публичный ключ Cloudflare Turnstile платформы итд.com.
|
|
1665
|
+
*
|
|
1666
|
+
* Нужен, чтобы отрисовать виджет капчи и получить токен для `signIn`, `signUp`
|
|
1667
|
+
* и `forgotPassword`.
|
|
1668
|
+
*
|
|
1669
|
+
* @example
|
|
1670
|
+
* ```ts
|
|
1671
|
+
* turnstile.render('#captcha', {
|
|
1672
|
+
* sitekey: TURNSTILE_SITE_KEY,
|
|
1673
|
+
* callback: (turnstileToken) => itd.auth.signIn({ email, password, turnstileToken }),
|
|
1674
|
+
* });
|
|
1675
|
+
* ```
|
|
1676
|
+
*/
|
|
1677
|
+
declare const TURNSTILE_SITE_KEY = "0x4AAAAAACHhxczw6fJGwPBg";
|
|
1678
|
+
/** Заголовок с идентификатором устройства. Сервер связывает с ним запись в списке сессий. */
|
|
1679
|
+
declare const DEVICE_ID_HEADER = "X-Device-Id";
|
|
1558
1680
|
/** События слоя авторизации. */
|
|
1559
1681
|
interface AuthEvents {
|
|
1560
1682
|
/** Токен получен или обновлён. */
|
|
@@ -1597,6 +1719,14 @@ declare class AuthManager {
|
|
|
1597
1719
|
hasRefreshSession(): boolean;
|
|
1598
1720
|
/** Заголовки авторизации для очередного запроса. Пустой объект, если токена нет. */
|
|
1599
1721
|
getAuthHeaders(): Promise<Record<string, string>>;
|
|
1722
|
+
/**
|
|
1723
|
+
* Идентификатор устройства для заголовка `X-Device-Id`.
|
|
1724
|
+
*
|
|
1725
|
+
* Заводится один раз и сохраняется в сессии, чтобы пережить перезапуск процесса:
|
|
1726
|
+
* сервер связывает с ним запись в списке сессий, и плавающее значение плодило бы
|
|
1727
|
+
* по новой сессии на каждый старт.
|
|
1728
|
+
*/
|
|
1729
|
+
getDeviceId(): Promise<string>;
|
|
1600
1730
|
/**
|
|
1601
1731
|
* Текущий токен доступа.
|
|
1602
1732
|
*
|
|
@@ -1624,7 +1754,12 @@ declare class AuthManager {
|
|
|
1624
1754
|
getSession(): Promise<ItdSession | null>;
|
|
1625
1755
|
/** Заменяет сессию целиком. */
|
|
1626
1756
|
setSession(session: ItdSession): Promise<void>;
|
|
1627
|
-
/**
|
|
1757
|
+
/**
|
|
1758
|
+
* Забывает сессию и cookie. Сетевой запрос не выполняется.
|
|
1759
|
+
*
|
|
1760
|
+
* Идентификатор устройства выход переживает: иначе каждая пара «выход — вход» плодила бы
|
|
1761
|
+
* новую запись в списке сессий.
|
|
1762
|
+
*/
|
|
1628
1763
|
clear(): Promise<void>;
|
|
1629
1764
|
}
|
|
1630
1765
|
|
|
@@ -2015,6 +2150,33 @@ interface Credentials {
|
|
|
2015
2150
|
email: string;
|
|
2016
2151
|
password: string;
|
|
2017
2152
|
}
|
|
2153
|
+
/**
|
|
2154
|
+
* Учётные данные вместе с токеном капчи.
|
|
2155
|
+
*
|
|
2156
|
+
* `turnstileToken` обязателен: без него сервер отвечает `VALIDATION_ERROR`, с недействительным —
|
|
2157
|
+
* `TURNSTILE_VERIFICATION_FAILED`. Токен даёт виджет Cloudflare Turnstile с ключом
|
|
2158
|
+
* {@link TURNSTILE_SITE_KEY}; он одноразовый и живёт несколько минут.
|
|
2159
|
+
*/
|
|
2160
|
+
interface CaptchaCredentials extends Credentials {
|
|
2161
|
+
turnstileToken: string;
|
|
2162
|
+
}
|
|
2163
|
+
/** Запрос письма для сброса пароля. Капча обязательна, как и при входе. */
|
|
2164
|
+
interface ForgotPasswordInput {
|
|
2165
|
+
email: string;
|
|
2166
|
+
turnstileToken: string;
|
|
2167
|
+
}
|
|
2168
|
+
/**
|
|
2169
|
+
* Установка нового пароля.
|
|
2170
|
+
*
|
|
2171
|
+
* Сброс идёт тем же потоком с кодом, что и вход: {@link AuthResource.forgotPassword} выдаёт
|
|
2172
|
+
* `flowToken`, письмо приносит `otp`, и всё это вместе с новым паролем уходит сюда.
|
|
2173
|
+
*/
|
|
2174
|
+
interface ResetPasswordInput {
|
|
2175
|
+
email: string;
|
|
2176
|
+
otp: string;
|
|
2177
|
+
flowToken: string;
|
|
2178
|
+
newPassword: string;
|
|
2179
|
+
}
|
|
2018
2180
|
/**
|
|
2019
2181
|
* Результат входа.
|
|
2020
2182
|
*
|
|
@@ -2045,7 +2207,7 @@ declare class AuthResource extends BaseResource {
|
|
|
2045
2207
|
*
|
|
2046
2208
|
* @returns `flowToken`, который нужно передать в {@link verifyOtp}
|
|
2047
2209
|
*/
|
|
2048
|
-
signUp(credentials:
|
|
2210
|
+
signUp(credentials: CaptchaCredentials, options?: RequestOptions): Promise<string>;
|
|
2049
2211
|
/**
|
|
2050
2212
|
* Выполняет вход.
|
|
2051
2213
|
*
|
|
@@ -2053,8 +2215,10 @@ declare class AuthResource extends BaseResource {
|
|
|
2053
2215
|
* тогда продолжайте через {@link verifyOtp} либо воспользуйтесь {@link signInWithOtp}.
|
|
2054
2216
|
*
|
|
2055
2217
|
* При успешном входе токен сохраняется в клиенте автоматически.
|
|
2218
|
+
*
|
|
2219
|
+
* @param credentials email, пароль и обязательный токен капчи — см. {@link CaptchaCredentials}
|
|
2056
2220
|
*/
|
|
2057
|
-
signIn(credentials:
|
|
2221
|
+
signIn(credentials: CaptchaCredentials, options?: RequestOptions): Promise<SignInResult>;
|
|
2058
2222
|
/**
|
|
2059
2223
|
* Подтверждает вход кодом из письма.
|
|
2060
2224
|
*
|
|
@@ -2087,7 +2251,7 @@ declare class AuthResource extends BaseResource {
|
|
|
2087
2251
|
* });
|
|
2088
2252
|
* ```
|
|
2089
2253
|
*/
|
|
2090
|
-
signInWithOtp(input:
|
|
2254
|
+
signInWithOtp(input: CaptchaCredentials & {
|
|
2091
2255
|
getOtp: () => string | Promise<string>;
|
|
2092
2256
|
}, options?: RequestOptions): Promise<string>;
|
|
2093
2257
|
/**
|
|
@@ -2107,18 +2271,55 @@ declare class AuthResource extends BaseResource {
|
|
|
2107
2271
|
hasRefreshSession(): boolean;
|
|
2108
2272
|
/** Завершает текущую сессию на сервере и очищает локальную. */
|
|
2109
2273
|
logout(options?: RequestOptions): Promise<void>;
|
|
2110
|
-
/**
|
|
2274
|
+
/**
|
|
2275
|
+
* Завершает все сессии пользователя и очищает локальную.
|
|
2276
|
+
*
|
|
2277
|
+
* Собран из двух запросов, потому что единого эндпоинта на сервере нет:
|
|
2278
|
+
* `POST /api/v1/auth/logout-all` отвечает `404`. Сначала отзываются все прочие сессии
|
|
2279
|
+
* (`DELETE /api/v1/auth/sessions`), затем завершается текущая — в обратном порядке
|
|
2280
|
+
* отзывать было бы уже нечем.
|
|
2281
|
+
*/
|
|
2111
2282
|
logoutAll(options?: RequestOptions): Promise<void>;
|
|
2112
2283
|
/** Забывает сессию локально, не обращаясь к серверу. */
|
|
2113
2284
|
signOut(): Promise<void>;
|
|
2114
|
-
/**
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2285
|
+
/**
|
|
2286
|
+
* Запрашивает письмо с кодом для сброса пароля.
|
|
2287
|
+
*
|
|
2288
|
+
* @returns `flowToken`, который нужно передать в {@link resetPassword}
|
|
2289
|
+
*/
|
|
2290
|
+
forgotPassword(input: ForgotPasswordInput, options?: RequestOptions): Promise<string>;
|
|
2291
|
+
/**
|
|
2292
|
+
* Устанавливает новый пароль по коду из письма.
|
|
2293
|
+
*
|
|
2294
|
+
* Сервер ждёт все четыре поля сразу — `email`, `otp`, `flowToken` и `newPassword`;
|
|
2295
|
+
* при нехватке любого отвечает `422`.
|
|
2296
|
+
*/
|
|
2297
|
+
resetPassword(input: ResetPasswordInput, options?: RequestOptions): Promise<void>;
|
|
2298
|
+
/**
|
|
2299
|
+
* Полный сброс пароля с кодом из письма.
|
|
2300
|
+
*
|
|
2301
|
+
* Тот же приём, что и {@link signInWithOtp}: код запрашивается функцией `getOtp`,
|
|
2302
|
+
* остальное библиотека делает сама.
|
|
2303
|
+
*
|
|
2304
|
+
* @example
|
|
2305
|
+
* ```ts
|
|
2306
|
+
* await itd.auth.resetPasswordWithOtp({
|
|
2307
|
+
* email,
|
|
2308
|
+
* turnstileToken,
|
|
2309
|
+
* newPassword,
|
|
2310
|
+
* getOtp: () => rl.question('Код из письма: '),
|
|
2311
|
+
* });
|
|
2312
|
+
* ```
|
|
2313
|
+
*/
|
|
2314
|
+
resetPasswordWithOtp(input: ForgotPasswordInput & {
|
|
2119
2315
|
newPassword: string;
|
|
2316
|
+
getOtp: () => string | Promise<string>;
|
|
2120
2317
|
}, options?: RequestOptions): Promise<void>;
|
|
2121
|
-
/**
|
|
2318
|
+
/**
|
|
2319
|
+
* Меняет пароль. Требует действующей сессии.
|
|
2320
|
+
*
|
|
2321
|
+
* При неверном текущем пароле сервер отвечает `ACCOUNT_CURRENT_PASSWORD_INCORRECT`.
|
|
2322
|
+
*/
|
|
2122
2323
|
changePassword(input: {
|
|
2123
2324
|
oldPassword: string;
|
|
2124
2325
|
newPassword: string;
|
|
@@ -2808,7 +3009,8 @@ declare class UsersResource extends BaseResource {
|
|
|
2808
3009
|
* import { FileTokenStorage } from 'itd-api/node';
|
|
2809
3010
|
*
|
|
2810
3011
|
* const itd = new ItdClient({
|
|
2811
|
-
*
|
|
3012
|
+
* // Вход по паролю требует токена капчи — см. AuthInput и TURNSTILE_SITE_KEY.
|
|
3013
|
+
* auth: { email, password, getTurnstileToken },
|
|
2812
3014
|
* storage: new FileTokenStorage('./.itd-session.json'),
|
|
2813
3015
|
* rateLimit: { concurrency: 4, rps: 8 },
|
|
2814
3016
|
* });
|
|
@@ -3235,4 +3437,4 @@ interface SseTransportOptions {
|
|
|
3235
3437
|
idleTimeout?: number;
|
|
3236
3438
|
}
|
|
3237
3439
|
|
|
3238
|
-
export {
|
|
3440
|
+
export { ItdAbortError as $, ALLOWED_MIME_TYPES as A, type BuilderInput as B, type CaptchaCredentials as C, type CreateReportInput as D, type Credentials as E, type FileReader as F, type CredentialsAuth as G, DEFAULT_BASE_URL as H, type ItdSession as I, DEFAULT_TIMEOUT as J, DEFAULT_USER_AGENT as K, DEVICE_ID_HEADER as L, type DwellEntry as M, type ErrorContextHook as N, type FeedParams as O, FeedTab as P, type FileInput as Q, FilesResource as R, type FollowResult as S, type TokenStorage as T, type ForgotPasswordInput as U, type Hashtag as V, type HashtagPostsParams as W, HashtagsResource as X, IMAGE_MIME_TYPES as Y, type InteractionEntry as Z, type IsoDate as _, ItdClient as a, REFRESH_COOKIE_PATH as a$, ItdApiError as a0, type ItdApiErrorInit as a1, ItdAuthError as a2, type ItdBuilder as a3, ItdConfigError as a4, ItdConflictError as a5, ItdError as a6, ItdErrorCode as a7, type ItdErrorKind as a8, type ItdFieldErrors as a9, type OAuthProvider as aA, type Page as aB, type PageState as aC, type PaginationMode as aD, Paginator as aE, type PaymentMethod as aF, type Pin as aG, type PinPostResult as aH, type PinsResult as aI, PlatformResource as aJ, type Poll as aK, PollBuilder as aL, type PollInput as aM, type PollOption as aN, type PollTransportOptions as aO, type Portal as aP, type Post as aQ, PostBuilder as aR, type PostInput as aS, type PostStats as aT, PostsResource as aU, type PrivacySettings as aV, type Profile as aW, type PublicProfile as aX, RECONNECT_BACKOFF as aY, RECONNECT_JITTER as aZ, REFRESH_COOKIE as a_, ItdForbiddenError as aa, ItdNetworkError as ab, ItdNotFoundError as ac, ItdPhoneVerificationError as ad, ItdRateLimitError as ae, ItdRealtime as af, ItdServerError as ag, ItdTimeoutError as ah, ItdValidationError as ai, LIBRARY_VERSION as aj, type LikeResult as ak, LikesVisibility as al, type Listener as am, LocalStorageTokenStorage as an, type Logger as ao, type Loose as ap, MAX_RECONNECT_ATTEMPTS as aq, MemoryTokenStorage as ar, type MyProfile as as, NOTIFICATION_TYPE_ALIASES as at, type Notification as au, type NotificationEvent as av, type NotificationListParams as aw, type NotificationSettings as ax, NotificationType as ay, NotificationsResource as az, type ItdClientOptions as b, isMyProfile as b$, type RateLimitOptions as b0, type RawRequestOptions as b1, type RealtimeEvents as b2, type RealtimeOptions as b3, RealtimeStatus as b4, type RealtimeTransport as b5, type RealtimeTransportKind as b6, type ReconnectOptions as b7, type RepliesParams as b8, type Report as b9, type Unsubscribe as bA, type UpdateNotificationSettingsInput as bB, type UpdatePrivacyInput as bC, type UpdateProfileInput as bD, type UploadOptions as bE, type UploadedFile as bF, type UserId as bG, type UserListParams as bH, type UserPostsParams as bI, type UserRef as bJ, type UserSummary as bK, UsersResource as bL, VIDEO_MIME_TYPES as bM, VerificationResource as bN, type VerificationStatus as bO, WallAccess as bP, canonicalNotificationType as bQ, comment as bR, createTokenStorage as bS, formatNotificationText as bT, isBuilder as bU, isItdApiError as bV, isItdAuthError as bW, isItdError as bX, isItdRateLimitError as bY, isItdValidationError as bZ, isKnownNotificationType as b_, ReportBuilder as ba, type ReportInput as bb, ReportReason as bc, ReportTargetType as bd, ReportsResource as be, type RequestContext as bf, type RequestOptions as bg, type ResetPasswordInput as bh, type ResponseContext as bi, type RetryContext as bj, type RetryOptions as bk, type RuntimeMode as bl, STREAM_PATH as bm, SearchResource as bn, type SearchResult as bo, type Session as bp, type SignInResult as bq, type Span as br, type SseTransportOptions as bs, type Subscription as bt, SubscriptionResource as bu, type SubscriptionState as bv, TURNSTILE_SITE_KEY as bw, TelemetryResource as bx, type TransportContext as by, type TransportEvent as bz, AUDIO_MIME_TYPES as c, normalizeNotification as c0, poll as c1, post as c2, readNotificationEvent as c3, readUnreadCountEvent as c4, report as c5, resolveNotificationUrl as c6, toDate as c7, createClient as c8, AUTH_FLAG_COOKIE as d, AUTH_PATHS as e, type Actor as f, type Announcement as g, type AnnouncementButton as h, type Attachment as i, AttachmentType as j, type AuthInput as k, AuthResource as l, type Author as m, type ChangelogEntry as n, type Clan as o, type ClientHooks as p, type Comment as q, CommentBuilder as r, type CommentInput as s, type CommentReplyTo as t, CommentSort as u, type CommentsParams as v, CommentsResource as w, type CreateCommentInput as x, type CreatePollInput as y, type CreatePostInput as z };
|