xtrawl 0.1.1 → 0.1.3

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 (288) hide show
  1. package/DOCUMENTATION.md +51 -0
  2. package/README.md +34 -6
  3. package/dist/auth/bootstrap.d.ts +1 -1
  4. package/dist/auth/bootstrap.d.ts.map +1 -1
  5. package/dist/auth/bootstrap.js +27 -14
  6. package/dist/auth/bootstrap.js.map +1 -1
  7. package/dist/cli/main.d.ts.map +1 -1
  8. package/dist/cli/main.js +13 -12
  9. package/dist/cli/main.js.map +1 -1
  10. package/dist/cli/parser.d.ts +2 -14
  11. package/dist/cli/parser.d.ts.map +1 -1
  12. package/dist/cli/parser.js +26 -30
  13. package/dist/cli/parser.js.map +1 -1
  14. package/dist/cli/types.d.ts +17 -0
  15. package/dist/cli/types.d.ts.map +1 -0
  16. package/dist/cli/types.js +2 -0
  17. package/dist/cli/types.js.map +1 -0
  18. package/dist/client/accounts.d.ts.map +1 -1
  19. package/dist/client/accounts.js +13 -6
  20. package/dist/client/accounts.js.map +1 -1
  21. package/dist/client/client.d.ts +16 -3
  22. package/dist/client/client.d.ts.map +1 -1
  23. package/dist/client/client.js +96 -38
  24. package/dist/client/client.js.map +1 -1
  25. package/dist/client/collectors.d.ts +2 -10
  26. package/dist/client/collectors.d.ts.map +1 -1
  27. package/dist/client/collectors.js +122 -57
  28. package/dist/client/collectors.js.map +1 -1
  29. package/dist/client/database.d.ts +6 -18
  30. package/dist/client/database.d.ts.map +1 -1
  31. package/dist/client/database.js +4 -21
  32. package/dist/client/database.js.map +1 -1
  33. package/dist/client/page-commit.d.ts +15 -0
  34. package/dist/client/page-commit.d.ts.map +1 -0
  35. package/dist/client/page-commit.js +19 -0
  36. package/dist/client/page-commit.js.map +1 -0
  37. package/dist/client/profiles.d.ts +1 -1
  38. package/dist/client/profiles.d.ts.map +1 -1
  39. package/dist/client/profiles.js +10 -3
  40. package/dist/client/profiles.js.map +1 -1
  41. package/dist/client/search.d.ts +5 -17
  42. package/dist/client/search.d.ts.map +1 -1
  43. package/dist/client/search.js +81 -26
  44. package/dist/client/search.js.map +1 -1
  45. package/dist/client/types.d.ts +40 -2
  46. package/dist/client/types.d.ts.map +1 -1
  47. package/dist/config/defaults.d.ts.map +1 -1
  48. package/dist/config/defaults.js +5 -2
  49. package/dist/config/defaults.js.map +1 -1
  50. package/dist/config/types.d.ts +5 -2
  51. package/dist/config/types.d.ts.map +1 -1
  52. package/dist/config/validation.d.ts +1 -1
  53. package/dist/config/validation.d.ts.map +1 -1
  54. package/dist/config/validation.js +27 -11
  55. package/dist/config/validation.js.map +1 -1
  56. package/dist/constants/accounts.d.ts +16 -0
  57. package/dist/constants/accounts.d.ts.map +1 -0
  58. package/dist/constants/accounts.js +16 -0
  59. package/dist/constants/accounts.js.map +1 -0
  60. package/dist/constants/cli.d.ts +10 -0
  61. package/dist/constants/cli.d.ts.map +1 -0
  62. package/dist/constants/cli.js +10 -0
  63. package/dist/constants/cli.js.map +1 -0
  64. package/dist/constants/collection.d.ts +9 -0
  65. package/dist/constants/collection.d.ts.map +1 -0
  66. package/dist/constants/collection.js +9 -0
  67. package/dist/constants/collection.js.map +1 -0
  68. package/dist/constants/config.d.ts +6 -0
  69. package/dist/constants/config.d.ts.map +1 -0
  70. package/dist/constants/config.js +6 -0
  71. package/dist/constants/config.js.map +1 -0
  72. package/dist/constants/errors.d.ts +9 -0
  73. package/dist/constants/errors.d.ts.map +1 -0
  74. package/dist/constants/errors.js +9 -0
  75. package/dist/constants/errors.js.map +1 -0
  76. package/dist/constants/output.d.ts +7 -0
  77. package/dist/constants/output.d.ts.map +1 -0
  78. package/dist/constants/output.js +7 -0
  79. package/dist/constants/output.js.map +1 -0
  80. package/dist/constants/pages.d.ts +5 -0
  81. package/dist/constants/pages.d.ts.map +1 -0
  82. package/dist/constants/pages.js +5 -0
  83. package/dist/constants/pages.js.map +1 -0
  84. package/dist/constants/requests.d.ts +18 -0
  85. package/dist/constants/requests.d.ts.map +1 -0
  86. package/dist/constants/requests.js +18 -0
  87. package/dist/constants/requests.js.map +1 -0
  88. package/dist/constants/runner.d.ts +8 -0
  89. package/dist/constants/runner.d.ts.map +1 -0
  90. package/dist/constants/runner.js +8 -0
  91. package/dist/constants/runner.js.map +1 -0
  92. package/dist/constants/runs.d.ts +8 -0
  93. package/dist/constants/runs.d.ts.map +1 -0
  94. package/dist/constants/runs.js +8 -0
  95. package/dist/constants/runs.js.map +1 -0
  96. package/dist/domain/accounts.d.ts +4 -2
  97. package/dist/domain/accounts.d.ts.map +1 -1
  98. package/dist/domain/collection.d.ts +27 -0
  99. package/dist/domain/collection.d.ts.map +1 -0
  100. package/dist/domain/collection.js +2 -0
  101. package/dist/domain/collection.js.map +1 -0
  102. package/dist/domain/diagnostics.d.ts +11 -0
  103. package/dist/domain/diagnostics.d.ts.map +1 -0
  104. package/dist/domain/diagnostics.js +2 -0
  105. package/dist/domain/diagnostics.js.map +1 -0
  106. package/dist/domain/errors.d.ts +2 -1
  107. package/dist/domain/errors.d.ts.map +1 -1
  108. package/dist/domain/errors.js +10 -9
  109. package/dist/domain/errors.js.map +1 -1
  110. package/dist/domain/http.d.ts +7 -1
  111. package/dist/domain/http.d.ts.map +1 -1
  112. package/dist/domain/manifest.d.ts +8 -0
  113. package/dist/domain/manifest.d.ts.map +1 -1
  114. package/dist/domain/output.d.ts +3 -0
  115. package/dist/domain/output.d.ts.map +1 -0
  116. package/dist/domain/output.js +2 -0
  117. package/dist/domain/output.js.map +1 -0
  118. package/dist/domain/pages.d.ts +20 -0
  119. package/dist/domain/pages.d.ts.map +1 -0
  120. package/dist/domain/pages.js +2 -0
  121. package/dist/domain/pages.js.map +1 -0
  122. package/dist/domain/pool.d.ts +22 -0
  123. package/dist/domain/pool.d.ts.map +1 -0
  124. package/dist/domain/pool.js +2 -0
  125. package/dist/domain/pool.js.map +1 -0
  126. package/dist/domain/records.d.ts +6 -1
  127. package/dist/domain/records.d.ts.map +1 -1
  128. package/dist/domain/requests.d.ts +19 -10
  129. package/dist/domain/requests.d.ts.map +1 -1
  130. package/dist/domain/runner.d.ts +30 -0
  131. package/dist/domain/runner.d.ts.map +1 -0
  132. package/dist/domain/runner.js +2 -0
  133. package/dist/domain/runner.js.map +1 -0
  134. package/dist/domain/runs.d.ts +12 -0
  135. package/dist/domain/runs.d.ts.map +1 -0
  136. package/dist/domain/runs.js +2 -0
  137. package/dist/domain/runs.js.map +1 -0
  138. package/dist/engine/api-engine.d.ts +7 -7
  139. package/dist/engine/api-engine.d.ts.map +1 -1
  140. package/dist/engine/api-engine.js +42 -19
  141. package/dist/engine/api-engine.js.map +1 -1
  142. package/dist/engine/extractors.d.ts +2 -8
  143. package/dist/engine/extractors.d.ts.map +1 -1
  144. package/dist/engine/extractors.js +30 -11
  145. package/dist/engine/extractors.js.map +1 -1
  146. package/dist/index.d.ts +4 -4
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js.map +1 -1
  149. package/dist/manifest/destinations.d.ts +4 -0
  150. package/dist/manifest/destinations.d.ts.map +1 -0
  151. package/dist/manifest/destinations.js +47 -0
  152. package/dist/manifest/destinations.js.map +1 -0
  153. package/dist/manifest/model.d.ts +3 -2
  154. package/dist/manifest/model.d.ts.map +1 -1
  155. package/dist/manifest/model.js +6 -1
  156. package/dist/manifest/model.js.map +1 -1
  157. package/dist/manifest/provider.d.ts +10 -3
  158. package/dist/manifest/provider.d.ts.map +1 -1
  159. package/dist/manifest/provider.js +86 -34
  160. package/dist/manifest/provider.js.map +1 -1
  161. package/dist/manifest/scraper.d.ts +2 -6
  162. package/dist/manifest/scraper.d.ts.map +1 -1
  163. package/dist/manifest/scraper.js +46 -15
  164. package/dist/manifest/scraper.js.map +1 -1
  165. package/dist/output/csv-writer.d.ts.map +1 -1
  166. package/dist/output/csv-writer.js +32 -10
  167. package/dist/output/csv-writer.js.map +1 -1
  168. package/dist/output/json-writer.d.ts +1 -0
  169. package/dist/output/json-writer.d.ts.map +1 -1
  170. package/dist/output/json-writer.js +36 -11
  171. package/dist/output/json-writer.js.map +1 -1
  172. package/dist/output/lock.d.ts +2 -0
  173. package/dist/output/lock.d.ts.map +1 -0
  174. package/dist/output/lock.js +18 -0
  175. package/dist/output/lock.js.map +1 -0
  176. package/dist/output/writer.d.ts +2 -1
  177. package/dist/output/writer.d.ts.map +1 -1
  178. package/dist/output/writer.js +6 -3
  179. package/dist/output/writer.js.map +1 -1
  180. package/dist/pool/account-pool.d.ts +3 -12
  181. package/dist/pool/account-pool.d.ts.map +1 -1
  182. package/dist/pool/account-pool.js +54 -16
  183. package/dist/pool/account-pool.js.map +1 -1
  184. package/dist/pool/cooldown.d.ts +3 -7
  185. package/dist/pool/cooldown.d.ts.map +1 -1
  186. package/dist/pool/cooldown.js +10 -7
  187. package/dist/pool/cooldown.js.map +1 -1
  188. package/dist/pool/limiter.d.ts +3 -3
  189. package/dist/pool/limiter.d.ts.map +1 -1
  190. package/dist/pool/limiter.js +5 -6
  191. package/dist/pool/limiter.js.map +1 -1
  192. package/dist/query/builder.d.ts +1 -1
  193. package/dist/query/builder.d.ts.map +1 -1
  194. package/dist/query/builder.js +10 -4
  195. package/dist/query/builder.js.map +1 -1
  196. package/dist/query/collection-id.d.ts +3 -0
  197. package/dist/query/collection-id.d.ts.map +1 -0
  198. package/dist/query/collection-id.js +21 -0
  199. package/dist/query/collection-id.js.map +1 -0
  200. package/dist/query/normalize.d.ts +3 -32
  201. package/dist/query/normalize.d.ts.map +1 -1
  202. package/dist/query/normalize.js +10 -16
  203. package/dist/query/normalize.js.map +1 -1
  204. package/dist/query/targets.d.ts +2 -7
  205. package/dist/query/targets.d.ts.map +1 -1
  206. package/dist/query/targets.js.map +1 -1
  207. package/dist/query/types.d.ts +40 -0
  208. package/dist/query/types.d.ts.map +1 -0
  209. package/dist/query/types.js +2 -0
  210. package/dist/query/types.js.map +1 -0
  211. package/dist/runner/index.d.ts +3 -0
  212. package/dist/runner/index.d.ts.map +1 -1
  213. package/dist/runner/index.js.map +1 -1
  214. package/dist/runner/retry.d.ts +3 -6
  215. package/dist/runner/retry.d.ts.map +1 -1
  216. package/dist/runner/retry.js +5 -3
  217. package/dist/runner/retry.js.map +1 -1
  218. package/dist/runner/runner.d.ts +2 -14
  219. package/dist/runner/runner.d.ts.map +1 -1
  220. package/dist/runner/runner.js +11 -7
  221. package/dist/runner/runner.js.map +1 -1
  222. package/dist/runner/task-queue.d.ts +9 -11
  223. package/dist/runner/task-queue.d.ts.map +1 -1
  224. package/dist/runner/task-queue.js +79 -32
  225. package/dist/runner/task-queue.js.map +1 -1
  226. package/dist/storage/account-repository.d.ts +2 -15
  227. package/dist/storage/account-repository.d.ts.map +1 -1
  228. package/dist/storage/account-repository.js +65 -35
  229. package/dist/storage/account-repository.js.map +1 -1
  230. package/dist/storage/database.d.ts +3 -1
  231. package/dist/storage/database.d.ts.map +1 -1
  232. package/dist/storage/database.js +10 -4
  233. package/dist/storage/database.js.map +1 -1
  234. package/dist/storage/index.d.ts +3 -1
  235. package/dist/storage/index.d.ts.map +1 -1
  236. package/dist/storage/index.js +2 -0
  237. package/dist/storage/index.js.map +1 -1
  238. package/dist/storage/progress-repository.d.ts +12 -0
  239. package/dist/storage/progress-repository.d.ts.map +1 -0
  240. package/dist/storage/progress-repository.js +76 -0
  241. package/dist/storage/progress-repository.js.map +1 -0
  242. package/dist/storage/run-repository.d.ts +4 -10
  243. package/dist/storage/run-repository.d.ts.map +1 -1
  244. package/dist/storage/run-repository.js +4 -2
  245. package/dist/storage/run-repository.js.map +1 -1
  246. package/dist/storage/schema.d.ts.map +1 -1
  247. package/dist/storage/schema.js +19 -0
  248. package/dist/storage/schema.js.map +1 -1
  249. package/dist/storage/types.d.ts +15 -0
  250. package/dist/storage/types.d.ts.map +1 -0
  251. package/dist/storage/types.js +2 -0
  252. package/dist/storage/types.js.map +1 -0
  253. package/dist/transport/body.d.ts +15 -0
  254. package/dist/transport/body.d.ts.map +1 -0
  255. package/dist/transport/body.js +61 -0
  256. package/dist/transport/body.js.map +1 -0
  257. package/dist/transport/dispatcher-pool.d.ts +13 -0
  258. package/dist/transport/dispatcher-pool.d.ts.map +1 -0
  259. package/dist/transport/dispatcher-pool.js +47 -0
  260. package/dist/transport/dispatcher-pool.js.map +1 -0
  261. package/dist/transport/graphql.d.ts +1 -1
  262. package/dist/transport/graphql.d.ts.map +1 -1
  263. package/dist/transport/graphql.js +36 -19
  264. package/dist/transport/graphql.js.map +1 -1
  265. package/dist/transport/session.d.ts +8 -11
  266. package/dist/transport/session.d.ts.map +1 -1
  267. package/dist/transport/session.js +71 -26
  268. package/dist/transport/session.js.map +1 -1
  269. package/dist/transport/transaction-id.d.ts +2 -7
  270. package/dist/transport/transaction-id.d.ts.map +1 -1
  271. package/dist/transport/transaction-id.js +20 -16
  272. package/dist/transport/transaction-id.js.map +1 -1
  273. package/dist/transport/types.d.ts +28 -0
  274. package/dist/transport/types.d.ts.map +1 -0
  275. package/dist/transport/types.js +2 -0
  276. package/dist/transport/types.js.map +1 -0
  277. package/dist/utils/abort.d.ts +6 -0
  278. package/dist/utils/abort.d.ts.map +1 -0
  279. package/dist/utils/abort.js +45 -0
  280. package/dist/utils/abort.js.map +1 -0
  281. package/dist/utils/redact.d.ts +5 -0
  282. package/dist/utils/redact.d.ts.map +1 -0
  283. package/dist/utils/redact.js +42 -0
  284. package/dist/utils/redact.js.map +1 -0
  285. package/docs/architecture/overview.md +8 -4
  286. package/docs/product/specification.md +18 -8
  287. package/docs/security/data-boundary.md +3 -0
  288. package/package.json +5 -4
