apify-client 3.0.0-beta.2 → 3.0.0-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +3 -1
  2. package/dist/apify_api_error.d.ts +60 -19
  3. package/dist/apify_api_error.js +88 -21
  4. package/dist/apify_client.d.ts +22 -3
  5. package/dist/apify_client.js +35 -29
  6. package/dist/base/api_client.d.ts +6 -6
  7. package/dist/base/api_client.js +24 -16
  8. package/dist/base/resource_client.d.ts +23 -9
  9. package/dist/base/resource_client.js +49 -25
  10. package/dist/base/resource_collection_client.d.ts +7 -4
  11. package/dist/base/resource_collection_client.js +21 -15
  12. package/dist/bundle.js +38 -48
  13. package/dist/bundle.js.map +1 -1
  14. package/dist/generated/api.d.ts +287 -214
  15. package/dist/generated/schemas.d.ts +6699 -0
  16. package/dist/generated/schemas.js +1521 -0
  17. package/dist/http_client.d.ts +18 -51
  18. package/dist/http_client.js +79 -42
  19. package/dist/index.d.ts +3 -1
  20. package/dist/index.js +2 -1
  21. package/dist/interceptors.js +22 -4
  22. package/dist/lazy_schema.d.ts +8 -0
  23. package/dist/lazy_schema.js +11 -0
  24. package/dist/models.d.ts +32 -52
  25. package/dist/resource_clients/actor.d.ts +46 -31
  26. package/dist/resource_clients/actor.js +71 -53
  27. package/dist/resource_clients/actor_collection.d.ts +9 -5
  28. package/dist/resource_clients/actor_collection.js +12 -3
  29. package/dist/resource_clients/actor_env_var.d.ts +10 -3
  30. package/dist/resource_clients/actor_env_var.js +17 -6
  31. package/dist/resource_clients/actor_env_var_collection.d.ts +14 -18
  32. package/dist/resource_clients/actor_env_var_collection.js +18 -11
  33. package/dist/resource_clients/actor_version.d.ts +18 -3
  34. package/dist/resource_clients/actor_version.js +20 -9
  35. package/dist/resource_clients/actor_version_collection.d.ts +16 -17
  36. package/dist/resource_clients/actor_version_collection.js +20 -11
  37. package/dist/resource_clients/build.d.ts +18 -6
  38. package/dist/resource_clients/build.js +35 -17
  39. package/dist/resource_clients/build_collection.d.ts +3 -1
  40. package/dist/resource_clients/build_collection.js +5 -1
  41. package/dist/resource_clients/dataset.d.ts +23 -9
  42. package/dist/resource_clients/dataset.js +70 -48
  43. package/dist/resource_clients/dataset_collection.d.ts +6 -2
  44. package/dist/resource_clients/dataset_collection.js +13 -2
  45. package/dist/resource_clients/key_value_store.d.ts +48 -15
  46. package/dist/resource_clients/key_value_store.js +69 -39
  47. package/dist/resource_clients/key_value_store_collection.d.ts +6 -2
  48. package/dist/resource_clients/key_value_store_collection.js +13 -2
  49. package/dist/resource_clients/log.d.ts +9 -19
  50. package/dist/resource_clients/log.js +55 -44
  51. package/dist/resource_clients/request_queue.d.ts +56 -26
  52. package/dist/resource_clients/request_queue.js +178 -113
  53. package/dist/resource_clients/request_queue_collection.d.ts +6 -2
  54. package/dist/resource_clients/request_queue_collection.js +10 -3
  55. package/dist/resource_clients/run.d.ts +51 -17
  56. package/dist/resource_clients/run.js +83 -43
  57. package/dist/resource_clients/run_collection.d.ts +3 -1
  58. package/dist/resource_clients/run_collection.js +5 -1
  59. package/dist/resource_clients/schedule.d.ts +16 -7
  60. package/dist/resource_clients/schedule.js +31 -21
  61. package/dist/resource_clients/schedule_collection.d.ts +6 -2
  62. package/dist/resource_clients/schedule_collection.js +10 -3
  63. package/dist/resource_clients/store_collection.d.ts +3 -1
  64. package/dist/resource_clients/store_collection.js +5 -1
  65. package/dist/resource_clients/task.d.ts +28 -10
  66. package/dist/resource_clients/task.js +67 -44
  67. package/dist/resource_clients/task_collection.d.ts +6 -2
  68. package/dist/resource_clients/task_collection.js +10 -3
  69. package/dist/resource_clients/user.d.ts +17 -8
  70. package/dist/resource_clients/user.js +40 -39
  71. package/dist/resource_clients/webhook.d.ts +14 -5
  72. package/dist/resource_clients/webhook.js +30 -22
  73. package/dist/resource_clients/webhook_collection.d.ts +6 -2
  74. package/dist/resource_clients/webhook_collection.js +10 -3
  75. package/dist/resource_clients/webhook_dispatch.d.ts +4 -1
  76. package/dist/resource_clients/webhook_dispatch.js +8 -2
  77. package/dist/resource_clients/webhook_dispatch_collection.d.ts +3 -1
  78. package/dist/resource_clients/webhook_dispatch_collection.js +5 -1
  79. package/dist/response_validation_error.d.ts +26 -0
  80. package/dist/response_validation_error.js +37 -0
  81. package/dist/schemas.d.ts +15 -0
  82. package/dist/schemas.js +15 -0
  83. package/dist/statistics.d.ts +1 -6
  84. package/dist/statistics.js +2 -2
  85. package/dist/timeouts.d.ts +72 -0
  86. package/dist/timeouts.js +31 -0
  87. package/dist/utils.d.ts +57 -41
  88. package/dist/utils.js +155 -121
  89. package/package.json +36 -35
  90. package/dist/argument_validation_error.d.ts +0 -17
  91. package/dist/argument_validation_error.js +0 -153
