@@ -94,31 +94,37 @@ const getSecretFromConnectItem = async (
9494
9595 // If a file was found, get the content of the file
9696 if ( fileId ) {
97- try {
98- core . info ( `Getting file content: vault=${ parsed . vault } item=${ parsed . item } fileId=${ fileId } ` ) ;
99- const content = await client . getFileContent (
100- parsed . vault ,
101- parsed . item ,
102- fileId ,
103- ) ;
104- return content ;
105- } catch ( err ) {
106- if ( err && typeof err === "object" ) {
107- core . error ( `getFileContent error keys: ${ Object . keys ( err ) . join ( ", " ) } ` ) ;
108- core . error ( `getFileContent err.message: ${ ( err as any ) ?. message } ` ) ;
109- core . error ( `getFileContent err.code: ${ ( err as any ) ?. code } ` ) ;
110- if ( ( err as any ) ?. response ) {
111- core . error ( `getFileContent err.response.status: ${ ( err as any ) . response ?. status } ` ) ;
112- core . error ( `getFileContent err.response.data: ${ JSON . stringify ( ( err as any ) . response ?. data ) } ` ) ;
113- }
114- if ( ( err as any ) ?. cause ) {
115- core . error ( `getFileContent err.cause: ${ ( err as any ) . cause ?. message ?? String ( ( err as any ) . cause ) } ` ) ;
97+ const maxAttempts = 3 ;
98+ const retryDelayMs = 2000 ;
99+ for ( let attempt = 1 ; attempt <= maxAttempts ; attempt ++ ) {
100+ try {
101+ const content = await client . getFileContent (
102+ parsed . vault ,
103+ parsed . item ,
104+ fileId ,
105+ ) ;
106+ return content ;
107+ } catch ( err ) {
108+ const is503 =
109+ err &&
110+ typeof err === "object" &&
111+ ( err as Record < string , unknown > ) . statusCode === 503 ;
112+ if ( is503 && attempt < maxAttempts ) {
113+ core . info (
114+ `getFileContent returned 503 (attempt ${ attempt } /${ maxAttempts } ), retrying in ${ retryDelayMs / 1000 } s...` ,
115+ ) ;
116+ await new Promise ( ( resolve ) => setTimeout ( resolve , retryDelayMs ) ) ;
117+ continue ;
116118 }
119+ core . error ( `getFileContent failed: ${ getErrorMessage ( err ) } ` ) ;
120+ throw err ;
117121 }
118- core . error ( `getFileContent failed: ${ getErrorMessage ( err ) } ` ) ;
119- throw err ;
120122 }
121123 }
124+ core . error ( `getFileContent failed: ${ getErrorMessage ( err ) } ` ) ;
125+ throw err ;
126+ }
127+ }
122128
123129 if ( parsed . section ) {
124130 throw new Error (
@@ -443,21 +449,8 @@ const loadSecretsViaConnect = async (
443449
444450function getErrorMessage ( err : unknown ) : string {
445451 if ( err instanceof Error ) return err . message ;
446- if ( ! err || typeof err !== "object" ) return String ( err ) ;
447- const e = err as Record < string , unknown > ;
448- // Node HTTP response object (thrown by SDK on HTTP errors)
449- if ( typeof e . statusCode === "number" ) {
450- const statusMsg = e . statusMessage != null ? String ( e . statusMessage ) : "" ;
451- return `HTTP ${ e . statusCode } ${ statusMsg ? `: ${ statusMsg } ` : "" } ` . trim ( ) ;
452- }
453- if ( typeof e . message === "string" ) return e . message ;
454- if ( e . response && typeof e . response === "object" ) {
455- const res = e . response as Record < string , unknown > ;
456- if ( typeof res . status === "number" )
457- return `HTTP ${ res . status } ${ res . statusText ? `: ${ res . statusText } ` : "" } ` . trim ( ) ;
458- }
459- if ( typeof e . code === "string" ) return e . code ;
460- if ( e . cause instanceof Error ) return e . cause . message ;
452+ if ( err && typeof ( err as { message ?: unknown } ) . message === "string" )
453+ return ( err as { message : string } ) . message ;
461454 return String ( err ) ;
462455}
463456
0 commit comments