@zapier/zapier-sdk 0.48.1 → 0.50.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.
Files changed (213) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +832 -81
  3. package/dist/api/client.d.ts.map +1 -1
  4. package/dist/api/client.js +27 -16
  5. package/dist/api/polling.d.ts +7 -0
  6. package/dist/api/polling.d.ts.map +1 -1
  7. package/dist/api/polling.js +29 -4
  8. package/dist/api/types.d.ts +15 -7
  9. package/dist/api/types.d.ts.map +1 -1
  10. package/dist/constants.d.ts +8 -9
  11. package/dist/constants.d.ts.map +1 -1
  12. package/dist/constants.js +8 -11
  13. package/dist/experimental.cjs +10383 -0
  14. package/dist/experimental.d.mts +2292 -0
  15. package/dist/experimental.d.ts +2308 -0
  16. package/dist/experimental.d.ts.map +1 -0
  17. package/dist/experimental.js +155 -0
  18. package/dist/experimental.mjs +10202 -0
  19. package/dist/index-BQ2ii0Bs.d.mts +9538 -0
  20. package/dist/index-BQ2ii0Bs.d.ts +9538 -0
  21. package/dist/index.cjs +718 -513
  22. package/dist/index.d.mts +6 -8562
  23. package/dist/index.d.ts +7 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +5 -1
  26. package/dist/index.mjs +706 -512
  27. package/dist/plugins/api/index.d.ts.map +1 -1
  28. package/dist/plugins/api/index.js +1 -2
  29. package/dist/plugins/apps/index.d.ts +1 -1
  30. package/dist/plugins/deprecated/inputFields.d.ts +468 -0
  31. package/dist/plugins/deprecated/inputFields.d.ts.map +1 -0
  32. package/dist/plugins/deprecated/inputFields.js +73 -0
  33. package/dist/plugins/fetch/index.d.ts +1 -1
  34. package/dist/plugins/fetch/schemas.d.ts +1 -1
  35. package/dist/plugins/{getInputFieldsSchema → getActionInputFieldsSchema}/index.d.ts +4 -4
  36. package/dist/plugins/getActionInputFieldsSchema/index.d.ts.map +1 -0
  37. package/dist/plugins/{getInputFieldsSchema → getActionInputFieldsSchema}/index.js +4 -4
  38. package/dist/plugins/{getInputFieldsSchema → getActionInputFieldsSchema}/schemas.d.ts +8 -8
  39. package/dist/plugins/getActionInputFieldsSchema/schemas.d.ts.map +1 -0
  40. package/dist/plugins/{getInputFieldsSchema → getActionInputFieldsSchema}/schemas.js +13 -10
  41. package/dist/plugins/{listInputFieldChoices → listActionInputFieldChoices}/index.d.ts +4 -4
  42. package/dist/plugins/listActionInputFieldChoices/index.d.ts.map +1 -0
  43. package/dist/plugins/{listInputFieldChoices → listActionInputFieldChoices}/index.js +4 -4
  44. package/dist/plugins/{listInputFieldChoices → listActionInputFieldChoices}/schemas.d.ts +10 -10
  45. package/dist/plugins/listActionInputFieldChoices/schemas.d.ts.map +1 -0
  46. package/dist/plugins/{listInputFieldChoices → listActionInputFieldChoices}/schemas.js +13 -10
  47. package/dist/plugins/{listInputFields → listActionInputFields}/index.d.ts +4 -4
  48. package/dist/plugins/listActionInputFields/index.d.ts.map +1 -0
  49. package/dist/plugins/{listInputFields → listActionInputFields}/index.js +4 -4
  50. package/dist/plugins/{listInputFields → listActionInputFields}/schemas.d.ts +9 -9
  51. package/dist/plugins/listActionInputFields/schemas.d.ts.map +1 -0
  52. package/dist/plugins/{listInputFields → listActionInputFields}/schemas.js +7 -7
  53. package/dist/plugins/request/index.d.ts +2 -2
  54. package/dist/plugins/request/schemas.d.ts +2 -2
  55. package/dist/plugins/triggers/ackTriggerInboxMessages/index.d.ts +51 -0
  56. package/dist/plugins/triggers/ackTriggerInboxMessages/index.d.ts.map +1 -0
  57. package/dist/plugins/triggers/ackTriggerInboxMessages/index.js +35 -0
  58. package/dist/plugins/triggers/ackTriggerInboxMessages/schemas.d.ts +34 -0
  59. package/dist/plugins/triggers/ackTriggerInboxMessages/schemas.d.ts.map +1 -0
  60. package/dist/plugins/triggers/ackTriggerInboxMessages/schemas.js +17 -0
  61. package/dist/plugins/triggers/createTriggerInbox/index.d.ts +62 -0
  62. package/dist/plugins/triggers/createTriggerInbox/index.d.ts.map +1 -0
  63. package/dist/plugins/triggers/createTriggerInbox/index.js +54 -0
  64. package/dist/plugins/triggers/createTriggerInbox/schemas.d.ts +20 -0
  65. package/dist/plugins/triggers/createTriggerInbox/schemas.d.ts.map +1 -0
  66. package/dist/plugins/triggers/createTriggerInbox/schemas.js +20 -0
  67. package/dist/plugins/triggers/deleteTriggerInbox/index.d.ts +50 -0
  68. package/dist/plugins/triggers/deleteTriggerInbox/index.d.ts.map +1 -0
  69. package/dist/plugins/triggers/deleteTriggerInbox/index.js +27 -0
  70. package/dist/plugins/triggers/deleteTriggerInbox/schemas.d.ts +14 -0
  71. package/dist/plugins/triggers/deleteTriggerInbox/schemas.d.ts.map +1 -0
  72. package/dist/plugins/triggers/deleteTriggerInbox/schemas.js +9 -0
  73. package/dist/plugins/triggers/drainTriggerInbox/index.d.ts +213 -0
  74. package/dist/plugins/triggers/drainTriggerInbox/index.d.ts.map +1 -0
  75. package/dist/plugins/triggers/drainTriggerInbox/index.js +227 -0
  76. package/dist/plugins/triggers/drainTriggerInbox/pipeline.d.ts +56 -0
  77. package/dist/plugins/triggers/drainTriggerInbox/pipeline.d.ts.map +1 -0
  78. package/dist/plugins/triggers/drainTriggerInbox/pipeline.js +225 -0
  79. package/dist/plugins/triggers/drainTriggerInbox/schemas.d.ts +104 -0
  80. package/dist/plugins/triggers/drainTriggerInbox/schemas.d.ts.map +1 -0
  81. package/dist/plugins/triggers/drainTriggerInbox/schemas.js +102 -0
  82. package/dist/plugins/triggers/ensureTriggerInbox/index.d.ts +63 -0
  83. package/dist/plugins/triggers/ensureTriggerInbox/index.d.ts.map +1 -0
  84. package/dist/plugins/triggers/ensureTriggerInbox/index.js +77 -0
  85. package/dist/plugins/triggers/ensureTriggerInbox/schemas.d.ts +21 -0
  86. package/dist/plugins/triggers/ensureTriggerInbox/schemas.d.ts.map +1 -0
  87. package/dist/plugins/triggers/ensureTriggerInbox/schemas.js +21 -0
  88. package/dist/plugins/triggers/getTriggerInbox/index.d.ts +50 -0
  89. package/dist/plugins/triggers/getTriggerInbox/index.d.ts.map +1 -0
  90. package/dist/plugins/triggers/getTriggerInbox/index.js +26 -0
  91. package/dist/plugins/triggers/getTriggerInbox/schemas.d.ts +14 -0
  92. package/dist/plugins/triggers/getTriggerInbox/schemas.d.ts.map +1 -0
  93. package/dist/plugins/triggers/getTriggerInbox/schemas.js +9 -0
  94. package/dist/plugins/triggers/getTriggerInputFieldsSchema/index.d.ts +48 -0
  95. package/dist/plugins/triggers/getTriggerInputFieldsSchema/index.d.ts.map +1 -0
  96. package/dist/plugins/triggers/getTriggerInputFieldsSchema/index.js +23 -0
  97. package/dist/plugins/triggers/getTriggerInputFieldsSchema/schemas.d.ts +13 -0
  98. package/dist/plugins/triggers/getTriggerInputFieldsSchema/schemas.d.ts.map +1 -0
  99. package/dist/plugins/triggers/getTriggerInputFieldsSchema/schemas.js +10 -0
  100. package/dist/plugins/triggers/leaseTriggerInboxMessages/index.d.ts +58 -0
  101. package/dist/plugins/triggers/leaseTriggerInboxMessages/index.d.ts.map +1 -0
  102. package/dist/plugins/triggers/leaseTriggerInboxMessages/index.js +70 -0
  103. package/dist/plugins/triggers/leaseTriggerInboxMessages/schemas.d.ts +57 -0
  104. package/dist/plugins/triggers/leaseTriggerInboxMessages/schemas.d.ts.map +1 -0
  105. package/dist/plugins/triggers/leaseTriggerInboxMessages/schemas.js +25 -0
  106. package/dist/plugins/triggers/listTriggerInboxMessages/index.d.ts +51 -0
  107. package/dist/plugins/triggers/listTriggerInboxMessages/index.d.ts.map +1 -0
  108. package/dist/plugins/triggers/listTriggerInboxMessages/index.js +48 -0
  109. package/dist/plugins/triggers/listTriggerInboxMessages/schemas.d.ts +37 -0
  110. package/dist/plugins/triggers/listTriggerInboxMessages/schemas.d.ts.map +1 -0
  111. package/dist/plugins/triggers/listTriggerInboxMessages/schemas.js +27 -0
  112. package/dist/plugins/triggers/listTriggerInboxes/index.d.ts +56 -0
  113. package/dist/plugins/triggers/listTriggerInboxes/index.d.ts.map +1 -0
  114. package/dist/plugins/triggers/listTriggerInboxes/index.js +51 -0
  115. package/dist/plugins/triggers/listTriggerInboxes/schemas.d.ts +58 -0
  116. package/dist/plugins/triggers/listTriggerInboxes/schemas.d.ts.map +1 -0
  117. package/dist/plugins/triggers/listTriggerInboxes/schemas.js +35 -0
  118. package/dist/plugins/triggers/listTriggerInputFieldChoices/index.d.ts +77 -0
  119. package/dist/plugins/triggers/listTriggerInputFieldChoices/index.d.ts.map +1 -0
  120. package/dist/plugins/triggers/listTriggerInputFieldChoices/index.js +30 -0
  121. package/dist/plugins/triggers/listTriggerInputFieldChoices/schemas.d.ts +20 -0
  122. package/dist/plugins/triggers/listTriggerInputFieldChoices/schemas.d.ts.map +1 -0
  123. package/dist/plugins/triggers/listTriggerInputFieldChoices/schemas.js +28 -0
  124. package/dist/plugins/triggers/listTriggerInputFields/index.d.ts +101 -0
  125. package/dist/plugins/triggers/listTriggerInputFields/index.d.ts.map +1 -0
  126. package/dist/plugins/triggers/listTriggerInputFields/index.js +33 -0
  127. package/dist/plugins/triggers/listTriggerInputFields/schemas.d.ts +16 -0
  128. package/dist/plugins/triggers/listTriggerInputFields/schemas.d.ts.map +1 -0
  129. package/dist/plugins/triggers/listTriggerInputFields/schemas.js +21 -0
  130. package/dist/plugins/triggers/pauseTriggerInbox/index.d.ts +50 -0
  131. package/dist/plugins/triggers/pauseTriggerInbox/index.d.ts.map +1 -0
  132. package/dist/plugins/triggers/pauseTriggerInbox/index.js +26 -0
  133. package/dist/plugins/triggers/pauseTriggerInbox/schemas.d.ts +14 -0
  134. package/dist/plugins/triggers/pauseTriggerInbox/schemas.d.ts.map +1 -0
  135. package/dist/plugins/triggers/pauseTriggerInbox/schemas.js +9 -0
  136. package/dist/plugins/triggers/releaseTriggerInboxMessages/index.d.ts +51 -0
  137. package/dist/plugins/triggers/releaseTriggerInboxMessages/index.d.ts.map +1 -0
  138. package/dist/plugins/triggers/releaseTriggerInboxMessages/index.js +37 -0
  139. package/dist/plugins/triggers/releaseTriggerInboxMessages/schemas.d.ts +34 -0
  140. package/dist/plugins/triggers/releaseTriggerInboxMessages/schemas.d.ts.map +1 -0
  141. package/dist/plugins/triggers/releaseTriggerInboxMessages/schemas.js +17 -0
  142. package/dist/plugins/triggers/resumeTriggerInbox/index.d.ts +50 -0
  143. package/dist/plugins/triggers/resumeTriggerInbox/index.d.ts.map +1 -0
  144. package/dist/plugins/triggers/resumeTriggerInbox/index.js +26 -0
  145. package/dist/plugins/triggers/resumeTriggerInbox/schemas.d.ts +14 -0
  146. package/dist/plugins/triggers/resumeTriggerInbox/schemas.d.ts.map +1 -0
  147. package/dist/plugins/triggers/resumeTriggerInbox/schemas.js +9 -0
  148. package/dist/plugins/triggers/shared.d.ts +17 -0
  149. package/dist/plugins/triggers/shared.d.ts.map +1 -0
  150. package/dist/plugins/triggers/shared.js +16 -0
  151. package/dist/plugins/triggers/updateTriggerInbox/index.d.ts +51 -0
  152. package/dist/plugins/triggers/updateTriggerInbox/index.d.ts.map +1 -0
  153. package/dist/plugins/triggers/updateTriggerInbox/index.js +30 -0
  154. package/dist/plugins/triggers/updateTriggerInbox/schemas.d.ts +15 -0
  155. package/dist/plugins/triggers/updateTriggerInbox/schemas.d.ts.map +1 -0
  156. package/dist/plugins/triggers/updateTriggerInbox/schemas.js +15 -0
  157. package/dist/plugins/triggers/utils.d.ts +17 -0
  158. package/dist/plugins/triggers/utils.d.ts.map +1 -0
  159. package/dist/plugins/triggers/utils.js +28 -0
  160. package/dist/plugins/triggers/watchTriggerInbox/index.d.ts +163 -0
  161. package/dist/plugins/triggers/watchTriggerInbox/index.d.ts.map +1 -0
  162. package/dist/plugins/triggers/watchTriggerInbox/index.js +111 -0
  163. package/dist/registry.d.ts.map +1 -1
  164. package/dist/registry.js +2 -0
  165. package/dist/resolvers/actionKey.d.ts +1 -0
  166. package/dist/resolvers/actionKey.d.ts.map +1 -1
  167. package/dist/resolvers/actionKey.js +1 -1
  168. package/dist/resolvers/index.d.ts +2 -2
  169. package/dist/resolvers/index.d.ts.map +1 -1
  170. package/dist/resolvers/index.js +2 -2
  171. package/dist/resolvers/triggerInbox.d.ts +4 -0
  172. package/dist/resolvers/triggerInbox.d.ts.map +1 -0
  173. package/dist/resolvers/triggerInbox.js +18 -0
  174. package/dist/schemas/TriggerInbox.d.ts +59 -0
  175. package/dist/schemas/TriggerInbox.d.ts.map +1 -0
  176. package/dist/schemas/TriggerInbox.js +81 -0
  177. package/dist/schemas/TriggerMessage.d.ts +48 -0
  178. package/dist/schemas/TriggerMessage.d.ts.map +1 -0
  179. package/dist/schemas/TriggerMessage.js +79 -0
  180. package/dist/sdk.d.ts +621 -17
  181. package/dist/sdk.d.ts.map +1 -1
  182. package/dist/sdk.js +26 -9
  183. package/dist/types/errors.d.ts +18 -5
  184. package/dist/types/errors.d.ts.map +1 -1
  185. package/dist/types/errors.js +16 -0
  186. package/dist/types/plugin.d.ts +12 -1
  187. package/dist/types/plugin.d.ts.map +1 -1
  188. package/dist/types/properties.d.ts +12 -0
  189. package/dist/types/properties.d.ts.map +1 -1
  190. package/dist/types/properties.js +25 -0
  191. package/dist/types/registry.d.ts +5 -0
  192. package/dist/types/registry.d.ts.map +1 -1
  193. package/dist/types/sdk.d.ts +4 -4
  194. package/dist/types/sdk.d.ts.map +1 -1
  195. package/dist/types/sdk.js +4 -11
  196. package/dist/types/signals.d.ts +20 -0
  197. package/dist/types/signals.d.ts.map +1 -0
  198. package/dist/types/signals.js +21 -0
  199. package/dist/utils/abort-utils.d.ts +13 -0
  200. package/dist/utils/abort-utils.d.ts.map +1 -1
  201. package/dist/utils/abort-utils.js +15 -0
  202. package/dist/utils/retry-utils.d.ts +6 -2
  203. package/dist/utils/retry-utils.d.ts.map +1 -1
  204. package/dist/utils/retry-utils.js +22 -3
  205. package/dist/utils/schema-utils.d.ts +19 -1
  206. package/dist/utils/schema-utils.d.ts.map +1 -1
  207. package/package.json +12 -1
  208. package/dist/plugins/getInputFieldsSchema/index.d.ts.map +0 -1
  209. package/dist/plugins/getInputFieldsSchema/schemas.d.ts.map +0 -1
  210. package/dist/plugins/listInputFieldChoices/index.d.ts.map +0 -1
  211. package/dist/plugins/listInputFieldChoices/schemas.d.ts.map +0 -1
  212. package/dist/plugins/listInputFields/index.d.ts.map +0 -1
  213. package/dist/plugins/listInputFields/schemas.d.ts.map +0 -1