@@ -1,5 +1,7 @@
1
1
  import { ResourceClient } from '../base/resource_client.js';
2
- import { cast, catchNotFoundOrThrow, parseDateFields, pluckData } from '../utils.js';
2
+ import * as schemas from '../schemas.js';
3
+ import { timeoutOptionsSchema } from '../timeouts.js';
4
+ import { parseArgument, parseResponse } from '../utils.js';
3
5
  export { PlatformFeature } from '../models.js';
4
6
  /**
5
7
  * Client for managing user account information.
@@ -41,71 +43,70 @@ export class UserClient extends ResourceClient {
41
43
  * Depending on whether ApifyClient was created with a token,
42
44
  * the method will either return public or private user data.
43
45
  *
44
- * @returns The user object.
46
+ * @param options - Request options
47
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
48
+ * @returns The user object, or `undefined` if it does not exist.
45
49
  * @see https://docs.apify.com/api/v2/user-get
46
50
  */
47
- async get() {
48
- return this._get();
51
+ async get(options = {}) {
52
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
53
+ return this.getResource(schemas.UserPrivateInfo(), {}, timeoutSecs);
49
54
  }
50
55
  /**
51
56
  * Retrieves the user's monthly usage data.
52
57
  *
53
- * @returns The monthly usage object, or `undefined` if it does not exist.
58
+ * @param options - Request options
59
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
60
+ * @returns The monthly usage object.
54
61
  * @see https://docs.apify.com/api/v2/users-me-usage-monthly-get
55
62
  * @since Added in 2.9.2
56
63
  */
57
- async monthlyUsage() {
58
- const requestOpts = {
59
- url: this._url('usage/monthly'),
64
+ async monthlyUsage(options = {}) {
65
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
66
+ const response = await this.httpClient.call({
67
+ url: this.buildUrl('usage/monthly'),
60
68
  method: 'GET',
61
- params: this._params(),
62
- };
63
- try {
64
- const response = await this.httpClient.call(requestOpts);
65
- return cast(parseDateFields(pluckData(response.data),
66
- // Convert monthlyUsage.dailyServiceUsages[].date to Date (by default it's ignored by parseDateFields)
67
- /* shouldParseField = */ (key) => key === 'date'));
68
- }
69
- catch (err) {
70
- catchNotFoundOrThrow(err);
71
- }
72
- return undefined;
69
+ params: this.buildParams(),
70
+ timeoutSecs,
71
+ });
72
+ return parseResponse(response, schemas.MonthlyUsage());
73
73
  }
74
74
  /**
75
75
  * Retrieves the user's account and usage limits.
76
76
  *
77
- * @returns The account and usage limits object, or `undefined` if it does not exist.
77
+ * @param options - Request options
78
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
79
+ * @returns The account and usage limits object.
78
80
  * @see https://docs.apify.com/api/v2/users-me-limits-get
79
81
  * @since Added in 2.9.2
80
82
  */
81
- async limits() {
82
- const requestOpts = {
83
- url: this._url('limits'),
83
+ async limits(options = {}) {
84
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
85
+ const response = await this.httpClient.call({
86
+ url: this.buildUrl('limits'),
84
87
  method: 'GET',
85
- params: this._params(),
86
- };
87
- try {
88
- const response = await this.httpClient.call(requestOpts);
89
- return cast(parseDateFields(pluckData(response.data)));
90
- }
91
- catch (err) {
92
- catchNotFoundOrThrow(err);
93
- }
94
- return undefined;
88
+ params: this.buildParams(),
89
+ timeoutSecs,
90
+ });
91
+ return parseResponse(response, schemas.AccountLimits());
95
92
  }
96
93
  /**
97
94
  * Updates the user's account and usage limits.
98
95
  *
99
- * @param options - The new limits to set.
96
+ * @param newLimits - The new limits to set.
97
+ * @param options - Request options
98
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
100
99
  * @see https://docs.apify.com/api/v2/users-me-limits-put
101
100
  * @since Added in 2.10.0
102
101
  */
103
- async updateLimits(options) {
102
+ async updateLimits(newLimits, options = {}) {
103
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
104
104
  const requestOpts = {
105
- url: this._url('limits'),
105
+ url: this.buildUrl('limits'),
106
106
  method: 'PUT',
107
- params: this._params(),
108
- data: options,
107
+ params: this.buildParams(),
108
+ data: newLimits,
109
+ timeoutSecs,
109
110
  };
110
111
  await this.httpClient.call(requestOpts);
111
112
  }
@@ -1,6 +1,7 @@
1
1
  import type { ApiClientSubResourceOptions } from '../base/api_client.js';
2
2
  import { ResourceClient } from '../base/resource_client.js';
3
3
  import type { Webhook, WebhookEventType } from '../models.js';
4
+ import type { TimeoutOptions } from '../timeouts.js';
4
5
  import type { WebhookDispatch } from './webhook_dispatch.js';
5
6
  import { WebhookDispatchCollectionClient } from './webhook_dispatch_collection.js';
6
7
  export type { Webhook, WebhookAnyRunOfActorCondition, WebhookAnyRunOfActorTaskCondition, WebhookCertainRunCondition, WebhookCondition, WebhookEventType, WebhookLastDispatch, WebhookStats, } from '../models.js';
@@ -40,31 +41,39 @@ export declare class WebhookClient extends ResourceClient {
40
41
  /**
41
42
  * Retrieves the webhook.
42
43
  *
44
+ * @param options - Request options
45
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
43
46
  * @returns The webhook object, or `undefined` if it does not exist.
44
47
  * @see https://docs.apify.com/api/v2/webhook-get
45
48
  */
46
- get(): Promise<Webhook | undefined>;
49
+ get(options?: TimeoutOptions): Promise<Webhook | undefined>;
47
50
  /**
48
51
  * Updates the webhook with the specified fields.
49
52
  *
50
53
  * @param newFields - Fields to update.
54
+ * @param options - Request options
55
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
51
56
  * @returns The updated webhook object.
52
57
  * @see https://docs.apify.com/api/v2/webhook-put
53
58
  */
54
- update(newFields: WebhookUpdateData): Promise<Webhook>;
59
+ update(newFields: WebhookUpdateData, options?: TimeoutOptions): Promise<Webhook>;
55
60
  /**
56
61
  * Deletes the webhook.
57
62
  *
63
+ * @param options - Request options
64
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
58
65
  * @see https://docs.apify.com/api/v2/webhook-delete
59
66
  */
60
- delete(): Promise<void>;
67
+ delete(options?: TimeoutOptions): Promise<void>;
61
68
  /**
62
69
  * Tests the webhook by dispatching a test event.
63
70
  *
64
- * @returns The webhook dispatch object, or `undefined` if the test fails.
71
+ * @param options - Request options
72
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'medium'`.
73
+ * @returns The webhook dispatch object.
65
74
  * @see https://docs.apify.com/api/v2/webhook-test-post
66
75
  */
67
- test(): Promise<WebhookDispatch | undefined>;
76
+ test(options?: TimeoutOptions): Promise<WebhookDispatch>;
68
77
  /**
69
78
  * Returns a client for the dispatches of this webhook.
70
79
  *
@@ -1,5 +1,7 @@
1
1
  import { ResourceClient } from '../base/resource_client.js';
2
- import { anyObjectSchema, cast, catchNotFoundOrThrow, parseArgument, parseDateFields, pluckData } from '../utils.js';
2
+ import * as schemas from '../schemas.js';
3
+ import { timeoutOptionsSchema } from '../timeouts.js';
4
+ import { anyObjectSchema, parseArgument, parseResponse } from '../utils.js';
3
5
  import { WebhookDispatchCollectionClient } from './webhook_dispatch_collection.js';
4
6
  /**
5
7
  * Client for managing a specific webhook.
@@ -42,51 +44,57 @@ export class WebhookClient extends ResourceClient {
42
44
  /**
43
45
  * Retrieves the webhook.
44
46
  *
47
+ * @param options - Request options
48
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
45
49
  * @returns The webhook object, or `undefined` if it does not exist.
46
50
  * @see https://docs.apify.com/api/v2/webhook-get
47
51
  */
48
- async get() {
49
- return this._get();
52
+ async get(options = {}) {
53
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
54
+ return this.getResource(schemas.Webhook(), {}, timeoutSecs);
50
55
  }
51
56
  /**
52
57
  * Updates the webhook with the specified fields.
53
58
  *
54
59
  * @param newFields - Fields to update.
60
+ * @param options - Request options
61
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
55
62
  * @returns The updated webhook object.
56
63
  * @see https://docs.apify.com/api/v2/webhook-put
57
64
  */
58
- async update(newFields) {
65
+ async update(newFields, options = {}) {
59
66
  parseArgument(newFields, anyObjectSchema);
60
- return this._update(newFields);
67
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
68
+ return this.updateResource(schemas.Webhook(), newFields, timeoutSecs);
61
69
  }
62
70
  /**
63
71
  * Deletes the webhook.
64
72
  *
73
+ * @param options - Request options
74
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
65
75
  * @see https://docs.apify.com/api/v2/webhook-delete
66
76
  */
67
- async delete() {
68
- return this._delete();
77
+ async delete(options = {}) {
78
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
79
+ return this.deleteResource(timeoutSecs);
69
80
  }
70
81
  /**
71
82
  * Tests the webhook by dispatching a test event.
72
83
  *
73
- * @returns The webhook dispatch object, or `undefined` if the test fails.
84
+ * @param options - Request options
85
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'medium'`.
86
+ * @returns The webhook dispatch object.
74
87
  * @see https://docs.apify.com/api/v2/webhook-test-post
75
88
  */
76
- async test() {
77
- const request = {
78
- url: this._url('test'),
89
+ async test(options = {}) {
90
+ const { timeoutSecs = 'medium' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
91
+ const response = await this.httpClient.call({
92
+ url: this.buildUrl('test'),
79
93
  method: 'POST',
80
- params: this._params(),
81
- };
82
- try {
83
- const response = await this.httpClient.call(request);
84
- return cast(parseDateFields(pluckData(response.data)));
85
- }
86
- catch (err) {
87
- catchNotFoundOrThrow(err);
88
- }
89
- return undefined;
94
+ params: this.buildParams(),
95
+ timeoutSecs,
96
+ });
97
+ return parseResponse(response, schemas.WebhookDispatch());
90
98
  }
91
99
  /**
92
100
  * Returns a client for the dispatches of this webhook.
@@ -95,7 +103,7 @@ export class WebhookClient extends ResourceClient {
95
103
  * @see https://docs.apify.com/api/v2/webhook-webhook-dispatches-get
96
104
  */
97
105
  dispatches() {
98
- return new WebhookDispatchCollectionClient(this._subResourceOptions({
106
+ return new WebhookDispatchCollectionClient(this.subResourceOptions({
99
107
  resourcePath: 'dispatches',
100
108
  }));
101
109
  }
@@ -1,5 +1,6 @@
1
1
  import type { ApiClientSubResourceOptions } from '../base/api_client.js';
2
2
  import { ResourceCollectionClient } from '../base/resource_collection_client.js';
3
+ import type { TimeoutOptions } from '../timeouts.js';
3
4
  import type { PaginatedIterator, PaginationOptions } from '../utils.js';
4
5
  import type { Webhook, WebhookUpdateData } from './webhook.js';
5
6
  /**
@@ -47,6 +48,7 @@ export declare class WebhookCollectionClient extends ResourceCollectionClient {
47
48
  * ```
48
49
  *
49
50
  * @param options - Pagination and sorting options.
51
+ * @param options.timeoutSecs - Timeout for each API request. Default is `'medium'`.
50
52
  * @returns A paginated iterator of webhooks.
51
53
  * @see https://docs.apify.com/api/v2/webhooks-get
52
54
  */
@@ -55,11 +57,13 @@ export declare class WebhookCollectionClient extends ResourceCollectionClient {
55
57
  * Creates a new webhook.
56
58
  *
57
59
  * @param webhook - The webhook data.
60
+ * @param options - Request options
61
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
58
62
  * @returns The created webhook object.
59
63
  * @see https://docs.apify.com/api/v2/webhooks-post
60
64
  */
61
- create(webhook?: WebhookUpdateData): Promise<Webhook>;
65
+ create(webhook?: WebhookUpdateData, options?: TimeoutOptions): Promise<Webhook>;
62
66
  }
63
- export interface WebhookCollectionListOptions extends PaginationOptions {
67
+ export interface WebhookCollectionListOptions extends PaginationOptions, TimeoutOptions {
64
68
  desc?: boolean;
65
69
  }
@@ -1,9 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import { ResourceCollectionClient } from '../base/resource_collection_client.js';
3
+ import * as schemas from '../schemas.js';
4
+ import { timeoutOptionsSchema, timeoutOptionsShape } from '../timeouts.js';
3
5
  import { anyObjectSchema, paginationOptionsShape, parseArgument } from '../utils.js';
4
6
  const listOptionsSchema = z.strictObject({
5
7
  ...paginationOptionsShape,
6
8
  desc: z.boolean().optional(),
9
+ ...timeoutOptionsShape,
7
10
  });
8
11
  const webhookCreateSchema = anyObjectSchema.optional();
9
12
  /**
@@ -56,22 +59,26 @@ export class WebhookCollectionClient extends ResourceCollectionClient {
56
59
  * ```
57
60
  *
58
61
  * @param options - Pagination and sorting options.
62
+ * @param options.timeoutSecs - Timeout for each API request. Default is `'medium'`.
59
63
  * @returns A paginated iterator of webhooks.
60
64
  * @see https://docs.apify.com/api/v2/webhooks-get
61
65
  */
62
66
  list(options = {}) {
63
67
  const parsed = parseArgument(options, listOptionsSchema, 'WebhookCollectionListOptions');
64
- return this._listPaginated(parsed);
68
+ return this.listResourcesPaginated(schemas.ListOfWebhooks(), parsed, 'medium');
65
69
  }
66
70
  /**
67
71
  * Creates a new webhook.
68
72
  *
69
73
  * @param webhook - The webhook data.
74
+ * @param options - Request options
75
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
70
76
  * @returns The created webhook object.
71
77
  * @see https://docs.apify.com/api/v2/webhooks-post
72
78
  */
73
- async create(webhook) {
79
+ async create(webhook, options = {}) {
74
80
  parseArgument(webhook, webhookCreateSchema);
75
- return this._create(webhook);
81
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
82
+ return this.createResource(schemas.Webhook(), webhook, timeoutSecs);
76
83
  }
77
84
  }
@@ -1,6 +1,7 @@
1
1
  import type { ApiClientSubResourceOptions } from '../base/api_client.js';
2
2
  import { ResourceClient } from '../base/resource_client.js';
3
3
  import type { WebhookDispatch } from '../models.js';
4
+ import type { TimeoutOptions } from '../timeouts.js';
4
5
  export type { WebhookDispatch, WebhookDispatchCall, WebhookDispatchEventData, WebhookDispatchWebhookSummary, } from '../models.js';
5
6
  export { WebhookDispatchStatus } from '../models.js';
6
7
  /**
@@ -29,8 +30,10 @@ export declare class WebhookDispatchClient extends ResourceClient {
29
30
  /**
30
31
  * Retrieves the webhook dispatch.
31
32
  *
33
+ * @param options - Request options
34
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
32
35
  * @returns The webhook dispatch object, or `undefined` if it does not exist.
33
36
  * @see https://docs.apify.com/api/v2/webhook-dispatch-get
34
37
  */
35
- get(): Promise<WebhookDispatch | undefined>;
38
+ get(options?: TimeoutOptions): Promise<WebhookDispatch | undefined>;
36
39
  }
@@ -1,4 +1,7 @@
1
1
  import { ResourceClient } from '../base/resource_client.js';
2
+ import * as schemas from '../schemas.js';
3
+ import { timeoutOptionsSchema } from '../timeouts.js';
4
+ import { parseArgument } from '../utils.js';
2
5
  export { WebhookDispatchStatus } from '../models.js';
3
6
  /**
4
7
  * Client for managing a specific webhook dispatch.
@@ -31,10 +34,13 @@ export class WebhookDispatchClient extends ResourceClient {
31
34
  /**
32
35
  * Retrieves the webhook dispatch.
33
36
  *
37
+ * @param options - Request options
38
+ * @param options.timeoutSecs - Timeout for the API request. Default is `'short'`.
34
39
  * @returns The webhook dispatch object, or `undefined` if it does not exist.
35
40
  * @see https://docs.apify.com/api/v2/webhook-dispatch-get
36
41
  */
37
- async get() {
38
- return this._get();
42
+ async get(options = {}) {
43
+ const { timeoutSecs = 'short' } = parseArgument(options, timeoutOptionsSchema, 'TimeoutOptions');
44
+ return this.getResource(schemas.WebhookDispatch(), {}, timeoutSecs);
39
45
  }
40
46
  }
@@ -1,5 +1,6 @@
1
1
  import type { ApiClientSubResourceOptions } from '../base/api_client.js';
2
2
  import { ResourceCollectionClient } from '../base/resource_collection_client.js';
3
+ import type { TimeoutOptions } from '../timeouts.js';
3
4
  import type { PaginatedIterator, PaginationOptions } from '../utils.js';
4
5
  import type { WebhookDispatch } from './webhook_dispatch.js';
5
6
  /**
@@ -42,11 +43,12 @@ export declare class WebhookDispatchCollectionClient extends ResourceCollectionC
42
43
  * ```
43
44
  *
44
45
  * @param options - Pagination and sorting options.
46
+ * @param options.timeoutSecs - Timeout for each API request. Default is `'medium'`.
45
47
  * @returns A paginated iterator of webhook dispatches.
46
48
  * @see https://docs.apify.com/api/v2/webhook-dispatches-get
47
49
  */
48
50
  list(options?: WebhookDispatchCollectionListOptions): PaginatedIterator<WebhookDispatch>;
49
51
  }
50
- export interface WebhookDispatchCollectionListOptions extends PaginationOptions {
52
+ export interface WebhookDispatchCollectionListOptions extends PaginationOptions, TimeoutOptions {
51
53
  desc?: boolean;
52
54
  }
@@ -1,9 +1,12 @@
1
1
  import { z } from 'zod';
2
2
  import { ResourceCollectionClient } from '../base/resource_collection_client.js';
3
+ import * as schemas from '../schemas.js';
4
+ import { timeoutOptionsShape } from '../timeouts.js';
3
5
  import { paginationOptionsShape, parseArgument } from '../utils.js';
4
6
  const listOptionsSchema = z.strictObject({
5
7
  ...paginationOptionsShape,
6
8
  desc: z.boolean().optional(),
9
+ ...timeoutOptionsShape,
7
10
  });
8
11
  /**
9
12
  * Client for managing the collection of webhook dispatches.
@@ -50,11 +53,12 @@ export class WebhookDispatchCollectionClient extends ResourceCollectionClient {
50
53
  * ```
51
54
  *
52
55
  * @param options - Pagination and sorting options.
56
+ * @param options.timeoutSecs - Timeout for each API request. Default is `'medium'`.
53
57
  * @returns A paginated iterator of webhook dispatches.
54
58
  * @see https://docs.apify.com/api/v2/webhook-dispatches-get
55
59
  */
56
60
  list(options = {}) {
57
61
  const parsed = parseArgument(options, listOptionsSchema, 'WebhookDispatchCollectionListOptions');
58
- return this._listPaginated(parsed);
62
+ return this.listResourcesPaginated(schemas.ListOfWebhookDispatches(), parsed, 'medium');
59
63
  }
60
64
  }
@@ -0,0 +1,26 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * Thrown when an API response does not match the schema the client expects for it.
4
+ *
5
+ * The schemas are generated from the Apify OpenAPI specification, so this error means the API returned
6
+ * something the specification does not describe -- a missing required field, a different type, a value
7
+ * outside the documented range. Unknown fields and unknown enum values are not errors: the schemas let
8
+ * both through, so the client keeps working when the API grows.
9
+ *
10
+ * The `message` names the request and every offending field with the value it received, and ends by asking for
11
+ * a bug report: the mismatch is in the API or its specification, not in the caller's code. The structured
12
+ * {@link https://zod.dev | zod} issues are available on `issues`, and the original `ZodError` on `cause`,
13
+ * for programmatic inspection.
14
+ */
15
+ export declare class ResponseValidationError extends Error {
16
+ /** Structured issues from the underlying schema check. */
17
+ readonly issues: z.ZodError['issues'];
18
+ /** HTTP method of the request whose response failed validation, upper-cased. */
19
+ readonly method: string;
20
+ /** URL of the request whose response failed validation, without its query string. */
21
+ readonly url: string;
22
+ constructor(error: z.ZodError, value: unknown, request: {
23
+ method: string;
24
+ url: string;
25
+ });
26
+ }
@@ -0,0 +1,37 @@
1
+ import { ArgumentValidationError } from '@apify/validations';
2
+ const REPORT_HINT = 'The API returned something its OpenAPI specification does not describe. ' +
3
+ 'Please report this at https://github.com/apify/apify-client-js/issues.';
4
+ /**
5
+ * Thrown when an API response does not match the schema the client expects for it.
6
+ *
7
+ * The schemas are generated from the Apify OpenAPI specification, so this error means the API returned
8
+ * something the specification does not describe -- a missing required field, a different type, a value
9
+ * outside the documented range. Unknown fields and unknown enum values are not errors: the schemas let
10
+ * both through, so the client keeps working when the API grows.
11
+ *
12
+ * The `message` names the request and every offending field with the value it received, and ends by asking for
13
+ * a bug report: the mismatch is in the API or its specification, not in the caller's code. The structured
14
+ * {@link https://zod.dev | zod} issues are available on `issues`, and the original `ZodError` on `cause`,
15
+ * for programmatic inspection.
16
+ */
17
+ export class ResponseValidationError extends Error {
18
+ /** Structured issues from the underlying schema check. */
19
+ issues;
20
+ /** HTTP method of the request whose response failed validation, upper-cased. */
21
+ method;
22
+ /** URL of the request whose response failed validation, without its query string. */
23
+ url;
24
+ constructor(error, value, request) {
25
+ const method = request.method.toUpperCase();
26
+ // `@apify/validations` keeps its zod error formatter private, so the issue lines come from the
27
+ // message of the error class it does export.
28
+ const details = new ArgumentValidationError(error, value).message;
29
+ super(`Response from ${method} ${request.url} does not match the API schema:\n${details}\n${REPORT_HINT}`, {
30
+ cause: error,
31
+ });
32
+ this.name = 'ResponseValidationError';
33
+ this.issues = error.issues;
34
+ this.method = method;
35
+ this.url = request.url;
36
+ }
37
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The schemas the resource clients validate API responses with.
3
+ *
4
+ * Today these are exactly the generated ones. The module still exists as the one place where a generated
5
+ * schema is widened when the API is known to return something the specification does not describe, so a
6
+ * documented deviation never sends a resource client reaching into `./generated` directly. An override
7
+ * declared here shadows the generated export of the same name and takes the same form, a `lazySchema()` thunk
8
+ * built on the generated schema it replaces. Every schema that embeds an overridden one has to be rebuilt on
9
+ * top of it, and `spec_guards.ts` checks that each override still produces what the specification describes,
10
+ * so one cannot narrow by accident.
11
+ *
12
+ * Spec gaps need no override: the generated objects are loose, so a field the specification omits passes
13
+ * through. Neither do client narrowings: a schema only ever accepts more than the published type.
14
+ */
15
+ export * from './generated/schemas.js';
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The schemas the resource clients validate API responses with.
3
+ *
4
+ * Today these are exactly the generated ones. The module still exists as the one place where a generated
5
+ * schema is widened when the API is known to return something the specification does not describe, so a
6
+ * documented deviation never sends a resource client reaching into `./generated` directly. An override
7
+ * declared here shadows the generated export of the same name and takes the same form, a `lazySchema()` thunk
8
+ * built on the generated schema it replaces. Every schema that embeds an overridden one has to be rebuilt on
9
+ * top of it, and `spec_guards.ts` checks that each override still produces what the specification describes,
10
+ * so one cannot narrow by accident.
11
+ *
12
+ * Spec gaps need no override: the generated objects are loose, so a field the specification omits passes
13
+ * through. Neither do client narrowings: a schema only ever accepts more than the published type.
14
+ */
15
+ export * from './generated/schemas.js';
@@ -1,4 +1,5 @@
1
1
  export declare class Statistics {
2
+ #private;
2
3
  /**
3
4
  * Number of Apify client function calls
4
5
  */
@@ -13,10 +14,4 @@ export declare class Statistics {
13
14
  */
14
15
  rateLimitErrors: number[];
15
16
  addRateLimitError(attempt: number): void;
16
- /**
17
- * Removes the necessity to pre-initialize array with correct
18
- * number of zeroes by dynamically filling the empty indexes
19
- * when necessary.
20
- */
21
- private _fillBlanksWithZeroes;
22
17
  }
@@ -20,7 +20,7 @@ export class Statistics {
20
20
  // attempt is never 0,
21
21
  // but we don't want index 0 empty
22
22
  const index = attempt - 1;
23
- this._fillBlanksWithZeroes(index);
23
+ this.#fillBlanksWithZeroes(index);
24
24
  this.rateLimitErrors[index]++;
25
25
  }
26
26
  /**
@@ -28,7 +28,7 @@ export class Statistics {
28
28
  * number of zeroes by dynamically filling the empty indexes
29
29
  * when necessary.
30
30
  */
31
- _fillBlanksWithZeroes(inclusiveIndex) {
31
+ #fillBlanksWithZeroes(inclusiveIndex) {
32
32
  if (this.rateLimitErrors.length <= inclusiveIndex) {
33
33
  for (let k = 0; k <= inclusiveIndex; k++) {
34
34
  if (typeof this.rateLimitErrors[k] !== 'number') {
@@ -0,0 +1,72 @@
1
+ import { z } from 'zod';
2
+ /** Default duration of the `short` timeout tier, in seconds. */
3
+ export declare const DEFAULT_TIMEOUT_SHORT_SECS = 5;
4
+ /** Default duration of the `medium` timeout tier, in seconds. */
5
+ export declare const DEFAULT_TIMEOUT_MEDIUM_SECS = 30;
6
+ /** Default duration of the `long` timeout tier, in seconds. */
7
+ export declare const DEFAULT_TIMEOUT_LONG_SECS = 360;
8
+ /** Default cap on the timeout of a single request attempt, in seconds. */
9
+ export declare const DEFAULT_TIMEOUT_MAX_SECS = 360;
10
+ /**
11
+ * Preconfigured timeout tiers. Every client method picks the tier that fits the expected duration of its
12
+ * request: `short` for simple metadata reads and writes, `medium` for listing, batch and trigger operations,
13
+ * `long` for downloads, uploads and streaming. The duration of each tier is set on the {@link ApifyClient}
14
+ * constructor.
15
+ */
16
+ export type TimeoutTier = 'short' | 'medium' | 'long';
17
+ /**
18
+ * Timeout of a single API request.
19
+ *
20
+ * A tier name picks the duration configured for that tier on the {@link ApifyClient} constructor, a number is
21
+ * an exact duration in seconds, and `'noTimeout'` lets the request run for as long as it takes. A tier or an
22
+ * explicit duration above `timeoutMaxSecs` is capped at it, and the client logs a warning when that happens.
23
+ * The timeout applies to each attempt separately, and doubles with every retry up to the same cap.
24
+ *
25
+ * With `'noTimeout'` the client never aborts the request, so a connection that stalls is not retried either.
26
+ */
27
+ export type Timeout = TimeoutTier | 'noTimeout' | number;
28
+ /**
29
+ * Options shared by every method that sends a request to the API.
30
+ */
31
+ export interface TimeoutOptions {
32
+ /**
33
+ * Timeout for the API request: a tier name (`'short'`, `'medium'`, `'long'`), a number of seconds, or
34
+ * `'noTimeout'`. Defaults to the tier the method is assigned, which its documentation names.
35
+ */
36
+ timeoutSecs?: Timeout;
37
+ }
38
+ /**
39
+ * Schema of {@link Timeout}, optional, for the methods that validate `timeoutSecs` on its own.
40
+ * @internal
41
+ */
42
+ export declare const optionalTimeoutSchema: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
43
+ short: "short";
44
+ medium: "medium";
45
+ long: "long";
46
+ noTimeout: "noTimeout";
47
+ }>, z.ZodNumber]>>;
48
+ /**
49
+ * Schema shape of {@link TimeoutOptions}, to spread into the option schema of every method that sends a
50
+ * request. One copy stops it drifting from the interface.
51
+ * @internal
52
+ */
53
+ export declare const timeoutOptionsShape: {
54
+ timeoutSecs: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
55
+ short: "short";
56
+ medium: "medium";
57
+ long: "long";
58
+ noTimeout: "noTimeout";
59
+ }>, z.ZodNumber]>>;
60
+ };
61
+ /**
62
+ * Schema of {@link TimeoutOptions}, for the methods that take no other option.
63
+ * @internal
64
+ */
65
+ export declare const timeoutOptionsSchema: z.ZodObject<{
66
+ timeoutSecs: z.ZodOptional<z.ZodUnion<readonly [z.ZodEnum<{
67
+ short: "short";
68
+ medium: "medium";
69
+ long: "long";
70
+ noTimeout: "noTimeout";
71
+ }>, z.ZodNumber]>>;
72
+ }, z.core.$strict>;