@crawlee/core 4.0.0-beta.4 → 4.0.0-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -5
- package/autoscaling/autoscaled_pool.d.ts +3 -5
- package/autoscaling/autoscaled_pool.d.ts.map +1 -1
- package/autoscaling/autoscaled_pool.js +3 -9
- package/autoscaling/autoscaled_pool.js.map +1 -1
- package/autoscaling/snapshotter.d.ts +3 -13
- package/autoscaling/snapshotter.d.ts.map +1 -1
- package/autoscaling/snapshotter.js +15 -29
- package/autoscaling/snapshotter.js.map +1 -1
- package/autoscaling/system_status.d.ts +0 -3
- package/autoscaling/system_status.d.ts.map +1 -1
- package/autoscaling/system_status.js +2 -3
- package/autoscaling/system_status.js.map +1 -1
- package/configuration.d.ts +5 -78
- package/configuration.d.ts.map +1 -1
- package/configuration.js +6 -102
- package/configuration.js.map +1 -1
- package/cookie_utils.d.ts +1 -1
- package/cookie_utils.d.ts.map +1 -1
- package/cookie_utils.js +8 -8
- package/cookie_utils.js.map +1 -1
- package/crawlers/context_pipeline.d.ts +71 -0
- package/crawlers/context_pipeline.d.ts.map +1 -0
- package/crawlers/context_pipeline.js +121 -0
- package/crawlers/context_pipeline.js.map +1 -0
- package/crawlers/crawler_commons.d.ts +15 -23
- package/crawlers/crawler_commons.d.ts.map +1 -1
- package/crawlers/crawler_commons.js +0 -8
- package/crawlers/crawler_commons.js.map +1 -1
- package/crawlers/error_snapshotter.d.ts +3 -2
- package/crawlers/error_snapshotter.d.ts.map +1 -1
- package/crawlers/error_snapshotter.js +2 -2
- package/crawlers/error_snapshotter.js.map +1 -1
- package/crawlers/error_tracker.d.ts +2 -1
- package/crawlers/error_tracker.d.ts.map +1 -1
- package/crawlers/error_tracker.js.map +1 -1
- package/crawlers/index.d.ts +1 -1
- package/crawlers/index.d.ts.map +1 -1
- package/crawlers/index.js +1 -1
- package/crawlers/index.js.map +1 -1
- package/crawlers/internals/types.d.ts +8 -0
- package/crawlers/internals/types.d.ts.map +1 -0
- package/crawlers/internals/types.js +2 -0
- package/crawlers/internals/types.js.map +1 -0
- package/crawlers/statistics.d.ts +15 -15
- package/crawlers/statistics.d.ts.map +1 -1
- package/crawlers/statistics.js +21 -18
- package/crawlers/statistics.js.map +1 -1
- package/enqueue_links/enqueue_links.d.ts +30 -18
- package/enqueue_links/enqueue_links.d.ts.map +1 -1
- package/enqueue_links/enqueue_links.js +41 -23
- package/enqueue_links/enqueue_links.js.map +1 -1
- package/enqueue_links/shared.d.ts +24 -7
- package/enqueue_links/shared.d.ts.map +1 -1
- package/enqueue_links/shared.js +66 -37
- package/enqueue_links/shared.js.map +1 -1
- package/errors.d.ts +18 -0
- package/errors.d.ts.map +1 -1
- package/errors.js +35 -0
- package/errors.js.map +1 -1
- package/events/event_manager.d.ts +8 -5
- package/events/event_manager.d.ts.map +1 -1
- package/events/event_manager.js +7 -9
- package/events/event_manager.js.map +1 -1
- package/events/local_event_manager.d.ts +14 -4
- package/events/local_event_manager.d.ts.map +1 -1
- package/events/local_event_manager.js +27 -39
- package/events/local_event_manager.js.map +1 -1
- package/index.d.ts +2 -1
- package/index.d.ts.map +1 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/log.d.ts +146 -2
- package/log.d.ts.map +1 -1
- package/log.js +102 -0
- package/log.js.map +1 -1
- package/package.json +6 -7
- package/proxy_configuration.d.ts +17 -94
- package/proxy_configuration.d.ts.map +1 -1
- package/proxy_configuration.js +18 -54
- package/proxy_configuration.js.map +1 -1
- package/recoverable_state.d.ts +121 -0
- package/recoverable_state.d.ts.map +1 -0
- package/recoverable_state.js +137 -0
- package/recoverable_state.js.map +1 -0
- package/request.d.ts +48 -6
- package/request.d.ts.map +1 -1
- package/request.js +62 -16
- package/request.js.map +1 -1
- package/service_locator.d.ts +130 -0
- package/service_locator.d.ts.map +1 -0
- package/service_locator.js +249 -0
- package/service_locator.js.map +1 -0
- package/session_pool/session.d.ts +9 -31
- package/session_pool/session.d.ts.map +1 -1
- package/session_pool/session.js +17 -21
- package/session_pool/session.js.map +1 -1
- package/session_pool/session_pool.d.ts +27 -54
- package/session_pool/session_pool.d.ts.map +1 -1
- package/session_pool/session_pool.js +54 -69
- package/session_pool/session_pool.js.map +1 -1
- package/storages/dataset.d.ts +53 -3
- package/storages/dataset.d.ts.map +1 -1
- package/storages/dataset.js +78 -6
- package/storages/dataset.js.map +1 -1
- package/storages/index.d.ts +2 -0
- package/storages/index.d.ts.map +1 -1
- package/storages/index.js +2 -0
- package/storages/index.js.map +1 -1
- package/storages/key_value_store.d.ts +71 -1
- package/storages/key_value_store.d.ts.map +1 -1
- package/storages/key_value_store.js +95 -12
- package/storages/key_value_store.js.map +1 -1
- package/storages/request_list.d.ts +9 -9
- package/storages/request_list.d.ts.map +1 -1
- package/storages/request_list.js +11 -8
- package/storages/request_list.js.map +1 -1
- package/storages/request_list_adapter.d.ts +58 -0
- package/storages/request_list_adapter.d.ts.map +1 -0
- package/storages/request_list_adapter.js +81 -0
- package/storages/request_list_adapter.js.map +1 -0
- package/storages/request_manager_tandem.d.ts +68 -0
- package/storages/request_manager_tandem.d.ts.map +1 -0
- package/storages/request_manager_tandem.js +124 -0
- package/storages/request_manager_tandem.js.map +1 -0
- package/storages/request_provider.d.ts +76 -9
- package/storages/request_provider.d.ts.map +1 -1
- package/storages/request_provider.js +92 -54
- package/storages/request_provider.js.map +1 -1
- package/storages/request_queue.d.ts +1 -3
- package/storages/request_queue.d.ts.map +1 -1
- package/storages/request_queue.js +2 -4
- package/storages/request_queue.js.map +1 -1
- package/storages/request_queue_v2.d.ts +3 -3
- package/storages/request_queue_v2.d.ts.map +1 -1
- package/storages/request_queue_v2.js +4 -5
- package/storages/request_queue_v2.js.map +1 -1
- package/storages/sitemap_request_list.d.ts +5 -5
- package/storages/sitemap_request_list.d.ts.map +1 -1
- package/storages/sitemap_request_list.js +8 -7
- package/storages/sitemap_request_list.js.map +1 -1
- package/storages/storage_manager.d.ts +10 -8
- package/storages/storage_manager.d.ts.map +1 -1
- package/storages/storage_manager.js +12 -22
- package/storages/storage_manager.js.map +1 -1
- package/storages/utils.d.ts.map +1 -1
- package/storages/utils.js +4 -3
- package/storages/utils.js.map +1 -1
- package/typedefs.d.ts +1 -1
- package/typedefs.d.ts.map +1 -1
- package/crawlers/crawler_extension.d.ts +0 -12
- package/crawlers/crawler_extension.d.ts.map +0 -1
- package/crawlers/crawler_extension.js +0 -14
- package/crawlers/crawler_extension.js.map +0 -1
- package/http_clients/base-http-client.d.ts +0 -134
- package/http_clients/base-http-client.d.ts.map +0 -1
- package/http_clients/base-http-client.js +0 -33
- package/http_clients/base-http-client.js.map +0 -1
- package/http_clients/form-data-like.d.ts +0 -67
- package/http_clients/form-data-like.d.ts.map +0 -1
- package/http_clients/form-data-like.js +0 -5
- package/http_clients/form-data-like.js.map +0 -1
- package/http_clients/got-scraping-http-client.d.ts +0 -15
- package/http_clients/got-scraping-http-client.d.ts.map +0 -1
- package/http_clients/got-scraping-http-client.js +0 -69
- package/http_clients/got-scraping-http-client.js.map +0 -1
- package/http_clients/index.d.ts +0 -3
- package/http_clients/index.d.ts.map +0 -1
- package/http_clients/index.js +0 -3
- package/http_clients/index.js.map +0 -1
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
|
-
import type { Log } from '@apify/log';
|
|
3
|
-
import { Configuration } from '../configuration.js';
|
|
4
2
|
import type { PersistenceOptions } from '../crawlers/statistics.js';
|
|
5
3
|
import type { EventManager } from '../events/event_manager.js';
|
|
4
|
+
import type { CrawleeLogger } from '../log.js';
|
|
6
5
|
import { KeyValueStore } from '../storages/key_value_store.js';
|
|
7
6
|
import type { SessionOptions } from './session.js';
|
|
8
7
|
import { Session } from './session.js';
|
|
@@ -34,19 +33,13 @@ export interface SessionPoolOptions {
|
|
|
34
33
|
*/
|
|
35
34
|
persistStateKey?: string;
|
|
36
35
|
/**
|
|
37
|
-
* Custom function that should return `Session` instance.
|
|
36
|
+
* Custom function that should return a `Session` instance, or a promise resolving to such instance.
|
|
38
37
|
* Any error thrown from this function will terminate the process.
|
|
39
38
|
* Function receives `SessionPool` instance as a parameter
|
|
40
39
|
*/
|
|
41
40
|
createSessionFunction?: CreateSession;
|
|
42
|
-
/**
|
|
43
|
-
* Specifies which response status codes are considered as blocked.
|
|
44
|
-
* Session connected to such request will be marked as retired.
|
|
45
|
-
* @default [401, 403, 429]
|
|
46
|
-
*/
|
|
47
|
-
blockedStatusCodes?: number[];
|
|
48
41
|
/** @internal */
|
|
49
|
-
log?:
|
|
42
|
+
log?: CrawleeLogger;
|
|
50
43
|
/**
|
|
51
44
|
* Control how and when to persist the state of the session pool.
|
|
52
45
|
*/
|
|
@@ -58,20 +51,8 @@ export interface SessionPoolOptions {
|
|
|
58
51
|
* When some session is marked as blocked, it is removed and new one is created instead (the pool never returns an unusable session).
|
|
59
52
|
* Learn more in the {@doclink guides/session-management | Session management guide}.
|
|
60
53
|
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* Session pool is already integrated into crawlers, and it can significantly improve your scraper
|
|
64
|
-
* performance with just 2 lines of code.
|
|
65
|
-
*
|
|
66
|
-
* **Example usage:**
|
|
67
|
-
*
|
|
68
|
-
* ```javascript
|
|
69
|
-
* const crawler = new CheerioCrawler({
|
|
70
|
-
* useSessionPool: true,
|
|
71
|
-
* persistCookiesPerSession: true,
|
|
72
|
-
* // ...
|
|
73
|
-
* })
|
|
74
|
-
* ```
|
|
54
|
+
* Session pool is already integrated into crawlers and is always active.
|
|
55
|
+
* All public methods are lazy-initialized — the pool initializes itself on first use.
|
|
75
56
|
*
|
|
76
57
|
* You can configure the pool with many options. See the {@link SessionPoolOptions}.
|
|
77
58
|
* Session pool is by default persisted in default {@link KeyValueStore}.
|
|
@@ -81,7 +62,7 @@ export interface SessionPoolOptions {
|
|
|
81
62
|
* **Advanced usage:**
|
|
82
63
|
*
|
|
83
64
|
* ```javascript
|
|
84
|
-
* const sessionPool =
|
|
65
|
+
* const sessionPool = new SessionPool({
|
|
85
66
|
* maxPoolSize: 25,
|
|
86
67
|
* sessionOptions:{
|
|
87
68
|
* maxAgeSecs: 10,
|
|
@@ -118,39 +99,35 @@ export interface SessionPoolOptions {
|
|
|
118
99
|
* @category Scaling
|
|
119
100
|
*/
|
|
120
101
|
export declare class SessionPool extends EventEmitter {
|
|
121
|
-
|
|
122
|
-
protected log: Log;
|
|
102
|
+
protected log: CrawleeLogger;
|
|
123
103
|
protected maxPoolSize: number;
|
|
124
104
|
protected createSessionFunction: CreateSession;
|
|
125
|
-
protected keyValueStore
|
|
105
|
+
protected keyValueStore?: KeyValueStore;
|
|
126
106
|
protected sessions: Session[];
|
|
127
107
|
protected sessionMap: Map<string, Session>;
|
|
128
108
|
protected sessionOptions: SessionOptions;
|
|
129
109
|
protected persistStateKeyValueStoreId?: string;
|
|
130
110
|
protected persistStateKey: string;
|
|
131
|
-
protected _listener
|
|
111
|
+
protected _listener?: () => Promise<void>;
|
|
132
112
|
protected events: EventManager;
|
|
133
|
-
protected readonly blockedStatusCodes: number[];
|
|
134
113
|
protected persistenceOptions: PersistenceOptions;
|
|
135
|
-
|
|
114
|
+
private initPromise?;
|
|
136
115
|
private queue;
|
|
137
|
-
|
|
138
|
-
* @internal
|
|
139
|
-
*/
|
|
140
|
-
constructor(options?: SessionPoolOptions, config?: Configuration);
|
|
116
|
+
constructor(options?: SessionPoolOptions);
|
|
141
117
|
/**
|
|
142
118
|
* Gets count of usable sessions in the pool.
|
|
143
119
|
*/
|
|
144
|
-
|
|
120
|
+
usableSessionsCount(): Promise<number>;
|
|
145
121
|
/**
|
|
146
122
|
* Gets count of retired sessions in the pool.
|
|
147
123
|
*/
|
|
148
|
-
|
|
124
|
+
retiredSessionsCount(): Promise<number>;
|
|
149
125
|
/**
|
|
150
126
|
* Starts periodic state persistence and potentially loads SessionPool state from {@link KeyValueStore}.
|
|
151
|
-
*
|
|
127
|
+
* Called automatically on first use of any public method.
|
|
152
128
|
*/
|
|
153
|
-
|
|
129
|
+
protected ensureInitialized(): Promise<void>;
|
|
130
|
+
private setupPool;
|
|
154
131
|
/**
|
|
155
132
|
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
156
133
|
* but this allows you to add more sessions once the max pool size is reached.
|
|
@@ -158,6 +135,13 @@ export declare class SessionPool extends EventEmitter {
|
|
|
158
135
|
* @param [options] The configuration options for the session being added to the session pool.
|
|
159
136
|
*/
|
|
160
137
|
addSession(options?: Session | SessionOptions): Promise<void>;
|
|
138
|
+
/**
|
|
139
|
+
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
140
|
+
* but this allows you to add more sessions once the max pool size is reached.
|
|
141
|
+
* This also allows you to add session with overridden session options (e.g. with specific session id).
|
|
142
|
+
* @param [options] The configuration options for the session being added to the session pool.
|
|
143
|
+
*/
|
|
144
|
+
newSession(sessionOptions?: SessionOptions): Promise<Session>;
|
|
161
145
|
/**
|
|
162
146
|
* Gets session.
|
|
163
147
|
* If there is space for new session, it creates and returns new session.
|
|
@@ -177,12 +161,12 @@ export declare class SessionPool extends EventEmitter {
|
|
|
177
161
|
* Returns an object representing the internal state of the `SessionPool` instance.
|
|
178
162
|
* Note that the object's fields can change in future releases.
|
|
179
163
|
*/
|
|
180
|
-
getState(): {
|
|
164
|
+
getState(): Promise<{
|
|
181
165
|
usableSessionsCount: number;
|
|
182
166
|
retiredSessionsCount: number;
|
|
183
167
|
// @ts-ignore optional peer dependency or compatibility with es2022
|
|
184
|
-
sessions: import("
|
|
185
|
-
}
|
|
168
|
+
sessions: import("@crawlee/types").SessionState[];
|
|
169
|
+
}>;
|
|
186
170
|
/**
|
|
187
171
|
* Persists the current state of the `SessionPool` into the default {@link KeyValueStore}.
|
|
188
172
|
* The state is persisted automatically in regular intervals.
|
|
@@ -194,10 +178,6 @@ export declare class SessionPool extends EventEmitter {
|
|
|
194
178
|
* This function should be called after you are done with using the `SessionPool` instance.
|
|
195
179
|
*/
|
|
196
180
|
teardown(): Promise<void>;
|
|
197
|
-
/**
|
|
198
|
-
* SessionPool should not work before initialization.
|
|
199
|
-
*/
|
|
200
|
-
protected _throwIfNotInitialized(): void;
|
|
201
181
|
/**
|
|
202
182
|
* Removes retired `Session` instances from `SessionPool`.
|
|
203
183
|
*/
|
|
@@ -220,7 +200,7 @@ export declare class SessionPool extends EventEmitter {
|
|
|
220
200
|
*/
|
|
221
201
|
protected _defaultCreateSessionFunction(sessionPool: SessionPool, options?: {
|
|
222
202
|
sessionOptions?: SessionOptions;
|
|
223
|
-
}): Session
|
|
203
|
+
}): Promise<Session>;
|
|
224
204
|
/**
|
|
225
205
|
* Creates new session and adds it to the pool.
|
|
226
206
|
* @returns Newly created `Session` instance.
|
|
@@ -240,12 +220,5 @@ export declare class SessionPool extends EventEmitter {
|
|
|
240
220
|
* If the state was persisted it loads the `SessionPool` from the persisted state.
|
|
241
221
|
*/
|
|
242
222
|
protected _maybeLoadSessionPool(): Promise<void>;
|
|
243
|
-
/**
|
|
244
|
-
* Opens a SessionPool and returns a promise resolving to an instance
|
|
245
|
-
* of the {@link SessionPool} class that is already initialized.
|
|
246
|
-
*
|
|
247
|
-
* For more details and code examples, see the {@link SessionPool} class.
|
|
248
|
-
*/
|
|
249
|
-
static open(options?: SessionPoolOptions, config?: Configuration): Promise<SessionPool>;
|
|
250
223
|
}
|
|
251
224
|
//# sourceMappingURL=session_pool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_pool.d.ts","sourceRoot":"","sources":["../../src/session_pool/session_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"session_pool.d.ts","sourceRoot":"","sources":["../../src/session_pool/session_pool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import { AsyncQueue } from '@sapphire/async-queue';
|
|
3
3
|
import ow from 'ow';
|
|
4
|
-
import {
|
|
5
|
-
import { log as defaultLog } from '../log.js';
|
|
4
|
+
import { serviceLocator } from '../service_locator.js';
|
|
6
5
|
import { KeyValueStore } from '../storages/key_value_store.js';
|
|
7
|
-
import {
|
|
6
|
+
import { MAX_POOL_SIZE, PERSIST_STATE_KEY } from './consts.js';
|
|
8
7
|
import { Session } from './session.js';
|
|
9
8
|
/**
|
|
10
9
|
* Handles the rotation, creation and persistence of user-like sessions.
|
|
@@ -12,20 +11,8 @@ import { Session } from './session.js';
|
|
|
12
11
|
* When some session is marked as blocked, it is removed and new one is created instead (the pool never returns an unusable session).
|
|
13
12
|
* Learn more in the {@doclink guides/session-management | Session management guide}.
|
|
14
13
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* Session pool is already integrated into crawlers, and it can significantly improve your scraper
|
|
18
|
-
* performance with just 2 lines of code.
|
|
19
|
-
*
|
|
20
|
-
* **Example usage:**
|
|
21
|
-
*
|
|
22
|
-
* ```javascript
|
|
23
|
-
* const crawler = new CheerioCrawler({
|
|
24
|
-
* useSessionPool: true,
|
|
25
|
-
* persistCookiesPerSession: true,
|
|
26
|
-
* // ...
|
|
27
|
-
* })
|
|
28
|
-
* ```
|
|
14
|
+
* Session pool is already integrated into crawlers and is always active.
|
|
15
|
+
* All public methods are lazy-initialized — the pool initializes itself on first use.
|
|
29
16
|
*
|
|
30
17
|
* You can configure the pool with many options. See the {@link SessionPoolOptions}.
|
|
31
18
|
* Session pool is by default persisted in default {@link KeyValueStore}.
|
|
@@ -35,7 +22,7 @@ import { Session } from './session.js';
|
|
|
35
22
|
* **Advanced usage:**
|
|
36
23
|
*
|
|
37
24
|
* ```javascript
|
|
38
|
-
* const sessionPool =
|
|
25
|
+
* const sessionPool = new SessionPool({
|
|
39
26
|
* maxPoolSize: 25,
|
|
40
27
|
* sessionOptions:{
|
|
41
28
|
* maxAgeSecs: 10,
|
|
@@ -72,7 +59,6 @@ import { Session } from './session.js';
|
|
|
72
59
|
* @category Scaling
|
|
73
60
|
*/
|
|
74
61
|
export class SessionPool extends EventEmitter {
|
|
75
|
-
config;
|
|
76
62
|
log;
|
|
77
63
|
maxPoolSize;
|
|
78
64
|
createSessionFunction;
|
|
@@ -84,32 +70,24 @@ export class SessionPool extends EventEmitter {
|
|
|
84
70
|
persistStateKey;
|
|
85
71
|
_listener;
|
|
86
72
|
events;
|
|
87
|
-
blockedStatusCodes;
|
|
88
73
|
persistenceOptions;
|
|
89
|
-
|
|
74
|
+
initPromise;
|
|
90
75
|
queue = new AsyncQueue();
|
|
91
|
-
|
|
92
|
-
* @internal
|
|
93
|
-
*/
|
|
94
|
-
constructor(options = {}, config = Configuration.getGlobalConfig()) {
|
|
76
|
+
constructor(options = {}) {
|
|
95
77
|
super();
|
|
96
|
-
this.config = config;
|
|
97
78
|
ow(options, ow.object.exactShape({
|
|
98
79
|
maxPoolSize: ow.optional.number,
|
|
99
80
|
persistStateKeyValueStoreId: ow.optional.string,
|
|
100
81
|
persistStateKey: ow.optional.string,
|
|
101
82
|
createSessionFunction: ow.optional.function,
|
|
102
83
|
sessionOptions: ow.optional.object,
|
|
103
|
-
blockedStatusCodes: ow.optional.array.ofType(ow.number),
|
|
104
84
|
log: ow.optional.object,
|
|
105
85
|
persistenceOptions: ow.optional.object,
|
|
106
86
|
}));
|
|
107
|
-
const { maxPoolSize = MAX_POOL_SIZE, persistStateKeyValueStoreId, persistStateKey = PERSIST_STATE_KEY, createSessionFunction, sessionOptions = {},
|
|
87
|
+
const { maxPoolSize = MAX_POOL_SIZE, persistStateKeyValueStoreId, persistStateKey = PERSIST_STATE_KEY, createSessionFunction, sessionOptions = {}, log = serviceLocator.getLogger(), persistenceOptions = {
|
|
108
88
|
enable: true,
|
|
109
89
|
}, } = options;
|
|
110
|
-
this.
|
|
111
|
-
this.blockedStatusCodes = blockedStatusCodes;
|
|
112
|
-
this.events = config.getEventManager();
|
|
90
|
+
this.events = serviceLocator.getEventManager();
|
|
113
91
|
this.log = log.child({ prefix: 'SessionPool' });
|
|
114
92
|
this.persistenceOptions = persistenceOptions;
|
|
115
93
|
// Pool Configuration
|
|
@@ -129,28 +107,34 @@ export class SessionPool extends EventEmitter {
|
|
|
129
107
|
/**
|
|
130
108
|
* Gets count of usable sessions in the pool.
|
|
131
109
|
*/
|
|
132
|
-
|
|
110
|
+
async usableSessionsCount() {
|
|
111
|
+
await this.ensureInitialized();
|
|
133
112
|
return this.sessions.filter((session) => session.isUsable()).length;
|
|
134
113
|
}
|
|
135
114
|
/**
|
|
136
115
|
* Gets count of retired sessions in the pool.
|
|
137
116
|
*/
|
|
138
|
-
|
|
117
|
+
async retiredSessionsCount() {
|
|
118
|
+
await this.ensureInitialized();
|
|
139
119
|
return this.sessions.filter((session) => !session.isUsable()).length;
|
|
140
120
|
}
|
|
141
121
|
/**
|
|
142
122
|
* Starts periodic state persistence and potentially loads SessionPool state from {@link KeyValueStore}.
|
|
143
|
-
*
|
|
123
|
+
* Called automatically on first use of any public method.
|
|
144
124
|
*/
|
|
145
|
-
async
|
|
146
|
-
if (this.
|
|
147
|
-
|
|
125
|
+
async ensureInitialized() {
|
|
126
|
+
if (!this.initPromise) {
|
|
127
|
+
this.initPromise = this.setupPool();
|
|
148
128
|
}
|
|
149
|
-
|
|
129
|
+
return this.initPromise;
|
|
130
|
+
}
|
|
131
|
+
async setupPool() {
|
|
150
132
|
if (!this.persistenceOptions.enable) {
|
|
151
|
-
this.isInitialized = true;
|
|
152
133
|
return;
|
|
153
134
|
}
|
|
135
|
+
this.keyValueStore = await KeyValueStore.open(this.persistStateKeyValueStoreId, {
|
|
136
|
+
config: serviceLocator.getConfiguration(),
|
|
137
|
+
});
|
|
154
138
|
if (!this.persistStateKeyValueStoreId) {
|
|
155
139
|
this.log.debug(`No 'persistStateKeyValueStoreId' options specified, this session pool's data has been saved in the KeyValueStore with the id: ${this.keyValueStore.id}`);
|
|
156
140
|
}
|
|
@@ -158,7 +142,6 @@ export class SessionPool extends EventEmitter {
|
|
|
158
142
|
await this._maybeLoadSessionPool();
|
|
159
143
|
this._listener = this.persistState.bind(this);
|
|
160
144
|
this.events.on("persistState" /* EventType.PERSIST_STATE */, this._listener);
|
|
161
|
-
this.isInitialized = true;
|
|
162
145
|
}
|
|
163
146
|
/**
|
|
164
147
|
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
@@ -167,7 +150,7 @@ export class SessionPool extends EventEmitter {
|
|
|
167
150
|
* @param [options] The configuration options for the session being added to the session pool.
|
|
168
151
|
*/
|
|
169
152
|
async addSession(options = {}) {
|
|
170
|
-
this.
|
|
153
|
+
await this.ensureInitialized();
|
|
171
154
|
const { id } = options;
|
|
172
155
|
if (id) {
|
|
173
156
|
const sessionExists = this.sessionMap.has(id);
|
|
@@ -182,6 +165,18 @@ export class SessionPool extends EventEmitter {
|
|
|
182
165
|
this.log.debug(`Adding new Session - ${newSession.id}`);
|
|
183
166
|
this._addSession(newSession);
|
|
184
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
170
|
+
* but this allows you to add more sessions once the max pool size is reached.
|
|
171
|
+
* This also allows you to add session with overridden session options (e.g. with specific session id).
|
|
172
|
+
* @param [options] The configuration options for the session being added to the session pool.
|
|
173
|
+
*/
|
|
174
|
+
async newSession(sessionOptions) {
|
|
175
|
+
await this.ensureInitialized();
|
|
176
|
+
const newSession = await this.createSessionFunction(this, { sessionOptions });
|
|
177
|
+
this._addSession(newSession);
|
|
178
|
+
return newSession;
|
|
179
|
+
}
|
|
185
180
|
/**
|
|
186
181
|
* Gets session.
|
|
187
182
|
* If there is space for new session, it creates and returns new session.
|
|
@@ -190,9 +185,9 @@ export class SessionPool extends EventEmitter {
|
|
|
190
185
|
* @param [sessionId] If provided, it returns the usable session with this id, `undefined` otherwise.
|
|
191
186
|
*/
|
|
192
187
|
async getSession(sessionId) {
|
|
188
|
+
await this.ensureInitialized();
|
|
193
189
|
await this.queue.wait();
|
|
194
190
|
try {
|
|
195
|
-
this._throwIfNotInitialized();
|
|
196
191
|
if (sessionId) {
|
|
197
192
|
const session = this.sessionMap.get(sessionId);
|
|
198
193
|
if (session && session.isUsable())
|
|
@@ -220,16 +215,18 @@ export class SessionPool extends EventEmitter {
|
|
|
220
215
|
if (!this.persistenceOptions.enable && !options?.enable) {
|
|
221
216
|
return;
|
|
222
217
|
}
|
|
218
|
+
await this.ensureInitialized();
|
|
223
219
|
await this.keyValueStore?.setValue(this.persistStateKey, null);
|
|
224
220
|
}
|
|
225
221
|
/**
|
|
226
222
|
* Returns an object representing the internal state of the `SessionPool` instance.
|
|
227
223
|
* Note that the object's fields can change in future releases.
|
|
228
224
|
*/
|
|
229
|
-
getState() {
|
|
225
|
+
async getState() {
|
|
226
|
+
await this.ensureInitialized();
|
|
230
227
|
return {
|
|
231
|
-
usableSessionsCount: this.usableSessionsCount,
|
|
232
|
-
retiredSessionsCount: this.retiredSessionsCount,
|
|
228
|
+
usableSessionsCount: await this.usableSessionsCount(),
|
|
229
|
+
retiredSessionsCount: await this.retiredSessionsCount(),
|
|
233
230
|
sessions: this.sessions.map((session) => session.getState()),
|
|
234
231
|
};
|
|
235
232
|
}
|
|
@@ -242,15 +239,16 @@ export class SessionPool extends EventEmitter {
|
|
|
242
239
|
if (!this.persistenceOptions.enable && !options?.enable) {
|
|
243
240
|
return;
|
|
244
241
|
}
|
|
242
|
+
await this.ensureInitialized();
|
|
245
243
|
this.log.debug('Persisting state', {
|
|
246
244
|
persistStateKeyValueStoreId: this.persistStateKeyValueStoreId,
|
|
247
245
|
persistStateKey: this.persistStateKey,
|
|
248
246
|
});
|
|
249
247
|
// use half the interval of `persistState` to avoid race conditions
|
|
250
|
-
const persistStateIntervalMillis =
|
|
248
|
+
const persistStateIntervalMillis = serviceLocator.getConfiguration().get('persistStateIntervalMillis');
|
|
251
249
|
const timeoutSecs = persistStateIntervalMillis / 2_000;
|
|
252
250
|
await this.keyValueStore
|
|
253
|
-
|
|
251
|
+
?.setValue(this.persistStateKey, await this.getState(), {
|
|
254
252
|
timeoutSecs,
|
|
255
253
|
doNotRetryTimeouts: true,
|
|
256
254
|
})
|
|
@@ -261,16 +259,14 @@ export class SessionPool extends EventEmitter {
|
|
|
261
259
|
* This function should be called after you are done with using the `SessionPool` instance.
|
|
262
260
|
*/
|
|
263
261
|
async teardown() {
|
|
264
|
-
|
|
262
|
+
if (!this.initPromise)
|
|
263
|
+
return;
|
|
264
|
+
await this.ensureInitialized();
|
|
265
|
+
if (this._listener) {
|
|
266
|
+
this.events.off("persistState" /* EventType.PERSIST_STATE */, this._listener);
|
|
267
|
+
}
|
|
265
268
|
await this.persistState();
|
|
266
269
|
}
|
|
267
|
-
/**
|
|
268
|
-
* SessionPool should not work before initialization.
|
|
269
|
-
*/
|
|
270
|
-
_throwIfNotInitialized() {
|
|
271
|
-
if (!this.isInitialized)
|
|
272
|
-
throw new Error('SessionPool is not initialized.');
|
|
273
|
-
}
|
|
274
270
|
/**
|
|
275
271
|
* Removes retired `Session` instances from `SessionPool`.
|
|
276
272
|
*/
|
|
@@ -304,7 +300,7 @@ export class SessionPool extends EventEmitter {
|
|
|
304
300
|
* @param [options.sessionOptions] The configuration options for the session being created.
|
|
305
301
|
* @returns New session.
|
|
306
302
|
*/
|
|
307
|
-
_defaultCreateSessionFunction(sessionPool, options = {}) {
|
|
303
|
+
async _defaultCreateSessionFunction(sessionPool, options = {}) {
|
|
308
304
|
ow(options, ow.object.exactShape({ sessionOptions: ow.optional.object }));
|
|
309
305
|
const { sessionOptions = {} } = options;
|
|
310
306
|
return new Session({
|
|
@@ -341,7 +337,7 @@ export class SessionPool extends EventEmitter {
|
|
|
341
337
|
* If the state was persisted it loads the `SessionPool` from the persisted state.
|
|
342
338
|
*/
|
|
343
339
|
async _maybeLoadSessionPool() {
|
|
344
|
-
const loadedSessionPool = await this.keyValueStore
|
|
340
|
+
const loadedSessionPool = await this.keyValueStore?.getValue(this.persistStateKey);
|
|
345
341
|
if (!loadedSessionPool)
|
|
346
342
|
return;
|
|
347
343
|
// Invalidate old sessions and load active sessions only
|
|
@@ -358,18 +354,7 @@ export class SessionPool extends EventEmitter {
|
|
|
358
354
|
this._addSession(recreatedSession);
|
|
359
355
|
}
|
|
360
356
|
}
|
|
361
|
-
this.log.debug(`${this.
|
|
362
|
-
}
|
|
363
|
-
/**
|
|
364
|
-
* Opens a SessionPool and returns a promise resolving to an instance
|
|
365
|
-
* of the {@link SessionPool} class that is already initialized.
|
|
366
|
-
*
|
|
367
|
-
* For more details and code examples, see the {@link SessionPool} class.
|
|
368
|
-
*/
|
|
369
|
-
static async open(options, config) {
|
|
370
|
-
const sessionPool = new SessionPool(options, config);
|
|
371
|
-
await sessionPool.initialize();
|
|
372
|
-
return sessionPool;
|
|
357
|
+
this.log.debug(`${this.sessions.length} active sessions loaded from KeyValueStore`);
|
|
373
358
|
}
|
|
374
359
|
}
|
|
375
360
|
//# sourceMappingURL=session_pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_pool.js","sourceRoot":"","sources":["../../src/session_pool/session_pool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"session_pool.js","sourceRoot":"","sources":["../../src/session_pool/session_pool.ts"],"names":[],"mappings":"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"}
|
package/storages/dataset.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { DatasetClient, DatasetInfo, Dictionary, StorageClient } from '@crawlee/types';
|
|
1
|
+
import type { DatasetClient, DatasetInfo, Dictionary, PaginatedList, StorageClient } from '@crawlee/types';
|
|
2
2
|
import { Configuration } from '../configuration.js';
|
|
3
|
-
import {
|
|
3
|
+
import type { CrawleeLogger } from '../log.js';
|
|
4
4
|
import type { Awaitable } from '../typedefs.js';
|
|
5
5
|
import type { StorageManagerOptions } from './storage_manager.js';
|
|
6
6
|
/** @internal */
|
|
@@ -67,6 +67,11 @@ export interface DatasetDataOptions {
|
|
|
67
67
|
skipEmpty?: boolean;
|
|
68
68
|
}
|
|
69
69
|
export interface DatasetExportOptions extends Omit<DatasetDataOptions, 'offset' | 'limit'> {
|
|
70
|
+
/**
|
|
71
|
+
* If true, includes all unique keys from all dataset items in the CSV export header.
|
|
72
|
+
* If omitted or false, only keys from the first item are used.
|
|
73
|
+
*/
|
|
74
|
+
collectAllKeys?: boolean;
|
|
70
75
|
}
|
|
71
76
|
export interface DatasetIteratorOptions extends Omit<DatasetDataOptions, 'offset' | 'limit' | 'clean' | 'skipHidden' | 'skipEmpty'> {
|
|
72
77
|
/** @internal */
|
|
@@ -145,7 +150,8 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
145
150
|
id: string;
|
|
146
151
|
name?: string;
|
|
147
152
|
client: DatasetClient<Data>;
|
|
148
|
-
|
|
153
|
+
readonly storageObject?: Record<string, unknown>;
|
|
154
|
+
log: CrawleeLogger;
|
|
149
155
|
/**
|
|
150
156
|
* @internal
|
|
151
157
|
*/
|
|
@@ -326,6 +332,49 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
326
332
|
* @param [options] An object containing extra options for `reduce()`
|
|
327
333
|
*/
|
|
328
334
|
reduce<T>(iteratee: DatasetReducer<T, Data>, memo: T, options?: DatasetIteratorOptions): Promise<T>;
|
|
335
|
+
/**
|
|
336
|
+
* Iterates over dataset items using an async generator,
|
|
337
|
+
* allowing the use of `for await...of` syntax.
|
|
338
|
+
*
|
|
339
|
+
* **Example usage:**
|
|
340
|
+
* ```javascript
|
|
341
|
+
* const dataset = await Dataset.open('my-results');
|
|
342
|
+
* for await (const item of dataset.values()) {
|
|
343
|
+
* console.log(item);
|
|
344
|
+
* }
|
|
345
|
+
* ```
|
|
346
|
+
*
|
|
347
|
+
* @param options Options for the iteration.
|
|
348
|
+
*/
|
|
349
|
+
values(options?: DatasetIteratorOptions): AsyncIterable<Data> & Promise<PaginatedList<Data>>;
|
|
350
|
+
/**
|
|
351
|
+
* Iterates over dataset entries (index-value pairs) using an async generator,
|
|
352
|
+
* allowing the use of `for await...of` syntax.
|
|
353
|
+
*
|
|
354
|
+
* **Example usage:**
|
|
355
|
+
* ```javascript
|
|
356
|
+
* const dataset = await Dataset.open('my-results');
|
|
357
|
+
* for await (const [index, item] of dataset.entries()) {
|
|
358
|
+
* console.log(`Item at ${index}: ${JSON.stringify(item)}`);
|
|
359
|
+
* }
|
|
360
|
+
* ```
|
|
361
|
+
*
|
|
362
|
+
* @param options Options for the iteration.
|
|
363
|
+
*/
|
|
364
|
+
entries(options?: DatasetIteratorOptions): AsyncIterable<[number, Data]> & Promise<PaginatedList<[number, Data]>>;
|
|
365
|
+
/**
|
|
366
|
+
* Default async iterator for the dataset, iterating over items.
|
|
367
|
+
* Allows using the dataset directly in a `for await...of` loop.
|
|
368
|
+
*
|
|
369
|
+
* **Example usage:**
|
|
370
|
+
* ```javascript
|
|
371
|
+
* const dataset = await Dataset.open('my-results');
|
|
372
|
+
* for await (const item of dataset) {
|
|
373
|
+
* console.log(item);
|
|
374
|
+
* }
|
|
375
|
+
* ```
|
|
376
|
+
*/
|
|
377
|
+
[Symbol.asyncIterator](): AsyncGenerator<Data, void, undefined>;
|
|
329
378
|
/**
|
|
330
379
|
* Removes the dataset either from the Apify cloud storage or from the local directory,
|
|
331
380
|
* depending on the mode of operation.
|
|
@@ -412,6 +461,7 @@ export interface DatasetOptions {
|
|
|
412
461
|
id: string;
|
|
413
462
|
name?: string;
|
|
414
463
|
client: StorageClient;
|
|
464
|
+
storageObject?: Record<string, unknown>;
|
|
415
465
|
}
|
|
416
466
|
export interface DatasetContent<Data> {
|
|
417
467
|
/** Total count of entries in the dataset. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/storages/dataset.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/storages/dataset.ts"],"names":[],"mappings":"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"}
|