@zapier/zapier-sdk 0.51.0 → 0.53.0
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/CHANGELOG.md +16 -0
- package/README.md +58 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +84 -7
- package/dist/api/concurrency.d.ts +28 -0
- package/dist/api/concurrency.d.ts.map +1 -0
- package/dist/api/concurrency.js +90 -0
- package/dist/api/types.d.ts +6 -0
- package/dist/api/types.d.ts.map +1 -1
- package/dist/constants.d.ts +16 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +29 -0
- package/dist/experimental.cjs +261 -18
- package/dist/experimental.d.mts +56 -28
- package/dist/experimental.d.ts +28 -0
- package/dist/experimental.d.ts.map +1 -1
- package/dist/experimental.js +2 -0
- package/dist/experimental.mjs +258 -19
- package/dist/{index-C52BjTXh.d.mts → index-D2HKNk0N.d.mts} +44 -1
- package/dist/{index-C52BjTXh.d.ts → index-D2HKNk0N.d.ts} +44 -1
- package/dist/index.cjs +215 -6
- package/dist/index.d.mts +1 -1
- package/dist/index.mjs +212 -7
- package/dist/plugins/api/index.d.ts.map +1 -1
- package/dist/plugins/api/index.js +3 -2
- package/dist/plugins/triggers/ackTriggerInboxMessages/index.d.ts.map +1 -1
- package/dist/plugins/triggers/ackTriggerInboxMessages/index.js +2 -1
- package/dist/plugins/triggers/createTriggerInbox/index.d.ts.map +1 -1
- package/dist/plugins/triggers/createTriggerInbox/index.js +1 -4
- package/dist/plugins/triggers/ensureTriggerInbox/index.d.ts.map +1 -1
- package/dist/plugins/triggers/ensureTriggerInbox/index.js +1 -4
- package/dist/plugins/triggers/leaseTriggerInboxMessages/index.d.ts.map +1 -1
- package/dist/plugins/triggers/leaseTriggerInboxMessages/index.js +5 -1
- package/dist/plugins/triggers/listTriggers/index.d.ts +70 -0
- package/dist/plugins/triggers/listTriggers/index.d.ts.map +1 -0
- package/dist/plugins/triggers/listTriggers/index.js +25 -0
- package/dist/plugins/triggers/listTriggers/schemas.d.ts +11 -0
- package/dist/plugins/triggers/listTriggers/schemas.d.ts.map +1 -0
- package/dist/plugins/triggers/listTriggers/schemas.js +18 -0
- package/dist/plugins/triggers/releaseTriggerInboxMessages/index.d.ts.map +1 -1
- package/dist/plugins/triggers/releaseTriggerInboxMessages/index.js +2 -1
- package/dist/resolvers/index.d.ts +1 -0
- package/dist/resolvers/index.d.ts.map +1 -1
- package/dist/resolvers/index.js +1 -0
- package/dist/resolvers/triggerMessages.d.ts +6 -0
- package/dist/resolvers/triggerMessages.d.ts.map +1 -0
- package/dist/resolvers/triggerMessages.js +22 -0
- package/dist/types/sdk.d.ts +1 -0
- package/dist/types/sdk.d.ts.map +1 -1
- package/dist/types/sdk.js +25 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @zapier/zapier-sdk
|
|
2
2
|
|
|
3
|
+
## 0.53.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 23352c8: Trigger inbox fixes and additions:
|
|
8
|
+
- Send `connection_id: null` for trigger inboxes without a connection so connection-less apps (e.g. tables) work correctly.
|
|
9
|
+
- Add `listTriggers`, a read variant of `listActions` that lists an app's triggers.
|
|
10
|
+
- Add interactive resolvers to trigger inbox message methods: `ackTriggerInboxMessages` and `releaseTriggerInboxMessages` prompt for `messages` with a multi-select of leased messages; `leaseTriggerInboxMessages` prompts for `leaseLimit` and `leaseSeconds`.
|
|
11
|
+
- CLI: coerce static prompt input to the schema's underlying type so numeric/boolean fields (e.g. `leaseLimit`, `leaseSeconds`) no longer fail Zod validation with "expected number, received string".
|
|
12
|
+
|
|
13
|
+
## 0.52.0
|
|
14
|
+
|
|
15
|
+
### Minor Changes
|
|
16
|
+
|
|
17
|
+
- 7984fae: Add a configurable concurrency limit so the SDK queues requests beyond `maxConcurrentRequests` (FIFO) instead of firing them all at once. Default is 200. Configurable via the `createZapierSdk({ maxConcurrentRequests })` option or the `ZAPIER_MAX_CONCURRENT_REQUESTS` env var (the option wins). Pass `Infinity` to disable. Slots are held across 429 retries (so server backoff isn't undermined by extra parallelism) but released as soon as response headers arrive — streaming responses (SSE, long-running chunked reads) do not pin a permit for the lifetime of the body. Queued acquires respect `AbortSignal`. Queued requests emit `api:concurrency_wait_start` / `api:concurrency_wait_end` events for diagnostics.
|
|
18
|
+
|
|
3
19
|
## 0.51.0
|
|
4
20
|
|
|
5
21
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
- [`listTriggerInboxes`](#listtriggerinboxes--experimental)
|
|
60
60
|
- [`listTriggerInputFieldChoices`](#listtriggerinputfieldchoices--experimental)
|
|
61
61
|
- [`listTriggerInputFields`](#listtriggerinputfields--experimental)
|
|
62
|
+
- [`listTriggers`](#listtriggers--experimental)
|
|
62
63
|
- [`pauseTriggerInbox`](#pausetriggerinbox--experimental)
|
|
63
64
|
- [`releaseTriggerInboxMessages`](#releasetriggerinboxmessages--experimental)
|
|
64
65
|
- [`resumeTriggerInbox`](#resumetriggerinbox--experimental)
|
|
@@ -337,6 +338,7 @@ The `createZapierSdk(...)` factory function is the main entry point for the SDK.
|
|
|
337
338
|
| `trackingBaseUrl` | `string` | ❌ | — | — | Base URL for Zapier tracking endpoints. |
|
|
338
339
|
| `maxNetworkRetries` | `number` | ❌ | — | — | Max retries for rate-limited requests (default: 3). |
|
|
339
340
|
| `maxNetworkRetryDelayMs` | `number` | ❌ | — | — | Max delay in ms to wait for retry (default: 60000). |
|
|
341
|
+
| `maxConcurrentRequests` | `number, literal` | ❌ | — | — | Max concurrent in-flight HTTP requests (default: 200, max: 10000). |
|
|
340
342
|
| `approvalTimeoutMs` | `number` | ❌ | — | — | Timeout in ms for approval polling. Default: 600000 (10 min). |
|
|
341
343
|
| `maxApprovalRetries` | `number` | ❌ | — | — | Maximum number of sequential approval rounds per request (one per gating policy) before giving up. Default: 2. |
|
|
342
344
|
| `approvalMode` | `string` | ❌ | — | `disabled`, `poll`, `throw` | Approval flow behavior. "disabled" (default) throws a ZapierApprovalError on approval-required responses without creating an approval. "poll" creates the approval, opens it in a browser, polls until resolved, and retries the original request. "throw" creates the approval and throws a ZapierApprovalError with the approval URL so the caller can surface it. Defaults to the ZAPIER_APPROVAL_MODE env var, then "disabled". |
|
|
@@ -2341,6 +2343,62 @@ for await (const rootField of zapier
|
|
|
2341
2343
|
}
|
|
2342
2344
|
```
|
|
2343
2345
|
|
|
2346
|
+
#### `listTriggers` 🧪 _experimental_
|
|
2347
|
+
|
|
2348
|
+
List all triggers for a specific app
|
|
2349
|
+
|
|
2350
|
+
**Parameters:**
|
|
2351
|
+
|
|
2352
|
+
| Name | Type | Required | Default | Possible Values | Description |
|
|
2353
|
+
| -------------- | -------- | -------- | ------- | --------------- | ----------------------------------------------------------------------- |
|
|
2354
|
+
| `options` | `object` | ✅ | — | — | |
|
|
2355
|
+
| ↳ `app` | `string` | ✅ | — | — | App key of triggers to list (e.g., 'SlackCLIAPI' or slug like 'github') |
|
|
2356
|
+
| ↳ `pageSize` | `number` | ❌ | — | — | Number of triggers per page |
|
|
2357
|
+
| ↳ `maxItems` | `number` | ❌ | — | — | Maximum total items to return across all pages |
|
|
2358
|
+
| ↳ `cursor` | `string` | ❌ | — | — | Cursor to start from |
|
|
2359
|
+
|
|
2360
|
+
**Returns:** `Promise<PaginatedResult<ActionItem>>`
|
|
2361
|
+
|
|
2362
|
+
| Name | Type | Required | Possible Values | Description |
|
|
2363
|
+
| ------------------ | ---------- | -------- | ---------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
2364
|
+
| `data[]` | `object[]` | ✅ | — | |
|
|
2365
|
+
| ↳ `id` | `string` | ❌ | — | |
|
|
2366
|
+
| ↳ `key` | `string` | ✅ | — | |
|
|
2367
|
+
| ↳ `description` | `string` | ✅ | — | |
|
|
2368
|
+
| ↳ `is_important` | `boolean` | ❌ | — | |
|
|
2369
|
+
| ↳ `is_hidden` | `boolean` | ❌ | — | |
|
|
2370
|
+
| ↳ `app_key` | `string` | ✅ | — | |
|
|
2371
|
+
| ↳ `app_version` | `string` | ❌ | — | |
|
|
2372
|
+
| ↳ `action_type` | `string` | ✅ | `filter`, `read`, `read_bulk`, `run`, `search`, `search_and_write`, `search_or_write`, `write` | |
|
|
2373
|
+
| ↳ `title` | `string` | ✅ | — | |
|
|
2374
|
+
| ↳ `type` | `string` | ✅ | `action` | |
|
|
2375
|
+
| `nextCursor` | `string` | ❌ | — | Cursor for the next page; omitted when there are no more pages |
|
|
2376
|
+
|
|
2377
|
+
**Example:**
|
|
2378
|
+
|
|
2379
|
+
```typescript
|
|
2380
|
+
// Get first page and a cursor for the second page
|
|
2381
|
+
const { data: actions, nextCursor } = await zapier.listTriggers({
|
|
2382
|
+
app: "example-app",
|
|
2383
|
+
});
|
|
2384
|
+
|
|
2385
|
+
// Or iterate over all pages
|
|
2386
|
+
for await (const page of zapier.listTriggers({
|
|
2387
|
+
app: "example-app",
|
|
2388
|
+
})) {
|
|
2389
|
+
// Do something with each page
|
|
2390
|
+
}
|
|
2391
|
+
|
|
2392
|
+
// Or iterate over individual items across all pages
|
|
2393
|
+
for await (const action of zapier
|
|
2394
|
+
.listTriggers({
|
|
2395
|
+
app: "example-app",
|
|
2396
|
+
})
|
|
2397
|
+
.items()) {
|
|
2398
|
+
// Do something with each action
|
|
2399
|
+
}
|
|
2400
|
+
```
|
|
2401
|
+
|
|
2344
2402
|
#### `pauseTriggerInbox` 🧪 _experimental_
|
|
2345
2403
|
|
|
2346
2404
|
Pause a trigger inbox; events stop being collected
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAGjB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAGjB,MAAM,SAAS,CAAC;AA+pCjB,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,SAW3D,CAAC"}
|
package/dist/api/client.js
CHANGED
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
* HTTP method handlers, response processing, and client factory functions.
|
|
6
6
|
*/
|
|
7
7
|
import { getAuthorizationHeader } from "./auth";
|
|
8
|
+
import { createSemaphore } from "./concurrency";
|
|
8
9
|
import { createDebugLogger, createDebugFetch } from "./debug";
|
|
9
10
|
import { pollUntilComplete } from "./polling";
|
|
10
11
|
import { resolveAuthToken, invalidateCredentialsToken, isCliLoginAvailable, } from "../auth";
|
|
11
12
|
import { getZapierBaseUrl, isLocalhostBaseUrl } from "../utils/url-utils";
|
|
12
13
|
import { sleep, calculateExponentialBackoffMs } from "../utils/retry-utils";
|
|
13
14
|
import { isPlainObject } from "../utils/type-guard-utils";
|
|
14
|
-
import { ZapierApiError, ZapierApprovalError, ZapierAuthenticationError, ZapierTimeoutError, ZapierValidationError, ZapierResourceNotFoundError, ZapierRateLimitError, } from "../types/errors";
|
|
15
|
-
import { ZAPIER_MAX_NETWORK_RETRIES, ZAPIER_MAX_NETWORK_RETRY_DELAY_MS, getZapierApprovalMode, getZapierSdkService, DEFAULT_APPROVAL_TIMEOUT_MS, DEFAULT_MAX_APPROVAL_RETRIES, } from "../constants";
|
|
15
|
+
import { ZapierApiError, ZapierApprovalError, ZapierAuthenticationError, ZapierConfigurationError, ZapierTimeoutError, ZapierValidationError, ZapierResourceNotFoundError, ZapierRateLimitError, } from "../types/errors";
|
|
16
|
+
import { MAX_CONCURRENCY_LIMIT, ZAPIER_MAX_CONCURRENT_REQUESTS, ZAPIER_MAX_NETWORK_RETRIES, ZAPIER_MAX_NETWORK_RETRY_DELAY_MS, getZapierApprovalMode, getZapierSdkService, DEFAULT_APPROVAL_TIMEOUT_MS, DEFAULT_MAX_APPROVAL_RETRIES, } from "../constants";
|
|
16
17
|
import { SDK_VERSION } from "../sdk-version";
|
|
17
18
|
import { openApproval } from "../utils/open-approval";
|
|
18
19
|
import { z } from "zod";
|
|
@@ -164,21 +165,78 @@ class ZapierApiClient {
|
|
|
164
165
|
method: init?.method ?? "GET",
|
|
165
166
|
rateLimit: rateLimitInfo,
|
|
166
167
|
});
|
|
167
|
-
//
|
|
168
|
-
//
|
|
168
|
+
// Pass the caller's signal into sleep so an abort during the
|
|
169
|
+
// backoff stops the wait — the next fetch in the loop then
|
|
170
|
+
// surfaces the abort, and `withSemaphore`'s finally releases the
|
|
171
|
+
// permit. Without this, an aborted request keeps holding its
|
|
172
|
+
// slot for the full Retry-After interval and blocks every queued
|
|
173
|
+
// waiter behind it.
|
|
169
174
|
await sleep(delayMs, init?.signal ?? undefined);
|
|
170
175
|
}
|
|
171
176
|
};
|
|
177
|
+
/**
|
|
178
|
+
* Wrap an outbound HTTP call with the concurrency semaphore. Used by both
|
|
179
|
+
* `rawFetch` (path-based) and the approval-poll path (absolute URL); each
|
|
180
|
+
* caller acquires per-attempt, so 429 retry sleep is held but the gap
|
|
181
|
+
* between approval polls and the human-approval wait are not.
|
|
182
|
+
*
|
|
183
|
+
* The release is registered in a finally that wraps the entire post-
|
|
184
|
+
* acquire flow — including the `wait_end` event emission — so a throwing
|
|
185
|
+
* `onEvent` handler can never leak a permit.
|
|
186
|
+
*
|
|
187
|
+
* Slot lifetime is intentionally tied to "fetch resolves" (headers
|
|
188
|
+
* received), NOT to "response body fully consumed". WHATWG `fetch()`
|
|
189
|
+
* resolves once headers are in; the body is still streaming. We rely on
|
|
190
|
+
* that boundary so streaming responses (SSE, long-running chunked reads)
|
|
191
|
+
* don't pin a permit for the lifetime of the stream — a single SSE
|
|
192
|
+
* consumer would otherwise hold one of N slots for as long as the
|
|
193
|
+
* connection stays open. Do not move the release into a path that awaits
|
|
194
|
+
* body consumption (e.g. `parseResult` / `response.text()`); doing so
|
|
195
|
+
* would silently break streaming consumers without failing any of the
|
|
196
|
+
* short-request tests.
|
|
197
|
+
*/
|
|
198
|
+
this.withSemaphore = async (context, fn) => {
|
|
199
|
+
const fastRelease = this.semaphore.tryAcquire();
|
|
200
|
+
let waitStart = null;
|
|
201
|
+
let release = fastRelease;
|
|
202
|
+
if (release === null) {
|
|
203
|
+
waitStart = Date.now();
|
|
204
|
+
this.emitEvent("api:concurrency_wait_start", {
|
|
205
|
+
url: context.url,
|
|
206
|
+
method: context.method,
|
|
207
|
+
});
|
|
208
|
+
release = await this.semaphore.acquire(context.signal ?? undefined);
|
|
209
|
+
}
|
|
210
|
+
const acquiredRelease = release;
|
|
211
|
+
try {
|
|
212
|
+
if (waitStart !== null) {
|
|
213
|
+
this.emitEvent("api:concurrency_wait_end", {
|
|
214
|
+
url: context.url,
|
|
215
|
+
method: context.method,
|
|
216
|
+
waitedMs: Date.now() - waitStart,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
return await fn();
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
acquiredRelease();
|
|
223
|
+
}
|
|
224
|
+
};
|
|
172
225
|
/**
|
|
173
226
|
* Perform a request with auth, header merging, and rate-limit (429) retries.
|
|
174
227
|
* Does NOT handle 403 approval_required — that's routed by `fetch`.
|
|
228
|
+
*
|
|
229
|
+
* Concurrency: a semaphore slot is held across the entire call, including
|
|
230
|
+
* the 429 retry sleep inside `rawFetchUrl`. That keeps backpressure
|
|
231
|
+
* coherent — when the server is rate-limiting us, we don't dump more
|
|
232
|
+
* parallelism into the queue.
|
|
175
233
|
*/
|
|
176
234
|
this.rawFetch = async (path, init) => {
|
|
177
235
|
if (!path.startsWith("/")) {
|
|
178
236
|
throw new ZapierValidationError(`fetch expects a path starting with '/', got: ${path}`);
|
|
179
237
|
}
|
|
180
238
|
const { url, pathConfig } = this.buildUrl(path, init?.searchParams);
|
|
181
|
-
return this.rawFetchUrl(url, init, pathConfig);
|
|
239
|
+
return this.withSemaphore({ url, method: init?.method ?? "GET", signal: init?.signal }, () => this.rawFetchUrl(url, init, pathConfig));
|
|
182
240
|
};
|
|
183
241
|
/**
|
|
184
242
|
* Approval-aware HTTP fetch.
|
|
@@ -311,6 +369,22 @@ class ZapierApiClient {
|
|
|
311
369
|
options.maxNetworkRetries ?? ZAPIER_MAX_NETWORK_RETRIES;
|
|
312
370
|
this.maxNetworkRetryDelayMs =
|
|
313
371
|
options.maxNetworkRetryDelayMs ?? ZAPIER_MAX_NETWORK_RETRY_DELAY_MS;
|
|
372
|
+
// NaN coerces to the default rather than throwing so a CLI flag with a
|
|
373
|
+
// garbage value (parseInt produces NaN) falls back instead of crashing
|
|
374
|
+
// SDK construction. Other invalid values (0, negatives, non-integers,
|
|
375
|
+
// over-cap) still throw so a misconfigured programmatic caller gets a
|
|
376
|
+
// clear error. Peer numeric options like maxNetworkRetries don't coerce
|
|
377
|
+
// NaN — they let it flow into comparisons that misbehave silently. The
|
|
378
|
+
// asymmetry is deliberate.
|
|
379
|
+
const requested = options.maxConcurrentRequests;
|
|
380
|
+
const limit = requested === undefined || Number.isNaN(requested)
|
|
381
|
+
? ZAPIER_MAX_CONCURRENT_REQUESTS
|
|
382
|
+
: requested;
|
|
383
|
+
if (limit !== Infinity &&
|
|
384
|
+
(!Number.isInteger(limit) || limit < 1 || limit > MAX_CONCURRENCY_LIMIT)) {
|
|
385
|
+
throw new ZapierConfigurationError(`Invalid maxConcurrentRequests: ${limit} (expected positive integer 1-${MAX_CONCURRENCY_LIMIT} or Infinity)`, { configType: "maxConcurrentRequests" });
|
|
386
|
+
}
|
|
387
|
+
this.semaphore = createSemaphore(limit);
|
|
314
388
|
}
|
|
315
389
|
// Emit an event if onEvent handler is configured
|
|
316
390
|
emitEvent(type, payload) {
|
|
@@ -754,10 +828,13 @@ class ZapierApiClient {
|
|
|
754
828
|
// poll_url is an absolute URL supplied by the server, so we use
|
|
755
829
|
// rawFetchUrl directly (skipping path resolution) but still share
|
|
756
830
|
// auth + interactive-header + 429-retry with the rest of the SDK.
|
|
757
|
-
|
|
831
|
+
// Each individual poll request goes through the concurrency
|
|
832
|
+
// semaphore — but we deliberately do not hold a slot across the
|
|
833
|
+
// sleep between polls or across the human-approval wait.
|
|
834
|
+
fetchPoll: () => this.withSemaphore({ url: approval.poll_url, method: "GET" }, () => this.rawFetchUrl(approval.poll_url, {
|
|
758
835
|
method: "GET",
|
|
759
836
|
headers: { Accept: "application/json" },
|
|
760
|
-
}),
|
|
837
|
+
})),
|
|
761
838
|
timeoutMs,
|
|
762
839
|
isPending: (body) => {
|
|
763
840
|
const parsed = PollApprovalResponseSchema.safeParse(body);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FIFO semaphore.
|
|
3
|
+
*
|
|
4
|
+
* Bounds the number of concurrent holders to `maxPermits`. Callers `acquire`
|
|
5
|
+
* a slot and invoke the returned function to release it. Slots are granted
|
|
6
|
+
* to waiters in arrival order. `Infinity` short-circuits to a no-op so
|
|
7
|
+
* callers can disable throttling without branching at every call site.
|
|
8
|
+
*
|
|
9
|
+
* The release function is idempotent: calling it more than once does
|
|
10
|
+
* nothing. This makes try/finally bookkeeping safe even if cleanup paths
|
|
11
|
+
* overlap.
|
|
12
|
+
*
|
|
13
|
+
* AbortSignal: a queued `acquire` that observes its signal aborting will
|
|
14
|
+
* remove itself from the queue and reject. A signal that aborts after
|
|
15
|
+
* `acquire` has resolved is the caller's responsibility — they already hold
|
|
16
|
+
* the slot and must call release.
|
|
17
|
+
*/
|
|
18
|
+
export interface Semaphore {
|
|
19
|
+
acquire(signal?: AbortSignal): Promise<() => void>;
|
|
20
|
+
/**
|
|
21
|
+
* Synchronously claim a slot if one is available. Returns the release
|
|
22
|
+
* function on success and null when the caller would have to queue.
|
|
23
|
+
* Useful for emitting telemetry only when an `acquire` actually waits.
|
|
24
|
+
*/
|
|
25
|
+
tryAcquire(): (() => void) | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function createSemaphore(maxPermits: number): Semaphore;
|
|
28
|
+
//# sourceMappingURL=concurrency.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../../src/api/concurrency.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IACnD;;;;OAIG;IACH,UAAU,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CACnC;AAaD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,CAyE7D"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FIFO semaphore.
|
|
3
|
+
*
|
|
4
|
+
* Bounds the number of concurrent holders to `maxPermits`. Callers `acquire`
|
|
5
|
+
* a slot and invoke the returned function to release it. Slots are granted
|
|
6
|
+
* to waiters in arrival order. `Infinity` short-circuits to a no-op so
|
|
7
|
+
* callers can disable throttling without branching at every call site.
|
|
8
|
+
*
|
|
9
|
+
* The release function is idempotent: calling it more than once does
|
|
10
|
+
* nothing. This makes try/finally bookkeeping safe even if cleanup paths
|
|
11
|
+
* overlap.
|
|
12
|
+
*
|
|
13
|
+
* AbortSignal: a queued `acquire` that observes its signal aborting will
|
|
14
|
+
* remove itself from the queue and reject. A signal that aborts after
|
|
15
|
+
* `acquire` has resolved is the caller's responsibility — they already hold
|
|
16
|
+
* the slot and must call release.
|
|
17
|
+
*/
|
|
18
|
+
const NO_OP_RELEASE = () => { };
|
|
19
|
+
const NO_OP_SEMAPHORE = {
|
|
20
|
+
acquire: async () => NO_OP_RELEASE,
|
|
21
|
+
tryAcquire: () => NO_OP_RELEASE,
|
|
22
|
+
};
|
|
23
|
+
export function createSemaphore(maxPermits) {
|
|
24
|
+
if (maxPermits === Infinity) {
|
|
25
|
+
return NO_OP_SEMAPHORE;
|
|
26
|
+
}
|
|
27
|
+
if (!Number.isInteger(maxPermits) || maxPermits <= 0) {
|
|
28
|
+
throw new Error(`maxPermits must be a positive integer or Infinity, got: ${maxPermits}`);
|
|
29
|
+
}
|
|
30
|
+
let permits = maxPermits;
|
|
31
|
+
const waiters = [];
|
|
32
|
+
const release = () => {
|
|
33
|
+
const next = waiters.shift();
|
|
34
|
+
if (next) {
|
|
35
|
+
// Hand the slot directly to the next waiter — permits stays the same.
|
|
36
|
+
next.grant();
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
permits++;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const makeReleaseOnce = () => {
|
|
43
|
+
let released = false;
|
|
44
|
+
return () => {
|
|
45
|
+
if (released)
|
|
46
|
+
return;
|
|
47
|
+
released = true;
|
|
48
|
+
release();
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
return {
|
|
52
|
+
tryAcquire() {
|
|
53
|
+
if (permits > 0) {
|
|
54
|
+
permits--;
|
|
55
|
+
return makeReleaseOnce();
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
},
|
|
59
|
+
async acquire(signal) {
|
|
60
|
+
if (signal?.aborted) {
|
|
61
|
+
throw signal.reason ?? new DOMException("Aborted", "AbortError");
|
|
62
|
+
}
|
|
63
|
+
if (permits > 0) {
|
|
64
|
+
permits--;
|
|
65
|
+
return makeReleaseOnce();
|
|
66
|
+
}
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
const onAbort = () => {
|
|
69
|
+
const idx = waiters.indexOf(waiter);
|
|
70
|
+
if (idx !== -1) {
|
|
71
|
+
waiters.splice(idx, 1);
|
|
72
|
+
waiter.cancel(signal?.reason ?? new DOMException("Aborted", "AbortError"));
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const waiter = {
|
|
76
|
+
grant: () => {
|
|
77
|
+
signal?.removeEventListener("abort", onAbort);
|
|
78
|
+
resolve(makeReleaseOnce());
|
|
79
|
+
},
|
|
80
|
+
cancel: (reason) => {
|
|
81
|
+
signal?.removeEventListener("abort", onAbort);
|
|
82
|
+
reject(reason);
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
signal?.addEventListener("abort", onAbort);
|
|
86
|
+
waiters.push(waiter);
|
|
87
|
+
});
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
}
|
package/dist/api/types.d.ts
CHANGED
|
@@ -40,6 +40,12 @@ export interface ApiClientOptions {
|
|
|
40
40
|
* Default is 60000 (60 seconds).
|
|
41
41
|
*/
|
|
42
42
|
maxNetworkRetryDelayMs?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Maximum number of concurrent in-flight HTTP requests per client.
|
|
45
|
+
* Requests beyond this limit queue in FIFO order until a slot frees.
|
|
46
|
+
* Pass `Infinity` to disable. Default: 200.
|
|
47
|
+
*/
|
|
48
|
+
maxConcurrentRequests?: number;
|
|
43
49
|
/**
|
|
44
50
|
* Controls how the approval flow is handled.
|
|
45
51
|
* - "disabled": (default when env var is unset) Throw a ZapierApprovalError
|
package/dist/api/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/api/types.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -30,6 +30,22 @@ export declare const DEFAULT_ACTION_TIMEOUT_MS = 180000;
|
|
|
30
30
|
*/
|
|
31
31
|
export declare const ZAPIER_MAX_NETWORK_RETRIES: number;
|
|
32
32
|
export declare const ZAPIER_MAX_NETWORK_RETRY_DELAY_MS: number;
|
|
33
|
+
/**
|
|
34
|
+
* Upper bound on the concurrency cap. Anything beyond this is almost
|
|
35
|
+
* certainly a configuration mistake and would also bypass IEEE 754 safe
|
|
36
|
+
* integer range for inputs like "9".repeat(309), which would silently
|
|
37
|
+
* become Infinity and disable throttling.
|
|
38
|
+
*/
|
|
39
|
+
export declare const MAX_CONCURRENCY_LIMIT = 10000;
|
|
40
|
+
export declare function parseConcurrencyEnvVar(name: string): number | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Default cap on concurrent in-flight HTTP requests per SDK instance.
|
|
43
|
+
* Beyond this, requests queue (FIFO) until a slot frees up. Sized for
|
|
44
|
+
* production workloads that fan out hundreds of action runs in parallel;
|
|
45
|
+
* lower it when running against a smaller backend or to be more
|
|
46
|
+
* conservative. Pass `Infinity` to disable.
|
|
47
|
+
*/
|
|
48
|
+
export declare const ZAPIER_MAX_CONCURRENT_REQUESTS: number;
|
|
33
49
|
/**
|
|
34
50
|
* Approval flow behavior from environment variable.
|
|
35
51
|
* - "disabled": (default when env var is unset) Throw a ZapierApprovalError on
|
package/dist/constants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe,QACsC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,yBAAyB,SAAU,CAAC;AAejD;;GAEG;AACH,eAAO,MAAM,0BAA0B,QACY,CAAC;AACpD,eAAO,MAAM,iCAAiC,QACiB,CAAC;AAEhE;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IACjC,UAAU,GACV,MAAM,GACN,OAAO,GACP,SAAS,CAKZ;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,eAAO,MAAM,eAAe,QACsC,CAAC;AAEnE;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED;;GAEG;AACH,eAAO,MAAM,cAAc,QAAQ,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC;;GAEG;AACH,eAAO,MAAM,yBAAyB,SAAU,CAAC;AAejD;;GAEG;AACH,eAAO,MAAM,0BAA0B,QACY,CAAC;AACpD,eAAO,MAAM,iCAAiC,QACiB,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAE5C,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAYvE;AAED;;;;;;GAMG;AACH,eAAO,MAAM,8BAA8B,QACsB,CAAC;AAElE;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IACjC,UAAU,GACV,MAAM,GACN,OAAO,GACP,SAAS,CAKZ;AAED;;GAEG;AACH,eAAO,MAAM,2BAA2B,QAAiB,CAAC;AAE1D;;;;;GAKG;AACH,eAAO,MAAM,4BAA4B,IAAI,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -43,6 +43,35 @@ function parseIntEnvVar(name) {
|
|
|
43
43
|
*/
|
|
44
44
|
export const ZAPIER_MAX_NETWORK_RETRIES = parseIntEnvVar("ZAPIER_MAX_NETWORK_RETRIES") ?? 3;
|
|
45
45
|
export const ZAPIER_MAX_NETWORK_RETRY_DELAY_MS = parseIntEnvVar("ZAPIER_MAX_NETWORK_RETRY_DELAY_MS") ?? 60000;
|
|
46
|
+
/**
|
|
47
|
+
* Upper bound on the concurrency cap. Anything beyond this is almost
|
|
48
|
+
* certainly a configuration mistake and would also bypass IEEE 754 safe
|
|
49
|
+
* integer range for inputs like "9".repeat(309), which would silently
|
|
50
|
+
* become Infinity and disable throttling.
|
|
51
|
+
*/
|
|
52
|
+
export const MAX_CONCURRENCY_LIMIT = 10000;
|
|
53
|
+
export function parseConcurrencyEnvVar(name) {
|
|
54
|
+
const value = globalThis.process?.env?.[name];
|
|
55
|
+
if (!value)
|
|
56
|
+
return undefined;
|
|
57
|
+
if (value === "Infinity")
|
|
58
|
+
return Infinity;
|
|
59
|
+
if (/^[1-9]\d*$/.test(value)) {
|
|
60
|
+
const parsed = parseInt(value, 10);
|
|
61
|
+
if (parsed <= MAX_CONCURRENCY_LIMIT)
|
|
62
|
+
return parsed;
|
|
63
|
+
}
|
|
64
|
+
console.warn(`[zapier-sdk] Invalid value for ${name}: "${value}" (expected positive integer 1-${MAX_CONCURRENCY_LIMIT} or "Infinity")`);
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Default cap on concurrent in-flight HTTP requests per SDK instance.
|
|
69
|
+
* Beyond this, requests queue (FIFO) until a slot frees up. Sized for
|
|
70
|
+
* production workloads that fan out hundreds of action runs in parallel;
|
|
71
|
+
* lower it when running against a smaller backend or to be more
|
|
72
|
+
* conservative. Pass `Infinity` to disable.
|
|
73
|
+
*/
|
|
74
|
+
export const ZAPIER_MAX_CONCURRENT_REQUESTS = parseConcurrencyEnvVar("ZAPIER_MAX_CONCURRENT_REQUESTS") ?? 200;
|
|
46
75
|
/**
|
|
47
76
|
* Approval flow behavior from environment variable.
|
|
48
77
|
* - "disabled": (default when env var is unset) Throw a ZapierApprovalError on
|