package/DOCUMENTATION.md CHANGED
@@ -317,6 +317,39 @@ operators and combined with that query. If neither date bound is supplied, XTraw
317
317
  previous 30 days. A bounded interval is split into up to `searchSplits` tasks and processed with the
318
318
  available account concurrency.
319
319
 
320
+ ### Request one search page
321
+
322
+ Use `searchPage()` when the caller needs to own cursor persistence and pagination:
323
+
324
+ ```ts
325
+ import type { SearchPageRequest } from "xtrawl";
326
+
327
+ const filters = {
328
+ since: "2026-08-01",
329
+ until: "2026-08-12",
330
+ fromUsers: ["OpenAI"],
331
+ minLikes: 10,
332
+ displayType: "Latest",
333
+ } satisfies SearchPageRequest;
334
+
335
+ let cursor: string | undefined;
336
+ do {
337
+ const page = await client.searchPage("typescript", { ...filters, cursor });
338
+ await saveTweets(page.tweets);
339
+ cursor = page.nextCursor;
340
+ } while (cursor);
341
+ ```
342
+
343
+ Each call requests one logical page through the normal account pool, including bounded retries,
344
+ account switching, cooldowns, and usage accounting. The returned `nextCursor` is opaque: store it
345
+ without modifying it and send it back with the same query, filters, display type, and date bounds.
346
+
347
+ `SearchPageRequest` supports all search filters plus `cursor` and `maxAccountSwitches`. It excludes
348
+ high-level controls such as `limit`, `resume`, `save`, and `maxEmptyPages`. `searchPage()` does not
349
+ split the date interval, write files, create a run record, or read and update SQLite checkpoints.
350
+ Use `search()` for automatic multi-page scheduling, deduplication, limits, resume state, output, and
351
+ run statistics.
352
+
320
353
  ### Read profile information
