@@ -120,18 +120,7 @@ export async function createAccount(nonce, privateKey, jsonWebKey, acmeDirectory
120
120
const response = await fetchAndRetryProtectedUntilOk ( payload , protectedHeader , privateKey , acmeDirectory ) ;
121
121
122
122
if ( response ) {
123
- if ( response . ok ) {
124
- return {
125
- answer : { account : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
126
- nonce : response . headers . get ( REPLAY_NONCE )
127
- } ;
128
- }
129
- else {
130
- return {
131
- answer : { error : await response . json ( ) } ,
132
- nonce : await getNextNonce ( response . headers , acmeDirectory )
133
- } ;
134
- }
123
+ return await returnAnswer ( response , acmeDirectory , 'account' ) ;
135
124
}
136
125
137
126
return notCompletedError ( "createAccount" ) ;
@@ -171,18 +160,7 @@ export async function createOrder(kid, nonce, privateKey, identifiers, acmeDirec
171
160
const response = await fetchAndRetryProtectedUntilOk ( payload , protectedHeader , privateKey , acmeDirectory ) ;
172
161
173
162
if ( response ) {
174
- if ( response . ok ) {
175
- return {
176
- answer : { order : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
177
- nonce : response . headers . get ( REPLAY_NONCE )
178
- } ;
179
- }
180
- else {
181
- return {
182
- answer : { error : await response . json ( ) } ,
183
- nonce : await getNextNonce ( response . headers , acmeDirectory )
184
- } ;
185
- }
163
+ return returnAnswer ( response , acmeDirectory , 'order' ) ;
186
164
}
187
165
188
166
return notCompletedError ( "createOrder" ) ;
@@ -226,18 +204,7 @@ export async function finalizeOrder(commonName, kid, nonce, privateKey, publicKe
226
204
const response = await fetchAndRetryProtectedUntilOk ( payload , protectedHeader , privateKey , acmeDirectory ) ;
227
205
228
206
if ( response ) {
229
- if ( response . ok ) {
230
- return {
231
- answer : { get : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
232
- nonce : response . headers . get ( REPLAY_NONCE )
233
- } ;
234
- }
235
- else {
236
- return {
237
- answer : { error : await response . json ( ) } ,
238
- nonce : await getNextNonce ( response . headers , acmeDirectory )
239
- } ;
240
- }
207
+ return returnAnswer ( response , acmeDirectory , 'get' ) ;
241
208
}
242
209
243
210
return notCompletedError ( "finalizeOrder" ) ;
@@ -275,18 +242,7 @@ export async function postAsGet(kid, nonce, privateKey, url, acmeDirectory) {
275
242
const response = await fetchAndRetryProtectedUntilOk ( METHOD_POST_AS_GET , protectedHeader , privateKey , acmeDirectory ) ;
276
243
277
244
if ( response ) {
278
- if ( response . ok ) {
279
- return {
280
- answer : { get : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
281
- nonce : response . headers . get ( REPLAY_NONCE )
282
- } ;
283
- }
284
- else {
285
- return {
286
- answer : { error : await response . json ( ) } ,
287
- nonce : await getNextNonce ( response . headers , acmeDirectory )
288
- } ;
289
- }
245
+ return returnAnswer ( response , acmeDirectory , 'get' ) ;
290
246
}
291
247
292
248
return notCompletedError ( "postAsGet" ) ;
@@ -324,18 +280,7 @@ export async function postAsGetChal(kid, nonce, privateKey, url, acmeDirectory)
324
280
const response = await fetchAndRetryProtectedUntilOk ( METHOD_POST_AS_GET_CHALLENGE , protectedHeader , privateKey , acmeDirectory ) ;
325
281
326
282
if ( response ) {
327
- if ( response . ok ) {
328
- return {
329
- answer : { get : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
330
- nonce : response . headers . get ( REPLAY_NONCE )
331
- } ;
332
- }
333
- else {
334
- return {
335
- answer : { error : await response . json ( ) } ,
336
- nonce : await getNextNonce ( response . headers , acmeDirectory )
337
- } ;
338
- }
283
+ return returnAnswer ( response , acmeDirectory , 'get' ) ;
339
284
}
340
285
341
286
return notCompletedError ( "postAsGetChal" ) ;
@@ -506,7 +451,7 @@ export async function fetchSuggestedWindow(renewalInfoUrl, aki, serial) {
506
451
try {
507
452
const url = `${ renewalInfoUrl } /${ base64urlEncode ( hexToBytes ( aki ) ) } .${ base64urlEncode ( hexToBytes ( serial ) ) } ` ;
508
453
509
- const response = await fetchAndRetryUntilOk ( url ) ;
454
+ const response = await fetchAndRetryUntilOk ( url , null , 2 , true ) ;
510
455
511
456
if ( response && response . ok ) {
512
457
return { answer : { get : await response . json ( ) } }
@@ -525,7 +470,7 @@ export async function fetchSuggestedWindow(renewalInfoUrl, aki, serial) {
525
470
* @param {string|Request } fetchInput - The URL or Request object to fetch
526
471
* @param {Object } init - optional fetch init object
527
472
* @param {number } [attempts=6] - Maximum number of fetch attempts
528
- *
473
+ * @param { boolean } silent - true to suppress console output on failure attempt
529
474
* @returns {Promise<Response|undefined> } The response or undefined if all attempts fail
530
475
*
531
476
* @description
@@ -544,7 +489,7 @@ export async function fetchSuggestedWindow(renewalInfoUrl, aki, serial) {
544
489
* // Process successful response
545
490
* }
546
491
*/
547
- export async function fetchAndRetryUntilOk ( fetchInput , init , attempts = 6 ) {
492
+ export async function fetchAndRetryUntilOk ( fetchInput , init , attempts = 6 , silent = false ) {
548
493
let a = 1 ;
549
494
550
495
while ( a <= attempts ) {
@@ -560,7 +505,9 @@ export async function fetchAndRetryUntilOk(fetchInput, init, attempts = 6) {
560
505
return response ;
561
506
}
562
507
563
- console . error ( a - 1 , "attempt failed, trying again" , fetchInput ) ;
508
+ if ( ! silent ) {
509
+ console . error ( a - 1 , "attempt failed, trying again" , fetchInput ) ;
510
+ }
564
511
565
512
await new Promise ( ( resolve ) => setTimeout ( ( ) => { resolve ( ) ; } , 650 * a ) ) ; // Each failed attempt will delay itself slightly more
566
513
} catch ( exception ) {
@@ -650,6 +597,13 @@ export async function fetchAndRetryProtectedUntilOk(payload, protectedHeader, pr
650
597
return undefined ;
651
598
}
652
599
600
+ async function returnAnswer ( response , acmeDirectory , name ) {
601
+ return {
602
+ answer : { [ response . ok ? name : 'error' ] : await response . json ( ) , location : response . headers . get ( NEXT_URL ) } ,
603
+ nonce : await getNextNonce ( response . headers , acmeDirectory )
604
+ } ;
605
+ }
606
+
653
607
function notCompletedError ( error , exception ) {
654
608
return {
655
609
answer :
0 commit comments