mirror of
https://github.com/aws-actions/configure-aws-credentials.git
synced 2026-09-01 05:45:06 +09:00
239add3ff1
* Implemented editorconfig * Switched to ESM * Switched to a TypeScript workflow * Switched to projen for project management * Major code refactor * TODO: need tests
54 lines
7.3 KiB
JavaScript
Generated
54 lines
7.3 KiB
JavaScript
Generated
import { STSClient } from '@aws-sdk/client-sts';
|
|
const MAX_TAG_VALUE_LENGTH = 256;
|
|
const SANITIZATION_CHARACTER = '_';
|
|
let stsclient;
|
|
export function getStsClient(region, agent) {
|
|
if (!stsclient) {
|
|
stsclient = new STSClient({
|
|
region,
|
|
customUserAgent: agent,
|
|
});
|
|
}
|
|
return stsclient;
|
|
}
|
|
export function sanitizeGithubActor(actor) {
|
|
// In some circumstances the actor may contain square brackets. For example, if they're a bot ('[bot]')
|
|
// Square brackets are not allowed in AWS session tags
|
|
return actor.replace(/\[|\]/g, SANITIZATION_CHARACTER);
|
|
}
|
|
export function sanitizeGithubWorkflowName(name) {
|
|
// Workflow names can be almost any valid UTF-8 string, but tags are more restrictive.
|
|
// This replaces anything not conforming to the tag restrictions by inverting the regular expression.
|
|
// See the AWS documentation for constraint specifics https://docs.aws.amazon.com/STS/latest/APIReference/API_Tag.html.
|
|
const nameWithoutSpecialCharacters = name.replace(/[^\p{L}\p{Z}\p{N}_:/=+.-@-]/gu, SANITIZATION_CHARACTER);
|
|
const nameTruncated = nameWithoutSpecialCharacters.slice(0, MAX_TAG_VALUE_LENGTH);
|
|
return nameTruncated;
|
|
}
|
|
export function errorMessage(error) {
|
|
return error instanceof Error ? error.message : String(error);
|
|
}
|
|
export function isDefined(i) {
|
|
return i !== undefined && i !== null;
|
|
}
|
|
function sleep(ms) {
|
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
}
|
|
// retryAndBackoff retries with exponential backoff the promise if the error isRetryable upto maxRetries time.
|
|
export async function retryAndBackoff(fn, isRetryable, retries = 0, maxRetries = 12, base = 50) {
|
|
try {
|
|
return await fn();
|
|
}
|
|
catch (err) {
|
|
if (!isRetryable) {
|
|
throw err;
|
|
}
|
|
// It's retryable, so sleep and retry.
|
|
await sleep(Math.random() * (Math.pow(2, retries) * base));
|
|
retries += 1;
|
|
if (retries === maxRetries) {
|
|
throw err;
|
|
}
|
|
return await retryAndBackoff(fn, isRetryable, retries, maxRetries, base);
|
|
}
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVoRCxNQUFNLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztBQUNqQyxNQUFNLHNCQUFzQixHQUFHLEdBQUcsQ0FBQztBQUVuQyxJQUFJLFNBQWdDLENBQUM7QUFFckMsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFjLEVBQUUsS0FBYztJQUN6RCxJQUFJLENBQUMsU0FBUyxFQUFFO1FBQ2QsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO1lBQ3hCLE1BQU07WUFDTixlQUFlLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7S0FDSjtJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyx1R0FBdUc7SUFDdkcsc0RBQXNEO0lBQ3RELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUFDLElBQVk7SUFDckQsc0ZBQXNGO0lBQ3RGLHFHQUFxRztJQUNyRyx1SEFBdUg7SUFDdkgsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLCtCQUErQixFQUFFLHNCQUFzQixDQUFDLENBQUM7SUFDM0csTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLEtBQWM7SUFDekMsT0FBTyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUksQ0FBdUI7SUFDbEQsT0FBTyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUM7QUFDdkMsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNELENBQUM7QUFFRCw4R0FBOEc7QUFDOUcsTUFBTSxDQUFDLEtBQUssVUFBVSxlQUFlLENBQ25DLEVBQW9CLEVBQ3BCLFdBQW9CLEVBQ3BCLE9BQU8sR0FBRyxDQUFDLEVBQ1gsVUFBVSxHQUFHLEVBQUUsRUFDZixJQUFJLEdBQUcsRUFBRTtJQUVULElBQUk7UUFDRixPQUFPLE1BQU0sRUFBRSxFQUFFLENBQUM7S0FDbkI7SUFBQyxPQUFPLEdBQUcsRUFBRTtRQUNaLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxHQUFHLENBQUM7U0FDWDtRQUNELHNDQUFzQztRQUN0QyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLENBQUM7UUFDYixJQUFJLE9BQU8sS0FBSyxVQUFVLEVBQUU7WUFDMUIsTUFBTSxHQUFHLENBQUM7U0FDWDtRQUNELE9BQU8sTUFBTSxlQUFlLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQzFFO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNUU0NsaWVudCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zdHMnO1xuXG5jb25zdCBNQVhfVEFHX1ZBTFVFX0xFTkdUSCA9IDI1NjtcbmNvbnN0IFNBTklUSVpBVElPTl9DSEFSQUNURVIgPSAnXyc7XG5cbmxldCBzdHNjbGllbnQ6IFNUU0NsaWVudCB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0c0NsaWVudChyZWdpb246IHN0cmluZywgYWdlbnQ/OiBzdHJpbmcpIHtcbiAgaWYgKCFzdHNjbGllbnQpIHtcbiAgICBzdHNjbGllbnQgPSBuZXcgU1RTQ2xpZW50KHtcbiAgICAgIHJlZ2lvbixcbiAgICAgIGN1c3RvbVVzZXJBZ2VudDogYWdlbnQsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIHN0c2NsaWVudDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplR2l0aHViQWN0b3IoYWN0b3I6IHN0cmluZykge1xuICAvLyBJbiBzb21lIGNpcmN1bXN0YW5jZXMgdGhlIGFjdG9yIG1heSBjb250YWluIHNxdWFyZSBicmFja2V0cy4gRm9yIGV4YW1wbGUsIGlmIHRoZXkncmUgYSBib3QgKCdbYm90XScpXG4gIC8vIFNxdWFyZSBicmFja2V0cyBhcmUgbm90IGFsbG93ZWQgaW4gQVdTIHNlc3Npb24gdGFnc1xuICByZXR1cm4gYWN0b3IucmVwbGFjZSgvXFxbfFxcXS9nLCBTQU5JVElaQVRJT05fQ0hBUkFDVEVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplR2l0aHViV29ya2Zsb3dOYW1lKG5hbWU6IHN0cmluZykge1xuICAvLyBXb3JrZmxvdyBuYW1lcyBjYW4gYmUgYWxtb3N0IGFueSB2YWxpZCBVVEYtOCBzdHJpbmcsIGJ1dCB0YWdzIGFyZSBtb3JlIHJlc3RyaWN0aXZlLlxuICAvLyBUaGlzIHJlcGxhY2VzIGFueXRoaW5nIG5vdCBjb25mb3JtaW5nIHRvIHRoZSB0YWcgcmVzdHJpY3Rpb25zIGJ5IGludmVydGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uLlxuICAvLyBTZWUgdGhlIEFXUyBkb2N1bWVudGF0aW9uIGZvciBjb25zdHJhaW50IHNwZWNpZmljcyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vU1RTL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1RhZy5odG1sLlxuICBjb25zdCBuYW1lV2l0aG91dFNwZWNpYWxDaGFyYWN0ZXJzID0gbmFtZS5yZXBsYWNlKC9bXlxccHtMfVxccHtafVxccHtOfV86Lz0rLi1ALV0vZ3UsIFNBTklUSVpBVElPTl9DSEFSQUNURVIpO1xuICBjb25zdCBuYW1lVHJ1bmNhdGVkID0gbmFtZVdpdGhvdXRTcGVjaWFsQ2hhcmFjdGVycy5zbGljZSgwLCBNQVhfVEFHX1ZBTFVFX0xFTkdUSCk7XG4gIHJldHVybiBuYW1lVHJ1bmNhdGVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JNZXNzYWdlKGVycm9yOiB1bmtub3duKSB7XG4gIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RlZmluZWQ8VD4oaTogVCB8IHVuZGVmaW5lZCB8IG51bGwpOiBpIGlzIFQge1xuICByZXR1cm4gaSAhPT0gdW5kZWZpbmVkICYmIGkgIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG5cbi8vIHJldHJ5QW5kQmFja29mZiByZXRyaWVzIHdpdGggZXhwb25lbnRpYWwgYmFja29mZiB0aGUgcHJvbWlzZSBpZiB0aGUgZXJyb3IgaXNSZXRyeWFibGUgdXB0byBtYXhSZXRyaWVzIHRpbWUuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmV0cnlBbmRCYWNrb2ZmPFQ+KFxuICBmbjogKCkgPT4gUHJvbWlzZTxUPixcbiAgaXNSZXRyeWFibGU6IGJvb2xlYW4sXG4gIHJldHJpZXMgPSAwLFxuICBtYXhSZXRyaWVzID0gMTIsXG4gIGJhc2UgPSA1MFxuKTogUHJvbWlzZTxUPiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICghaXNSZXRyeWFibGUpIHtcbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gICAgLy8gSXQncyByZXRyeWFibGUsIHNvIHNsZWVwIGFuZCByZXRyeS5cbiAgICBhd2FpdCBzbGVlcChNYXRoLnJhbmRvbSgpICogKE1hdGgucG93KDIsIHJldHJpZXMpICogYmFzZSkpO1xuICAgIHJldHJpZXMgKz0gMTtcbiAgICBpZiAocmV0cmllcyA9PT0gbWF4UmV0cmllcykge1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmV0cnlBbmRCYWNrb2ZmKGZuLCBpc1JldHJ5YWJsZSwgcmV0cmllcywgbWF4UmV0cmllcywgYmFzZSk7XG4gIH1cbn1cbiJdfQ==
|