321
354
 
322
355
  ```ts
@@ -549,6 +582,10 @@ updates it as pagination advances. Checkpoint identity includes the operation an
549
582
  so a materially different request starts from its own checkpoint. A successfully completed operation
550
583
  clears its checkpoint.
551
584
 
585
+ For caller-managed search pagination, use `searchPage()`. Save its `nextCursor` in your own state and
586
+ pass it to the next call. This page-level API never reads or writes XTrawl checkpoints; the caller is
587
+ responsible for stopping when `nextCursor` is `undefined` and for avoiding repeated cursors.
588
+
552
589
  For profile and relationship methods, `initialCursors` can provide an explicit cursor keyed by the
553
590
  target identity. An explicit initial cursor takes precedence over a stored checkpoint.
554
591
 
@@ -633,6 +670,20 @@ interface SearchResult {
633
670
  and optional raw source data when available. `RunStats` reports collected count, task counts,
634
671
  failures, and retries.
635
672
 
673
+ ### `SearchPageResult`
674
+
675
+ `searchPage()` returns one normalized page and its opaque continuation cursor:
676
+
677
+ ```ts
678
+ interface SearchPageResult {
679
+ readonly tweets: readonly TweetRecord[];
680
+ readonly nextCursor: string | undefined;
681
+ }
682
+ ```
683
+
684
+ The number of posts requested per page comes from `apiPageSize`. The remote endpoint may return
685
+ fewer records.
686
+
636
687
  ### `ProfileRecord`
637
688
 
638
689
  Profile lookup returns normalized identity, biography, location, account creation time, public
package/README.md CHANGED
@@ -30,6 +30,7 @@ XTrawl is published on npm as [`xtrawl`](https://www.npmjs.com/package/xtrawl).
30
30
  - Posts from public profile timelines
31
31
  - Public followers, following, and verified-follower relationships
32
32
  - Normalized TypeScript records with optional CSV and JSON output
33
+ - Caller-controlled search pagination with opaque cursors for application-owned state
33
34
 
34
35
  XTrawl never posts, replies, likes, follows, messages, or changes account settings.
35
36
 
@@ -120,6 +121,31 @@ const verified = await client.getVerifiedFollowers(["OpenAI"], { limit: 500 });
120
121
  Targets may be usernames, `@user` handles, X or Twitter profile URLs, or typed target objects.
121
122
  Profile-timeline and relationship methods also accept numeric user IDs and `/i/user/ID` URLs.
122
123
 
124
+ ## Control search pages yourself
125
+
126
+ Use `searchPage()` when your application owns cursor storage and pagination. Each call returns one
127
+ page and an opaque `nextCursor`:
128
+
129
+ ```ts
130
+ const filters = {
131
+ since: "2026-08-01",
132
+ until: "2026-08-12",
133
+ fromUsers: ["OpenAI"],
134
+ displayType: "Latest" as const,
135
+ };
136
+
137
+ let cursor: string | undefined;
138
+ do {
139
+ const page = await client.searchPage("typescript", { ...filters, cursor });
140
+ await saveTweets(page.tweets);
141
+ cursor = page.nextCursor;
142
+ } while (cursor);
143
+ ```
144
+
145
+ Reuse the same query, filters, and explicit date bounds with every cursor. `searchPage()` supports
146
+ the advanced search filters, but does not split date intervals, save output, or read and write run
147
+ history or checkpoints. Use `search()` when XTrawl should manage those concerns automatically.
148
+
123
149
  ## Use the CLI
124
150
 
125
151
  Global options must appear before the command. Command options come after it.
@@ -229,12 +255,14 @@ const client = await XTrawl.create({
229
255
  console.log(client.poolSummary);
230
256
  ```
