Skip to content

Commit d7959a3

Browse files
committed
Add retry
1 parent ba2e69a commit d7959a3

File tree

1 file changed

+29
-36
lines changed

1 file changed

+29
-36
lines changed

src/utils.ts

Lines changed: 29 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -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

444450
function 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

Comments
 (0)