Skip to content

Commit d7b5215

Browse files
committed
fix: retry notion getter
1 parent b91ab83 commit d7b5215

1 file changed

Lines changed: 22 additions & 2 deletions

File tree

src/components/Notion/utils.ts

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,31 @@ import { NotionAPI } from 'notion-client'
33
import { getRevalidate } from 'utils/revalidate'
44

55
const notion = new NotionAPI()
6+
7+
const getNotionPageWithRetry = async (id: string, retries = 3) => {
8+
try {
9+
return await notion.getPage(id)
10+
} catch (e: unknown) {
11+
if (retries > 0) {
12+
const error = e as { status?: number; response?: { status?: number; headers?: Record<string, string> } }
13+
const status = error.response?.status ?? error.status
14+
if (status === 429) {
15+
const retryAfterHeader = error.response?.headers?.['retry-after']
16+
console.log(retryAfterHeader)
17+
const delay = retryAfterHeader ? parseFloat(retryAfterHeader) * 1000 : 5000
18+
console.warn(`Notion rate limited (429), retrying in ${delay}ms (${retries} retries left)`)
19+
await new Promise((resolve) => setTimeout(resolve, delay))
20+
return getNotionPageWithRetry(id, retries - 1)
21+
}
22+
}
23+
throw e
24+
}
25+
}
26+
627
export const getNotionContentProps = unstable_cache(
728
async (id: string) => {
829
try {
9-
const result = await notion.getPage(id)
10-
return result
30+
return await getNotionPageWithRetry(id)
1131
} catch (e) {
1232
console.error('Unable to get content from Notion', e)
1333
return undefined

0 commit comments

Comments
 (0)