231
257
 
232
- XTrawl imports the accounts into SQLite and leases eligible accounts as work is scheduled. The
233
- default concurrency is five; loading more accounts does not make every account run at once. There is
234
- no configured account-count limit, but very large pools have not been load-tested. A failed page is
235
- retried up to three times and may switch accounts twice by default. Rate-limit, network, proxy, and
236
- transient failures place the affected account into cooldown. A rejected session marks the account
237
- unusable and attempts a CSRF-cookie repair before another account is selected.
258
+ XTrawl imports accounts into the configured account store and leases eligible accounts as work is
259
+ scheduled. SQLite is the default; applications that provide `accountStore` keep these records in
260
+ their own adapter. The default concurrency is five; loading more accounts does not make every
261
+ account run at once. There is no configured account-count limit, but very large pools have not been
262
+ load-tested. A failed page is retried up to three times and may switch accounts twice by default.
263
+ Rate-limit, network, proxy, and transient failures place the affected account into cooldown. A
264
+ rejected session marks the account unusable and attempts a CSRF-cookie repair before another account
265
+ is selected.
238
266
 
239
267
  An account-level `proxy` takes precedence over the global `--proxy`. HTTP, HTTPS, and SOCKS5 proxies
240
268
  are supported. XTrawl does not currently accept a separate proxy list or automatically assign and
@@ -1,4 +1,4 @@
1
1
  import { fetch as undiciFetch } from "undici";
2
2
  import type { CookieMap, ProxySettings } from "../domain/accounts.js";
3
- export declare function bootstrapCookiesFromAuthToken(authToken: string, fetcher?: typeof undiciFetch, proxy?: string | ProxySettings): Promise<CookieMap | undefined>;
3
+ export declare function bootstrapCookiesFromAuthToken(authToken: string, fetcher?: typeof undiciFetch, proxy?: string | ProxySettings, signal?: AbortSignal): Promise<CookieMap | undefined>;
4
4
  //# sourceMappingURL=bootstrap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtE,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,WAAyB,EACzC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAC7B,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAsBhC"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAItE,wBAAsB,6BAA6B,CACjD,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,OAAO,WAAyB,EACzC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,EAC9B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,CAgChC"}
@@ -1,28 +1,41 @@
1
1
  import { fetch as undiciFetch } from "undici";
2
+ import { AUXILIARY_REQUEST_TIMEOUT_MS, cancelBody } from "../transport/body.js";
2
3
  import { proxyDispatcher } from "../transport/proxy.js";
