sst
Version:
37 lines (36 loc) • 1.44 kB
JavaScript
import { AwsClient } from "aws4fetch";
let cachedCredentials = null;
async function getCredentials(url) {
if (cachedCredentials) {
const currentTime = new Date();
const fiveMinutesFromNow = new Date(currentTime.getTime() + 5 * 60000);
const expirationTime = new Date(cachedCredentials.Expiration);
if (expirationTime > fiveMinutesFromNow) {
return cachedCredentials;
}
}
const credentials = (await fetch(url).then((res) => res.json()));
cachedCredentials = credentials;
return credentials;
}
export async function client() {
if (process.env.AWS_ACCESS_KEY_ID && process.env.AWS_SECRET_ACCESS_KEY) {
return new AwsClient({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
sessionToken: process.env.AWS_SESSION_TOKEN,
region: process.env.AWS_REGION,
});
}
if (process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI) {
const credentials = await getCredentials("http://169.254.170.2" +
process.env.AWS_CONTAINER_CREDENTIALS_RELATIVE_URI);
return new AwsClient({
accessKeyId: credentials.AccessKeyId,
secretAccessKey: credentials.SecretAccessKey,
sessionToken: credentials.Token,
region: process.env.AWS_REGION,
});
}
throw new Error("No AWS credentials found");
}