@traceryn/tiktok-sdk 1.0.0

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.
Files changed (109) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +276 -0
  3. package/engineRequirements.js +7 -0
  4. package/lib/ProxiflyProvider.d.ts +24 -0
  5. package/lib/ProxiflyProvider.d.ts.map +1 -0
  6. package/lib/ProxiflyProvider.js +112 -0
  7. package/lib/ProxiflyProvider.js.map +1 -0
  8. package/lib/client.d.ts +42 -0
  9. package/lib/client.d.ts.map +1 -0
  10. package/lib/client.js +377 -0
  11. package/lib/client.js.map +1 -0
  12. package/lib/core/CacheManager.d.ts +13 -0
  13. package/lib/core/CacheManager.d.ts.map +1 -0
  14. package/lib/core/CacheManager.js +49 -0
  15. package/lib/core/CacheManager.js.map +1 -0
  16. package/lib/core/CircuitBreaker.d.ts +21 -0
  17. package/lib/core/CircuitBreaker.d.ts.map +1 -0
  18. package/lib/core/CircuitBreaker.js +64 -0
  19. package/lib/core/CircuitBreaker.js.map +1 -0
  20. package/lib/core/Proxymanager.d.ts +32 -0
  21. package/lib/core/Proxymanager.d.ts.map +1 -0
  22. package/lib/core/Proxymanager.js +129 -0
  23. package/lib/core/Proxymanager.js.map +1 -0
  24. package/lib/core/RateLimiter.d.ts +17 -0
  25. package/lib/core/RateLimiter.d.ts.map +1 -0
  26. package/lib/core/RateLimiter.js +53 -0
  27. package/lib/core/RateLimiter.js.map +1 -0
  28. package/lib/core/RequestQueue.d.ts +17 -0
  29. package/lib/core/RequestQueue.d.ts.map +1 -0
  30. package/lib/core/RequestQueue.js +51 -0
  31. package/lib/core/RequestQueue.js.map +1 -0
  32. package/lib/core/RetryHandler.d.ts +13 -0
  33. package/lib/core/RetryHandler.d.ts.map +1 -0
  34. package/lib/core/RetryHandler.js +37 -0
  35. package/lib/core/RetryHandler.js.map +1 -0
  36. package/lib/core/SessionManager.d.ts +17 -0
  37. package/lib/core/SessionManager.d.ts.map +1 -0
  38. package/lib/core/SessionManager.js +57 -0
  39. package/lib/core/SessionManager.js.map +1 -0
  40. package/lib/core/Signer.d.ts +3 -0
  41. package/lib/core/Signer.d.ts.map +1 -0
  42. package/lib/core/Signer.js +26 -0
  43. package/lib/core/Signer.js.map +1 -0
  44. package/lib/index.d.ts +22 -0
  45. package/lib/index.d.ts.map +1 -0
  46. package/lib/index.js +21 -0
  47. package/lib/index.js.map +1 -0
  48. package/lib/playwright.d.ts +46 -0
  49. package/lib/playwright.d.ts.map +1 -0
  50. package/lib/playwright.js +330 -0
  51. package/lib/playwright.js.map +1 -0
  52. package/lib/scrapers/CommentScraper.d.ts +6 -0
  53. package/lib/scrapers/CommentScraper.d.ts.map +1 -0
  54. package/lib/scrapers/CommentScraper.js +107 -0
  55. package/lib/scrapers/CommentScraper.js.map +1 -0
  56. package/lib/scrapers/ExtraScraper.d.ts +15 -0
  57. package/lib/scrapers/ExtraScraper.d.ts.map +1 -0
  58. package/lib/scrapers/ExtraScraper.js +244 -0
  59. package/lib/scrapers/ExtraScraper.js.map +1 -0
  60. package/lib/scrapers/FormatExtractor.d.ts +14 -0
  61. package/lib/scrapers/FormatExtractor.d.ts.map +1 -0
  62. package/lib/scrapers/FormatExtractor.js +110 -0
  63. package/lib/scrapers/FormatExtractor.js.map +1 -0
  64. package/lib/scrapers/ParserEngine.d.ts +17 -0
  65. package/lib/scrapers/ParserEngine.d.ts.map +1 -0
  66. package/lib/scrapers/ParserEngine.js +201 -0
  67. package/lib/scrapers/ParserEngine.js.map +1 -0
  68. package/lib/scrapers/SearchScraper.d.ts +5 -0
  69. package/lib/scrapers/SearchScraper.d.ts.map +1 -0
  70. package/lib/scrapers/SearchScraper.js +149 -0
  71. package/lib/scrapers/SearchScraper.js.map +1 -0
  72. package/lib/scrapers/UrlExtractor.d.ts +9 -0
  73. package/lib/scrapers/UrlExtractor.d.ts.map +1 -0
  74. package/lib/scrapers/UrlExtractor.js +34 -0
  75. package/lib/scrapers/UrlExtractor.js.map +1 -0
  76. package/lib/scrapers/UserScraper.d.ts +3 -0
  77. package/lib/scrapers/UserScraper.d.ts.map +1 -0
  78. package/lib/scrapers/UserScraper.js +137 -0
  79. package/lib/scrapers/UserScraper.js.map +1 -0
  80. package/lib/scrapers/VideoScraper.d.ts +3 -0
  81. package/lib/scrapers/VideoScraper.d.ts.map +1 -0
  82. package/lib/scrapers/VideoScraper.js +65 -0
  83. package/lib/scrapers/VideoScraper.js.map +1 -0
  84. package/lib/types.d.ts +483 -0
  85. package/lib/types.d.ts.map +1 -0
  86. package/lib/types.js +2 -0
  87. package/lib/types.js.map +1 -0
  88. package/lib/utils/CookieJar.d.ts +8 -0
  89. package/lib/utils/CookieJar.d.ts.map +1 -0
  90. package/lib/utils/CookieJar.js +51 -0
  91. package/lib/utils/CookieJar.js.map +1 -0
  92. package/lib/utils/HttpClient.d.ts +12 -0
  93. package/lib/utils/HttpClient.d.ts.map +1 -0
  94. package/lib/utils/HttpClient.js +39 -0
  95. package/lib/utils/HttpClient.js.map +1 -0
  96. package/lib/utils/constants.d.ts +41 -0
  97. package/lib/utils/constants.d.ts.map +1 -0
  98. package/lib/utils/constants.js +48 -0
  99. package/lib/utils/constants.js.map +1 -0
  100. package/lib/utils/errors.d.ts +31 -0
  101. package/lib/utils/errors.d.ts.map +1 -0
  102. package/lib/utils/errors.js +63 -0
  103. package/lib/utils/errors.js.map +1 -0
  104. package/lib/utils/helpers.d.ts +9 -0
  105. package/lib/utils/helpers.d.ts.map +1 -0
  106. package/lib/utils/helpers.js +41 -0
  107. package/lib/utils/helpers.js.map +1 -0
  108. package/lib/utils/xbogus.cjs +565 -0
  109. package/package.json +88 -0
