File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -3,11 +3,31 @@ import { NotionAPI } from 'notion-client'
33import { getRevalidate } from 'utils/revalidate'
44
55const 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+
627export 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
You can’t perform that action at this time.
0 commit comments