@crawlee/core 4.0.0-beta.15 → 4.0.0-beta.150

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 (287) hide show
  1. package/README.md +14 -14
  2. package/autoscaling/autoscaled_pool.d.ts +73 -177
  3. package/autoscaling/autoscaled_pool.js +182 -329
  4. package/autoscaling/concurrency_system.d.ts +268 -0
  5. package/autoscaling/concurrency_system.js +364 -0
  6. package/autoscaling/cpu_load_signal.d.ts +43 -0
  7. package/autoscaling/cpu_load_signal.js +47 -0
  8. package/autoscaling/event_loop_load_signal.d.ts +51 -0
  9. package/autoscaling/event_loop_load_signal.js +60 -0
  10. package/autoscaling/index.d.ts +6 -1
  11. package/autoscaling/index.js +6 -1
  12. package/autoscaling/load_signal.d.ts +98 -0
  13. package/autoscaling/load_signal.js +103 -0
  14. package/autoscaling/memory_load_signal.d.ts +47 -0
  15. package/autoscaling/memory_load_signal.js +106 -0
  16. package/autoscaling/snapshotter.d.ts +58 -163
  17. package/autoscaling/snapshotter.js +45 -263
  18. package/autoscaling/storage_backend_load_signal.d.ts +56 -0
  19. package/autoscaling/storage_backend_load_signal.js +73 -0
  20. package/autoscaling/system_status.d.ts +67 -89
  21. package/autoscaling/system_status.js +92 -122
  22. package/autoscaling/weighted_avg.d.ts +5 -0
  23. package/autoscaling/weighted_avg.js +14 -0
  24. package/byte_utils.d.ts +17 -0
  25. package/byte_utils.js +42 -0
  26. package/configuration.d.ts +96 -223
  27. package/configuration.js +170 -222
  28. package/cookie_utils.d.ts +3 -2
  29. package/cookie_utils.js +18 -7
  30. package/crawlers/context_pipeline.d.ts +10 -1
  31. package/crawlers/context_pipeline.js +31 -8
  32. package/crawlers/crawler_commons.d.ts +90 -126
  33. package/crawlers/crawler_commons.js +1 -108
  34. package/crawlers/error_snapshotter.d.ts +2 -5
  35. package/crawlers/error_snapshotter.js +7 -8
  36. package/crawlers/error_tracker.d.ts +0 -1
  37. package/crawlers/error_tracker.js +0 -1
  38. package/crawlers/index.d.ts +1 -3
  39. package/crawlers/index.js +0 -3
  40. package/crawlers/internals/types.d.ts +0 -1
  41. package/crawlers/internals/types.js +0 -1
  42. package/crawlers/statistics.d.ts +187 -64
  43. package/crawlers/statistics.js +354 -165
  44. package/debug.d.ts +36 -0
  45. package/debug.js +70 -0
  46. package/enqueue_links/enqueue_links.d.ts +61 -154
  47. package/enqueue_links/enqueue_links.js +40 -232
  48. package/enqueue_links/index.d.ts +0 -1
  49. package/enqueue_links/index.js +0 -1
  50. package/enqueue_links/shared.d.ts +55 -28
  51. package/enqueue_links/shared.js +116 -69
  52. package/errors.d.ts +72 -4
  53. package/errors.js +89 -5
  54. package/events/event_manager.d.ts +35 -9
  55. package/events/event_manager.js +12 -13
  56. package/events/index.d.ts +0 -1
  57. package/events/index.js +0 -1
  58. package/events/local_event_manager.d.ts +15 -3
  59. package/events/local_event_manager.js +39 -13
  60. package/http.d.ts +9 -0
  61. package/http.js +28 -0
  62. package/index.d.ts +7 -5
  63. package/index.js +8 -4
  64. package/iterables.d.ts +79 -0
  65. package/iterables.js +134 -0
  66. package/log.d.ts +77 -1
  67. package/log.js +104 -1
  68. package/memory-storage/consts.d.ts +4 -0
  69. package/memory-storage/consts.js +4 -0
  70. package/memory-storage/index.d.ts +1 -0
  71. package/memory-storage/index.js +1 -0
  72. package/memory-storage/memory-storage.d.ts +44 -0
  73. package/memory-storage/memory-storage.js +160 -0
  74. package/memory-storage/resource-clients/common/base-client.d.ts +4 -0
  75. package/memory-storage/resource-clients/common/base-client.js +6 -0
  76. package/memory-storage/resource-clients/dataset.d.ts +40 -0
  77. package/memory-storage/resource-clients/dataset.js +106 -0
  78. package/memory-storage/resource-clients/key-value-store.d.ts +63 -0
  79. package/memory-storage/resource-clients/key-value-store.js +199 -0
  80. package/memory-storage/resource-clients/request-queue.d.ts +77 -0
  81. package/memory-storage/resource-clients/request-queue.js +407 -0
  82. package/memory-storage/utils.d.ts +16 -0
  83. package/memory-storage/utils.js +41 -0
  84. package/owned_or_injected.d.ts +58 -0
  85. package/owned_or_injected.js +98 -0
  86. package/package.json +13 -12
  87. package/proxy_configuration.d.ts +22 -128
  88. package/proxy_configuration.js +32 -144
  89. package/recoverable_state.d.ts +83 -51
  90. package/recoverable_state.js +163 -72
  91. package/request.d.ts +57 -16
  92. package/request.js +130 -69
  93. package/router.d.ts +193 -21
  94. package/router.js +188 -43
  95. package/serialization.d.ts +0 -1
  96. package/serialization.js +15 -15
  97. package/service_locator.d.ts +165 -0
  98. package/service_locator.js +253 -0
  99. package/session_pool/consts.d.ts +1 -2
  100. package/session_pool/consts.js +1 -2
  101. package/session_pool/errors.d.ts +0 -1
  102. package/session_pool/errors.js +0 -1
  103. package/session_pool/fingerprint.d.ts +9 -0
  104. package/session_pool/fingerprint.js +30 -0
  105. package/session_pool/index.d.ts +0 -2
  106. package/session_pool/index.js +0 -2
  107. package/session_pool/session.d.ts +39 -89
  108. package/session_pool/session.js +102 -159
  109. package/session_pool/session_pool.d.ts +67 -91
  110. package/session_pool/session_pool.js +196 -187
  111. package/storages/batched_adds.d.ts +37 -0
  112. package/storages/batched_adds.js +73 -0
  113. package/storages/dataset.d.ts +109 -56
  114. package/storages/dataset.js +284 -149
  115. package/storages/index.d.ts +9 -9
  116. package/storages/index.js +7 -9
  117. package/storages/key_value_store.d.ts +183 -48
  118. package/storages/key_value_store.js +444 -171
  119. package/storages/key_value_store_codec.d.ts +32 -0
  120. package/storages/key_value_store_codec.js +113 -0
  121. package/storages/request_dedup_cache.d.ts +22 -0
  122. package/storages/request_dedup_cache.js +48 -0
  123. package/storages/request_list.d.ts +53 -115
  124. package/storages/request_list.js +194 -167
  125. package/storages/request_loader.d.ts +133 -0
  126. package/storages/request_loader.js +36 -0
  127. package/storages/request_manager.d.ts +109 -0
  128. package/storages/request_manager.js +1 -0
  129. package/storages/request_manager_tandem.d.ts +55 -23
  130. package/storages/request_manager_tandem.js +139 -57
  131. package/storages/request_queue.d.ts +286 -48
  132. package/storages/request_queue.js +757 -218
  133. package/storages/{sitemap_request_list.d.ts → sitemap_request_loader.d.ts} +43 -91
  134. package/storages/sitemap_request_loader.js +439 -0
  135. package/storages/storage_instance_manager.d.ts +87 -0
  136. package/storages/storage_instance_manager.js +256 -0
  137. package/storages/storage_stats.d.ts +48 -0
  138. package/storages/storage_stats.js +29 -0
  139. package/storages/throttling_request_manager.d.ts +222 -0
  140. package/storages/throttling_request_manager.js +780 -0
  141. package/storages/transaction.d.ts +252 -0
  142. package/storages/transaction.js +251 -0
  143. package/storages/utils.d.ts +59 -11
  144. package/storages/utils.js +75 -15
  145. package/system-info/cpu-info.d.ts +67 -0
  146. package/system-info/cpu-info.js +216 -0
  147. package/system-info/memory-info.d.ts +31 -0
  148. package/system-info/memory-info.js +115 -0
  149. package/system-info/ps-tree.d.ts +17 -0
  150. package/system-info/ps-tree.js +144 -0
  151. package/system-info/runtime.d.ts +14 -0
  152. package/system-info/runtime.js +80 -0
  153. package/typedefs.d.ts +0 -6
  154. package/typedefs.js +0 -1
  155. package/url.d.ts +9 -0
  156. package/url.js +11 -0
  157. package/validators.d.ts +22 -18
  158. package/validators.js +13 -18
  159. package/autoscaling/autoscaled_pool.d.ts.map +0 -1
  160. package/autoscaling/autoscaled_pool.js.map +0 -1
  161. package/autoscaling/index.d.ts.map +0 -1
  162. package/autoscaling/index.js.map +0 -1
  163. package/autoscaling/snapshotter.d.ts.map +0 -1
  164. package/autoscaling/snapshotter.js.map +0 -1
  165. package/autoscaling/system_status.d.ts.map +0 -1
  166. package/autoscaling/system_status.js.map +0 -1
  167. package/configuration.d.ts.map +0 -1
  168. package/configuration.js.map +0 -1
  169. package/cookie_utils.d.ts.map +0 -1
  170. package/cookie_utils.js.map +0 -1
  171. package/crawlers/context_pipeline.d.ts.map +0 -1
  172. package/crawlers/context_pipeline.js.map +0 -1
  173. package/crawlers/crawler_commons.d.ts.map +0 -1
  174. package/crawlers/crawler_commons.js.map +0 -1
  175. package/crawlers/crawler_utils.d.ts +0 -10
  176. package/crawlers/crawler_utils.d.ts.map +0 -1
  177. package/crawlers/crawler_utils.js +0 -12
  178. package/crawlers/crawler_utils.js.map +0 -1
  179. package/crawlers/error_snapshotter.d.ts.map +0 -1
  180. package/crawlers/error_snapshotter.js.map +0 -1
  181. package/crawlers/error_tracker.d.ts.map +0 -1
  182. package/crawlers/error_tracker.js.map +0 -1
  183. package/crawlers/index.d.ts.map +0 -1
  184. package/crawlers/index.js.map +0 -1
  185. package/crawlers/internals/types.d.ts.map +0 -1
  186. package/crawlers/internals/types.js.map +0 -1
  187. package/crawlers/statistics.d.ts.map +0 -1
  188. package/crawlers/statistics.js.map +0 -1
  189. package/enqueue_links/enqueue_links.d.ts.map +0 -1
  190. package/enqueue_links/enqueue_links.js.map +0 -1
  191. package/enqueue_links/index.d.ts.map +0 -1
  192. package/enqueue_links/index.js.map +0 -1
  193. package/enqueue_links/shared.d.ts.map +0 -1
  194. package/enqueue_links/shared.js.map +0 -1
  195. package/errors.d.ts.map +0 -1
  196. package/errors.js.map +0 -1
  197. package/events/event_manager.d.ts.map +0 -1
  198. package/events/event_manager.js.map +0 -1
  199. package/events/index.d.ts.map +0 -1
  200. package/events/index.js.map +0 -1
  201. package/events/local_event_manager.d.ts.map +0 -1
  202. package/events/local_event_manager.js.map +0 -1
  203. package/http_clients/base-http-client.d.ts +0 -140
  204. package/http_clients/base-http-client.d.ts.map +0 -1
  205. package/http_clients/base-http-client.js +0 -40
  206. package/http_clients/base-http-client.js.map +0 -1
  207. package/http_clients/form-data-like.d.ts +0 -67
  208. package/http_clients/form-data-like.d.ts.map +0 -1
  209. package/http_clients/form-data-like.js +0 -5
  210. package/http_clients/form-data-like.js.map +0 -1
  211. package/http_clients/got-scraping-http-client.d.ts +0 -20
  212. package/http_clients/got-scraping-http-client.d.ts.map +0 -1
  213. package/http_clients/got-scraping-http-client.js +0 -85
  214. package/http_clients/got-scraping-http-client.js.map +0 -1
  215. package/http_clients/index.d.ts +0 -3
  216. package/http_clients/index.d.ts.map +0 -1
  217. package/http_clients/index.js +0 -3
  218. package/http_clients/index.js.map +0 -1
  219. package/index.d.ts.map +0 -1
  220. package/index.js.map +0 -1
  221. package/log.d.ts.map +0 -1
  222. package/log.js.map +0 -1
  223. package/proxy_configuration.d.ts.map +0 -1
  224. package/proxy_configuration.js.map +0 -1
  225. package/recoverable_state.d.ts.map +0 -1
  226. package/recoverable_state.js.map +0 -1
  227. package/request.d.ts.map +0 -1
  228. package/request.js.map +0 -1
  229. package/router.d.ts.map +0 -1
  230. package/router.js.map +0 -1
  231. package/serialization.d.ts.map +0 -1
  232. package/serialization.js.map +0 -1
  233. package/session_pool/consts.d.ts.map +0 -1
  234. package/session_pool/consts.js.map +0 -1
  235. package/session_pool/errors.d.ts.map +0 -1
  236. package/session_pool/errors.js.map +0 -1
  237. package/session_pool/events.d.ts +0 -3
  238. package/session_pool/events.d.ts.map +0 -1
  239. package/session_pool/events.js +0 -3
  240. package/session_pool/events.js.map +0 -1
  241. package/session_pool/index.d.ts.map +0 -1
  242. package/session_pool/index.js.map +0 -1
  243. package/session_pool/session.d.ts.map +0 -1
  244. package/session_pool/session.js.map +0 -1
  245. package/session_pool/session_pool.d.ts.map +0 -1
  246. package/session_pool/session_pool.js.map +0 -1
  247. package/storages/access_checking.d.ts +0 -13
  248. package/storages/access_checking.d.ts.map +0 -1
  249. package/storages/access_checking.js +0 -14
  250. package/storages/access_checking.js.map +0 -1
  251. package/storages/dataset.d.ts.map +0 -1
  252. package/storages/dataset.js.map +0 -1
  253. package/storages/index.d.ts.map +0 -1
  254. package/storages/index.js.map +0 -1
  255. package/storages/key_value_store.d.ts.map +0 -1
  256. package/storages/key_value_store.js.map +0 -1
  257. package/storages/request_list.d.ts.map +0 -1
  258. package/storages/request_list.js.map +0 -1
  259. package/storages/request_list_adapter.d.ts +0 -58
  260. package/storages/request_list_adapter.d.ts.map +0 -1
  261. package/storages/request_list_adapter.js +0 -81
  262. package/storages/request_list_adapter.js.map +0 -1
  263. package/storages/request_manager_tandem.d.ts.map +0 -1
  264. package/storages/request_manager_tandem.js.map +0 -1
  265. package/storages/request_provider.d.ts +0 -371
  266. package/storages/request_provider.d.ts.map +0 -1
  267. package/storages/request_provider.js +0 -585
  268. package/storages/request_provider.js.map +0 -1
  269. package/storages/request_queue.d.ts.map +0 -1
  270. package/storages/request_queue.js.map +0 -1
  271. package/storages/request_queue_v2.d.ts +0 -87
  272. package/storages/request_queue_v2.d.ts.map +0 -1
  273. package/storages/request_queue_v2.js +0 -438
  274. package/storages/request_queue_v2.js.map +0 -1
  275. package/storages/sitemap_request_list.d.ts.map +0 -1
  276. package/storages/sitemap_request_list.js +0 -430
  277. package/storages/sitemap_request_list.js.map +0 -1
  278. package/storages/storage_manager.d.ts +0 -58
  279. package/storages/storage_manager.d.ts.map +0 -1
  280. package/storages/storage_manager.js +0 -105
  281. package/storages/storage_manager.js.map +0 -1
  282. package/storages/utils.d.ts.map +0 -1
  283. package/storages/utils.js.map +0 -1
  284. package/typedefs.d.ts.map +0 -1
  285. package/typedefs.js.map +0 -1
  286. package/validators.d.ts.map +0 -1
  287. package/validators.js.map +0 -1
