mirror of
https://github.com/tomru/pfadi-bussle.git
synced 2026-03-03 06:27:11 +01:00
add retry for sending mail *sigh*
This commit is contained in:
@@ -2,6 +2,7 @@ import { Booking } from '../db/booking'
|
|||||||
import { getBaseURL } from '../helpers/url'
|
import { getBaseURL } from '../helpers/url'
|
||||||
import { daysFormatFrontend } from './date'
|
import { daysFormatFrontend } from './date'
|
||||||
import { generateCalendarEntry } from './ical'
|
import { generateCalendarEntry } from './ical'
|
||||||
|
import { retryWithDelay } from './retryWithDelay'
|
||||||
|
|
||||||
const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY
|
const SENDGRID_API_KEY = process.env.SENDGRID_API_KEY
|
||||||
const ADMIN_EMAIL = process.env.ADMIN_EMAIL
|
const ADMIN_EMAIL = process.env.ADMIN_EMAIL
|
||||||
@@ -195,12 +196,17 @@ async function sendMail({
|
|||||||
},
|
},
|
||||||
body: JSON.stringify(data),
|
body: JSON.stringify(data),
|
||||||
}
|
}
|
||||||
const resp = await fetch(SENDGRID_URL, fetchOptions)
|
|
||||||
const bodyText = await resp.text()
|
|
||||||
|
|
||||||
if (!resp.ok) {
|
return retryWithDelay({
|
||||||
throw new Error(
|
run: async () => {
|
||||||
`Unable to send mail, status ${resp.status} ${resp.statusText}, ${bodyText}`
|
const resp = await fetch(SENDGRID_URL, fetchOptions)
|
||||||
)
|
const bodyText = await resp.text()
|
||||||
}
|
|
||||||
|
if (!resp.ok) {
|
||||||
|
throw new Error(
|
||||||
|
`Failed to send mail with status ${resp.status}: ${bodyText}`
|
||||||
|
)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
20
helpers/retryWithDelay.ts
Normal file
20
helpers/retryWithDelay.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import pRetry from 'p-retry'
|
||||||
|
|
||||||
|
export function retryWithDelay<T>({
|
||||||
|
run,
|
||||||
|
delay = 1000,
|
||||||
|
}: {
|
||||||
|
run: () => Promise<T>
|
||||||
|
delay?: number
|
||||||
|
}) {
|
||||||
|
return pRetry(run, {
|
||||||
|
retries: 2,
|
||||||
|
onFailedAttempt: (error) => {
|
||||||
|
console.info(
|
||||||
|
`Attempt ${error.attemptNumber}: ${error.message}. ${error.retriesLeft} retries left`
|
||||||
|
)
|
||||||
|
|
||||||
|
return new Promise((resolve) => setTimeout(resolve, delay))
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
19
package-lock.json
generated
19
package-lock.json
generated
@@ -2796,6 +2796,11 @@
|
|||||||
"integrity": "sha512-QZ8EMG2P3230GQNEMXtSJq8v8zJkJqs8xpbohMbBefYG7i1MX2YzOsDoBWF2dpq36mrkXpoNgmmeVnXIT0DYtw==",
|
"integrity": "sha512-QZ8EMG2P3230GQNEMXtSJq8v8zJkJqs8xpbohMbBefYG7i1MX2YzOsDoBWF2dpq36mrkXpoNgmmeVnXIT0DYtw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"@types/retry": {
|
||||||
|
"version": "0.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz",
|
||||||
|
"integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="
|
||||||
|
},
|
||||||
"@types/stack-utils": {
|
"@types/stack-utils": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.0.tgz",
|
||||||
@@ -9454,6 +9459,15 @@
|
|||||||
"aggregate-error": "^3.0.0"
|
"aggregate-error": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"p-retry": {
|
||||||
|
"version": "4.2.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.2.0.tgz",
|
||||||
|
"integrity": "sha512-jPH38/MRh263KKcq0wBNOGFJbm+U6784RilTmHjB/HM9kH9V8WlCpVUcdOmip9cjXOh6MxZ5yk1z2SjDUJfWmA==",
|
||||||
|
"requires": {
|
||||||
|
"@types/retry": "^0.12.0",
|
||||||
|
"retry": "^0.12.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"p-try": {
|
"p-try": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
@@ -10783,6 +10797,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
|
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
|
||||||
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
|
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg=="
|
||||||
},
|
},
|
||||||
|
"retry": {
|
||||||
|
"version": "0.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
|
||||||
|
"integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs="
|
||||||
|
},
|
||||||
"rework": {
|
"rework": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz",
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
"mongoose": "^5.10.13",
|
"mongoose": "^5.10.13",
|
||||||
"next": "^10.0.1",
|
"next": "^10.0.1",
|
||||||
"next-iron-session": "^4.1.10",
|
"next-iron-session": "^4.1.10",
|
||||||
|
"p-retry": "^4.2.0",
|
||||||
"react": "^17.0.1",
|
"react": "^17.0.1",
|
||||||
"react-calendar": "^3.2.0",
|
"react-calendar": "^3.2.0",
|
||||||
"react-dom": "^17.0.1",
|
"react-dom": "^17.0.1",
|
||||||
|
|||||||
Reference in New Issue
Block a user