feat: tighten feature pulse flow and backend resilience
This commit is contained in:
@@ -11,17 +11,34 @@ const baseHeaders = {
|
||||
'X-Appwrite-Project': projectId,
|
||||
}
|
||||
|
||||
const REQUEST_TIMEOUT_MS = Number(process.env.BUILDPULSE_APPWRITE_TIMEOUT_MS || 4500)
|
||||
const documentUrl = `${endpoint}/databases/${BUILDPULSE_DATABASE_ID}/collections/${BUILDPULSE_COLLECTION_ID}/documents/${BUILDPULSE_DOCUMENT_ID}`
|
||||
const collectionUrl = `${endpoint}/databases/${BUILDPULSE_DATABASE_ID}/collections/${BUILDPULSE_COLLECTION_ID}/documents`
|
||||
|
||||
async function appwriteFetch(url, init = {}) {
|
||||
const response = await fetch(url, {
|
||||
...init,
|
||||
headers: {
|
||||
...baseHeaders,
|
||||
...(init.headers || {}),
|
||||
},
|
||||
})
|
||||
const controller = new AbortController()
|
||||
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS)
|
||||
|
||||
let response
|
||||
try {
|
||||
response = await fetch(url, {
|
||||
...init,
|
||||
signal: init.signal || controller.signal,
|
||||
headers: {
|
||||
...baseHeaders,
|
||||
...(init.headers || {}),
|
||||
},
|
||||
})
|
||||
} catch (error) {
|
||||
if (error?.name === 'AbortError') {
|
||||
const timeoutError = new Error(`Appwrite request timed out after ${REQUEST_TIMEOUT_MS}ms`)
|
||||
timeoutError.status = 504
|
||||
throw timeoutError
|
||||
}
|
||||
throw error
|
||||
} finally {
|
||||
clearTimeout(timeout)
|
||||
}
|
||||
|
||||
if (response.status === 204) return null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user