@@ -1,585 +0,0 @@
1
- import { inspect } from 'node:util';
2
- import { chunkedAsyncIterable, downloadListOfUrls, getObjectType, isAsyncIterable, isIterable, peekableAsyncIterable, sleep, } from '@crawlee/utils';
3
- import ow from 'ow';
4
- import { ListDictionary, LruCache } from '@apify/datastructures';
5
- import { cryptoRandomObjectId } from '@apify/utilities';
6
- import { Configuration } from '../configuration.js';
7
- import { log } from '../log.js';
8
- import { Request } from '../request.js';
9
- import { checkStorageAccess } from './access_checking.js';
10
- import { StorageManager } from './storage_manager.js';
11
- import { getRequestId, purgeDefaultStorages, QUERY_HEAD_MIN_LENGTH } from './utils.js';
12
- export class RequestProvider {
13
- config;
14
- id;
15
- name;
16
- timeoutSecs = 30;
17
- clientKey = cryptoRandomObjectId();
18
- client;
19
- proxyConfiguration;
20
- log;
21
- internalTimeoutMillis = 5 * 60_000; // defaults to 5 minutes, will be overridden by BasicCrawler
22
- requestLockSecs = 3 * 60; // defaults to 3 minutes, will be overridden by BasicCrawler
23
- // We can trust these numbers only in a case that queue is used by a single client.
24
- // This information is returned by getHead() under the hadMultipleClients property.
25
- assumedTotalCount = 0;
26
- assumedHandledCount = 0;
27
- initialCount = 0;
28
- initialHandledCount = 0; // We track this separately from `assumedHandledCount` which is used non-trivially by RequestQueueV1
29
- queueHeadIds = new ListDictionary();
30
- requestCache;
31
- recentlyHandledRequestsCache;
32
- queuePausedForMigration = false;
33
- lastActivity = new Date();
34
- isFinishedCalledWhileHeadWasNotEmpty = 0;
35
- inProgressRequestBatchCount = 0;
36
- constructor(options, config = Configuration.getGlobalConfig()) {
37
- this.config = config;
38
- this.id = options.id;
39
- this.name = options.name;
40
- this.client = options.client.requestQueue(this.id, {
41
- clientKey: this.clientKey,
42
- timeoutSecs: this.timeoutSecs,
43
- });
44
- this.proxyConfiguration = options.proxyConfiguration;
45
- this.requestCache = new LruCache({ maxLength: options.requestCacheMaxSize });
46
- this.recentlyHandledRequestsCache = new LruCache({ maxLength: options.recentlyHandledRequestsMaxSize });
47
- this.log = log.child({ prefix: `${options.logPrefix}(${this.id}, ${this.name ?? 'no-name'})` });
48
- const eventManager = config.getEventManager();
49
- eventManager.on("migrating" /* EventType.MIGRATING */, async () => {
50
- this.queuePausedForMigration = true;
51
- });
52
- }
53
- /**
54
- * Returns an offline approximation of the total number of requests in the queue (i.e. pending + handled).
55
- *
56
- * Survives restarts and actor migrations.
57
- */
58
- getTotalCount() {
59
- return this.assumedTotalCount + this.initialCount;
60
- }
61
- /**
62
- * Returns an offline approximation of the total number of pending requests in the queue.
63
- *
64
- * Survives restarts and Actor migrations.
65
- */
66
- getPendingCount() {
67
- return this.getTotalCount() - this.initialHandledCount - this.assumedHandledCount;
68
- }
69
- /**
70
- * Adds a request to the queue.
71
- *
72
- * If a request with the same `uniqueKey` property is already present in the queue,
73
- * it will not be updated. You can find out whether this happened from the resulting
74
- * {@link QueueOperationInfo} object.
75
- *
76
- * To add multiple requests to the queue by extracting links from a webpage,
77
- * see the {@link enqueueLinks} helper function.
78
- *
79
- * @param requestLike {@link Request} object or vanilla object with request data.
80
- * Note that the function sets the `uniqueKey` and `id` fields to the passed Request.
81
- * @param [options] Request queue operation options.
82
- */
83
- async addRequest(requestLike, options = {}) {
84
- checkStorageAccess();
85
- this.lastActivity = new Date();
86
- ow(requestLike, ow.object);
87
- ow(options, ow.object.exactShape({
88
- forefront: ow.optional.boolean,
89
- }));
90
- const { forefront = false } = options;
91
- if ('requestsFromUrl' in requestLike) {
92
- const requests = await this._fetchRequestsFromUrl(requestLike);
93
- const processedRequests = await this._addFetchedRequests(requestLike, requests, options);
94
- return { ...processedRequests[0], forefront };
95
- }
96
- ow(requestLike, ow.object.partialShape({
97
- url: ow.string,
98
- id: ow.undefined,
99
- }));
100
- const request = requestLike instanceof Request ? requestLike : new Request(requestLike);
101
- const cacheKey = getRequestId(request.uniqueKey);
102
- const cachedInfo = this.requestCache.get(cacheKey);
103
- if (cachedInfo) {
104
- request.id = cachedInfo.id;
105
- return {
106
- wasAlreadyPresent: true,
107
- // We may assume that if request is in local cache then also the information if the
108
- // request was already handled is there because just one client should be using one queue.
109
- wasAlreadyHandled: cachedInfo.isHandled,
110
- requestId: cachedInfo.id,
111
- uniqueKey: cachedInfo.uniqueKey,
112
- forefront,
113
- };
114
- }
115
- const queueOperationInfo = {
116
- ...(await this.client.addRequest(request, { forefront })),
117
- uniqueKey: request.uniqueKey,
118
- forefront,
119
- };
120
- const { requestId, wasAlreadyPresent } = queueOperationInfo;
121
- this._cacheRequest(cacheKey, queueOperationInfo);
122
- if (!wasAlreadyPresent && !this.recentlyHandledRequestsCache.get(requestId)) {
123
- this.assumedTotalCount++;
124
- // Performance optimization: add request straight to head if possible
125
- this._maybeAddRequestToQueueHead(requestId, forefront);
126
- }
127
- return queueOperationInfo;
128
- }
129
- /**
130
- * Adds requests to the queue in batches of 25. This method will wait till all the requests are added
131
- * to the queue before resolving. You should prefer using `queue.addRequestsBatched()` or `crawler.addRequests()`
132
- * if you don't want to block the processing, as those methods will only wait for the initial 1000 requests,
133
- * start processing right after that happens, and continue adding more in the background.
134
- *
135
- * If a request passed in is already present due to its `uniqueKey` property being the same,
136
- * it will not be updated. You can find out whether this happened by finding the request in the resulting
137
- * {@link BatchAddRequestsResult} object.
138
- *
139
- * @param requestsLike {@link Request} objects or vanilla objects with request data.
140
- * Note that the function sets the `uniqueKey` and `id` fields to the passed requests if missing.
141
- * @param [options] Request queue operation options.
142
- */
143
- async addRequests(requestsLike, options = {}) {
144
- checkStorageAccess();
145
- this.lastActivity = new Date();
146
- ow(requestsLike, ow.object
147
- .is((value) => isIterable(value) || isAsyncIterable(value))
148
- .message((value) => `Expected an iterable or async iterable, got ${getObjectType(value)}`));
149
- ow(options, ow.object.exactShape({
150
- forefront: ow.optional.boolean,
151
- cache: ow.optional.boolean,
152
- }));
153
- const { forefront = false, cache = true } = options;
154
- const uniqueKeyToCacheKey = new Map();
155
- const getCachedRequestId = (uniqueKey) => {
156
- const cached = uniqueKeyToCacheKey.get(uniqueKey);
157
- if (cached)
158
- return cached;
159
- const newCacheKey = getRequestId(uniqueKey);
160
- uniqueKeyToCacheKey.set(uniqueKey, newCacheKey);
161
- return newCacheKey;
162
- };
163
- const results = {
164
- processedRequests: [],
165
- unprocessedRequests: [],
166
- };
167
- const requests = [];
168
- for await (const requestLike of requestsLike) {
169
- if (typeof requestLike === 'string') {
170
- requests.push(new Request({ url: requestLike }));
171
- }
172
- else if ('requestsFromUrl' in requestLike) {
173
- const fetchedRequests = await this._fetchRequestsFromUrl(requestLike);
174
- await this._addFetchedRequests(requestLike, fetchedRequests, options);
175
- }
176
- else {
177
- requests.push(requestLike instanceof Request ? requestLike : new Request(requestLike));
178
- }
179
- }
180
- const requestsToAdd = new Map();
181
- for (const request of requests) {
182
- const cacheKey = getCachedRequestId(request.uniqueKey);
183
- const cachedInfo = this.requestCache.get(cacheKey);
184
- if (cachedInfo) {
185
- request.id = cachedInfo.id;
186
- results.processedRequests.push({
187
- wasAlreadyPresent: true,
188
- // We may assume that if request is in local cache then also the information if the
189
- // request was already handled is there because just one client should be using one queue.
190
- wasAlreadyHandled: cachedInfo.isHandled,
191
- requestId: cachedInfo.id,
192
- uniqueKey: cachedInfo.uniqueKey,
193
- });
194
- }
195
- else if (!requestsToAdd.has(request.uniqueKey)) {
196
- requestsToAdd.set(request.uniqueKey, request);
197
- }
198
- }
199
- // Early exit if all provided requests were already added
200
- if (!requestsToAdd.size) {
201
- return results;
202
- }
203
- const apiResults = await this.client.batchAddRequests([...requestsToAdd.values()], { forefront });
204
- // Report unprocessed requests
205
- results.unprocessedRequests = apiResults.unprocessedRequests;
206
- // Add all new requests to the requestCache
207
- for (const newRequest of apiResults.processedRequests) {
208
- // Add the new request to the processed list
209
- results.processedRequests.push(newRequest);
210
- const cacheKey = getCachedRequestId(newRequest.uniqueKey);
211
- const { requestId, wasAlreadyPresent } = newRequest;
212
- if (cache) {
213
- this._cacheRequest(cacheKey, { ...newRequest, forefront });
214
- }
215
- if (!wasAlreadyPresent && !this.recentlyHandledRequestsCache.get(requestId)) {
216
- this.assumedTotalCount++;
217
- // Performance optimization: add request straight to head if possible
218
- this._maybeAddRequestToQueueHead(requestId, forefront);
219
- }
220
- }
221
- return results;
222
- }
223
- /**
224
- * Adds requests to the queue in batches. By default, it will resolve after the initial batch is added, and continue
225
- * adding the rest in the background. You can configure the batch size via `batchSize` option and the sleep time in between
226
- * the batches via `waitBetweenBatchesMillis`. If you want to wait for all batches to be added to the queue, you can use
227
- * the `waitForAllRequestsToBeAdded` promise you get in the response object.
228
- *
229
- * @param requests The requests to add
230
- * @param options Options for the request queue
231
- */
232
- async addRequestsBatched(requests, options = {}) {
233
- checkStorageAccess();
234
- this.lastActivity = new Date();
235
- ow(requests, ow.object
236
- .is((value) => isIterable(value) || isAsyncIterable(value))
237
- .message((value) => `Expected an iterable or async iterable, got ${getObjectType(value)}`));
238
- ow(options, ow.object.exactShape({
239
- forefront: ow.optional.boolean,
240
- waitForAllRequestsToBeAdded: ow.optional.boolean,
241
- batchSize: ow.optional.number,
242
- waitBetweenBatchesMillis: ow.optional.number,
243
- }));
244
- const addRequest = this.addRequest.bind(this);
245
- async function* generateRequests() {
246
- for await (const opts of requests) {
247
- // Validate the input
248
- if (typeof opts === 'object' && opts !== null) {
249
- if (opts.url !== undefined && typeof opts.url !== 'string') {
250
- throw new Error(`Request options are not valid, the 'url' property is not a string. Input: ${inspect(opts)}`);
251
- }
252
- if (opts.id !== undefined) {
253
- throw new Error(`Request options are not valid, the 'id' property must not be present. Input: ${inspect(opts)}`);
254
- }
255
- if (opts.requestsFromUrl !== undefined &&
256
- typeof opts.requestsFromUrl !== 'string') {
257
- throw new Error(`Request options are not valid, the 'requestsFromUrl' property is not a string. Input: ${inspect(opts)}`);
258
- }
259
- }
260
- if (opts && typeof opts === 'object' && 'requestsFromUrl' in opts) {
261
- // Handle URL lists right away
262
- await addRequest(opts, { forefront: options.forefront });
263
- }
264
- else {
265
- // Yield valid requests
266
- yield typeof opts === 'string' ? { url: opts } : opts;
267
- }
268
- }
269
- }
270
- const { batchSize = 1000, waitBetweenBatchesMillis = 1000 } = options;
271
- const chunks = peekableAsyncIterable(chunkedAsyncIterable(generateRequests(), batchSize));
272
- const chunksIterator = chunks[Symbol.asyncIterator]();
273
- const attemptToAddToQueueAndAddAnyUnprocessed = async (providedRequests, cache = true) => {
274
- const resultsToReturn = [];
275
- const apiResult = await this.addRequests(providedRequests, { forefront: options.forefront, cache });
276
- resultsToReturn.push(...apiResult.processedRequests);
277
- if (apiResult.unprocessedRequests.length) {
278
- await sleep(waitBetweenBatchesMillis);
279
- resultsToReturn.push(...(await attemptToAddToQueueAndAddAnyUnprocessed(providedRequests.filter((r) => !apiResult.processedRequests.some((pr) => pr.uniqueKey === r.uniqueKey)), false)));
280
- }
281
- return resultsToReturn;
282
- };
283
- // Add initial batch of `batchSize` to process them right away
284
- const initialChunk = await chunksIterator.peek();
285
- if (initialChunk === undefined) {
286
- return { addedRequests: [], waitForAllRequestsToBeAdded: Promise.resolve([]) };
287
- }
288
- const addedRequests = await attemptToAddToQueueAndAddAnyUnprocessed(initialChunk);
289
- await chunksIterator.next();
290
- // If we have no more requests to add, return immediately
291
- if ((await chunksIterator.peek()) === undefined) {
292
- return {
293
- addedRequests,
294
- waitForAllRequestsToBeAdded: Promise.resolve([]),
295
- };
296
- }
297
- // eslint-disable-next-line no-async-promise-executor
298
- const promise = new Promise(async (resolve) => {
299
- const finalAddedRequests = [];
300
- for await (const requestChunk of chunks) {
301
- finalAddedRequests.push(...(await attemptToAddToQueueAndAddAnyUnprocessed(requestChunk, false)));
302
- await sleep(waitBetweenBatchesMillis);
303
- }
304
- resolve(finalAddedRequests);
305
- });
306
- this.inProgressRequestBatchCount += 1;
307
- void promise.finally(() => {
308
- this.inProgressRequestBatchCount -= 1;
309
- });
310
- // If the user wants to wait for all the requests to be added, we wait for the promise to resolve for them
311
- if (options.waitForAllRequestsToBeAdded) {
312
- addedRequests.push(...(await promise));
313
- }
314
- return {
315
- addedRequests,
316
- waitForAllRequestsToBeAdded: promise,
317
- };
318
- }
319
- /**
320
- * Gets the request from the queue specified by ID.
321
- *
322
- * @param id ID of the request.
323
- * @returns Returns the request object, or `null` if it was not found.
324
- */
325
- async getRequest(id) {
326
- checkStorageAccess();
327
- ow(id, ow.string);
328
- const requestOptions = await this.client.getRequest(id);
329
- if (!requestOptions)
330
- return null;
331
- return new Request(requestOptions);
332
- }
333
- /**
334
- * Marks a request that was previously returned by the
335
- * {@link RequestQueue.fetchNextRequest}
336
- * function as handled after successful processing.
337
- * Handled requests will never again be returned by the `fetchNextRequest` function.
338
- */
339
- async markRequestHandled(request) {
340
- checkStorageAccess();
341
- this.lastActivity = new Date();
342
- ow(request, ow.object.partialShape({
343
- id: ow.string,
344
- uniqueKey: ow.string,
345
- handledAt: ow.optional.string,
346
- }));
347
- const forefront = this.requestCache.get(getRequestId(request.uniqueKey))?.forefront ?? false;
348
- const handledAt = request.handledAt ?? new Date().toISOString();
349
- const queueOperationInfo = {
350
- ...(await this.client.updateRequest({
351
- ...request,
352
- handledAt,
353
- })),
354
- uniqueKey: request.uniqueKey,
355
- forefront,
356
- };
357
- request.handledAt = handledAt;
358
- this.recentlyHandledRequestsCache.add(request.id, true);
359
- if (!queueOperationInfo.wasAlreadyHandled) {
360
- this.assumedHandledCount++;
361
- }
362
- this.queueHeadIds.remove(request.id);
363
- this._cacheRequest(getRequestId(request.uniqueKey), queueOperationInfo);
364
- return queueOperationInfo;
365
- }
366
- /**
367
- * Reclaims a failed request back to the queue, so that it can be returned for processing later again
368
- * by another call to {@link RequestQueue.fetchNextRequest}.
369
- * The request record in the queue is updated using the provided `request` parameter.
370
- * For example, this lets you store the number of retries or error messages for the request.
371
- */
372
- async reclaimRequest(request, options = {}) {
373
- checkStorageAccess();
374
- this.lastActivity = new Date();
375
- ow(request, ow.object.partialShape({
376
- id: ow.string,
377
- uniqueKey: ow.string,
378
- }));
379
- ow(options, ow.object.exactShape({
380
- forefront: ow.optional.boolean,
381
- }));
382
- const { forefront = false } = options;
383
- // TODO: If request hasn't been changed since the last getRequest(),
384
- // we don't need to call updateRequest() and thus improve performance.
385
- const queueOperationInfo = {
386
- ...(await this.client.updateRequest(request, {
387
- forefront,
388
- })),
389
- uniqueKey: request.uniqueKey,
390
- forefront,
391
- };
392
- this._cacheRequest(getRequestId(request.uniqueKey), queueOperationInfo);
393
- return queueOperationInfo;
394
- }
395
- /**
396
- * Resolves to `true` if the next call to {@link RequestQueue.fetchNextRequest}
397
- * would return `null`, otherwise it resolves to `false`.
398
- * Note that even if the queue is empty, there might be some pending requests currently being processed.
399
- * If you need to ensure that there is no activity in the queue, use {@link RequestQueue.isFinished}.
400
- */
401
- async isEmpty() {
402
- await this.ensureHeadIsNonEmpty();
403
- return this.queueHeadIds.length() === 0;
404
- }
405
- _reset() {
406
- this.lastActivity = new Date();
407
- this.queueHeadIds.clear();
408
- this.recentlyHandledRequestsCache.clear();
409
- this.assumedTotalCount = 0;
410
- this.assumedHandledCount = 0;
411
- this.requestCache.clear();
412
- }
413
- /**
414
- * Caches information about request to beware of unneeded addRequest() calls.
415
- */
416
- _cacheRequest(cacheKey, queueOperationInfo) {
417
- // Remove the previous entry, as otherwise our cache will never update 👀
418
- this.requestCache.remove(cacheKey);
419
- this.requestCache.add(cacheKey, {
420
- id: queueOperationInfo.requestId,
421
- isHandled: queueOperationInfo.wasAlreadyHandled,
422
- uniqueKey: queueOperationInfo.uniqueKey,
423
- hydrated: null,
424
- lockExpiresAt: null,
425
- forefront: queueOperationInfo.forefront,
426
- });
427
- }
428
- /**
429
- * Adds a request straight to the queueHeadDict, to improve performance.
430
- */
431
- _maybeAddRequestToQueueHead(requestId, forefront) {
432
- if (forefront) {
433
- this.queueHeadIds.add(requestId, requestId, true);
434
- }
435
- else if (this.assumedTotalCount < QUERY_HEAD_MIN_LENGTH) {
436
- this.queueHeadIds.add(requestId, requestId, false);
437
- }
438
- }
439
- /**
440
- * Removes the queue either from the Apify Cloud storage or from the local database,
441
- * depending on the mode of operation.
442
- */
443
- async drop() {
444
- checkStorageAccess();
445
- await this.client.delete();
446
- const manager = StorageManager.getManager(this.constructor, this.config);
447
- manager.closeStorage(this);
448
- }
449
- /**
450
- * @inheritdoc
451
- */
452
- async *[Symbol.asyncIterator]() {
453
- while (true) {
454
- const req = await this.fetchNextRequest();
455
- if (!req)
456
- break;
457
- yield req;
458
- }
459
- }
460
- /**
461
- * Returns the number of handled requests.
462
- *
463
- * This function is just a convenient shortcut for:
464
- *
465
- * ```javascript
466
- * const { handledRequestCount } = await queue.getInfo();
467
- * ```
468
- * @inheritdoc
469
- */
470
- async handledCount() {
471
- // NOTE: We keep this function for compatibility with RequestList.handledCount()
472
- const { handledRequestCount } = (await this.getInfo()) ?? {};
473
- return handledRequestCount ?? 0;
474
- }
475
- /**
476
- * Returns an object containing general information about the request queue.
477
- *
478
- * The function returns the same object as the Apify API Client's
479
- * [getQueue](https://docs.apify.com/api/apify-client-js/latest#ApifyClient-requestQueues)
480
- * function, which in turn calls the
481
- * [Get request queue](https://apify.com/docs/api/v2#/reference/request-queues/queue/get-request-queue)
482
- * API endpoint.
483
- *
484
- * **Example:**
485
- * ```
486
- * {
487
- * id: "WkzbQMuFYuamGv3YF",
488
- * name: "my-queue",
489
- * userId: "wRsJZtadYvn4mBZmm",
490
- * createdAt: new Date("2015-12-12T07:34:14.202Z"),
491
- * modifiedAt: new Date("2015-12-13T08:36:13.202Z"),
492
- * accessedAt: new Date("2015-12-14T08:36:13.202Z"),
493
- * totalRequestCount: 25,
494
- * handledRequestCount: 5,
495
- * pendingRequestCount: 20,
496
- * }
497
- * ```
498
- */
499
- async getInfo() {
500
- checkStorageAccess();
501
- return this.client.get();
502
- }
503
- /**
504
- * Fetches URLs from requestsFromUrl and returns them in format of list of requests
505
- */
506
- async _fetchRequestsFromUrl(source) {
507
- const { requestsFromUrl, regex, ...sharedOpts } = source;
508
- // Download remote resource and parse URLs.
509
- let urlsArr;
510
- try {
511
- urlsArr = await this._downloadListOfUrls({
512
- url: requestsFromUrl,
513
- urlRegExp: regex,
514
- proxyUrl: await this.proxyConfiguration?.newUrl(),
515
- });
516
- }
517
- catch (err) {
518
- throw new Error(`Cannot fetch a request list from ${requestsFromUrl}: ${err}`);
519
- }
520
- // Skip if resource contained no URLs.
521
- if (!urlsArr.length) {
522
- this.log.warning('The fetched list contains no valid URLs.', { requestsFromUrl, regex });
523
- return [];
524
- }
525
- return urlsArr.map((url) => ({ url, ...sharedOpts }));
526
- }
527
- /**
528
- * Adds all fetched requests from a URL from a remote resource.
529
- */
530
- async _addFetchedRequests(source, fetchedRequests, options) {
531
- const { requestsFromUrl, regex } = source;
532
- const { addedRequests } = await this.addRequestsBatched(fetchedRequests, options);
533
- this.log.info('Fetched and loaded Requests from a remote resource.', {
534
- requestsFromUrl,
535
- regex,
536
- fetchedCount: fetchedRequests.length,
537
- importedCount: addedRequests.length,
538
- duplicateCount: fetchedRequests.length - addedRequests.length,
539
- sample: JSON.stringify(fetchedRequests.slice(0, 5)),
540
- });
541
- return addedRequests;
542
- }
543
- /**
544
- * @internal wraps public utility for mocking purposes
545
- */
546
- async _downloadListOfUrls(options) {
547
- return downloadListOfUrls(options);
548
- }
549
- /**
550
- * Opens a request queue and returns a promise resolving to an instance
551
- * of the {@link RequestQueue} class.
552
- *
553
- * {@link RequestQueue} represents a queue of URLs to crawl, which is stored either on local filesystem or in the cloud.
554
- * The queue is used for deep crawling of websites, where you start with several URLs and then
555
- * recursively follow links to other pages. The data structure supports both breadth-first
556
- * and depth-first crawling orders.
557
- *
558
- * For more details and code examples, see the {@link RequestQueue} class.
559
- *
560
- * @param [queueIdOrName]
561
- * ID or name of the request queue to be opened. If `null` or `undefined`,
562
- * the function returns the default request queue associated with the crawler run.
563
- * @param [options] Open Request Queue options.
564
- */
565
- static async open(queueIdOrName, options = {}) {
566
- checkStorageAccess();
567
- ow(queueIdOrName, ow.optional.any(ow.string, ow.null));
568
- ow(options, ow.object.exactShape({
569
- config: ow.optional.object.instanceOf(Configuration),
570
- storageClient: ow.optional.object,
571
- proxyConfiguration: ow.optional.object,
572
- }));
573
- options.config ??= Configuration.getGlobalConfig();
574
- options.storageClient ??= options.config.getStorageClient();
575
- await purgeDefaultStorages({ onlyPurgeOnce: true, client: options.storageClient, config: options.config });
576
- const manager = StorageManager.getManager(this, options.config);
577
- const queue = await manager.openStorage(queueIdOrName, options.storageClient);
578
- queue.proxyConfiguration = options.proxyConfiguration;
579
- const queueInfo = await queue.client.get();
580
- queue.initialCount = queueInfo?.totalRequestCount ?? 0;
581
- queue.initialHandledCount = queueInfo?.handledRequestCount ?? 0;
582
- return queue;
583
- }
584
- }
585
- //# sourceMappingURL=request_provider.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request_provider.js","sourceRoot":"","sources":["../../src/storages/request_provider.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request_queue.d.ts","sourceRoot":"","sources":["../../src/storages/request_queue.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,KAAK,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAmBxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,cAAM,YAAa,SAAQ,eAAe;IACtC,OAAO,CAAC,qBAAqB,CAAC,CAMb;IAEjB,OAAO,CAAC,UAAU,CAAqB;IAEvC;;OAEG;gBACS,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAkC;IAYrF;;OAEG;IACI,eAAe,IAAI,MAAM;IAIhC;;;;;;;;;;;;;;;;OAgBG;IACY,gBAAgB,CAAC,CAAC,SAAS,UAAU,GAAG,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;cAgEvE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAK9D;;;;;;;;;;OAUG;cACa,qBAAqB,CACjC,iBAAiB,UAAQ,EACzB,KAAK,SAA8E,EACnF,SAAS,SAAI,GACd,OAAO,CAAC,OAAO,CAAC;IAmGJ,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;IAqB7C;;;;;OAKG;IACY,cAAc,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC;IA2BpF;;OAEG;IACY,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC;cAQ3E,MAAM,IAAI,IAAI;IAMjC;;;;;;;;;;;;;;;OAeG;WACmB,IAAI,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;CAGtG;AAED,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request_queue.js","sourceRoot":"","sources":["../../src/storages/request_queue.ts"],"names":[],"mappings":"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"}