@@ -92,86 +92,108 @@ const nodeToSupporter = (node) => ({
9292} ) ;
9393
9494const getAllNodes = async ( graphqlQuery , getNodes ) => {
95- const body = {
96- query : graphqlQuery ,
97- variables : {
98- limit : graphqlPageSize ,
99- offset : 0 ,
100- dateFrom : new Date (
101- new Date ( ) . setFullYear ( new Date ( ) . getFullYear ( ) - 1 )
102- ) . toISOString ( ) , // data from last year
103- } ,
104- } ;
105-
106- let allNodes = [ ] ;
107-
108- let limit = 10 ,
109- remaining = 10 ,
110- reset ;
111- if ( process . env . OPENCOLLECTIVE_API_KEY ) {
112- limit = 100 ;
113- remaining = 100 ;
114- }
115- // Handling pagination if necessary
116-
117- while ( true ) {
118- if ( remaining === 0 ) {
119- console . log ( `Rate limit exceeded. Sleeping until ${ new Date ( reset ) } .` ) ;
120- await new Promise ( ( resolve ) =>
121- setTimeout ( resolve , reset - Date . now ( ) + 100 )
122- ) ;
95+ // Store original value
96+ const originalTlsRejectUnauthorized =
97+ process . env . NODE_TLS_REJECT_UNAUTHORIZED ;
98+ const isCI = process . env . CI === 'true' || ( process . env . CI && process . env . VERCEL ) ;
99+
100+ try {
101+ // Only disable SSL verification in local development
102+ if ( ! isCI ) {
103+ process . env . NODE_TLS_REJECT_UNAUTHORIZED = '0' ;
104+ console . log ( 'Running locally - SSL verification disabled' ) ;
123105 }
124- const result = await fetch ( graphqlEndpoint , {
125- method : 'POST' ,
126- body : JSON . stringify ( body ) ,
127- headers : {
128- 'Content-Type' : 'application/json' ,
106+
107+ const body = {
108+ query : graphqlQuery ,
109+ variables : {
110+ limit : graphqlPageSize ,
111+ offset : 0 ,
112+ dateFrom : new Date (
113+ new Date ( ) . setFullYear ( new Date ( ) . getFullYear ( ) - 1 )
114+ ) . toISOString ( ) , // data from last year
129115 } ,
130- } ) . then ( async ( response ) => {
131- if ( response . headers . get ( 'content-type' ) . includes ( 'json' ) ) {
132- const json = await response . json ( ) ;
133- console . log ( 'json' , json ) ;
134- if ( json . error ) {
135- // when rate limit exceeded, api won't return headers data like x-ratelimit-limit, etc.
136- remaining = 0 ;
137- reset = Date . now ( ) + 1000 * 60 ; // 1 minute
138- } else {
139- limit = response . headers . get ( 'x-ratelimit-limit' ) * 1 ;
140- remaining = response . headers . get ( 'x-ratelimit-remaining' ) * 1 ;
141- reset = response . headers . get ( 'x-ratelimit-reset' ) * 1000 ;
142- console . log (
143- `Rate limit: ${ remaining } /${ limit } remaining. Reset in ${ new Date (
144- reset
145- ) } `
146- ) ;
147- }
148- return json ;
149- } else {
150- // utilities/fetch-supporters: SyntaxError: Unexpected token < in JSON at position 0
151- console . log ( 'something wrong when fetching supporters' ) ;
152- return {
153- error : {
154- message : await response . text ( ) ,
155- } ,
156- } ;
116+ } ;
117+
118+ let allNodes = [ ] ;
119+
120+ let limit = 10 ,
121+ remaining = 10 ,
122+ reset ;
123+ if ( process . env . OPENCOLLECTIVE_API_KEY ) {
124+ limit = 100 ;
125+ remaining = 100 ;
126+ }
127+ // Handling pagination if necessary
128+
129+ while ( true ) {
130+ if ( remaining === 0 ) {
131+ console . log ( `Rate limit exceeded. Sleeping until ${ new Date ( reset ) } .` ) ;
132+ await new Promise ( ( resolve ) =>
133+ setTimeout ( resolve , reset - Date . now ( ) + 100 )
134+ ) ;
157135 }
158- } ) ;
159- // when rate limit exceeded, api will return {error: {message: ''}}
160- // but we could hopefully avoid rate limit by sleeping in the beginning of the loop
161- // however, when there're multiple task running simultaneously, it's still possible to hit the rate limit
162- if ( result . error ) {
163- console . log ( 'error' , result . error ) ;
164- // let the loop continue
165- } else {
166- const nodes = getNodes ( result . data ) ;
167- allNodes = [ ...allNodes , ...nodes ] ;
168- body . variables . offset += graphqlPageSize ;
169- if ( nodes . length < graphqlPageSize ) {
170- return allNodes ;
136+ const fetchOptions = {
137+ method : 'POST' ,
138+ body : JSON . stringify ( body ) ,
139+ headers : {
140+ 'Content-Type' : 'application/json' ,
141+ } ,
142+ } ;
143+
144+ const result = await fetch ( graphqlEndpoint , fetchOptions ) . then (
145+ async ( response ) => {
146+ if ( response . headers . get ( 'content-type' ) . includes ( 'json' ) ) {
147+ const json = await response . json ( ) ;
148+ console . log ( 'json' , json ) ;
149+ if ( json . error ) {
150+ // when rate limit exceeded, api won't return headers data like x-ratelimit-limit, etc.
151+ remaining = 0 ;
152+ reset = Date . now ( ) + 1000 * 60 ; // 1 minute
153+ } else {
154+ limit = response . headers . get ( 'x-ratelimit-limit' ) * 1 ;
155+ remaining = response . headers . get ( 'x-ratelimit-remaining' ) * 1 ;
156+ reset = response . headers . get ( 'x-ratelimit-reset' ) * 1000 ;
157+ console . log (
158+ `Rate limit: ${ remaining } /${ limit } remaining. Reset in ${ new Date (
159+ reset
160+ ) } `
161+ ) ;
162+ }
163+ return json ;
164+ } else {
165+ // utilities/fetch-supporters: SyntaxError: Unexpected token < in JSON at position 0
166+ console . log ( 'something wrong when fetching supporters' ) ;
167+ return {
168+ error : {
169+ message : await response . text ( ) ,
170+ } ,
171+ } ;
172+ }
173+ }
174+ ) ;
175+ // when rate limit exceeded, api will return {error: {message: ''}}
176+ // but we could hopefully avoid rate limit by sleeping in the beginning of the loop
177+ // however, when there're multiple task running simultaneously, it's still possible to hit the rate limit
178+ if ( result . error ) {
179+ console . log ( 'error' , result . error ) ;
180+ // let the loop continue
171181 } else {
172- // more nodes to fetch
182+ const nodes = getNodes ( result . data ) ;
183+ allNodes = [ ...allNodes , ...nodes ] ;
184+ body . variables . offset += graphqlPageSize ;
185+ if ( nodes . length < graphqlPageSize ) {
186+ return allNodes ;
187+ } else {
188+ // more nodes to fetch
189+ }
173190 }
174191 }
192+ } finally {
193+ // Only restore if we modified it
194+ if ( ! isCI ) {
195+ process . env . NODE_TLS_REJECT_UNAUTHORIZED = originalTlsRejectUnauthorized ;
196+ }
175197 }
176198} ;
177199
0 commit comments