package/lib/types.d.ts ADDED
@@ -0,0 +1,483 @@
1
+ export interface TikTokImageData {
2
+ imageURL: {
3
+ urlList: string[];
4
+ };
5
+ imageWidth: number;
6
+ imageHeight: number;
7
+ }
8
+ export interface ImagePost {
9
+ images: TikTokImageData[];
10
+ cover?: TikTokImageData;
11
+ shareCover?: TikTokImageData;
12
+ title?: string;
13
+ }
14
+ export interface VideoData {
15
+ id: string;
16
+ height: number;
17
+ width: number;
18
+ duration: number;
19
+ ratio: string;
20
+ cover: string;
21
+ originCover: string;
22
+ dynamicCover: string;
23
+ playAddr: string;
24
+ downloadAddr: string;
25
+ bitrate: number;
26
+ encodedType: string;
27
+ format: string;
28
+ videoQuality: string;
29
+ codecType: string;
30
+ definition: string;
31
+ subtitleInfos: SubtitleInfo[];
32
+ size: number;
33
+ PlayAddrStruct: PlayAddrStruct;
34
+ zoomCover: Record<string, string>;
35
+ imagePost?: ImagePost;
36
+ }
37
+ export interface PlayAddrStruct {
38
+ DataSize: string;
39
+ Width: number;
40
+ Height: number;
41
+ Uri: string;
42
+ UrlList: string[];
43
+ UrlKey: string;
44
+ }
45
+ export interface SubtitleInfo {
46
+ UrlExpire: string;
47
+ Size: string;
48
+ LanguageID: string;
49
+ LanguageCodeName: string;
50
+ Url: string;
51
+ Format: string;
52
+ Version: string;
53
+ Source: string;
54
+ }
55
+ export interface VideoStats {
56
+ playCount: number;
57
+ diggCount: number;
58
+ commentCount: number;
59
+ shareCount: number;
60
+ collectCount: number;
61
+ }
62
+ export interface FormatEntry {
63
+ format_id: string;
64
+ format: string;
65
+ format_note: string;
66
+ ext: string;
67
+ vcodec: string;
68
+ acodec: string;
69
+ width: number;
70
+ height: number;
71
+ resolution: string;
72
+ tbr: number;
73
+ filesize: number;
74
+ url: string;
75
+ urls: string[];
76
+ quality: number;
77
+ dynamic_range: string;
78
+ aspect_ratio: number;
79
+ protocol: string;
80
+ }
81
+ export interface ImageInfo {
82
+ url: string;
83
+ urls: string[];
84
+ id: string;
85
+ width: number;
86
+ height: number;
87
+ ratio: string;
88
+ aspect_ratio: number;
89
+ quality: string;
90
+ format: string;
91
+ size: number;
92
+ }
93
+ export interface TikTokVideo {
94
+ by: string;
95
+ id: string;
96
+ desc: string;
97
+ title: string;
98
+ fulltitle: string;
99
+ createTime: string;
100
+ timestamp: number;
101
+ duration: number;
102
+ duration_string: string;
103
+ width: number;
104
+ height: number;
105
+ resolution: string;
106
+ ratio: string;
107
+ format: string;
108
+ definition: string;
109
+ codec: string;
110
+ size: number;
111
+ ext: string;
112
+ vcodec: string;
113
+ acodec: string;
114
+ tbr: number;
115
+ filesize: number;
116
+ dynamic_range: string;
117
+ aspect_ratio: number;
118
+ webpageUrl: string;
119
+ originalUrl: string;
120
+ display_id: string;
121
+ upload_date: string;
122
+ epoch: number;
123
+ thumbnail: string;
124
+ urls: {
125
+ play: string;
126
+ wmplay: string;
127
+ music: string;
128
+ cover: string;
129
+ originCover: string;
130
+ dynamicCover: string;
131
+ best?: string;
132
+ };
133
+ formats: FormatEntry[];
134
+ subtitles: Record<string, Array<{
135
+ url: string;
136
+ ext: string;
137
+ }>>;
138
+ stats: VideoStats;
139
+ author: {
140
+ id: string;
141
+ uniqueId: string;
142
+ nickname: string;
143
+ avatar: string;
144
+ signature: string;
145
+ verified: boolean;
146
+ secUid: string;
147
+ uploaderUrl: string;
148
+ channelUrl: string;
149
+ followerCount: number;
150
+ followingCount: number;
151
+ heartCount: number;
152
+ videoCount: number;
153
+ };
154
+ music: {
155
+ id: string;
156
+ title: string;
157
+ author: string;
158
+ original: boolean;
159
+ duration: number;
160
+ album?: string;
161
+ artists?: string[];
162
+ };
163
+ hashtags: string[];
164
+ images?: ImageInfo[];
165
+ httpHeaders: Record<string, string>;
166
+ cookies: string;
167
+ raw?: Record<string, unknown>;
168
+ }
169
+ export interface AuthorData {
170
+ id: string;
171
+ uniqueId: string;
172
+ nickname: string;
173
+ signature: string;
174
+ verified: boolean;
175
+ secUid: string;
176
+ avatarLarger: string;
177
+ avatarMedium: string;
178
+ avatarThumb: string;
179
+ followerCount: number;
180
+ followingCount: number;
181
+ heartCount: number;
182
+ videoCount: number;
183
+ bioLink?: {
184
+ link: string;
185
+ risk?: number;
186
+ };
187
+ }
188
+ export interface AvatarInfo {
189
+ url: string;
190
+ width: number;
191
+ height: number;
192
+ ratio: string;
193
+ quality: string;
194
+ format: string;
195
+ size: number;
196
+ }
197
+ export interface TikTokUser {
198
+ by: string;
199
+ id: string;
200
+ uniqueId: string;
201
+ nickname: string;
202
+ signature: string;
203
+ verified: boolean;
204
+ secUid: string;
205
+ avatar: {
206
+ thumb: AvatarInfo;
207
+ medium: AvatarInfo;
208
+ larger: AvatarInfo;
209
+ };
210
+ stats: {
211
+ followerCount: number;
212
+ followingCount: number;
213
+ heartCount: number;
214
+ videoCount: number;
215
+ diggCount: number;
216
+ friendCount: number;
217
+ };
218
+ createTime: string;
219
+ createTimestamp: number;
220
+ language: string;
221
+ region: string;
222
+ bioLink?: string;
223
+ privateAccount: boolean;
224
+ secret: boolean;
225
+ ftc: boolean;
226
+ isOrganization: boolean;
227
+ ttSeller: boolean;
228
+ openFavorite: boolean;
229
+ isADVirtual: boolean;
230
+ commentSetting: number;
231
+ duetSetting: number;
232
+ stitchSetting: number;
233
+ downloadSetting: number;
234
+ followingVisibility: number;
235
+ profileEmbedPermission: number;
236
+ commerceUserInfo?: {
237
+ commerceUser: boolean;
238
+ category?: string;
239
+ };
240
+ httpHeaders: Record<string, string>;
241
+ cookies: string;
242
+ raw?: Record<string, unknown>;
243
+ }
244
+ export interface TikTokUserVideo {
245
+ id: string;
246
+ desc: string;
247
+ createTime: string;
248
+ duration: number;
249
+ playCount: number;
250
+ diggCount: number;
251
+ commentCount: number;
252
+ cover: string;
253
+ raw?: Record<string, unknown>;
254
+ }
255
+ export interface MusicData {
256
+ id: string;
257
+ title: string;
258
+ authorName: string;
259
+ original: boolean;
260
+ duration: number;
261
+ playUrl: string;
262
+ coverLarge: string;
263
+ coverMedium: string;
264
+ coverThumb: string;
265
+ }
266
+ export interface ChallengeData {
267
+ id: string;
268
+ title: string;
269
+ desc: string;
270
+ }
271
+ export interface ItemStruct {
272
+ id: string;
273
+ desc: string;
274
+ createTime: number;
275
+ video: VideoData;
276
+ author: AuthorData;
277
+ music: MusicData;
278
+ stats?: VideoStats | null;
279
+ diggCount?: number;
280
+ shareCount?: number;
281
+ commentCount?: number;
282
+ playCount?: number;
283
+ collectCount?: number;
284
+ challenges?: ChallengeData[];
285
+ imagePost?: ImagePost;
286
+ }
287
+ export interface Session {
288
+ request<T>(path: string, params?: Record<string, string>): Promise<T>;
289
+ readonly isReady: boolean;
290
+ render?: (url: string) => Promise<string>;
291
+ }
292
+ export interface ProxiflyOptions {
293
+ protocol?: 'http' | 'socks4' | 'socks5';
294
+ country?: string;
295
+ quantity?: number;
296
+ refreshInterval?: number;
297
+ }
298
+ export interface ClientOptions {
299
+ proxy?: string | string[];
300
+ proxifly?: ProxiflyOptions;
301
+ headers?: Record<string, string>;
302
+ timeout?: number;
303
+ session?: Session;
304
+ rateLimit?: number;
305
+ maxRetries?: number;
306
+ cacheTTL?: number;
307
+ concurrency?: number;
308
+ proxyRotation?: 'round-robin' | 'random' | 'lowest-failures';
309
+ }
310
+ export interface ScrapeResult {
311
+ html: string;
312
+ itemStruct: ItemStruct;
313
+ cookies: Record<string, string>;
314
+ }
315
+ export interface BitrateEntry {
316
+ Bitrate: number;
317
+ QualityType: number;
318
+ GearName?: string;
319
+ PlayAddr: {
320
+ DataSize: string;
321
+ Width: number;
322
+ Height: number;
323
+ Uri: string;
324
+ UrlList: string[];
325
+ UrlKey: string;
326
+ FileHash: string;
327
+ FileCs: string;
328
+ };
329
+ CodecType: string;
330
+ Format: string;
331
+ MVMAF?: string;
332
+ BitrateFPS?: number;
333
+ }
334
+ export interface UserPageData {
335
+ user: ItemStruct['author'];
336
+ stats: {
337
+ followerCount: number;
338
+ followingCount: number;
339
+ heartCount: number;
340
+ videoCount: number;
341
+ };
342
+ userInfo?: Record<string, unknown>;
343
+ }
344
+ export interface VideoDetailResponse {
345
+ itemInfo?: {
346
+ itemStruct: ItemStruct;
347
+ };
348
+ }
349
+ export interface SearchUserResult {
350
+ by: string;
351
+ id: string;
352
+ uniqueId: string;
353
+ nickname: string;
354
+ signature: string;
355
+ verified: boolean;
356
+ secUid: string;
357
+ avatar: {
358
+ thumb: AvatarInfo;
359
+ medium: AvatarInfo;
360
+ larger: AvatarInfo;
361
+ };
362
+ followerCount: number;
363
+ followingCount: number;
364
+ heartCount: number;
365
+ videoCount: number;
366
+ commerceUserInfo?: {
367
+ commerceUser: boolean;
368
+ category?: string;
369
+ };
370
+ privateAccount: boolean;
371
+ raw?: Record<string, unknown>;
372
+ }
373
+ export interface TikTokUserSearchResults {
374
+ users: SearchUserResult[];
375
+ cursor: number;
376
+ hasMore: boolean;
377
+ raw?: Record<string, unknown>;
378
+ }
379
+ export interface WebSearchCodeResponse {
380
+ webSearchCode?: string;
381
+ cookies: Record<string, string>;
382
+ }
383
+ export interface CommentUser {
384
+ uid: string;
385
+ uniqueId: string;
386
+ nickname: string;
387
+ secUid: string;
388
+ avatarThumb: string;
389
+ }
390
+ export interface CommentImage {
391
+ url: string;
392
+ width: number;
393
+ height: number;
394
+ }
395
+ export interface CommentLabel {
396
+ text: string;
397
+ type: number;
398
+ }
399
+ export interface TikTokComment {
400
+ by: string;
401
+ cid: string;
402
+ text: string;
403
+ createTime: string;
404
+ timestamp: number;
405
+ likes: number;
406
+ replyTotal: number;
407
+ status: number;
408
+ user: CommentUser;
409
+ isAuthorDigged: boolean;
410
+ labels: CommentLabel[];
411
+ images: CommentImage[];
412
+ stickPosition: number;
413
+ raw?: Record<string, unknown>;
414
+ }
415
+ export interface TikTokCommentList {
416
+ comments: TikTokComment[];
417
+ total: number;
418
+ cursor: number;
419
+ hasMore: boolean;
420
+ hasFilteredComments: boolean;
421
+ raw?: Record<string, unknown>;
422
+ }
423
+ export interface HashtagInfo {
424
+ by: string;
425
+ id: string;
426
+ title: string;
427
+ desc: string;
428
+ stats: {
429
+ videoCount: number;
430
+ viewCount: number;
431
+ };
432
+ raw?: Record<string, unknown>;
433
+ }
434
+ export interface SoundInfo {
435
+ by: string;
436
+ id: string;
437
+ title: string;
438
+ author: string;
439
+ original: boolean;
440
+ duration: number;
441
+ playUrl: string;
442
+ coverLarge: string;
443
+ coverMedium: string;
444
+ coverThumb: string;
445
+ stats: {
446
+ videoCount: number;
447
+ };
448
+ raw?: Record<string, unknown>;
449
+ }
450
+ export interface SoundItemList {
451
+ videos: TikTokUserVideo[];
452
+ cursor: number;
453
+ hasMore: boolean;
454
+ raw?: Record<string, unknown>;
455
+ }
456
+ export interface TrendingVideos {
457
+ videos: TikTokUserVideo[];
458
+ cursor: number;
459
+ hasMore: boolean;
460
+ raw?: Record<string, unknown>;
461
+ }
462
+ export interface PlaylistInfo {
463
+ by: string;
464
+ id: string;
465
+ name: string;
466
+ videoCount: number;
467
+ coverUrl: string;
468
+ authorName: string;
469
+ raw?: Record<string, unknown>;
470
+ }
471
+ export interface PlaylistItemList {
472
+ videos: TikTokUserVideo[];
473
+ cursor: number;
474
+ hasMore: boolean;
475
+ raw?: Record<string, unknown>;
476
+ }
477
+ export interface LikedVideos {
478
+ videos: TikTokUserVideo[];
479
+ cursor: number;
480
+ hasMore: boolean;
481
+ raw?: Record<string, unknown>;
482
+ }
483
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ export declare class CookieJar {
2
+ private cookies;
3
+ setFromHeaders(headers: Headers): void;
4
+ get all(): Record<string, string>;
5
+ toCookieString(): string;
6
+ }
7
+ export declare function fetchTikTokCookies(): Promise<string>;
8
+ //# sourceMappingURL=CookieJar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieJar.d.ts","sourceRoot":"","sources":["../../src/utils/CookieJar.ts"],"names":[],"mappings":"AAAA,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAA8B;IAE7C,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IActC,IAAI,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEhC;IAED,cAAc,IAAI,MAAM;CAKzB;AAMD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAmB1D"}
@@ -0,0 +1,51 @@
1
+ export class CookieJar {
2
+ cookies = {};
3
+ setFromHeaders(headers) {
4
+ try {
5
+ const setCookies = headers.getSetCookie?.() ?? [];
6
+ for (const entry of setCookies) {
7
+ const [pair] = entry.split(';');
8
+ if (!pair)
9
+ continue;
10
+ const i = pair.indexOf('=');
11
+ if (i > 0) {
12
+ this.cookies[pair.slice(0, i).trim()] = pair.slice(i + 1);
13
+ }
14
+ }
15
+ }
16
+ catch { }
17
+ }
18
+ get all() {
19
+ return { ...this.cookies };
20
+ }
21
+ toCookieString() {
22
+ return Object.entries(this.cookies)
23
+ .map(([k, v]) => `${k}=${v}`)
24
+ .join('; ');
25
+ }
26
+ }
27
+ let sharedCookies = null;
28
+ let cookieExpiry = 0;
29
+ const COOKIE_TTL = 5 * 60_000;
30
+ export async function fetchTikTokCookies() {
31
+ if (sharedCookies && Date.now() < cookieExpiry) {
32
+ return Object.entries(sharedCookies)
33
+ .map(([k, v]) => `${k}=${v}`)
34
+ .join('; ');
35
+ }
36
+ try {
37
+ const ua = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36';
38
+ const url = 'https://www.tiktok.com/api/comment/list/?aid=1988&aweme_id=1&count=0&cursor=0';
39
+ const res = await fetch(url, { headers: { 'User-Agent': ua, Accept: 'application/json' } });
40
+ const jar = new CookieJar();
41
+ if (res.headers)
42
+ jar.setFromHeaders(res.headers);
43
+ sharedCookies = jar.all;
44
+ cookieExpiry = Date.now() + COOKIE_TTL;
45
+ return jar.toCookieString();
46
+ }
47
+ catch {
48
+ return '';
49
+ }
50
+ }
51
+ //# sourceMappingURL=CookieJar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CookieJar.js","sourceRoot":"","sources":["../../src/utils/CookieJar.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,SAAS;IACZ,OAAO,GAA2B,EAAE,CAAC;IAE7C,cAAc,CAAC,OAAgB;QAC7B,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChC,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,IAAI,GAAG;QACL,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,cAAc;QACZ,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;aAChC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;CACF;AAED,IAAI,aAAa,GAAkC,IAAI,CAAC;AACxD,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,IAAI,aAAa,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;QAC/C,OAAO,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,iHAAiH,CAAC;QAC7H,MAAM,GAAG,GAAG,+EAA+E,CAAC;QAC5F,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAAC,CAAC;QAC5F,MAAM,GAAG,GAAG,IAAI,SAAS,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,OAA6B,CAAC,CAAC;QACvE,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC;QACxB,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QACvC,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface HttpClientConfig {
2
+ proxy?: string;
3
+ timeout?: number;
4
+ headers?: Record<string, string>;
5
+ cookie?: string;
6
+ }
7
+ export declare class HttpClient {
8
+ get<T>(url: string, config?: HttpClientConfig): Promise<T>;
9
+ getText(url: string, config?: HttpClientConfig): Promise<string>;
10
+ getBuffer(url: string, config?: HttpClientConfig): Promise<ArrayBuffer>;
11
+ }
12
+ //# sourceMappingURL=HttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.d.ts","sourceRoot":"","sources":["../../src/utils/HttpClient.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACf,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,CAAC,CAAC;IAU1D,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,WAAW,CAAC;CAgB9E"}
@@ -0,0 +1,39 @@
1
+ import { ofetch } from 'ofetch';
2
+ import { DEFAULT_TIMEOUT } from './constants.js';
3
+ export class HttpClient {
4
+ async get(url, config) {
5
+ return ofetch(url, {
6
+ headers: config?.headers,
7
+ ...(config?.proxy ? { proxy: config.proxy } : {}),
8
+ timeout: config?.timeout ?? DEFAULT_TIMEOUT,
9
+ parseResponse: JSON.parse,
10
+ retry: 0,
11
+ });
12
+ }
13
+ async getText(url, config) {
14
+ return ofetch(url, {
15
+ headers: config?.headers,
16
+ ...(config?.proxy ? { proxy: config.proxy } : {}),
17
+ timeout: config?.timeout ?? DEFAULT_TIMEOUT,
18
+ parseResponse: (txt) => txt,
19
+ retry: 0,
20
+ });
21
+ }
22
+ async getBuffer(url, config) {
23
+ const buf = await ofetch(url, {
24
+ headers: {
25
+ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
26
+ Referer: 'https://www.tiktok.com/',
27
+ Cookie: config?.cookie ?? '',
28
+ Accept: '*/*',
29
+ ...config?.headers,
30
+ },
31
+ ...(config?.proxy ? { proxy: config.proxy } : {}),
32
+ timeout: config?.timeout ?? 60000,
33
+ responseType: 'arrayBuffer',
34
+ retry: 0,
35
+ });
36
+ return buf;
37
+ }
38
+ }
39
+ //# sourceMappingURL=HttpClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpClient.js","sourceRoot":"","sources":["../../src/utils/HttpClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AASjD,MAAM,OAAO,UAAU;IACrB,KAAK,CAAC,GAAG,CAAI,GAAW,EAAE,MAAyB;QACjD,OAAO,MAAM,CAAI,GAAG,EAAE;YACpB,OAAO,EAAE,MAAM,EAAE,OAAO;YACxB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,eAAe;YAC3C,aAAa,EAAE,IAAI,CAAC,KAAK;YACzB,KAAK,EAAE,CAAC;SACF,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,GAAW,EAAE,MAAyB;QAClD,OAAO,MAAM,CAAS,GAAG,EAAE;YACzB,OAAO,EAAE,MAAM,EAAE,OAAO;YACxB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,eAAe;YAC3C,aAAa,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG;YACnC,KAAK,EAAE,CAAC;SACF,CAAC,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,GAAW,EAAE,MAAyB;QACpD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE;YAC5B,OAAO,EAAE;gBACP,YAAY,EAAE,8DAA8D;gBAC5E,OAAO,EAAE,yBAAyB;gBAClC,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE;gBAC5B,MAAM,EAAE,KAAK;gBACb,GAAG,MAAM,EAAE,OAAO;aACnB;YACD,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,KAAK;YACjC,YAAY,EAAE,aAAa;YAC3B,KAAK,EAAE,CAAC;SACF,CAAC,CAAC;QACV,OAAO,GAA6B,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,41 @@
1
+ export declare const DESKTOP_UA = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36";
2
+ export declare const HEADERS: {
3
+ readonly desktop: {
4
+ readonly 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36";
5
+ readonly Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
6
+ readonly 'Accept-Language': "en-US,en;q=0.9";
7
+ readonly 'Accept-Encoding': "gzip, deflate, br";
8
+ readonly 'Sec-Ch-Ua': "\"Chromium\";v=\"135\", \"Not)A;Brand\";v=\"99\"";
9
+ readonly 'Sec-Ch-Ua-Mobile': "?0";
10
+ readonly 'Sec-Ch-Ua-Platform': "\"Windows\"";
11
+ readonly 'Sec-Fetch-Site': "none";
12
+ readonly 'Sec-Fetch-Mode': "navigate";
13
+ readonly 'Sec-Fetch-Dest': "document";
14
+ };
15
+ readonly api: {
16
+ readonly 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36";
17
+ readonly Accept: "application/json, text/plain, */*";
18
+ readonly 'Accept-Language': "en-US,en;q=0.9";
19
+ readonly 'Accept-Encoding': "gzip, deflate, br";
20
+ readonly 'Sec-Ch-Ua': "\"Chromium\";v=\"135\", \"Not)A;Brand\";v=\"99\"";
21
+ readonly 'Sec-Ch-Ua-Mobile': "?0";
22
+ readonly 'Sec-Ch-Ua-Platform': "\"Windows\"";
23
+ readonly 'Sec-Fetch-Site': "same-origin";
24
+ readonly 'Sec-Fetch-Mode': "cors";
25
+ readonly 'Sec-Fetch-Dest': "empty";
26
+ };
27
+ };
28
+ export declare const UA_ROTATION: readonly ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.3 Safari/605.1.15", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36"];
29
+ export declare const TIKTOK_DOMAINS: {
30
+ readonly www: "https://www.tiktok.com";
31
+ readonly api: "https://www.tiktok.com/api";
32
+ };
33
+ export declare const DEFAULT_RATE_LIMIT = 5;
34
+ export declare const DEFAULT_MAX_RETRIES = 3;
35
+ export declare const DEFAULT_CACHE_TTL = 60000;
36
+ export declare const DEFAULT_CONCURRENCY = 3;
37
+ export declare const DEFAULT_TIMEOUT = 30000;
38
+ export declare const PROXY_HEALTH_INTERVAL = 120000;
39
+ export declare const CIRCUIT_BREAKER_THRESHOLD = 5;
40
+ export declare const CIRCUIT_BREAKER_RESET = 30000;
41
+ //# sourceMappingURL=constants.d.ts.map