@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 +11 -7
- package/dist/index.js +12 -8
- package/package.json +2 -2
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
|
|
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 (
|
|
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
|
|
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 (
|
|
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.
|
|
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.
|
|
58
|
+
"@upyo/core": "0.5.0-dev.170+643994fd"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"tsdown": "^0.12.7",
|