@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.
- package/LICENSE +21 -0
- package/README.md +276 -0
- package/engineRequirements.js +7 -0
- package/lib/ProxiflyProvider.d.ts +24 -0
- package/lib/ProxiflyProvider.d.ts.map +1 -0
- package/lib/ProxiflyProvider.js +112 -0
- package/lib/ProxiflyProvider.js.map +1 -0
- package/lib/client.d.ts +42 -0
- package/lib/client.d.ts.map +1 -0
- package/lib/client.js +377 -0
- package/lib/client.js.map +1 -0
- package/lib/core/CacheManager.d.ts +13 -0
- package/lib/core/CacheManager.d.ts.map +1 -0
- package/lib/core/CacheManager.js +49 -0
- package/lib/core/CacheManager.js.map +1 -0
- package/lib/core/CircuitBreaker.d.ts +21 -0
- package/lib/core/CircuitBreaker.d.ts.map +1 -0
- package/lib/core/CircuitBreaker.js +64 -0
- package/lib/core/CircuitBreaker.js.map +1 -0
- package/lib/core/Proxymanager.d.ts +32 -0
- package/lib/core/Proxymanager.d.ts.map +1 -0
- package/lib/core/Proxymanager.js +129 -0
- package/lib/core/Proxymanager.js.map +1 -0
- package/lib/core/RateLimiter.d.ts +17 -0
- package/lib/core/RateLimiter.d.ts.map +1 -0
- package/lib/core/RateLimiter.js +53 -0
- package/lib/core/RateLimiter.js.map +1 -0
- package/lib/core/RequestQueue.d.ts +17 -0
- package/lib/core/RequestQueue.d.ts.map +1 -0
- package/lib/core/RequestQueue.js +51 -0
- package/lib/core/RequestQueue.js.map +1 -0
- package/lib/core/RetryHandler.d.ts +13 -0
- package/lib/core/RetryHandler.d.ts.map +1 -0
- package/lib/core/RetryHandler.js +37 -0
- package/lib/core/RetryHandler.js.map +1 -0
- package/lib/core/SessionManager.d.ts +17 -0
- package/lib/core/SessionManager.d.ts.map +1 -0
- package/lib/core/SessionManager.js +57 -0
- package/lib/core/SessionManager.js.map +1 -0
- package/lib/core/Signer.d.ts +3 -0
- package/lib/core/Signer.d.ts.map +1 -0
- package/lib/core/Signer.js +26 -0
- package/lib/core/Signer.js.map +1 -0
- package/lib/index.d.ts +22 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +21 -0
- package/lib/index.js.map +1 -0
- package/lib/playwright.d.ts +46 -0
- package/lib/playwright.d.ts.map +1 -0
- package/lib/playwright.js +330 -0
- package/lib/playwright.js.map +1 -0
- package/lib/scrapers/CommentScraper.d.ts +6 -0
- package/lib/scrapers/CommentScraper.d.ts.map +1 -0
- package/lib/scrapers/CommentScraper.js +107 -0
- package/lib/scrapers/CommentScraper.js.map +1 -0
- package/lib/scrapers/ExtraScraper.d.ts +15 -0
- package/lib/scrapers/ExtraScraper.d.ts.map +1 -0
- package/lib/scrapers/ExtraScraper.js +244 -0
- package/lib/scrapers/ExtraScraper.js.map +1 -0
- package/lib/scrapers/FormatExtractor.d.ts +14 -0
- package/lib/scrapers/FormatExtractor.d.ts.map +1 -0
- package/lib/scrapers/FormatExtractor.js +110 -0
- package/lib/scrapers/FormatExtractor.js.map +1 -0
- package/lib/scrapers/ParserEngine.d.ts +17 -0
- package/lib/scrapers/ParserEngine.d.ts.map +1 -0
- package/lib/scrapers/ParserEngine.js +201 -0
- package/lib/scrapers/ParserEngine.js.map +1 -0
- package/lib/scrapers/SearchScraper.d.ts +5 -0
- package/lib/scrapers/SearchScraper.d.ts.map +1 -0
- package/lib/scrapers/SearchScraper.js +149 -0
- package/lib/scrapers/SearchScraper.js.map +1 -0
- package/lib/scrapers/UrlExtractor.d.ts +9 -0
- package/lib/scrapers/UrlExtractor.d.ts.map +1 -0
- package/lib/scrapers/UrlExtractor.js +34 -0
- package/lib/scrapers/UrlExtractor.js.map +1 -0
- package/lib/scrapers/UserScraper.d.ts +3 -0
- package/lib/scrapers/UserScraper.d.ts.map +1 -0
- package/lib/scrapers/UserScraper.js +137 -0
- package/lib/scrapers/UserScraper.js.map +1 -0
- package/lib/scrapers/VideoScraper.d.ts +3 -0
- package/lib/scrapers/VideoScraper.d.ts.map +1 -0
- package/lib/scrapers/VideoScraper.js +65 -0
- package/lib/scrapers/VideoScraper.js.map +1 -0
- package/lib/types.d.ts +483 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +2 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/CookieJar.d.ts +8 -0
- package/lib/utils/CookieJar.d.ts.map +1 -0
- package/lib/utils/CookieJar.js +51 -0
- package/lib/utils/CookieJar.js.map +1 -0
- package/lib/utils/HttpClient.d.ts +12 -0
- package/lib/utils/HttpClient.d.ts.map +1 -0
- package/lib/utils/HttpClient.js +39 -0
- package/lib/utils/HttpClient.js.map +1 -0
- package/lib/utils/constants.d.ts +41 -0
- package/lib/utils/constants.d.ts.map +1 -0
- package/lib/utils/constants.js +48 -0
- package/lib/utils/constants.js.map +1 -0
- package/lib/utils/errors.d.ts +31 -0
- package/lib/utils/errors.d.ts.map +1 -0
- package/lib/utils/errors.js +63 -0
- package/lib/utils/errors.js.map +1 -0
- package/lib/utils/helpers.d.ts +9 -0
- package/lib/utils/helpers.d.ts.map +1 -0
- package/lib/utils/helpers.js +41 -0
- package/lib/utils/helpers.js.map +1 -0
- package/lib/utils/xbogus.cjs +565 -0
- package/package.json +88 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU,oHAC4F,CAAC;AAEpH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;CAyBV,CAAC;AAEX,eAAO,MAAM,WAAW,gqBAOd,CAAC;AAEX,eAAO,MAAM,cAAc;;;CAGjB,CAAC;AAEX,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,iBAAiB,QAAS,CAAC;AACxC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,eAAe,QAAS,CAAC;AACtC,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAC7C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,QAAS,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
export 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 const HEADERS = {
|
|
3
|
+
desktop: {
|
|
4
|
+
'User-Agent': DESKTOP_UA,
|
|
5
|
+
Accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
|
|
6
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
7
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
8
|
+
'Sec-Ch-Ua': '"Chromium";v="135", "Not)A;Brand";v="99"',
|
|
9
|
+
'Sec-Ch-Ua-Mobile': '?0',
|
|
10
|
+
'Sec-Ch-Ua-Platform': '"Windows"',
|
|
11
|
+
'Sec-Fetch-Site': 'none',
|
|
12
|
+
'Sec-Fetch-Mode': 'navigate',
|
|
13
|
+
'Sec-Fetch-Dest': 'document',
|
|
14
|
+
},
|
|
15
|
+
api: {
|
|
16
|
+
'User-Agent': DESKTOP_UA,
|
|
17
|
+
Accept: 'application/json, text/plain, */*',
|
|
18
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
19
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
20
|
+
'Sec-Ch-Ua': '"Chromium";v="135", "Not)A;Brand";v="99"',
|
|
21
|
+
'Sec-Ch-Ua-Mobile': '?0',
|
|
22
|
+
'Sec-Ch-Ua-Platform': '"Windows"',
|
|
23
|
+
'Sec-Fetch-Site': 'same-origin',
|
|
24
|
+
'Sec-Fetch-Mode': 'cors',
|
|
25
|
+
'Sec-Fetch-Dest': 'empty',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export const UA_ROTATION = [
|
|
29
|
+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36',
|
|
30
|
+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36',
|
|
31
|
+
'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',
|
|
32
|
+
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:136.0) Gecko/20100101 Firefox/136.0',
|
|
33
|
+
'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',
|
|
34
|
+
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36',
|
|
35
|
+
];
|
|
36
|
+
export const TIKTOK_DOMAINS = {
|
|
37
|
+
www: 'https://www.tiktok.com',
|
|
38
|
+
api: 'https://www.tiktok.com/api',
|
|
39
|
+
};
|
|
40
|
+
export const DEFAULT_RATE_LIMIT = 5;
|
|
41
|
+
export const DEFAULT_MAX_RETRIES = 3;
|
|
42
|
+
export const DEFAULT_CACHE_TTL = 60_000;
|
|
43
|
+
export const DEFAULT_CONCURRENCY = 3;
|
|
44
|
+
export const DEFAULT_TIMEOUT = 30_000;
|
|
45
|
+
export const PROXY_HEALTH_INTERVAL = 120_000;
|
|
46
|
+
export const CIRCUIT_BREAKER_THRESHOLD = 5;
|
|
47
|
+
export const CIRCUIT_BREAKER_RESET = 30_000;
|
|
48
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GACrB,iHAAiH,CAAC;AAEpH,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,OAAO,EAAE;QACP,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,iEAAiE;QACzE,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,mBAAmB;QACtC,WAAW,EAAE,0CAA0C;QACvD,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,WAAW;QACjC,gBAAgB,EAAE,MAAM;QACxB,gBAAgB,EAAE,UAAU;QAC5B,gBAAgB,EAAE,UAAU;KAC7B;IACD,GAAG,EAAE;QACH,YAAY,EAAE,UAAU;QACxB,MAAM,EAAE,mCAAmC;QAC3C,iBAAiB,EAAE,gBAAgB;QACnC,iBAAiB,EAAE,mBAAmB;QACtC,WAAW,EAAE,0CAA0C;QACvD,kBAAkB,EAAE,IAAI;QACxB,oBAAoB,EAAE,WAAW;QACjC,gBAAgB,EAAE,aAAa;QAC/B,gBAAgB,EAAE,MAAM;QACxB,gBAAgB,EAAE,OAAO;KAC1B;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,iHAAiH;IACjH,iHAAiH;IACjH,uHAAuH;IACvH,kFAAkF;IAClF,uHAAuH;IACvH,uGAAuG;CAC/F,CAAC;AAEX,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,GAAG,EAAE,wBAAwB;IAC7B,GAAG,EAAE,4BAA4B;CACzB,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AACrC,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC;AACtC,MAAM,CAAC,MAAM,qBAAqB,GAAG,OAAO,CAAC;AAC7C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare class TikTokError extends Error {
|
|
2
|
+
constructor(message: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class TikTokParseError extends TikTokError {
|
|
5
|
+
strategiesAttempted: number;
|
|
6
|
+
constructor(message?: string, strategiesAttempted?: number);
|
|
7
|
+
}
|
|
8
|
+
export declare class TikTokFetchError extends TikTokError {
|
|
9
|
+
statusCode?: number;
|
|
10
|
+
proxy?: string;
|
|
11
|
+
constructor(message: string, statusCode?: number, proxy?: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class TikTokRateLimitError extends TikTokError {
|
|
14
|
+
retryAfter: number;
|
|
15
|
+
constructor(retryAfter?: number);
|
|
16
|
+
}
|
|
17
|
+
export declare class TikTokProxyError extends TikTokError {
|
|
18
|
+
proxy?: string;
|
|
19
|
+
constructor(message: string, proxy?: string);
|
|
20
|
+
}
|
|
21
|
+
export declare class TikTokCircuitOpenError extends TikTokError {
|
|
22
|
+
retryAfter: number;
|
|
23
|
+
constructor(retryAfter: number);
|
|
24
|
+
}
|
|
25
|
+
export declare class TikTokCacheError extends TikTokError {
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
export declare class TikTokWafError extends TikTokFetchError {
|
|
29
|
+
constructor(message?: string, proxy?: string);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IACxC,mBAAmB,EAAE,MAAM,CAAC;gBAEvB,OAAO,SAAqC,EAAE,mBAAmB,SAAI;CAKlF;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAMjE;AAED,qBAAa,oBAAqB,SAAQ,WAAW;IAC5C,UAAU,EAAE,MAAM,CAAC;gBAEd,UAAU,SAAO;CAK9B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;gBAEV,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAK5C;AAED,qBAAa,sBAAuB,SAAQ,WAAW;IAC9C,UAAU,EAAE,MAAM,CAAC;gBAEd,UAAU,EAAE,MAAM;CAK/B;AAED,qBAAa,gBAAiB,SAAQ,WAAW;gBACnC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,cAAe,SAAQ,gBAAgB;gBACtC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;CAQ7C"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export class TikTokError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'TikTokError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class TikTokParseError extends TikTokError {
|
|
8
|
+
strategiesAttempted;
|
|
9
|
+
constructor(message = 'Failed to parse TikTok page data', strategiesAttempted = 0) {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = 'TikTokParseError';
|
|
12
|
+
this.strategiesAttempted = strategiesAttempted;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class TikTokFetchError extends TikTokError {
|
|
16
|
+
statusCode;
|
|
17
|
+
proxy;
|
|
18
|
+
constructor(message, statusCode, proxy) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.name = 'TikTokFetchError';
|
|
21
|
+
this.statusCode = statusCode;
|
|
22
|
+
this.proxy = proxy;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export class TikTokRateLimitError extends TikTokError {
|
|
26
|
+
retryAfter;
|
|
27
|
+
constructor(retryAfter = 5000) {
|
|
28
|
+
super(`Rate limited. Retry after ${retryAfter}ms`);
|
|
29
|
+
this.name = 'TikTokRateLimitError';
|
|
30
|
+
this.retryAfter = retryAfter;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class TikTokProxyError extends TikTokError {
|
|
34
|
+
proxy;
|
|
35
|
+
constructor(message, proxy) {
|
|
36
|
+
super(message);
|
|
37
|
+
this.name = 'TikTokProxyError';
|
|
38
|
+
this.proxy = proxy;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class TikTokCircuitOpenError extends TikTokError {
|
|
42
|
+
retryAfter;
|
|
43
|
+
constructor(retryAfter) {
|
|
44
|
+
super(`Circuit breaker open. Retry after ${retryAfter}ms`);
|
|
45
|
+
this.name = 'TikTokCircuitOpenError';
|
|
46
|
+
this.retryAfter = retryAfter;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
export class TikTokCacheError extends TikTokError {
|
|
50
|
+
constructor(message) {
|
|
51
|
+
super(message);
|
|
52
|
+
this.name = 'TikTokCacheError';
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export class TikTokWafError extends TikTokFetchError {
|
|
56
|
+
constructor(message, proxy) {
|
|
57
|
+
const msg = message ?? ('TikTok is blocking the request (WAF). ' +
|
|
58
|
+
'Try using a PlaywrightSession — npm install playwright');
|
|
59
|
+
super(msg, 200, proxy);
|
|
60
|
+
this.name = 'TikTokWafError';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACxC,mBAAmB,CAAS;IAEnC,YAAY,OAAO,GAAG,kCAAkC,EAAE,mBAAmB,GAAG,CAAC;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,mBAAmB,CAAC;IACjD,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACxC,UAAU,CAAU;IACpB,KAAK,CAAU;IAEtB,YAAY,OAAe,EAAE,UAAmB,EAAE,KAAc;QAC9D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,WAAW;IAC5C,UAAU,CAAS;IAE1B,YAAY,UAAU,GAAG,IAAI;QAC3B,KAAK,CAAC,6BAA6B,UAAU,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IACxC,KAAK,CAAU;IAEtB,YAAY,OAAe,EAAE,KAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,WAAW;IAC9C,UAAU,CAAS;IAE1B,YAAY,UAAkB;QAC5B,KAAK,CAAC,qCAAqC,UAAU,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,WAAW;IAC/C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,gBAAgB;IAClD,YAAY,OAAgB,EAAE,KAAc;QAC1C,MAAM,GAAG,GAAG,OAAO,IAAI,CACrB,wCAAwC;YACxC,wDAAwD,CACzD,CAAC;QACF,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function pad2(n: number): string;
|
|
2
|
+
export declare function formatDuration(seconds: number): string;
|
|
3
|
+
export declare function formatISODate(epoch: number): string;
|
|
4
|
+
export declare function formatUploadDate(epoch: number): string;
|
|
5
|
+
export declare function parseCookieString(cookies: Record<string, string>): string;
|
|
6
|
+
export declare function parseUsername(urlOrName: string): string;
|
|
7
|
+
export declare function randomUserAgent(): string;
|
|
8
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAEA,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEtC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOtD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAIzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAGvD;AAED,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { UA_ROTATION } from './constants.js';
|
|
2
|
+
export function pad2(n) {
|
|
3
|
+
return n.toString().padStart(2, '0');
|
|
4
|
+
}
|
|
5
|
+
export function formatDuration(seconds) {
|
|
6
|
+
if (seconds <= 0)
|
|
7
|
+
return '0:00';
|
|
8
|
+
const h = Math.floor(seconds / 3600);
|
|
9
|
+
const m = Math.floor((seconds % 3600) / 60);
|
|
10
|
+
const s = seconds % 60;
|
|
11
|
+
if (h > 0)
|
|
12
|
+
return `${h}:${pad2(m)}:${pad2(s)}`;
|
|
13
|
+
return `${m}:${pad2(s)}`;
|
|
14
|
+
}
|
|
15
|
+
export function formatISODate(epoch) {
|
|
16
|
+
if (!epoch)
|
|
17
|
+
return '';
|
|
18
|
+
return new Date(epoch * 1000).toISOString();
|
|
19
|
+
}
|
|
20
|
+
export function formatUploadDate(epoch) {
|
|
21
|
+
if (!epoch)
|
|
22
|
+
return '';
|
|
23
|
+
const d = new Date(epoch * 1000);
|
|
24
|
+
return `${d.getUTCFullYear()}${pad2(d.getUTCMonth() + 1)}${pad2(d.getUTCDate())}`;
|
|
25
|
+
}
|
|
26
|
+
export function parseCookieString(cookies) {
|
|
27
|
+
return Object.entries(cookies)
|
|
28
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
29
|
+
.join('; ');
|
|
30
|
+
}
|
|
31
|
+
export function parseUsername(urlOrName) {
|
|
32
|
+
const m = urlOrName.match(/@([\w.-]+)/);
|
|
33
|
+
return m?.[1] ?? urlOrName.replace('@', '');
|
|
34
|
+
}
|
|
35
|
+
export function randomUserAgent() {
|
|
36
|
+
return UA_ROTATION[Math.floor(Math.random() * UA_ROTATION.length)];
|
|
37
|
+
}
|
|
38
|
+
export function sleep(ms) {
|
|
39
|
+
return new Promise((r) => setTimeout(r, ms));
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/utils/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,UAAU,IAAI,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,OAAO,IAAI,CAAC;QAAE,OAAO,MAAM,CAAC;IAChC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IACjC,OAAO,GAAG,CAAC,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAA+B;IAC/D,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC5B,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAiB;IAC7C,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAE,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC"}
|