@upyo/ses 0.5.0-dev.164 → 0.5.0-dev.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -139,17 +139,18 @@ var SesHttpClient = class {
139
139
  for (const [key, value] of Object.entries(this.config.headers)) signedHeaders.set(key, value);
140
140
  const controller = new AbortController();
141
141
  const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
142
- const signal = options.signal == null ? controller.signal : AbortSignal.any([controller.signal, options.signal]);
142
+ const combinedSignal = (0, __upyo_core.combineSignals)(controller.signal, options.signal);
143
143
  try {
144
144
  return await globalThis.fetch(url, {
145
145
  ...options,
146
146
  headers: this.headersToRecord(signedHeaders),
147
- signal
147
+ signal: combinedSignal.signal
148
148
  });
149
149
  } catch (error) {
150
150
  if (isAbortError$1(error) && controller.signal.aborted && !options.signal?.aborted) throw new Error(`SES API request timed out after ${this.config.timeout} ms.`);
151
151
  throw error;
152
152
  } finally {
153
+ combinedSignal.cleanup();
153
154
  clearTimeout(timeoutId);
154
155
  }
155
156
  }
@@ -239,12 +240,12 @@ function isAbortError$1(error) {
239
240
  return error instanceof Error && error.name === "AbortError";
240
241
  }
241
242
  function sleep(milliseconds, signal) {
242
- if (signal?.aborted) return Promise.reject(createAbortError());
243
+ if (signal?.aborted) return Promise.reject(createAbortError(signal));
243
244
  return new Promise((resolve, reject) => {
244
245
  function abort() {
245
246
  clearTimeout(timeoutId);
246
247
  signal?.removeEventListener("abort", abort);
247
- reject(createAbortError());
248
+ reject(createAbortError(signal));
248
249
  }
249
250
  const timeoutId = setTimeout(() => {
250
251
  signal?.removeEventListener("abort", abort);
@@ -253,8 +254,8 @@ function sleep(milliseconds, signal) {
253
254
  signal?.addEventListener("abort", abort, { once: true });
254
255
  });
255
256
  }
256
- function createAbortError() {
257
- return new DOMException("The operation was aborted.", "AbortError");
257
+ function createAbortError(signal) {
258
+ return signal?.reason ?? new DOMException("The operation was aborted.", "AbortError");
258
259
  }
259
260
  var SesApiError = class extends Error {
260
261
  statusCode;
@@ -435,7 +436,7 @@ var SesTransport = class {
435
436
  provider: "ses"
436
437
  };
437
438
  } catch (error) {
438
- if (isAbortError(error) && options?.signal?.aborted) throw error;
439
+ if (isCallerAbort(error, options?.signal)) throw error;
439
440
  const errorMessage = error instanceof Error ? error.message : String(error);
440
441
  return createSesFailure(errorMessage, error);
441
442
  }
@@ -510,6 +511,9 @@ function createSesFailure(message, error) {
510
511
  });
511
512
  return (0, __upyo_core.createFailedReceipt)(message, { provider: "ses" });
512
513
  }
514
+ function isCallerAbort(error, signal) {
515
+ return signal?.aborted === true && (isAbortError(error) || error === signal.reason);
516
+ }
513
517
  function isAbortError(error) {
514
518
  return error instanceof Error && error.name === "AbortError";
515
519
  }
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createFailedReceipt, parseRetryAfter } from "@upyo/core";
1
+ import { combineSignals, createFailedReceipt, parseRetryAfter } from "@upyo/core";
2
2
 
3
3
  //#region src/config.ts
4
4
  /**
@@ -116,17 +116,18 @@ var SesHttpClient = class {
116
116
  for (const [key, value] of Object.entries(this.config.headers)) signedHeaders.set(key, value);
117
117
  const controller = new AbortController();
118
118
  const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
119
- const signal = options.signal == null ? controller.signal : AbortSignal.any([controller.signal, options.signal]);
119
+ const combinedSignal = combineSignals(controller.signal, options.signal);
120
120
  try {
121
121
  return await globalThis.fetch(url, {
122
122
  ...options,
123
123
  headers: this.headersToRecord(signedHeaders),
124
- signal
124
+ signal: combinedSignal.signal
125
125
  });
126
126
  } catch (error) {
127
127
  if (isAbortError$1(error) && controller.signal.aborted && !options.signal?.aborted) throw new Error(`SES API request timed out after ${this.config.timeout} ms.`);
128
128
  throw error;
129
129
  } finally {
130
+ combinedSignal.cleanup();
130
131
  clearTimeout(timeoutId);
131
132
  }
132
133
  }
@@ -216,12 +217,12 @@ function isAbortError$1(error) {
216
217
  return error instanceof Error && error.name === "AbortError";
217
218
  }
218
219
  function sleep(milliseconds, signal) {
219
- if (signal?.aborted) return Promise.reject(createAbortError());
220
+ if (signal?.aborted) return Promise.reject(createAbortError(signal));
220
221
  return new Promise((resolve, reject) => {
221
222
  function abort() {
222
223
  clearTimeout(timeoutId);
223
224
  signal?.removeEventListener("abort", abort);
224
- reject(createAbortError());
225
+ reject(createAbortError(signal));
225
226
  }
226
227
  const timeoutId = setTimeout(() => {
227
228
  signal?.removeEventListener("abort", abort);
@@ -230,8 +231,8 @@ function sleep(milliseconds, signal) {
230
231
  signal?.addEventListener("abort", abort, { once: true });
231
232
  });
232
233
  }
233
- function createAbortError() {
234
- return new DOMException("The operation was aborted.", "AbortError");
234
+ function createAbortError(signal) {
235
+ return signal?.reason ?? new DOMException("The operation was aborted.", "AbortError");
235
236
  }
236
237
  var SesApiError = class extends Error {
237
238
  statusCode;
@@ -412,7 +413,7 @@ var SesTransport = class {
412
413
  provider: "ses"
413
414
  };
414
415
  } catch (error) {
415
- if (isAbortError(error) && options?.signal?.aborted) throw error;
416
+ if (isCallerAbort(error, options?.signal)) throw error;
416
417
  const errorMessage = error instanceof Error ? error.message : String(error);
417
418
  return createSesFailure(errorMessage, error);
418
419
  }
@@ -487,6 +488,9 @@ function createSesFailure(message, error) {
487
488
  });
488
489
  return createFailedReceipt(message, { provider: "ses" });
489
490
  }
491
+ function isCallerAbort(error, signal) {
492
+ return signal?.aborted === true && (isAbortError(error) || error === signal.reason);
493
+ }
490
494
  function isAbortError(error) {
491
495
  return error instanceof Error && error.name === "AbortError";
492
496
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@upyo/ses",
3
- "version": "0.5.0-dev.164",
3
+ "version": "0.5.0-dev.170",
4
4
  "description": "Amazon SES transport for Upyo email library",
5
5
  "keywords": [
6
6
  "email",
@@ -55,7 +55,7 @@
55
55
  },
56
56
  "sideEffects": false,
57
57
  "peerDependencies": {
58
- "@upyo/core": "0.5.0-dev.164+5e283c64"
58
+ "@upyo/core": "0.5.0-dev.170+643994fd"
59
59
  },
60
60
  "devDependencies": {
61
61
  "tsdown": "^0.12.7",