xtrawl 0.1.2 → 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 (285) hide show
  1. package/dist/auth/bootstrap.d.ts +1 -1
  2. package/dist/auth/bootstrap.d.ts.map +1 -1
  3. package/dist/auth/bootstrap.js +27 -14
  4. package/dist/auth/bootstrap.js.map +1 -1
  5. package/dist/cli/main.d.ts.map +1 -1
  6. package/dist/cli/main.js +13 -12
  7. package/dist/cli/main.js.map +1 -1
  8. package/dist/cli/parser.d.ts +2 -14
  9. package/dist/cli/parser.d.ts.map +1 -1
  10. package/dist/cli/parser.js +26 -30
  11. package/dist/cli/parser.js.map +1 -1
  12. package/dist/cli/types.d.ts +17 -0
  13. package/dist/cli/types.d.ts.map +1 -0
  14. package/dist/cli/types.js +2 -0
  15. package/dist/cli/types.js.map +1 -0
  16. package/dist/client/accounts.d.ts.map +1 -1
  17. package/dist/client/accounts.js +13 -6
  18. package/dist/client/accounts.js.map +1 -1
  19. package/dist/client/client.d.ts +13 -1
  20. package/dist/client/client.d.ts.map +1 -1
  21. package/dist/client/client.js +93 -38
  22. package/dist/client/client.js.map +1 -1
  23. package/dist/client/collectors.d.ts +2 -10
  24. package/dist/client/collectors.d.ts.map +1 -1
  25. package/dist/client/collectors.js +122 -57
  26. package/dist/client/collectors.js.map +1 -1
  27. package/dist/client/database.d.ts +6 -18
  28. package/dist/client/database.d.ts.map +1 -1
  29. package/dist/client/database.js +4 -21
  30. package/dist/client/database.js.map +1 -1
  31. package/dist/client/page-commit.d.ts +15 -0
  32. package/dist/client/page-commit.d.ts.map +1 -0
  33. package/dist/client/page-commit.js +19 -0
  34. package/dist/client/page-commit.js.map +1 -0
  35. package/dist/client/profiles.d.ts +1 -1
  36. package/dist/client/profiles.d.ts.map +1 -1
  37. package/dist/client/profiles.js +10 -3
  38. package/dist/client/profiles.js.map +1 -1
  39. package/dist/client/search.d.ts +2 -15
  40. package/dist/client/search.d.ts.map +1 -1
  41. package/dist/client/search.js +64 -25
  42. package/dist/client/search.js.map +1 -1
  43. package/dist/client/types.d.ts +40 -2
  44. package/dist/client/types.d.ts.map +1 -1
  45. package/dist/config/defaults.d.ts.map +1 -1
  46. package/dist/config/defaults.js +5 -2
  47. package/dist/config/defaults.js.map +1 -1
  48. package/dist/config/types.d.ts +5 -2
  49. package/dist/config/types.d.ts.map +1 -1
  50. package/dist/config/validation.d.ts +1 -1
  51. package/dist/config/validation.d.ts.map +1 -1
  52. package/dist/config/validation.js +27 -11
  53. package/dist/config/validation.js.map +1 -1
  54. package/dist/constants/accounts.d.ts +16 -0
  55. package/dist/constants/accounts.d.ts.map +1 -0
  56. package/dist/constants/accounts.js +16 -0
  57. package/dist/constants/accounts.js.map +1 -0
  58. package/dist/constants/cli.d.ts +10 -0
  59. package/dist/constants/cli.d.ts.map +1 -0
  60. package/dist/constants/cli.js +10 -0
  61. package/dist/constants/cli.js.map +1 -0
  62. package/dist/constants/collection.d.ts +9 -0
  63. package/dist/constants/collection.d.ts.map +1 -0
  64. package/dist/constants/collection.js +9 -0
  65. package/dist/constants/collection.js.map +1 -0
  66. package/dist/constants/config.d.ts +6 -0
  67. package/dist/constants/config.d.ts.map +1 -0
  68. package/dist/constants/config.js +6 -0
  69. package/dist/constants/config.js.map +1 -0
  70. package/dist/constants/errors.d.ts +9 -0
  71. package/dist/constants/errors.d.ts.map +1 -0
  72. package/dist/constants/errors.js +9 -0
  73. package/dist/constants/errors.js.map +1 -0
  74. package/dist/constants/output.d.ts +7 -0
  75. package/dist/constants/output.d.ts.map +1 -0
  76. package/dist/constants/output.js +7 -0
  77. package/dist/constants/output.js.map +1 -0
  78. package/dist/constants/pages.d.ts +5 -0
  79. package/dist/constants/pages.d.ts.map +1 -0
  80. package/dist/constants/pages.js +5 -0
  81. package/dist/constants/pages.js.map +1 -0
  82. package/dist/constants/requests.d.ts +18 -0
  83. package/dist/constants/requests.d.ts.map +1 -0
  84. package/dist/constants/requests.js +18 -0
  85. package/dist/constants/requests.js.map +1 -0
  86. package/dist/constants/runner.d.ts +8 -0
  87. package/dist/constants/runner.d.ts.map +1 -0
  88. package/dist/constants/runner.js +8 -0
  89. package/dist/constants/runner.js.map +1 -0
  90. package/dist/constants/runs.d.ts +8 -0
  91. package/dist/constants/runs.d.ts.map +1 -0
  92. package/dist/constants/runs.js +8 -0
  93. package/dist/constants/runs.js.map +1 -0
  94. package/dist/domain/accounts.d.ts +4 -2
  95. package/dist/domain/accounts.d.ts.map +1 -1
  96. package/dist/domain/collection.d.ts +27 -0
  97. package/dist/domain/collection.d.ts.map +1 -0
  98. package/dist/domain/collection.js +2 -0
  99. package/dist/domain/collection.js.map +1 -0
  100. package/dist/domain/diagnostics.d.ts +11 -0
  101. package/dist/domain/diagnostics.d.ts.map +1 -0
  102. package/dist/domain/diagnostics.js +2 -0
  103. package/dist/domain/diagnostics.js.map +1 -0
  104. package/dist/domain/errors.d.ts +2 -1
  105. package/dist/domain/errors.d.ts.map +1 -1
  106. package/dist/domain/errors.js +10 -9
  107. package/dist/domain/errors.js.map +1 -1
  108. package/dist/domain/http.d.ts +7 -1
  109. package/dist/domain/http.d.ts.map +1 -1
  110. package/dist/domain/manifest.d.ts +8 -0
  111. package/dist/domain/manifest.d.ts.map +1 -1
  112. package/dist/domain/output.d.ts +3 -0
  113. package/dist/domain/output.d.ts.map +1 -0
  114. package/dist/domain/output.js +2 -0
  115. package/dist/domain/output.js.map +1 -0
  116. package/dist/domain/pages.d.ts +20 -0
  117. package/dist/domain/pages.d.ts.map +1 -0
  118. package/dist/domain/pages.js +2 -0
  119. package/dist/domain/pages.js.map +1 -0
  120. package/dist/domain/pool.d.ts +22 -0
  121. package/dist/domain/pool.d.ts.map +1 -0
  122. package/dist/domain/pool.js +2 -0
  123. package/dist/domain/pool.js.map +1 -0
  124. package/dist/domain/records.d.ts +2 -1
  125. package/dist/domain/records.d.ts.map +1 -1
  126. package/dist/domain/requests.d.ts +15 -10
  127. package/dist/domain/requests.d.ts.map +1 -1
  128. package/dist/domain/runner.d.ts +30 -0
  129. package/dist/domain/runner.d.ts.map +1 -0
  130. package/dist/domain/runner.js +2 -0
  131. package/dist/domain/runner.js.map +1 -0
  132. package/dist/domain/runs.d.ts +12 -0
  133. package/dist/domain/runs.d.ts.map +1 -0
  134. package/dist/domain/runs.js +2 -0
  135. package/dist/domain/runs.js.map +1 -0
  136. package/dist/engine/api-engine.d.ts +7 -7
  137. package/dist/engine/api-engine.d.ts.map +1 -1
  138. package/dist/engine/api-engine.js +42 -19
  139. package/dist/engine/api-engine.js.map +1 -1
  140. package/dist/engine/extractors.d.ts +2 -8
  141. package/dist/engine/extractors.d.ts.map +1 -1
  142. package/dist/engine/extractors.js +30 -11
  143. package/dist/engine/extractors.js.map +1 -1
  144. package/dist/index.d.ts +2 -2
  145. package/dist/index.d.ts.map +1 -1
  146. package/dist/manifest/destinations.d.ts +4 -0
  147. package/dist/manifest/destinations.d.ts.map +1 -0
  148. package/dist/manifest/destinations.js +47 -0
  149. package/dist/manifest/destinations.js.map +1 -0
  150. package/dist/manifest/model.d.ts +3 -2
  151. package/dist/manifest/model.d.ts.map +1 -1
  152. package/dist/manifest/model.js +6 -1
  153. package/dist/manifest/model.js.map +1 -1
  154. package/dist/manifest/provider.d.ts +10 -3
  155. package/dist/manifest/provider.d.ts.map +1 -1
  156. package/dist/manifest/provider.js +86 -34
  157. package/dist/manifest/provider.js.map +1 -1
  158. package/dist/manifest/scraper.d.ts +2 -6
  159. package/dist/manifest/scraper.d.ts.map +1 -1
  160. package/dist/manifest/scraper.js +46 -15
  161. package/dist/manifest/scraper.js.map +1 -1
  162. package/dist/output/csv-writer.d.ts.map +1 -1
  163. package/dist/output/csv-writer.js +32 -10
  164. package/dist/output/csv-writer.js.map +1 -1
  165. package/dist/output/json-writer.d.ts +1 -0
  166. package/dist/output/json-writer.d.ts.map +1 -1
  167. package/dist/output/json-writer.js +36 -11
  168. package/dist/output/json-writer.js.map +1 -1
  169. package/dist/output/lock.d.ts +2 -0
  170. package/dist/output/lock.d.ts.map +1 -0
  171. package/dist/output/lock.js +18 -0
  172. package/dist/output/lock.js.map +1 -0
  173. package/dist/output/writer.d.ts +2 -1
  174. package/dist/output/writer.d.ts.map +1 -1
  175. package/dist/output/writer.js +6 -3
  176. package/dist/output/writer.js.map +1 -1
  177. package/dist/pool/account-pool.d.ts +3 -12
  178. package/dist/pool/account-pool.d.ts.map +1 -1
  179. package/dist/pool/account-pool.js +54 -16
  180. package/dist/pool/account-pool.js.map +1 -1
  181. package/dist/pool/cooldown.d.ts +3 -7
  182. package/dist/pool/cooldown.d.ts.map +1 -1
  183. package/dist/pool/cooldown.js +10 -7
  184. package/dist/pool/cooldown.js.map +1 -1
  185. package/dist/pool/limiter.d.ts +3 -3
  186. package/dist/pool/limiter.d.ts.map +1 -1
  187. package/dist/pool/limiter.js +5 -6
  188. package/dist/pool/limiter.js.map +1 -1
  189. package/dist/query/builder.d.ts +1 -1
  190. package/dist/query/builder.d.ts.map +1 -1
  191. package/dist/query/builder.js +10 -4
  192. package/dist/query/builder.js.map +1 -1
  193. package/dist/query/collection-id.d.ts +3 -0
  194. package/dist/query/collection-id.d.ts.map +1 -0
  195. package/dist/query/collection-id.js +21 -0
  196. package/dist/query/collection-id.js.map +1 -0
  197. package/dist/query/normalize.d.ts +3 -32
  198. package/dist/query/normalize.d.ts.map +1 -1
  199. package/dist/query/normalize.js +10 -16
  200. package/dist/query/normalize.js.map +1 -1
  201. package/dist/query/targets.d.ts +2 -7
  202. package/dist/query/targets.d.ts.map +1 -1
  203. package/dist/query/targets.js.map +1 -1
  204. package/dist/query/types.d.ts +40 -0
  205. package/dist/query/types.d.ts.map +1 -0
  206. package/dist/query/types.js +2 -0
  207. package/dist/query/types.js.map +1 -0
  208. package/dist/runner/index.d.ts +3 -0
  209. package/dist/runner/index.d.ts.map +1 -1
  210. package/dist/runner/index.js.map +1 -1
  211. package/dist/runner/retry.d.ts +3 -6
  212. package/dist/runner/retry.d.ts.map +1 -1
  213. package/dist/runner/retry.js +5 -3
  214. package/dist/runner/retry.js.map +1 -1
  215. package/dist/runner/runner.d.ts +2 -14
  216. package/dist/runner/runner.d.ts.map +1 -1
  217. package/dist/runner/runner.js +11 -7
  218. package/dist/runner/runner.js.map +1 -1
  219. package/dist/runner/task-queue.d.ts +9 -11
  220. package/dist/runner/task-queue.d.ts.map +1 -1
  221. package/dist/runner/task-queue.js +79 -32
  222. package/dist/runner/task-queue.js.map +1 -1
  223. package/dist/storage/account-repository.d.ts +2 -15
  224. package/dist/storage/account-repository.d.ts.map +1 -1
  225. package/dist/storage/account-repository.js +65 -35
  226. package/dist/storage/account-repository.js.map +1 -1
  227. package/dist/storage/database.d.ts +3 -1
  228. package/dist/storage/database.d.ts.map +1 -1
  229. package/dist/storage/database.js +10 -4
  230. package/dist/storage/database.js.map +1 -1
  231. package/dist/storage/index.d.ts +3 -1
  232. package/dist/storage/index.d.ts.map +1 -1
  233. package/dist/storage/index.js +2 -0
  234. package/dist/storage/index.js.map +1 -1
  235. package/dist/storage/progress-repository.d.ts +12 -0
  236. package/dist/storage/progress-repository.d.ts.map +1 -0
  237. package/dist/storage/progress-repository.js +76 -0
  238. package/dist/storage/progress-repository.js.map +1 -0
  239. package/dist/storage/run-repository.d.ts +4 -10
  240. package/dist/storage/run-repository.d.ts.map +1 -1
  241. package/dist/storage/run-repository.js +4 -2
  242. package/dist/storage/run-repository.js.map +1 -1
  243. package/dist/storage/schema.d.ts.map +1 -1
  244. package/dist/storage/schema.js +19 -0
  245. package/dist/storage/schema.js.map +1 -1
  246. package/dist/storage/types.d.ts +15 -0
  247. package/dist/storage/types.d.ts.map +1 -0
  248. package/dist/storage/types.js +2 -0
  249. package/dist/storage/types.js.map +1 -0
  250. package/dist/transport/body.d.ts +15 -0
  251. package/dist/transport/body.d.ts.map +1 -0
  252. package/dist/transport/body.js +61 -0
  253. package/dist/transport/body.js.map +1 -0
  254. package/dist/transport/dispatcher-pool.d.ts +13 -0
  255. package/dist/transport/dispatcher-pool.d.ts.map +1 -0
  256. package/dist/transport/dispatcher-pool.js +47 -0
  257. package/dist/transport/dispatcher-pool.js.map +1 -0
  258. package/dist/transport/graphql.d.ts +1 -1
  259. package/dist/transport/graphql.d.ts.map +1 -1
  260. package/dist/transport/graphql.js +36 -19
  261. package/dist/transport/graphql.js.map +1 -1
  262. package/dist/transport/session.d.ts +8 -11
  263. package/dist/transport/session.d.ts.map +1 -1
  264. package/dist/transport/session.js +71 -26
  265. package/dist/transport/session.js.map +1 -1
  266. package/dist/transport/transaction-id.d.ts +2 -7
  267. package/dist/transport/transaction-id.d.ts.map +1 -1
  268. package/dist/transport/transaction-id.js +20 -16
  269. package/dist/transport/transaction-id.js.map +1 -1
  270. package/dist/transport/types.d.ts +28 -0
  271. package/dist/transport/types.d.ts.map +1 -0
  272. package/dist/transport/types.js +2 -0
  273. package/dist/transport/types.js.map +1 -0
  274. package/dist/utils/abort.d.ts +6 -0
  275. package/dist/utils/abort.d.ts.map +1 -0
  276. package/dist/utils/abort.js +45 -0
  277. package/dist/utils/abort.js.map +1 -0
  278. package/dist/utils/redact.d.ts +5 -0
  279. package/dist/utils/redact.d.ts.map +1 -0
  280. package/dist/utils/redact.js +42 -0
  281. package/dist/utils/redact.js.map +1 -0
  282. package/docs/architecture/overview.md +6 -4
  283. package/docs/product/specification.md +10 -9
  284. package/docs/security/data-boundary.md +3 -0
  285. package/package.json +5 -4
