apify-client 2.20.1-beta.6 → 2.20.1-beta.8
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/dist/apify_client.d.ts +237 -25
- package/dist/apify_client.d.ts.map +1 -1
- package/dist/apify_client.js +234 -25
- package/dist/apify_client.js.map +1 -1
- package/dist/bundle.js +2042 -253
- package/dist/bundle.js.map +1 -1
- package/dist/resource_clients/actor.d.ts +322 -31
- package/dist/resource_clients/actor.d.ts.map +1 -1
- package/dist/resource_clients/actor.js +167 -19
- package/dist/resource_clients/actor.js.map +1 -1
- package/dist/resource_clients/actor_collection.d.ts +34 -3
- package/dist/resource_clients/actor_collection.d.ts.map +1 -1
- package/dist/resource_clients/actor_collection.js +34 -3
- package/dist/resource_clients/actor_collection.js.map +1 -1
- package/dist/resource_clients/actor_env_var.d.ts +34 -3
- package/dist/resource_clients/actor_env_var.d.ts.map +1 -1
- package/dist/resource_clients/actor_env_var.js +34 -3
- package/dist/resource_clients/actor_env_var.js.map +1 -1
- package/dist/resource_clients/actor_env_var_collection.d.ts +37 -3
- package/dist/resource_clients/actor_env_var_collection.d.ts.map +1 -1
- package/dist/resource_clients/actor_env_var_collection.js +37 -3
- package/dist/resource_clients/actor_env_var_collection.js.map +1 -1
- package/dist/resource_clients/actor_version.d.ts +42 -6
- package/dist/resource_clients/actor_version.d.ts.map +1 -1
- package/dist/resource_clients/actor_version.js +42 -6
- package/dist/resource_clients/actor_version.js.map +1 -1
- package/dist/resource_clients/actor_version_collection.d.ts +35 -3
- package/dist/resource_clients/actor_version_collection.d.ts.map +1 -1
- package/dist/resource_clients/actor_version_collection.js +35 -3
- package/dist/resource_clients/actor_version_collection.js.map +1 -1
- package/dist/resource_clients/build.d.ts +123 -11
- package/dist/resource_clients/build.d.ts.map +1 -1
- package/dist/resource_clients/build.js +93 -11
- package/dist/resource_clients/build.js.map +1 -1
- package/dist/resource_clients/build_collection.d.ts +27 -2
- package/dist/resource_clients/build_collection.d.ts.map +1 -1
- package/dist/resource_clients/build_collection.js +27 -2
- package/dist/resource_clients/build_collection.js.map +1 -1
- package/dist/resource_clients/dataset.d.ts +221 -15
- package/dist/resource_clients/dataset.d.ts.map +1 -1
- package/dist/resource_clients/dataset.js +185 -15
- package/dist/resource_clients/dataset.js.map +1 -1
- package/dist/resource_clients/dataset_collection.d.ts +32 -3
- package/dist/resource_clients/dataset_collection.d.ts.map +1 -1
- package/dist/resource_clients/dataset_collection.js +32 -3
- package/dist/resource_clients/dataset_collection.js.map +1 -1
- package/dist/resource_clients/key_value_store.d.ts +219 -26
- package/dist/resource_clients/key_value_store.d.ts.map +1 -1
- package/dist/resource_clients/key_value_store.js +172 -25
- package/dist/resource_clients/key_value_store.js.map +1 -1
- package/dist/resource_clients/key_value_store_collection.d.ts +32 -3
- package/dist/resource_clients/key_value_store_collection.d.ts.map +1 -1
- package/dist/resource_clients/key_value_store_collection.js +32 -3
- package/dist/resource_clients/key_value_store_collection.js.map +1 -1
- package/dist/resource_clients/log.d.ts +34 -3
- package/dist/resource_clients/log.d.ts.map +1 -1
- package/dist/resource_clients/log.js +34 -3
- package/dist/resource_clients/log.js.map +1 -1
- package/dist/resource_clients/request_queue.d.ts +290 -19
- package/dist/resource_clients/request_queue.d.ts.map +1 -1
- package/dist/resource_clients/request_queue.js +233 -19
- package/dist/resource_clients/request_queue.js.map +1 -1
- package/dist/resource_clients/request_queue_collection.d.ts +31 -3
- package/dist/resource_clients/request_queue_collection.d.ts.map +1 -1
- package/dist/resource_clients/request_queue_collection.js +31 -3
- package/dist/resource_clients/request_queue_collection.js.map +1 -1
- package/dist/resource_clients/run.d.ts +224 -27
- package/dist/resource_clients/run.d.ts.map +1 -1
- package/dist/resource_clients/run.js +200 -27
- package/dist/resource_clients/run.js.map +1 -1
- package/dist/resource_clients/run_collection.d.ts +27 -2
- package/dist/resource_clients/run_collection.d.ts.map +1 -1
- package/dist/resource_clients/run_collection.js +27 -2
- package/dist/resource_clients/run_collection.js.map +1 -1
- package/dist/resource_clients/schedule.d.ts +65 -4
- package/dist/resource_clients/schedule.d.ts.map +1 -1
- package/dist/resource_clients/schedule.js +42 -4
- package/dist/resource_clients/schedule.js.map +1 -1
- package/dist/resource_clients/schedule_collection.d.ts +35 -3
- package/dist/resource_clients/schedule_collection.d.ts.map +1 -1
- package/dist/resource_clients/schedule_collection.js +35 -3
- package/dist/resource_clients/schedule_collection.js.map +1 -1
- package/dist/resource_clients/store_collection.d.ts +26 -2
- package/dist/resource_clients/store_collection.d.ts.map +1 -1
- package/dist/resource_clients/store_collection.js +26 -2
- package/dist/resource_clients/store_collection.js.map +1 -1
- package/dist/resource_clients/task.d.ts +110 -11
- package/dist/resource_clients/task.d.ts.map +1 -1
- package/dist/resource_clients/task.js +83 -11
- package/dist/resource_clients/task.js.map +1 -1
- package/dist/resource_clients/task_collection.d.ts +35 -8
- package/dist/resource_clients/task_collection.d.ts.map +1 -1
- package/dist/resource_clients/task_collection.js +35 -8
- package/dist/resource_clients/task_collection.js.map +1 -1
- package/dist/resource_clients/user.d.ts +41 -4
- package/dist/resource_clients/user.d.ts.map +1 -1
- package/dist/resource_clients/user.js +41 -4
- package/dist/resource_clients/user.js.map +1 -1
- package/dist/resource_clients/webhook.d.ts +66 -5
- package/dist/resource_clients/webhook.d.ts.map +1 -1
- package/dist/resource_clients/webhook.js +48 -5
- package/dist/resource_clients/webhook.js.map +1 -1
- package/dist/resource_clients/webhook_collection.d.ts +34 -3
- package/dist/resource_clients/webhook_collection.d.ts.map +1 -1
- package/dist/resource_clients/webhook_collection.js +34 -3
- package/dist/resource_clients/webhook_collection.js.map +1 -1
- package/dist/resource_clients/webhook_dispatch.d.ts +22 -1
- package/dist/resource_clients/webhook_dispatch.d.ts.map +1 -1
- package/dist/resource_clients/webhook_dispatch.js +22 -1
- package/dist/resource_clients/webhook_dispatch.js.map +1 -1
- package/dist/resource_clients/webhook_dispatch_collection.d.ts +24 -2
- package/dist/resource_clients/webhook_dispatch_collection.d.ts.map +1 -1
- package/dist/resource_clients/webhook_dispatch_collection.js +24 -2
- package/dist/resource_clients/webhook_dispatch_collection.js.map +1 -1
- package/dist/utils.d.ts +42 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,19 +2,39 @@ import type { ApiClientSubResourceOptions } from '../base/api_client';
|
|
|
2
2
|
import { ResourceCollectionClient } from '../base/resource_collection_client';
|
|
3
3
|
import type { PaginatedList, PaginationOptions } from '../utils';
|
|
4
4
|
import type { Dataset } from './dataset';
|
|
5
|
+
/**
|
|
6
|
+
* Client for managing the collection of datasets in your account.
|
|
7
|
+
*
|
|
8
|
+
* Datasets store structured data results from Actor runs. This client provides methods
|
|
9
|
+
* to list, create, or get datasets by name.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```javascript
|
|
13
|
+
* const client = new ApifyClient({ token: 'my-token' });
|
|
14
|
+
* const datasetsClient = client.datasets();
|
|
15
|
+
*
|
|
16
|
+
* // List all datasets
|
|
17
|
+
* const { items } = await datasetsClient.list();
|
|
18
|
+
*
|
|
19
|
+
* // Get or create a dataset by name
|
|
20
|
+
* const dataset = await datasetsClient.getOrCreate('my-dataset');
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* @see https://docs.apify.com/platform/storage/dataset
|
|
24
|
+
*/
|
|
5
25
|
export declare class DatasetCollectionClient extends ResourceCollectionClient {
|
|
6
26
|
/**
|
|
7
27
|
* @hidden
|
|
8
28
|
*/
|
|
9
29
|
constructor(options: ApiClientSubResourceOptions);
|
|
10
30
|
/**
|
|
11
|
-
*
|
|
31
|
+
* Lists all Datasets.
|
|
12
32
|
*
|
|
13
33
|
* Awaiting the return value (as you would with a Promise) will result in a single API call. The amount of fetched
|
|
14
34
|
* items in a single API call is limited.
|
|
15
35
|
* ```javascript
|
|
16
36
|
* const paginatedList = await client.list(options);
|
|
17
|
-
|
|
37
|
+
* ```
|
|
18
38
|
*
|
|
19
39
|
* Asynchronous iteration is also supported. This will fetch additional pages if needed until all items are
|
|
20
40
|
* retrieved.
|
|
@@ -22,10 +42,19 @@ export declare class DatasetCollectionClient extends ResourceCollectionClient {
|
|
|
22
42
|
* ```javascript
|
|
23
43
|
* for await (const singleItem of client.list(options)) {...}
|
|
24
44
|
* ```
|
|
45
|
+
*
|
|
46
|
+
* @param options - Pagination options.
|
|
47
|
+
* @returns A paginated iterator of Datasets.
|
|
48
|
+
* @see https://docs.apify.com/api/v2/datasets-get
|
|
25
49
|
*/
|
|
26
50
|
list(options?: DatasetCollectionClientListOptions): Promise<DatasetCollectionClientListResult> & AsyncIterable<Dataset>;
|
|
27
51
|
/**
|
|
28
|
-
*
|
|
52
|
+
* Gets or creates a dataset with the specified name.
|
|
53
|
+
*
|
|
54
|
+
* @param name - Name of the dataset. If not provided, a default dataset is used.
|
|
55
|
+
* @param options - Additional options like schema.
|
|
56
|
+
* @returns The dataset object.
|
|
57
|
+
* @see https://docs.apify.com/api/v2/datasets-post
|
|
29
58
|
*/
|
|
30
59
|
getOrCreate(name?: string, options?: DatasetCollectionClientGetOrCreateOptions): Promise<Dataset>;
|
|
31
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset_collection.d.ts","sourceRoot":"","sources":["../../src/resource_clients/dataset_collection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,qBAAa,uBAAwB,SAAQ,wBAAwB;IACjE;;OAEG;gBACS,OAAO,EAAE,2BAA2B;IAOhD
|
|
1
|
+
{"version":3,"file":"dataset_collection.d.ts","sourceRoot":"","sources":["../../src/resource_clients/dataset_collection.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AACjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,uBAAwB,SAAQ,wBAAwB;IACjE;;OAEG;gBACS,OAAO,EAAE,2BAA2B;IAOhD;;;;;;;;;;;;;;;;;;;OAmBG;IACH,IAAI,CACA,OAAO,GAAE,kCAAuC,GACjD,OAAO,CAAC,iCAAiC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC;IActE;;;;;;;OAOG;IACG,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yCAAyC,GAAG,OAAO,CAAC,OAAO,CAAC;CAM1G;AAED,MAAM,WAAW,kCAAmC,SAAQ,iBAAiB;IACzE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,yCAAyC;IACtD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,MAAM,iCAAiC,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC"}
|
|
@@ -4,6 +4,26 @@ exports.DatasetCollectionClient = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const ow_1 = tslib_1.__importDefault(require("ow"));
|
|
6
6
|
const resource_collection_client_1 = require("../base/resource_collection_client");
|
|
7
|
+
/**
|
|
8
|
+
* Client for managing the collection of datasets in your account.
|
|
9
|
+
*
|
|
10
|
+
* Datasets store structured data results from Actor runs. This client provides methods
|
|
11
|
+
* to list, create, or get datasets by name.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```javascript
|
|
15
|
+
* const client = new ApifyClient({ token: 'my-token' });
|
|
16
|
+
* const datasetsClient = client.datasets();
|
|
17
|
+
*
|
|
18
|
+
* // List all datasets
|
|
19
|
+
* const { items } = await datasetsClient.list();
|
|
20
|
+
*
|
|
21
|
+
* // Get or create a dataset by name
|
|
22
|
+
* const dataset = await datasetsClient.getOrCreate('my-dataset');
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @see https://docs.apify.com/platform/storage/dataset
|
|
26
|
+
*/
|
|
7
27
|
class DatasetCollectionClient extends resource_collection_client_1.ResourceCollectionClient {
|
|
8
28
|
/**
|
|
9
29
|
* @hidden
|
|
@@ -15,13 +35,13 @@ class DatasetCollectionClient extends resource_collection_client_1.ResourceColle
|
|
|
15
35
|
});
|
|
16
36
|
}
|
|
17
37
|
/**
|
|
18
|
-
*
|
|
38
|
+
* Lists all Datasets.
|
|
19
39
|
*
|
|
20
40
|
* Awaiting the return value (as you would with a Promise) will result in a single API call. The amount of fetched
|
|
21
41
|
* items in a single API call is limited.
|
|
22
42
|
* ```javascript
|
|
23
43
|
* const paginatedList = await client.list(options);
|
|
24
|
-
|
|
44
|
+
* ```
|
|
25
45
|
*
|
|
26
46
|
* Asynchronous iteration is also supported. This will fetch additional pages if needed until all items are
|
|
27
47
|
* retrieved.
|
|
@@ -29,6 +49,10 @@ class DatasetCollectionClient extends resource_collection_client_1.ResourceColle
|
|
|
29
49
|
* ```javascript
|
|
30
50
|
* for await (const singleItem of client.list(options)) {...}
|
|
31
51
|
* ```
|
|
52
|
+
*
|
|
53
|
+
* @param options - Pagination options.
|
|
54
|
+
* @returns A paginated iterator of Datasets.
|
|
55
|
+
* @see https://docs.apify.com/api/v2/datasets-get
|
|
32
56
|
*/
|
|
33
57
|
list(options = {}) {
|
|
34
58
|
(0, ow_1.default)(options, ow_1.default.object.exactShape({
|
|
@@ -40,7 +64,12 @@ class DatasetCollectionClient extends resource_collection_client_1.ResourceColle
|
|
|
40
64
|
return this._listPaginated(options);
|
|
41
65
|
}
|
|
42
66
|
/**
|
|
43
|
-
*
|
|
67
|
+
* Gets or creates a dataset with the specified name.
|
|
68
|
+
*
|
|
69
|
+
* @param name - Name of the dataset. If not provided, a default dataset is used.
|
|
70
|
+
* @param options - Additional options like schema.
|
|
71
|
+
* @returns The dataset object.
|
|
72
|
+
* @see https://docs.apify.com/api/v2/datasets-post
|
|
44
73
|
*/
|
|
45
74
|
async getOrCreate(name, options) {
|
|
46
75
|
(0, ow_1.default)(name, ow_1.default.optional.string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dataset_collection.js","sourceRoot":"","sources":["../../src/resource_clients/dataset_collection.ts"],"names":[],"mappings":";;;;AAAA,oDAAoB;AAGpB,mFAA8E;AAI9E,MAAa,uBAAwB,SAAQ,qDAAwB;IACjE;;OAEG;IACH,YAAY,OAAoC;QAC5C,KAAK,CAAC;YACF,YAAY,EAAE,UAAU;YACxB,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"dataset_collection.js","sourceRoot":"","sources":["../../src/resource_clients/dataset_collection.ts"],"names":[],"mappings":";;;;AAAA,oDAAoB;AAGpB,mFAA8E;AAI9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,uBAAwB,SAAQ,qDAAwB;IACjE;;OAEG;IACH,YAAY,OAAoC;QAC5C,KAAK,CAAC;YACF,YAAY,EAAE,UAAU;YACxB,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAED;;;;;;;;;;;;;;;;;;;OAmBG;IACH,IAAI,CACA,UAA8C,EAAE;QAEhD,IAAA,YAAE,EACE,OAAO,EACP,YAAE,CAAC,MAAM,CAAC,UAAU,CAAC;YACjB,OAAO,EAAE,YAAE,CAAC,QAAQ,CAAC,OAAO;YAC5B,KAAK,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YACzB,MAAM,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM;YAC1B,IAAI,EAAE,YAAE,CAAC,QAAQ,CAAC,OAAO;SAC5B,CAAC,CACL,CAAC;QAEF,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,WAAW,CAAC,IAAa,EAAE,OAAmD;QAChF,IAAA,YAAE,EAAC,IAAI,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC7B,IAAA,YAAE,EAAC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,YAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,+BAA+B;QAExE,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;CACJ;AA7DD,0DA6DC"}
|
|
@@ -3,53 +3,156 @@ import type { JsonValue } from 'type-fest';
|
|
|
3
3
|
import type { STORAGE_GENERAL_ACCESS } from '@apify/consts';
|
|
4
4
|
import type { ApiClientSubResourceOptions } from '../base/api_client';
|
|
5
5
|
import { ResourceClient } from '../base/resource_client';
|
|
6
|
+
/**
|
|
7
|
+
* Client for managing a specific key-value store.
|
|
8
|
+
*
|
|
9
|
+
* Key-value stores are used to store arbitrary data records or files. Each record is identified by
|
|
10
|
+
* a unique key and can contain any type of data. This client provides methods to get, set, and delete
|
|
11
|
+
* records, list keys, and manage the store.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```javascript
|
|
15
|
+
* const client = new ApifyClient({ token: 'my-token' });
|
|
16
|
+
* const storeClient = client.keyValueStore('my-store-id');
|
|
17
|
+
*
|
|
18
|
+
* // Set a record
|
|
19
|
+
* await storeClient.setRecord({
|
|
20
|
+
* key: 'OUTPUT',
|
|
21
|
+
* value: { foo: 'bar' },
|
|
22
|
+
* contentType: 'application/json'
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Get a record
|
|
26
|
+
* const record = await storeClient.getRecord('OUTPUT');
|
|
27
|
+
*
|
|
28
|
+
* // List all keys
|
|
29
|
+
* const { items } = await storeClient.listKeys();
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @see https://docs.apify.com/platform/storage/key-value-store
|
|
33
|
+
*/
|
|
6
34
|
export declare class KeyValueStoreClient extends ResourceClient {
|
|
7
35
|
/**
|
|
8
36
|
* @hidden
|
|
9
37
|
*/
|
|
10
38
|
constructor(options: ApiClientSubResourceOptions);
|
|
11
39
|
/**
|
|
12
|
-
*
|
|
40
|
+
* Gets the key-value store object from the Apify API.
|
|
41
|
+
*
|
|
42
|
+
* @returns The KeyValueStore object, or `undefined` if it does not exist
|
|
43
|
+
* @see https://docs.apify.com/api/v2/key-value-store-get
|
|
13
44
|
*/
|
|
14
45
|
get(): Promise<KeyValueStore | undefined>;
|
|
15
46
|
/**
|
|
16
|
-
*
|
|
47
|
+
* Updates the key-value store with specified fields.
|
|
48
|
+
*
|
|
49
|
+
* @param newFields - Fields to update in the key-value store
|
|
50
|
+
* @param newFields.name - New name for the store
|
|
51
|
+
* @param newFields.title - New title for the store
|
|
52
|
+
* @param newFields.generalAccess - General resource access level ('FOLLOW_USER_SETTING', 'ANYONE_WITH_ID_CAN_READ' or 'RESTRICTED')
|
|
53
|
+
* @returns The updated KeyValueStore object
|
|
54
|
+
* @see https://docs.apify.com/api/v2/key-value-store-put
|
|
17
55
|
*/
|
|
18
56
|
update(newFields: KeyValueClientUpdateOptions): Promise<KeyValueStore>;
|
|
19
57
|
/**
|
|
20
|
-
*
|
|
58
|
+
* Deletes the key-value store.
|
|
59
|
+
*
|
|
60
|
+
* @see https://docs.apify.com/api/v2/key-value-store-delete
|
|
21
61
|
*/
|
|
22
62
|
delete(): Promise<void>;
|
|
23
63
|
/**
|
|
24
|
-
*
|
|
64
|
+
* Lists all keys in the key-value store.
|
|
65
|
+
*
|
|
66
|
+
* Returns a paginated list of all record keys in the store. Use pagination parameters
|
|
67
|
+
* to retrieve large lists efficiently.
|
|
68
|
+
*
|
|
69
|
+
* @param options - Listing options
|
|
70
|
+
* @param options.limit - Maximum number of keys to return. Default is 1000.
|
|
71
|
+
* @param options.exclusiveStartKey - Key to start listing from (for pagination). The listing starts with the next key after this one.
|
|
72
|
+
* @param options.collection - Filter keys by collection name.
|
|
73
|
+
* @param options.prefix - Filter keys that start with this prefix.
|
|
74
|
+
* @returns Object containing `items` array of key metadata, pagination info (`count`, `limit`, `isTruncated`, `nextExclusiveStartKey`)
|
|
75
|
+
* @see https://docs.apify.com/api/v2/key-value-store-keys-get
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```javascript
|
|
79
|
+
* // List all keys
|
|
80
|
+
* const { items, isTruncated } = await client.keyValueStore('my-store').listKeys();
|
|
81
|
+
* items.forEach(item => console.log(`${item.key}: ${item.size} bytes`));
|
|
82
|
+
*
|
|
83
|
+
* // List keys with prefix
|
|
84
|
+
* const { items } = await client.keyValueStore('my-store').listKeys({ prefix: 'user-' });
|
|
85
|
+
*
|
|
86
|
+
* // Paginate through all keys
|
|
87
|
+
* let exclusiveStartKey;
|
|
88
|
+
* do {
|
|
89
|
+
* const result = await client.keyValueStore('my-store').listKeys({
|
|
90
|
+
* limit: 100,
|
|
91
|
+
* exclusiveStartKey
|
|
92
|
+
* });
|
|
93
|
+
* // Process result.items...
|
|
94
|
+
* exclusiveStartKey = result.nextExclusiveStartKey;
|
|
95
|
+
* } while (result.isTruncated);
|
|
96
|
+
* ```
|
|
25
97
|
*/
|
|
26
98
|
listKeys(options?: KeyValueClientListKeysOptions): Promise<KeyValueClientListKeysResult>;
|
|
27
99
|
/**
|
|
28
|
-
* Generates a URL
|
|
100
|
+
* Generates a public URL for accessing a specific record in the key-value store.
|
|
29
101
|
*
|
|
30
102
|
* If the client has permission to access the key-value store's URL signing key,
|
|
31
|
-
* the URL will include a signature
|
|
103
|
+
* the URL will include a cryptographic signature for authenticated access without
|
|
104
|
+
* requiring an API token.
|
|
105
|
+
*
|
|
106
|
+
* @param key - The record key
|
|
107
|
+
* @returns A public URL string for accessing the record
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```javascript
|
|
111
|
+
* const url = await client.keyValueStore('my-store').getRecordPublicUrl('OUTPUT');
|
|
112
|
+
* console.log(`Public URL: ${url}`);
|
|
113
|
+
* // You can now share this URL or use it in a browser
|
|
114
|
+
* ```
|
|
32
115
|
*/
|
|
33
116
|
getRecordPublicUrl(key: string): Promise<string>;
|
|
34
117
|
/**
|
|
35
|
-
* Generates a URL
|
|
118
|
+
* Generates a public URL for accessing the list of keys in the key-value store.
|
|
36
119
|
*
|
|
37
120
|
* If the client has permission to access the key-value store's URL signing key,
|
|
38
|
-
* the URL will include a signature which
|
|
121
|
+
* the URL will include a cryptographic signature which allows access without authentication.
|
|
39
122
|
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
123
|
+
* @param options - URL generation options (extends all options from {@link listKeys})
|
|
124
|
+
* @param options.expiresInSecs - Number of seconds until the signed URL expires. If omitted, the URL never expires.
|
|
125
|
+
* @param options.limit - Maximum number of keys to return.
|
|
126
|
+
* @param options.prefix - Filter keys by prefix.
|
|
127
|
+
* @returns A public URL string for accessing the keys list
|
|
43
128
|
*
|
|
44
|
-
*
|
|
129
|
+
* @example
|
|
130
|
+
* ```javascript
|
|
131
|
+
* // Create a URL that expires in 1 hour
|
|
132
|
+
* const url = await client.keyValueStore('my-store').createKeysPublicUrl({
|
|
133
|
+
* expiresInSecs: 3600,
|
|
134
|
+
* prefix: 'image-'
|
|
135
|
+
* });
|
|
136
|
+
* console.log(`Share this URL: ${url}`);
|
|
137
|
+
* ```
|
|
45
138
|
*/
|
|
46
139
|
createKeysPublicUrl(options?: KeyValueClientCreateKeysUrlOptions): Promise<string>;
|
|
47
140
|
/**
|
|
48
141
|
* Tests whether a record with the given key exists in the key-value store without retrieving its value.
|
|
49
142
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* @
|
|
143
|
+
* This is more efficient than {@link getRecord} when you only need to check for existence.
|
|
144
|
+
*
|
|
145
|
+
* @param key - The record key to check
|
|
146
|
+
* @returns `true` if the record exists, `false` if it does not
|
|
147
|
+
* @see https://docs.apify.com/api/v2/key-value-store-record-get
|
|
148
|
+
*
|
|
149
|
+
* @example
|
|
150
|
+
* ```javascript
|
|
151
|
+
* const exists = await client.keyValueStore('my-store').recordExists('OUTPUT');
|
|
152
|
+
* if (exists) {
|
|
153
|
+
* console.log('OUTPUT record exists');
|
|
154
|
+
* }
|
|
155
|
+
* ```
|
|
53
156
|
*/
|
|
54
157
|
recordExists(key: string): Promise<boolean>;
|
|
55
158
|
/**
|
|
@@ -59,27 +162,78 @@ export declare class KeyValueStoreClient extends ResourceClient {
|
|
|
59
162
|
*
|
|
60
163
|
* When the record does not exist, the function resolves to `undefined`. It does
|
|
61
164
|
* NOT resolve to a `KeyValueStore` record with an `undefined` value.
|
|
62
|
-
*
|
|
165
|
+
*
|
|
166
|
+
* @see https://docs.apify.com/api/v2/key-value-store-record-get
|
|
63
167
|
*/
|
|
64
168
|
getRecord(key: string): Promise<KeyValueStoreRecord<JsonValue> | undefined>;
|
|
65
169
|
getRecord<Options extends KeyValueClientGetRecordOptions = KeyValueClientGetRecordOptions>(key: string, options: Options): Promise<KeyValueStoreRecord<ReturnTypeFromOptions<Options>> | undefined>;
|
|
66
170
|
/**
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
171
|
+
* Stores a record in the key-value store.
|
|
172
|
+
*
|
|
173
|
+
* The record value can be any JSON-serializable object, a string, or a Buffer/Stream.
|
|
174
|
+
* The content type is automatically determined based on the value type, but can be
|
|
175
|
+
* overridden using the `contentType` property.
|
|
176
|
+
*
|
|
177
|
+
* **Note about streams:** If the value is a stream object (has `.pipe` and `.on` methods),
|
|
178
|
+
* the upload cannot be retried on failure or follow redirects. For reliable uploads,
|
|
179
|
+
* buffer the entire stream into memory first.
|
|
180
|
+
*
|
|
181
|
+
* @param record - The record to store
|
|
182
|
+
* @param record.key - Record key (unique identifier)
|
|
183
|
+
* @param record.value - Record value (object, string, Buffer, or Stream)
|
|
184
|
+
* @param record.contentType - Optional MIME type. Auto-detected if not provided:
|
|
185
|
+
* - Objects: `'application/json; charset=utf-8'`
|
|
186
|
+
* - Strings: `'text/plain; charset=utf-8'`
|
|
187
|
+
* - Buffers/Streams: `'application/octet-stream'`
|
|
188
|
+
* @param options - Storage options
|
|
189
|
+
* @param options.timeoutSecs - Timeout for the upload in seconds. Default varies by value size.
|
|
190
|
+
* @param options.doNotRetryTimeouts - If `true`, don't retry on timeout errors. Default is `false`.
|
|
191
|
+
* @see https://docs.apify.com/api/v2/key-value-store-record-put
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```javascript
|
|
195
|
+
* // Store JSON object
|
|
196
|
+
* await client.keyValueStore('my-store').setRecord({
|
|
197
|
+
* key: 'OUTPUT',
|
|
198
|
+
* value: { crawledUrls: 100, items: [...] }
|
|
199
|
+
* });
|
|
200
|
+
*
|
|
201
|
+
* // Store text
|
|
202
|
+
* await client.keyValueStore('my-store').setRecord({
|
|
203
|
+
* key: 'README',
|
|
204
|
+
* value: 'This is my readme text',
|
|
205
|
+
* contentType: 'text/plain'
|
|
206
|
+
* });
|
|
207
|
+
*
|
|
208
|
+
* // Store binary data
|
|
209
|
+
* const imageBuffer = await fetchImageBuffer();
|
|
210
|
+
* await client.keyValueStore('my-store').setRecord({
|
|
211
|
+
* key: 'screenshot.png',
|
|
212
|
+
* value: imageBuffer,
|
|
213
|
+
* contentType: 'image/png'
|
|
214
|
+
* });
|
|
215
|
+
* ```
|
|
76
216
|
*/
|
|
77
217
|
setRecord(record: KeyValueStoreRecord<JsonValue>, options?: KeyValueStoreRecordOptions): Promise<void>;
|
|
78
218
|
/**
|
|
79
|
-
*
|
|
219
|
+
* Deletes a record from the key-value store.
|
|
220
|
+
*
|
|
221
|
+
* @param key - The record key to delete
|
|
222
|
+
* @see https://docs.apify.com/api/v2/key-value-store-record-delete
|
|
223
|
+
*
|
|
224
|
+
* @example
|
|
225
|
+
* ```javascript
|
|
226
|
+
* await client.keyValueStore('my-store').deleteRecord('temp-data');
|
|
227
|
+
* ```
|
|
80
228
|
*/
|
|
81
229
|
deleteRecord(key: string): Promise<void>;
|
|
82
230
|
}
|
|
231
|
+
/**
|
|
232
|
+
* Represents a Key-Value Store storage on the Apify platform.
|
|
233
|
+
*
|
|
234
|
+
* Key-value stores are used to store arbitrary data records or files. Each record is identified
|
|
235
|
+
* by a unique key and can contain any data - JSON objects, strings, binary files, etc.
|
|
236
|
+
*/
|
|
83
237
|
export interface KeyValueStore {
|
|
84
238
|
id: string;
|
|
85
239
|
name?: string;
|
|
@@ -96,6 +250,9 @@ export interface KeyValueStore {
|
|
|
96
250
|
urlSigningSecretKey?: string | null;
|
|
97
251
|
keysPublicUrl: string;
|
|
98
252
|
}
|
|
253
|
+
/**
|
|
254
|
+
* Statistics about Key-Value Store usage and storage.
|
|
255
|
+
*/
|
|
99
256
|
export interface KeyValueStoreStats {
|
|
100
257
|
readCount?: number;
|
|
101
258
|
writeCount?: number;
|
|
@@ -103,11 +260,17 @@ export interface KeyValueStoreStats {
|
|
|
103
260
|
listCount?: number;
|
|
104
261
|
storageBytes?: number;
|
|
105
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* Options for updating a Key-Value Store.
|
|
265
|
+
*/
|
|
106
266
|
export interface KeyValueClientUpdateOptions {
|
|
107
267
|
name?: string | null;
|
|
108
268
|
title?: string;
|
|
109
269
|
generalAccess?: STORAGE_GENERAL_ACCESS | null;
|
|
110
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
* Options for listing keys in a Key-Value Store.
|
|
273
|
+
*/
|
|
111
274
|
export interface KeyValueClientListKeysOptions {
|
|
112
275
|
limit?: number;
|
|
113
276
|
exclusiveStartKey?: string;
|
|
@@ -115,9 +278,19 @@ export interface KeyValueClientListKeysOptions {
|
|
|
115
278
|
prefix?: string;
|
|
116
279
|
signature?: string;
|
|
117
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* Options for creating a public URL to list keys in a Key-Value Store.
|
|
283
|
+
*
|
|
284
|
+
* Extends {@link KeyValueClientListKeysOptions} with URL expiration control.
|
|
285
|
+
*/
|
|
118
286
|
export interface KeyValueClientCreateKeysUrlOptions extends KeyValueClientListKeysOptions {
|
|
119
287
|
expiresInSecs?: number;
|
|
120
288
|
}
|
|
289
|
+
/**
|
|
290
|
+
* Result of listing keys in a Key-Value Store.
|
|
291
|
+
*
|
|
292
|
+
* Contains paginated list of keys with metadata and pagination information.
|
|
293
|
+
*/
|
|
121
294
|
export interface KeyValueClientListKeysResult {
|
|
122
295
|
count: number;
|
|
123
296
|
limit: number;
|
|
@@ -126,24 +299,44 @@ export interface KeyValueClientListKeysResult {
|
|
|
126
299
|
nextExclusiveStartKey: string;
|
|
127
300
|
items: KeyValueListItem[];
|
|
128
301
|
}
|
|
302
|
+
/**
|
|
303
|
+
* Metadata about a single key in a Key-Value Store.
|
|
304
|
+
*/
|
|
129
305
|
export interface KeyValueListItem {
|
|
130
306
|
key: string;
|
|
131
307
|
size: number;
|
|
132
308
|
recordPublicUrl: string;
|
|
133
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Options for retrieving a record from a Key-Value Store.
|
|
312
|
+
*/
|
|
134
313
|
export interface KeyValueClientGetRecordOptions {
|
|
135
314
|
buffer?: boolean;
|
|
136
315
|
stream?: boolean;
|
|
137
316
|
signature?: string;
|
|
138
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* Represents a record (key-value pair) in a Key-Value Store.
|
|
320
|
+
*
|
|
321
|
+
* @template T - The type of the record's value
|
|
322
|
+
*/
|
|
139
323
|
export interface KeyValueStoreRecord<T> {
|
|
140
324
|
key: string;
|
|
141
325
|
value: T;
|
|
142
326
|
contentType?: string;
|
|
143
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Options for storing a record in a Key-Value Store.
|
|
330
|
+
*/
|
|
144
331
|
export interface KeyValueStoreRecordOptions {
|
|
145
332
|
timeoutSecs?: number;
|
|
146
333
|
doNotRetryTimeouts?: boolean;
|
|
147
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
* Helper type to determine the return type based on getRecord options.
|
|
337
|
+
*
|
|
338
|
+
* Returns Readable if stream option is true, Buffer if buffer option is true,
|
|
339
|
+
* otherwise returns JsonValue.
|
|
340
|
+
*/
|
|
148
341
|
export type ReturnTypeFromOptions<Options extends KeyValueClientGetRecordOptions> = Options['stream'] extends true ? Readable : Options['buffer'] extends true ? Buffer : JsonValue;
|
|
149
342
|
//# sourceMappingURL=key_value_store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key_value_store.d.ts","sourceRoot":"","sources":["../../src/resource_clients/key_value_store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAK5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAGH,cAAc,EAEjB,MAAM,yBAAyB,CAAC;AAajC,qBAAa,mBAAoB,SAAQ,cAAc;IACnD;;OAEG;gBACS,OAAO,EAAE,2BAA2B;IAOhD
|
|
1
|
+
{"version":3,"file":"key_value_store.d.ts","sourceRoot":"","sources":["../../src/resource_clients/key_value_store.ts"],"names":[],"mappings":"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"}
|