itd-api 0.0.7 → 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 +94 -10
- package/dist/{chunk-3RNNZJZ4.cjs → chunk-HTF2MOM4.cjs} +1552 -1081
- package/dist/chunk-HTF2MOM4.cjs.map +1 -0
- package/dist/{chunk-CG4SERVM.js → chunk-MYAU2WJU.js} +1542 -1082
- 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 +165 -96
- 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 +35 -10
- package/dist/node.js.map +1 -1
- package/package.json +8 -4
- package/dist/chunk-3RNNZJZ4.cjs.map +0 -1
- package/dist/chunk-CG4SERVM.js.map +0 -1
- package/dist/index-DNFPX_Z1.d.cts +0 -3900
- package/dist/index-DNFPX_Z1.d.ts +0 -3900
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,6 +511,35 @@ 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
|
+
|
|
517
|
+
### Прокси (HTTP/SOCKS5)
|
|
518
|
+
|
|
519
|
+
Чтобы направить запросы клиента через прокси, возьмите `fetch` из пакета
|
|
520
|
+
[`@itd-api/proxy`](./proxy/README.md):
|
|
521
|
+
|
|
522
|
+
```sh
|
|
523
|
+
npm i @itd-api/proxy
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
```ts
|
|
527
|
+
import { ItdClient } from 'itd-api';
|
|
528
|
+
import { proxyFetch } from '@itd-api/proxy';
|
|
529
|
+
|
|
530
|
+
const fetch = proxyFetch('socks5://127.0.0.1:1080');
|
|
531
|
+
// http://…, https://…, socks5://… — можно с user:pass@
|
|
532
|
+
const itd = new ItdClient({ fetch });
|
|
533
|
+
|
|
534
|
+
// …работа…
|
|
535
|
+
|
|
536
|
+
await itd.close();
|
|
537
|
+
await fetch.close(); // закрывает пул соединений
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
Через тот же `fetch` пойдут авторизация, cookie, очередь, повторы и поток уведомлений.
|
|
541
|
+
Только для Node/Bun/Deno. Подробности — в [README пакета](./proxy/README.md).
|
|
542
|
+
|
|
459
543
|
---
|
|
460
544
|
|
|
461
545
|
## Плагины
|
|
@@ -465,19 +549,19 @@ Deno и React Native ограничение не действует.
|
|
|
465
549
|
|
|
466
550
|
```ts
|
|
467
551
|
import { ItdClient } from 'itd-api';
|
|
468
|
-
import { crypt } from 'itd-api
|
|
552
|
+
import { crypt } from '@itd-api/crypto';
|
|
469
553
|
|
|
470
554
|
const itd = new ItdClient({ auth: token });
|
|
471
555
|
itd.use(crypt());
|
|
472
556
|
```
|
|
473
557
|
|
|
474
|
-
###
|
|
558
|
+
### `@itd-api/crypto` — скрытые сообщения
|
|
475
559
|
|
|
476
|
-
[Отдельный пакет](./crypto): прячет текст в невидимых символах внутри обычного поста.
|
|
560
|
+
[Отдельный пакет](./crypto/README.md): прячет текст в невидимых символах внутри обычного поста.
|
|
477
561
|
Читатель видит обложку, а тот, у кого подключён плагин, получает спрятанное отдельным полем.
|
|
478
562
|
|
|
479
563
|
```sh
|
|
480
|
-
npm i itd-api
|
|
564
|
+
npm i @itd-api/crypto
|
|
481
565
|
```
|
|
482
566
|
|
|
483
567
|
```ts
|
|
@@ -497,7 +581,7 @@ post.secret?.text; // 'секретный текст'
|
|
|
497
581
|
|
|
498
582
|
Шифра два: `invisible` — невидимые символы с обложкой, `beecrypt` — видимый текст из букв
|
|
499
583
|
`жъЖЪ`. Подробности, ограничения и то, как подключить свой шифр, — в
|
|
500
|
-
[README пакета](./crypto).
|
|
584
|
+
[README пакета](./crypto/README.md).
|
|
501
585
|
|
|
502
586
|
### Свой плагин
|
|
503
587
|
|
|
@@ -556,7 +640,7 @@ declare module 'itd-api' {
|
|
|
556
640
|
| `itd.files` | загрузка медиа |
|
|
557
641
|
| `itd.hashtags` · `itd.search` | хэштеги, трендовые, глобальный поиск |
|
|
558
642
|
| `itd.reports` · `itd.verification` | жалобы, заявка на верификацию |
|
|
559
|
-
| `itd.subscription` · `itd.platform` | подписка, способы оплаты,
|
|
643
|
+
| `itd.subscription` · `itd.platform` | подписка, способы оплаты, анонсы, статус сервисов |
|
|
560
644
|
| `itd.realtime()` | поток уведомлений |
|
|
561
645
|
| `itd.use()` | плагины: обёртки вокруг запроса и ответа |
|
|
562
646
|
| `itd.request()` | произвольный запрос, если метода ещё нет |
|