@@ -2,11 +2,16 @@ import { fetch as undiciFetch } from "undici";
2
2
  import { AccountSessionRuntimeError } from "../domain/errors.js";
3
3
  import { ProxyError } from "../domain/errors.js";
4
4
  import { prepareAuthMaterial } from "../auth/material.js";
5
- import { proxyDispatcher, proxyToUrl } from "./proxy.js";
5
+ import { combineSignals, isAbortError } from "../utils/abort.js";
6
+ import { cancelBody, DEFAULT_MAX_RESPONSE_BYTES, readResponseText } from "./body.js";
7
+ import { DispatcherPool } from "./dispatcher-pool.js";
8
+ import { proxyToUrl } from "./proxy.js";
6
9
  const DEFAULT_USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/122.0.0.0 Safari/537.36";
7
10
  export class SessionBuilder {
8
11
  options;
9
12
  healthyProxies = new Map();
13
+ preflights = new Map();
14
+ dispatchers = new DispatcherPool();
10
15
  constructor(options) {
11
16
  this.options = options;
12
17
  }
@@ -24,7 +29,7 @@ export class SessionBuilder {
24
29
  ...(this.options.impersonate ? { impersonate: this.options.impersonate } : {}),
25
30
  ...(this.options.httpMode ? { httpMode: this.options.httpMode } : {}),
26
31
  });
