@crawlee/core 4.0.0-beta.6 → 4.0.0-beta.60
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 +18 -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 +85 -227
- package/configuration.d.ts.map +1 -1
- package/configuration.js +159 -223
- package/configuration.js.map +1 -1
- package/cookie_utils.d.ts +4 -2
- package/cookie_utils.d.ts.map +1 -1
- package/cookie_utils.js +18 -12
- 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 +123 -0
- package/crawlers/context_pipeline.js.map +1 -0
- package/crawlers/crawler_commons.d.ts +19 -28
- package/crawlers/crawler_commons.d.ts.map +1 -1
- package/crawlers/crawler_commons.js +12 -20
- package/crawlers/crawler_commons.js.map +1 -1
- package/crawlers/crawler_utils.d.ts +2 -2
- package/crawlers/crawler_utils.d.ts.map +1 -1
- package/crawlers/crawler_utils.js +1 -1
- package/crawlers/crawler_utils.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 +32 -18
- package/enqueue_links/enqueue_links.d.ts.map +1 -1
- package/enqueue_links/enqueue_links.js +45 -24
- package/enqueue_links/enqueue_links.js.map +1 -1
- package/enqueue_links/shared.d.ts +25 -8
- package/enqueue_links/shared.d.ts.map +1 -1
- package/enqueue_links/shared.js +69 -37
- package/enqueue_links/shared.js.map +1 -1
- package/errors.d.ts +33 -3
- package/errors.d.ts.map +1 -1
- package/errors.js +48 -4
- 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 +33 -39
- package/events/local_event_manager.js.map +1 -1
- package/index.d.ts +3 -2
- package/index.d.ts.map +1 -1
- package/index.js +2 -1
- package/index.js.map +1 -1
- package/log.d.ts +82 -2
- package/log.d.ts.map +1 -1
- package/log.js +102 -0
- package/log.js.map +1 -1
- package/package.json +9 -10
- package/proxy_configuration.d.ts +14 -148
- package/proxy_configuration.d.ts.map +1 -1
- package/proxy_configuration.js +19 -167
- 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 +142 -0
- package/recoverable_state.js.map +1 -0
- package/request.d.ts +74 -10
- package/request.d.ts.map +1 -1
- package/request.js +85 -23
- package/request.js.map +1 -1
- package/router.d.ts.map +1 -1
- package/router.js.map +1 -1
- package/serialization.js +1 -1
- package/serialization.js.map +1 -1
- package/service_locator.d.ts +157 -0
- package/service_locator.d.ts.map +1 -0
- package/service_locator.js +234 -0
- package/service_locator.js.map +1 -0
- package/session_pool/index.d.ts +0 -1
- package/session_pool/index.d.ts.map +1 -1
- package/session_pool/index.js +0 -1
- package/session_pool/index.js.map +1 -1
- package/session_pool/session.d.ts +26 -72
- package/session_pool/session.d.ts.map +1 -1
- package/session_pool/session.js +36 -98
- package/session_pool/session.js.map +1 -1
- package/session_pool/session_pool.d.ts +65 -71
- package/session_pool/session_pool.d.ts.map +1 -1
- package/session_pool/session_pool.js +102 -95
- package/session_pool/session_pool.js.map +1 -1
- package/storages/dataset.d.ts +64 -19
- package/storages/dataset.d.ts.map +1 -1
- package/storages/dataset.js +92 -25
- package/storages/dataset.js.map +1 -1
- package/storages/index.d.ts +3 -1
- package/storages/index.d.ts.map +1 -1
- package/storages/index.js +3 -1
- package/storages/index.js.map +1 -1
- package/storages/key_value_store.d.ts +80 -10
- package/storages/key_value_store.d.ts.map +1 -1
- package/storages/key_value_store.js +110 -26
- 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 +13 -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 +87 -22
- package/storages/request_provider.d.ts.map +1 -1
- package/storages/request_provider.js +126 -76
- 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 +10 -7
- package/storages/sitemap_request_list.js.map +1 -1
- package/storages/storage_instance_manager.d.ts +91 -0
- package/storages/storage_instance_manager.d.ts.map +1 -0
- package/storages/storage_instance_manager.js +236 -0
- package/storages/storage_instance_manager.js.map +1 -0
- package/storages/utils.d.ts +25 -1
- package/storages/utils.d.ts.map +1 -1
- package/storages/utils.js +6 -5
- package/storages/utils.js.map +1 -1
- package/typedefs.d.ts +1 -1
- package/typedefs.d.ts.map +1 -1
- package/validators.d.ts +4 -0
- package/validators.d.ts.map +1 -1
- package/validators.js +4 -0
- package/validators.js.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/session_pool/events.d.ts +0 -3
- package/session_pool/events.d.ts.map +0 -1
- package/session_pool/events.js +0 -3
- package/session_pool/events.js.map +0 -1
- package/storages/storage_manager.d.ts +0 -58
- package/storages/storage_manager.d.ts.map +0 -1
- package/storages/storage_manager.js +0 -105
- package/storages/storage_manager.js.map +0 -1
- package/tsconfig.build.tsbuildinfo +0 -1
|
@@ -1,31 +1,18 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
1
|
import { AsyncQueue } from '@sapphire/async-queue';
|
|
3
2
|
import ow from 'ow';
|
|
4
|
-
import {
|
|
5
|
-
import { log as defaultLog } from '../log.js';
|
|
3
|
+
import { serviceLocator } from '../service_locator.js';
|
|
6
4
|
import { KeyValueStore } from '../storages/key_value_store.js';
|
|
7
|
-
import {
|
|
5
|
+
import { MAX_POOL_SIZE, PERSIST_STATE_KEY } from './consts.js';
|
|
8
6
|
import { Session } from './session.js';
|
|
7
|
+
const SESSION_REUSE_STRATEGIES = ['random', 'round-robin', 'use-until-failure'];
|
|
9
8
|
/**
|
|
10
9
|
* Handles the rotation, creation and persistence of user-like sessions.
|
|
11
10
|
* Creates a pool of {@link Session} instances, that are randomly rotated.
|
|
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,
|
|
@@ -71,8 +58,9 @@ import { Session } from './session.js';
|
|
|
71
58
|
*
|
|
72
59
|
* @category Scaling
|
|
73
60
|
*/
|
|
74
|
-
export class SessionPool
|
|
75
|
-
|
|
61
|
+
export class SessionPool {
|
|
62
|
+
static nextId = 0;
|
|
63
|
+
id;
|
|
76
64
|
log;
|
|
77
65
|
maxPoolSize;
|
|
78
66
|
createSessionFunction;
|
|
@@ -84,73 +72,76 @@ export class SessionPool extends EventEmitter {
|
|
|
84
72
|
persistStateKey;
|
|
85
73
|
_listener;
|
|
86
74
|
events;
|
|
87
|
-
blockedStatusCodes;
|
|
88
75
|
persistenceOptions;
|
|
89
|
-
|
|
76
|
+
sessionReuseStrategy;
|
|
77
|
+
initPromise;
|
|
90
78
|
queue = new AsyncQueue();
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
*/
|
|
94
|
-
constructor(options = {}, config = Configuration.getGlobalConfig()) {
|
|
95
|
-
super();
|
|
96
|
-
this.config = config;
|
|
79
|
+
roundRobinIndex = 0;
|
|
80
|
+
constructor(options = {}) {
|
|
97
81
|
ow(options, ow.object.exactShape({
|
|
82
|
+
id: ow.optional.any(ow.number, ow.string),
|
|
98
83
|
maxPoolSize: ow.optional.number,
|
|
99
84
|
persistStateKeyValueStoreId: ow.optional.string,
|
|
100
85
|
persistStateKey: ow.optional.string,
|
|
101
86
|
createSessionFunction: ow.optional.function,
|
|
102
87
|
sessionOptions: ow.optional.object,
|
|
103
|
-
blockedStatusCodes: ow.optional.array.ofType(ow.number),
|
|
104
88
|
log: ow.optional.object,
|
|
105
89
|
persistenceOptions: ow.optional.object,
|
|
90
|
+
sessionReuseStrategy: ow.optional.string.oneOf([...SESSION_REUSE_STRATEGIES]),
|
|
106
91
|
}));
|
|
107
|
-
const { maxPoolSize = MAX_POOL_SIZE, persistStateKeyValueStoreId, persistStateKey
|
|
92
|
+
const { id, maxPoolSize = MAX_POOL_SIZE, persistStateKeyValueStoreId, persistStateKey, createSessionFunction, sessionOptions = {}, log = serviceLocator.getLogger(), persistenceOptions = {
|
|
108
93
|
enable: true,
|
|
109
|
-
}, } = options;
|
|
110
|
-
this.
|
|
111
|
-
this.
|
|
112
|
-
this.events =
|
|
94
|
+
}, sessionReuseStrategy = 'random', } = options;
|
|
95
|
+
this.id = id != null ? String(id) : String(SessionPool.nextId++);
|
|
96
|
+
this.sessionReuseStrategy = sessionReuseStrategy;
|
|
97
|
+
this.events = serviceLocator.getEventManager();
|
|
113
98
|
this.log = log.child({ prefix: 'SessionPool' });
|
|
114
99
|
this.persistenceOptions = persistenceOptions;
|
|
115
100
|
// Pool Configuration
|
|
116
101
|
this.maxPoolSize = maxPoolSize;
|
|
117
102
|
this.createSessionFunction = createSessionFunction || this._defaultCreateSessionFunction;
|
|
118
|
-
// Session configuration
|
|
103
|
+
// Session configuration. The pool-scoped logger is merged into per-call sessionOptions inside
|
|
104
|
+
// `_invokeCreateSessionFunction`, so every Session inherits it without custom createSessionFunctions
|
|
105
|
+
// having to know about it.
|
|
119
106
|
this.sessionOptions = {
|
|
120
107
|
...sessionOptions,
|
|
121
|
-
// the log needs to propagate to createSessionFunction as in "new Session({ ...sessionPool.sessionOptions })"
|
|
122
|
-
// and can't go inside _defaultCreateSessionFunction
|
|
123
108
|
log: this.log,
|
|
124
109
|
};
|
|
125
110
|
// Session keyValueStore
|
|
126
111
|
this.persistStateKeyValueStoreId = persistStateKeyValueStoreId;
|
|
127
|
-
this.persistStateKey = persistStateKey
|
|
112
|
+
this.persistStateKey = persistStateKey ?? `${PERSIST_STATE_KEY}_${this.id}`;
|
|
128
113
|
}
|
|
129
114
|
/**
|
|
130
115
|
* Gets count of usable sessions in the pool.
|
|
131
116
|
*/
|
|
132
|
-
|
|
117
|
+
async usableSessionsCount() {
|
|
118
|
+
await this.ensureInitialized();
|
|
133
119
|
return this.sessions.filter((session) => session.isUsable()).length;
|
|
134
120
|
}
|
|
135
121
|
/**
|
|
136
122
|
* Gets count of retired sessions in the pool.
|
|
137
123
|
*/
|
|
138
|
-
|
|
124
|
+
async retiredSessionsCount() {
|
|
125
|
+
await this.ensureInitialized();
|
|
139
126
|
return this.sessions.filter((session) => !session.isUsable()).length;
|
|
140
127
|
}
|
|
141
128
|
/**
|
|
142
129
|
* Starts periodic state persistence and potentially loads SessionPool state from {@link KeyValueStore}.
|
|
143
|
-
*
|
|
130
|
+
* Called automatically on first use of any public method.
|
|
144
131
|
*/
|
|
145
|
-
async
|
|
146
|
-
if (this.
|
|
147
|
-
|
|
132
|
+
async ensureInitialized() {
|
|
133
|
+
if (!this.initPromise) {
|
|
134
|
+
this.initPromise = this.setupPool();
|
|
148
135
|
}
|
|
149
|
-
|
|
136
|
+
return this.initPromise;
|
|
137
|
+
}
|
|
138
|
+
async setupPool() {
|
|
150
139
|
if (!this.persistenceOptions.enable) {
|
|
151
|
-
this.isInitialized = true;
|
|
152
140
|
return;
|
|
153
141
|
}
|
|
142
|
+
this.keyValueStore = await KeyValueStore.open(this.persistStateKeyValueStoreId ? { id: this.persistStateKeyValueStoreId } : null, {
|
|
143
|
+
config: serviceLocator.getConfiguration(),
|
|
144
|
+
});
|
|
154
145
|
if (!this.persistStateKeyValueStoreId) {
|
|
155
146
|
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
147
|
}
|
|
@@ -158,7 +149,6 @@ export class SessionPool extends EventEmitter {
|
|
|
158
149
|
await this._maybeLoadSessionPool();
|
|
159
150
|
this._listener = this.persistState.bind(this);
|
|
160
151
|
this.events.on("persistState" /* EventType.PERSIST_STATE */, this._listener);
|
|
161
|
-
this.isInitialized = true;
|
|
162
152
|
}
|
|
163
153
|
/**
|
|
164
154
|
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
@@ -167,7 +157,7 @@ export class SessionPool extends EventEmitter {
|
|
|
167
157
|
* @param [options] The configuration options for the session being added to the session pool.
|
|
168
158
|
*/
|
|
169
159
|
async addSession(options = {}) {
|
|
170
|
-
this.
|
|
160
|
+
await this.ensureInitialized();
|
|
171
161
|
const { id } = options;
|
|
172
162
|
if (id) {
|
|
173
163
|
const sessionExists = this.sessionMap.has(id);
|
|
@@ -178,10 +168,22 @@ export class SessionPool extends EventEmitter {
|
|
|
178
168
|
if (!this._hasSpaceForSession()) {
|
|
179
169
|
this._removeRetiredSessions();
|
|
180
170
|
}
|
|
181
|
-
const newSession = options instanceof Session ? options : await this.
|
|
171
|
+
const newSession = options instanceof Session ? options : await this._invokeCreateSessionFunction(options);
|
|
182
172
|
this.log.debug(`Adding new Session - ${newSession.id}`);
|
|
183
173
|
this._addSession(newSession);
|
|
184
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Adds a new session to the session pool. The pool automatically creates sessions up to the maximum size of the pool,
|
|
177
|
+
* but this allows you to add more sessions once the max pool size is reached.
|
|
178
|
+
* This also allows you to add session with overridden session options (e.g. with specific session id).
|
|
179
|
+
* @param [options] The configuration options for the session being added to the session pool.
|
|
180
|
+
*/
|
|
181
|
+
async newSession(sessionOptions) {
|
|
182
|
+
await this.ensureInitialized();
|
|
183
|
+
const newSession = await this._invokeCreateSessionFunction(sessionOptions);
|
|
184
|
+
this._addSession(newSession);
|
|
185
|
+
return newSession;
|
|
186
|
+
}
|
|
185
187
|
/**
|
|
186
188
|
* Gets session.
|
|
187
189
|
* If there is space for new session, it creates and returns new session.
|
|
@@ -190,21 +192,20 @@ export class SessionPool extends EventEmitter {
|
|
|
190
192
|
* @param [sessionId] If provided, it returns the usable session with this id, `undefined` otherwise.
|
|
191
193
|
*/
|
|
192
194
|
async getSession(sessionId) {
|
|
195
|
+
await this.ensureInitialized();
|
|
193
196
|
await this.queue.wait();
|
|
194
197
|
try {
|
|
195
|
-
this._throwIfNotInitialized();
|
|
196
198
|
if (sessionId) {
|
|
197
199
|
const session = this.sessionMap.get(sessionId);
|
|
198
|
-
if (session
|
|
200
|
+
if (session?.isUsable())
|
|
199
201
|
return session;
|
|
200
202
|
return undefined;
|
|
201
203
|
}
|
|
202
|
-
if (this._hasSpaceForSession()) {
|
|
203
|
-
return await this._createSession();
|
|
204
|
-
}
|
|
205
204
|
const pickedSession = this._pickSession();
|
|
206
|
-
if (pickedSession
|
|
205
|
+
if (pickedSession)
|
|
207
206
|
return pickedSession;
|
|
207
|
+
if (this._hasSpaceForSession()) {
|
|
208
|
+
return await this._createSession();
|
|
208
209
|
}
|
|
209
210
|
this._removeRetiredSessions();
|
|
210
211
|
return await this._createSession();
|
|
@@ -220,16 +221,18 @@ export class SessionPool extends EventEmitter {
|
|
|
220
221
|
if (!this.persistenceOptions.enable && !options?.enable) {
|
|
221
222
|
return;
|
|
222
223
|
}
|
|
224
|
+
await this.ensureInitialized();
|
|
223
225
|
await this.keyValueStore?.setValue(this.persistStateKey, null);
|
|
224
226
|
}
|
|
225
227
|
/**
|
|
226
228
|
* Returns an object representing the internal state of the `SessionPool` instance.
|
|
227
229
|
* Note that the object's fields can change in future releases.
|
|
228
230
|
*/
|
|
229
|
-
getState() {
|
|
231
|
+
async getState() {
|
|
232
|
+
await this.ensureInitialized();
|
|
230
233
|
return {
|
|
231
|
-
usableSessionsCount: this.usableSessionsCount,
|
|
232
|
-
retiredSessionsCount: this.retiredSessionsCount,
|
|
234
|
+
usableSessionsCount: await this.usableSessionsCount(),
|
|
235
|
+
retiredSessionsCount: await this.retiredSessionsCount(),
|
|
233
236
|
sessions: this.sessions.map((session) => session.getState()),
|
|
234
237
|
};
|
|
235
238
|
}
|
|
@@ -242,15 +245,16 @@ export class SessionPool extends EventEmitter {
|
|
|
242
245
|
if (!this.persistenceOptions.enable && !options?.enable) {
|
|
243
246
|
return;
|
|
244
247
|
}
|
|
248
|
+
await this.ensureInitialized();
|
|
245
249
|
this.log.debug('Persisting state', {
|
|
246
250
|
persistStateKeyValueStoreId: this.persistStateKeyValueStoreId,
|
|
247
251
|
persistStateKey: this.persistStateKey,
|
|
248
252
|
});
|
|
249
253
|
// use half the interval of `persistState` to avoid race conditions
|
|
250
|
-
const persistStateIntervalMillis =
|
|
254
|
+
const persistStateIntervalMillis = serviceLocator.getConfiguration().persistStateIntervalMillis;
|
|
251
255
|
const timeoutSecs = persistStateIntervalMillis / 2_000;
|
|
252
256
|
await this.keyValueStore
|
|
253
|
-
|
|
257
|
+
?.setValue(this.persistStateKey, await this.getState(), {
|
|
254
258
|
timeoutSecs,
|
|
255
259
|
doNotRetryTimeouts: true,
|
|
256
260
|
})
|
|
@@ -261,16 +265,14 @@ export class SessionPool extends EventEmitter {
|
|
|
261
265
|
* This function should be called after you are done with using the `SessionPool` instance.
|
|
262
266
|
*/
|
|
263
267
|
async teardown() {
|
|
264
|
-
|
|
268
|
+
if (!this.initPromise)
|
|
269
|
+
return;
|
|
270
|
+
await this.ensureInitialized();
|
|
271
|
+
if (this._listener) {
|
|
272
|
+
this.events.off("persistState" /* EventType.PERSIST_STATE */, this._listener);
|
|
273
|
+
}
|
|
265
274
|
await this.persistState();
|
|
266
275
|
}
|
|
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
276
|
/**
|
|
275
277
|
* Removes retired `Session` instances from `SessionPool`.
|
|
276
278
|
*/
|
|
@@ -299,26 +301,29 @@ export class SessionPool extends EventEmitter {
|
|
|
299
301
|
}
|
|
300
302
|
/**
|
|
301
303
|
* Creates new session without any extra behavior.
|
|
302
|
-
* @param sessionPool
|
|
303
304
|
* @param [options]
|
|
304
305
|
* @param [options.sessionOptions] The configuration options for the session being created.
|
|
305
306
|
* @returns New session.
|
|
306
307
|
*/
|
|
307
|
-
_defaultCreateSessionFunction(
|
|
308
|
+
async _defaultCreateSessionFunction(options = {}) {
|
|
308
309
|
ow(options, ow.object.exactShape({ sessionOptions: ow.optional.object }));
|
|
309
310
|
const { sessionOptions = {} } = options;
|
|
310
|
-
return new Session(
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
311
|
+
return new Session(sessionOptions);
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Invokes `createSessionFunction` with `sessionOptions` already merged from pool-wide defaults and
|
|
315
|
+
* the supplied per-call overrides, so custom implementations don't need to spread `pool.sessionOptions` themselves.
|
|
316
|
+
*/
|
|
317
|
+
async _invokeCreateSessionFunction(perCallOptions) {
|
|
318
|
+
const sessionOptions = { ...this.sessionOptions, ...perCallOptions };
|
|
319
|
+
return this.createSessionFunction({ sessionOptions });
|
|
315
320
|
}
|
|
316
321
|
/**
|
|
317
322
|
* Creates new session and adds it to the pool.
|
|
318
323
|
* @returns Newly created `Session` instance.
|
|
319
324
|
*/
|
|
320
325
|
async _createSession() {
|
|
321
|
-
const newSession = await this.
|
|
326
|
+
const newSession = await this._invokeCreateSessionFunction();
|
|
322
327
|
this._addSession(newSession);
|
|
323
328
|
this.log.debug(`Created new Session - ${newSession.id}`);
|
|
324
329
|
return newSession;
|
|
@@ -330,18 +335,32 @@ export class SessionPool extends EventEmitter {
|
|
|
330
335
|
return this.sessions.length < this.maxPoolSize;
|
|
331
336
|
}
|
|
332
337
|
/**
|
|
333
|
-
* Picks
|
|
334
|
-
*
|
|
338
|
+
* Picks a session from the `SessionPool` according to the configured `sessionReuseStrategy`.
|
|
339
|
+
* Returns `undefined` when no session should be reused and a new one should be created instead.
|
|
335
340
|
*/
|
|
336
341
|
_pickSession() {
|
|
337
|
-
|
|
342
|
+
if (this.sessionReuseStrategy !== 'use-until-failure' && this._hasSpaceForSession())
|
|
343
|
+
return undefined;
|
|
344
|
+
if (this.sessionReuseStrategy === 'use-until-failure') {
|
|
345
|
+
return this.sessions.find((session) => session.isUsable());
|
|
346
|
+
}
|
|
347
|
+
let picked;
|
|
348
|
+
if (this.sessionReuseStrategy === 'round-robin') {
|
|
349
|
+
const index = this.roundRobinIndex % this.sessions.length;
|
|
350
|
+
this.roundRobinIndex = index + 1;
|
|
351
|
+
picked = this.sessions[index];
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
picked = this.sessions[this._getRandomIndex()];
|
|
355
|
+
}
|
|
356
|
+
return picked.isUsable() ? picked : undefined;
|
|
338
357
|
}
|
|
339
358
|
/**
|
|
340
359
|
* Potentially loads `SessionPool`.
|
|
341
360
|
* If the state was persisted it loads the `SessionPool` from the persisted state.
|
|
342
361
|
*/
|
|
343
362
|
async _maybeLoadSessionPool() {
|
|
344
|
-
const loadedSessionPool = await this.keyValueStore
|
|
363
|
+
const loadedSessionPool = await this.keyValueStore?.getValue(this.persistStateKey);
|
|
345
364
|
if (!loadedSessionPool)
|
|
346
365
|
return;
|
|
347
366
|
// Invalidate old sessions and load active sessions only
|
|
@@ -350,26 +369,14 @@ export class SessionPool extends EventEmitter {
|
|
|
350
369
|
persistStateKey: this.persistStateKey,
|
|
351
370
|
});
|
|
352
371
|
for (const sessionObject of loadedSessionPool.sessions) {
|
|
353
|
-
sessionObject.sessionPool = this;
|
|
354
372
|
sessionObject.createdAt = new Date(sessionObject.createdAt);
|
|
355
373
|
sessionObject.expiresAt = new Date(sessionObject.expiresAt);
|
|
356
|
-
const recreatedSession = await this.
|
|
374
|
+
const recreatedSession = await this._invokeCreateSessionFunction(sessionObject);
|
|
357
375
|
if (recreatedSession.isUsable()) {
|
|
358
376
|
this._addSession(recreatedSession);
|
|
359
377
|
}
|
|
360
378
|
}
|
|
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;
|
|
379
|
+
this.log.debug(`${this.sessions.length} active sessions loaded from KeyValueStore`);
|
|
373
380
|
}
|
|
374
381
|
}
|
|
375
382
|
//# sourceMappingURL=session_pool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session_pool.js","sourceRoot":"","sources":["../../src/session_pool/session_pool.ts"],"names":[],"mappings":"
|
|
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,8 +1,9 @@
|
|
|
1
|
-
import type { DatasetClient, DatasetInfo, Dictionary,
|
|
1
|
+
import type { DatasetClient, DatasetInfo, Dictionary, PaginatedList } 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
|
-
import type {
|
|
5
|
+
import type { StorageIdentifier } from './storage_instance_manager.js';
|
|
6
|
+
import type { StorageOpenOptions } from './utils.js';
|
|
6
7
|
/** @internal */
|
|
7
8
|
export declare const DATASET_ITERATORS_DEFAULT_LIMIT = 10000;
|
|
8
9
|
/**
|
|
@@ -67,6 +68,11 @@ export interface DatasetDataOptions {
|
|
|
67
68
|
skipEmpty?: boolean;
|
|
68
69
|
}
|
|
69
70
|
export interface DatasetExportOptions extends Omit<DatasetDataOptions, 'offset' | 'limit'> {
|
|
71
|
+
/**
|
|
72
|
+
* If true, includes all unique keys from all dataset items in the CSV export header.
|
|
73
|
+
* If omitted or false, only keys from the first item are used.
|
|
74
|
+
*/
|
|
75
|
+
collectAllKeys?: boolean;
|
|
70
76
|
}
|
|
71
77
|
export interface DatasetIteratorOptions extends Omit<DatasetDataOptions, 'offset' | 'limit' | 'clean' | 'skipHidden' | 'skipEmpty'> {
|
|
72
78
|
/** @internal */
|
|
@@ -86,8 +92,8 @@ export interface DatasetIteratorOptions extends Omit<DatasetDataOptions, 'offset
|
|
|
86
92
|
format?: string;
|
|
87
93
|
}
|
|
88
94
|
export interface DatasetExportToOptions extends DatasetExportOptions {
|
|
89
|
-
fromDataset?: string;
|
|
90
|
-
toKVS?: string;
|
|
95
|
+
fromDataset?: string | StorageIdentifier;
|
|
96
|
+
toKVS?: string | StorageIdentifier;
|
|
91
97
|
}
|
|
92
98
|
/**
|
|
93
99
|
* The `Dataset` class represents a store for structured data where each object stored has the same attributes,
|
|
@@ -145,7 +151,7 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
145
151
|
id: string;
|
|
146
152
|
name?: string;
|
|
147
153
|
client: DatasetClient<Data>;
|
|
148
|
-
log:
|
|
154
|
+
log: CrawleeLogger;
|
|
149
155
|
/**
|
|
150
156
|
* @internal
|
|
151
157
|
*/
|
|
@@ -223,26 +229,21 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
223
229
|
/**
|
|
224
230
|
* Returns an object containing general information about the dataset.
|
|
225
231
|
*
|
|
226
|
-
* The function returns the same object as the Apify API Client's
|
|
227
|
-
* [getDataset](https://docs.apify.com/api/apify-client-js/latest#ApifyClient-datasets-getDataset)
|
|
228
|
-
* function, which in turn calls the
|
|
229
|
-
* [Get dataset](https://apify.com/docs/api/v2#/reference/datasets/dataset/get-dataset)
|
|
230
|
-
* API endpoint.
|
|
231
|
-
*
|
|
232
232
|
* **Example:**
|
|
233
233
|
* ```
|
|
234
234
|
* {
|
|
235
235
|
* id: "WkzbQMuFYuamGv3YF",
|
|
236
236
|
* name: "my-dataset",
|
|
237
|
-
* userId: "wRsJZtadYvn4mBZmm",
|
|
238
237
|
* createdAt: new Date("2015-12-12T07:34:14.202Z"),
|
|
239
238
|
* modifiedAt: new Date("2015-12-13T08:36:13.202Z"),
|
|
240
239
|
* accessedAt: new Date("2015-12-14T08:36:13.202Z"),
|
|
241
240
|
* itemCount: 14,
|
|
242
241
|
* }
|
|
243
242
|
* ```
|
|
243
|
+
*
|
|
244
|
+
* @throws If the underlying storage no longer exists (e.g. it was deleted externally).
|
|
244
245
|
*/
|
|
245
|
-
getInfo(): Promise<DatasetInfo
|
|
246
|
+
getInfo(): Promise<DatasetInfo>;
|
|
246
247
|
/**
|
|
247
248
|
* Iterates over dataset items, yielding each in turn to an `iteratee` function.
|
|
248
249
|
* Each invocation of `iteratee` is called with two arguments: `(item, index)`.
|
|
@@ -326,6 +327,49 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
326
327
|
* @param [options] An object containing extra options for `reduce()`
|
|
327
328
|
*/
|
|
328
329
|
reduce<T>(iteratee: DatasetReducer<T, Data>, memo: T, options?: DatasetIteratorOptions): Promise<T>;
|
|
330
|
+
/**
|
|
331
|
+
* Iterates over dataset items using an async generator,
|
|
332
|
+
* allowing the use of `for await...of` syntax.
|
|
333
|
+
*
|
|
334
|
+
* **Example usage:**
|
|
335
|
+
* ```javascript
|
|
336
|
+
* const dataset = await Dataset.open('my-results');
|
|
337
|
+
* for await (const item of dataset.values()) {
|
|
338
|
+
* console.log(item);
|
|
339
|
+
* }
|
|
340
|
+
* ```
|
|
341
|
+
*
|
|
342
|
+
* @param options Options for the iteration.
|
|
343
|
+
*/
|
|
344
|
+
values(options?: DatasetIteratorOptions): AsyncIterable<Data> & Promise<PaginatedList<Data>>;
|
|
345
|
+
/**
|
|
346
|
+
* Iterates over dataset entries (index-value pairs) using an async generator,
|
|
347
|
+
* allowing the use of `for await...of` syntax.
|
|
348
|
+
*
|
|
349
|
+
* **Example usage:**
|
|
350
|
+
* ```javascript
|
|
351
|
+
* const dataset = await Dataset.open('my-results');
|
|
352
|
+
* for await (const [index, item] of dataset.entries()) {
|
|
353
|
+
* console.log(`Item at ${index}: ${JSON.stringify(item)}`);
|
|
354
|
+
* }
|
|
355
|
+
* ```
|
|
356
|
+
*
|
|
357
|
+
* @param options Options for the iteration.
|
|
358
|
+
*/
|
|
359
|
+
entries(options?: DatasetIteratorOptions): AsyncIterable<[number, Data]> & Promise<PaginatedList<[number, Data]>>;
|
|
360
|
+
/**
|
|
361
|
+
* Default async iterator for the dataset, iterating over items.
|
|
362
|
+
* Allows using the dataset directly in a `for await...of` loop.
|
|
363
|
+
*
|
|
364
|
+
* **Example usage:**
|
|
365
|
+
* ```javascript
|
|
366
|
+
* const dataset = await Dataset.open('my-results');
|
|
367
|
+
* for await (const item of dataset) {
|
|
368
|
+
* console.log(item);
|
|
369
|
+
* }
|
|
370
|
+
* ```
|
|
371
|
+
*/
|
|
372
|
+
[Symbol.asyncIterator](): AsyncGenerator<Data, void, undefined>;
|
|
329
373
|
/**
|
|
330
374
|
* Removes the dataset either from the Apify cloud storage or from the local directory,
|
|
331
375
|
* depending on the mode of operation.
|
|
@@ -340,12 +384,13 @@ export declare class Dataset<Data extends Dictionary = Dictionary> {
|
|
|
340
384
|
*
|
|
341
385
|
* For more details and code examples, see the {@link Dataset} class.
|
|
342
386
|
*
|
|
343
|
-
* @param [
|
|
344
|
-
* ID or name of the dataset to be opened. If
|
|
345
|
-
*
|
|
387
|
+
* @param [identifier]
|
|
388
|
+
* ID or name of the dataset to be opened. If a string is provided, it will first be
|
|
389
|
+
* looked up as an ID; if no such storage exists, it will be treated as a name.
|
|
390
|
+
* If `null` or `undefined`, the function returns the default dataset associated with the crawler run.
|
|
346
391
|
* @param [options] Storage manager options.
|
|
347
392
|
*/
|
|
348
|
-
static open<Data extends Dictionary = Dictionary>(
|
|
393
|
+
static open<Data extends Dictionary = Dictionary>(identifier?: string | StorageIdentifier | null, options?: StorageOpenOptions): Promise<Dataset<Data>>;
|
|
349
394
|
/**
|
|
350
395
|
* Stores an object or an array of objects to the default {@link Dataset} of the current crawler run.
|
|
351
396
|
*
|
|
@@ -411,7 +456,7 @@ export interface DatasetReducer<T, Data> {
|
|
|
411
456
|
export interface DatasetOptions {
|
|
412
457
|
id: string;
|
|
413
458
|
name?: string;
|
|
414
|
-
client:
|
|
459
|
+
client: DatasetClient;
|
|
415
460
|
}
|
|
416
461
|
export interface DatasetContent<Data> {
|
|
417
462
|
/** 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;AAM5F,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../../src/storages/dataset.ts"],"names":[],"mappings":"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"}
|