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/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- 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 } from './chunk-CG4SERVM.js';
1
+ export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AccessType, AttachmentType, BUILT_IN_SERVICES, CommentSort, DEFAULT_BASE_URL, DEFAULT_STATUS_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, FeedTab, IMAGE_MIME_TYPES, IncidentKind, 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, REQUEST_OPTION_KEYS, RealtimeStatus, RealtimeTransportKind, ReportReason, ReportTargetType, RuntimeMode, STATUS_SERVICE, STREAM_PATH, ServiceRegistry, ServiceState, 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, mapPage, normalizeNotification, poll, post, readNotificationEvent, readUnreadCountEvent, report, resolveNotificationUrl, statusDays, toDate, utcStampToIso } from './chunk-MYAU2WJU.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/node.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk3RNNZJZ4_cjs = require('./chunk-3RNNZJZ4.cjs');
3
+ var chunkHTF2MOM4_cjs = require('./chunk-HTF2MOM4.cjs');
4
4
 
5
5
  // src/node.ts
6
6
  var nodeFileReader = async (path) => {
@@ -10,6 +10,11 @@ var nodeFileReader = async (path) => {
10
10
  };
11
11
  var FileTokenStorage = class {
12
12
  #path;
13
+ /**
14
+ * Цепочка операций с файлом. Запись и удаление выполняются последовательно
15
+ * в порядке вызова; ошибка одной операции не останавливает следующие.
16
+ */
17
+ #writing = Promise.resolve();
13
18
  /** @param path путь к файлу сессии. Добавьте его в `.gitignore`. */
14
19
  constructor(path) {
15
20
  this.#path = path;
@@ -24,13 +29,34 @@ var FileTokenStorage = class {
24
29
  return null;
25
30
  }
26
31
  }
27
- async set(session) {
28
- const { writeFile, rename } = await import('fs/promises');
29
- const temporary = `${this.#path}.tmp`;
30
- await writeFile(temporary, JSON.stringify(session, null, 2), { encoding: "utf8", mode: 384 });
31
- await rename(temporary, this.#path);
32
+ set(session) {
33
+ return this.#enqueue(() => this.#write(session));
32
34
  }
33
- async clear() {
35
+ /** Добавляет файловую операцию в очередь. */
36
+ #enqueue(operation) {
37
+ this.#writing = this.#writing.then(operation, operation);
38
+ return this.#writing;
39
+ }
40
+ async #write(session) {
41
+ const { writeFile, rename, unlink } = await import('fs/promises');
42
+ const pid = typeof process !== "undefined" ? process.pid : 0;
43
+ const temporary = `${this.#path}.${pid}.${Math.random().toString(36).slice(2)}.tmp`;
44
+ try {
45
+ await writeFile(temporary, JSON.stringify(session, null, 2), {
46
+ encoding: "utf8",
47
+ mode: 384
48
+ });
49
+ await rename(temporary, this.#path);
50
+ } catch (error) {
51
+ await unlink(temporary).catch(() => {
52
+ });
53
+ throw error;
54
+ }
55
+ }
56
+ clear() {
57
+ return this.#enqueue(() => this.#remove());
58
+ }
59
+ async #remove() {
34
60
  try {
35
61
  const { rm } = await import('fs/promises');
36
62
  await rm(this.#path, { force: true });
@@ -38,10 +64,9 @@ var FileTokenStorage = class {
38
64
  }
39
65
  }
40
66
  };
41
- var ItdClient2 = class extends chunk3RNNZJZ4_cjs.ItdClient {
67
+ var ItdClient2 = class extends chunkHTF2MOM4_cjs.ItdClient {
42
68
  constructor(options = {}) {
43
- super(options);
44
- this.setFileReader(nodeFileReader);
69
+ super(options, { fileReader: nodeFileReader });
45
70
  }
46
71
  };
47
72
  function createClient(options = {}) {
@@ -50,347 +75,391 @@ function createClient(options = {}) {
50
75
 
51
76
  Object.defineProperty(exports, "ALLOWED_MIME_TYPES", {
52
77
  enumerable: true,
53
- get: function () { return chunk3RNNZJZ4_cjs.ALLOWED_MIME_TYPES; }
78
+ get: function () { return chunkHTF2MOM4_cjs.ALLOWED_MIME_TYPES; }
54
79
  });
55
80
  Object.defineProperty(exports, "AUDIO_MIME_TYPES", {
56
81
  enumerable: true,
57
- get: function () { return chunk3RNNZJZ4_cjs.AUDIO_MIME_TYPES; }
82
+ get: function () { return chunkHTF2MOM4_cjs.AUDIO_MIME_TYPES; }
58
83
  });
59
84
  Object.defineProperty(exports, "AUTH_FLAG_COOKIE", {
60
85
  enumerable: true,
61
- get: function () { return chunk3RNNZJZ4_cjs.AUTH_FLAG_COOKIE; }
86
+ get: function () { return chunkHTF2MOM4_cjs.AUTH_FLAG_COOKIE; }
62
87
  });
63
88
  Object.defineProperty(exports, "AUTH_PATHS", {
64
89
  enumerable: true,
65
- get: function () { return chunk3RNNZJZ4_cjs.AUTH_PATHS; }
90
+ get: function () { return chunkHTF2MOM4_cjs.AUTH_PATHS; }
66
91
  });
67
92
  Object.defineProperty(exports, "AccessType", {
68
93
  enumerable: true,
69
- get: function () { return chunk3RNNZJZ4_cjs.AccessType; }
94
+ get: function () { return chunkHTF2MOM4_cjs.AccessType; }
70
95
  });
71
96
  Object.defineProperty(exports, "AttachmentType", {
72
97
  enumerable: true,
73
- get: function () { return chunk3RNNZJZ4_cjs.AttachmentType; }
98
+ get: function () { return chunkHTF2MOM4_cjs.AttachmentType; }
99
+ });
100
+ Object.defineProperty(exports, "BUILT_IN_SERVICES", {
101
+ enumerable: true,
102
+ get: function () { return chunkHTF2MOM4_cjs.BUILT_IN_SERVICES; }
74
103
  });
75
104
  Object.defineProperty(exports, "CommentSort", {
76
105
  enumerable: true,
77
- get: function () { return chunk3RNNZJZ4_cjs.CommentSort; }
106
+ get: function () { return chunkHTF2MOM4_cjs.CommentSort; }
78
107
  });
79
108
  Object.defineProperty(exports, "DEFAULT_BASE_URL", {
80
109
  enumerable: true,
81
- get: function () { return chunk3RNNZJZ4_cjs.DEFAULT_BASE_URL; }
110
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_BASE_URL; }
111
+ });
112
+ Object.defineProperty(exports, "DEFAULT_STATUS_BASE_URL", {
113
+ enumerable: true,
114
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_STATUS_BASE_URL; }
82
115
  });
83
116
  Object.defineProperty(exports, "DEFAULT_TIMEOUT", {
84
117
  enumerable: true,
85
- get: function () { return chunk3RNNZJZ4_cjs.DEFAULT_TIMEOUT; }
118
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_TIMEOUT; }
119
+ });
120
+ Object.defineProperty(exports, "DEFAULT_UPLOAD_TIMEOUT", {
121
+ enumerable: true,
122
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_UPLOAD_TIMEOUT; }
86
123
  });
87
124
  Object.defineProperty(exports, "DEFAULT_USER_AGENT", {
88
125
  enumerable: true,
89
- get: function () { return chunk3RNNZJZ4_cjs.DEFAULT_USER_AGENT; }
126
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_USER_AGENT; }
90
127
  });
91
128
  Object.defineProperty(exports, "DEVICE_ID_HEADER", {
92
129
  enumerable: true,
93
- get: function () { return chunk3RNNZJZ4_cjs.DEVICE_ID_HEADER; }
130
+ get: function () { return chunkHTF2MOM4_cjs.DEVICE_ID_HEADER; }
94
131
  });
95
132
  Object.defineProperty(exports, "DetectedRuntime", {
96
133
  enumerable: true,
97
- get: function () { return chunk3RNNZJZ4_cjs.DetectedRuntime; }
134
+ get: function () { return chunkHTF2MOM4_cjs.DetectedRuntime; }
98
135
  });
99
136
  Object.defineProperty(exports, "FeedTab", {
100
137
  enumerable: true,
101
- get: function () { return chunk3RNNZJZ4_cjs.FeedTab; }
138
+ get: function () { return chunkHTF2MOM4_cjs.FeedTab; }
102
139
  });
103
140
  Object.defineProperty(exports, "IMAGE_MIME_TYPES", {
104
141
  enumerable: true,
105
- get: function () { return chunk3RNNZJZ4_cjs.IMAGE_MIME_TYPES; }
142
+ get: function () { return chunkHTF2MOM4_cjs.IMAGE_MIME_TYPES; }
143
+ });
144
+ Object.defineProperty(exports, "IncidentKind", {
145
+ enumerable: true,
146
+ get: function () { return chunkHTF2MOM4_cjs.IncidentKind; }
106
147
  });
107
148
  Object.defineProperty(exports, "InteractionType", {
108
149
  enumerable: true,
109
- get: function () { return chunk3RNNZJZ4_cjs.InteractionType; }
150
+ get: function () { return chunkHTF2MOM4_cjs.InteractionType; }
110
151
  });
111
152
  Object.defineProperty(exports, "ItdAbortError", {
112
153
  enumerable: true,
113
- get: function () { return chunk3RNNZJZ4_cjs.ItdAbortError; }
154
+ get: function () { return chunkHTF2MOM4_cjs.ItdAbortError; }
114
155
  });
115
156
  Object.defineProperty(exports, "ItdApiError", {
116
157
  enumerable: true,
117
- get: function () { return chunk3RNNZJZ4_cjs.ItdApiError; }
158
+ get: function () { return chunkHTF2MOM4_cjs.ItdApiError; }
118
159
  });
119
160
  Object.defineProperty(exports, "ItdApiErrorKind", {
120
161
  enumerable: true,
121
- get: function () { return chunk3RNNZJZ4_cjs.ItdApiErrorKind; }
162
+ get: function () { return chunkHTF2MOM4_cjs.ItdApiErrorKind; }
122
163
  });
123
164
  Object.defineProperty(exports, "ItdAuthError", {
124
165
  enumerable: true,
125
- get: function () { return chunk3RNNZJZ4_cjs.ItdAuthError; }
166
+ get: function () { return chunkHTF2MOM4_cjs.ItdAuthError; }
126
167
  });
127
168
  Object.defineProperty(exports, "ItdConfigError", {
128
169
  enumerable: true,
129
- get: function () { return chunk3RNNZJZ4_cjs.ItdConfigError; }
170
+ get: function () { return chunkHTF2MOM4_cjs.ItdConfigError; }
130
171
  });
131
172
  Object.defineProperty(exports, "ItdConflictError", {
132
173
  enumerable: true,
133
- get: function () { return chunk3RNNZJZ4_cjs.ItdConflictError; }
174
+ get: function () { return chunkHTF2MOM4_cjs.ItdConflictError; }
134
175
  });
135
176
  Object.defineProperty(exports, "ItdError", {
136
177
  enumerable: true,
137
- get: function () { return chunk3RNNZJZ4_cjs.ItdError; }
178
+ get: function () { return chunkHTF2MOM4_cjs.ItdError; }
138
179
  });
139
180
  Object.defineProperty(exports, "ItdErrorCode", {
140
181
  enumerable: true,
141
- get: function () { return chunk3RNNZJZ4_cjs.ItdErrorCode; }
182
+ get: function () { return chunkHTF2MOM4_cjs.ItdErrorCode; }
142
183
  });
143
184
  Object.defineProperty(exports, "ItdErrorKind", {
144
185
  enumerable: true,
145
- get: function () { return chunk3RNNZJZ4_cjs.ItdErrorKind; }
186
+ get: function () { return chunkHTF2MOM4_cjs.ItdErrorKind; }
146
187
  });
147
188
  Object.defineProperty(exports, "ItdForbiddenError", {
148
189
  enumerable: true,
149
- get: function () { return chunk3RNNZJZ4_cjs.ItdForbiddenError; }
190
+ get: function () { return chunkHTF2MOM4_cjs.ItdForbiddenError; }
150
191
  });
151
192
  Object.defineProperty(exports, "ItdNetworkError", {
152
193
  enumerable: true,
153
- get: function () { return chunk3RNNZJZ4_cjs.ItdNetworkError; }
194
+ get: function () { return chunkHTF2MOM4_cjs.ItdNetworkError; }
154
195
  });
155
196
  Object.defineProperty(exports, "ItdNotFoundError", {
156
197
  enumerable: true,
157
- get: function () { return chunk3RNNZJZ4_cjs.ItdNotFoundError; }
198
+ get: function () { return chunkHTF2MOM4_cjs.ItdNotFoundError; }
158
199
  });
159
200
  Object.defineProperty(exports, "ItdPhoneVerificationError", {
160
201
  enumerable: true,
161
- get: function () { return chunk3RNNZJZ4_cjs.ItdPhoneVerificationError; }
202
+ get: function () { return chunkHTF2MOM4_cjs.ItdPhoneVerificationError; }
162
203
  });
163
204
  Object.defineProperty(exports, "ItdRateLimitError", {
164
205
  enumerable: true,
165
- get: function () { return chunk3RNNZJZ4_cjs.ItdRateLimitError; }
206
+ get: function () { return chunkHTF2MOM4_cjs.ItdRateLimitError; }
166
207
  });
167
208
  Object.defineProperty(exports, "ItdRealtime", {
168
209
  enumerable: true,
169
- get: function () { return chunk3RNNZJZ4_cjs.ItdRealtime; }
210
+ get: function () { return chunkHTF2MOM4_cjs.ItdRealtime; }
170
211
  });
171
212
  Object.defineProperty(exports, "ItdServerError", {
172
213
  enumerable: true,
173
- get: function () { return chunk3RNNZJZ4_cjs.ItdServerError; }
214
+ get: function () { return chunkHTF2MOM4_cjs.ItdServerError; }
174
215
  });
175
216
  Object.defineProperty(exports, "ItdTimeoutError", {
176
217
  enumerable: true,
177
- get: function () { return chunk3RNNZJZ4_cjs.ItdTimeoutError; }
218
+ get: function () { return chunkHTF2MOM4_cjs.ItdTimeoutError; }
178
219
  });
179
220
  Object.defineProperty(exports, "ItdValidationError", {
180
221
  enumerable: true,
181
- get: function () { return chunk3RNNZJZ4_cjs.ItdValidationError; }
222
+ get: function () { return chunkHTF2MOM4_cjs.ItdValidationError; }
182
223
  });
183
224
  Object.defineProperty(exports, "LIBRARY_VERSION", {
184
225
  enumerable: true,
185
- get: function () { return chunk3RNNZJZ4_cjs.LIBRARY_VERSION; }
226
+ get: function () { return chunkHTF2MOM4_cjs.LIBRARY_VERSION; }
186
227
  });
187
228
  Object.defineProperty(exports, "LikesVisibility", {
188
229
  enumerable: true,
189
- get: function () { return chunk3RNNZJZ4_cjs.LikesVisibility; }
230
+ get: function () { return chunkHTF2MOM4_cjs.LikesVisibility; }
190
231
  });
191
232
  Object.defineProperty(exports, "LocalStorageTokenStorage", {
192
233
  enumerable: true,
193
- get: function () { return chunk3RNNZJZ4_cjs.LocalStorageTokenStorage; }
234
+ get: function () { return chunkHTF2MOM4_cjs.LocalStorageTokenStorage; }
194
235
  });
195
236
  Object.defineProperty(exports, "MAX_RECONNECT_ATTEMPTS", {
196
237
  enumerable: true,
197
- get: function () { return chunk3RNNZJZ4_cjs.MAX_RECONNECT_ATTEMPTS; }
238
+ get: function () { return chunkHTF2MOM4_cjs.MAX_RECONNECT_ATTEMPTS; }
198
239
  });
199
240
  Object.defineProperty(exports, "MemoryTokenStorage", {
200
241
  enumerable: true,
201
- get: function () { return chunk3RNNZJZ4_cjs.MemoryTokenStorage; }
242
+ get: function () { return chunkHTF2MOM4_cjs.MemoryTokenStorage; }
202
243
  });
203
244
  Object.defineProperty(exports, "NOTIFICATION_TYPE_ALIASES", {
204
245
  enumerable: true,
205
- get: function () { return chunk3RNNZJZ4_cjs.NOTIFICATION_TYPE_ALIASES; }
246
+ get: function () { return chunkHTF2MOM4_cjs.NOTIFICATION_TYPE_ALIASES; }
206
247
  });
207
248
  Object.defineProperty(exports, "NotificationType", {
208
249
  enumerable: true,
209
- get: function () { return chunk3RNNZJZ4_cjs.NotificationType; }
250
+ get: function () { return chunkHTF2MOM4_cjs.NotificationType; }
210
251
  });
211
252
  Object.defineProperty(exports, "OAuthProvider", {
212
253
  enumerable: true,
213
- get: function () { return chunk3RNNZJZ4_cjs.OAuthProvider; }
254
+ get: function () { return chunkHTF2MOM4_cjs.OAuthProvider; }
214
255
  });
215
256
  Object.defineProperty(exports, "PaginationMode", {
216
257
  enumerable: true,
217
- get: function () { return chunk3RNNZJZ4_cjs.PaginationMode; }
258
+ get: function () { return chunkHTF2MOM4_cjs.PaginationMode; }
218
259
  });
219
260
  Object.defineProperty(exports, "Paginator", {
220
261
  enumerable: true,
221
- get: function () { return chunk3RNNZJZ4_cjs.Paginator; }
262
+ get: function () { return chunkHTF2MOM4_cjs.Paginator; }
222
263
  });
223
264
  Object.defineProperty(exports, "RECONNECT_BACKOFF", {
224
265
  enumerable: true,
225
- get: function () { return chunk3RNNZJZ4_cjs.RECONNECT_BACKOFF; }
266
+ get: function () { return chunkHTF2MOM4_cjs.RECONNECT_BACKOFF; }
226
267
  });
227
268
  Object.defineProperty(exports, "RECONNECT_JITTER", {
228
269
  enumerable: true,
229
- get: function () { return chunk3RNNZJZ4_cjs.RECONNECT_JITTER; }
270
+ get: function () { return chunkHTF2MOM4_cjs.RECONNECT_JITTER; }
230
271
  });
231
272
  Object.defineProperty(exports, "REFRESH_COOKIE", {
232
273
  enumerable: true,
233
- get: function () { return chunk3RNNZJZ4_cjs.REFRESH_COOKIE; }
274
+ get: function () { return chunkHTF2MOM4_cjs.REFRESH_COOKIE; }
234
275
  });
235
276
  Object.defineProperty(exports, "REFRESH_COOKIE_PATH", {
236
277
  enumerable: true,
237
- get: function () { return chunk3RNNZJZ4_cjs.REFRESH_COOKIE_PATH; }
278
+ get: function () { return chunkHTF2MOM4_cjs.REFRESH_COOKIE_PATH; }
279
+ });
280
+ Object.defineProperty(exports, "REQUEST_OPTION_KEYS", {
281
+ enumerable: true,
282
+ get: function () { return chunkHTF2MOM4_cjs.REQUEST_OPTION_KEYS; }
238
283
  });
239
284
  Object.defineProperty(exports, "RealtimeStatus", {
240
285
  enumerable: true,
241
- get: function () { return chunk3RNNZJZ4_cjs.RealtimeStatus; }
286
+ get: function () { return chunkHTF2MOM4_cjs.RealtimeStatus; }
242
287
  });
243
288
  Object.defineProperty(exports, "RealtimeTransportKind", {
244
289
  enumerable: true,
245
- get: function () { return chunk3RNNZJZ4_cjs.RealtimeTransportKind; }
290
+ get: function () { return chunkHTF2MOM4_cjs.RealtimeTransportKind; }
246
291
  });
247
292
  Object.defineProperty(exports, "ReportReason", {
248
293
  enumerable: true,
249
- get: function () { return chunk3RNNZJZ4_cjs.ReportReason; }
294
+ get: function () { return chunkHTF2MOM4_cjs.ReportReason; }
250
295
  });
251
296
  Object.defineProperty(exports, "ReportTargetType", {
252
297
  enumerable: true,
253
- get: function () { return chunk3RNNZJZ4_cjs.ReportTargetType; }
298
+ get: function () { return chunkHTF2MOM4_cjs.ReportTargetType; }
254
299
  });
255
300
  Object.defineProperty(exports, "RuntimeMode", {
256
301
  enumerable: true,
257
- get: function () { return chunk3RNNZJZ4_cjs.RuntimeMode; }
302
+ get: function () { return chunkHTF2MOM4_cjs.RuntimeMode; }
303
+ });
304
+ Object.defineProperty(exports, "STATUS_SERVICE", {
305
+ enumerable: true,
306
+ get: function () { return chunkHTF2MOM4_cjs.STATUS_SERVICE; }
258
307
  });
259
308
  Object.defineProperty(exports, "STREAM_PATH", {
260
309
  enumerable: true,
261
- get: function () { return chunk3RNNZJZ4_cjs.STREAM_PATH; }
310
+ get: function () { return chunkHTF2MOM4_cjs.STREAM_PATH; }
311
+ });
312
+ Object.defineProperty(exports, "ServiceRegistry", {
313
+ enumerable: true,
314
+ get: function () { return chunkHTF2MOM4_cjs.ServiceRegistry; }
315
+ });
316
+ Object.defineProperty(exports, "ServiceState", {
317
+ enumerable: true,
318
+ get: function () { return chunkHTF2MOM4_cjs.ServiceState; }
262
319
  });
263
320
  Object.defineProperty(exports, "SignInStatus", {
264
321
  enumerable: true,
265
- get: function () { return chunk3RNNZJZ4_cjs.SignInStatus; }
322
+ get: function () { return chunkHTF2MOM4_cjs.SignInStatus; }
266
323
  });
267
324
  Object.defineProperty(exports, "SpanType", {
268
325
  enumerable: true,
269
- get: function () { return chunk3RNNZJZ4_cjs.SpanType; }
326
+ get: function () { return chunkHTF2MOM4_cjs.SpanType; }
270
327
  });
271
328
  Object.defineProperty(exports, "TURNSTILE_SITE_KEY", {
272
329
  enumerable: true,
273
- get: function () { return chunk3RNNZJZ4_cjs.TURNSTILE_SITE_KEY; }
330
+ get: function () { return chunkHTF2MOM4_cjs.TURNSTILE_SITE_KEY; }
274
331
  });
275
332
  Object.defineProperty(exports, "UnauthorizedStreamError", {
276
333
  enumerable: true,
277
- get: function () { return chunk3RNNZJZ4_cjs.UnauthorizedStreamError; }
334
+ get: function () { return chunkHTF2MOM4_cjs.UnauthorizedStreamError; }
278
335
  });
279
336
  Object.defineProperty(exports, "VIDEO_MIME_TYPES", {
280
337
  enumerable: true,
281
- get: function () { return chunk3RNNZJZ4_cjs.VIDEO_MIME_TYPES; }
338
+ get: function () { return chunkHTF2MOM4_cjs.VIDEO_MIME_TYPES; }
282
339
  });
283
340
  Object.defineProperty(exports, "ViewReason", {
284
341
  enumerable: true,
285
- get: function () { return chunk3RNNZJZ4_cjs.ViewReason; }
342
+ get: function () { return chunkHTF2MOM4_cjs.ViewReason; }
286
343
  });
287
344
  Object.defineProperty(exports, "ViewSource", {
288
345
  enumerable: true,
289
- get: function () { return chunk3RNNZJZ4_cjs.ViewSource; }
346
+ get: function () { return chunkHTF2MOM4_cjs.ViewSource; }
290
347
  });
291
348
  Object.defineProperty(exports, "WallAccess", {
292
349
  enumerable: true,
293
- get: function () { return chunk3RNNZJZ4_cjs.WallAccess; }
350
+ get: function () { return chunkHTF2MOM4_cjs.WallAccess; }
294
351
  });
295
352
  Object.defineProperty(exports, "canonicalNotificationType", {
296
353
  enumerable: true,
297
- get: function () { return chunk3RNNZJZ4_cjs.canonicalNotificationType; }
354
+ get: function () { return chunkHTF2MOM4_cjs.canonicalNotificationType; }
298
355
  });
299
356
  Object.defineProperty(exports, "comment", {
300
357
  enumerable: true,
301
- get: function () { return chunk3RNNZJZ4_cjs.comment; }
358
+ get: function () { return chunkHTF2MOM4_cjs.comment; }
302
359
  });
303
360
  Object.defineProperty(exports, "createTokenStorage", {
304
361
  enumerable: true,
305
- get: function () { return chunk3RNNZJZ4_cjs.createTokenStorage; }
362
+ get: function () { return chunkHTF2MOM4_cjs.createTokenStorage; }
306
363
  });
307
364
  Object.defineProperty(exports, "formatNotificationText", {
308
365
  enumerable: true,
309
- get: function () { return chunk3RNNZJZ4_cjs.formatNotificationText; }
366
+ get: function () { return chunkHTF2MOM4_cjs.formatNotificationText; }
310
367
  });
311
368
  Object.defineProperty(exports, "isBuilder", {
312
369
  enumerable: true,
313
- get: function () { return chunk3RNNZJZ4_cjs.isBuilder; }
370
+ get: function () { return chunkHTF2MOM4_cjs.isBuilder; }
314
371
  });
315
372
  Object.defineProperty(exports, "isItdApiError", {
316
373
  enumerable: true,
317
- get: function () { return chunk3RNNZJZ4_cjs.isItdApiError; }
374
+ get: function () { return chunkHTF2MOM4_cjs.isItdApiError; }
318
375
  });
319
376
  Object.defineProperty(exports, "isItdAuthError", {
320
377
  enumerable: true,
321
- get: function () { return chunk3RNNZJZ4_cjs.isItdAuthError; }
378
+ get: function () { return chunkHTF2MOM4_cjs.isItdAuthError; }
322
379
  });
323
380
  Object.defineProperty(exports, "isItdConflictError", {
324
381
  enumerable: true,
325
- get: function () { return chunk3RNNZJZ4_cjs.isItdConflictError; }
382
+ get: function () { return chunkHTF2MOM4_cjs.isItdConflictError; }
326
383
  });
327
384
  Object.defineProperty(exports, "isItdError", {
328
385
  enumerable: true,
329
- get: function () { return chunk3RNNZJZ4_cjs.isItdError; }
386
+ get: function () { return chunkHTF2MOM4_cjs.isItdError; }
330
387
  });
331
388
  Object.defineProperty(exports, "isItdForbiddenError", {
332
389
  enumerable: true,
333
- get: function () { return chunk3RNNZJZ4_cjs.isItdForbiddenError; }
390
+ get: function () { return chunkHTF2MOM4_cjs.isItdForbiddenError; }
334
391
  });
335
392
  Object.defineProperty(exports, "isItdNotFoundError", {
336
393
  enumerable: true,
337
- get: function () { return chunk3RNNZJZ4_cjs.isItdNotFoundError; }
394
+ get: function () { return chunkHTF2MOM4_cjs.isItdNotFoundError; }
338
395
  });
339
396
  Object.defineProperty(exports, "isItdPhoneVerificationError", {
340
397
  enumerable: true,
341
- get: function () { return chunk3RNNZJZ4_cjs.isItdPhoneVerificationError; }
398
+ get: function () { return chunkHTF2MOM4_cjs.isItdPhoneVerificationError; }
342
399
  });
343
400
  Object.defineProperty(exports, "isItdRateLimitError", {
344
401
  enumerable: true,
345
- get: function () { return chunk3RNNZJZ4_cjs.isItdRateLimitError; }
402
+ get: function () { return chunkHTF2MOM4_cjs.isItdRateLimitError; }
346
403
  });
347
404
  Object.defineProperty(exports, "isItdServerError", {
348
405
  enumerable: true,
349
- get: function () { return chunk3RNNZJZ4_cjs.isItdServerError; }
406
+ get: function () { return chunkHTF2MOM4_cjs.isItdServerError; }
350
407
  });
351
408
  Object.defineProperty(exports, "isItdValidationError", {
352
409
  enumerable: true,
353
- get: function () { return chunk3RNNZJZ4_cjs.isItdValidationError; }
410
+ get: function () { return chunkHTF2MOM4_cjs.isItdValidationError; }
354
411
  });
355
412
  Object.defineProperty(exports, "isKnownNotificationType", {
356
413
  enumerable: true,
357
- get: function () { return chunk3RNNZJZ4_cjs.isKnownNotificationType; }
414
+ get: function () { return chunkHTF2MOM4_cjs.isKnownNotificationType; }
358
415
  });
359
416
  Object.defineProperty(exports, "isMyProfile", {
360
417
  enumerable: true,
361
- get: function () { return chunk3RNNZJZ4_cjs.isMyProfile; }
418
+ get: function () { return chunkHTF2MOM4_cjs.isMyProfile; }
419
+ });
420
+ Object.defineProperty(exports, "mapPage", {
421
+ enumerable: true,
422
+ get: function () { return chunkHTF2MOM4_cjs.mapPage; }
362
423
  });
363
424
  Object.defineProperty(exports, "normalizeNotification", {
364
425
  enumerable: true,
365
- get: function () { return chunk3RNNZJZ4_cjs.normalizeNotification; }
426
+ get: function () { return chunkHTF2MOM4_cjs.normalizeNotification; }
366
427
  });
367
428
  Object.defineProperty(exports, "poll", {
368
429
  enumerable: true,
369
- get: function () { return chunk3RNNZJZ4_cjs.poll; }
430
+ get: function () { return chunkHTF2MOM4_cjs.poll; }
370
431
  });
371
432
  Object.defineProperty(exports, "post", {
372
433
  enumerable: true,
373
- get: function () { return chunk3RNNZJZ4_cjs.post; }
434
+ get: function () { return chunkHTF2MOM4_cjs.post; }
374
435
  });
375
436
  Object.defineProperty(exports, "readNotificationEvent", {
376
437
  enumerable: true,
377
- get: function () { return chunk3RNNZJZ4_cjs.readNotificationEvent; }
438
+ get: function () { return chunkHTF2MOM4_cjs.readNotificationEvent; }
378
439
  });
379
440
  Object.defineProperty(exports, "readUnreadCountEvent", {
380
441
  enumerable: true,
381
- get: function () { return chunk3RNNZJZ4_cjs.readUnreadCountEvent; }
442
+ get: function () { return chunkHTF2MOM4_cjs.readUnreadCountEvent; }
382
443
  });
383
444
  Object.defineProperty(exports, "report", {
384
445
  enumerable: true,
385
- get: function () { return chunk3RNNZJZ4_cjs.report; }
446
+ get: function () { return chunkHTF2MOM4_cjs.report; }
386
447
  });
387
448
  Object.defineProperty(exports, "resolveNotificationUrl", {
388
449
  enumerable: true,
389
- get: function () { return chunk3RNNZJZ4_cjs.resolveNotificationUrl; }
450
+ get: function () { return chunkHTF2MOM4_cjs.resolveNotificationUrl; }
451
+ });
452
+ Object.defineProperty(exports, "statusDays", {
453
+ enumerable: true,
454
+ get: function () { return chunkHTF2MOM4_cjs.statusDays; }
390
455
  });
391
456
  Object.defineProperty(exports, "toDate", {
392
457
  enumerable: true,
393
- get: function () { return chunk3RNNZJZ4_cjs.toDate; }
458
+ get: function () { return chunkHTF2MOM4_cjs.toDate; }
459
+ });
460
+ Object.defineProperty(exports, "utcStampToIso", {
461
+ enumerable: true,
462
+ get: function () { return chunkHTF2MOM4_cjs.utcStampToIso; }
394
463
  });
395
464
  exports.FileTokenStorage = FileTokenStorage;
396
465
  exports.ItdClient = ItdClient2;
package/dist/node.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node.ts"],"names":["ItdClient"],"mappings":";;;;;AAgCO,IAAM,cAAA,GAA6B,OAAO,IAAA,KAAS;AACxD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpD,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,MAAW,CAAA;AAE7C,EAAA,OAAO,EAAE,IAAA,EAAM,IAAI,UAAA,CAAW,MAAM,QAAA,CAAS,IAAI,CAAC,CAAA,EAAG,QAAA,EAAU,QAAA,CAAS,IAAI,CAAA,EAAE;AAChF;AAkBO,IAAM,mBAAN,MAA+C;AAAA,EAC3C,KAAA;AAAA;AAAA,EAGT,YAAY,IAAA,EAAc;AACxB,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AAAA,EACf;AAAA,EAEA,MAAM,GAAA,GAAkC;AACtC,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,OAAO,aAAkB,CAAA;AACpD,MAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,IAAA,CAAK,OAAO,MAAM,CAAA;AAC7C,MAAA,MAAM,MAAA,GAAkB,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAEtC,MAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,OAAQ,MAAA,GAAwB,IAAA;AAAA,IAClF,CAAA,CAAA,MAAQ;AAEN,MAAA,OAAO,IAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,OAAA,EAAoC;AAC5C,IAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAO,GAAI,MAAM,OAAO,aAAkB,CAAA;AAC7D,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,IAAA,CAAA;AAE/B,IAAA,MAAM,SAAA,CAAU,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,EAAG,EAAE,QAAA,EAAU,MAAA,EAAQ,IAAA,EAAM,KAAO,CAAA;AAC9F,IAAA,MAAM,MAAA,CAAO,SAAA,EAAW,IAAA,CAAK,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,EAAA,EAAG,GAAI,MAAM,OAAO,aAAkB,CAAA;AAC9C,MAAA,MAAM,GAAG,IAAA,CAAK,KAAA,EAAO,EAAE,KAAA,EAAO,MAAM,CAAA;AAAA,IACtC,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AACF;AAQO,IAAMA,UAAAA,GAAN,cAAwBA,2BAAA,CAAW;AAAA,EACxC,WAAA,CAAY,OAAA,GAA4B,EAAC,EAAG;AAC1C,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,cAAc,cAAc,CAAA;AAAA,EACnC;AACF;AAGO,SAAS,YAAA,CAAa,OAAA,GAA4B,EAAC,EAAc;AACtE,EAAA,OAAO,IAAIA,WAAU,OAAO,CAAA;AAC9B","file":"node.cjs","sourcesContent":["/**\n * `itd-api/node` — то же, что `itd-api`, плюс работа с файловой системой.\n *\n * Импортируйте эту точку входа в Node, Bun и Deno: клиент отсюда умеет загружать файлы\n * по пути (`attach('./photo.jpg')`), а `FileTokenStorage` сохраняет сессию между запусками.\n * В основном бандле работы с файлами нет намеренно — иначе браузерные сборщики пытались бы\n * разрешить `node:fs`.\n *\n * @example\n * ```ts\n * import { ItdClient, FileTokenStorage } from 'itd-api/node';\n *\n * // Когда сессия уже сохранена, `auth` не нужен — токен возьмётся из хранилища.\n * const itd = new ItdClient({ storage: new FileTokenStorage('./.itd-session.json') });\n *\n * await itd.posts.create((p) => p.content('привет').attach('./photo.jpg'));\n * ```\n *\n * @packageDocumentation\n */\n\nimport { ItdClient as BaseClient } from './client.js';\nimport type { ItdSession, TokenStorage } from './core/storage.js';\nimport type { FileReader } from './resources/files.js';\nimport type { ItdClientOptions } from './types/options.js';\n\n/**\n * Читает файл с диска для загрузки.\n *\n * Модуль `node:fs` подключается динамически, поэтому импорт этой точки входа не тянет\n * его в браузерные сборки.\n */\nexport const nodeFileReader: FileReader = async (path) => {\n const { readFile } = await import('node:fs/promises');\n const { basename } = await import('node:path');\n\n return { data: new Uint8Array(await readFile(path)), filename: basename(path) };\n};\n\n/**\n * Хранит сессию в файле.\n *\n * Нужна долгоживущим процессам: без неё бот при каждом запуске входит заново — а вход\n * требует решённой капчи, да и серия входов подряд может привести к временной блокировке\n * аккаунта. С сохранённой сессией опция `auth` не нужна вовсе.\n *\n * Файл создаётся с правами `0600` (чтение и запись только владельцу) — в нём лежат токены.\n * Запись идёт через временный файл с последующим переименованием, поэтому падение процесса\n * посреди сохранения не оставит повреждённую сессию.\n *\n * @example\n * ```ts\n * const itd = new ItdClient({ storage: new FileTokenStorage('./.itd-session.json') });\n * ```\n */\nexport class FileTokenStorage implements TokenStorage {\n readonly #path: string;\n\n /** @param path путь к файлу сессии. Добавьте его в `.gitignore`. */\n constructor(path: string) {\n this.#path = path;\n }\n\n async get(): Promise<ItdSession | null> {\n try {\n const { readFile } = await import('node:fs/promises');\n const raw = await readFile(this.#path, 'utf8');\n const parsed: unknown = JSON.parse(raw);\n\n return typeof parsed === 'object' && parsed !== null ? (parsed as ItdSession) : null;\n } catch {\n // Файла нет или он повреждён — считаем, что сессии не было.\n return null;\n }\n }\n\n async set(session: ItdSession): Promise<void> {\n const { writeFile, rename } = await import('node:fs/promises');\n const temporary = `${this.#path}.tmp`;\n\n await writeFile(temporary, JSON.stringify(session, null, 2), { encoding: 'utf8', mode: 0o600 });\n await rename(temporary, this.#path);\n }\n\n async clear(): Promise<void> {\n try {\n const { rm } = await import('node:fs/promises');\n await rm(this.#path, { force: true });\n } catch {\n // Удалять нечего — это не ошибка.\n }\n }\n}\n\n/**\n * Клиент API итд.com с поддержкой файловой системы.\n *\n * Отличается от базового только тем, что умеет читать файлы по пути:\n * `attach('./photo.jpg')` и `itd.files.upload('./video.mp4')` работают сразу.\n */\nexport class ItdClient extends BaseClient {\n constructor(options: ItdClientOptions = {}) {\n super(options);\n this.setFileReader(nodeFileReader);\n }\n}\n\n/** Создаёт {@link ItdClient} с поддержкой файловой системы. */\nexport function createClient(options: ItdClientOptions = {}): ItdClient {\n return new ItdClient(options);\n}\n\n// Всё остальное — билдеры, типы, ошибки, перечисления — доступно отсюда же,\n// чтобы в Node хватало одного импорта. Объявленные выше имена перекрывают одноимённые.\nexport * from './index.js';\n"]}
1
+ {"version":3,"sources":["../src/node.ts"],"names":["ItdClient"],"mappings":"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","file":"node.cjs","sourcesContent":["/**\n * `itd-api/node` — то же, что `itd-api`, плюс работа с файловой системой.\n *\n * Импортируйте эту точку входа в Node, Bun и Deno: клиент отсюда умеет загружать файлы\n * по пути (`attach('./photo.jpg')`), а `FileTokenStorage` сохраняет сессию между запусками.\n * В основном бандле работы с файлами нет намеренно — иначе браузерные сборщики пытались бы\n * разрешить `node:fs`.\n *\n * @example\n * ```ts\n * import { ItdClient, FileTokenStorage } from 'itd-api/node';\n *\n * // Когда сессия уже сохранена, `auth` не нужен — токен возьмётся из хранилища.\n * const itd = new ItdClient({ storage: new FileTokenStorage('./.itd-session.json') });\n *\n * await itd.posts.create((p) => p.content('привет').attach('./photo.jpg'));\n * ```\n *\n * @packageDocumentation\n */\n\nimport { ItdClient as BaseClient } from './client.js';\nimport type { ItdSession, TokenStorage } from './core/storage.js';\nimport type { FileReader } from './resources/files.js';\nimport type { ItdClientOptions } from './types/options.js';\n\n/**\n * Читает файл с диска для загрузки.\n *\n * Модуль `node:fs` подключается динамически, поэтому импорт этой точки входа не тянет\n * его в браузерные сборки.\n */\nexport const nodeFileReader: FileReader = async (path) => {\n const { readFile } = await import('node:fs/promises');\n const { basename } = await import('node:path');\n\n return { data: new Uint8Array(await readFile(path)), filename: basename(path) };\n};\n\n/**\n * Хранит сессию в файле.\n *\n * Нужна долгоживущим процессам: без неё бот при каждом запуске входит заново — а вход\n * требует решённой капчи, да и серия входов подряд может привести к временной блокировке\n * аккаунта. С сохранённой сессией опция `auth` не нужна вовсе.\n *\n * Файл создаётся с правами `0600` (чтение и запись только владельцу) — в нём лежат токены.\n * Запись идёт через временный файл с последующим переименованием, поэтому падение процесса\n * посреди сохранения не оставит повреждённую сессию.\n *\n * @example\n * ```ts\n * const itd = new ItdClient({ storage: new FileTokenStorage('./.itd-session.json') });\n * ```\n */\nexport class FileTokenStorage implements TokenStorage {\n readonly #path: string;\n /**\n * Цепочка операций с файлом. Запись и удаление выполняются последовательно\n * в порядке вызова; ошибка одной операции не останавливает следующие.\n */\n #writing: Promise<void> = Promise.resolve();\n\n /** @param path путь к файлу сессии. Добавьте его в `.gitignore`. */\n constructor(path: string) {\n this.#path = path;\n }\n\n async get(): Promise<ItdSession | null> {\n try {\n const { readFile } = await import('node:fs/promises');\n const raw = await readFile(this.#path, 'utf8');\n const parsed: unknown = JSON.parse(raw);\n\n return typeof parsed === 'object' && parsed !== null ? (parsed as ItdSession) : null;\n } catch {\n // Файла нет или он повреждён — считаем, что сессии не было.\n return null;\n }\n }\n\n set(session: ItdSession): Promise<void> {\n return this.#enqueue(() => this.#write(session));\n }\n\n /** Добавляет файловую операцию в очередь. */\n #enqueue(operation: () => Promise<void>): Promise<void> {\n this.#writing = this.#writing.then(operation, operation);\n return this.#writing;\n }\n\n async #write(session: ItdSession): Promise<void> {\n const { writeFile, rename, unlink } = await import('node:fs/promises');\n\n // Временный файл уникален на процесс и вызов — иначе параллельные записи (в том числе\n // из разных процессов) делят один `.tmp`.\n const pid = typeof process !== 'undefined' ? process.pid : 0;\n const temporary = `${this.#path}.${pid}.${Math.random().toString(36).slice(2)}.tmp`;\n\n try {\n await writeFile(temporary, JSON.stringify(session, null, 2), {\n encoding: 'utf8',\n mode: 0o600,\n });\n await rename(temporary, this.#path);\n } catch (error) {\n await unlink(temporary).catch(() => {});\n throw error;\n }\n }\n\n clear(): Promise<void> {\n return this.#enqueue(() => this.#remove());\n }\n\n async #remove(): Promise<void> {\n try {\n const { rm } = await import('node:fs/promises');\n await rm(this.#path, { force: true });\n } catch {\n // Удалять нечего — это не ошибка.\n }\n }\n}\n\n/**\n * Клиент API итд.com с поддержкой файловой системы.\n *\n * Отличается от базового только тем, что умеет читать файлы по пути:\n * `attach('./photo.jpg')` и `itd.files.upload('./video.mp4')` работают сразу.\n */\nexport class ItdClient extends BaseClient {\n constructor(options: ItdClientOptions = {}) {\n // Чтение файлов передаётся скрытым параметром конструктора, а не мутацией уже\n // собранного клиента: так объект работоспособен сразу и не меняется после создания.\n super(options, { fileReader: nodeFileReader });\n }\n}\n\n/** Создаёт {@link ItdClient} с поддержкой файловой системы. */\nexport function createClient(options: ItdClientOptions = {}): ItdClient {\n return new ItdClient(options);\n}\n\n// Всё остальное — билдеры, типы, ошибки, перечисления — доступно отсюда же,\n// чтобы в Node хватало одного импорта. Объявленные выше имена перекрывают одноимённые.\nexport * from './index.js';\n"]}
package/dist/node.d.cts CHANGED
@@ -1,5 +1,5 @@
1
- import { T as TokenStorage, I as ItdSession, a as ItdClient$1, b as ItdClientOptions, F as FileReader } from './index-DNFPX_Z1.cjs';
2
- export { A as ALLOWED_MIME_TYPES, c as AUDIO_MIME_TYPES, d as AUTH_FLAG_COOKIE, e as AUTH_PATHS, f as AccessType, g as Actor, h as AllowedMimeType, i as Announcement, j as AnnouncementButton, k as Attachment, l as AttachmentType, m as AudioMimeType, n as AuthInput, o as AuthResource, p as Author, B as BuilderInput, C as CaptchaCredentials, q as ChangelogEntry, r as Clan, s as ClientHooks, t as Comment, u as CommentBuilder, v as CommentInput, w as CommentReplyTo, x as CommentSort, y as CommentsParams, z as CommentsResource, D as CreateCommentInput, E as CreatePollInput, G as CreatePostInput, H as CreateReportInput, J as Credentials, K as CredentialsAuth, L as DEFAULT_BASE_URL, M as DEFAULT_TIMEOUT, N as DEFAULT_USER_AGENT, O as DEVICE_ID_HEADER, P as DetectedRuntime, Q as DwellEntry, R as ErrorContextHook, S as FeedParams, U as FeedTab, V as FileInput, W as FilesResource, X as FollowResult, Y as ForgotPasswordInput, Z as Hashtag, _ as HashtagPostsParams, $ as HashtagsResource, a0 as IMAGE_MIME_TYPES, a1 as ImageMimeType, a2 as InteractionEntry, a3 as InteractionType, a4 as IsoDate, a5 as ItdAbortError, a6 as ItdApiError, a7 as ItdApiErrorInit, a8 as ItdApiErrorKind, a9 as ItdAuthError, aa as ItdBuilder, ab as ItdConfigError, ac as ItdConflictError, ad as ItdError, ae as ItdErrorCode, af as ItdErrorKind, ag as ItdFieldErrors, ah as ItdForbiddenError, ai as ItdNetworkError, aj as ItdNotFoundError, ak as ItdPhoneVerificationError, al as ItdPlugin, am as ItdRateLimitError, an as ItdRealtime, ao as ItdServerError, ap as ItdTimeoutError, aq as ItdValidationError, ar as LIBRARY_VERSION, as as LikeResult, at as LikesVisibility, au as Listener, av as LocalStorageTokenStorage, aw as Logger, ax as Loose, ay as MAX_RECONNECT_ATTEMPTS, az as MemoryTokenStorage, aA as MyProfile, aB as NOTIFICATION_TYPE_ALIASES, aC as Notification, aD as NotificationEvent, aE as NotificationListParams, aF as NotificationSettings, aG as NotificationType, aH as NotificationsResource, aI as OAuthProvider, aJ as Page, aK as PageState, aL as PaginationMode, aM as Paginator, aN as PaymentMethod, aO as Pin, aP as PinPostResult, aQ as PinsResult, aR as PlatformResource, aS as PluginContext, aT as Poll, aU as PollBuilder, aV as PollInput, aW as PollOption, aX as PollTransportOptions, aY as Portal, aZ as Post, a_ as PostBuilder, a$ as PostInput, b0 as PostStats, b1 as PostsResource, b2 as PrivacySettings, b3 as Profile, b4 as PublicProfile, b5 as RECONNECT_BACKOFF, b6 as RECONNECT_JITTER, b7 as REFRESH_COOKIE, b8 as REFRESH_COOKIE_PATH, b9 as RateLimitOptions, ba as RawRequestOptions, bb as RealtimeEvents, bc as RealtimeOptions, bd as RealtimeStatus, be as RealtimeTransport, bf as RealtimeTransportKind, bg as ReconnectOptions, bh as RepliesParams, bi as Report, bj as ReportBuilder, bk as ReportInput, bl as ReportReason, bm as ReportTargetType, bn as ReportsResource, bo as RequestContext, bp as RequestOptions, bq as ResetPasswordInput, br as ResponseContext, bs as RetryContext, bt as RetryOptions, bu as RuntimeMode, bv as STREAM_PATH, bw as SearchResource, bx as SearchResult, by as Session, bz as SignInResult, bA as SignInStatus, bB as Span, bC as SpanType, bD as SseTransportOptions, bE as Subscription, bF as SubscriptionResource, bG as SubscriptionState, bH as TURNSTILE_SITE_KEY, bI as TelemetryOptions, bJ as TelemetryResource, bK as Transformer, bL as TransportContext, bM as TransportEvent, bN as UnauthorizedStreamError, bO as Unsubscribe, bP as UpdateNotificationSettingsInput, bQ as UpdatePrivacyInput, bR as UpdateProfileInput, bS as UploadOptions, bT as UploadedFile, bU as UserId, bV as UserListParams, bW as UserPostsParams, bX as UserRef, bY as UserSummary, bZ as UsersResource, b_ as VIDEO_MIME_TYPES, b$ as VerificationResource, c0 as VerificationStatus, c1 as VideoMimeType, c2 as ViewReason, c3 as ViewSource, c4 as WallAccess, c5 as canonicalNotificationType, c6 as comment, c7 as createTokenStorage, c8 as formatNotificationText, c9 as isBuilder, ca as isItdApiError, cb as isItdAuthError, cc as isItdConflictError, cd as isItdError, ce as isItdForbiddenError, cf as isItdNotFoundError, cg as isItdPhoneVerificationError, ch as isItdRateLimitError, ci as isItdServerError, cj as isItdValidationError, ck as isKnownNotificationType, cl as isMyProfile, cm as normalizeNotification, cn as poll, co as post, cp as readNotificationEvent, cq as readUnreadCountEvent, cr as report, cs as resolveNotificationUrl, ct as toDate } from './index-DNFPX_Z1.cjs';
1
+ import { TokenStorage, ItdSession, ItdClient as ItdClient$1, ItdClientOptions, FileReader } from './index.cjs';
2
+ export { ALLOWED_MIME_TYPES, AUDIO_MIME_TYPES, AUTH_FLAG_COOKIE, AUTH_PATHS, AccessType, Actor, AllowedMimeType, Announcement, AnnouncementButton, Attachment, AttachmentType, AudioMimeType, AuthEvents, AuthInput, AuthResource, Author, BUILT_IN_SERVICES, BuilderInput, CaptchaCredentials, ChangelogEntry, Clan, ClientHooks, Comment, CommentBuilder, CommentInput, CommentReplyTo, CommentSort, CommentsParams, CommentsResource, CreateCommentInput, CreatePollInput, CreatePostInput, CreateReportInput, Credentials, CredentialsAuth, DEFAULT_BASE_URL, DEFAULT_STATUS_BASE_URL, DEFAULT_TIMEOUT, DEFAULT_UPLOAD_TIMEOUT, DEFAULT_USER_AGENT, DEVICE_ID_HEADER, DetectedRuntime, DwellEntry, ErrorContextHook, FeedParams, FeedTab, FileInput, FilesResource, FollowResult, ForgotPasswordInput, Hashtag, HashtagPostsParams, HashtagsResource, IMAGE_MIME_TYPES, ImageMimeType, IncidentKind, InteractionEntry, InteractionType, IsoDate, ItdAbortError, ItdApiError, ItdApiErrorInit, ItdApiErrorKind, ItdAuthError, ItdBuilder, ItdConfigError, ItdConflictError, ItdError, ItdErrorCode, ItdErrorKind, ItdFieldErrors, ItdForbiddenError, ItdNetworkError, ItdNotFoundError, ItdPhoneVerificationError, ItdPlugin, ItdRateLimitError, ItdRealtime, ItdServerError, ItdTimeoutError, ItdValidationError, LIBRARY_VERSION, LikeResult, LikesVisibility, Listener, LocalStorageTokenStorage, Logger, Loose, MAX_RECONNECT_ATTEMPTS, MemoryTokenStorage, MyProfile, NOTIFICATION_TYPE_ALIASES, Notification, NotificationEvent, NotificationListParams, NotificationSettings, NotificationType, NotificationsResource, OAuthProvider, Page, PageState, PaginationMode, Paginator, PaginatorOptions, PaymentMethod, Pin, PinPostResult, PinsResult, PlatformResource, PlatformStatus, PluginContext, Poll, PollBuilder, PollInput, PollOption, PollTransportOptions, Portal, Post, PostBuilder, PostInput, PostStats, PostsResource, PrivacySettings, Profile, PublicProfile, QueryParams, QueryValue, RECONNECT_BACKOFF, RECONNECT_JITTER, REFRESH_COOKIE, REFRESH_COOKIE_PATH, REQUEST_OPTION_KEYS, RateLimitOptions, RawRequestOptions, RealtimeDeps, RealtimeEvents, RealtimeOptions, RealtimeStatus, RealtimeTransport, RealtimeTransportKind, ReconnectOptions, RepliesParams, Report, ReportBuilder, ReportInput, ReportReason, ReportTargetType, ReportsResource, RequestContext, RequestOptions, ResetPasswordInput, ResponseContext, RetryContext, RetryOptions, RuntimeMode, STATUS_SERVICE, STREAM_PATH, SearchResource, SearchResult, ServiceDefinition, ServiceRegistry, ServiceState, ServiceStatus, Session, SignInResult, SignInStatus, Span, SpanType, SseTransportOptions, StatusDay, StatusIncidentLine, Subscription, SubscriptionResource, SubscriptionState, TURNSTILE_SITE_KEY, TelemetryOptions, TelemetryResource, Transformer, TransportContext, TransportEvent, UnauthorizedStreamError, Unsubscribe, UpdateNotificationSettingsInput, UpdatePrivacyInput, UpdateProfileInput, UploadOptions, UploadedFile, UserId, UserListParams, UserPostsParams, UserRef, UserSummary, UsersResource, VIDEO_MIME_TYPES, VerificationResource, VerificationStatus, VideoMimeType, ViewReason, ViewSource, WallAccess, canonicalNotificationType, comment, createTokenStorage, formatNotificationText, isBuilder, isItdApiError, isItdAuthError, isItdConflictError, isItdError, isItdForbiddenError, isItdNotFoundError, isItdPhoneVerificationError, isItdRateLimitError, isItdServerError, isItdValidationError, isKnownNotificationType, isMyProfile, mapPage, normalizeNotification, poll, post, readNotificationEvent, readUnreadCountEvent, report, resolveNotificationUrl, statusDays, toDate, utcStampToIso } from './index.cjs';
3
3
 
4
4
  /**
5
5
  * `itd-api/node` — то же, что `itd-api`, плюс работа с файловой системой.
@@ -65,4 +65,4 @@ declare class ItdClient extends ItdClient$1 {
65
65
  /** Создаёт {@link ItdClient} с поддержкой файловой системы. */
66
66
  declare function createClient(options?: ItdClientOptions): ItdClient;
67
67
 
68
- export { FileTokenStorage, ItdClient, ItdClientOptions, ItdSession, TokenStorage, createClient, nodeFileReader };
68
+ export { FileReader, FileTokenStorage, ItdClient, ItdClientOptions, ItdSession, TokenStorage, createClient, nodeFileReader };