27
- return new FetchSession(material, proxy, this.options.fetcher ?? undiciFetch, this.options.userAgent ?? DEFAULT_USER_AGENT);
32
+ return new FetchSession(material, this.dispatchers.acquire(proxy), this.options.fetcher ?? undiciFetch, this.options.userAgent ?? DEFAULT_USER_AGENT);
28
33
  }
29
34
  async assertProxyHealthy(account, options) {
30
35
  const proxyUrl = proxyToUrl(account.proxy ?? this.options.defaultProxy);
@@ -32,9 +37,28 @@ export class SessionBuilder {
32
37
  return;
33
38
  if ((this.healthyProxies.get(proxyUrl) ?? 0) > Date.now() - 60_000)
34
39
  return;
35
- const dispatcher = proxyDispatcher(proxyUrl);
36
- if (!dispatcher)
40
+ const pending = this.preflights.get(proxyUrl);
41
+ if (pending)
42
+ return pending;
43
+ const work = this.runProxyPreflight(account, proxyUrl, options).finally(() => {
44
+ this.preflights.delete(proxyUrl);
45
+ });
46
+ this.preflights.set(proxyUrl, work);
47
+ return work;
48
+ }
49
+ async close() {
50
+ await this.dispatchers.close();
51
+ }
52
+ dispatcherCount() {
53
+ return this.dispatchers.size();
54
+ }
55
+ async runProxyPreflight(account, proxyUrl, options) {
56
+ const acquired = this.dispatchers.acquire(account.proxy ?? this.options.defaultProxy);
57
+ const dispatcher = acquired.dispatcher;
58
+ if (!dispatcher) {
59
+ acquired.release();
37
60
  return;
61
+ }
38
62
  const controller = new AbortController();
39
63
  const timeout = setTimeout(() => controller.abort(), options.timeoutMs);
40
64
  try {
@@ -45,10 +69,14 @@ export class SessionBuilder {
45
69
  signal: controller.signal,
46
70
  dispatcher,
47
71
  });
48
- if (response.status === 407)
49
- throw new ProxyError("Proxy authentication was rejected.", { statusCode: 407 });
50
- this.healthyProxies.set(proxyUrl, Date.now());
51
- await response.body?.cancel();
72
+ try {
73
+ if (response.status === 407)
74
+ throw new ProxyError("Proxy authentication was rejected.", { statusCode: 407 });
75
+ this.healthyProxies.set(proxyUrl, Date.now());
76
+ }
77
+ finally {
78
+ await cancelBody(response);
79
+ }
52
80
  }
53
81
  catch (error) {
54
82
  if (error instanceof ProxyError)
@@ -57,7 +85,7 @@ export class SessionBuilder {
57
85
  }
58
86
  finally {
59
87
  clearTimeout(timeout);
60
- await dispatcher.close();
88
+ acquired.release();
61
89
  }
62
90
  }
63
91
  }