@@ -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;AAgjCjB,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,SAW3D,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;AA2jCjB,eAAO,MAAM,eAAe,GAAI,SAAS,gBAAgB,KAAG,SAW3D,CAAC"}
@@ -12,7 +12,7 @@ import { getZapierBaseUrl, isLocalhostBaseUrl } from "../utils/url-utils";
12
12
  import { sleep, calculateExponentialBackoffMs } from "../utils/retry-utils";
13
13
  import { isPlainObject } from "../utils/type-guard-utils";
14
14
  import { ZapierApiError, ZapierApprovalError, ZapierAuthenticationError, ZapierTimeoutError, ZapierValidationError, ZapierResourceNotFoundError, ZapierRateLimitError, } from "../types/errors";
15
- import { ZAPIER_MAX_NETWORK_RETRIES, ZAPIER_MAX_NETWORK_RETRY_DELAY_MS, getZapierIsInteractive, getZapierApprovalMode, getZapierSdkService, DEFAULT_APPROVAL_TIMEOUT_MS, DEFAULT_MAX_APPROVAL_RETRIES, } from "../constants";
15
+ import { ZAPIER_MAX_NETWORK_RETRIES, ZAPIER_MAX_NETWORK_RETRY_DELAY_MS, getZapierApprovalMode, getZapierSdkService, DEFAULT_APPROVAL_TIMEOUT_MS, DEFAULT_MAX_APPROVAL_RETRIES, } from "../constants";
16
16
  import { SDK_VERSION } from "../sdk-version";
