Add for-await for better Vercel integration reliability

This commit is contained in:
Tuan Dang
2023-02-23 20:21:17 +07:00
parent fcb1f5a51b
commit 783174adc6
+26 -30
View File
@@ -577,7 +577,7 @@ const syncSecretsVercel = async ({
.map(async (secret: VercelSecret) => { .map(async (secret: VercelSecret) => {
if (secret.type === 'encrypted') { if (secret.type === 'encrypted') {
// case: secret is encrypted -> need to decrypt // case: secret is encrypted -> need to decrypt
return (await axios.get( const decryptedSecret = (await axios.get(
`${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`, `${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`,
{ {
params, params,
@@ -587,6 +587,8 @@ const syncSecretsVercel = async ({
} }
} }
)).data; )).data;
return decryptedSecret;
} }
return secret; return secret;
@@ -595,9 +597,9 @@ const syncSecretsVercel = async ({
[secret.key]: secret [secret.key]: secret
}), {}); }), {});
const updateSecrets: VercelSecret[] = []; const updateSecrets: VercelSecret[] = [];
const deleteSecrets: VercelSecret[] = []; const deleteSecrets: VercelSecret[] = [];
const newSecrets: VercelSecret[] = []; const newSecrets: VercelSecret[] = [];
// Identify secrets to create // Identify secrets to create
Object.keys(secrets).map((key) => { Object.keys(secrets).map((key) => {
@@ -653,33 +655,13 @@ const syncSecretsVercel = async ({
} }
); );
} }
// Sync/push updated secrets for await (const secret of updateSecrets) {
if (updateSecrets.length > 0) { if (secret.type !== 'sensitive') {
updateSecrets.forEach(async (secret: VercelSecret) => {
const { id, ...updatedSecret } = secret; const { id, ...updatedSecret } = secret;
await axios.patch(
if (secret.type !== 'sensitive') {
await axios.patch(
`${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`,
updatedSecret,
{
params,
headers: {
Authorization: `Bearer ${accessToken}`,
'Accept-Encoding': 'application/json'
},
}
);
}
});
}
// Delete secrets
if (deleteSecrets.length > 0) {
deleteSecrets.forEach(async (secret: VercelSecret) => {
await axios.delete(
`${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`, `${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`,
updatedSecret,
{ {
params, params,
headers: { headers: {
@@ -688,8 +670,22 @@ const syncSecretsVercel = async ({
}, },
} }
); );
}); }
} }
for await (const secret of deleteSecrets) {
await axios.delete(
`${INTEGRATION_VERCEL_API_URL}/v9/projects/${integration.app}/env/${secret.id}`,
{
params,
headers: {
Authorization: `Bearer ${accessToken}`,
'Accept-Encoding': 'application/json'
},
}
);
}
} catch (err) { } catch (err) {
Sentry.setUser(null); Sentry.setUser(null);
Sentry.captureException(err); Sentry.captureException(err);