@crawlee/core 4.0.0-beta.28 → 4.0.0-beta.280

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 (266) hide show
  1. package/README.md +15 -15
  2. package/byte-utils.d.ts +17 -0
  3. package/byte-utils.js +42 -0
  4. package/configuration.d.ts +75 -167
  5. package/configuration.js +164 -140
  6. package/debug.d.ts +36 -0
  7. package/debug.js +70 -0
  8. package/errors.d.ts +40 -19
  9. package/errors.js +52 -30
  10. package/events/{event_manager.d.ts → event-manager.d.ts} +29 -6
  11. package/events/{event_manager.js → event-manager.js} +10 -9
  12. package/events/index.d.ts +3 -3
  13. package/events/index.js +2 -3
  14. package/events/{local_event_manager.d.ts → local-event-manager.d.ts} +3 -10
  15. package/events/local-event-manager.js +101 -0
  16. package/events/system-info.d.ts +38 -0
  17. package/events/system-info.js +1 -0
  18. package/index.d.ts +9 -13
  19. package/index.js +10 -12
  20. package/internal.d.ts +8 -0
  21. package/internal.js +9 -0
  22. package/iterables.d.ts +79 -0
  23. package/iterables.js +134 -0
  24. package/log.d.ts +77 -1
  25. package/log.js +134 -1
  26. package/memory-storage/consts.d.ts +4 -0
  27. package/memory-storage/consts.js +4 -0
  28. package/memory-storage/index.d.ts +1 -0
  29. package/memory-storage/index.js +1 -0
  30. package/memory-storage/memory-storage.d.ts +43 -0
  31. package/memory-storage/memory-storage.js +158 -0
  32. package/memory-storage/resource-clients/common/base-client.d.ts +4 -0
  33. package/memory-storage/resource-clients/common/base-client.js +6 -0
  34. package/memory-storage/resource-clients/dataset.d.ts +35 -0
  35. package/memory-storage/resource-clients/dataset.js +108 -0
  36. package/memory-storage/resource-clients/key-value-store.d.ts +54 -0
  37. package/memory-storage/resource-clients/key-value-store.js +179 -0
  38. package/memory-storage/resource-clients/request-queue.d.ts +55 -0
  39. package/memory-storage/resource-clients/request-queue.js +413 -0
  40. package/memory-storage/utils.d.ts +16 -0
  41. package/memory-storage/utils.js +41 -0
  42. package/owned-or-injected.d.ts +58 -0
  43. package/owned-or-injected.js +98 -0
  44. package/package.json +23 -23
  45. package/proxy-configuration.d.ts +118 -0
  46. package/proxy-configuration.js +141 -0
  47. package/recoverable-state.d.ts +177 -0
  48. package/recoverable-state.js +268 -0
  49. package/request.d.ts +48 -101
  50. package/request.js +139 -249
  51. package/serialization.d.ts +0 -1
  52. package/serialization.js +18 -18
  53. package/{service_locator.d.ts → service-locator.d.ts} +66 -37
  54. package/service-locator.js +255 -0
  55. package/storages/batched-adds.d.ts +39 -0
  56. package/storages/batched-adds.js +81 -0
  57. package/storages/dataset.d.ts +105 -58
  58. package/storages/dataset.js +292 -151
  59. package/storages/index.d.ts +11 -12
  60. package/storages/index.js +7 -12
  61. package/storages/key-value-store-codec.d.ts +32 -0
  62. package/storages/key-value-store-codec.js +108 -0
  63. package/storages/{key_value_store.d.ts → key-value-store.d.ts} +169 -72
  64. package/storages/key-value-store.js +767 -0
  65. package/storages/request-dedup-cache.d.ts +20 -0
  66. package/storages/request-dedup-cache.js +48 -0
  67. package/storages/{request_list.d.ts → request-list.d.ts} +32 -171
  68. package/storages/{request_list.js → request-list.js} +276 -253
  69. package/storages/request-loader.d.ts +127 -0
  70. package/storages/request-loader.js +34 -0
  71. package/storages/request-manager-tandem.d.ts +82 -0
  72. package/storages/request-manager-tandem.js +200 -0
  73. package/storages/request-manager.d.ts +119 -0
  74. package/storages/request-manager.js +1 -0
  75. package/storages/{request_provider.d.ts → request-queue.d.ts} +127 -161
  76. package/storages/request-queue.js +871 -0
  77. package/storages/storage-instance-manager.d.ts +86 -0
  78. package/storages/storage-instance-manager.js +256 -0
  79. package/storages/storage-stats.d.ts +48 -0
  80. package/storages/storage-stats.js +29 -0
  81. package/storages/transaction.d.ts +270 -0
  82. package/storages/transaction.js +296 -0
  83. package/storages/utils.d.ts +59 -11
  84. package/storages/utils.js +76 -17
  85. package/system-info/cpu-info.d.ts +67 -0
  86. package/system-info/cpu-info.js +216 -0
  87. package/system-info/memory-info.d.ts +31 -0
  88. package/system-info/memory-info.js +115 -0
  89. package/system-info/ps-tree.d.ts +17 -0
  90. package/system-info/ps-tree.js +144 -0
  91. package/system-info/runtime.d.ts +14 -0
  92. package/system-info/runtime.js +80 -0
  93. package/typedefs.d.ts +0 -6
  94. package/typedefs.js +0 -1
  95. package/url.d.ts +9 -0
  96. package/url.js +11 -0
  97. package/validators.d.ts +23 -18
  98. package/validators.js +14 -18
  99. package/autoscaling/autoscaled_pool.d.ts +0 -298
  100. package/autoscaling/autoscaled_pool.d.ts.map +0 -1
  101. package/autoscaling/autoscaled_pool.js +0 -527
  102. package/autoscaling/autoscaled_pool.js.map +0 -1
  103. package/autoscaling/index.d.ts +0 -4
  104. package/autoscaling/index.d.ts.map +0 -1
  105. package/autoscaling/index.js +0 -4
  106. package/autoscaling/index.js.map +0 -1
  107. package/autoscaling/snapshotter.d.ts +0 -179
  108. package/autoscaling/snapshotter.d.ts.map +0 -1
  109. package/autoscaling/snapshotter.js +0 -279
  110. package/autoscaling/snapshotter.js.map +0 -1
  111. package/autoscaling/system_status.d.ts +0 -178
  112. package/autoscaling/system_status.d.ts.map +0 -1
  113. package/autoscaling/system_status.js +0 -168
  114. package/autoscaling/system_status.js.map +0 -1
  115. package/configuration.d.ts.map +0 -1
  116. package/configuration.js.map +0 -1
  117. package/cookie_utils.d.ts +0 -43
  118. package/cookie_utils.d.ts.map +0 -1
  119. package/cookie_utils.js +0 -111
  120. package/cookie_utils.js.map +0 -1
  121. package/crawlers/context_pipeline.d.ts +0 -61
  122. package/crawlers/context_pipeline.d.ts.map +0 -1
  123. package/crawlers/context_pipeline.js +0 -99
  124. package/crawlers/context_pipeline.js.map +0 -1
  125. package/crawlers/crawler_commons.d.ts +0 -191
  126. package/crawlers/crawler_commons.d.ts.map +0 -1
  127. package/crawlers/crawler_commons.js +0 -108
  128. package/crawlers/crawler_commons.js.map +0 -1
  129. package/crawlers/crawler_utils.d.ts +0 -10
  130. package/crawlers/crawler_utils.d.ts.map +0 -1
  131. package/crawlers/crawler_utils.js +0 -12
  132. package/crawlers/crawler_utils.js.map +0 -1
  133. package/crawlers/error_snapshotter.d.ts +0 -60
  134. package/crawlers/error_snapshotter.d.ts.map +0 -1
  135. package/crawlers/error_snapshotter.js +0 -118
  136. package/crawlers/error_snapshotter.js.map +0 -1
  137. package/crawlers/error_tracker.d.ts +0 -55
  138. package/crawlers/error_tracker.d.ts.map +0 -1
  139. package/crawlers/error_tracker.js +0 -309
  140. package/crawlers/error_tracker.js.map +0 -1
  141. package/crawlers/index.d.ts +0 -7
  142. package/crawlers/index.d.ts.map +0 -1
  143. package/crawlers/index.js +0 -7
  144. package/crawlers/index.js.map +0 -1
  145. package/crawlers/internals/types.d.ts +0 -8
  146. package/crawlers/internals/types.d.ts.map +0 -1
  147. package/crawlers/internals/types.js +0 -2
  148. package/crawlers/internals/types.js.map +0 -1
  149. package/crawlers/statistics.d.ts +0 -204
  150. package/crawlers/statistics.d.ts.map +0 -1
  151. package/crawlers/statistics.js +0 -350
  152. package/crawlers/statistics.js.map +0 -1
  153. package/enqueue_links/enqueue_links.d.ts +0 -254
  154. package/enqueue_links/enqueue_links.d.ts.map +0 -1
  155. package/enqueue_links/enqueue_links.js +0 -268
  156. package/enqueue_links/enqueue_links.js.map +0 -1
  157. package/enqueue_links/index.d.ts +0 -3
  158. package/enqueue_links/index.d.ts.map +0 -1
  159. package/enqueue_links/index.js +0 -3
  160. package/enqueue_links/index.js.map +0 -1
  161. package/enqueue_links/shared.d.ts +0 -84
  162. package/enqueue_links/shared.d.ts.map +0 -1
  163. package/enqueue_links/shared.js +0 -219
  164. package/enqueue_links/shared.js.map +0 -1
  165. package/errors.d.ts.map +0 -1
  166. package/errors.js.map +0 -1
  167. package/events/event_manager.d.ts.map +0 -1
  168. package/events/event_manager.js.map +0 -1
  169. package/events/index.d.ts.map +0 -1
  170. package/events/index.js.map +0 -1
  171. package/events/local_event_manager.d.ts.map +0 -1
  172. package/events/local_event_manager.js +0 -93
  173. package/events/local_event_manager.js.map +0 -1
  174. package/index.d.ts.map +0 -1
  175. package/index.js.map +0 -1
  176. package/log.d.ts.map +0 -1
  177. package/log.js.map +0 -1
  178. package/proxy_configuration.d.ts +0 -169
  179. package/proxy_configuration.d.ts.map +0 -1
  180. package/proxy_configuration.js +0 -247
  181. package/proxy_configuration.js.map +0 -1
  182. package/recoverable_state.d.ts +0 -122
  183. package/recoverable_state.d.ts.map +0 -1
  184. package/recoverable_state.js +0 -138
  185. package/recoverable_state.js.map +0 -1
  186. package/request.d.ts.map +0 -1
  187. package/request.js.map +0 -1
  188. package/router.d.ts +0 -134
  189. package/router.d.ts.map +0 -1
  190. package/router.js +0 -164
  191. package/router.js.map +0 -1
  192. package/serialization.d.ts.map +0 -1
  193. package/serialization.js.map +0 -1
  194. package/service_locator.d.ts.map +0 -1
  195. package/service_locator.js +0 -252
  196. package/service_locator.js.map +0 -1
  197. package/session_pool/consts.d.ts +0 -4
  198. package/session_pool/consts.d.ts.map +0 -1
  199. package/session_pool/consts.js +0 -4
  200. package/session_pool/consts.js.map +0 -1
  201. package/session_pool/errors.d.ts +0 -8
  202. package/session_pool/errors.d.ts.map +0 -1
  203. package/session_pool/errors.js +0 -12
  204. package/session_pool/errors.js.map +0 -1
  205. package/session_pool/events.d.ts +0 -3
  206. package/session_pool/events.d.ts.map +0 -1
  207. package/session_pool/events.js +0 -3
  208. package/session_pool/events.js.map +0 -1
  209. package/session_pool/index.d.ts +0 -6
  210. package/session_pool/index.d.ts.map +0 -1
  211. package/session_pool/index.js +0 -6
  212. package/session_pool/index.js.map +0 -1
  213. package/session_pool/session.d.ts +0 -186
  214. package/session_pool/session.d.ts.map +0 -1
  215. package/session_pool/session.js +0 -278
  216. package/session_pool/session.js.map +0 -1
  217. package/session_pool/session_pool.d.ts +0 -256
  218. package/session_pool/session_pool.d.ts.map +0 -1
  219. package/session_pool/session_pool.js +0 -386
  220. package/session_pool/session_pool.js.map +0 -1
  221. package/storages/access_checking.d.ts +0 -13
  222. package/storages/access_checking.d.ts.map +0 -1
  223. package/storages/access_checking.js +0 -14
  224. package/storages/access_checking.js.map +0 -1
  225. package/storages/dataset.d.ts.map +0 -1
  226. package/storages/dataset.js.map +0 -1
  227. package/storages/index.d.ts.map +0 -1
  228. package/storages/index.js.map +0 -1
  229. package/storages/key_value_store.d.ts.map +0 -1
  230. package/storages/key_value_store.js +0 -513
  231. package/storages/key_value_store.js.map +0 -1
  232. package/storages/request_list.d.ts.map +0 -1
  233. package/storages/request_list.js.map +0 -1
  234. package/storages/request_list_adapter.d.ts +0 -58
  235. package/storages/request_list_adapter.d.ts.map +0 -1
  236. package/storages/request_list_adapter.js +0 -81
  237. package/storages/request_list_adapter.js.map +0 -1
  238. package/storages/request_manager_tandem.d.ts +0 -68
  239. package/storages/request_manager_tandem.d.ts.map +0 -1
  240. package/storages/request_manager_tandem.js +0 -124
  241. package/storages/request_manager_tandem.js.map +0 -1
  242. package/storages/request_provider.d.ts.map +0 -1
  243. package/storages/request_provider.js +0 -592
  244. package/storages/request_provider.js.map +0 -1
  245. package/storages/request_queue.d.ts +0 -128
  246. package/storages/request_queue.d.ts.map +0 -1
  247. package/storages/request_queue.js +0 -320
  248. package/storages/request_queue.js.map +0 -1
  249. package/storages/request_queue_v2.d.ts +0 -87
  250. package/storages/request_queue_v2.d.ts.map +0 -1
  251. package/storages/request_queue_v2.js +0 -437
  252. package/storages/request_queue_v2.js.map +0 -1
  253. package/storages/sitemap_request_list.d.ts +0 -245
  254. package/storages/sitemap_request_list.d.ts.map +0 -1
  255. package/storages/sitemap_request_list.js +0 -431
  256. package/storages/sitemap_request_list.js.map +0 -1
  257. package/storages/storage_manager.d.ts +0 -60
  258. package/storages/storage_manager.d.ts.map +0 -1
  259. package/storages/storage_manager.js +0 -95
  260. package/storages/storage_manager.js.map +0 -1
  261. package/storages/utils.d.ts.map +0 -1
  262. package/storages/utils.js.map +0 -1
  263. package/typedefs.d.ts.map +0 -1
  264. package/typedefs.js.map +0 -1
  265. package/validators.d.ts.map +0 -1
  266. package/validators.js.map +0 -1