17
17
  import { openApproval } from "../utils/open-approval";
18
18
  import { z } from "zod";
@@ -95,6 +95,11 @@ const pathConfig = {
95
95
  authHeader: "Authorization",
96
96
  pathPrefix: "/api/v0/sdk/tables",
97
97
  },
98
+ // e.g. /trigger-inbox -> https://sdkapi.zapier.com/api/v0/sdk/trigger-inbox/...
99
+ "/trigger-inbox": {
100
+ authHeader: "Authorization",
101
+ pathPrefix: "/api/v0/sdk/trigger-inbox",
102
+ },
98
103
  };
99
104
  class ZapierApiClient {
100
105
  constructor(options) {
@@ -159,7 +164,9 @@ class ZapierApiClient {
159
164
  method: init?.method ?? "GET",
160
165
  rateLimit: rateLimitInfo,
161
166
  });
162
- await sleep(delayMs);
167
+ // Forward the request's signal so a long retry-after wait aborts
168
+ // promptly instead of hanging until the timer elapses.
169
+ await sleep(delayMs, init?.signal ?? undefined);
163
170
  }
164
171
  };
165
172
  /**
@@ -242,13 +249,13 @@ class ZapierApiClient {
242
249
  // and throw `max_retries_exceeded` below.
243
250
  if (attempt === maxRetries)
244
251
  break;
245
- // Approval requires opening a URL in a browser. If the caller's session
246
- // can't do that (CI, server, headless container), surface a distinct
247
- // status so callers can branch on "retry interactively or use
248
- // approvalMode: 'fail'" vs. a real policy denial.
249
- const isInteractive = this.options.isInteractive ?? getZapierIsInteractive();
250
- if (!isInteractive) {
251
- throw new ZapierApprovalError("Approval required but session is not interactive", { status: "approval_required" });
252
+ // Resolve the mode: explicit option > env var > "disabled" (conservative
253
+ // default while the approval flow is alpha + opt-in). When disabled,
254
+ // surface a distinct status so callers can branch on "enable approvals
255
+ // explicitly" vs. a real policy denial.
256
+ const mode = this.options.approvalMode ?? getZapierApprovalMode() ?? "disabled";
257
+ if (mode === "disabled") {
258
+ throw new ZapierApprovalError("Approvals are disabled. Set approvalMode to 'poll' or 'throw' (or ZAPIER_APPROVAL_MODE) to enable.", { status: "approval_required" });
252
259
  }
253
260
  // `approvalContext` is a builder, not a value, because the SDK may
254
261
  // retry the same request across multiple approval rounds and each POST
@@ -259,10 +266,10 @@ class ZapierApiClient {
259
266
  throw new ZapierApiError(`Received 403 approval_required for ${path}, but the caller did not provide an approvalContext builder. Every approval-capable request must pass approvalContext so the SDK can create the approval with the correct policy context.`, { statusCode: 403 });
260
267
  }
261
268
  // Create the approval, open the URL (poll mode) or throw with the URL
262
- // attached (fail mode), and wait for terminal resolution. Returns only
269
+ // attached (throw mode), and wait for terminal resolution. Returns only
263
270
  // on "approved" — every other outcome throws from inside the helper.
264
271
  // On return, loop back to retry the original request.
265
- await this.runOneApprovalRound(init.approvalContext);
272
+ await this.runOneApprovalRound(init.approvalContext, mode);
266
273
  }
267
274
  // Only reachable when the final attempt returned `approval_required`
268
275
  // (see the `break` above). Every other terminal outcome throws inline.
@@ -289,6 +296,7 @@ class ZapierApiClient {
289
296
  method: "GET",
290
297
  searchParams: options.searchParams,
291
298
  authRequired: options.authRequired,
299
+ signal: options.signal,
292
300
  }),
293
301
  initialDelay: options.initialDelay,
294
302
  timeoutMs: options.timeoutMs,
@@ -296,6 +304,7 @@ class ZapierApiClient {
296
304
  pendingStatus: options.pendingStatus,
297
305
  isPending: options.isPending,
298
306
  resultExtractor: options.resultExtractor,
307
+ signal: options.signal,
299
308
  });
300
309
  };
301
310
  this.maxNetworkRetries =
@@ -642,10 +651,13 @@ class ZapierApiClient {
642
651
  }
643
652
  /**
644
653
  * Run a single approval round: create the approval, open the URL (poll mode)
645
- * or throw (fail mode), poll until resolved, and emit events. Throws on
654
+ * or throw (throw mode), poll until resolved, and emit events. Throws on
646
655
  * denied/timeout/unexpected status. Returns on approved.
656
+ *
657
+ * Caller is responsible for passing a non-"disabled" mode; this method
658
+ * unconditionally creates an approval.
647
659
  */