@@ -67,12 +95,14 @@ class FetchSession {
67
95
  userAgent;
68
96
  cookies;
69
97
  dispatcher;
70
- constructor(material, proxy, fetcher, userAgent) {
98
+ releaseDispatcher;
99
+ constructor(material, acquired, fetcher, userAgent) {
71
100
  this.material = material;
72
101
  this.fetcher = fetcher;
73
102
  this.userAgent = userAgent;
74
103
  this.cookies = material.cookies;
75
- this.dispatcher = proxyDispatcher(proxy);
104
+ this.dispatcher = acquired.dispatcher;
105
+ this.releaseDispatcher = () => acquired.release();
76
106
  }
77
107
  async get(url, options = {}) {
78
108
  return this.request("GET", url, options);
@@ -84,8 +114,9 @@ class FetchSession {
84
114
  const target = new URL(url);
85
115
  for (const [key, value] of Object.entries(options.query ?? {}))
86
116
  target.searchParams.set(key, value);
87
- const controller = new AbortController();
88
- const timeout = options.timeoutMs ? setTimeout(() => controller.abort(), options.timeoutMs) : undefined;
117
+ const timeout = new AbortController();
118
+ const timer = options.timeoutMs ? setTimeout(() => timeout.abort(), options.timeoutMs) : undefined;
119
+ const signal = combineSignals(options.signal, options.timeoutMs ? timeout.signal : undefined);
89
120
  try {
90
121
  const headers = {
91
122
  Authorization: `Bearer ${this.material.bearerToken}`,
@@ -103,31 +134,45 @@ class FetchSession {
103
134
  method,
104
135
  headers,
105
136
  ...(method === "POST" && options.body !== undefined ? { body: JSON.stringify(options.body) } : {}),
106
- redirect: options.redirect ?? "follow",
107
- signal: controller.signal,
137
+ redirect: options.redirect ?? "manual",
138
+ ...(signal ? { signal } : {}),
108
139
  ...(this.dispatcher ? { dispatcher: this.dispatcher } : {}),
109
140
  };
110
141
  const response = await this.fetcher(target, init);
111
142
  const headersMap = Object.fromEntries(response.headers.entries());
112
- return {
113
- status: response.status,
114
- headers: headersMap,
115
- text: () => response.text(),
116
- json: () => response.json(),
117
- };
143
+ if (response.status >= 300 && response.status < 400) {
144
+ await cancelBody(response);
145
+ throw new AccountSessionRuntimeError(method === "GET" ? "http_get_failed" : "http_post_failed", "Authenticated redirects are not followed.");
146
+ }
147
+ try {
148
+ const text = await readResponseText(response, {
149
+ ...(signal ? { signal } : {}),
150
+ maxBytes: options.maxBytes ?? DEFAULT_MAX_RESPONSE_BYTES,
151
+ });
152
+ return {
153
+ status: response.status,
154
+ headers: headersMap,
155
+ text: async () => text,
156
+ json: async () => (text ? JSON.parse(text) : null),
157
+ };
158
+ }
159
+ catch (error) {
160
+ await cancelBody(response);
161
+ throw error;
162
+ }
118
163
  }
119
164
  catch (error) {
165
+ if (isAbortError(error) || error instanceof AccountSessionRuntimeError)
166
+ throw error;
120
167
  throw new AccountSessionRuntimeError(method === "GET" ? "http_get_failed" : "http_post_failed", error instanceof Error ? error.message : String(error));
121
168
  }
122
169
  finally {
123
- if (timeout)
124
- clearTimeout(timeout);
170
+ if (timer)
171
+ clearTimeout(timer);
125
172
  }
126
173
  }
127
174
  async close() {
128
- const close = this.dispatcher && "close" in this.dispatcher ? this.dispatcher.close : undefined;
129
- if (typeof close === "function")
130
- await close.call(this.dispatcher);
175
+ this.releaseDispatcher();
131
176
  }
132
177
  }
133
178
  export function cookieHeader(cookies) {
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/transport/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/transport/session.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,5 @@
1
- export interface TransactionIdSource {
2
- readonly create?: (method: string, url: string) => Promise<string | undefined>;
3
- }
4
- export interface TransactionIdOptions {
5
- readonly enabled?: boolean;
6
- readonly ttlMs?: number;
7
- }
1
+ import type { TransactionIdOptions, TransactionIdSource } from "./types.js";
2
+ export type { TransactionIdOptions, TransactionIdSource } from "./types.js";
8
3
  export declare class TransactionIdProvider {
9
4
  private readonly source?;
10
5
  private readonly options;
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-id.d.ts","sourceRoot":"","sources":["../../src/transport/transaction-id.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAC,CAAyC;gBAG3C,MAAM,CAAC,EAAE,mBAAmB,YAAA,EAC5B,OAAO,GAAE,oBAAyB;IAGxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAe5D,aAAa;YAYb,UAAU;CAezB"}
1
+ {"version":3,"file":"transaction-id.d.ts","sourceRoot":"","sources":["../../src/transport/transaction-id.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5E,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE5E,qBAAa,qBAAqB;IAO9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,MAAM,CAAC,CAAoB;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,YAAY,CAAC,CAAyC;gBAG3C,MAAM,CAAC,EAAE,mBAAmB,YAAA,EAC5B,OAAO,GAAE,oBAAyB;IAGxC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;YAe5D,aAAa;YAYb,UAAU;CA8BzB"}
@@ -1,3 +1,4 @@
1
+ import { delay } from "../utils/abort.js";
1
2
  export class TransactionIdProvider {
2
3
  source;
3
4
  options;
@@ -45,7 +46,25 @@ export class TransactionIdProvider {
45
46
  async initialize() {
46
47
  try {
47
48
  const { ClientTransaction, fetchXDocument } = await import("x-client-transaction-id");
48
- this.client = await withTimeout(fetchXDocument().then((document) => ClientTransaction.create(document)), 10_000);
49
+ // fetchXDocument cannot be cancelled. One bootstrap stays in-flight; a timeout
50
+ // abandons the wait and keeps the result if it later succeeds.
51
+ const work = fetchXDocument().then((document) => ClientTransaction.create(document));
52
+ const result = await Promise.race([
53
+ work.then((client) => ({ ok: true, client })),
54
+ delay(10_000).then(() => ({ ok: false })),
55
+ ]);
56
+ if (!result.ok) {
57
+ void work
58
+ .then((client) => {
59
+ this.client = client;
60
+ this.readyAt = Date.now();
61
+ this.retryAt = 0;
62
+ })
63
+ .catch(() => undefined);
64
+ this.retryAt = Date.now() + 5 * 60_000;
65
+ return undefined;
66
+ }
67
+ this.client = result.client;
49
68
  this.readyAt = Date.now();
50
69
  this.retryAt = 0;
51
70
  return this.client;
@@ -56,19 +75,4 @@ export class TransactionIdProvider {
56
75
  }
57
76
  }
58
77
  }
59
- async function withTimeout(value, timeoutMs) {
60
- let timer;
61
- try {
62
- return await Promise.race([
63
- value,
64
- new Promise((_resolve, reject) => {
65
- timer = setTimeout(() => reject(new Error("Transaction bootstrap timed out.")), timeoutMs);
66
- }),
67
- ]);
68
- }
69
- finally {
70
- if (timer)
71
- clearTimeout(timer);
72
- }
73
- }
74
78
  //# sourceMappingURL=transaction-id.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transaction-id.js","sourceRoot":"","sources":["../../src/transport/transaction-id.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transaction-id.js","sourceRoot":"","sources":["../../src/transport/transaction-id.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { fetch as UndiciFetch } from "undici";
2
+ import type { ProxySettings } from "../domain/accounts.js";
3
+ import type { ApiHttpMode } from "../config/types.js";
4
+ import type { SessionFactory } from "../domain/http.js";
5
+ export interface SessionBuilderOptions {
6
+ readonly bearerToken: string;
7
+ readonly defaultProxy?: string | ProxySettings;
8
+ readonly userAgent?: string;
9
+ readonly httpMode?: ApiHttpMode;
10
+ readonly impersonate?: string;
11
+ readonly fetcher?: typeof UndiciFetch;
12
+ readonly factory?: SessionFactory;
13
+ }
14
+ export interface ReadableHttpResponse {
15
+ readonly body?: {
16
+ getReader(): ReadableStreamDefaultReader<Uint8Array>;
17
+ cancel?(reason?: unknown): Promise<void>;
18
+ } | null;
19
+ text(): Promise<string>;
20
+ }
21
+ export interface TransactionIdSource {
22
+ readonly create?: (method: string, url: string) => Promise<string | undefined>;
23
+ }
24
+ export interface TransactionIdOptions {
25
+ readonly enabled?: boolean;
26
+ readonly ttlMs?: number;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,aAAa,CAAC;IAC/C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC;IAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,WAAW,CAAC;IACtC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE;QACd,SAAS,IAAI,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1C,GAAG,IAAI,CAAC;IACT,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/transport/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export declare function isAbortError(error: unknown): boolean;
2
+ export declare function abortError(message?: string): Error;
3
+ export declare function throwIfAborted(signal?: AbortSignal): void;
4
+ export declare function combineSignals(...signals: Array<AbortSignal | undefined>): AbortSignal | undefined;
5
+ export declare function delay(ms: number, signal?: AbortSignal): Promise<void>;
6
+ //# sourceMappingURL=abort.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.d.ts","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,wBAAgB,UAAU,CAAC,OAAO,SAA+B,GAAG,KAAK,CAIxE;AAED,wBAAgB,cAAc,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAEzD;AAED,wBAAgB,cAAc,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,WAAW,GAAG,SAAS,CAMlG;AAED,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB3E"}
@@ -0,0 +1,45 @@
1
+ export function isAbortError(error) {
2
+ return error instanceof Error && error.name === "AbortError";
3
+ }
4
+ export function abortError(message = "The operation was aborted.") {
5
+ const error = new Error(message);
6
+ error.name = "AbortError";
7
+ return error;
8
+ }
9
+ export function throwIfAborted(signal) {
10
+ if (signal?.aborted)
11
+ throw abortError();
12
+ }
13
+ export function combineSignals(...signals) {
14
+ const active = signals.filter((signal) => Boolean(signal));
15
+ const first = active[0];
16
+ if (!first)
17
+ return undefined;
18
+ if (active.length === 1)
19
+ return first;
20
+ return AbortSignal.any(active);
21
+ }
22
+ export async function delay(ms, signal) {
23
+ throwIfAborted(signal);
24
+ if (ms <= 0)
25
+ return;
26
+ await new Promise((resolve, reject) => {
27
+ const timer = setTimeout(() => {
28
+ signal?.removeEventListener("abort", onAbort);
29
+ resolve();
30
+ }, ms);
31
+ const onAbort = () => {
32
+ clearTimeout(timer);
33
+ reject(abortError());
34
+ };
35
+ if (!signal)
36
+ return;
37
+ if (signal.aborted) {
38
+ clearTimeout(timer);
39
+ reject(abortError());
40
+ return;
41
+ }
42
+ signal.addEventListener("abort", onAbort, { once: true });
43
+ });
44
+ }
45
+ //# sourceMappingURL=abort.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abort.js","sourceRoot":"","sources":["../../src/utils/abort.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAO,GAAG,4BAA4B;IAC/D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,GAAG,YAAY,CAAC;IAC1B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,IAAI,MAAM,EAAE,OAAO;QAAE,MAAM,UAAU,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAG,OAAuC;IACvE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU,EAAE,MAAoB;IAC1D,cAAc,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO;IACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACvB,CAAC,CAAC;QACF,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ProxySettings } from "../domain/accounts.js";
2
+ export declare function redactProxy(proxy: string | ProxySettings): string | ProxySettings;
3
+ export declare function redactText(value: string): string;
4
+ export declare function redactUnknown(value: unknown): unknown;
5
+ //# sourceMappingURL=redact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAI3D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,GAAG,aAAa,CAejF;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAUhD;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAUrD"}
@@ -0,0 +1,42 @@
1
+ const REDACTED = "[redacted]";
2
+ export function redactProxy(proxy) {
3
+ if (typeof proxy !== "string")
4
+ return {
5
+ ...proxy,
6
+ ...(proxy.username ? { username: REDACTED } : {}),
7
+ ...(proxy.password ? { password: REDACTED } : {}),
8
+ };
9
+ try {
10
+ const value = new URL(proxy.includes("://") ? proxy : `http://${proxy}`);
11
+ if (value.username)
12
+ value.username = REDACTED;
13
+ if (value.password)
14
+ value.password = REDACTED;
15
+ return value.toString();
16
+ }
17
+ catch {
18
+ return REDACTED;
19
+ }
20
+ }
21
+ export function redactText(value) {
22
+ return value
23
+ .replace(/auth_token=[^;\s&]+/giu, `auth_token=${REDACTED}`)
24
+ .replace(/\bct0=[^;\s&]+/giu, `ct0=${REDACTED}`)
25
+ .replace(/Bearer\s+[A-Za-z0-9._%~+-]+/giu, `Bearer ${REDACTED}`)
26
+ .replace(/Cookie:\s*[^\n]+/giu, `Cookie: ${REDACTED}`)
27
+ .replace(/(?:password|passwd|secret|csrf|ct0|auth_token)\s*[:=]\s*([^\s,;]+)/giu, (match, secret) => match.replace(secret, REDACTED));
28
+ }
29
+ export function redactUnknown(value) {
30
+ if (typeof value === "string")
31
+ return redactText(value);
32
+ if (Array.isArray(value))
33
+ return value.map(redactUnknown);
34
+ if (!value || typeof value !== "object")
35
+ return value;
36
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => {
37
+ if (/password|token|cookie|secret|authorization|csrf|proxy/iu.test(key))
38
+ return [key, REDACTED];
39
+ return [key, redactUnknown(child)];
40
+ }));
41
+ }
42
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/utils/redact.ts"],"names":[],"mappings":"AAEA,MAAM,QAAQ,GAAG,YAAY,CAAC;AAE9B,MAAM,UAAU,WAAW,CAAC,KAA6B;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAC3B,OAAO;YACL,GAAG,KAAK;YACR,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAClD,CAAC;IACJ,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9C,IAAI,KAAK,CAAC,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9C,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAO,KAAK;SACT,OAAO,CAAC,wBAAwB,EAAE,cAAc,QAAQ,EAAE,CAAC;SAC3D,OAAO,CAAC,mBAAmB,EAAE,OAAO,QAAQ,EAAE,CAAC;SAC/C,OAAO,CAAC,gCAAgC,EAAE,UAAU,QAAQ,EAAE,CAAC;SAC/D,OAAO,CAAC,qBAAqB,EAAE,WAAW,QAAQ,EAAE,CAAC;SACrD,OAAO,CACN,uEAAuE,EACvE,CAAC,KAAK,EAAE,MAAc,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC3D,CAAC;AACN,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACzC,IAAI,yDAAyD,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -34,13 +34,14 @@ CLI / library facade
34
34
  - `runner` coordinates bounded concurrent targets and search intervals through interfaces.
35
35
  - `client` composes concrete adapters and exposes the stable public API. Its low-level search-page
36
36
  primitive performs one pooled page request; high-level search adds scheduling, deduplication,
37
- checkpoints, output, and run statistics around that same primitive.
37
+ durable page progress, output, and run statistics around that same primitive. Public methods
38
+ accept an AbortSignal and `shutdown()` drains in-flight work.
38
39
  - `cli` parses arguments and renders results; it never implements scraping logic.
39
40
 
40
41
  ## Persistence topology
41
42
 
42
- One configured SQLite database always contains run records, resume checkpoints, and cached manifest
43
- payloads. By default it also contains accounts and leases. A caller may replace the account-state
43
+ One configured SQLite database always contains run records, resume checkpoints, accepted collection
44
+ records, and cached manifest payloads. By default it also contains accounts and leases. A caller may replace the account-state
44
45
  boundary with an `AccountStateStore`; the pool awaits either synchronous or asynchronous adapters and
45
46
  requires atomic acquire, renew, completion, and replacement semantics. SQL remains local to storage.
46
47
  Raw secrets are stored only when the caller explicitly provisions or restores them; logs and normal
@@ -53,7 +54,8 @@ projections use redaction or a token fingerprint.
53
54
  3. Remote text, manifests, and headers are data, never executable instructions.
54
55
  4. Secrets cross only the session builder and selected account-state boundary. Public inspection and
55
56
  normal maintenance projections redact them. Explicit account-state export is the sole raw-secret
56
- projection and requires caller acknowledgement.
57
+ projection and requires caller acknowledgement. Remote manifests cannot attach credentials to
58
+ unapproved origins. Authenticated requests do not follow redirects.
57
59
 
58
60
  ## Verification architecture
59
61
 
@@ -12,11 +12,11 @@ persisting progress locally, and exposing predictable typed results.
12
12
 
13
13
  ## Users and outcomes
14
14
 
15
- | User | Problem | Successful outcome |
16
- | --- | --- | --- |
17
- | TypeScript developer | Existing clients are difficult to type, test, and extend | Import a small typed API and receive stable records |
18
- | Data operator | Long reads fail when a session is cooled or a process stops | Pool accounts, retry safely, and resume from checkpoints |
19
- | Maintainer | Transport, persistence, and domain behavior become coupled | Each boundary is replaceable and covered by focused tests |
15
+ | User | Problem | Successful outcome |
16
+ | -------------------- | ----------------------------------------------------------- | --------------------------------------------------------- |
17
+ | TypeScript developer | Existing clients are difficult to type, test, and extend | Import a small typed API and receive stable records |
18
+ | Data operator | Long reads fail when a session is cooled or a process stops | Pool accounts, retry safely, and resume from checkpoints |
19
+ | Maintainer | Transport, persistence, and domain behavior become coupled | Each boundary is replaceable and covered by focused tests |
20
20
 
21
21
  ## Principal journeys
22
22
 
@@ -85,9 +85,9 @@ persisting progress locally, and exposing predictable typed results.
85
85
  - [x] Harness structural validation and context-budget evaluation pass.
86
86
  - [x] A fresh agent can identify the current work and next action from `.harness/state/` without chat history.
87
87
  - [x] A caller-owned asynchronous account store can provision, lease, complete, export, and restore
88
- account state through the public API, with deterministic contract tests.
88
+ account state through the public API, with deterministic contract tests.
89
89
  - [x] A caller can pass a search cursor, receive the next cursor, and paginate without creating run
90
- records or reading and writing the internal checkpoint store.
90
+ records or reading and writing the internal checkpoint store.
91
91
 
92
92
  ## Open decisions
93
93
 
@@ -100,5 +100,6 @@ persisting progress locally, and exposing predictable typed results.
100
100
 
101
101
  ## Immediate next action
102
102
 
103
- Add the read-only MCP server for agent-harness operation while keeping credentials out of tool
104
- results and preserving the existing account-pool limits.
103
+ Add the read-only MCP server for agent-harness operation after the recovery, cancellation, and
104
+ credential-destination bounds. Keep credentials out of tool results and preserve account-pool
105
+ limits. MCP remains a follow-on product task.
@@ -17,6 +17,9 @@
17
17
  - HTTP, HTTPS, and SOCKS5 proxies are normalized and passed to the HTTP adapter. Health checks carry
18
18
  no session cookies, and proxy credentials are redacted from inspection and diagnostics.
19
19
  - External payloads are parsed as `unknown` and narrowed before use.
20
+ - Remote manifests are untrusted. GraphQL endpoints must be HTTPS on an allowed X origin and a
21
+ read-only GraphQL path before session cookies, CSRF, or bearer tokens are attached. Authenticated
22
+ requests do not follow redirects. Tests may add synthetic origins through `allowedManifestOrigins`.
20
23
 
21
24
  ## Local state
22
25
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xtrawl",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "Scrape public X posts, profiles, followers, and following",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -62,6 +62,7 @@
62
62
  "package:check": "node scripts/package-check.mjs",
63
63
  "harness:validate": "python3 scripts/harness/validate.py",
64
64
  "harness:budget": "python3 scripts/harness/budget.py",
65
+ "bench": "npm run build && node scripts/bench.mjs",
65
66
  "prepack": "npm run build",
66
67
  "prepublishOnly": "npm run verify",
67
68
  "prepare": "husky"
@@ -76,13 +77,13 @@
76
77
  },
77
78
  "devDependencies": {
78
79
  "@eslint/js": "^10.0.1",
79
- "@types/jest": "^29.5.14",
80
- "@types/node": "^25.2.3",
80
+ "@types/jest": "^30.0.0",
81
+ "@types/node": "^26.4.0",
81
82
  "@typescript-eslint/eslint-plugin": "^8.62.1",
82
83
  "@typescript-eslint/parser": "^8.62.1",
83
84
  "eslint": "^10.6.0",
84
85
  "husky": "^9.1.7",
85
- "jest": "^29.7.0",
86
+ "jest": "^30.5.0",
86
87
  "prettier": "^3.9.4",
87
88
  "ts-jest": "^29.3.4",
88
89
  "typescript": "^5.9.3"