3
- export async function bootstrapCookiesFromAuthToken(authToken, fetcher = undiciFetch, proxy) {
4
+ export async function bootstrapCookiesFromAuthToken(authToken, fetcher = undiciFetch, proxy, signal) {
4
5
  const dispatcher = proxyDispatcher(proxy);
6
+ const timeout = new AbortController();
7
+ const timer = setTimeout(() => timeout.abort(), AUXILIARY_REQUEST_TIMEOUT_MS);
8
+ const combined = signal && !signal.aborted ? AbortSignal.any([signal, timeout.signal]) : timeout.signal;
5
9
  try {
6
10
  const response = await fetcher("https://x.com/home", {
7
11
  headers: { Cookie: `auth_token=${authToken}`, "User-Agent": "Mozilla/5.0" },
8
- redirect: "follow",
12
+ redirect: "manual",
13
+ signal: combined,
9
14
  ...(dispatcher ? { dispatcher } : {}),
10
15
  });
11
- if (response.status >= 400)
12
- return undefined;
13
- const cookies = { auth_token: authToken };
14
- const setCookies = typeof response.headers.getSetCookie === "function" ? response.headers.getSetCookie() : [];
15
- for (const header of setCookies) {
16
- const first = header.split(";", 1)[0];
17
- if (!first)
18
- continue;
19
- const separator = first.indexOf("=");
20
- if (separator > 0)
21
- cookies[first.slice(0, separator)] = first.slice(separator + 1);
16
+ try {
17
+ if (response.status >= 300 && response.status < 400)
18
+ return undefined;
19
+ if (response.status >= 400)
20
+ return undefined;
21
+ const cookies = { auth_token: authToken };
22
+ const setCookies = typeof response.headers.getSetCookie === "function" ? response.headers.getSetCookie() : [];
23
+ for (const header of setCookies) {
24
+ const first = header.split(";", 1)[0];
25
+ if (!first)
26
+ continue;
27
+ const separator = first.indexOf("=");
28
+ if (separator > 0)
29
+ cookies[first.slice(0, separator)] = first.slice(separator + 1);
30
+ }
31
+ return cookies.ct0 ? cookies : undefined;
32
+ }
33
+ finally {
34
+ await cancelBody(response);
22
35
  }
23
- return cookies.ct0 ? cookies : undefined;
24
36
  }
25
37
  finally {
38
+ clearTimeout(timer);
26
39
  await dispatcher?.close();
27
40
  }
28
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,SAAiB,EACjB,UAA8B,WAAW,EACzC,KAA8B;IAE9B,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE;YACnD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,SAAS,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE;YAC3E,QAAQ,EAAE,QAAQ;YAClB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;YAAE,OAAO,SAAS,CAAC;QAC7C,MAAM,OAAO,GAA2B,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;QAClE,MAAM,UAAU,GACd,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,SAAS,GAAG,CAAC;gBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3C,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/auth/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,4BAA4B,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,SAAiB,EACjB,UAA8B,WAAW,EACzC,KAA8B,EAC9B,MAAoB;IAEpB,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,4BAA4B,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACxG,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE;YACnD,OAAO,EAAE,EAAE,MAAM,EAAE,cAAc,SAAS,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE;YAC3E,QAAQ,EAAE,QAAQ;YAClB,MAAM,EAAE,QAAQ;YAChB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,MAAM,GAAG,GAAG;gBAAE,OAAO,SAAS,CAAC;YACtE,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO,SAAS,CAAC;YAC7C,MAAM,OAAO,GAA2B,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;YAClE,MAAM,UAAU,GACd,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7F,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK;oBAAE,SAAS;gBACrB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrC,IAAI,SAAS,GAAG,CAAC;oBAAE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3C,CAAC;gBAAS,CAAC;YACT,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,UAAU,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAOA,wBAAsB,MAAM,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D7F"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AASA,wBAAsB,MAAM,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CA+D7F"}
package/dist/cli/main.js CHANGED
@@ -2,6 +2,8 @@
2
2
  import { realpathSync } from "node:fs";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { XTrawl } from "../client/client.js";
5
+ import { CLI_COMMAND } from "../constants/cli.js";
6
+ import { redactText } from "../utils/redact.js";
5
7
  import { HELP } from "./help.js";
6
8
  import { collectionOptionsFromCli, parseArgs, searchRequestFromCli, CliUsageError } from "./parser.js";
7
9
  export async function runCli(argv = process.argv.slice(2)) {
@@ -28,25 +30,24 @@ export async function runCli(argv = process.argv.slice(2)) {
28
30
  if (verbose)
29
31
  console.error(`[xtrawl] accounts=${client.poolSummary.total} eligible=${client.poolSummary.eligible} concurrency=${client.config.concurrency}`);
30
32
  let result;
31
- if (args.command === "search")
33
+ if (args.command === CLI_COMMAND.SEARCH)
32
34
  result = await client.search(args.values[0] ?? "", searchRequestFromCli(args));
33
- else if (args.command === "tweet") {
35
+ else if (args.command === CLI_COMMAND.TWEET) {
34
36
  const tweets = [];
35
37
  for (const value of args.values)
36
38
  tweets.push(await client.getTweet(value));
37
39
  result = tweets;
38
40
  }
39
- else if (args.command === "user-info")
41
+ else if (args.command === CLI_COMMAND.USER_INFO)
40
42
  result = await client.getUserInfo(args.values, collectionOptionsFromCli(args));
41
- else if (args.command === "profile-tweets")
43
+ else if (args.command === CLI_COMMAND.PROFILE_TWEETS)
42
44
  result = await client.getProfileTweets(args.values, collectionOptionsFromCli(args));
45
+ else if (args.command === CLI_COMMAND.FOLLOWERS)
46
+ result = await client.getFollowers(args.values, collectionOptionsFromCli(args));
47
+ else if (args.command === CLI_COMMAND.FOLLOWING)
48
+ result = await client.getFollowing(args.values, collectionOptionsFromCli(args));
43
49
  else
44
- result =
45
- args.command === "followers"
46
- ? await client.getFollowers(args.values, collectionOptionsFromCli(args))
47
- : args.command === "following"
48
- ? await client.getFollowing(args.values, collectionOptionsFromCli(args))
49
- : await client.getVerifiedFollowers(args.values, collectionOptionsFromCli(args));
50
+ result = await client.getVerifiedFollowers(args.values, collectionOptionsFromCli(args));
50
51
  if (pretty)
51
52
  console.log(JSON.stringify(result, null, 2));
52
53
  return 0;
@@ -61,11 +62,11 @@ export async function runCli(argv = process.argv.slice(2)) {
61
62
  console.error(HELP);
62
63
  return 2;
63
64
  }
64
- console.error(verbose && error instanceof Error
65
+ console.error(redactText(verbose && error instanceof Error
65
66
  ? (error.stack ?? error.message)
66
67
  : error instanceof Error
67
68
  ? error.message
68
- : String(error));
69
+ : String(error)));
69
70
  return 1;
70
71
  }
71
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,wBAAwB,EAAE,SAAS,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvG,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAA0B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1E,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;SAChD,CAAC,CAAC;QACH,IAAI,CAAC;YACH,IAAI,OAAO;gBACT,OAAO,CAAC,KAAK,CACX,qBAAqB,MAAM,CAAC,WAAW,CAAC,KAAK,aAAa,MAAM,CAAC,WAAW,CAAC,QAAQ,gBAAgB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CACjI,CAAC;YACJ,IAAI,MAAe,CAAC;YACpB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ;gBAC3B,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC5E,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;gBAClC,MAAM,MAAM,GAAG,EAAE,CAAC;gBAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM;oBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC3E,MAAM,GAAG,MAAM,CAAC;YAClB,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW;gBACrC,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;iBAC5E,IAAI,IAAI,CAAC,OAAO,KAAK,gBAAgB;gBACxC,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;;gBAEpF,MAAM;oBACJ,IAAI,CAAC,OAAO,KAAK,WAAW;wBAC1B,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;wBACxE,CAAC,CAAC,IAAI,CAAC,OAAO,KAAK,WAAW;4BAC5B,CAAC,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC;4BACxE,CAAC,CAAC,MAAM,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,EAAE,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC;YACzF,IAAI,MAAM;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACzD,OAAO,CAAC,CAAC;QACX,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,aAAa,EAAE,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CACX,OAAO,IAAI,KAAK,YAAY,KAAK;YAC/B,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC;YAChC,CAAC,CAAC,KAAK,YAAY,KAAK;gBACtB,CAAC,CAAC,KAAK,CAAC,OAAO;gBACf,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACpB,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,SAAS,CAAC,KAAK,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAClF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,IAAI,iBAAiB,EAAE;IAAE,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,6 @@
1
1
  import type { FollowType, FollowsRequest, ProfileTimelineRequest, SearchRequest } from "../domain/requests.js";
2
- export interface CliArgs {
3
- readonly authToken?: string;
4
- readonly csrfToken?: string;
5
- readonly cookiesFile?: string;
6
- readonly envFile?: string;
7
- readonly dbPath: string;
8
- readonly proxy?: string;
9
- readonly concurrency: number;
10
- readonly manifestScrapeOnInit: boolean;
11
- readonly verbose: boolean;
12
- readonly command?: "search" | "tweet" | "profile-tweets" | "followers" | "following" | "verified-followers" | "user-info";
13
- readonly values: readonly string[];
14
- readonly options: Readonly<Record<string, string | boolean | readonly string[]>>;
15
- }
2
+ import type { CliArgs } from "./types.js";
3
+ export type { CliArgs } from "./types.js";
16
4
  export declare class CliUsageError extends Error {
17
5
  }
18
6
  export declare function parseArgs(argv: readonly string[]): CliArgs;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EACf,QAAQ,GAAG,OAAO,GAAG,gBAAgB,GAAG,WAAW,GAAG,WAAW,GAAG,oBAAoB,GAAG,WAAW,CAAC;IACzG,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClF;AAED,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAiG1D;AA2FD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAoDjE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,GACZ,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC,CAsB1F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,CAQ9E"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,sBAAsB,EACtB,aAAa,EACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,qBAAa,aAAc,SAAQ,KAAK;CAAG;AAE3C,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CA8F1D;AAiFD,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAsDjE;AAED,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,OAAO,GACZ,IAAI,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,YAAY,CAAC,CAsB1F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,UAAU,GAAG,SAAS,CAQ9E"}
@@ -1,3 +1,6 @@
1
+ import { CLI_COMMAND } from "../constants/cli.js";
2
+ import { FOLLOW_TYPE, SEARCH_DISPLAY, TWEET_TYPE } from "../constants/requests.js";
3
+ import { SAVE_FORMAT } from "../constants/output.js";
1
4
  export class CliUsageError extends Error {
2
5
  }
3
6
  export function parseArgs(argv) {
@@ -41,15 +44,7 @@ export function parseArgs(argv) {
41
44
  const command = argv[index];
42
45
  if (!command)
43
46
  return { ...global, values: [], options: {}, command: undefined };
44
- if (![
45
- "search",
46
- "tweet",
47
- "profile-tweets",
48
- "followers",
49
- "following",
50
- "verified-followers",
51
- "user-info",
52
- ].includes(command))
47
+ if (!Object.values(CLI_COMMAND).includes(command))
53
48
  throw new CliUsageError(`Unknown command: ${command}`);
54
49
  index += 1;
55
50
  const values = [];
@@ -88,9 +83,16 @@ export function parseArgs(argv) {
88
83
  options[key] = flagValue;
89
84
  index += equals > 2 ? 1 : 2;
90
85
  }
91
- if (["tweet", "profile-tweets", "followers", "following", "verified-followers", "user-info"].includes(command) &&
86
+ if ([
87
+ CLI_COMMAND.TWEET,
88
+ CLI_COMMAND.PROFILE_TWEETS,
89
+ CLI_COMMAND.FOLLOWERS,
90
+ CLI_COMMAND.FOLLOWING,
91
+ CLI_COMMAND.VERIFIED_FOLLOWERS,
92
+ CLI_COMMAND.USER_INFO,
93
+ ].includes(command) &&
92
94
  values.length === 0)
93
- throw new CliUsageError(command === "tweet"
95
+ throw new CliUsageError(command === CLI_COMMAND.TWEET
94
96
  ? "tweet requires at least one post ID or status URL"
95
97
  : `${command} requires at least one user`);
96
98
  return { ...global, command, values, options };
@@ -151,19 +153,11 @@ function validateCommandValue(key, value) {
151
153
  if (!Number.isInteger(parsed) || parsed < 0)
152
154
  throw new CliUsageError(`--${key} must be a non-negative integer`);
153
155
  }
154
- if (key === "save-format" && !["csv", "json", "both"].includes(value))
155
- throw new CliUsageError("--save-format must be csv, json, or both");
156
- if (key === "display-type" && value !== "Top" && value !== "Latest")
156
+ if (key === "save-format" && !Object.values(SAVE_FORMAT).includes(value))
157
+ throw new CliUsageError("--save-format must be csv, json, both, or ndjson");
158
+ if (key === "display-type" && value !== SEARCH_DISPLAY.TOP && value !== SEARCH_DISPLAY.LATEST)
157
159
  throw new CliUsageError("--display-type must be Top or Latest");
158
- if (key === "tweet-type" &&
159
- ![
160
- "all",
161
- "originals_only",
162
- "replies_only",
163
- "retweets_only",
164
- "exclude_replies",
165
- "exclude_retweets",
166
- ].includes(value))
160
+ if (key === "tweet-type" && !Object.values(TWEET_TYPE).includes(value))
167
161
  throw new CliUsageError(`Unsupported --tweet-type value: ${value}`);
168
162
  }
169
163
  function followingValues(argv, start) {
@@ -199,7 +193,9 @@ export function searchRequestFromCli(args) {
199
193
  ...(option.geocode ? { geocode: String(option.geocode) } : {}),
200
194
  ...(option.near ? { near: String(option.near) } : {}),
201
195
  ...(option.within ? { within: String(option.within) } : {}),
202
- ...(option["display-type"] ? { displayType: String(option["display-type"]) } : {}),
196
+ ...(option["display-type"]
197
+ ? { displayType: String(option["display-type"]) }
198
+ : {}),
203
199
  ...(option["tweet-type"]
204
200
  ? { tweetType: String(option["tweet-type"]) }
205
201
  : {}),
@@ -250,12 +246,12 @@ export function collectionOptionsFromCli(args) {
250
246
  };
251
247
  }
252
248
  export function followType(command) {
253
- return command === "followers"
254
- ? "followers"
255
- : command === "following"
256
- ? "following"
257
- : command === "verified-followers"
258
- ? "verified_followers"
249
+ return command === CLI_COMMAND.FOLLOWERS
250
+ ? FOLLOW_TYPE.FOLLOWERS
251
+ : command === CLI_COMMAND.FOLLOWING
252
+ ? FOLLOW_TYPE.FOLLOWING
253
+ : command === CLI_COMMAND.VERIFIED_FOLLOWERS
254
+ ? FOLLOW_TYPE.VERIFIED_FOLLOWERS
259
255
  : undefined;
260
256
  }
261
257
  function splitFlag(flag, next) {
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,aAAc,SAAQ,KAAK;CAAG;AAE3C,MAAM,UAAU,SAAS,CAAC,IAAuB;IAC/C,MAAM,MAAM,GAUR,EAAE,MAAM,EAAE,iBAAiB,EAAE,WAAW,EAAE,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC/F,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI;YAAE,MAAM;QACjB,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACzF,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,IAAI,KAAK,2BAA2B,EAAE,CAAC;YACzC,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC;YACnC,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;QACtD,IAAI,GAAG,KAAK,YAAY;YAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;aAC9C,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,KAAK;YAAE,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;aACpE,IAAI,GAAG,KAAK,cAAc;YAAE,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC;aACvD,IAAI,GAAG,KAAK,UAAU;YAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;aAC/C,IAAI,GAAG,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;aAC7C,IAAI,GAAG,KAAK,OAAO;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;aAC1C,IAAI,GAAG,KAAK,aAAa;YAAE,MAAM,CAAC,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;;YACrF,MAAM,IAAI,aAAa,CAAC,qBAAqB,GAAG,EAAE,CAAC,CAAC;QACzD,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAmC,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IAChF,IACE,CAAC;QACC,QAAQ;QACR,OAAO;QACP,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,oBAAoB;QACpB,WAAW;KACZ,CAAC,QAAQ,CAAC,OAAO,CAAC;QAEnB,MAAM,IAAI,aAAa,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;IACzD,KAAK,IAAI,CAAC,CAAC;IACX,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAyD,EAAE,CAAC;IACzE,OAAO,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,CAAC;QAC3B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACzF,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,KAAK,GAAG,0BAA0B,CAAC,CAAC;YAC5E,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;YACpB,KAAK,IAAI,CAAC,CAAC;YACX,SAAS;QACX,CAAC;QACD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACxF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,IAAI,aAAa,CAAC,KAAK,GAAG,8BAA8B,CAAC,CAAC;YACxF,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAE,OAAO,CAAC,GAAG,CAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,CAAC;YACvC,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,aAAa,CAAC,KAAK,GAAG,mBAAmB,CAAC,CAAC;QACnG,oBAAoB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;QACzB,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IACD,IACE,CAAC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,oBAAoB,EAAE,WAAW,CAAC,CAAC,QAAQ,CAC/F,OAAO,CACR;QACD,MAAM,CAAC,MAAM,KAAK,CAAC;QAEnB,MAAM,IAAI,aAAa,CACrB,OAAO,KAAK,OAAO;YACjB,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,GAAG,OAAO,6BAA6B,CAC5C,CAAC;IACJ,OAAO,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,MAAM;IACN,IAAI;IACJ,SAAS;IACT,WAAW;IACX,WAAW;IACX,eAAe;IACf,cAAc;IACd,kBAAkB;IAClB,eAAe;CAChB,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,cAAc;IACd,cAAc;IACd,eAAe;IACf,oBAAoB;CACrB,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,OAAO;IACP,iBAAiB;IACjB,mBAAmB;IACnB,uBAAuB;IACvB,aAAa;IACb,UAAU;IACV,WAAW;IACX,OAAO;IACP,OAAO;IACP,MAAM;IACN,cAAc;IACd,YAAY;IACZ,WAAW;IACX,aAAa;IACb,cAAc;IACd,OAAO;IACP,SAAS;IACT,MAAM;IACN,QAAQ;CACT,CAAC,CAAC;AAEH,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,eAAe,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC;AAEvF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,uBAAuB,CAAC,CAAC,CAAC;AAE7G,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AAEnF,SAAS,oBAAoB,CAAC,GAAW,EAAE,KAAa;IACtD,IAAI,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC;QAAE,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,IAAI,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;YACzC,MAAM,IAAI,aAAa,CAAC,KAAK,GAAG,iCAAiC,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,GAAG,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QACnE,MAAM,IAAI,aAAa,CAAC,0CAA0C,CAAC,CAAC;IACtE,IAAI,GAAG,KAAK,cAAc,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,QAAQ;QACjE,MAAM,IAAI,aAAa,CAAC,sCAAsC,CAAC,CAAC;IAClE,IACE,GAAG,KAAK,YAAY;QACpB,CAAC;YACC,KAAK;YACL,gBAAgB;YAChB,cAAc;YACd,eAAe;YACf,iBAAiB;YACjB,kBAAkB;SACnB,CAAC,QAAQ,CAAC,KAAK,CAAC;QAEjB,MAAM,IAAI,aAAa,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,eAAe,CAAC,IAAuB,EAAE,KAAa;IAC7D,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAM;QAC5C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAa;IAChD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAiC,EAAE,CAC1D,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7F,MAAM,OAAO,GAAG,CAAC,GAAW,EAAuB,EAAE,CACnD,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE,CACjD,MAAM,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClF,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAqB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC;YACtB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAA+B,EAAE;YAC3E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxF,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,KAAK,SAAS;YAC7C,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,CAAC,oBAAoB,CAAC,EAAE;YACrD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;YACvB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAgC,EAAE;YAC9E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,IAAa;IAEb,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;IAC5B,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE;QACjD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvF,CAAC,CAAC;IACF,OAAO;QACL,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,GAAG,CAAC,MAAM,CAAC,uBAAuB,CAAC,KAAK,SAAS;YAC/C,CAAC,CAAC,EAAE,kBAAkB,EAAE,MAAM,CAAC,uBAAuB,CAAC,EAAE;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChG,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;YACvB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAA4B,EAAE;YAC1E,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAA2B;IACpD,OAAO,OAAO,KAAK,WAAW;QAC5B,CAAC,CAAC,WAAW;QACb,CAAC,CAAC,OAAO,KAAK,WAAW;YACvB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,OAAO,KAAK,oBAAoB;gBAChC,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,SAAS,CAAC;AACpB,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,IAAwB;IACvD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACvE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,cAAc,CAAC,KAAa,EAAE,IAAY;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,aAAa,CAAC,GAAG,IAAI,6BAA6B,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/cli/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { CLI_COMMAND } from "../constants/cli.js";
2
+ export type CliCommand = (typeof CLI_COMMAND)[keyof typeof CLI_COMMAND];
3
+ export interface CliArgs {
4
+ readonly authToken?: string;
5
+ readonly csrfToken?: string;
6
+ readonly cookiesFile?: string;
7
+ readonly envFile?: string;
8
+ readonly dbPath: string;
9
+ readonly proxy?: string;
10
+ readonly concurrency: number;
11
+ readonly manifestScrapeOnInit: boolean;
12
+ readonly verbose: boolean;
13
+ readonly command?: CliCommand;
14
+ readonly values: readonly string[];
15
+ readonly options: Readonly<Record<string, string | boolean | readonly string[]>>;
16
+ }
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC;AAExE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,MAAM,EAAE,CAAC,CAAC,CAAC;CAClF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/client/accounts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EAEpB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EAAiB,KAAK,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAElG,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IANrC,OAAO,CAAC,cAAc,CAAgC;gBAGnC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,GAAE,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,aAAA;IAGtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,UAAU,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAIpD,aAAa,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAI7C,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlC,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IASnF,GAAG,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,eAAe,CAAM,GACzE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAKlC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IAOW,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3E,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAqBhE,WAAW,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAW9E,YAAY,CACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,CAAC;CAW9E"}
1
+ {"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../src/client/accounts.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EACV,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EAEpB,iBAAiB,EAClB,MAAM,4BAA4B,CAAC;AAEpC,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EAAiB,KAAK,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAElG,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IANrC,OAAO,CAAC,cAAc,CAAgC;gBAGnC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,CAAC,GAAE,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,KAAK,IAAI,aAAA;IAGtE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9B,UAAU,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI;IAIpD,aAAa,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAI7C,OAAO,IAAI,OAAO,CAAC,cAAc,CAAC;IAKlC,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IASnF,GAAG,CACd,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,GAAG,eAAe,CAAM,GACzE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAKlC,MAAM,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC;QAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;KAC3B,CAAC;IAOW,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAM1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3E,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,UAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBhE,WAAW,CAAC,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAW9E,YAAY,CACvB,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;KAAE,CAAC;CAW9E"}
@@ -3,6 +3,7 @@ import { parseAccountStateSnapshot } from "../auth/account-state.js";
3
3
  import { loadAccountsFileSync, loadInlineAccounts } from "../auth/loaders.js";
4
4
  import { accountInputToRecord } from "../auth/records.js";
5
5
  import { loadAccountFromEnvironmentSync } from "../config/environment.js";
6
+ import { ACCOUNT_STATUS_CODE } from "../constants/accounts.js";
6
7
  import { AccountStateError } from "../domain/errors.js";
7
8
  import { summarizeAccounts } from "../pool/account-pool.js";
8
9
  import { redactAccount } from "./database.js";
@@ -37,7 +38,7 @@ export class XTrawlAccounts {
37
38
  const now = Date.now();
38
39
  return this.cachedAccounts
39
40
  .filter((account) => !options.eligibleOnly || isEligible(account, this.config, now))
40
- .filter((account) => !options.unusableOnly || account.status === 0)
41
+ .filter((account) => !options.unusableOnly || account.status === ACCOUNT_STATUS_CODE.UNUSABLE)
41
42
  .map((account) => redactAccount(account, options));
42
43
  }
43
44
  async get(username, options = {}) {
@@ -68,7 +69,11 @@ export class XTrawlAccounts {
68
69
  if (!account?.authToken)
69
70
  return false;
70
71
  if (!forceRefresh && account.csrfToken) {
71
- await this.store.upsert({ ...account, status: 1, availableUntil: 0 });
72
+ await this.store.upsert({
73
+ ...account,
74
+ status: ACCOUNT_STATUS_CODE.HEALTHY,
75
+ availableUntil: 0,
76
+ });
72
77
  await this.refresh();
73
78
  return true;
74
79
  }
@@ -77,7 +82,7 @@ export class XTrawlAccounts {
77
82
  return false;
78
83
  await this.store.upsert({
79
84
  ...account,
80
- status: 1,
85
+ status: ACCOUNT_STATUS_CODE.HEALTHY,
81
86
  availableUntil: 0,
82
87
  csrfToken: cookies.ct0,
83
88
  cookies: { ...account.cookies, ...cookies },
@@ -132,7 +137,9 @@ function toSnapshotRecord(account) {
132
137
  cookies: account.cookies,
133
138
  ...(account.bearerToken ? { bearerToken: account.bearerToken } : {}),
134
139
  ...(account.proxy ? { proxy: account.proxy } : {}),
135
- ...(account.status === 0 || account.status === 1 || account.status === 2
140
+ ...(account.status === ACCOUNT_STATUS_CODE.UNUSABLE ||
141
+ account.status === ACCOUNT_STATUS_CODE.HEALTHY ||
142
+ account.status === ACCOUNT_STATUS_CODE.COOLING_DOWN
136
143
  ? { status: account.status }
137
144
  : {}),
138
145
  ...copyOperationalState(account),
@@ -154,8 +161,8 @@ function copyOperationalState(account) {
154
161
  };
155
162
  }
156
163
  function isEligible(account, config, now) {
157
- return (account.status !== 0 &&
158
- !(account.status === 2 && (account.availableUntil ?? 0) > now) &&
164
+ return (account.status !== ACCOUNT_STATUS_CODE.UNUSABLE &&
165
+ !(account.status === ACCOUNT_STATUS_CODE.COOLING_DOWN && (account.availableUntil ?? 0) > now) &&
159
166
  Boolean(account.authToken && account.csrfToken) &&
160
167
  (account.dailyRequests ?? 0) < config.dailyRequestsLimit &&
161
168
  (account.dailyTweets ?? 0) < config.dailyTweetsLimit);