itd-api 0.0.5 → 0.0.7

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.
@@ -577,6 +577,24 @@ var AttachmentType = Object.freeze({
577
577
  /** Голосовые комментарии: `audio/ogg`, с полем `duration`. */
578
578
  Audio: "audio"
579
579
  });
580
+ var SpanType = Object.freeze({
581
+ /** Хэштег. Название без решётки лежит в `tag`. */
582
+ Hashtag: "hashtag",
583
+ /** Упоминание. Имя пользователя лежит в `tag`. */
584
+ Mention: "mention",
585
+ /** Ссылка. Адрес лежит в `url`, а не в `tag`. */
586
+ Link: "link",
587
+ Bold: "bold",
588
+ Italic: "italic",
589
+ Underline: "underline",
590
+ /** Зачёркнутый. */
591
+ Strike: "strike",
592
+ /** Спойлер: текст скрыт до нажатия. */
593
+ Spoiler: "spoiler",
594
+ /** Моноширинный. */
595
+ Monospace: "monospace",
596
+ Quote: "quote"
597
+ });
580
598
  var ReportTargetType = Object.freeze({
581
599
  Post: "post",
582
600
  Comment: "comment",
@@ -596,14 +614,18 @@ var RealtimeStatus = Object.freeze({
596
614
  Error: "error",
597
615
  Disconnected: "disconnected"
598
616
  });
599
- var WallAccess = Object.freeze({
600
- Everyone: "everyone"
601
- });
602
- var LikesVisibility = Object.freeze({
603
- Everyone: "everyone",
617
+ var AccessType = Object.freeze({
618
+ /** Никто. */
619
+ Nobody: "nobody",
604
620
  /** Только взаимные подписки. */
605
- Mutual: "mutual"
621
+ Mutual: "mutual",
622
+ /** Подписчики. */
623
+ Followers: "followers",
624
+ /** Все. */
625
+ Everyone: "everyone"
606
626
  });
627
+ var WallAccess = AccessType;
628
+ var LikesVisibility = AccessType;
607
629
  var NotificationType = Object.freeze({
608
630
  /** Реакция на пост. Старое имя — `like`. */
609
631
  PostReaction: "post_reaction",
@@ -632,6 +654,36 @@ var NotificationType = Object.freeze({
632
654
  /** Верификация отклонена. Приходит только по REST. */
633
655
  VerificationRejected: "verification_rejected"
634
656
  });
657
+ var InteractionType = Object.freeze({
658
+ /** Открытие фотографии. */
659
+ PhotoOpen: 1,
660
+ /** Прогресс просмотра видео. Несёт поля `pm`/`dm`. */
661
+ VideoProgress: 2
662
+ });
663
+ var ViewSource = Object.freeze({
664
+ FeedGlobal: 1,
665
+ FeedFollowing: 2,
666
+ FeedClan: 3,
667
+ Profile: 4,
668
+ Hashtag: 5,
669
+ PostPage: 6,
670
+ Link: 7,
671
+ Search: 8
672
+ });
673
+ var ViewReason = Object.freeze({
674
+ /** Пост ушёл из зоны видимости при обычной прокрутке. */
675
+ Normal: 0,
676
+ /** Потеря фокуса окна. */
677
+ Blur: 1,
678
+ /** Вкладка скрыта. */
679
+ Hidden: 2,
680
+ /** Уход со страницы (`pagehide`). */
681
+ PageHide: 3,
682
+ /** Элемент перестал наблюдаться. */
683
+ Unobserve: 4,
684
+ /** Достигнут порог времени просмотра. */
685
+ ThresholdMet: 5
686
+ });
635
687
  var ItdErrorCode = Object.freeze({
636
688
  BAD_REQUEST: "BAD_REQUEST",
637
689
  UNAUTHORIZED: "UNAUTHORIZED",
@@ -1696,7 +1748,7 @@ function normalizeBaseUrl(baseUrl) {
1696
1748
  // src/core/config.ts
1697
1749
  var DEFAULT_BASE_URL = "https://xn--d1ah4a.com";
1698
1750
  var DEFAULT_TIMEOUT = 3e4;
1699
- var LIBRARY_VERSION = "0.0.5";
1751
+ var LIBRARY_VERSION = "0.0.7";
1700
1752
  var DEFAULT_USER_AGENT = `Mozilla/5.0 (compatible; itd-api/${LIBRARY_VERSION}; +https://github.com/KiowDev/itd-api)`;
1701
1753
  var DEFAULT_RATE_LIMIT_DELAYS = Object.freeze([1e3, 5e3, 3e4, 6e4, 9e4]);
1702
1754
  function requirePositive(value, name) {
@@ -2091,6 +2143,7 @@ function createApiError(context) {
2091
2143
  function sleep(ms) {
2092
2144
  return new Promise((resolve) => setTimeout(resolve, ms));
2093
2145
  }
2146
+ var EMPTY_KEYS = /* @__PURE__ */ new Set();
2094
2147
  function setHeader(headers, name, value) {
2095
2148
  try {
2096
2149
  headers.set(name, value);
@@ -2144,6 +2197,7 @@ function createAbortBundle(userSignal, timeout) {
2144
2197
  var HttpClient = class {
2145
2198
  #config;
2146
2199
  #collaborators;
2200
+ #plugins;
2147
2201
  constructor(config, collaborators = {}) {
2148
2202
  this.#config = config;
2149
2203
  this.#collaborators = collaborators;
@@ -2152,6 +2206,19 @@ var HttpClient = class {
2152
2206
  get baseUrl() {
2153
2207
  return this.#config.baseUrl;
2154
2208
  }
2209
+ /**
2210
+ * Имена опций запроса, заявленные плагинами.
2211
+ *
2212
+ * Читается ресурсами: они переносят в транспорт только известные поля, а чужие,
2213
+ * если их никто не заявил, отсеивают.
2214
+ */
2215
+ get pluginOptionKeys() {
2216
+ return this.#plugins?.optionKeys ?? EMPTY_KEYS;
2217
+ }
2218
+ /** Подключает список плагинов. Реестр общий с клиентом и пополняется через `itd.use()`. */
2219
+ usePlugins(plugins) {
2220
+ this.#plugins = plugins;
2221
+ }
2155
2222
  /**
2156
2223
  * Подключает недостающие части конвейера.
2157
2224
  *
@@ -2171,10 +2238,22 @@ var HttpClient = class {
2171
2238
  * @throws {ItdNetworkError} если запрос не дошёл до сервера
2172
2239
  */
2173
2240
  async request(options) {
2174
- const task = () => this.#withRetries(options);
2241
+ const task = () => this.#withPlugins(options);
2175
2242
  if (!this.#collaborators.schedule || options.skipQueue) return task();
2176
2243
  return this.#collaborators.schedule(task);
2177
2244
  }
2245
+ /**
2246
+ * Прогоняет запрос через обёртки плагинов.
2247
+ *
2248
+ * Цепочка стоит **снаружи повторов и внутри очереди**: плагин должен увидеть запрос
2249
+ * и ответ по одному разу, независимо от того, сколько попыток понадобилось, — иначе,
2250
+ * например, текст поста зашифруется повторно на второй попытке.
2251
+ */
2252
+ #withPlugins(options) {
2253
+ const plugins = this.#plugins;
2254
+ if (!plugins || plugins.size === 0) return this.#withRetries(options);
2255
+ return plugins.run(options, (request) => this.#withRetries(request));
2256
+ }
2178
2257
  async #withRetries(options) {
2179
2258
  const method = options.method.toUpperCase();
2180
2259
  for (let attempt = 1; ; attempt++) {
@@ -2320,6 +2399,97 @@ var HttpClient = class {
2320
2399
  }
2321
2400
  };
2322
2401
 
2402
+ // src/core/plugins.ts
2403
+ var NO_KEYS = /* @__PURE__ */ new Set();
2404
+ var RESERVED_OPTION_KEYS = /* @__PURE__ */ new Set([
2405
+ "signal",
2406
+ "timeout",
2407
+ "headers",
2408
+ "retry",
2409
+ "method",
2410
+ "path",
2411
+ "query",
2412
+ "body",
2413
+ "skipAuth",
2414
+ "skipAuthRefresh",
2415
+ "skipQueue",
2416
+ "raw"
2417
+ ]);
2418
+ var PluginRegistry = class {
2419
+ #transformers = [];
2420
+ #optionKeys = /* @__PURE__ */ new Set();
2421
+ #names = /* @__PURE__ */ new Set();
2422
+ /** Сколько обёрток подключено. Ноль означает, что запрос идёт прежним путём. */
2423
+ get size() {
2424
+ return this.#transformers.length;
2425
+ }
2426
+ /** Имена опций запроса, заявленные плагинами. */
2427
+ get optionKeys() {
2428
+ return this.#optionKeys.size === 0 ? NO_KEYS : this.#optionKeys;
2429
+ }
2430
+ /**
2431
+ * Подключает плагин.
2432
+ *
2433
+ * @throws {ItdConfigError} если плагин задан неверно, уже подключён или заявил занятое
2434
+ * имя опции
2435
+ */
2436
+ add(plugin, context) {
2437
+ if (typeof plugin?.install !== "function") {
2438
+ throw new ItdConfigError("\u041F\u043B\u0430\u0433\u0438\u043D \u0434\u043E\u043B\u0436\u0435\u043D \u0431\u044B\u0442\u044C \u043E\u0431\u044A\u0435\u043A\u0442\u043E\u043C \u0441 \u043C\u0435\u0442\u043E\u0434\u043E\u043C install()");
2439
+ }
2440
+ const name = plugin.name;
2441
+ if (typeof name !== "string" || name.trim() === "") {
2442
+ throw new ItdConfigError("\u0423 \u043F\u043B\u0430\u0433\u0438\u043D\u0430 \u0434\u043E\u043B\u0436\u043D\u043E \u0431\u044B\u0442\u044C \u043D\u0435\u043F\u0443\u0441\u0442\u043E\u0435 \u0438\u043C\u044F");
2443
+ }
2444
+ if (this.#names.has(name)) {
2445
+ throw new ItdConfigError(`\u041F\u043B\u0430\u0433\u0438\u043D \xAB${name}\xBB \u0443\u0436\u0435 \u043F\u043E\u0434\u043A\u043B\u044E\u0447\u0451\u043D`);
2446
+ }
2447
+ const keys = plugin.optionKeys ?? [];
2448
+ for (const key of keys) {
2449
+ if (typeof key !== "string" || key.trim() === "") {
2450
+ throw new ItdConfigError(`\u041F\u043B\u0430\u0433\u0438\u043D \xAB${name}\xBB \u0437\u0430\u044F\u0432\u0438\u043B \u043F\u0443\u0441\u0442\u043E\u0435 \u0438\u043C\u044F \u043E\u043F\u0446\u0438\u0438`);
2451
+ }
2452
+ if (RESERVED_OPTION_KEYS.has(key)) {
2453
+ throw new ItdConfigError(
2454
+ `\u041F\u043B\u0430\u0433\u0438\u043D \xAB${name}\xBB \u0437\u0430\u044F\u0432\u0438\u043B \u043E\u043F\u0446\u0438\u044E \xAB${key}\xBB: \u044D\u0442\u043E \u043F\u043E\u043B\u0435 \u0437\u0430\u043F\u0440\u043E\u0441\u0430, \u0438\u043C\u044F \u0437\u0430\u043D\u044F\u0442\u043E. \u0417\u0430\u043D\u044F\u0442\u044B\u0435 \u0438\u043C\u0435\u043D\u0430: ${[...RESERVED_OPTION_KEYS].join(", ")}`
2455
+ );
2456
+ }
2457
+ }
2458
+ const before = this.#transformers.length;
2459
+ try {
2460
+ plugin.install({
2461
+ ...context,
2462
+ use: (transformer) => {
2463
+ if (typeof transformer !== "function") {
2464
+ throw new ItdConfigError(`\u041F\u043B\u0430\u0433\u0438\u043D \xAB${name}\xBB \u043F\u0435\u0440\u0435\u0434\u0430\u043B \u0432 use() \u043D\u0435 \u0444\u0443\u043D\u043A\u0446\u0438\u044E`);
2465
+ }
2466
+ this.#transformers.push(transformer);
2467
+ }
2468
+ });
2469
+ } catch (error) {
2470
+ this.#transformers.length = before;
2471
+ throw error;
2472
+ }
2473
+ this.#names.add(name);
2474
+ for (const key of keys) this.#optionKeys.add(key);
2475
+ }
2476
+ /**
2477
+ * Прогоняет запрос через цепочку обёрток.
2478
+ *
2479
+ * Цепочка собирается на каждый запрос заново: плагин можно подключить в любой момент,
2480
+ * а обёрток единицы — экономить тут не на чем.
2481
+ *
2482
+ * @param execute настоящий запрос, вызывается самой внутренней обёрткой
2483
+ */
2484
+ run(request, execute) {
2485
+ const chain = this.#transformers.reduceRight(
2486
+ (next, transformer) => (current) => transformer(current, next),
2487
+ execute
2488
+ );
2489
+ return chain(request);
2490
+ }
2491
+ };
2492
+
2323
2493
  // src/core/rate-limit.ts
2324
2494
  var RequestQueue = class {
2325
2495
  #concurrency;
@@ -3240,15 +3410,31 @@ var BaseResource = class {
3240
3410
  constructor(http) {
3241
3411
  this.http = http;
3242
3412
  }
3243
- /** Переносит общие поля опций запроса в параметры транспорта. */
3413
+ /**
3414
+ * Переносит общие поля опций запроса в параметры транспорта.
3415
+ *
3416
+ * Поля перечислены поимённо, а не скопированы целиком: параметры методов наследуют
3417
+ * {@link RequestOptions} и приносят с собой `limit`, `cursor` и прочее, чему в описании
3418
+ * запроса делать нечего. Исключение — опции, заявленные плагинами: их библиотека
3419
+ * не понимает, но обязана донести до обёрток нетронутыми.
3420
+ */
3244
3421
  requestOptions(options) {
3245
3422
  if (!options) return {};
3246
- return {
3423
+ const result = {
3247
3424
  ...options.signal !== void 0 ? { signal: options.signal } : {},
3248
3425
  ...options.timeout !== void 0 ? { timeout: options.timeout } : {},
3249
3426
  ...options.headers !== void 0 ? { headers: options.headers } : {},
3250
3427
  ...options.retry !== void 0 ? { retry: options.retry } : {}
3251
3428
  };
3429
+ const pluginKeys = this.http.pluginOptionKeys;
3430
+ if (pluginKeys.size === 0) return result;
3431
+ const source = options;
3432
+ const target = result;
3433
+ for (const key of pluginKeys) {
3434
+ const value = source[key];
3435
+ if (value !== void 0) target[key] = value;
3436
+ }
3437
+ return result;
3252
3438
  }
3253
3439
  /**
3254
3440
  * Собирает перебор страниц.
@@ -4089,49 +4275,6 @@ var PlatformResource = class extends BaseResource {
4089
4275
  });
4090
4276
  }
4091
4277
  };
4092
- var TelemetryResource = class extends BaseResource {
4093
- /**
4094
- * Отправляет время просмотра постов.
4095
- *
4096
- * @experimental Имена полей на проводе сжаты (`ai`, `v`, `s`), и их соответствие
4097
- * смыслу **не проверено** на реальных запросах. Может измениться без предупреждения.
4098
- */
4099
- dwell(entries, options = {}) {
4100
- return this.http.request({
4101
- method: "POST",
4102
- path: "/api/v1/i",
4103
- body: {
4104
- items: entries.map((entry) => ({
4105
- ai: entry.postId,
4106
- v: entry.duration,
4107
- ...entry.vs ? { s: entry.vs } : {}
4108
- }))
4109
- },
4110
- ...this.requestOptions(options)
4111
- });
4112
- }
4113
- /**
4114
- * Отправляет события взаимодействия с контентом.
4115
- *
4116
- * @experimental См. предупреждение у {@link TelemetryResource}.
4117
- */
4118
- interaction(entries, options = {}) {
4119
- return this.http.request({
4120
- method: "POST",
4121
- path: "/api/v1/x",
4122
- body: {
4123
- items: entries.map((entry) => ({
4124
- t: entry.type,
4125
- ...entry.value !== void 0 ? { v: entry.value } : {},
4126
- ...entry.postId ? { ai: entry.postId } : {},
4127
- ...entry.attachmentId ? { mi: entry.attachmentId } : {},
4128
- ...entry.vs ? { s: entry.vs } : {}
4129
- }))
4130
- },
4131
- ...this.requestOptions(options)
4132
- });
4133
- }
4134
- };
4135
4278
 
4136
4279
  // src/resources/notifications.ts
4137
4280
  var READ_BATCH_SIZE = 20;
@@ -4621,6 +4764,70 @@ var PostsResource = class extends BaseResource {
4621
4764
  }
4622
4765
  };
4623
4766
 
4767
+ // src/resources/telemetry.ts
4768
+ var TelemetryResource = class extends BaseResource {
4769
+ /** Идентификатор сессии телеметрии, общий для всех событий этого объекта. */
4770
+ #sessionId;
4771
+ /**
4772
+ * Идентификатор сессии телеметрии (`sid`).
4773
+ *
4774
+ * Создаётся лениво при первом обращении и далее неизменен.
4775
+ */
4776
+ get sessionId() {
4777
+ this.#sessionId ??= createDeviceId();
4778
+ return this.#sessionId;
4779
+ }
4780
+ /**
4781
+ * Отправляет события просмотра постов (`POST /api/v1/i`).
4782
+ *
4783
+ * @experimental См. предупреждение у {@link TelemetryResource}.
4784
+ */
4785
+ dwell(entries, options = {}) {
4786
+ return this.http.request({
4787
+ method: "POST",
4788
+ path: "/api/v1/i",
4789
+ body: {
4790
+ sid: options.sid ?? this.sessionId,
4791
+ e: entries.map((entry) => ({
4792
+ md: entry.durationMs ?? entry.exitAt - entry.enterAt,
4793
+ et: entry.enterAt,
4794
+ xt: entry.exitAt,
4795
+ r: entry.reason,
4796
+ v: entry.vs,
4797
+ ...entry.sourceContext !== void 0 ? { sc: entry.sourceContext } : {},
4798
+ ...entry.source !== void 0 ? { s: entry.source } : {},
4799
+ ...entry.repeat ? { b: 1 } : {}
4800
+ }))
4801
+ },
4802
+ ...this.requestOptions(options)
4803
+ });
4804
+ }
4805
+ /**
4806
+ * Отправляет события взаимодействия с контентом (`POST /api/v1/x`).
4807
+ *
4808
+ * @experimental См. предупреждение у {@link TelemetryResource}.
4809
+ */
4810
+ interaction(entries, options = {}) {
4811
+ return this.http.request({
4812
+ method: "POST",
4813
+ path: "/api/v1/x",
4814
+ body: {
4815
+ sid: options.sid ?? this.sessionId,
4816
+ e: entries.map((entry) => ({
4817
+ t: entry.type,
4818
+ v: entry.vs,
4819
+ ai: entry.postId,
4820
+ ...entry.mediaIndex !== void 0 ? { mi: entry.mediaIndex } : {},
4821
+ ...entry.source !== void 0 ? { s: entry.source } : {},
4822
+ ...entry.positionMs !== void 0 ? { pm: Math.round(entry.positionMs) } : {},
4823
+ ...entry.durationMs !== void 0 ? { dm: Math.round(entry.durationMs) } : {}
4824
+ }))
4825
+ },
4826
+ ...this.requestOptions(options)
4827
+ });
4828
+ }
4829
+ };
4830
+
4624
4831
  // src/resources/users.ts
4625
4832
  var UsersResource = class extends BaseResource {
4626
4833
  /** Загружает свой профиль — с подпиской и признаком подтверждённого телефона. */
@@ -4909,6 +5116,7 @@ var ItdClient = class {
4909
5116
  #authManager;
4910
5117
  #jar;
4911
5118
  #queue;
5119
+ #plugins = new PluginRegistry();
4912
5120
  /** Авторизация, сессии и пароли. */
4913
5121
  auth;
4914
5122
  /** Профили, подписки, блокировки, приватность. */
@@ -4945,6 +5153,7 @@ var ItdClient = class {
4945
5153
  this.#http = new HttpClient(this.#config);
4946
5154
  this.#authManager = new AuthManager(this.#config, this.#http, this.#jar);
4947
5155
  this.#queue = this.#config.rateLimit ? new RequestQueue(this.#config.rateLimit) : void 0;
5156
+ this.#http.usePlugins(this.#plugins);
4948
5157
  this.#http.setCollaborators({
4949
5158
  getAuthHeaders: () => this.#authManager.getAuthHeaders(),
4950
5159
  getDeviceId: () => this.#authManager.getDeviceId(),
@@ -4990,6 +5199,27 @@ var ItdClient = class {
4990
5199
  request(options) {
4991
5200
  return this.#http.request(options);
4992
5201
  }
5202
+ /**
5203
+ * Подключает плагин.
5204
+ *
5205
+ * Плагин работает на уровне транспорта: видит запрос до отправки и разобранный ответ,
5206
+ * поэтому одна обёртка охватывает сразу все методы клиента. Подключать можно в любой
5207
+ * момент, но обычно это делают сразу после создания клиента.
5208
+ *
5209
+ * @throws {ItdConfigError} если плагин задан неверно или уже подключён
5210
+ *
5211
+ * @example
5212
+ * ```ts
5213
+ * import { crypt } from 'itd-api-crypto';
5214
+ *
5215
+ * itd.use(crypt());
5216
+ * await itd.posts.create({ content: 'секрет' }, { encrypt: 'invis' });
5217
+ * ```
5218
+ */
5219
+ use(plugin) {
5220
+ this.#plugins.add(plugin, { baseUrl: this.#config.baseUrl, logger: this.#config.logger });
5221
+ return this;
5222
+ }
4993
5223
  /**
4994
5224
  * Подписывается на события авторизации.
4995
5225
  *
@@ -5216,6 +5446,6 @@ function toDate(value) {
5216
5446
  return Number.isFinite(date.getTime()) ? date : null;
5217
5447
  }
5218
5448
 
5219
- export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AttachmentType, CommentSort, DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, FeedTab, IMAGE_MIME_TYPES, ItdAbortError, ItdApiError, ItdApiErrorKind, ItdAuthError, ItdClient, ItdConfigError, ItdConflictError, ItdError, ItdErrorCode, ItdErrorKind, ItdForbiddenError, ItdNetworkError, ItdNotFoundError, ItdPhoneVerificationError, ItdRateLimitError, ItdRealtime, ItdServerError, ItdTimeoutError, ItdValidationError, LIBRARY_VERSION, LikesVisibility, LocalStorageTokenStorage, MAX_RECONNECT_ATTEMPTS, MemoryTokenStorage, NOTIFICATION_TYPE_ALIASES, NotificationType, OAuthProvider, PaginationMode, Paginator, RECONNECT_BACKOFF, RECONNECT_JITTER, REFRESH_COOKIE, REFRESH_COOKIE_PATH, RealtimeStatus, RealtimeTransportKind, ReportReason, ReportTargetType, RuntimeMode, STREAM_PATH, SignInStatus, TURNSTILE_SITE_KEY, UnauthorizedStreamError, VIDEO_MIME_TYPES, WallAccess, canonicalNotificationType, comment, createClient, createTokenStorage, formatNotificationText, isBuilder, isItdApiError, isItdAuthError, isItdConflictError, isItdError, isItdForbiddenError, isItdNotFoundError, isItdPhoneVerificationError, isItdRateLimitError, isItdServerError, isItdValidationError, isKnownNotificationType, isMyProfile, normalizeNotification, poll, post, readNotificationEvent, readUnreadCountEvent, report, resolveNotificationUrl, toDate };
5220
- //# sourceMappingURL=chunk-RUPF4X5L.js.map
5221
- //# sourceMappingURL=chunk-RUPF4X5L.js.map
5449
+ export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AccessType, AttachmentType, CommentSort, DEFAULT_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, FeedTab, IMAGE_MIME_TYPES, InteractionType, ItdAbortError, ItdApiError, ItdApiErrorKind, ItdAuthError, ItdClient, ItdConfigError, ItdConflictError, ItdError, ItdErrorCode, ItdErrorKind, ItdForbiddenError, ItdNetworkError, ItdNotFoundError, ItdPhoneVerificationError, ItdRateLimitError, ItdRealtime, ItdServerError, ItdTimeoutError, ItdValidationError, LIBRARY_VERSION, LikesVisibility, LocalStorageTokenStorage, MAX_RECONNECT_ATTEMPTS, MemoryTokenStorage, NOTIFICATION_TYPE_ALIASES, NotificationType, OAuthProvider, PaginationMode, Paginator, RECONNECT_BACKOFF, RECONNECT_JITTER, REFRESH_COOKIE, REFRESH_COOKIE_PATH, RealtimeStatus, RealtimeTransportKind, ReportReason, ReportTargetType, RuntimeMode, STREAM_PATH, SignInStatus, SpanType, TURNSTILE_SITE_KEY, UnauthorizedStreamError, VIDEO_MIME_TYPES, ViewReason, ViewSource, WallAccess, canonicalNotificationType, comment, createClient, createTokenStorage, formatNotificationText, isBuilder, isItdApiError, isItdAuthError, isItdConflictError, isItdError, isItdForbiddenError, isItdNotFoundError, isItdPhoneVerificationError, isItdRateLimitError, isItdServerError, isItdValidationError, isKnownNotificationType, isMyProfile, normalizeNotification, poll, post, readNotificationEvent, readUnreadCountEvent, report, resolveNotificationUrl, toDate };
5450
+ //# sourceMappingURL=chunk-CG4SERVM.js.map
5451
+ //# sourceMappingURL=chunk-CG4SERVM.js.map