Cache AWS creds at startup and reuse (#5814)

Also errors early if we can't get them at all, and configures retries
and timeouts

Mitigation for #5813
This commit is contained in:
Matt Godbolt
2023-11-27 22:32:04 -06:00
committed by GitHub
parent 01e62b136e
commit 87e4d460df
6 changed files with 488 additions and 4 deletions

View File

@@ -27,6 +27,41 @@ import {SSM} from '@aws-sdk/client-ssm';
import {unwrap} from './assert.js';
import {logger} from './logger.js';
import type {PropertyGetter} from './properties.interfaces.js';
import {fromNodeProviderChain} from '@aws-sdk/credential-providers';
import {AwsCredentialIdentityProvider} from '@smithy/types/dist-types/identity/awsCredentialIdentity.js';
let cachedCredentials: AwsCredentialIdentityProvider | undefined;
export function awsCredentials(): AwsCredentialIdentityProvider {
if (!cachedCredentials) throw new Error("Attempt to get AWS credentials before they've been initialised");
return cachedCredentials;
}
export function fakeCredentialsForTest() {
cachedCredentials = async () => {
return {
accessKeyId: 'not-a-real-key',
secretAccessKey: 'not-a-real-secret',
};
};
}
async function initialiseAwsCredentials(region: string) {
if (!cachedCredentials) {
const provider = fromNodeProviderChain({
logger: logger,
timeout: 5000,
maxRetries: 5,
clientConfig: {region},
});
cachedCredentials = async (identityProperties?: Record<string, any>) => {
logger.info(`Fetching AWS credentials for ${region}...`);
const creds = await provider(identityProperties);
logger.info(`Credentials: expiry:${creds.expiration}, keyId: ${creds.accessKeyId}`);
return creds;
};
}
}
export class InstanceFetcher {
ec2: EC2;
@@ -36,7 +71,7 @@ export class InstanceFetcher {
constructor(properties: PropertyGetter) {
const region = properties<string>('region');
logger.info(`New instance fetcher for region ${region}`);
this.ec2 = new EC2({region: region});
this.ec2 = new EC2({region: region, credentials: awsCredentials()});
this.tagKey = properties<string>('tagKey');
this.tagValue = properties<string>('tagValue');
}
@@ -59,7 +94,8 @@ let awsProps: PropertyGetter | null = null;
async function loadAwsConfig(properties: PropertyGetter) {
const region = properties<string>('region');
if (!region) return {};
const ssm = new SSM({region: region});
await initialiseAwsCredentials(region);
const ssm = new SSM({region: region, credentials: awsCredentials()});
const path = '/compiler-explorer/';
try {
const response = await ssm.getParameters({Names: [path + 'sentryDsn']});

View File

@@ -27,6 +27,7 @@ import {S3, NoSuchKey} from '@aws-sdk/client-s3';
import type {GetResult} from '../types/cache.interfaces.js';
import type {S3HandlerOptions} from './s3-handler.interfaces.js';
import {awsCredentials} from './aws.js';
const clientsByRegion: Map<string, S3> = new Map();
@@ -40,7 +41,7 @@ export class S3Bucket {
if (maybeInstance) {
this.instance = maybeInstance;
} else {
this.instance = new S3({region});
this.instance = new S3({region, credentials: awsCredentials()});
clientsByRegion.set(region, this.instance);
}
this.bucket = bucket;

View File

@@ -33,6 +33,7 @@ import {S3Bucket} from '../s3-handler.js';
import {anonymizeIp} from '../utils.js';
import {ExpandedShortLink, StorageBase} from './base.js';
import {awsCredentials} from '../aws.js';
/*
* NEVER CHANGE THIS VALUE
@@ -75,7 +76,7 @@ export class StorageS3 extends StorageBase {
`prefix ${this.prefix}, dynamo table ${this.table}`,
);
this.s3 = new S3Bucket(bucket, region);
this.dynamoDb = new DynamoDB({region: region});
this.dynamoDb = new DynamoDB({region: region, credentials: awsCredentials()});
}
async storeItem(item, req) {

418
package-lock.json generated
View File

@@ -13,6 +13,7 @@
"@aws-sdk/client-ec2": "^3.427.0",
"@aws-sdk/client-s3": "^3.427.0",
"@aws-sdk/client-ssm": "^3.427.0",
"@aws-sdk/credential-providers": "^3.458.0",
"@flatten-js/interval-tree": "^1.1.1",
"@fortawesome/fontawesome-free": "^6.4.2",
"@orchidjs/sifter": "^1.0.3",
@@ -296,6 +297,209 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"node_modules/@aws-sdk/client-cognito-identity": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.458.0.tgz",
"integrity": "sha512-fgtivHMM1JFp02fQBweDl8v/sqitVoNTW5E2Wq2qgpAgpabtWjp+/nJrPqvzf9g3HEVAMQC4HiHEFV5rkJNj1w==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
"@aws-sdk/client-sts": "3.458.0",
"@aws-sdk/core": "3.451.0",
"@aws-sdk/credential-provider-node": "3.458.0",
"@aws-sdk/middleware-host-header": "3.451.0",
"@aws-sdk/middleware-logger": "3.451.0",
"@aws-sdk/middleware-recursion-detection": "3.451.0",
"@aws-sdk/middleware-signing": "3.451.0",
"@aws-sdk/middleware-user-agent": "3.451.0",
"@aws-sdk/region-config-resolver": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@aws-sdk/util-endpoints": "3.451.0",
"@aws-sdk/util-user-agent-browser": "3.451.0",
"@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/config-resolver": "^2.0.18",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/hash-node": "^2.0.15",
"@smithy/invalid-dependency": "^2.0.13",
"@smithy/middleware-content-length": "^2.0.15",
"@smithy/middleware-endpoint": "^2.2.0",
"@smithy/middleware-retry": "^2.0.20",
"@smithy/middleware-serde": "^2.0.13",
"@smithy/middleware-stack": "^2.0.7",
"@smithy/node-config-provider": "^2.1.5",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/url-parser": "^2.0.13",
"@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
"@smithy/util-defaults-mode-browser": "^2.0.19",
"@smithy/util-defaults-mode-node": "^2.0.25",
"@smithy/util-endpoints": "^1.0.4",
"@smithy/util-retry": "^2.0.6",
"@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sso": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.458.0.tgz",
"integrity": "sha512-GTiIH4So0PTU5oAldtOacO/cBonu4NWGfvN3+BUaAb5Ybb9yQiwcO08PS/pXZ0cw4UTVK+zr22WVLR0reomUTA==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
"@aws-sdk/core": "3.451.0",
"@aws-sdk/middleware-host-header": "3.451.0",
"@aws-sdk/middleware-logger": "3.451.0",
"@aws-sdk/middleware-recursion-detection": "3.451.0",
"@aws-sdk/middleware-user-agent": "3.451.0",
"@aws-sdk/region-config-resolver": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@aws-sdk/util-endpoints": "3.451.0",
"@aws-sdk/util-user-agent-browser": "3.451.0",
"@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/config-resolver": "^2.0.18",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/hash-node": "^2.0.15",
"@smithy/invalid-dependency": "^2.0.13",
"@smithy/middleware-content-length": "^2.0.15",
"@smithy/middleware-endpoint": "^2.2.0",
"@smithy/middleware-retry": "^2.0.20",
"@smithy/middleware-serde": "^2.0.13",
"@smithy/middleware-stack": "^2.0.7",
"@smithy/node-config-provider": "^2.1.5",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/url-parser": "^2.0.13",
"@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
"@smithy/util-defaults-mode-browser": "^2.0.19",
"@smithy/util-defaults-mode-node": "^2.0.25",
"@smithy/util-endpoints": "^1.0.4",
"@smithy/util-retry": "^2.0.6",
"@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/client-sts": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.458.0.tgz",
"integrity": "sha512-c34zmQxcP7AM62S7SAiOztxTaHJOG+0aIb2GYUeag5sQzG7FnGGwZ7hA0ggCQc7iMkDL9UYHKKtLs1ynQenW+A==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
"@aws-sdk/core": "3.451.0",
"@aws-sdk/credential-provider-node": "3.458.0",
"@aws-sdk/middleware-host-header": "3.451.0",
"@aws-sdk/middleware-logger": "3.451.0",
"@aws-sdk/middleware-recursion-detection": "3.451.0",
"@aws-sdk/middleware-sdk-sts": "3.451.0",
"@aws-sdk/middleware-signing": "3.451.0",
"@aws-sdk/middleware-user-agent": "3.451.0",
"@aws-sdk/region-config-resolver": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@aws-sdk/util-endpoints": "3.451.0",
"@aws-sdk/util-user-agent-browser": "3.451.0",
"@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/config-resolver": "^2.0.18",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/hash-node": "^2.0.15",
"@smithy/invalid-dependency": "^2.0.13",
"@smithy/middleware-content-length": "^2.0.15",
"@smithy/middleware-endpoint": "^2.2.0",
"@smithy/middleware-retry": "^2.0.20",
"@smithy/middleware-serde": "^2.0.13",
"@smithy/middleware-stack": "^2.0.7",
"@smithy/node-config-provider": "^2.1.5",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/url-parser": "^2.0.13",
"@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
"@smithy/util-defaults-mode-browser": "^2.0.19",
"@smithy/util-defaults-mode-node": "^2.0.25",
"@smithy/util-endpoints": "^1.0.4",
"@smithy/util-retry": "^2.0.6",
"@smithy/util-utf8": "^2.0.2",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-ini": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.458.0.tgz",
"integrity": "sha512-M293Im4k6QrKlWaPfElYKRPlBXMaXbkqns4YgLGBpabfIVIZEguGj/kVm7gkEKdt8rCHbBqqXgsQrtQbfDkkBQ==",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.451.0",
"@aws-sdk/credential-provider-process": "3.451.0",
"@aws-sdk/credential-provider-sso": "3.458.0",
"@aws-sdk/credential-provider-web-identity": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-node": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.458.0.tgz",
"integrity": "sha512-psNXL3/GAoDAqRusdy5umglXTOvxtE9XQTtmOPn4O/H2NpXqe+cB2/W+H+uikgyyck9Lu4DwMk+voFz2Hl8znw==",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.451.0",
"@aws-sdk/credential-provider-ini": "3.458.0",
"@aws-sdk/credential-provider-process": "3.451.0",
"@aws-sdk/credential-provider-sso": "3.458.0",
"@aws-sdk/credential-provider-web-identity": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-cognito-identity/node_modules/@aws-sdk/credential-provider-sso": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.458.0.tgz",
"integrity": "sha512-dyRAKvMLF9Ur6M0YtWSU4E5YDVEFO7Rfg5FOTk+Lwnk24UQ0RoHg3c6HZ8sPTNx16cgx4YY68UYi/HTZf56z2g==",
"dependencies": {
"@aws-sdk/client-sso": "3.458.0",
"@aws-sdk/token-providers": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/client-dynamodb": {
"version": "3.454.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.454.0.tgz",
@@ -627,6 +831,21 @@
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-cognito-identity": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.458.0.tgz",
"integrity": "sha512-jFAu6chvwWDJr9OuPbCNRHonzR19R28udmZWh3u2lFm9q7xbIId7U3w+0NFNq7Ud/DpOBk05bORcJVQFmIeoUg==",
"dependencies": {
"@aws-sdk/client-cognito-identity": "3.458.0",
"@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-env": {
"version": "3.451.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz",
@@ -641,6 +860,25 @@
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-http": {
"version": "3.451.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.451.0.tgz",
"integrity": "sha512-q82kEzymqimkJ2dHmuN2RGpi9HTFSxwwoXALnzPRaRcvR/v+YY8FMgSTfwXzPkHUDf/q8J+aDz6lPcYlnsP3sQ==",
"dependencies": {
"@aws-sdk/types": "3.451.0",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/property-provider": "^2.0.0",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/util-stream": "^2.0.20",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
"version": "3.451.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz",
@@ -728,6 +966,186 @@
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.458.0.tgz",
"integrity": "sha512-yjNjgXwQUwoOCZVLI33T0XjyHisH+S866qoUiK4TwJMJOPHDfl21PxzfXtVI0nhQuuu7g2bgTDaB3YD8Xx1Krg==",
"dependencies": {
"@aws-sdk/client-cognito-identity": "3.458.0",
"@aws-sdk/client-sso": "3.458.0",
"@aws-sdk/client-sts": "3.458.0",
"@aws-sdk/credential-provider-cognito-identity": "3.458.0",
"@aws-sdk/credential-provider-env": "3.451.0",
"@aws-sdk/credential-provider-http": "3.451.0",
"@aws-sdk/credential-provider-ini": "3.458.0",
"@aws-sdk/credential-provider-node": "3.458.0",
"@aws-sdk/credential-provider-process": "3.451.0",
"@aws-sdk/credential-provider-sso": "3.458.0",
"@aws-sdk/credential-provider-web-identity": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sso": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.458.0.tgz",
"integrity": "sha512-GTiIH4So0PTU5oAldtOacO/cBonu4NWGfvN3+BUaAb5Ybb9yQiwcO08PS/pXZ0cw4UTVK+zr22WVLR0reomUTA==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
"@aws-sdk/core": "3.451.0",
"@aws-sdk/middleware-host-header": "3.451.0",
"@aws-sdk/middleware-logger": "3.451.0",
"@aws-sdk/middleware-recursion-detection": "3.451.0",
"@aws-sdk/middleware-user-agent": "3.451.0",
"@aws-sdk/region-config-resolver": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@aws-sdk/util-endpoints": "3.451.0",
"@aws-sdk/util-user-agent-browser": "3.451.0",
"@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/config-resolver": "^2.0.18",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/hash-node": "^2.0.15",
"@smithy/invalid-dependency": "^2.0.13",
"@smithy/middleware-content-length": "^2.0.15",
"@smithy/middleware-endpoint": "^2.2.0",
"@smithy/middleware-retry": "^2.0.20",
"@smithy/middleware-serde": "^2.0.13",
"@smithy/middleware-stack": "^2.0.7",
"@smithy/node-config-provider": "^2.1.5",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/url-parser": "^2.0.13",
"@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
"@smithy/util-defaults-mode-browser": "^2.0.19",
"@smithy/util-defaults-mode-node": "^2.0.25",
"@smithy/util-endpoints": "^1.0.4",
"@smithy/util-retry": "^2.0.6",
"@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/client-sts": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.458.0.tgz",
"integrity": "sha512-c34zmQxcP7AM62S7SAiOztxTaHJOG+0aIb2GYUeag5sQzG7FnGGwZ7hA0ggCQc7iMkDL9UYHKKtLs1ynQenW+A==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
"@aws-sdk/core": "3.451.0",
"@aws-sdk/credential-provider-node": "3.458.0",
"@aws-sdk/middleware-host-header": "3.451.0",
"@aws-sdk/middleware-logger": "3.451.0",
"@aws-sdk/middleware-recursion-detection": "3.451.0",
"@aws-sdk/middleware-sdk-sts": "3.451.0",
"@aws-sdk/middleware-signing": "3.451.0",
"@aws-sdk/middleware-user-agent": "3.451.0",
"@aws-sdk/region-config-resolver": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@aws-sdk/util-endpoints": "3.451.0",
"@aws-sdk/util-user-agent-browser": "3.451.0",
"@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/config-resolver": "^2.0.18",
"@smithy/fetch-http-handler": "^2.2.6",
"@smithy/hash-node": "^2.0.15",
"@smithy/invalid-dependency": "^2.0.13",
"@smithy/middleware-content-length": "^2.0.15",
"@smithy/middleware-endpoint": "^2.2.0",
"@smithy/middleware-retry": "^2.0.20",
"@smithy/middleware-serde": "^2.0.13",
"@smithy/middleware-stack": "^2.0.7",
"@smithy/node-config-provider": "^2.1.5",
"@smithy/node-http-handler": "^2.1.9",
"@smithy/protocol-http": "^3.0.9",
"@smithy/smithy-client": "^2.1.15",
"@smithy/types": "^2.5.0",
"@smithy/url-parser": "^2.0.13",
"@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
"@smithy/util-defaults-mode-browser": "^2.0.19",
"@smithy/util-defaults-mode-node": "^2.0.25",
"@smithy/util-endpoints": "^1.0.4",
"@smithy/util-retry": "^2.0.6",
"@smithy/util-utf8": "^2.0.2",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-ini": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.458.0.tgz",
"integrity": "sha512-M293Im4k6QrKlWaPfElYKRPlBXMaXbkqns4YgLGBpabfIVIZEguGj/kVm7gkEKdt8rCHbBqqXgsQrtQbfDkkBQ==",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.451.0",
"@aws-sdk/credential-provider-process": "3.451.0",
"@aws-sdk/credential-provider-sso": "3.458.0",
"@aws-sdk/credential-provider-web-identity": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-node": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.458.0.tgz",
"integrity": "sha512-psNXL3/GAoDAqRusdy5umglXTOvxtE9XQTtmOPn4O/H2NpXqe+cB2/W+H+uikgyyck9Lu4DwMk+voFz2Hl8znw==",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.451.0",
"@aws-sdk/credential-provider-ini": "3.458.0",
"@aws-sdk/credential-provider-process": "3.451.0",
"@aws-sdk/credential-provider-sso": "3.458.0",
"@aws-sdk/credential-provider-web-identity": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-providers/node_modules/@aws-sdk/credential-provider-sso": {
"version": "3.458.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.458.0.tgz",
"integrity": "sha512-dyRAKvMLF9Ur6M0YtWSU4E5YDVEFO7Rfg5FOTk+Lwnk24UQ0RoHg3c6HZ8sPTNx16cgx4YY68UYi/HTZf56z2g==",
"dependencies": {
"@aws-sdk/client-sso": "3.458.0",
"@aws-sdk/token-providers": "3.451.0",
"@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
"@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/endpoint-cache": {
"version": "3.310.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/endpoint-cache/-/endpoint-cache-3.310.0.tgz",

View File

@@ -22,6 +22,7 @@
"@aws-sdk/client-ec2": "^3.427.0",
"@aws-sdk/client-s3": "^3.427.0",
"@aws-sdk/client-ssm": "^3.427.0",
"@aws-sdk/credential-providers": "^3.458.0",
"@flatten-js/interval-tree": "^1.1.1",
"@fortawesome/fontawesome-free": "^6.4.2",
"@orchidjs/sifter": "^1.0.3",

27
test/_setup-fake-aws.ts Normal file
View File

@@ -0,0 +1,27 @@
// Copyright (c) 2023, Compiler Explorer Authors
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// * Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
import {fakeCredentialsForTest} from '../lib/aws.js';
fakeCredentialsForTest();