aws-cdk
Version:
AWS CDK CLI, the command line tool for CDK apps
55 lines • 6.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOrCreateInstallationId = getOrCreateInstallationId;
exports.ensureCacheDir = ensureCacheDir;
const node_crypto_1 = require("node:crypto");
const fs = require("node:fs");
const path = require("node:path");
const util_1 = require("../../util");
/**
* Get or create installation id
*/
async function getOrCreateInstallationId(ioHelper) {
// Do this quite lazily, so we can mock `cdkCacheDir` during tests
const installationIdPath = path.join((0, util_1.cdkCacheDir)(), 'installation-id.json');
try {
// Check if the installation ID file exists
if (fs.existsSync(installationIdPath)) {
const cachedId = fs.readFileSync(installationIdPath, 'utf-8').trim();
// Validate that the cached ID is a valid UUID
const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
if (UUID_REGEX.test(cachedId)) {
return cachedId;
}
// If invalid, fall through to create a new one
}
// Create a new installation ID
const newId = (0, node_crypto_1.randomUUID)();
try {
await ensureCacheDir();
fs.writeFileSync(installationIdPath, newId);
}
catch (e) {
// If we can't write the file, still return the generated ID
// but log a trace message about the failure
await ioHelper.defaults.trace(`Failed to write installation ID to ${installationIdPath}: ${e}`);
}
return newId;
}
catch (e) {
// If anything goes wrong, generate a temporary ID for this session
// and log a trace message about the failure
await ioHelper.defaults.trace(`Error getting installation ID: ${e}`);
return (0, node_crypto_1.randomUUID)();
}
}
/**
* Make sure the cache dir exists
*
* Not part of `directories.ts` because that module is mocked in tests in order to mock the temporary directory
* to write to, and then I need to mock this function as well.
*/
async function ensureCacheDir() {
await fs.promises.mkdir((0, util_1.cdkCacheDir)(), { recursive: true });
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbGF0aW9uLWlkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiaW5zdGFsbGF0aW9uLWlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBU0EsOERBa0NDO0FBUUQsd0NBRUM7QUFyREQsNkNBQXlDO0FBQ3pDLDhCQUE4QjtBQUM5QixrQ0FBa0M7QUFFbEMscUNBQXlDO0FBRXpDOztHQUVHO0FBQ0ksS0FBSyxVQUFVLHlCQUF5QixDQUFDLFFBQWtCO0lBQ2hFLGtFQUFrRTtJQUNsRSxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBQSxrQkFBVyxHQUFFLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUU1RSxJQUFJLENBQUM7UUFDSCwyQ0FBMkM7UUFDM0MsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBRXJFLDhDQUE4QztZQUM5QyxNQUFNLFVBQVUsR0FBRyxpRUFBaUUsQ0FBQztZQUNyRixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztnQkFDOUIsT0FBTyxRQUFRLENBQUM7WUFDbEIsQ0FBQztZQUNELCtDQUErQztRQUNqRCxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLE1BQU0sS0FBSyxHQUFHLElBQUEsd0JBQVUsR0FBRSxDQUFDO1FBQzNCLElBQUksQ0FBQztZQUNILE1BQU0sY0FBYyxFQUFFLENBQUM7WUFDdkIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO1FBQUMsT0FBTyxDQUFNLEVBQUUsQ0FBQztZQUNoQiw0REFBNEQ7WUFDNUQsNENBQTRDO1lBQzVDLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsc0NBQXNDLGtCQUFrQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEcsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7UUFDaEIsbUVBQW1FO1FBQ25FLDRDQUE0QztRQUM1QyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JFLE9BQU8sSUFBQSx3QkFBVSxHQUFFLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxjQUFjO0lBQ2xDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBQSxrQkFBVyxHQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUM5RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmFuZG9tVVVJRCB9IGZyb20gJ25vZGU6Y3J5cHRvJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHR5cGUgeyBJb0hlbHBlciB9IGZyb20gJy4uLy4uL2FwaS1wcml2YXRlJztcbmltcG9ydCB7IGNka0NhY2hlRGlyIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5cbi8qKlxuICogR2V0IG9yIGNyZWF0ZSBpbnN0YWxsYXRpb24gaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldE9yQ3JlYXRlSW5zdGFsbGF0aW9uSWQoaW9IZWxwZXI6IElvSGVscGVyKSB7XG4gIC8vIERvIHRoaXMgcXVpdGUgbGF6aWx5LCBzbyB3ZSBjYW4gbW9jayBgY2RrQ2FjaGVEaXJgIGR1cmluZyB0ZXN0c1xuICBjb25zdCBpbnN0YWxsYXRpb25JZFBhdGggPSBwYXRoLmpvaW4oY2RrQ2FjaGVEaXIoKSwgJ2luc3RhbGxhdGlvbi1pZC5qc29uJyk7XG5cbiAgdHJ5IHtcbiAgICAvLyBDaGVjayBpZiB0aGUgaW5zdGFsbGF0aW9uIElEIGZpbGUgZXhpc3RzXG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoaW5zdGFsbGF0aW9uSWRQYXRoKSkge1xuICAgICAgY29uc3QgY2FjaGVkSWQgPSBmcy5yZWFkRmlsZVN5bmMoaW5zdGFsbGF0aW9uSWRQYXRoLCAndXRmLTgnKS50cmltKCk7XG5cbiAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIGNhY2hlZCBJRCBpcyBhIHZhbGlkIFVVSURcbiAgICAgIGNvbnN0IFVVSURfUkVHRVggPSAvXlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfSQvaTtcbiAgICAgIGlmIChVVUlEX1JFR0VYLnRlc3QoY2FjaGVkSWQpKSB7XG4gICAgICAgIHJldHVybiBjYWNoZWRJZDtcbiAgICAgIH1cbiAgICAgIC8vIElmIGludmFsaWQsIGZhbGwgdGhyb3VnaCB0byBjcmVhdGUgYSBuZXcgb25lXG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IGluc3RhbGxhdGlvbiBJRFxuICAgIGNvbnN0IG5ld0lkID0gcmFuZG9tVVVJRCgpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBlbnN1cmVDYWNoZURpcigpO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhpbnN0YWxsYXRpb25JZFBhdGgsIG5ld0lkKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIC8vIElmIHdlIGNhbid0IHdyaXRlIHRoZSBmaWxlLCBzdGlsbCByZXR1cm4gdGhlIGdlbmVyYXRlZCBJRFxuICAgICAgLy8gYnV0IGxvZyBhIHRyYWNlIG1lc3NhZ2UgYWJvdXQgdGhlIGZhaWx1cmVcbiAgICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGBGYWlsZWQgdG8gd3JpdGUgaW5zdGFsbGF0aW9uIElEIHRvICR7aW5zdGFsbGF0aW9uSWRQYXRofTogJHtlfWApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3SWQ7XG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIC8vIElmIGFueXRoaW5nIGdvZXMgd3JvbmcsIGdlbmVyYXRlIGEgdGVtcG9yYXJ5IElEIGZvciB0aGlzIHNlc3Npb25cbiAgICAvLyBhbmQgbG9nIGEgdHJhY2UgbWVzc2FnZSBhYm91dCB0aGUgZmFpbHVyZVxuICAgIGF3YWl0IGlvSGVscGVyLmRlZmF1bHRzLnRyYWNlKGBFcnJvciBnZXR0aW5nIGluc3RhbGxhdGlvbiBJRDogJHtlfWApO1xuICAgIHJldHVybiByYW5kb21VVUlEKCk7XG4gIH1cbn1cblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIGNhY2hlIGRpciBleGlzdHNcbiAqXG4gKiBOb3QgcGFydCBvZiBgZGlyZWN0b3JpZXMudHNgIGJlY2F1c2UgdGhhdCBtb2R1bGUgaXMgbW9ja2VkIGluIHRlc3RzIGluIG9yZGVyIHRvIG1vY2sgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAqIHRvIHdyaXRlIHRvLCBhbmQgdGhlbiBJIG5lZWQgdG8gbW9jayB0aGlzIGZ1bmN0aW9uIGFzIHdlbGwuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVDYWNoZURpcigpIHtcbiAgYXdhaXQgZnMucHJvbWlzZXMubWtkaXIoY2RrQ2FjaGVEaXIoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbiJdfQ==