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/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-JIYN33FG.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 chunkATCZ4T2K_cjs = require('./chunk-ATCZ4T2K.cjs');
3
+ var chunkHTF2MOM4_cjs = require('./chunk-HTF2MOM4.cjs');
4
4
 
5
5
  // src/node.ts
6
6
  var nodeFileReader = async (path) => {
@@ -11,8 +11,8 @@ var nodeFileReader = async (path) => {
11
11
  var FileTokenStorage = class {
12
12
  #path;
13
13
  /**
14
- * Цепочка записей: сохранения идут строго по одному, конкурентные `set` не
15
- * перемешиваются. Ошибка одной записи цепочку не рвёт.
14
+ * Цепочка операций с файлом. Запись и удаление выполняются последовательно
15
+ * в порядке вызова; ошибка одной операции не останавливает следующие.
16
16
  */
17
17
  #writing = Promise.resolve();
18
18
  /** @param path путь к файлу сессии. Добавьте его в `.gitignore`. */
@@ -30,10 +30,11 @@ var FileTokenStorage = class {
30
30
  }
31
31
  }
32
32
  set(session) {
33
- this.#writing = this.#writing.then(
34
- () => this.#write(session),
35
- () => this.#write(session)
36
- );
33
+ return this.#enqueue(() => this.#write(session));
34
+ }
35
+ /** Добавляет файловую операцию в очередь. */
36
+ #enqueue(operation) {
37
+ this.#writing = this.#writing.then(operation, operation);
37
38
  return this.#writing;
38
39
  }
39
40
  async #write(session) {
@@ -52,7 +53,10 @@ var FileTokenStorage = class {
52
53
  throw error;
53
54
  }
54
55
  }
55
- async clear() {
56
+ clear() {
57
+ return this.#enqueue(() => this.#remove());
58
+ }
59
+ async #remove() {
56
60
  try {
57
61
  const { rm } = await import('fs/promises');
58
62
  await rm(this.#path, { force: true });
@@ -60,7 +64,7 @@ var FileTokenStorage = class {
60
64
  }
61
65
  }
62
66
  };
63
- var ItdClient2 = class extends chunkATCZ4T2K_cjs.ItdClient {
67
+ var ItdClient2 = class extends chunkHTF2MOM4_cjs.ItdClient {
64
68
  constructor(options = {}) {
65
69
  super(options, { fileReader: nodeFileReader });
66
70
  }
@@ -71,347 +75,391 @@ function createClient(options = {}) {
71
75
 
72
76
  Object.defineProperty(exports, "ALLOWED_MIME_TYPES", {
73
77
  enumerable: true,
74
- get: function () { return chunkATCZ4T2K_cjs.ALLOWED_MIME_TYPES; }
78
+ get: function () { return chunkHTF2MOM4_cjs.ALLOWED_MIME_TYPES; }
75
79
  });
76
80
  Object.defineProperty(exports, "AUDIO_MIME_TYPES", {
77
81
  enumerable: true,
78
- get: function () { return chunkATCZ4T2K_cjs.AUDIO_MIME_TYPES; }
82
+ get: function () { return chunkHTF2MOM4_cjs.AUDIO_MIME_TYPES; }
79
83
  });
80
84
  Object.defineProperty(exports, "AUTH_FLAG_COOKIE", {
81
85
  enumerable: true,
82
- get: function () { return chunkATCZ4T2K_cjs.AUTH_FLAG_COOKIE; }
86
+ get: function () { return chunkHTF2MOM4_cjs.AUTH_FLAG_COOKIE; }
83
87
  });
84
88
  Object.defineProperty(exports, "AUTH_PATHS", {
85
89
  enumerable: true,
86
- get: function () { return chunkATCZ4T2K_cjs.AUTH_PATHS; }
90
+ get: function () { return chunkHTF2MOM4_cjs.AUTH_PATHS; }
87
91
  });
88
92
  Object.defineProperty(exports, "AccessType", {
89
93
  enumerable: true,
90
- get: function () { return chunkATCZ4T2K_cjs.AccessType; }
94
+ get: function () { return chunkHTF2MOM4_cjs.AccessType; }
91
95
  });
92
96
  Object.defineProperty(exports, "AttachmentType", {
93
97
  enumerable: true,
94
- get: function () { return chunkATCZ4T2K_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; }
95
103
  });
96
104
  Object.defineProperty(exports, "CommentSort", {
97
105
  enumerable: true,
98
- get: function () { return chunkATCZ4T2K_cjs.CommentSort; }
106
+ get: function () { return chunkHTF2MOM4_cjs.CommentSort; }
99
107
  });
100
108
  Object.defineProperty(exports, "DEFAULT_BASE_URL", {
101
109
  enumerable: true,
102
- get: function () { return chunkATCZ4T2K_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; }
103
115
  });
104
116
  Object.defineProperty(exports, "DEFAULT_TIMEOUT", {
105
117
  enumerable: true,
106
- get: function () { return chunkATCZ4T2K_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; }
107
123
  });
108
124
  Object.defineProperty(exports, "DEFAULT_USER_AGENT", {
109
125
  enumerable: true,
110
- get: function () { return chunkATCZ4T2K_cjs.DEFAULT_USER_AGENT; }
126
+ get: function () { return chunkHTF2MOM4_cjs.DEFAULT_USER_AGENT; }
111
127
  });
112
128
  Object.defineProperty(exports, "DEVICE_ID_HEADER", {
113
129
  enumerable: true,
114
- get: function () { return chunkATCZ4T2K_cjs.DEVICE_ID_HEADER; }
130
+ get: function () { return chunkHTF2MOM4_cjs.DEVICE_ID_HEADER; }
115
131
  });
116
132
  Object.defineProperty(exports, "DetectedRuntime", {
117
133
  enumerable: true,
118
- get: function () { return chunkATCZ4T2K_cjs.DetectedRuntime; }
134
+ get: function () { return chunkHTF2MOM4_cjs.DetectedRuntime; }
119
135
  });
120
136
  Object.defineProperty(exports, "FeedTab", {
121
137
  enumerable: true,
122
- get: function () { return chunkATCZ4T2K_cjs.FeedTab; }
138
+ get: function () { return chunkHTF2MOM4_cjs.FeedTab; }
123
139
  });
124
140
  Object.defineProperty(exports, "IMAGE_MIME_TYPES", {
125
141
  enumerable: true,
126
- get: function () { return chunkATCZ4T2K_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; }
127
147
  });
128
148
  Object.defineProperty(exports, "InteractionType", {
129
149
  enumerable: true,
130
- get: function () { return chunkATCZ4T2K_cjs.InteractionType; }
150
+ get: function () { return chunkHTF2MOM4_cjs.InteractionType; }
131
151
  });
132
152
  Object.defineProperty(exports, "ItdAbortError", {
133
153
  enumerable: true,
134
- get: function () { return chunkATCZ4T2K_cjs.ItdAbortError; }
154
+ get: function () { return chunkHTF2MOM4_cjs.ItdAbortError; }
135
155
  });
136
156
  Object.defineProperty(exports, "ItdApiError", {
137
157
  enumerable: true,
138
- get: function () { return chunkATCZ4T2K_cjs.ItdApiError; }
158
+ get: function () { return chunkHTF2MOM4_cjs.ItdApiError; }
139
159
  });
140
160
  Object.defineProperty(exports, "ItdApiErrorKind", {
141
161
  enumerable: true,
142
- get: function () { return chunkATCZ4T2K_cjs.ItdApiErrorKind; }
162
+ get: function () { return chunkHTF2MOM4_cjs.ItdApiErrorKind; }
143
163
  });
144
164
  Object.defineProperty(exports, "ItdAuthError", {
145
165
  enumerable: true,
146
- get: function () { return chunkATCZ4T2K_cjs.ItdAuthError; }
166
+ get: function () { return chunkHTF2MOM4_cjs.ItdAuthError; }
147
167
  });
148
168
  Object.defineProperty(exports, "ItdConfigError", {
149
169
  enumerable: true,
150
- get: function () { return chunkATCZ4T2K_cjs.ItdConfigError; }
170
+ get: function () { return chunkHTF2MOM4_cjs.ItdConfigError; }
151
171
  });
152
172
  Object.defineProperty(exports, "ItdConflictError", {
153
173
  enumerable: true,
154
- get: function () { return chunkATCZ4T2K_cjs.ItdConflictError; }
174
+ get: function () { return chunkHTF2MOM4_cjs.ItdConflictError; }
155
175
  });
156
176
  Object.defineProperty(exports, "ItdError", {
157
177
  enumerable: true,
158
- get: function () { return chunkATCZ4T2K_cjs.ItdError; }
178
+ get: function () { return chunkHTF2MOM4_cjs.ItdError; }
159
179
  });
160
180
  Object.defineProperty(exports, "ItdErrorCode", {
161
181
  enumerable: true,
162
- get: function () { return chunkATCZ4T2K_cjs.ItdErrorCode; }
182
+ get: function () { return chunkHTF2MOM4_cjs.ItdErrorCode; }
163
183
  });
164
184
  Object.defineProperty(exports, "ItdErrorKind", {
165
185
  enumerable: true,
166
- get: function () { return chunkATCZ4T2K_cjs.ItdErrorKind; }
186
+ get: function () { return chunkHTF2MOM4_cjs.ItdErrorKind; }
167
187
  });
168
188
  Object.defineProperty(exports, "ItdForbiddenError", {
169
189
  enumerable: true,
170
- get: function () { return chunkATCZ4T2K_cjs.ItdForbiddenError; }
190
+ get: function () { return chunkHTF2MOM4_cjs.ItdForbiddenError; }
171
191
  });
172
192
  Object.defineProperty(exports, "ItdNetworkError", {
173
193
  enumerable: true,
174
- get: function () { return chunkATCZ4T2K_cjs.ItdNetworkError; }
194
+ get: function () { return chunkHTF2MOM4_cjs.ItdNetworkError; }
175
195
  });
176
196
  Object.defineProperty(exports, "ItdNotFoundError", {
177
197
  enumerable: true,
178
- get: function () { return chunkATCZ4T2K_cjs.ItdNotFoundError; }
198
+ get: function () { return chunkHTF2MOM4_cjs.ItdNotFoundError; }
179
199
  });
180
200
  Object.defineProperty(exports, "ItdPhoneVerificationError", {
181
201
  enumerable: true,
182
- get: function () { return chunkATCZ4T2K_cjs.ItdPhoneVerificationError; }
202
+ get: function () { return chunkHTF2MOM4_cjs.ItdPhoneVerificationError; }
183
203
  });
184
204
  Object.defineProperty(exports, "ItdRateLimitError", {
185
205
  enumerable: true,
186
- get: function () { return chunkATCZ4T2K_cjs.ItdRateLimitError; }
206
+ get: function () { return chunkHTF2MOM4_cjs.ItdRateLimitError; }
187
207
  });
188
208
  Object.defineProperty(exports, "ItdRealtime", {
189
209
  enumerable: true,
190
- get: function () { return chunkATCZ4T2K_cjs.ItdRealtime; }
210
+ get: function () { return chunkHTF2MOM4_cjs.ItdRealtime; }
191
211
  });
192
212
  Object.defineProperty(exports, "ItdServerError", {
193
213
  enumerable: true,
194
- get: function () { return chunkATCZ4T2K_cjs.ItdServerError; }
214
+ get: function () { return chunkHTF2MOM4_cjs.ItdServerError; }
195
215
  });
196
216
  Object.defineProperty(exports, "ItdTimeoutError", {
197
217
  enumerable: true,
198
- get: function () { return chunkATCZ4T2K_cjs.ItdTimeoutError; }
218
+ get: function () { return chunkHTF2MOM4_cjs.ItdTimeoutError; }
199
219
  });
200
220
  Object.defineProperty(exports, "ItdValidationError", {
201
221
  enumerable: true,
202
- get: function () { return chunkATCZ4T2K_cjs.ItdValidationError; }
222
+ get: function () { return chunkHTF2MOM4_cjs.ItdValidationError; }
203
223
  });
204
224
  Object.defineProperty(exports, "LIBRARY_VERSION", {
205
225
  enumerable: true,
206
- get: function () { return chunkATCZ4T2K_cjs.LIBRARY_VERSION; }
226
+ get: function () { return chunkHTF2MOM4_cjs.LIBRARY_VERSION; }
207
227
  });
208
228
  Object.defineProperty(exports, "LikesVisibility", {
209
229
  enumerable: true,
210
- get: function () { return chunkATCZ4T2K_cjs.LikesVisibility; }
230
+ get: function () { return chunkHTF2MOM4_cjs.LikesVisibility; }
211
231
  });
212
232
  Object.defineProperty(exports, "LocalStorageTokenStorage", {
213
233
  enumerable: true,
214
- get: function () { return chunkATCZ4T2K_cjs.LocalStorageTokenStorage; }
234
+ get: function () { return chunkHTF2MOM4_cjs.LocalStorageTokenStorage; }
215
235
  });
216
236
  Object.defineProperty(exports, "MAX_RECONNECT_ATTEMPTS", {
217
237
  enumerable: true,
218
- get: function () { return chunkATCZ4T2K_cjs.MAX_RECONNECT_ATTEMPTS; }
238
+ get: function () { return chunkHTF2MOM4_cjs.MAX_RECONNECT_ATTEMPTS; }
219
239
  });
220
240
  Object.defineProperty(exports, "MemoryTokenStorage", {
221
241
  enumerable: true,
222
- get: function () { return chunkATCZ4T2K_cjs.MemoryTokenStorage; }
242
+ get: function () { return chunkHTF2MOM4_cjs.MemoryTokenStorage; }
223
243
  });
224
244
  Object.defineProperty(exports, "NOTIFICATION_TYPE_ALIASES", {
225
245
  enumerable: true,
226
- get: function () { return chunkATCZ4T2K_cjs.NOTIFICATION_TYPE_ALIASES; }
246
+ get: function () { return chunkHTF2MOM4_cjs.NOTIFICATION_TYPE_ALIASES; }
227
247
  });
228
248
  Object.defineProperty(exports, "NotificationType", {
229
249
  enumerable: true,
230
- get: function () { return chunkATCZ4T2K_cjs.NotificationType; }
250
+ get: function () { return chunkHTF2MOM4_cjs.NotificationType; }
231
251
  });
232
252
  Object.defineProperty(exports, "OAuthProvider", {
233
253
  enumerable: true,
234
- get: function () { return chunkATCZ4T2K_cjs.OAuthProvider; }
254
+ get: function () { return chunkHTF2MOM4_cjs.OAuthProvider; }
235
255
  });
236
256
  Object.defineProperty(exports, "PaginationMode", {
237
257
  enumerable: true,
238
- get: function () { return chunkATCZ4T2K_cjs.PaginationMode; }
258
+ get: function () { return chunkHTF2MOM4_cjs.PaginationMode; }
239
259
  });
240
260
  Object.defineProperty(exports, "Paginator", {
241
261
  enumerable: true,
242
- get: function () { return chunkATCZ4T2K_cjs.Paginator; }
262
+ get: function () { return chunkHTF2MOM4_cjs.Paginator; }
243
263
  });
244
264
  Object.defineProperty(exports, "RECONNECT_BACKOFF", {
245
265
  enumerable: true,
246
- get: function () { return chunkATCZ4T2K_cjs.RECONNECT_BACKOFF; }
266
+ get: function () { return chunkHTF2MOM4_cjs.RECONNECT_BACKOFF; }
247
267
  });
248
268
  Object.defineProperty(exports, "RECONNECT_JITTER", {
249
269
  enumerable: true,
250
- get: function () { return chunkATCZ4T2K_cjs.RECONNECT_JITTER; }
270
+ get: function () { return chunkHTF2MOM4_cjs.RECONNECT_JITTER; }
251
271
  });
252
272
  Object.defineProperty(exports, "REFRESH_COOKIE", {
253
273
  enumerable: true,
254
- get: function () { return chunkATCZ4T2K_cjs.REFRESH_COOKIE; }
274
+ get: function () { return chunkHTF2MOM4_cjs.REFRESH_COOKIE; }
255
275
  });
256
276
  Object.defineProperty(exports, "REFRESH_COOKIE_PATH", {
257
277
  enumerable: true,
258
- get: function () { return chunkATCZ4T2K_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; }
259
283
  });
260
284
  Object.defineProperty(exports, "RealtimeStatus", {
261
285
  enumerable: true,
262
- get: function () { return chunkATCZ4T2K_cjs.RealtimeStatus; }
286
+ get: function () { return chunkHTF2MOM4_cjs.RealtimeStatus; }
263
287
  });
264
288
  Object.defineProperty(exports, "RealtimeTransportKind", {
265
289
  enumerable: true,
266
- get: function () { return chunkATCZ4T2K_cjs.RealtimeTransportKind; }
290
+ get: function () { return chunkHTF2MOM4_cjs.RealtimeTransportKind; }
267
291
  });
268
292
  Object.defineProperty(exports, "ReportReason", {
269
293
  enumerable: true,
270
- get: function () { return chunkATCZ4T2K_cjs.ReportReason; }
294
+ get: function () { return chunkHTF2MOM4_cjs.ReportReason; }
271
295
  });
272
296
  Object.defineProperty(exports, "ReportTargetType", {
273
297
  enumerable: true,
274
- get: function () { return chunkATCZ4T2K_cjs.ReportTargetType; }
298
+ get: function () { return chunkHTF2MOM4_cjs.ReportTargetType; }
275
299
  });
276
300
  Object.defineProperty(exports, "RuntimeMode", {
277
301
  enumerable: true,
278
- get: function () { return chunkATCZ4T2K_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; }
279
307
  });
280
308
  Object.defineProperty(exports, "STREAM_PATH", {
281
309
  enumerable: true,
282
- get: function () { return chunkATCZ4T2K_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; }
283
319
  });
284
320
  Object.defineProperty(exports, "SignInStatus", {
285
321
  enumerable: true,
286
- get: function () { return chunkATCZ4T2K_cjs.SignInStatus; }
322
+ get: function () { return chunkHTF2MOM4_cjs.SignInStatus; }
287
323
  });
288
324
  Object.defineProperty(exports, "SpanType", {
289
325
  enumerable: true,
290
- get: function () { return chunkATCZ4T2K_cjs.SpanType; }
326
+ get: function () { return chunkHTF2MOM4_cjs.SpanType; }
291
327
  });
292
328
  Object.defineProperty(exports, "TURNSTILE_SITE_KEY", {
293
329
  enumerable: true,
294
- get: function () { return chunkATCZ4T2K_cjs.TURNSTILE_SITE_KEY; }
330
+ get: function () { return chunkHTF2MOM4_cjs.TURNSTILE_SITE_KEY; }
295
331
  });
296
332
  Object.defineProperty(exports, "UnauthorizedStreamError", {
297
333
  enumerable: true,
298
- get: function () { return chunkATCZ4T2K_cjs.UnauthorizedStreamError; }
334
+ get: function () { return chunkHTF2MOM4_cjs.UnauthorizedStreamError; }
299
335
  });
300
336
  Object.defineProperty(exports, "VIDEO_MIME_TYPES", {
301
337
  enumerable: true,
302
- get: function () { return chunkATCZ4T2K_cjs.VIDEO_MIME_TYPES; }
338
+ get: function () { return chunkHTF2MOM4_cjs.VIDEO_MIME_TYPES; }
303
339
  });
304
340
  Object.defineProperty(exports, "ViewReason", {
305
341
  enumerable: true,
306
- get: function () { return chunkATCZ4T2K_cjs.ViewReason; }
342
+ get: function () { return chunkHTF2MOM4_cjs.ViewReason; }
307
343
  });
308
344
  Object.defineProperty(exports, "ViewSource", {
309
345
  enumerable: true,
310
- get: function () { return chunkATCZ4T2K_cjs.ViewSource; }
346
+ get: function () { return chunkHTF2MOM4_cjs.ViewSource; }
311
347
  });
312
348
  Object.defineProperty(exports, "WallAccess", {
313
349
  enumerable: true,
314
- get: function () { return chunkATCZ4T2K_cjs.WallAccess; }
350
+ get: function () { return chunkHTF2MOM4_cjs.WallAccess; }
315
351
  });
316
352
  Object.defineProperty(exports, "canonicalNotificationType", {
317
353
  enumerable: true,
318
- get: function () { return chunkATCZ4T2K_cjs.canonicalNotificationType; }
354
+ get: function () { return chunkHTF2MOM4_cjs.canonicalNotificationType; }
319
355
  });
320
356
  Object.defineProperty(exports, "comment", {
321
357
  enumerable: true,
322
- get: function () { return chunkATCZ4T2K_cjs.comment; }
358
+ get: function () { return chunkHTF2MOM4_cjs.comment; }
323
359
  });
324
360
  Object.defineProperty(exports, "createTokenStorage", {
325
361
  enumerable: true,
326
- get: function () { return chunkATCZ4T2K_cjs.createTokenStorage; }
362
+ get: function () { return chunkHTF2MOM4_cjs.createTokenStorage; }
327
363
  });
328
364
  Object.defineProperty(exports, "formatNotificationText", {
329
365
  enumerable: true,
330
- get: function () { return chunkATCZ4T2K_cjs.formatNotificationText; }
366
+ get: function () { return chunkHTF2MOM4_cjs.formatNotificationText; }
331
367
  });
332
368
  Object.defineProperty(exports, "isBuilder", {
333
369
  enumerable: true,
334
- get: function () { return chunkATCZ4T2K_cjs.isBuilder; }
370
+ get: function () { return chunkHTF2MOM4_cjs.isBuilder; }
335
371
  });
336
372
  Object.defineProperty(exports, "isItdApiError", {
337
373
  enumerable: true,
338
- get: function () { return chunkATCZ4T2K_cjs.isItdApiError; }
374
+ get: function () { return chunkHTF2MOM4_cjs.isItdApiError; }
339
375
  });
340
376
  Object.defineProperty(exports, "isItdAuthError", {
341
377
  enumerable: true,
342
- get: function () { return chunkATCZ4T2K_cjs.isItdAuthError; }
378
+ get: function () { return chunkHTF2MOM4_cjs.isItdAuthError; }
343
379
  });
344
380
  Object.defineProperty(exports, "isItdConflictError", {
345
381
  enumerable: true,
346
- get: function () { return chunkATCZ4T2K_cjs.isItdConflictError; }
382
+ get: function () { return chunkHTF2MOM4_cjs.isItdConflictError; }
347
383
  });
348
384
  Object.defineProperty(exports, "isItdError", {
349
385
  enumerable: true,
350
- get: function () { return chunkATCZ4T2K_cjs.isItdError; }
386
+ get: function () { return chunkHTF2MOM4_cjs.isItdError; }
351
387
  });
352
388
  Object.defineProperty(exports, "isItdForbiddenError", {
353
389
  enumerable: true,
354
- get: function () { return chunkATCZ4T2K_cjs.isItdForbiddenError; }
390
+ get: function () { return chunkHTF2MOM4_cjs.isItdForbiddenError; }
355
391
  });
356
392
  Object.defineProperty(exports, "isItdNotFoundError", {
357
393
  enumerable: true,
358
- get: function () { return chunkATCZ4T2K_cjs.isItdNotFoundError; }
394
+ get: function () { return chunkHTF2MOM4_cjs.isItdNotFoundError; }
359
395
  });
360
396
  Object.defineProperty(exports, "isItdPhoneVerificationError", {
361
397
  enumerable: true,
362
- get: function () { return chunkATCZ4T2K_cjs.isItdPhoneVerificationError; }
398
+ get: function () { return chunkHTF2MOM4_cjs.isItdPhoneVerificationError; }
363
399
  });
364
400
  Object.defineProperty(exports, "isItdRateLimitError", {
365
401
  enumerable: true,
366
- get: function () { return chunkATCZ4T2K_cjs.isItdRateLimitError; }
402
+ get: function () { return chunkHTF2MOM4_cjs.isItdRateLimitError; }
367
403
  });
368
404
  Object.defineProperty(exports, "isItdServerError", {
369
405
  enumerable: true,
370
- get: function () { return chunkATCZ4T2K_cjs.isItdServerError; }
406
+ get: function () { return chunkHTF2MOM4_cjs.isItdServerError; }
371
407
  });
372
408
  Object.defineProperty(exports, "isItdValidationError", {
373
409
  enumerable: true,
374
- get: function () { return chunkATCZ4T2K_cjs.isItdValidationError; }
410
+ get: function () { return chunkHTF2MOM4_cjs.isItdValidationError; }
375
411
  });
376
412
  Object.defineProperty(exports, "isKnownNotificationType", {
377
413
  enumerable: true,
378
- get: function () { return chunkATCZ4T2K_cjs.isKnownNotificationType; }
414
+ get: function () { return chunkHTF2MOM4_cjs.isKnownNotificationType; }
379
415
  });
380
416
  Object.defineProperty(exports, "isMyProfile", {
381
417
  enumerable: true,
382
- get: function () { return chunkATCZ4T2K_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; }
383
423
  });
384
424
  Object.defineProperty(exports, "normalizeNotification", {
385
425
  enumerable: true,
386
- get: function () { return chunkATCZ4T2K_cjs.normalizeNotification; }
426
+ get: function () { return chunkHTF2MOM4_cjs.normalizeNotification; }
387
427
  });
388
428
  Object.defineProperty(exports, "poll", {
389
429
  enumerable: true,
390
- get: function () { return chunkATCZ4T2K_cjs.poll; }
430
+ get: function () { return chunkHTF2MOM4_cjs.poll; }
391
431
  });
392
432
  Object.defineProperty(exports, "post", {
393
433
  enumerable: true,
394
- get: function () { return chunkATCZ4T2K_cjs.post; }
434
+ get: function () { return chunkHTF2MOM4_cjs.post; }
395
435
  });
396
436
  Object.defineProperty(exports, "readNotificationEvent", {
397
437
  enumerable: true,
398
- get: function () { return chunkATCZ4T2K_cjs.readNotificationEvent; }
438
+ get: function () { return chunkHTF2MOM4_cjs.readNotificationEvent; }
399
439
  });
400
440
  Object.defineProperty(exports, "readUnreadCountEvent", {
401
441
  enumerable: true,
402
- get: function () { return chunkATCZ4T2K_cjs.readUnreadCountEvent; }
442
+ get: function () { return chunkHTF2MOM4_cjs.readUnreadCountEvent; }
403
443
  });
404
444
  Object.defineProperty(exports, "report", {
405
445
  enumerable: true,
406
- get: function () { return chunkATCZ4T2K_cjs.report; }
446
+ get: function () { return chunkHTF2MOM4_cjs.report; }
407
447
  });
408
448
  Object.defineProperty(exports, "resolveNotificationUrl", {
409
449
  enumerable: true,
410
- get: function () { return chunkATCZ4T2K_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; }
411
455
  });
412
456
  Object.defineProperty(exports, "toDate", {
413
457
  enumerable: true,
414
- get: function () { return chunkATCZ4T2K_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; }
415
463
  });
416
464
  exports.FileTokenStorage = FileTokenStorage;
417
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;AAAA;AAAA;AAAA,EAKT,QAAA,GAA0B,QAAQ,OAAA,EAAQ;AAAA;AAAA,EAG1C,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,IAAI,OAAA,EAAoC;AACtC,IAAA,IAAA,CAAK,QAAA,GAAW,KAAK,QAAA,CAAS,IAAA;AAAA,MAC5B,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO,CAAA;AAAA,MACzB,MAAM,IAAA,CAAK,MAAA,CAAO,OAAO;AAAA,KAC3B;AACA,IAAA,OAAO,IAAA,CAAK,QAAA;AAAA,EACd;AAAA,EAEA,MAAM,OAAO,OAAA,EAAoC;AAC/C,IAAA,MAAM,EAAE,SAAA,EAAW,MAAA,EAAQ,QAAO,GAAI,MAAM,OAAO,aAAkB,CAAA;AAIrE,IAAA,MAAM,GAAA,GAAM,OAAO,OAAA,KAAY,WAAA,GAAc,QAAQ,GAAA,GAAM,CAAA;AAC3D,IAAA,MAAM,SAAA,GAAY,CAAA,EAAG,IAAA,CAAK,KAAK,IAAI,GAAG,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,IAAA,CAAA;AAE7E,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,SAAA,EAAW,IAAA,CAAK,UAAU,OAAA,EAAS,IAAA,EAAM,CAAC,CAAA,EAAG;AAAA,QAC3D,QAAA,EAAU,MAAA;AAAA,QACV,IAAA,EAAM;AAAA,OACP,CAAA;AACD,MAAA,MAAM,MAAA,CAAO,SAAA,EAAW,IAAA,CAAK,KAAK,CAAA;AAAA,IACpC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,MAAA,CAAO,SAAS,CAAA,CAAE,KAAA,CAAM,MAAM;AAAA,MAAC,CAAC,CAAA;AACtC,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF;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;AAG1C,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,UAAA,EAAY,cAAA,EAAgB,CAAA;AAAA,EAC/C;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 * Цепочка записей: сохранения идут строго по одному, конкурентные `set` не\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 this.#writing = this.#writing.then(\n () => this.#write(session),\n () => this.#write(session),\n );\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 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 // Чтение файлов передаётся скрытым параметром конструктора, а не мутацией уже\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"]}
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-Duh31Wnx.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-Duh31Wnx.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 };