itd-api 0.7.1 → 0.7.2
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 +2 -2
- package/dist/index.cjs +81 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +22 -4
- package/dist/index.d.ts +22 -4
- package/dist/index.js +81 -8
- package/dist/index.js.map +1 -1
- package/dist/realtime/index.cjs +3 -3
- package/dist/realtime/index.d.cts +2 -2
- package/dist/realtime/index.d.ts +2 -2
- package/dist/realtime/index.js +3 -3
- package/dist/rest/index.cjs +70 -6
- package/dist/rest/index.cjs.map +1 -1
- package/dist/rest/index.d.cts +11 -3
- package/dist/rest/index.d.ts +11 -3
- package/dist/rest/index.js +70 -6
- package/dist/rest/index.js.map +1 -1
- package/dist/shared/{auth-provider-CTJkKfgy.cjs → auth-provider-CG8oCQ9F.cjs} +2 -2
- package/dist/shared/{auth-provider-CTJkKfgy.cjs.map → auth-provider-CG8oCQ9F.cjs.map} +1 -1
- package/dist/shared/{auth-provider-BfogACAb.js → auth-provider-mYqxsSVa.js} +2 -2
- package/dist/shared/{auth-provider-BfogACAb.js.map → auth-provider-mYqxsSVa.js.map} +1 -1
- package/dist/shared/{render-vtLixIiU.js → render-C6HRPs10.js} +353 -56
- package/dist/shared/render-C6HRPs10.js.map +1 -0
- package/dist/shared/{render-DZrxhC5_.d.ts → render-CgwKdOzu.d.ts} +101 -40
- package/dist/shared/{render-DMp_3Nzk.d.cts → render-DO0F5YSm.d.cts} +101 -40
- package/dist/shared/{render-DyeHJNBw.cjs → render-mcuELiYi.cjs} +369 -54
- package/dist/shared/render-mcuELiYi.cjs.map +1 -0
- package/dist/shared/{url-yjl2c8Ie.cjs → url-BaMCQpYH.cjs} +76 -24
- package/dist/shared/url-BaMCQpYH.cjs.map +1 -0
- package/dist/shared/{url-B6-bXHKt.d.ts → url-DTfZ2toq.d.cts} +6 -8
- package/dist/shared/{url-B6-bXHKt.d.cts → url-DTfZ2toq.d.ts} +6 -8
- package/dist/shared/{url-CYXgxqGx.js → url-IU0xN9wX.js} +65 -25
- package/dist/shared/url-IU0xN9wX.js.map +1 -0
- package/dist/shared/{websocket-CbzB1Leq.js → websocket-BLR8eVJV.js} +2 -2
- package/dist/shared/{websocket-CbzB1Leq.js.map → websocket-BLR8eVJV.js.map} +1 -1
- package/dist/shared/{websocket-sYlynrr0.cjs → websocket-C_eI4H2o.cjs} +2 -2
- package/dist/shared/{websocket-sYlynrr0.cjs.map → websocket-C_eI4H2o.cjs.map} +1 -1
- package/dist/shared/{websocket-D1p32SB2.d.cts → websocket-DF7XIMiX.d.cts} +2 -2
- package/dist/shared/{websocket-BMtihD56.d.ts → websocket-DYKBr8HF.d.ts} +2 -2
- package/package.json +1 -1
- package/dist/shared/render-DyeHJNBw.cjs.map +0 -1
- package/dist/shared/render-vtLixIiU.js.map +0 -1
- package/dist/shared/url-CYXgxqGx.js.map +0 -1
- package/dist/shared/url-yjl2c8Ie.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
[](https://www.npmjs.com/package/itd-api)
|
|
15
15
|
[](./tsconfig.json)
|
|
16
16
|
[](./LICENSE)
|
|
17
|
+
[](https://deepwiki.com/KiowDev/itd-api)
|
|
17
18
|
|
|
18
19
|
Независимый TypeScript-клиент REST и realtime API социальной сети **итд.com**.
|
|
19
20
|
Проект не является официальным SDK и не аффилирован с итд.com.
|
|
@@ -145,8 +146,7 @@ TypeScript 5.0+. Пакет проверяется в Node.js 18, 20, 22, 24 и
|
|
|
145
146
|
|
|
146
147
|
## Проект
|
|
147
148
|
|
|
148
|
-
- [DeepWiki по исходному коду](https://deepwiki.com/KiowDev/itd-api) —
|
|
149
|
-
репозитория с ответами на вопросы про внутреннее устройство
|
|
149
|
+
- [DeepWiki по исходному коду](https://deepwiki.com/KiowDev/itd-api) — можно задать любые вопросы нейронке
|
|
150
150
|
- [CI](https://github.com/KiowDev/itd-api/actions/workflows/ci.yml)
|
|
151
151
|
- [История релизов](https://github.com/KiowDev/itd-api/releases)
|
|
152
152
|
- [Как внести вклад](./.github/CONTRIBUTING.md)
|
package/dist/index.cjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_url = require("./shared/url-
|
|
2
|
+
const require_url = require("./shared/url-BaMCQpYH.cjs");
|
|
3
3
|
const require_errors = require("./shared/errors-DfU8M5eS.cjs");
|
|
4
4
|
const require_cookies = require("./shared/cookies-DZwFq6kr.cjs");
|
|
5
|
-
const
|
|
5
|
+
const require_render = require("./shared/render-mcuELiYi.cjs");
|
|
6
|
+
const require_websocket = require("./shared/websocket-C_eI4H2o.cjs");
|
|
6
7
|
const require_storage = require("./shared/storage-BPJR_k4-.cjs");
|
|
7
|
-
const require_render = require("./shared/render-DyeHJNBw.cjs");
|
|
8
8
|
const require_options = require("./shared/options-Dg5N3r1V.cjs");
|
|
9
9
|
const require_multi_storage = require("./shared/multi-storage--yTEqiod.cjs");
|
|
10
10
|
//#region src/session/jwt.ts
|
|
@@ -1013,6 +1013,7 @@ function createManagedClient(options, internals) {
|
|
|
1013
1013
|
*/
|
|
1014
1014
|
var ItdClient = class ItdClient {
|
|
1015
1015
|
#runtime;
|
|
1016
|
+
#features;
|
|
1016
1017
|
/** Порождённые потоки уведомлений — чтобы `close()` мог закрыть их разом. */
|
|
1017
1018
|
#streams = /* @__PURE__ */ new Set();
|
|
1018
1019
|
/** Общий результат терминальной очистки для идемпотентных повторных вызовов. */
|
|
@@ -1076,8 +1077,9 @@ var ItdClient = class ItdClient {
|
|
|
1076
1077
|
}
|
|
1077
1078
|
constructor(options = {}) {
|
|
1078
1079
|
const internals = CLIENT_INTERNALS.get(options) ?? {};
|
|
1080
|
+
const catalog = new require_render.ExtensibleOperationCatalog(require_url.ITD_CATALOG);
|
|
1079
1081
|
this.#runtime = require_url.createClientRuntime(options, {
|
|
1080
|
-
catalog
|
|
1082
|
+
catalog,
|
|
1081
1083
|
queues: internals.queues,
|
|
1082
1084
|
assertActive: (action) => assertClientActive(this, action),
|
|
1083
1085
|
auth: (deps) => createItdAuth(options, {
|
|
@@ -1085,9 +1087,22 @@ var ItdClient = class ItdClient {
|
|
|
1085
1087
|
onAccountChange: () => this.#disconnectStreams()
|
|
1086
1088
|
})
|
|
1087
1089
|
});
|
|
1090
|
+
this.#features = new require_render.FeatureRegistry({
|
|
1091
|
+
http: this.#runtime.http,
|
|
1092
|
+
services: this.#runtime.services,
|
|
1093
|
+
serviceOverrides: this.#runtime.config.services,
|
|
1094
|
+
catalog,
|
|
1095
|
+
baseUrl: this.#runtime.config.baseUrl,
|
|
1096
|
+
clock: this.#runtime.config.clock,
|
|
1097
|
+
logger: this.#runtime.config.logger,
|
|
1098
|
+
assertActive: (action) => assertClientActive(this, action),
|
|
1099
|
+
registerBucket: (name, definition) => this.#runtime.registerRateLimitBucket(name, definition)
|
|
1100
|
+
});
|
|
1101
|
+
const status = this.#features.install(require_render.createStatusFeature());
|
|
1088
1102
|
this.#resources = require_render.createResources({
|
|
1089
1103
|
http: this.#runtime.http,
|
|
1090
|
-
fetch: this.#runtime.config.fetch
|
|
1104
|
+
fetch: this.#runtime.config.fetch,
|
|
1105
|
+
status
|
|
1091
1106
|
});
|
|
1092
1107
|
CLIENT_PLUGIN_REGISTRIES.set(this, this.#runtime.plugins);
|
|
1093
1108
|
}
|
|
@@ -1131,6 +1146,43 @@ var ItdClient = class ItdClient {
|
|
|
1131
1146
|
return this.#runtime.rateLimitState();
|
|
1132
1147
|
}
|
|
1133
1148
|
/**
|
|
1149
|
+
* Устанавливает предметный модуль поверх общей сессии и request pipeline клиента.
|
|
1150
|
+
*
|
|
1151
|
+
* Сервисы, операции и бакеты feature регистрируются до синхронного `setup()`. Возвращаемое
|
|
1152
|
+
* значение — типизированный API модуля; повторное имя feature отклоняется.
|
|
1153
|
+
*/
|
|
1154
|
+
install(feature) {
|
|
1155
|
+
return this.#features.install(feature);
|
|
1156
|
+
}
|
|
1157
|
+
/**
|
|
1158
|
+
* Устанавливает feature и публикует его API как readonly-свойство этого же клиента.
|
|
1159
|
+
*
|
|
1160
|
+
* Возвращаемое пересечение сохраняет тип уже подключённых свойств, поэтому вызовы можно
|
|
1161
|
+
* объединять в цепочку: `new ItdClient().withFeature('chats', chatsFeature)`.
|
|
1162
|
+
*/
|
|
1163
|
+
withFeature(key, feature) {
|
|
1164
|
+
assertClientActive(this, "установить feature");
|
|
1165
|
+
if (typeof key !== "string" || key.trim() === "" || key !== key.trim()) throw new require_errors.ItdConfigError("Свойство feature должно иметь непустое имя без краевых пробелов");
|
|
1166
|
+
if (key === "then" || key in this) throw new require_errors.ItdConfigError(`Свойство клиента «${key}» уже занято или зарезервировано`);
|
|
1167
|
+
if (!Object.isExtensible(this)) throw new require_errors.ItdConfigError("Нельзя опубликовать feature на нерасширяемом клиенте");
|
|
1168
|
+
const api = this.install(feature);
|
|
1169
|
+
Object.defineProperty(this, key, {
|
|
1170
|
+
value: api,
|
|
1171
|
+
enumerable: true,
|
|
1172
|
+
configurable: false,
|
|
1173
|
+
writable: false
|
|
1174
|
+
});
|
|
1175
|
+
return this;
|
|
1176
|
+
}
|
|
1177
|
+
/** Имена установленных feature в порядке установки. */
|
|
1178
|
+
featureNames() {
|
|
1179
|
+
return this.#features.names();
|
|
1180
|
+
}
|
|
1181
|
+
/** Установлен ли feature с таким именем. */
|
|
1182
|
+
hasFeature(name) {
|
|
1183
|
+
return this.#features.has(name);
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1134
1186
|
* Подключает плагин.
|
|
1135
1187
|
*
|
|
1136
1188
|
* Плагин может независимо регистрировать transformer логической операции и interceptor
|
|
@@ -1310,14 +1362,30 @@ var ItdClient = class ItdClient {
|
|
|
1310
1362
|
const { shutdownTimeout, clock } = this.#runtime.config;
|
|
1311
1363
|
const deadline = require_url.createDeadline(shutdownTimeout, clock);
|
|
1312
1364
|
let stuck = [];
|
|
1365
|
+
const errors = [];
|
|
1313
1366
|
try {
|
|
1314
|
-
|
|
1315
|
-
|
|
1367
|
+
try {
|
|
1368
|
+
stuck = (await Promise.all(streams.map(async (stream) => await deadline.wait(stream.drain()) ? void 0 : stream))).filter((stream) => stream !== void 0);
|
|
1369
|
+
} catch (error) {
|
|
1370
|
+
errors.push(error);
|
|
1371
|
+
}
|
|
1372
|
+
try {
|
|
1373
|
+
await this.#features.close();
|
|
1374
|
+
} catch (error) {
|
|
1375
|
+
errors.push(error);
|
|
1376
|
+
}
|
|
1377
|
+
try {
|
|
1378
|
+
await this.#resources.closeTelemetry(disposeCleanup);
|
|
1379
|
+
} catch (error) {
|
|
1380
|
+
errors.push(error);
|
|
1381
|
+
}
|
|
1316
1382
|
} finally {
|
|
1317
1383
|
deadline.cancel();
|
|
1318
1384
|
this.#runtime.close();
|
|
1319
1385
|
}
|
|
1320
|
-
if (stuck.length > 0)
|
|
1386
|
+
if (stuck.length > 0) errors.push(new require_errors.ItdStateError(`обработчики потоков (${stuck.map((stream) => stream.transport).join(", ")}) не завершились за ${shutdownTimeout} мс; ожидание прекращено`));
|
|
1387
|
+
if (errors.length === 1) throw errors[0];
|
|
1388
|
+
if (errors.length > 1) throw new AggregateError(errors, "Не удалось закрыть клиент");
|
|
1321
1389
|
}
|
|
1322
1390
|
/**
|
|
1323
1391
|
* Окончательно освобождает клиент: выполняет {@link close}, отменяет незавершённые
|
|
@@ -1350,6 +1418,11 @@ var ItdClient = class ItdClient {
|
|
|
1350
1418
|
} catch (error) {
|
|
1351
1419
|
errors.push(error);
|
|
1352
1420
|
}
|
|
1421
|
+
try {
|
|
1422
|
+
await this.#features.dispose();
|
|
1423
|
+
} catch (error) {
|
|
1424
|
+
errors.push(error);
|
|
1425
|
+
}
|
|
1353
1426
|
try {
|
|
1354
1427
|
await this.#runtime.dispose();
|
|
1355
1428
|
} catch (error) {
|