itd-api 0.0.8 → 0.0.9
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 +79 -15
- package/dist/{chunk-ATCZ4T2K.cjs → chunk-HTF2MOM4.cjs} +517 -130
- package/dist/chunk-HTF2MOM4.cjs.map +1 -0
- package/dist/{chunk-JIYN33FG.js → chunk-MYAU2WJU.js} +507 -131
- package/dist/chunk-MYAU2WJU.js.map +1 -0
- package/dist/index.cjs +133 -89
- package/dist/index.d.cts +4206 -1
- package/dist/index.d.ts +4206 -1
- package/dist/index.js +1 -1
- package/dist/node.cjs +143 -95
- package/dist/node.cjs.map +1 -1
- package/dist/node.d.cts +3 -3
- package/dist/node.d.ts +3 -3
- package/dist/node.js +13 -9
- package/dist/node.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-ATCZ4T2K.cjs.map +0 -1
- package/dist/chunk-JIYN33FG.js.map +0 -1
- package/dist/index-Duh31Wnx.d.cts +0 -3933
- package/dist/index-Duh31Wnx.d.ts +0 -3933
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ const itd = new ItdClient({ storage: new FileTokenStorage('./.itd-session.json')
|
|
|
43
43
|
await itd.posts.create((p) => p.content('привет').attach('./photo.jpg'));
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
Готовые примеры — в папке [`examples/`](./examples).
|
|
46
|
+
Готовые примеры — в папке [`examples/`](./examples/README.md).
|
|
47
47
|
|
|
48
48
|
---
|
|
49
49
|
|
|
@@ -133,17 +133,17 @@ new ItdClient({
|
|
|
133
133
|
});
|
|
134
134
|
```
|
|
135
135
|
|
|
136
|
-
В Node таким источником может быть [
|
|
136
|
+
В Node таким источником может быть [`@itd-api/turnstile`](./turnstile/README.md) — отдельный пакет,
|
|
137
137
|
который поднимает браузер и приносит токен. Отдельный он намеренно: тянет за собой Playwright
|
|
138
138
|
и требует графической оболочки, а нужен далеко не всем — с сохранённой сессией до входа
|
|
139
139
|
по паролю дело обычно вообще не доходит.
|
|
140
140
|
|
|
141
141
|
```sh
|
|
142
|
-
npm i itd-api
|
|
142
|
+
npm i @itd-api/turnstile playwright
|
|
143
143
|
```
|
|
144
144
|
|
|
145
145
|
```ts
|
|
146
|
-
import { createTurnstileSolver } from 'itd-api
|
|
146
|
+
import { createTurnstileSolver } from '@itd-api/turnstile';
|
|
147
147
|
|
|
148
148
|
new ItdClient({
|
|
149
149
|
storage: new FileTokenStorage('./.itd-session.json'),
|
|
@@ -358,6 +358,60 @@ await stream.connect();
|
|
|
358
358
|
|
|
359
359
|
---
|
|
360
360
|
|
|
361
|
+
## Статус сервисов
|
|
362
|
+
|
|
363
|
+
`itd.platform.status()` отдаёт состояние платформы и историю доступности за 90 суток.
|
|
364
|
+
Авторизация не нужна, ответ кэшируется сервером на минуту.
|
|
365
|
+
|
|
366
|
+
```ts
|
|
367
|
+
import { statusDays } from 'itd-api';
|
|
368
|
+
|
|
369
|
+
const status = await itd.platform.status();
|
|
370
|
+
|
|
371
|
+
status.overall_status; // 'operational' | 'degraded' | 'downtime'
|
|
372
|
+
status.services.map((s) => s.current_status);
|
|
373
|
+
|
|
374
|
+
const auth = status.services.find((s) => s.id === 'auth');
|
|
375
|
+
auth?.uptime_90d; // 97.92
|
|
376
|
+
auth?.last_checked; // '2026-07-23T23:14:25Z'
|
|
377
|
+
|
|
378
|
+
const days = auth ? statusDays(auth) : []; // 90 элементов, [0] — сегодня
|
|
379
|
+
days[0]?.uptime; // 100
|
|
380
|
+
days[0]?.lines; // [{ t: 'down', text: 'недоступен 6 мин (12:00–12:06)' }]
|
|
381
|
+
```
|
|
382
|
+
|
|
383
|
+
Поле `days` приходит объектом с числовыми ключами, и сутки без данных сервер пропускает —
|
|
384
|
+
`statusDays()` разворачивает его в массив, где пропуски равны `null`. Строки в `lines`
|
|
385
|
+
готовы к показу как есть: длительность и границы интервала отдельными полями не приходят,
|
|
386
|
+
время в них московское, тогда как `date_key` суток нарезан по UTC.
|
|
387
|
+
|
|
388
|
+
### Сервисы платформы
|
|
389
|
+
|
|
390
|
+
Статус живёт на отдельном домене — `статус.итд.com`. Такие домены описываются как сервисы:
|
|
391
|
+
у каждого своё имя, хост, заголовки и признак публичности. Запрос выбирает сервис
|
|
392
|
+
полем `service`.
|
|
393
|
+
|
|
394
|
+
```ts
|
|
395
|
+
const itd = new ItdClient({
|
|
396
|
+
services: {
|
|
397
|
+
pb: {
|
|
398
|
+
baseUrl: 'https://pbapi.xn--d1ah4a.com',
|
|
399
|
+
headers: { Referer: 'https://pixel.xn--d1ah4a.com/' },
|
|
400
|
+
},
|
|
401
|
+
},
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
await itd.request({ method: 'GET', service: 'pb', path: '/api/pixel-info', query: { x: 1, y: 2 } });
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
То же самое после создания клиента — `itd.defineService({ name, baseUrl, headers, auth })`;
|
|
408
|
+
базовый URL сервиса отдаёт `itd.serviceBaseUrl(name)`.
|
|
409
|
+
|
|
410
|
+
У каждого сервиса своя очередь `rateLimit`: лимит частоты сервер считает по хосту, поэтому
|
|
411
|
+
`429` от статуса не тормозит основной API и наоборот.
|
|
412
|
+
|
|
413
|
+
---
|
|
414
|
+
|
|
361
415
|
## Ошибки
|
|
362
416
|
|
|
363
417
|
Обе формы ошибок API сведены к одному классу:
|
|
@@ -397,6 +451,7 @@ const itd = new ItdClient({
|
|
|
397
451
|
// Заголовки латиницей: кириллица в них запрещена самим HTTP.
|
|
398
452
|
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/150.0.0.0 Safari/537.36', // по умолчанию itd-api/<версия>; false — не слать
|
|
399
453
|
deviceId: '3f2a…-uuid', // по умолчанию заводится сам и живёт в сессии
|
|
454
|
+
services: { pb: 'https://pbapi.xn--d1ah4a.com' }, // домены сервисов платформы, см. ниже
|
|
400
455
|
logger: true, // токены и пароли в логах маскируются
|
|
401
456
|
hooks: {
|
|
402
457
|
onRequest: (ctx) => console.log(ctx.method, ctx.path),
|
|
@@ -456,25 +511,34 @@ rateLimit: { retryDelays: [1000, 5000, 30_000, 60_000, 90_000] } // по умо
|
|
|
456
511
|
Поэтому в браузерном приложении укажите в `baseUrl` адрес своего прокси. В Node, Bun,
|
|
457
512
|
Deno и React Native ограничение не действует.
|
|
458
513
|
|
|
514
|
+
Исключение — `itd.platform.status()`: страница статуса отдаёт
|
|
515
|
+
`Access-Control-Allow-Origin: *`, и этот метод работает из браузера напрямую.
|
|
516
|
+
|
|
459
517
|
### Прокси (HTTP/SOCKS5)
|
|
460
518
|
|
|
461
519
|
Чтобы направить запросы клиента через прокси, возьмите `fetch` из пакета
|
|
462
|
-
[
|
|
520
|
+
[`@itd-api/proxy`](./proxy/README.md):
|
|
463
521
|
|
|
464
522
|
```sh
|
|
465
|
-
npm i itd-api
|
|
523
|
+
npm i @itd-api/proxy
|
|
466
524
|
```
|
|
467
525
|
|
|
468
526
|
```ts
|
|
469
527
|
import { ItdClient } from 'itd-api';
|
|
470
|
-
import { proxyFetch } from 'itd-api
|
|
528
|
+
import { proxyFetch } from '@itd-api/proxy';
|
|
471
529
|
|
|
472
|
-
const
|
|
530
|
+
const fetch = proxyFetch('socks5://127.0.0.1:1080');
|
|
473
531
|
// http://…, https://…, socks5://… — можно с user:pass@
|
|
532
|
+
const itd = new ItdClient({ fetch });
|
|
533
|
+
|
|
534
|
+
// …работа…
|
|
535
|
+
|
|
536
|
+
await itd.close();
|
|
537
|
+
await fetch.close(); // закрывает пул соединений
|
|
474
538
|
```
|
|
475
539
|
|
|
476
540
|
Через тот же `fetch` пойдут авторизация, cookie, очередь, повторы и поток уведомлений.
|
|
477
|
-
Только для Node/Bun/Deno. Подробности — в [README пакета](./proxy).
|
|
541
|
+
Только для Node/Bun/Deno. Подробности — в [README пакета](./proxy/README.md).
|
|
478
542
|
|
|
479
543
|
---
|
|
480
544
|
|
|
@@ -485,19 +549,19 @@ const itd = new ItdClient({ fetch: proxyFetch('socks5://127.0.0.1:1080') });
|
|
|
485
549
|
|
|
486
550
|
```ts
|
|
487
551
|
import { ItdClient } from 'itd-api';
|
|
488
|
-
import { crypt } from 'itd-api
|
|
552
|
+
import { crypt } from '@itd-api/crypto';
|
|
489
553
|
|
|
490
554
|
const itd = new ItdClient({ auth: token });
|
|
491
555
|
itd.use(crypt());
|
|
492
556
|
```
|
|
493
557
|
|
|
494
|
-
###
|
|
558
|
+
### `@itd-api/crypto` — скрытые сообщения
|
|
495
559
|
|
|
496
|
-
[Отдельный пакет](./crypto): прячет текст в невидимых символах внутри обычного поста.
|
|
560
|
+
[Отдельный пакет](./crypto/README.md): прячет текст в невидимых символах внутри обычного поста.
|
|
497
561
|
Читатель видит обложку, а тот, у кого подключён плагин, получает спрятанное отдельным полем.
|
|
498
562
|
|
|
499
563
|
```sh
|
|
500
|
-
npm i itd-api
|
|
564
|
+
npm i @itd-api/crypto
|
|
501
565
|
```
|
|
502
566
|
|
|
503
567
|
```ts
|
|
@@ -517,7 +581,7 @@ post.secret?.text; // 'секретный текст'
|
|
|
517
581
|
|
|
518
582
|
Шифра два: `invisible` — невидимые символы с обложкой, `beecrypt` — видимый текст из букв
|
|
519
583
|
`жъЖЪ`. Подробности, ограничения и то, как подключить свой шифр, — в
|
|
520
|
-
[README пакета](./crypto).
|
|
584
|
+
[README пакета](./crypto/README.md).
|
|
521
585
|
|
|
522
586
|
### Свой плагин
|
|
523
587
|
|
|
@@ -576,7 +640,7 @@ declare module 'itd-api' {
|
|
|
576
640
|
| `itd.files` | загрузка медиа |
|
|
577
641
|
| `itd.hashtags` · `itd.search` | хэштеги, трендовые, глобальный поиск |
|
|
578
642
|
| `itd.reports` · `itd.verification` | жалобы, заявка на верификацию |
|
|
579
|
-
| `itd.subscription` · `itd.platform` | подписка, способы оплаты,
|
|
643
|
+
| `itd.subscription` · `itd.platform` | подписка, способы оплаты, анонсы, статус сервисов |
|
|
580
644
|
| `itd.realtime()` | поток уведомлений |
|
|
581
645
|
| `itd.use()` | плагины: обёртки вокруг запроса и ответа |
|
|
582
646
|
| `itd.request()` | произвольный запрос, если метода ещё нет |
|