@cloud-copilot/iam-collect 0.1.23 → 0.1.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cli.js +12 -1
- package/dist/cjs/cli.js.map +1 -1
- package/dist/cjs/download/download.d.ts.map +1 -1
- package/dist/cjs/download/download.js +4 -4
- package/dist/cjs/download/download.js.map +1 -1
- package/dist/cjs/syncs/sso/ssoInstances.d.ts.map +1 -1
- package/dist/cjs/syncs/sso/ssoInstances.js +9 -2
- package/dist/cjs/syncs/sso/ssoInstances.js.map +1 -1
- package/dist/cjs/utils/log.d.ts +11 -0
- package/dist/cjs/utils/log.d.ts.map +1 -0
- package/dist/cjs/utils/log.js +67 -0
- package/dist/cjs/utils/log.js.map +1 -0
- package/dist/esm/cli.js +12 -1
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/download/download.d.ts.map +1 -1
- package/dist/esm/download/download.js +4 -4
- package/dist/esm/download/download.js.map +1 -1
- package/dist/esm/syncs/sso/ssoInstances.d.ts.map +1 -1
- package/dist/esm/syncs/sso/ssoInstances.js +9 -2
- package/dist/esm/syncs/sso/ssoInstances.js.map +1 -1
- package/dist/esm/utils/log.d.ts +11 -0
- package/dist/esm/utils/log.d.ts.map +1 -0
- package/dist/esm/utils/log.js +63 -0
- package/dist/esm/utils/log.js.map +1 -0
- package/package.json +1 -1
package/dist/cjs/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ const createConfigFile_js_1 = require("./config/createConfigFile.js");
|
|
|
7
7
|
const defaultConfig_js_1 = require("./config/defaultConfig.js");
|
|
8
8
|
const packageVersion_js_1 = require("./config/packageVersion.js");
|
|
9
9
|
const download_js_1 = require("./download/download.js");
|
|
10
|
+
const log_js_1 = require("./utils/log.js");
|
|
10
11
|
const main = async () => {
|
|
11
12
|
const version = await (0, packageVersion_js_1.iamCollectVersion)();
|
|
12
13
|
const cli = (0, cli_1.parseCliArguments)('iam-collect', {
|
|
@@ -39,12 +40,22 @@ const main = async () => {
|
|
|
39
40
|
}
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
|
-
}, {
|
|
43
|
+
}, {
|
|
44
|
+
log: {
|
|
45
|
+
type: 'enum',
|
|
46
|
+
description: 'The log level to use',
|
|
47
|
+
values: 'single',
|
|
48
|
+
validValues: log_js_1.LogLevels
|
|
49
|
+
}
|
|
50
|
+
}, {
|
|
43
51
|
envPrefix: 'IAM_COLLECT',
|
|
44
52
|
showHelpIfNoArgs: true,
|
|
45
53
|
requireSubcommand: true,
|
|
46
54
|
version: version
|
|
47
55
|
});
|
|
56
|
+
if (cli.args.log) {
|
|
57
|
+
(0, log_js_1.setLogLevel)(cli.args.log);
|
|
58
|
+
}
|
|
48
59
|
if (cli.subcommand === 'init') {
|
|
49
60
|
if ((0, defaultConfig_js_1.defaultConfigExists)()) {
|
|
50
61
|
console.error('Configuration file already exists');
|
package/dist/cjs/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,4CAAsD;AACtD,0DAAwD;AACxD,sEAAyE;AACzE,gEAA+D;AAC/D,kEAA8D;AAC9D,wDAAqD;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";;;AAEA,4CAAsD;AACtD,0DAAwD;AACxD,sEAAyE;AACzE,gEAA+D;AAC/D,kEAA8D;AAC9D,wDAAqD;AACrD,2CAAuD;AAEvD,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,MAAM,OAAO,GAAG,MAAM,IAAA,qCAAiB,GAAE,CAAA;IACzC,MAAM,GAAG,GAAG,IAAA,uBAAiB,EAC3B,aAAa,EACb;QACE,IAAI,EAAE;YACJ,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,EAAE;SACZ;QACD,QAAQ,EAAE;YACR,WAAW,EAAE,mBAAmB;YAChC,OAAO,EAAE;gBACP,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,gCAAgC;oBAC7C,MAAM,EAAE,UAAU;iBACnB;gBACD,UAAU,EAAE;oBACV,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kCAAkC;oBAC/C,MAAM,EAAE,UAAU;iBACnB;gBACD,OAAO,EAAE;oBACP,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;oBAC3C,MAAM,EAAE,UAAU;iBACnB;gBACD,QAAQ,EAAE;oBACR,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;oBACvC,MAAM,EAAE,UAAU;iBACnB;aACF;SACF;KACF,EACD;QACE,GAAG,EAAE;YACH,IAAI,EAAE,MAAM;YACZ,WAAW,EAAE,sBAAsB;YACnC,MAAM,EAAE,QAAQ;YAChB,WAAW,EAAE,kBAAS;SACvB;KACF,EACD;QACE,SAAS,EAAE,aAAa;QACxB,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,IAAI;QACvB,OAAO,EAAE,OAAO;KACjB,CACF,CAAA;IAED,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACjB,IAAA,oBAAW,EAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QAC9B,IAAI,IAAA,sCAAmB,GAAE,EAAE,CAAC;YAC1B,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;QAC9B,MAAM,IAAA,gDAA0B,GAAE,CAAA;IACpC,CAAC;SAAM,IAAI,GAAG,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,aAAa,GAAG,qBAAqB,CAAA;QAC3C,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QAC7F,MAAM,OAAO,GAAG,IAAA,+BAAe,EAAC,WAAW,CAAC,CAAA;QAC5C,MAAM,IAAA,0BAAY,EAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACvF,CAAC;AACH,CAAC,CAAA;AAED,IAAI,EAAE;KACH,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;IACX,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC;KACD,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;KACd,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,cAAc,EACf,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,cAAc,EACf,MAAM,qBAAqB,CAAA;AAQ5B,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
|
@@ -7,6 +7,7 @@ const FileSystemAwsIamStore_js_1 = require("../persistence/file/FileSystemAwsIam
|
|
|
7
7
|
const regions_js_1 = require("../regions.js");
|
|
8
8
|
const services_js_1 = require("../services.js");
|
|
9
9
|
const syncMap_js_1 = require("../syncs/syncMap.js");
|
|
10
|
+
const log_js_1 = require("../utils/log.js");
|
|
10
11
|
async function downloadData(configs, accountIds, regions, services) {
|
|
11
12
|
if (accountIds.length === 0) {
|
|
12
13
|
const defaultCredentials = await (0, auth_js_1.getDefaultCredentials)();
|
|
@@ -18,12 +19,11 @@ async function downloadData(configs, accountIds, regions, services) {
|
|
|
18
19
|
throw new Error('No storage configuration found. Cannot download data.');
|
|
19
20
|
}
|
|
20
21
|
for (const accountId of accountIds) {
|
|
21
|
-
|
|
22
|
+
log_js_1.log.info('Starting download for account', { accountId });
|
|
22
23
|
const authForAccount = (0, config_js_1.getAccountAuthConfig)(accountId, configs);
|
|
23
24
|
const credentials = await (0, auth_js_1.getCredentials)(accountId, authForAccount);
|
|
24
25
|
if (regions.length === 0) {
|
|
25
26
|
regions = await (0, regions_js_1.getEnabledRegions)(credentials);
|
|
26
|
-
// console.log(`Enabled regions for account ${accountId}:`, enabledRegions)
|
|
27
27
|
}
|
|
28
28
|
const storage = createStorageClient(storageConfig, credentials.partition);
|
|
29
29
|
if (services.length === 0) {
|
|
@@ -32,7 +32,7 @@ async function downloadData(configs, accountIds, regions, services) {
|
|
|
32
32
|
const syncOptions = {};
|
|
33
33
|
const enabledServices = (0, config_js_1.servicesForAccount)(accountId, configs, services);
|
|
34
34
|
for (const service of enabledServices) {
|
|
35
|
-
|
|
35
|
+
log_js_1.log.info('Starting download', { service, accountId });
|
|
36
36
|
const serviceRegions = (0, config_js_1.regionsForService)(service, accountId, configs, regions);
|
|
37
37
|
//Global syncs for the service
|
|
38
38
|
const globalSyncs = (0, syncMap_js_1.getGlobalSyncsForService)(service);
|
|
@@ -44,7 +44,7 @@ async function downloadData(configs, accountIds, regions, services) {
|
|
|
44
44
|
}
|
|
45
45
|
//Regional syncs for the service
|
|
46
46
|
for (const region of serviceRegions) {
|
|
47
|
-
|
|
47
|
+
log_js_1.log.info('Starting download for region and service', { service, accountId, region });
|
|
48
48
|
const regionalSyncs = (0, syncMap_js_1.getRegionalSyncsForService)(service);
|
|
49
49
|
if (regionalSyncs.length === 0) {
|
|
50
50
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssoInstances.d.ts","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssoInstances.d.ts","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAc,IAAI,EAAY,MAAM,YAAY,CAAA;AAGvD,eAAO,MAAM,WAAW,EAAE,IAqEzB,CAAA"}
|
|
@@ -4,6 +4,7 @@ exports.SsoDataSync = void 0;
|
|
|
4
4
|
const client_sso_admin_1 = require("@aws-sdk/client-sso-admin");
|
|
5
5
|
const ClientPool_js_1 = require("../../aws/ClientPool.js");
|
|
6
6
|
const client_tools_js_1 = require("../../utils/client-tools.js");
|
|
7
|
+
const log_js_1 = require("../../utils/log.js");
|
|
7
8
|
const tags_js_1 = require("../../utils/tags.js");
|
|
8
9
|
const sync_js_1 = require("../sync.js");
|
|
9
10
|
const typedSync_js_1 = require("../typedSync.js");
|
|
@@ -16,6 +17,12 @@ exports.SsoDataSync = {
|
|
|
16
17
|
inputKey: 'NextToken',
|
|
17
18
|
outputKey: 'NextToken'
|
|
18
19
|
});
|
|
20
|
+
const accountInstances = instances.filter((instance) => instance.OwnerAccountId === accountId && instance.Status === 'ACTIVE');
|
|
21
|
+
log_js_1.log.trace('Found SSO instances', {
|
|
22
|
+
accountId,
|
|
23
|
+
region,
|
|
24
|
+
instances: accountInstances.length
|
|
25
|
+
});
|
|
19
26
|
const resourceTypeParts = {
|
|
20
27
|
service: 'sso',
|
|
21
28
|
resourceType: 'instance',
|
|
@@ -24,7 +31,7 @@ exports.SsoDataSync = {
|
|
|
24
31
|
}
|
|
25
32
|
};
|
|
26
33
|
const data = [];
|
|
27
|
-
for (const instance of
|
|
34
|
+
for (const instance of accountInstances) {
|
|
28
35
|
const command = new client_sso_admin_1.ListTagsForResourceCommand({
|
|
29
36
|
InstanceArn: instance.InstanceArn,
|
|
30
37
|
ResourceArn: instance.InstanceArn
|
|
@@ -47,7 +54,7 @@ exports.SsoDataSync = {
|
|
|
47
54
|
});
|
|
48
55
|
}
|
|
49
56
|
await (0, sync_js_1.syncData)(data, storage, accountId, resourceTypeParts);
|
|
50
|
-
for (const instance of
|
|
57
|
+
for (const instance of accountInstances) {
|
|
51
58
|
const dataSyncs = createSsoInstanceResourceSyncs(instance, region);
|
|
52
59
|
for (const dataSync of dataSyncs) {
|
|
53
60
|
await dataSync.execute(accountId, region, credentials, storage, endpoint, syncOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssoInstances.js","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":";;;AAAA,gEAYkC;AAClC,2DAAuD;AACvD,iEAAqF;AACrF,iDAAyD;AACzD,wCAAuD;AACvD,kDAAoG;AAEvF,QAAA,WAAW,GAAS;IAC/B,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;QAChF,MAAM,MAAM,GAAG,6BAAa,CAAC,eAAe,CAAC,MAAM,CACjD,iCAAc,EACd,WAAW,EACX,MAAM,EACN,QAAQ,CACT,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,IAAA,+BAAgB,EAAC,MAAM,EAAE,uCAAoB,EAAE,WAAW,EAAE;YAClF,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB,CAAC,CAAA;QAEF,MAAM,iBAAiB,GAAG;YACxB,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE;gBACR,MAAM;aACP;SACF,CAAA;QAED,MAAM,IAAI,GAAiB,EAAE,CAAA;QAC7B,KAAK,MAAM,QAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"ssoInstances.js","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const LogLevels: readonly ["error", "warn", "info", "debug", "trace"];
|
|
2
|
+
export type LogLevel = (typeof LogLevels)[number];
|
|
3
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
4
|
+
export declare const log: {
|
|
5
|
+
error: (...args: unknown[]) => void;
|
|
6
|
+
warn: (...args: unknown[]) => void;
|
|
7
|
+
info: (...args: unknown[]) => void;
|
|
8
|
+
debug: (...args: unknown[]) => void;
|
|
9
|
+
trace: (...args: unknown[]) => void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,sDAAuD,CAAA;AAE7E,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAajD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,QAM1C;AAiDD,eAAO,MAAM,GAAG;qBACG,OAAO,EAAE;oBACV,OAAO,EAAE;oBACT,OAAO,EAAE;qBACR,OAAO,EAAE;qBACT,OAAO,EAAE;CAC3B,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.log = exports.LogLevels = void 0;
|
|
4
|
+
exports.setLogLevel = setLogLevel;
|
|
5
|
+
exports.LogLevels = ['error', 'warn', 'info', 'debug', 'trace'];
|
|
6
|
+
const LEVELS = {
|
|
7
|
+
error: 0,
|
|
8
|
+
warn: 1,
|
|
9
|
+
info: 2,
|
|
10
|
+
debug: 3,
|
|
11
|
+
trace: 4
|
|
12
|
+
};
|
|
13
|
+
let CURRENT_LEVEL_NAME = 'warn';
|
|
14
|
+
let CURRENT_LEVEL = LEVELS[CURRENT_LEVEL_NAME];
|
|
15
|
+
function setLogLevel(level) {
|
|
16
|
+
if (LEVELS[level] === undefined) {
|
|
17
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
18
|
+
}
|
|
19
|
+
CURRENT_LEVEL_NAME = level;
|
|
20
|
+
CURRENT_LEVEL = LEVELS[level];
|
|
21
|
+
}
|
|
22
|
+
// helper to serialize non-object args into a single string
|
|
23
|
+
function serializeArgs(args) {
|
|
24
|
+
return args
|
|
25
|
+
.map((a) => typeof a === 'string' ? a : a instanceof Error ? a.stack || a.message : JSON.stringify(a))
|
|
26
|
+
.join(' ');
|
|
27
|
+
}
|
|
28
|
+
// core log function: level check → prefix → JSON output
|
|
29
|
+
function logAt(level, args) {
|
|
30
|
+
if (LEVELS[level] > CURRENT_LEVEL)
|
|
31
|
+
return;
|
|
32
|
+
// Base log entry
|
|
33
|
+
const entry = {
|
|
34
|
+
timestamp: new Date().toISOString(),
|
|
35
|
+
level
|
|
36
|
+
};
|
|
37
|
+
// Separate object args and message args
|
|
38
|
+
const objectArgs = args.filter((a) => typeof a === 'object' && a !== null);
|
|
39
|
+
const messageArgs = args.filter((a) => typeof a !== 'object' || a === null);
|
|
40
|
+
// Merge all object arguments into the entry
|
|
41
|
+
for (const obj of objectArgs) {
|
|
42
|
+
Object.assign(entry, obj);
|
|
43
|
+
}
|
|
44
|
+
const msg = serializeArgs(messageArgs);
|
|
45
|
+
if (msg) {
|
|
46
|
+
entry.message = msg;
|
|
47
|
+
}
|
|
48
|
+
const line = JSON.stringify(entry);
|
|
49
|
+
switch (level) {
|
|
50
|
+
case 'error':
|
|
51
|
+
return console.error(line);
|
|
52
|
+
case 'warn':
|
|
53
|
+
return console.warn(line);
|
|
54
|
+
case 'info':
|
|
55
|
+
return console.info(line);
|
|
56
|
+
default:
|
|
57
|
+
return console.log(line);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.log = {
|
|
61
|
+
error: (...args) => logAt('error', args),
|
|
62
|
+
warn: (...args) => logAt('warn', args),
|
|
63
|
+
info: (...args) => logAt('info', args),
|
|
64
|
+
debug: (...args) => logAt('debug', args),
|
|
65
|
+
trace: (...args) => logAt('trace', args)
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":";;;AAeA,kCAMC;AArBY,QAAA,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAU,CAAA;AAI7E,MAAM,MAAM,GAA6B;IACvC,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAA;AAED,IAAI,kBAAkB,GAAa,MAAM,CAAA;AACzC,IAAI,aAAa,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;AAE9C,SAAgB,WAAW,CAAC,KAAe;IACzC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,EAAE,CAAC,CAAA;IAChD,CAAC;IACD,kBAAkB,GAAG,KAAK,CAAA;IAC1B,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/B,CAAC;AAED,2DAA2D;AAC3D,SAAS,aAAa,CAAC,IAAe;IACpC,OAAO,IAAI;SACR,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACT,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAC1F;SACA,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC;AAED,wDAAwD;AACxD,SAAS,KAAK,CAAC,KAAe,EAAE,IAAe;IAC7C,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa;QAAE,OAAM;IAEzC,iBAAiB;IACjB,MAAM,KAAK,GAAwB;QACjC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,KAAK;KACN,CAAA;IAED,wCAAwC;IACxC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAC1E,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAA;IAE3E,4CAA4C;IAC5C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAC3B,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,WAAW,CAAC,CAAA;IACtC,IAAI,GAAG,EAAE,CAAC;QACR,KAAK,CAAC,OAAO,GAAG,GAAG,CAAA;IACrB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAElC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,OAAO;YACV,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5B,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B;YACE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC;AAEY,QAAA,GAAG,GAAG;IACjB,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACnD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;IACjD,IAAI,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC;IACjD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;IACnD,KAAK,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;CACpD,CAAA"}
|
package/dist/esm/cli.js
CHANGED
|
@@ -5,6 +5,7 @@ import { createDefaultConfiguration } from './config/createConfigFile.js';
|
|
|
5
5
|
import { defaultConfigExists } from './config/defaultConfig.js';
|
|
6
6
|
import { iamCollectVersion } from './config/packageVersion.js';
|
|
7
7
|
import { downloadData } from './download/download.js';
|
|
8
|
+
import { LogLevels, setLogLevel } from './utils/log.js';
|
|
8
9
|
const main = async () => {
|
|
9
10
|
const version = await iamCollectVersion();
|
|
10
11
|
const cli = parseCliArguments('iam-collect', {
|
|
@@ -37,12 +38,22 @@ const main = async () => {
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
|
-
}, {
|
|
41
|
+
}, {
|
|
42
|
+
log: {
|
|
43
|
+
type: 'enum',
|
|
44
|
+
description: 'The log level to use',
|
|
45
|
+
values: 'single',
|
|
46
|
+
validValues: LogLevels
|
|
47
|
+
}
|
|
48
|
+
}, {
|
|
41
49
|
envPrefix: 'IAM_COLLECT',
|
|
42
50
|
showHelpIfNoArgs: true,
|
|
43
51
|
requireSubcommand: true,
|
|
44
52
|
version: version
|
|
45
53
|
});
|
|
54
|
+
if (cli.args.log) {
|
|
55
|
+
setLogLevel(cli.args.log);
|
|
56
|
+
}
|
|
46
57
|
if (cli.subcommand === 'init') {
|
|
47
58
|
if (defaultConfigExists()) {
|
|
48
59
|
console.error('Configuration file already exists');
|
package/dist/esm/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAA;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,cAAc,EACf,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"AACA,OAAO,EAOL,cAAc,EACf,MAAM,qBAAqB,CAAA;AAQ5B,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EAAE,EACzB,UAAU,EAAE,MAAM,EAAE,EACpB,OAAO,EAAE,MAAM,EAAE,EACjB,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAwEf"}
|
|
@@ -4,6 +4,7 @@ import { FileSystemAwsIamStore } from '../persistence/file/FileSystemAwsIamStore
|
|
|
4
4
|
import { getEnabledRegions } from '../regions.js';
|
|
5
5
|
import { allServices } from '../services.js';
|
|
6
6
|
import { getGlobalSyncsForService, getRegionalSyncsForService } from '../syncs/syncMap.js';
|
|
7
|
+
import { log } from '../utils/log.js';
|
|
7
8
|
export async function downloadData(configs, accountIds, regions, services) {
|
|
8
9
|
if (accountIds.length === 0) {
|
|
9
10
|
const defaultCredentials = await getDefaultCredentials();
|
|
@@ -15,12 +16,11 @@ export async function downloadData(configs, accountIds, regions, services) {
|
|
|
15
16
|
throw new Error('No storage configuration found. Cannot download data.');
|
|
16
17
|
}
|
|
17
18
|
for (const accountId of accountIds) {
|
|
18
|
-
|
|
19
|
+
log.info('Starting download for account', { accountId });
|
|
19
20
|
const authForAccount = getAccountAuthConfig(accountId, configs);
|
|
20
21
|
const credentials = await getCredentials(accountId, authForAccount);
|
|
21
22
|
if (regions.length === 0) {
|
|
22
23
|
regions = await getEnabledRegions(credentials);
|
|
23
|
-
// console.log(`Enabled regions for account ${accountId}:`, enabledRegions)
|
|
24
24
|
}
|
|
25
25
|
const storage = createStorageClient(storageConfig, credentials.partition);
|
|
26
26
|
if (services.length === 0) {
|
|
@@ -29,7 +29,7 @@ export async function downloadData(configs, accountIds, regions, services) {
|
|
|
29
29
|
const syncOptions = {};
|
|
30
30
|
const enabledServices = servicesForAccount(accountId, configs, services);
|
|
31
31
|
for (const service of enabledServices) {
|
|
32
|
-
|
|
32
|
+
log.info('Starting download', { service, accountId });
|
|
33
33
|
const serviceRegions = regionsForService(service, accountId, configs, regions);
|
|
34
34
|
//Global syncs for the service
|
|
35
35
|
const globalSyncs = getGlobalSyncsForService(service);
|
|
@@ -41,7 +41,7 @@ export async function downloadData(configs, accountIds, regions, services) {
|
|
|
41
41
|
}
|
|
42
42
|
//Regional syncs for the service
|
|
43
43
|
for (const region of serviceRegions) {
|
|
44
|
-
|
|
44
|
+
log.info('Starting download for region and service', { service, accountId, region });
|
|
45
45
|
const regionalSyncs = getRegionalSyncsForService(service);
|
|
46
46
|
if (regionalSyncs.length === 0) {
|
|
47
47
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACpF,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAA;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../../src/download/download.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssoInstances.d.ts","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ssoInstances.d.ts","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAc,IAAI,EAAY,MAAM,YAAY,CAAA;AAGvD,eAAO,MAAM,WAAW,EAAE,IAqEzB,CAAA"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { DescribePermissionSetCommand, GetInlinePolicyForPermissionSetCommand, GetPermissionsBoundaryForPermissionSetCommand, ListAccountsForProvisionedPermissionSetCommand, ListCustomerManagedPolicyReferencesInPermissionSetCommand, ListInstancesCommand, ListManagedPoliciesInPermissionSetCommand, ListPermissionSetsCommand, ListTagsForResourceCommand, SSOAdminClient } from '@aws-sdk/client-sso-admin';
|
|
2
2
|
import { AwsClientPool } from '../../aws/ClientPool.js';
|
|
3
3
|
import { runAndCatch404, runAndCatchAccessDenied } from '../../utils/client-tools.js';
|
|
4
|
+
import { log } from '../../utils/log.js';
|
|
4
5
|
import { convertTagsToRecord } from '../../utils/tags.js';
|
|
5
6
|
import { syncData } from '../sync.js';
|
|
6
7
|
import { createResourceSyncType, createTypedSyncOperation, paginateResource } from '../typedSync.js';
|
|
@@ -13,6 +14,12 @@ export const SsoDataSync = {
|
|
|
13
14
|
inputKey: 'NextToken',
|
|
14
15
|
outputKey: 'NextToken'
|
|
15
16
|
});
|
|
17
|
+
const accountInstances = instances.filter((instance) => instance.OwnerAccountId === accountId && instance.Status === 'ACTIVE');
|
|
18
|
+
log.trace('Found SSO instances', {
|
|
19
|
+
accountId,
|
|
20
|
+
region,
|
|
21
|
+
instances: accountInstances.length
|
|
22
|
+
});
|
|
16
23
|
const resourceTypeParts = {
|
|
17
24
|
service: 'sso',
|
|
18
25
|
resourceType: 'instance',
|
|
@@ -21,7 +28,7 @@ export const SsoDataSync = {
|
|
|
21
28
|
}
|
|
22
29
|
};
|
|
23
30
|
const data = [];
|
|
24
|
-
for (const instance of
|
|
31
|
+
for (const instance of accountInstances) {
|
|
25
32
|
const command = new ListTagsForResourceCommand({
|
|
26
33
|
InstanceArn: instance.InstanceArn,
|
|
27
34
|
ResourceArn: instance.InstanceArn
|
|
@@ -44,7 +51,7 @@ export const SsoDataSync = {
|
|
|
44
51
|
});
|
|
45
52
|
}
|
|
46
53
|
await syncData(data, storage, accountId, resourceTypeParts);
|
|
47
|
-
for (const instance of
|
|
54
|
+
for (const instance of accountInstances) {
|
|
48
55
|
const dataSyncs = createSsoInstanceResourceSyncs(instance, region);
|
|
49
56
|
for (const dataSync of dataSyncs) {
|
|
50
57
|
await dataSync.execute(accountId, region, credentials, storage, endpoint, syncOptions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssoInstances.js","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,sCAAsC,EACtC,6CAA6C,EAE7C,8CAA8C,EAC9C,yDAAyD,EACzD,oBAAoB,EACpB,yCAAyC,EACzC,yBAAyB,EACzB,0BAA0B,EAC1B,cAAc,EACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AACrF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAoB,QAAQ,EAAE,MAAM,YAAY,CAAA;AACvD,OAAO,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAEpG,MAAM,CAAC,MAAM,WAAW,GAAS;IAC/B,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;QAChF,MAAM,MAAM,GAAG,aAAa,CAAC,eAAe,CAAC,MAAM,CACjD,cAAc,EACd,WAAW,EACX,MAAM,EACN,QAAQ,CACT,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE;YAClF,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB,CAAC,CAAA;QAEF,MAAM,iBAAiB,GAAG;YACxB,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,QAAQ,EAAE;gBACR,MAAM;aACP;SACF,CAAA;QAED,MAAM,IAAI,GAAiB,EAAE,CAAA;QAC7B,KAAK,MAAM,QAAQ,IAAI,
|
|
1
|
+
{"version":3,"file":"ssoInstances.js","sourceRoot":"","sources":["../../../../src/syncs/sso/ssoInstances.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const LogLevels: readonly ["error", "warn", "info", "debug", "trace"];
|
|
2
|
+
export type LogLevel = (typeof LogLevels)[number];
|
|
3
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
4
|
+
export declare const log: {
|
|
5
|
+
error: (...args: unknown[]) => void;
|
|
6
|
+
warn: (...args: unknown[]) => void;
|
|
7
|
+
info: (...args: unknown[]) => void;
|
|
8
|
+
debug: (...args: unknown[]) => void;
|
|
9
|
+
trace: (...args: unknown[]) => void;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,sDAAuD,CAAA;AAE7E,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAA;AAajD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,QAM1C;AAiDD,eAAO,MAAM,GAAG;qBACG,OAAO,EAAE;oBACV,OAAO,EAAE;oBACT,OAAO,EAAE;qBACR,OAAO,EAAE;qBACT,OAAO,EAAE;CAC3B,CAAA"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export const LogLevels = ['error', 'warn', 'info', 'debug', 'trace'];
|
|
2
|
+
const LEVELS = {
|
|
3
|
+
error: 0,
|
|
4
|
+
warn: 1,
|
|
5
|
+
info: 2,
|
|
6
|
+
debug: 3,
|
|
7
|
+
trace: 4
|
|
8
|
+
};
|
|
9
|
+
let CURRENT_LEVEL_NAME = 'warn';
|
|
10
|
+
let CURRENT_LEVEL = LEVELS[CURRENT_LEVEL_NAME];
|
|
11
|
+
export function setLogLevel(level) {
|
|
12
|
+
if (LEVELS[level] === undefined) {
|
|
13
|
+
throw new Error(`Invalid log level: ${level}`);
|
|
14
|
+
}
|
|
15
|
+
CURRENT_LEVEL_NAME = level;
|
|
16
|
+
CURRENT_LEVEL = LEVELS[level];
|
|
17
|
+
}
|
|
18
|
+
// helper to serialize non-object args into a single string
|
|
19
|
+
function serializeArgs(args) {
|
|
20
|
+
return args
|
|
21
|
+
.map((a) => typeof a === 'string' ? a : a instanceof Error ? a.stack || a.message : JSON.stringify(a))
|
|
22
|
+
.join(' ');
|
|
23
|
+
}
|
|
24
|
+
// core log function: level check → prefix → JSON output
|
|
25
|
+
function logAt(level, args) {
|
|
26
|
+
if (LEVELS[level] > CURRENT_LEVEL)
|
|
27
|
+
return;
|
|
28
|
+
// Base log entry
|
|
29
|
+
const entry = {
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
level
|
|
32
|
+
};
|
|
33
|
+
// Separate object args and message args
|
|
34
|
+
const objectArgs = args.filter((a) => typeof a === 'object' && a !== null);
|
|
35
|
+
const messageArgs = args.filter((a) => typeof a !== 'object' || a === null);
|
|
36
|
+
// Merge all object arguments into the entry
|
|
37
|
+
for (const obj of objectArgs) {
|
|
38
|
+
Object.assign(entry, obj);
|
|
39
|
+
}
|
|
40
|
+
const msg = serializeArgs(messageArgs);
|
|
41
|
+
if (msg) {
|
|
42
|
+
entry.message = msg;
|
|
43
|
+
}
|
|
44
|
+
const line = JSON.stringify(entry);
|
|
45
|
+
switch (level) {
|
|
46
|
+
case 'error':
|
|
47
|
+
return console.error(line);
|
|
48
|
+
case 'warn':
|
|
49
|
+
return console.warn(line);
|
|
50
|
+
case 'info':
|
|
51
|
+
return console.info(line);
|
|
52
|
+
default:
|
|
53
|
+
return console.log(line);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export const log = {
|
|
57
|
+
error: (...args) => logAt('error', args),
|
|
58
|
+
warn: (...args) => logAt('warn', args),
|
|
59
|
+
info: (...args) => logAt('info', args),
|
|
60
|
+
debug: (...args) => logAt('debug', args),
|
|
61
|
+
trace: (...args) => logAt('trace', args)
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../../src/utils/log.ts"],"names":[],"mappings":"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"}
|