@@ -0,0 +1,20 @@
1
+ /**
2
+ * A fixed-size, direct-mapped cache for `uniqueKey`-based request deduplication.
3
+ *
4
+ * `RequestProvider.requestCache` only remembers the first batch of requests, so repeated
5
+ * `addRequestsBatched()` calls with overlapping URLs re-submit already-enqueued requests
6
+ * (https://github.com/apify/crawlee/issues/3120). This is a separate, cheaper cache we can populate on
7
+ * every batch: a fixed number of slots indexed by a hash of the request's cache key, storing the
8
+ * server-assigned `requestId`. Memory is capped by the slot count regardless of the working set size;
9
+ * a hash collision just overwrites a slot, causing an occasional cache miss (a harmless re-submission)
10
+ * but never a false hit — so a genuinely new request is never dropped.
11
+ *
12
+ * @internal
13
+ */
14
+ export declare class RequestDeduplicationCache {
15
+ #private;
16
+ constructor(size?: number);
17
+ get(cacheKey: string): string | null;
18
+ add(cacheKey: string, requestId: string): void;
19
+ clear(): void;
20
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * A fixed-size, direct-mapped cache for `uniqueKey`-based request deduplication.
3
+ *
4
+ * `RequestProvider.requestCache` only remembers the first batch of requests, so repeated
5
+ * `addRequestsBatched()` calls with overlapping URLs re-submit already-enqueued requests
6
+ * (https://github.com/apify/crawlee/issues/3120). This is a separate, cheaper cache we can populate on
7
+ * every batch: a fixed number of slots indexed by a hash of the request's cache key, storing the
8
+ * server-assigned `requestId`. Memory is capped by the slot count regardless of the working set size;
9
+ * a hash collision just overwrites a slot, causing an occasional cache miss (a harmless re-submission)
10
+ * but never a false hit — so a genuinely new request is never dropped.
11
+ *
12
+ * @internal
13
+ */
14
+ export class RequestDeduplicationCache {
15
+ #keys;
16
+ #ids;
17
+ #size;
18
+ // The slot count is the same for every queue, so it's a fixed default rather than a per-consumer option.
19
+ constructor(size = 1_000_000) {
20
+ this.#size = size;
21
+ this.#keys = new Array(size);
22
+ this.#ids = new Array(size);
23
+ }
24
+ get(cacheKey) {
25
+ const index = this.#indexOf(cacheKey);
26
+ return this.#keys[index] === cacheKey ? this.#ids[index] : null;
27
+ }
28
+ add(cacheKey, requestId) {
29
+ const index = this.#indexOf(cacheKey);
30
+ this.#keys[index] = cacheKey;
31
+ this.#ids[index] = requestId;
32
+ }
33
+ clear() {
34
+ this.#keys = new Array(this.#size);
35
+ this.#ids = new Array(this.#size);
36
+ }
37
+ // A cheap FNV-1a hash of the cache key — avoids pulling in a dedicated hashing dependency.
38
+ #indexOf(cacheKey) {
39
+ /* eslint-disable no-bitwise */
40
+ let hash = 0x811c9dc5;
41
+ for (let i = 0; i < cacheKey.length; i++) {
42
+ hash ^= cacheKey.charCodeAt(i);
43
+ hash = Math.imul(hash, 0x01000193);
44
+ }
45
+ return (hash >>> 0) % this.#size;
46
+ /* eslint-enable no-bitwise */
47
+ }
48
+ }
@@ -1,69 +1,14 @@
1
- import type { BaseHttpClient, Dictionary } from '@crawlee/types';
1
+ import type { BaseHttpClient } from '@crawlee/http-client';
2
+ import type { Dictionary } from '@crawlee/types';
2
3
  import type { Configuration } from '../configuration.js';
3
- import type { ProxyConfiguration } from '../proxy_configuration.js';
4
- import { type InternalSource, Request, type RequestOptions, type Source } from '../request.js';
4
+ import type { IProxyConfiguration } from '../proxy-configuration.js';
5
+ import { Request, type RequestOptions, type Source } from '../request.js';
6
+ import type { IRequestLoader, RequestLoaderStatus } from './request-loader.js';
7
+ import type { IRequestManager } from './request-manager.js';
5
8
  /** @internal */
6
9
  export declare const STATE_PERSISTENCE_KEY = "REQUEST_LIST_STATE";
7
10
  /** @internal */
8
11
  export declare const REQUESTS_PERSISTENCE_KEY = "REQUEST_LIST_REQUESTS";
9
- /**
10
- * Represents a static list of URLs to crawl.
11
- */
12
- export interface IRequestList {
13
- /**
14
- * Returns the total number of unique requests present in the list.
15
- */
16
- length(): number;
17
- /**
18
- * Returns `true` if all requests were already handled and there are no more left.
19
- */
20
- isFinished(): Promise<boolean>;
21
- /**
22
- * Resolves to `true` if the next call to {@link IRequestList.fetchNextRequest} function
23
- * would return `null`, otherwise it resolves to `false`.
24
- * Note that even if the list is empty, there might be some pending requests currently being processed.
25
- */
26
- isEmpty(): Promise<boolean>;
27
- /**
28
- * Returns number of handled requests.
29
- */
30
- handledCount(): number;
31
- /**
32
- * Persists the current state of the `IRequestList` into the default {@link KeyValueStore}.
33
- * The state is persisted automatically in regular intervals, but calling this method manually
34
- * is useful in cases where you want to have the most current state available after you pause
35
- * or stop fetching its requests. For example after you pause or abort a crawl. Or just before
36
- * a server migration.
37
- */
38
- persistState(): Promise<void>;
39
- /**
40
- * Gets the next {@link Request} to process. First, the function gets a request previously reclaimed
41
- * using the {@link RequestList.reclaimRequest} function, if there is any.
42
- * Otherwise it gets the next request from sources.
43
- *
44
- * The function's `Promise` resolves to `null` if there are no more
45
- * requests to process.
46
- */
47
- fetchNextRequest(): Promise<Request | null>;
48
- /**
49
- * Can be used to iterate over the `RequestList` instance in a `for await .. of` loop.
50
- * Provides an alternative for the repeated use of `fetchNextRequest`.
51
- */
52
- [Symbol.asyncIterator](): AsyncGenerator<Request>;
53
- /**
54
- * Reclaims request to the list if its processing failed.
55
- * The request will become available in the next `this.fetchNextRequest()`.
56
- */
57
- reclaimRequest(request: Request): Promise<void>;
58
- /**
59
- * Marks request as handled after successful processing.
60
- */
61
- markRequestHandled(request: Request): Promise<void>;
62
- /**
63
- * @internal
64
- */
65
- inProgress: Set<string>;
66
- }
67
12
  export interface RequestListOptions {
68
13
  /**
69
14
  * An array of sources of URLs for the {@link RequestList}. It can be either an array of strings,
@@ -143,7 +88,7 @@ export interface RequestListOptions {
143
88
  * Takes advantage of the internal address rotation and authentication process.
144
89
  * If undefined, the `requestsFromUrl` requests will be made without proxy.
145
90
  */
146
- proxyConfiguration?: ProxyConfiguration;
91
+ proxyConfiguration?: IProxyConfiguration;
147
92
  /**
148
93
  * Identifies the key in the default key-value store under which `RequestList` periodically stores its
149
94
  * state (i.e. which URLs were crawled and which not).
@@ -182,7 +127,8 @@ export interface RequestListOptions {
182
127
  * ```
183
128
  *
184
129
  * Note that the preferred (and simpler) way to persist the state of crawling of the `RequestList`
185
- * is to use the `stateKeyPrefix` parameter instead.
130
+ * is to use the `stateKeyPrefix` parameter instead. When both are set, a record persisted under
131
+ * {@link RequestListOptions.persistStateKey} takes precedence over this option.
186
132
  */
187
133
  state?: RequestListState;
188
134
  /**
@@ -202,7 +148,7 @@ export interface RequestListOptions {
202
148
  */
203
149
  keepDuplicateUrls?: boolean;
204
150
  /** @internal */
205
- config?: Configuration;
151
+ configuration?: Configuration;
206
152
  /**
207
153
  * The HTTP client to be used to download `requestsFromUrl` URLs.
208
154
  *
@@ -232,8 +178,8 @@ export interface RequestListOptions {
232
178
  * > In practical terms, such a combination can be useful when there is a large number of initial URLs,
233
179
  * > but more URLs would be added dynamically by the crawler.
234
180
  *
235
- * `RequestList` has an internal state where it stores information about which requests were already handled,
236
- * which are in progress and which were reclaimed. The state may be automatically persisted to the default
181
+ * `RequestList` has an internal state where it stores information about which requests were already handled
182
+ * and which are in progress. The state may be automatically persisted to the default
237
183
  * {@link KeyValueStore} by setting the `persistStateKey` option so that if the Node.js process is restarted,
238
184
  * the crawling can continue where it left off. The automated persisting is launched upon receiving the `persistState`
239
185
  * event that is periodically emitted by {@link EventManager}.
@@ -271,92 +217,40 @@ export interface RequestListOptions {
271
217
  * ```
272
218
  * @category Sources
273
219
  */
274
- export declare class RequestList implements IRequestList {
275
- private log;
220
+ export declare class RequestList implements IRequestLoader {
221
+ #private;
276
222
  /**
277
223
  * Array of all requests from all sources, in the order as they appeared in sources.
278
224
  * All requests in the array have distinct uniqueKey!
279
225
  * @internal
280
226
  */
281
- requests: (Request | RequestOptions)[];
282
- /** Index to the next item in requests array to fetch. All previous requests are either handled or in progress. */
283
- private nextIndex;
284
- /** Dictionary, key is Request.uniqueKey, value is corresponding index in the requests array. */
285
- private uniqueKeyToIndex;
227
+ readonly requests: (Request | RequestOptions)[];
286
228
  /**
287
229
  * Set of `uniqueKey`s of requests that were returned by fetchNextRequest().
288
230
  * @internal
289
231
  */
290
- inProgress: Set<string>;
291
- /**
292
- * Set of `uniqueKey`s of requests for which reclaimRequest() was called.
293
- * @internal
294
- */
295
- reclaimed: Set<string>;
296
- /**
297
- * Starts as true because until we handle the first request, the list is effectively persisted by doing nothing.
298
- * @internal
299
- */
300
- isStatePersisted: boolean;
232
+ get inProgress(): Set<string>;
301
233
  /**
302
234
  * Starts as false because we don't know yet and sources might change in the meantime (eg. download from live list).
303
235
  * @internal
304
236
  */
305
237
  areRequestsPersisted: boolean;
306
- private isLoading;
307
- private isInitialized;
308
- private persistStateKey?;
309
- private persistRequestsKey?;
310
- private initialState?;
311
- private store?;
312
- private keepDuplicateUrls;
313
- private sources;
314
- private sourcesFunction?;
315
- private proxyConfiguration?;
316
- private httpClient?;
317
238
  /**
318
239
  * To create new instance of `RequestList` we need to use `RequestList.open()` factory method.
319
240
  * @param options All `RequestList` configuration options
320
241
  * @internal
321
242
  */
322
243
  private constructor();
323
- /**
324
- * Loads all remote sources of URLs and potentially starts periodic state persistence.
325
- * This function must be called before you can start using the instance in a meaningful way.
326
- */
327
- private initialize;
328
- /**
329
- * Adds previously persisted Requests, as retrieved from the key-value store.
330
- * This needs to be done in a memory efficient way. We should update the input
331
- * to a Stream once apify-client supports streams.
332
- */
333
- protected _addPersistedRequests(persistedRequests: Buffer): Promise<void>;
334
- /**
335
- * Add Requests from both options.sources and options.sourcesFunction.
336
- * This function is called only when persisted sources were not loaded.
337
- * We need to avoid keeping both sources and requests in memory
338
- * to reduce memory footprint with very large sources.
339
- */
340
- protected _addRequestsFromSources(): Promise<void>;
341
244
  /**
342
245
  * @inheritDoc
343
246
  */
344
247
  persistState(): Promise<void>;
345
248
  /**
346
- * Unlike persistState(), this is used only internally, since the sources
347
- * are automatically persisted at RequestList initialization (if the persistRequestsKey is set),
348
- * but there's no reason to persist it again afterwards, because RequestList is immutable.
349
- */
350
- protected _persistRequests(): Promise<void>;
351
- /**
352
- * Restores RequestList state from a state object.
353
- */
354
- protected _restoreState(state?: RequestListState): void;
355
- /**
356
- * Attempts to load state and requests using the `RequestList` configuration
357
- * and returns a tuple of [state, requests] where each may be null if not loaded.
249
+ * Removes the `PERSIST_STATE` event listener registered during initialization and persists
250
+ * the current state one last time. Call this when you are done with the `RequestList` to avoid
251
+ * leaking the listener (and the requests it retains) on the shared event manager.
358
252
  */
359
- protected _loadStateAndPersistedRequests(): Promise<[RequestListState, Buffer]>;
253
+ teardown(): Promise<void>;
360
254
  /**
361
255
  * Returns an object representing the internal state of the `RequestList` instance.
362
256
  * Note that the object's fields can change in future releases.
@@ -365,11 +259,7 @@ export declare class RequestList implements IRequestList {
365
259
  /**
366
260
  * @inheritDoc
367
261
  */
368
- isEmpty(): Promise<boolean>;
369
- /**
370
- * @inheritDoc
371
- */
372
- isFinished(): Promise<boolean>;
262
+ checkReadiness(): Promise<RequestLoaderStatus>;
373
263
  /**
374
264
  * @inheritDoc
375
265
  */
@@ -378,51 +268,28 @@ export declare class RequestList implements IRequestList {
378
268
  * @inheritDoc
379
269
  */
380
270
  [Symbol.asyncIterator](): AsyncGenerator<Request<Dictionary>, void, unknown>;
381
- private ensureRequest;
382
271
  /**
383
272
  * @inheritDoc
384
273
  */
385
- markRequestHandled(request: Request): Promise<void>;
274
+ markRequestAsHandled(request: Request): Promise<void>;
386
275
  /**
387
- * @inheritDoc
388
- */
389
- reclaimRequest(request: Request): Promise<void>;
390
- /**
391
- * Adds all fetched requests from a URL from a remote resource.
392
- */
393
- protected _addFetchedRequests(source: InternalSource, fetchedRequests: RequestOptions[]): Promise<void>;
394
- protected _getPersistedState<T>(key: string): Promise<T>;
395
- /**
396
- * Fetches URLs from requestsFromUrl and returns them in format of list of requests
397
- */
398
- protected _fetchRequestsFromUrl(source: InternalSource): Promise<RequestOptions[]>;
399
- /**
400
- * Adds given request.
401
- * If the `source` parameter is a string or plain object and not an instance
402
- * of a `Request`, then the function creates a `Request` instance.
403
- */
404
- protected _addRequest(source: RequestListSource): void;
405
- /**
406
- * Helper function that validates unique key.
407
- * Throws an error if uniqueKey is not a non-empty string.
276
+ * Returns the total number of unique requests present in the `RequestList`.
408
277
  */
409
- protected _ensureUniqueKeyValid(uniqueKey: string): void;
278
+ getTotalCount(): Promise<number>;
410
279
  /**
411
- * Checks that request is not reclaimed and throws an error if so.
280
+ * Returns the number of pending requests in the `RequestList`.
412
281
  */
413
- protected _ensureInProgressAndNotReclaimed(uniqueKey: string): void;
282
+ getPendingCount(): Promise<number>;
414
283
  /**
415
- * Throws an error if request list wasn't initialized.
284
+ * Combines this list with a request manager (a {@link RequestQueue} by default) into a
285
+ * {@link RequestManagerTandem}, allowing requests to be added and reclaimed while still
286
+ * being read from this list first.
416
287
  */
417
- protected _ensureIsInitialized(): void;
418
- /**
419
- * Returns the total number of unique requests present in the `RequestList`.
420
- */
421
- length(): number;
288
+ toTandem(requestManager?: IRequestManager): Promise<IRequestManager>;
422
289
  /**
423
290
  * @inheritDoc
424
291
  */
425
- handledCount(): number;
292
+ getHandledCount(): Promise<number>;
426
293
  /**
427
294
  * Opens a request list and returns a promise resolving to an instance
428
295
  * of the {@link RequestList} class that is already initialized.
@@ -477,10 +344,6 @@ export declare class RequestList implements IRequestList {
477
344
  * options and the `sources` parameter supersedes the {@link RequestListOptions.sources} option.
478
345
  */
479
346
  static open(listNameOrOptions: string | null | RequestListOptions, sources?: RequestListSource[], options?: RequestListOptions): Promise<RequestList>;
480
- /**
481
- * @internal wraps public utility for mocking purposes
482
- */
483
- private _downloadListOfUrls;
484
347
  }
485
348
  /**
486
349
  * Represents state of a {@link RequestList}. It can be used to resume a {@link RequestList} which has been previously processed.
@@ -506,7 +369,5 @@ export interface RequestListState {
506
369
  /** Array of request keys representing those that being processed at the moment. */
507
370
  inProgress: string[];
508
371
  }
509
- type RequestListSource = string | Source;
372
+ export type RequestListSource = string | Source;
510
373
  export type RequestListSourcesFunction = () => Promise<RequestListSource[]>;
511
- export {};
512
- //# sourceMappingURL=request_list.d.ts.map