648
- async runOneApprovalRound(buildContext) {
660
+ async runOneApprovalRound(buildContext, mode) {
649
661
  const context = buildContext();
650
662
  // Route through rawFetch so the approval POST shares auth + 429 retry.
651
663
  let approvalResponse;
@@ -724,8 +736,7 @@ class ZapierApiClient {
724
736
  approvalId: approval.approval_id,
725
737
  approvalUrl: approval.approval_url,
726
738
  });
727
- const approvalMode = this.options.approvalMode ?? getZapierApprovalMode();
728
- if (approvalMode === "fail") {
739
+ if (mode === "throw") {
729
740
  throw new ZapierApprovalError("This request requires approval.", {
730
741
  approvalId: approval.approval_id,
731
742
  approvalUrl: approval.approval_url,
@@ -733,7 +744,7 @@ class ZapierApiClient {
733
744
  status: "pending",
734
745
  });
735
746
  }
736
- // approvalMode: "poll" (default) — open browser and poll
747
+ // mode === "poll" — open browser and poll
737
748
  await openApproval(approval.approval_url);
738
749
  const timeoutMs = this.options.approvalTimeoutMs ?? DEFAULT_APPROVAL_TIMEOUT_MS;
739
750
  let rawPollResult;
@@ -29,6 +29,13 @@ export interface PollOptions<TResult = unknown> {
29
29
  resultExtractor?: (response: unknown) => TResult;
30
30
  /** Initial delay before the first poll attempt (in milliseconds) */
31
31
  initialDelay?: number;
32
+ /**
33
+ * Abort signal observed by the initial delay, the inter-poll sleep,
34
+ * and (when forwarded into `fetchPoll`) the in-flight HTTP request.
35
+ * On abort, this function throws `AbortError` rather than continuing
36
+ * to poll or treating it as a transient failure.
37
+ */
38
+ signal?: AbortSignal;
32
39
  }
33
40
  declare const enum PollStatus {
34
41
  Success = "success",
@@ -1 +1 @@
1
- {"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../src/api/polling.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,OAAO;IAC5C,8CAA8C;IAC9C,SAAS,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAC3C,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,mBAAW,UAAU;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,OAAO,IAAI;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAgEF;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAG,OAAO,EACvD,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAgGlB"}
1
+ {"version":3,"file":"polling.d.ts","sourceRoot":"","sources":["../../src/api/polling.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiCH;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAG5D;AAED;;GAEG;AACH,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,OAAO;IAC5C,8CAA8C;IAC9C,SAAS,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uGAAuG;IACvG,SAAS,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IAC3C,uDAAuD;IACvD,eAAe,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC;IACjD,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAWD,mBAAW,UAAU;IACnB,OAAO,YAAY;IACnB,QAAQ,aAAa;CACtB;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,OAAO,IAAI;IAC1C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAgEF;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,GAAG,OAAO,EACvD,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CA8GlB"}
@@ -6,6 +6,7 @@
6
6
  */
7
7
  import { ZapierTimeoutError, ZapierApiError, ZapierValidationError, } from "../types/errors";
8
8
  import { sleep, calculateErrorBackoffMs, MAX_CONSECUTIVE_ERRORS, } from "../utils/retry-utils";
9
+ import { isAbortError } from "../utils/abort-utils";
9
10
  // Constants
10
11
  const DEFAULT_TIMEOUT_MS = 180000;
11
12
  const DEFAULT_SUCCESS_STATUS = 200;
@@ -33,6 +34,14 @@ export function getPollingInterval(elapsedMs) {
33
34
  const stage = POLLING_STAGES.find(([threshold]) => elapsedMs < threshold);
34
35
  return stage ? stage[1] : DEFAULT_MAX_POLLING_INTERVAL_MS;
35
36
  }
37
+ function makeAbortError() {
38
+ if (typeof DOMException !== "undefined") {
39
+ return new DOMException("Polling was aborted", "AbortError");
40
+ }
41
+ const err = new Error("Polling was aborted");
42
+ err.name = "AbortError";
43
+ return err;
44
+ }
36
45
  const processResponse = async (response, successStatus, pendingStatus, isPending, resultExtractor, errorCount) => {
37
46
  // Handle other error responses
38
47
  if (!response.ok) {
@@ -87,7 +96,7 @@ const processResponse = async (response, successStatus, pendingStatus, isPending
87
96
  * @throws {ZapierApiError} When the API returns consecutive errors
88
97
  */
89
98
  export async function pollUntilComplete(options) {
90
- const { fetchPoll, timeoutMs = DEFAULT_TIMEOUT_MS, initialDelay = DEFAULT_INITIAL_DELAY_MS, successStatus = DEFAULT_SUCCESS_STATUS, pendingStatus = DEFAULT_PENDING_STATUS, isPending, resultExtractor = (response) => response, } = options;
99
+ const { fetchPoll, timeoutMs = DEFAULT_TIMEOUT_MS, initialDelay = DEFAULT_INITIAL_DELAY_MS, successStatus = DEFAULT_SUCCESS_STATUS, pendingStatus = DEFAULT_PENDING_STATUS, isPending, resultExtractor = (response) => response, signal, } = options;
91
100
  // Validate input parameters
92
101
  if (timeoutMs <= 0) {
93
102
  throw new ZapierValidationError("Timeout must be greater than 0", {
@@ -99,14 +108,23 @@ export async function pollUntilComplete(options) {
99
108
  details: { initialDelay },
100
109
  });
101
110
  }
111
+ if (signal?.aborted)
112
+ throw makeAbortError();
102
113
  const startTime = Date.now();
103
114
  let attempts = 0;
104
115
  let errorCount = 0;
105
- // Apply initial delay if specified
116
+ // Apply initial delay if specified. `sleep(..., signal)` resolves
117
+ // early on abort; the explicit re-check below converts that into a
118
+ // proper AbortError throw so the loop doesn't issue a request after
119
+ // the caller cancelled.
106
120
  if (initialDelay > 0) {
107
- await sleep(initialDelay);
121
+ await sleep(initialDelay, signal);
122
+ if (signal?.aborted)
123
+ throw makeAbortError();
108
124
  }
109
125
  while (true) {
126
+ if (signal?.aborted)
127
+ throw makeAbortError();
110
128
  const elapsedTime = Date.now() - startTime;
111
129
  // Check if we've exceeded the timeout
112
130
  if (elapsedTime >= timeoutMs) {
@@ -118,7 +136,9 @@ export async function pollUntilComplete(options) {
118
136
  if (attempts > 0) {
119
137
  const interval = getPollingInterval(elapsedTime);
120
138
  const waitTime = calculateErrorBackoffMs(interval, errorCount);
121
- await sleep(waitTime);
139
+ await sleep(waitTime, signal);
140
+ if (signal?.aborted)
141
+ throw makeAbortError();
122
142
  }
123
143
  attempts++;
124
144
  // Perform the poll request
@@ -135,6 +155,11 @@ export async function pollUntilComplete(options) {
135
155
  }
136
156
  }
137
157
  catch (error) {
158
+ // Abort is intent, not failure. Surface immediately rather than
159
+ // counting it toward MAX_CONSECUTIVE_ERRORS and wrapping in
160
+ // ZapierApiError.
161
+ if (isAbortError(error))
162
+ throw error;
138
163
  errorCount++;
139
164
  if (errorCount >= MAX_CONSECUTIVE_ERRORS) {
140
165
  throw new ZapierApiError(`Failed to poll after ${errorCount} consecutive errors: ${error instanceof Error ? error.message : String(error)}`, {
@@ -40,16 +40,17 @@ export interface ApiClientOptions {
40
40
  * Default is 60000 (60 seconds).
41
41
  */
42
42
  maxNetworkRetryDelayMs?: number;
43
- /**
44
- * Whether this session is interactive (user can visit approval URLs).
45
- */
46
- isInteractive?: boolean;
47
43
  /**
48
44
  * Controls how the approval flow is handled.
49
- * - "poll": (default) Opens the approval URL in a browser and polls until resolved.
50
- * - "fail": Creates the approval and throws a ZapierApprovalError immediately with the approval URL.
45
+ * - "disabled": (default when env var is unset) Throw a ZapierApprovalError
46
+ * on approval-required responses without creating an approval.
47
+ * - "poll": Create the approval, open the URL in a browser, poll until
48
+ * resolved, and retry the original request on success.
49
+ * - "throw": Create the approval and throw a ZapierApprovalError immediately
50
+ * with the approval URL so the caller can surface it.
51
+ * Defaults to the ZAPIER_APPROVAL_MODE env var, then "disabled".
51
52
  */
52
- approvalMode?: "poll" | "fail";
53
+ approvalMode?: "disabled" | "poll" | "throw";
53
54
  /**
54
55
  * Timeout in ms for approval polling. Default: 600000 (10 minutes).
55
56
  */
@@ -123,6 +124,13 @@ export interface RequestOptions {
123
124
  * provide this so the SDK can create an approval with the correct context.
124
125
  */
125
126
  approvalContext?: () => RequestContext;
127
+ /**
128
+ * Abort signal forwarded to the underlying `fetch`. Aborting cancels
129
+ * the in-flight request and any rate-limit retry sleep before the
130
+ * next attempt; the resulting `AbortError` is the caller's
131
+ * responsibility to handle.
132
+ */
133
+ signal?: AbortSignal;
126
134
  }
127
135
  export interface PollOptions extends RequestOptions {
128
136
  initialDelay?: number;
@@ -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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"}
@@ -30,20 +30,19 @@ 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
- * Whether this session is interactive (user can visit approval URLs).
35
- *
36
- * Read lazily so tests can set the env var after module import.
37
- */
38
- export declare function getZapierIsInteractive(): boolean;
39
33
  /**
40
34
  * Approval flow behavior from environment variable.
41
- * - "poll": (default) Opens the approval URL in a browser and polls until resolved.
42
- * - "fail": Creates the approval and throws immediately with the approval URL.
35
+ * - "disabled": (default when env var is unset) Throw a ZapierApprovalError on
36
+ * approval-required responses without creating an approval. Callers must
37
+ * explicitly opt in to approvals via "poll" or "throw".
38
+ * - "poll": Create the approval, open the URL in a browser, poll until
39
+ * resolved, and retry the original request on success.
40
+ * - "throw": Create the approval and throw a ZapierApprovalError immediately
41
+ * with the approval URL so the caller can surface it.
43
42
  *
44
43
  * Read lazily so tests can set the env var after module import.
45
44
  */
46
- export declare function getZapierApprovalMode(): "poll" | "fail" | undefined;
45
+ export declare function getZapierApprovalMode(): "disabled" | "poll" | "throw" | undefined;
47
46
  /**
48
47
  * Default timeout for approval polling (10 minutes)
49
48
  */
@@ -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;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,GAAG,MAAM,GAAG,SAAS,CAInE;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;;;;;;;;;;;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,24 +43,21 @@ 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
- * Whether this session is interactive (user can visit approval URLs).
48
- *
49
- * Read lazily so tests can set the env var after module import.
50
- */
51
- export function getZapierIsInteractive() {
52
- return globalThis.process?.env?.ZAPIER_IS_INTERACTIVE === "true";
53
- }
54
46
  /**
55
47
  * Approval flow behavior from environment variable.
56
- * - "poll": (default) Opens the approval URL in a browser and polls until resolved.
57
- * - "fail": Creates the approval and throws immediately with the approval URL.
48
+ * - "disabled": (default when env var is unset) Throw a ZapierApprovalError on
49
+ * approval-required responses without creating an approval. Callers must
50
+ * explicitly opt in to approvals via "poll" or "throw".
51
+ * - "poll": Create the approval, open the URL in a browser, poll until
52
+ * resolved, and retry the original request on success.
53
+ * - "throw": Create the approval and throw a ZapierApprovalError immediately
54
+ * with the approval URL so the caller can surface it.
58
55
  *
59
56
  * Read lazily so tests can set the env var after module import.
60
57
  */
61
58
  export function getZapierApprovalMode() {
62
59
  const value = globalThis.process?.env?.ZAPIER_APPROVAL_MODE;
63
- if (value === "poll" || value === "fail")
60
+ if (value === "disabled" || value === "poll" || value === "throw")
64
61
  return value;
65
62
  return undefined;
66
63
  }