@upyo/sendgrid 0.5.0-dev.164 → 0.5.0-dev.168
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 +44 -7
- package/dist/index.js +44 -7
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -134,17 +134,18 @@ var SendGridHttpClient = class {
|
|
|
134
134
|
for (const [key, value] of Object.entries(this.config.headers)) headers.set(key, value);
|
|
135
135
|
const controller = new AbortController();
|
|
136
136
|
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
137
|
-
const
|
|
137
|
+
const combinedSignal = combineSignals(controller.signal, options.signal);
|
|
138
138
|
try {
|
|
139
139
|
return await globalThis.fetch(url, {
|
|
140
140
|
...options,
|
|
141
141
|
headers,
|
|
142
|
-
signal
|
|
142
|
+
signal: combinedSignal.signal
|
|
143
143
|
});
|
|
144
144
|
} catch (error) {
|
|
145
145
|
if (isAbortError$1(error) && controller.signal.aborted && !options.signal?.aborted) throw new Error(`SendGrid API request timed out after ${this.config.timeout} ms.`);
|
|
146
146
|
throw error;
|
|
147
147
|
} finally {
|
|
148
|
+
combinedSignal.cleanup();
|
|
148
149
|
clearTimeout(timeoutId);
|
|
149
150
|
}
|
|
150
151
|
}
|
|
@@ -204,12 +205,12 @@ function isAbortError$1(error) {
|
|
|
204
205
|
return error instanceof Error && error.name === "AbortError";
|
|
205
206
|
}
|
|
206
207
|
function sleep(milliseconds, signal) {
|
|
207
|
-
if (signal?.aborted) return Promise.reject(createAbortError());
|
|
208
|
+
if (signal?.aborted) return Promise.reject(createAbortError(signal));
|
|
208
209
|
return new Promise((resolve, reject) => {
|
|
209
210
|
function abort() {
|
|
210
211
|
clearTimeout(timeoutId);
|
|
211
212
|
signal?.removeEventListener("abort", abort);
|
|
212
|
-
reject(createAbortError());
|
|
213
|
+
reject(createAbortError(signal));
|
|
213
214
|
}
|
|
214
215
|
const timeoutId = setTimeout(() => {
|
|
215
216
|
signal?.removeEventListener("abort", abort);
|
|
@@ -218,8 +219,41 @@ function sleep(milliseconds, signal) {
|
|
|
218
219
|
signal?.addEventListener("abort", abort, { once: true });
|
|
219
220
|
});
|
|
220
221
|
}
|
|
221
|
-
function createAbortError() {
|
|
222
|
-
return new DOMException("The operation was aborted.", "AbortError");
|
|
222
|
+
function createAbortError(signal) {
|
|
223
|
+
return signal?.reason ?? new DOMException("The operation was aborted.", "AbortError");
|
|
224
|
+
}
|
|
225
|
+
function combineSignals(timeoutSignal, externalSignal) {
|
|
226
|
+
if (externalSignal == null) return {
|
|
227
|
+
signal: timeoutSignal,
|
|
228
|
+
cleanup: () => {}
|
|
229
|
+
};
|
|
230
|
+
if (typeof AbortSignal.any === "function") return {
|
|
231
|
+
signal: AbortSignal.any([timeoutSignal, externalSignal]),
|
|
232
|
+
cleanup: () => {}
|
|
233
|
+
};
|
|
234
|
+
const controller = new AbortController();
|
|
235
|
+
const cleanup = () => {
|
|
236
|
+
timeoutSignal.removeEventListener("abort", abortFromTimeout);
|
|
237
|
+
externalSignal.removeEventListener("abort", abortFromExternal);
|
|
238
|
+
};
|
|
239
|
+
const abortFromTimeout = () => {
|
|
240
|
+
cleanup();
|
|
241
|
+
controller.abort(timeoutSignal.reason);
|
|
242
|
+
};
|
|
243
|
+
const abortFromExternal = () => {
|
|
244
|
+
cleanup();
|
|
245
|
+
controller.abort(externalSignal.reason);
|
|
246
|
+
};
|
|
247
|
+
if (timeoutSignal.aborted) controller.abort(timeoutSignal.reason);
|
|
248
|
+
else if (externalSignal.aborted) controller.abort(externalSignal.reason);
|
|
249
|
+
else {
|
|
250
|
+
timeoutSignal.addEventListener("abort", abortFromTimeout, { once: true });
|
|
251
|
+
externalSignal.addEventListener("abort", abortFromExternal, { once: true });
|
|
252
|
+
}
|
|
253
|
+
return {
|
|
254
|
+
signal: controller.signal,
|
|
255
|
+
cleanup
|
|
256
|
+
};
|
|
223
257
|
}
|
|
224
258
|
|
|
225
259
|
//#endregion
|
|
@@ -452,7 +486,7 @@ var SendGridTransport = class {
|
|
|
452
486
|
provider: "sendgrid"
|
|
453
487
|
};
|
|
454
488
|
} catch (error) {
|
|
455
|
-
if (
|
|
489
|
+
if (isCallerAbort(error, options?.signal)) throw error;
|
|
456
490
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
457
491
|
return createSendGridFailure(errorMessage, error);
|
|
458
492
|
}
|
|
@@ -548,6 +582,9 @@ function createSendGridFailure(message, error) {
|
|
|
548
582
|
});
|
|
549
583
|
return (0, __upyo_core.createFailedReceipt)(message, { provider: "sendgrid" });
|
|
550
584
|
}
|
|
585
|
+
function isCallerAbort(error, signal) {
|
|
586
|
+
return signal?.aborted === true && (isAbortError(error) || error === signal.reason);
|
|
587
|
+
}
|
|
551
588
|
function isAbortError(error) {
|
|
552
589
|
return error instanceof Error && error.name === "AbortError";
|
|
553
590
|
}
|
package/dist/index.js
CHANGED
|
@@ -111,17 +111,18 @@ var SendGridHttpClient = class {
|
|
|
111
111
|
for (const [key, value] of Object.entries(this.config.headers)) headers.set(key, value);
|
|
112
112
|
const controller = new AbortController();
|
|
113
113
|
const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);
|
|
114
|
-
const
|
|
114
|
+
const combinedSignal = combineSignals(controller.signal, options.signal);
|
|
115
115
|
try {
|
|
116
116
|
return await globalThis.fetch(url, {
|
|
117
117
|
...options,
|
|
118
118
|
headers,
|
|
119
|
-
signal
|
|
119
|
+
signal: combinedSignal.signal
|
|
120
120
|
});
|
|
121
121
|
} catch (error) {
|
|
122
122
|
if (isAbortError$1(error) && controller.signal.aborted && !options.signal?.aborted) throw new Error(`SendGrid API request timed out after ${this.config.timeout} ms.`);
|
|
123
123
|
throw error;
|
|
124
124
|
} finally {
|
|
125
|
+
combinedSignal.cleanup();
|
|
125
126
|
clearTimeout(timeoutId);
|
|
126
127
|
}
|
|
127
128
|
}
|
|
@@ -181,12 +182,12 @@ function isAbortError$1(error) {
|
|
|
181
182
|
return error instanceof Error && error.name === "AbortError";
|
|
182
183
|
}
|
|
183
184
|
function sleep(milliseconds, signal) {
|
|
184
|
-
if (signal?.aborted) return Promise.reject(createAbortError());
|
|
185
|
+
if (signal?.aborted) return Promise.reject(createAbortError(signal));
|
|
185
186
|
return new Promise((resolve, reject) => {
|
|
186
187
|
function abort() {
|
|
187
188
|
clearTimeout(timeoutId);
|
|
188
189
|
signal?.removeEventListener("abort", abort);
|
|
189
|
-
reject(createAbortError());
|
|
190
|
+
reject(createAbortError(signal));
|
|
190
191
|
}
|
|
191
192
|
const timeoutId = setTimeout(() => {
|
|
192
193
|
signal?.removeEventListener("abort", abort);
|
|
@@ -195,8 +196,41 @@ function sleep(milliseconds, signal) {
|
|
|
195
196
|
signal?.addEventListener("abort", abort, { once: true });
|
|
196
197
|
});
|
|
197
198
|
}
|
|
198
|
-
function createAbortError() {
|
|
199
|
-
return new DOMException("The operation was aborted.", "AbortError");
|
|
199
|
+
function createAbortError(signal) {
|
|
200
|
+
return signal?.reason ?? new DOMException("The operation was aborted.", "AbortError");
|
|
201
|
+
}
|
|
202
|
+
function combineSignals(timeoutSignal, externalSignal) {
|
|
203
|
+
if (externalSignal == null) return {
|
|
204
|
+
signal: timeoutSignal,
|
|
205
|
+
cleanup: () => {}
|
|
206
|
+
};
|
|
207
|
+
if (typeof AbortSignal.any === "function") return {
|
|
208
|
+
signal: AbortSignal.any([timeoutSignal, externalSignal]),
|
|
209
|
+
cleanup: () => {}
|
|
210
|
+
};
|
|
211
|
+
const controller = new AbortController();
|
|
212
|
+
const cleanup = () => {
|
|
213
|
+
timeoutSignal.removeEventListener("abort", abortFromTimeout);
|
|
214
|
+
externalSignal.removeEventListener("abort", abortFromExternal);
|
|
215
|
+
};
|
|
216
|
+
const abortFromTimeout = () => {
|
|
217
|
+
cleanup();
|
|
218
|
+
controller.abort(timeoutSignal.reason);
|
|
219
|
+
};
|
|
220
|
+
const abortFromExternal = () => {
|
|
221
|
+
cleanup();
|
|
222
|
+
controller.abort(externalSignal.reason);
|
|
223
|
+
};
|
|
224
|
+
if (timeoutSignal.aborted) controller.abort(timeoutSignal.reason);
|
|
225
|
+
else if (externalSignal.aborted) controller.abort(externalSignal.reason);
|
|
226
|
+
else {
|
|
227
|
+
timeoutSignal.addEventListener("abort", abortFromTimeout, { once: true });
|
|
228
|
+
externalSignal.addEventListener("abort", abortFromExternal, { once: true });
|
|
229
|
+
}
|
|
230
|
+
return {
|
|
231
|
+
signal: controller.signal,
|
|
232
|
+
cleanup
|
|
233
|
+
};
|
|
200
234
|
}
|
|
201
235
|
|
|
202
236
|
//#endregion
|
|
@@ -429,7 +463,7 @@ var SendGridTransport = class {
|
|
|
429
463
|
provider: "sendgrid"
|
|
430
464
|
};
|
|
431
465
|
} catch (error) {
|
|
432
|
-
if (
|
|
466
|
+
if (isCallerAbort(error, options?.signal)) throw error;
|
|
433
467
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
434
468
|
return createSendGridFailure(errorMessage, error);
|
|
435
469
|
}
|
|
@@ -525,6 +559,9 @@ function createSendGridFailure(message, error) {
|
|
|
525
559
|
});
|
|
526
560
|
return createFailedReceipt(message, { provider: "sendgrid" });
|
|
527
561
|
}
|
|
562
|
+
function isCallerAbort(error, signal) {
|
|
563
|
+
return signal?.aborted === true && (isAbortError(error) || error === signal.reason);
|
|
564
|
+
}
|
|
528
565
|
function isAbortError(error) {
|
|
529
566
|
return error instanceof Error && error.name === "AbortError";
|
|
530
567
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@upyo/sendgrid",
|
|
3
|
-
"version": "0.5.0-dev.
|
|
3
|
+
"version": "0.5.0-dev.168",
|
|
4
4
|
"description": "SendGrid transport for Upyo email library",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"email",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
},
|
|
54
54
|
"sideEffects": false,
|
|
55
55
|
"peerDependencies": {
|
|
56
|
-
"@upyo/core": "0.5.0-dev.
|
|
56
|
+
"@upyo/core": "0.5.0-dev.168+1e808a3a"
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
59
|
"tsdown": "^0.12.7",
|