@actsecurity/iam-collect 0.1.220 → 0.1.222
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/README.md +7 -0
- package/dist/cjs/aws/ClientPool.d.ts.map +1 -1
- package/dist/cjs/aws/ClientPool.js +7 -0
- package/dist/cjs/aws/ClientPool.js.map +1 -1
- package/dist/cjs/config/version.d.ts +1 -1
- package/dist/cjs/config/version.js +1 -1
- package/dist/cjs/services.d.ts +1 -1
- package/dist/cjs/services.d.ts.map +1 -1
- package/dist/cjs/services.js +4 -0
- package/dist/cjs/services.js.map +1 -1
- package/dist/cjs/syncs/codeartifact/repositories.d.ts +2 -0
- package/dist/cjs/syncs/codeartifact/repositories.d.ts.map +1 -0
- package/dist/cjs/syncs/codeartifact/repositories.js +51 -0
- package/dist/cjs/syncs/codeartifact/repositories.js.map +1 -0
- package/dist/cjs/syncs/codebuild/projects.d.ts +6 -0
- package/dist/cjs/syncs/codebuild/projects.d.ts.map +1 -0
- package/dist/cjs/syncs/codebuild/projects.js +77 -0
- package/dist/cjs/syncs/codebuild/projects.js.map +1 -0
- package/dist/cjs/syncs/iot/policies.d.ts +5 -0
- package/dist/cjs/syncs/iot/policies.d.ts.map +1 -0
- package/dist/cjs/syncs/iot/policies.js +50 -0
- package/dist/cjs/syncs/iot/policies.js.map +1 -0
- package/dist/cjs/syncs/ses/identities.d.ts +6 -0
- package/dist/cjs/syncs/ses/identities.d.ts.map +1 -0
- package/dist/cjs/syncs/ses/identities.js +86 -0
- package/dist/cjs/syncs/ses/identities.js.map +1 -0
- package/dist/cjs/syncs/sso/identityStoreDirectory.d.ts +7 -0
- package/dist/cjs/syncs/sso/identityStoreDirectory.d.ts.map +1 -0
- package/dist/cjs/syncs/sso/identityStoreDirectory.js +213 -0
- package/dist/cjs/syncs/sso/identityStoreDirectory.js.map +1 -0
- package/dist/cjs/syncs/sso/ssoInstances.d.ts.map +1 -1
- package/dist/cjs/syncs/sso/ssoInstances.js +6 -1
- package/dist/cjs/syncs/sso/ssoInstances.js.map +1 -1
- package/dist/cjs/syncs/syncMap.d.ts.map +1 -1
- package/dist/cjs/syncs/syncMap.js +8 -0
- package/dist/cjs/syncs/syncMap.js.map +1 -1
- package/dist/esm/aws/ClientPool.d.ts.map +1 -1
- package/dist/esm/aws/ClientPool.js +7 -0
- package/dist/esm/aws/ClientPool.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/services.d.ts +1 -1
- package/dist/esm/services.d.ts.map +1 -1
- package/dist/esm/services.js +4 -0
- package/dist/esm/services.js.map +1 -1
- package/dist/esm/syncs/codeartifact/repositories.d.ts +2 -0
- package/dist/esm/syncs/codeartifact/repositories.d.ts.map +1 -0
- package/dist/esm/syncs/codeartifact/repositories.js +48 -0
- package/dist/esm/syncs/codeartifact/repositories.js.map +1 -0
- package/dist/esm/syncs/codebuild/projects.d.ts +6 -0
- package/dist/esm/syncs/codebuild/projects.d.ts.map +1 -0
- package/dist/esm/syncs/codebuild/projects.js +75 -0
- package/dist/esm/syncs/codebuild/projects.js.map +1 -0
- package/dist/esm/syncs/iot/policies.d.ts +5 -0
- package/dist/esm/syncs/iot/policies.d.ts.map +1 -0
- package/dist/esm/syncs/iot/policies.js +47 -0
- package/dist/esm/syncs/iot/policies.js.map +1 -0
- package/dist/esm/syncs/ses/identities.d.ts +6 -0
- package/dist/esm/syncs/ses/identities.d.ts.map +1 -0
- package/dist/esm/syncs/ses/identities.js +84 -0
- package/dist/esm/syncs/ses/identities.js.map +1 -0
- package/dist/esm/syncs/sso/identityStoreDirectory.d.ts +7 -0
- package/dist/esm/syncs/sso/identityStoreDirectory.d.ts.map +1 -0
- package/dist/esm/syncs/sso/identityStoreDirectory.js +211 -0
- package/dist/esm/syncs/sso/identityStoreDirectory.js.map +1 -0
- package/dist/esm/syncs/sso/ssoInstances.d.ts.map +1 -1
- package/dist/esm/syncs/sso/ssoInstances.js +6 -1
- package/dist/esm/syncs/sso/ssoInstances.js.map +1 -1
- package/dist/esm/syncs/syncMap.d.ts.map +1 -1
- package/dist/esm/syncs/syncMap.js +8 -0
- package/dist/esm/syncs/syncMap.js.map +1 -1
- package/package.json +6 -1
package/README.md
CHANGED
|
@@ -147,6 +147,8 @@ If you prefer, you can configure iam-collect to pull data from AWS Config instea
|
|
|
147
147
|
| iam | Instance Profiles | name, roles, id, path, tags |
|
|
148
148
|
| apigateway | Rest APIs | id, name, policy, tags |
|
|
149
149
|
| backup | Backup Vaults | name, key, tags, policy |
|
|
150
|
+
| codeartifact | Repositories | name, region, domain name, domain owner, administrator account, description, tags, resource policy |
|
|
151
|
+
| codebuild | Projects | name, description, service role, resource access role, encryption key, visibility, public project alias, tags, policy |
|
|
150
152
|
| dynamodb | Streams | name, region, resource policy |
|
|
151
153
|
| dynamodb | Tables | name, region, tags, resource policy |
|
|
152
154
|
| ecr | Repositories | name, region, tags, resource policy, key id |
|
|
@@ -159,6 +161,7 @@ If you prefer, you can configure iam-collect to pull data from AWS Config instea
|
|
|
159
161
|
| events | Event Buses | name, key id, policy, tags |
|
|
160
162
|
| glacier | Vaults | name, region, tags, policy |
|
|
161
163
|
| glue | Root Catalogs | policy |
|
|
164
|
+
| iot | Policies | name, default version, default version doc, attachment targets |
|
|
162
165
|
| kafka | MSK Clusters | name, policy, kms key, tags |
|
|
163
166
|
| kinesis | Data Streams | name, encryption type, key id, policy, tags |
|
|
164
167
|
| kms | Keys | id, policy, tags |
|
|
@@ -182,7 +185,11 @@ If you prefer, you can configure iam-collect to pull data from AWS Config instea
|
|
|
182
185
|
| sns | Topics | name, tags, kms key id, policy |
|
|
183
186
|
| sqs | Queues | name, tags, kms key id, policy |
|
|
184
187
|
| secretsmanager | Secrets | name, tags, kms key id, policy |
|
|
188
|
+
| ses | Verified Identities | name, identity type, sending authorization policies |
|
|
185
189
|
| sso | Instances | id, name, owner account id, status, tags |
|
|
186
190
|
| sso | Permission Sets | name, description, AWS managed policies, customer managed policies, inline policy, permission boundary, accounts, tags |
|
|
191
|
+
| sso | Identity Store Users | username, display name, profile attributes, external ids, groups |
|
|
192
|
+
| sso | Identity Store Groups | name, description, external ids, members |
|
|
193
|
+
| sso | Identity Store Group Memberships | group and member relationships |
|
|
187
194
|
|
|
188
195
|
If you don't see the data you are looking for, please check the [open resource issues](https://github.com/act-security-labs/iam-collect/issues?q=is%3Aissue%20state%3Aopen%20label%3Aresource) and comment on the issue or create a new one.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientPool.d.ts","sourceRoot":"","sources":["../../../src/aws/ClientPool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClientPool.d.ts","sourceRoot":"","sources":["../../../src/aws/ClientPool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAMnD,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,KAAK,iCAAiC,EAAE,MAAM,eAAe,CAAA;AAEtE,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,CAAA;AACvD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAiBlD,qBAAa,aAAa;IACxB,OAAc,eAAe,gBAAsB;IAEnD,OAAO,CAAC,WAAW,CAA+B;IAClD,OAAO,CAAC,oBAAoB,CAAiB;;IAU7C;;;;;;;;OAQG;IACI,MAAM,CAAC,CAAC,SAAS,SAAS,EAC/B,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAChC,WAAW,EAAE,iCAAiC,EAC9C,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,CAAC;IAoBJ,OAAO,CAAC,WAAW;IASnB;;;;OAIG;IACI,KAAK,IAAI,IAAI;IASpB;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAElC;;OAEG;IACI,sBAAsB,IAAI,OAAO;IAIxC;;;;;;;OAOG;IACI,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;IAItF,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AwsClientPool = void 0;
|
|
4
4
|
const client_lambda_1 = require("@aws-sdk/client-lambda");
|
|
5
|
+
const client_ses_1 = require("@aws-sdk/client-ses");
|
|
5
6
|
const node_http_handler_1 = require("@smithy/node-http-handler");
|
|
6
7
|
const util_retry_1 = require("@smithy/util-retry");
|
|
7
8
|
const retrySettings = {
|
|
@@ -10,6 +11,12 @@ const retrySettings = {
|
|
|
10
11
|
minFillRate: 0.2, // lower baseline QPS (default 0.5)
|
|
11
12
|
scaleConstant: 0.1, // slower cubic ramp (default 0.4)
|
|
12
13
|
smooth: 0.5 // dampen measured rate (default 0.8)
|
|
14
|
+
},
|
|
15
|
+
[client_ses_1.SESClient.name]: {
|
|
16
|
+
beta: 0.4, // SES identity APIs are limited to one request per second
|
|
17
|
+
minFillRate: 0.2,
|
|
18
|
+
scaleConstant: 0.1,
|
|
19
|
+
smooth: 0.5
|
|
13
20
|
}
|
|
14
21
|
};
|
|
15
22
|
class AwsClientPool {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientPool.js","sourceRoot":"","sources":["../../../src/aws/ClientPool.ts"],"names":[],"mappings":";;;AAAA,0DAAqD;
|
|
1
|
+
{"version":3,"file":"ClientPool.js","sourceRoot":"","sources":["../../../src/aws/ClientPool.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/services.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* All Valid AWS Services
|
|
3
3
|
*/
|
|
4
|
-
export declare const allServices: readonly ["apigateway", "backup", "dynamodb", "ec2", "ecr", "eks", "elasticfilesystem", "es", "events", "glacier", "glue", "iam", "kafka", "kinesis", "kms", "lambda", "organizations", "ram", "s3", "s3-object-lambda", "s3express", "s3outposts", "s3tables", "secretsmanager", "sns", "sqs", "sso"];
|
|
4
|
+
export declare const allServices: readonly ["apigateway", "backup", "codeartifact", "codebuild", "dynamodb", "ec2", "ecr", "eks", "elasticfilesystem", "es", "events", "glacier", "glue", "iam", "iot", "kafka", "kinesis", "kms", "lambda", "organizations", "ram", "s3", "s3-object-lambda", "s3express", "s3outposts", "s3tables", "secretsmanager", "ses", "sns", "sqs", "sso"];
|
|
5
5
|
/**
|
|
6
6
|
* Type representing a valid AWS service. A union of all strings in `allServices`.
|
|
7
7
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,WAAW,mVAgCd,CAAA;AAEV;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAE5D"}
|
package/dist/cjs/services.js
CHANGED
|
@@ -8,6 +8,8 @@ exports.lowerCaseService = lowerCaseService;
|
|
|
8
8
|
exports.allServices = [
|
|
9
9
|
'apigateway',
|
|
10
10
|
'backup',
|
|
11
|
+
'codeartifact',
|
|
12
|
+
'codebuild',
|
|
11
13
|
'dynamodb',
|
|
12
14
|
'ec2',
|
|
13
15
|
'ecr',
|
|
@@ -18,6 +20,7 @@ exports.allServices = [
|
|
|
18
20
|
'glacier',
|
|
19
21
|
'glue',
|
|
20
22
|
'iam',
|
|
23
|
+
'iot',
|
|
21
24
|
'kafka',
|
|
22
25
|
'kinesis',
|
|
23
26
|
'kms',
|
|
@@ -30,6 +33,7 @@ exports.allServices = [
|
|
|
30
33
|
's3outposts',
|
|
31
34
|
's3tables',
|
|
32
35
|
'secretsmanager',
|
|
36
|
+
'ses',
|
|
33
37
|
'sns',
|
|
34
38
|
'sqs',
|
|
35
39
|
'sso'
|
package/dist/cjs/services.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../src/services.ts"],"names":[],"mappings":";;;AAgDA,4CAEC;AAlDD;;GAEG;AACU,QAAA,WAAW,GAAG;IACzB,YAAY;IACZ,QAAQ;IACR,cAAc;IACd,WAAW;IACX,UAAU;IACV,KAAK;IACL,KAAK;IACL,KAAK;IACL,mBAAmB;IACnB,IAAI;IACJ,QAAQ;IACR,SAAS;IACT,MAAM;IACN,KAAK;IACL,KAAK;IACL,OAAO;IACP,SAAS;IACT,KAAK;IACL,QAAQ;IACR,eAAe;IACf,KAAK;IACL,IAAI;IACJ,kBAAkB;IAClB,WAAW;IACX,YAAY;IACZ,UAAU;IACV,gBAAgB;IAChB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;CACG,CAAA;AAOV;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,OAAe;IAC9C,OAAO,OAAO,CAAC,WAAW,EAAgB,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.d.ts","sourceRoot":"","sources":["../../../../src/syncs/codeartifact/repositories.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,4BAA4B,2BAkDxC,CAAA"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeArtifactRepositoriesSync = void 0;
|
|
4
|
+
const client_codeartifact_1 = require("@aws-sdk/client-codeartifact");
|
|
5
|
+
const client_tools_js_1 = require("../../utils/client-tools.js");
|
|
6
|
+
const json_js_1 = require("../../utils/json.js");
|
|
7
|
+
const typedSync_js_1 = require("../typedSync.js");
|
|
8
|
+
exports.CodeArtifactRepositoriesSync = (0, typedSync_js_1.createTypedSyncOperation)('codeartifact', 'repositories', (0, typedSync_js_1.createResourceSyncType)({
|
|
9
|
+
client: client_codeartifact_1.CodeartifactClient,
|
|
10
|
+
command: client_codeartifact_1.ListRepositoriesCommand,
|
|
11
|
+
key: 'repositories',
|
|
12
|
+
paginationConfig: {
|
|
13
|
+
inputKey: 'nextToken',
|
|
14
|
+
outputKey: 'nextToken'
|
|
15
|
+
},
|
|
16
|
+
arn: (repository) => repository.arn,
|
|
17
|
+
extraFields: {
|
|
18
|
+
tags: async (client, repository) => {
|
|
19
|
+
const result = await client.send(new client_codeartifact_1.ListTagsForResourceCommand({ resourceArn: repository.arn }));
|
|
20
|
+
return result.tags;
|
|
21
|
+
},
|
|
22
|
+
policy: async (client, repository) => {
|
|
23
|
+
return (0, client_tools_js_1.runAndCatchError)('ResourceNotFoundException', async () => {
|
|
24
|
+
const result = await client.send(new client_codeartifact_1.GetRepositoryPermissionsPolicyCommand({
|
|
25
|
+
domain: repository.domainName,
|
|
26
|
+
domainOwner: repository.domainOwner,
|
|
27
|
+
repository: repository.name
|
|
28
|
+
}));
|
|
29
|
+
return (0, json_js_1.parseIfPresent)(result.policy?.document);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
tags: (repository) => repository.extraFields.tags,
|
|
34
|
+
resourceTypeParts: (account, region) => ({
|
|
35
|
+
service: 'codeartifact',
|
|
36
|
+
resourceType: 'repository',
|
|
37
|
+
account,
|
|
38
|
+
region
|
|
39
|
+
}),
|
|
40
|
+
results: (repository) => ({
|
|
41
|
+
metadata: {
|
|
42
|
+
name: repository.name,
|
|
43
|
+
domainName: repository.domainName,
|
|
44
|
+
domainOwner: repository.domainOwner,
|
|
45
|
+
administratorAccount: repository.administratorAccount,
|
|
46
|
+
description: repository.description
|
|
47
|
+
},
|
|
48
|
+
policy: repository.extraFields.policy
|
|
49
|
+
})
|
|
50
|
+
}));
|
|
51
|
+
//# sourceMappingURL=repositories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repositories.js","sourceRoot":"","sources":["../../../../src/syncs/codeartifact/repositories.ts"],"names":[],"mappings":";;;AAAA,sEAKqC;AACrC,iEAA8D;AAC9D,iDAAoD;AACpD,kDAAkF;AAErE,QAAA,4BAA4B,GAAG,IAAA,uCAAwB,EAClE,cAAc,EACd,cAAc,EACd,IAAA,qCAAsB,EAAC;IACrB,MAAM,EAAE,wCAAkB;IAC1B,OAAO,EAAE,6CAAuB;IAChC,GAAG,EAAE,cAAc;IACnB,gBAAgB,EAAE;QAChB,QAAQ,EAAE,WAAW;QACrB,SAAS,EAAE,WAAW;KACvB;IACD,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,GAAI;IACpC,WAAW,EAAE;QACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YACjC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,gDAA0B,CAAC,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,EAAE,CAAC,CAChE,CAAA;YACD,OAAO,MAAM,CAAC,IAAI,CAAA;QACpB,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;YACnC,OAAO,IAAA,kCAAgB,EAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;gBAC9D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAC9B,IAAI,2DAAqC,CAAC;oBACxC,MAAM,EAAE,UAAU,CAAC,UAAW;oBAC9B,WAAW,EAAE,UAAU,CAAC,WAAW;oBACnC,UAAU,EAAE,UAAU,CAAC,IAAK;iBAC7B,CAAC,CACH,CAAA;gBACD,OAAO,IAAA,wBAAc,EAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;YAChD,CAAC,CAAC,CAAA;QACJ,CAAC;KACF;IACD,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI;IACjD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACvC,OAAO,EAAE,cAAc;QACvB,YAAY,EAAE,YAAY;QAC1B,OAAO;QACP,MAAM;KACP,CAAC;IACF,OAAO,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxB,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,WAAW,EAAE,UAAU,CAAC,WAAW;YACnC,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;YACrD,WAAW,EAAE,UAAU,CAAC,WAAW;SACpC;QACD,MAAM,EAAE,UAAU,CAAC,WAAW,CAAC,MAAM;KACtC,CAAC;CACH,CAAC,CACH,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../../src/syncs/codebuild/projects.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAmB,KAAK,IAAI,EAAY,MAAM,YAAY,CAAA;AAKjE;;GAEG;AACH,eAAO,MAAM,qBAAqB,EAAE,IA4DnC,CAAA"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CodeBuildProjectsSync = void 0;
|
|
4
|
+
const client_codebuild_1 = require("@aws-sdk/client-codebuild");
|
|
5
|
+
const log_1 = require("@actsecurity/log");
|
|
6
|
+
const client_tools_js_1 = require("../../utils/client-tools.js");
|
|
7
|
+
const json_js_1 = require("../../utils/json.js");
|
|
8
|
+
const tags_js_1 = require("../../utils/tags.js");
|
|
9
|
+
const sync_js_1 = require("../sync.js");
|
|
10
|
+
const typedSync_js_1 = require("../typedSync.js");
|
|
11
|
+
const BATCH_GET_PROJECTS_LIMIT = 100;
|
|
12
|
+
/**
|
|
13
|
+
* Sync AWS CodeBuild projects and their resource policies.
|
|
14
|
+
*/
|
|
15
|
+
exports.CodeBuildProjectsSync = {
|
|
16
|
+
awsService: 'codebuild',
|
|
17
|
+
name: 'projects',
|
|
18
|
+
execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => {
|
|
19
|
+
const codeBuildClient = syncOptions.clientPool.client(client_codebuild_1.CodeBuildClient, credentials, region, endpoint);
|
|
20
|
+
const projectNames = await (0, client_tools_js_1.withDnsRetry)(() => (0, typedSync_js_1.paginateResource)(codeBuildClient, client_codebuild_1.ListProjectsCommand, 'projects', {
|
|
21
|
+
inputKey: 'nextToken',
|
|
22
|
+
outputKey: 'nextToken'
|
|
23
|
+
}));
|
|
24
|
+
const projects = [];
|
|
25
|
+
for (let i = 0; i < projectNames.length; i += BATCH_GET_PROJECTS_LIMIT) {
|
|
26
|
+
const response = await (0, client_tools_js_1.withDnsRetry)(() => codeBuildClient.send(new client_codebuild_1.BatchGetProjectsCommand({
|
|
27
|
+
names: projectNames.slice(i, i + BATCH_GET_PROJECTS_LIMIT)
|
|
28
|
+
})));
|
|
29
|
+
projects.push(...(response.projects ?? []));
|
|
30
|
+
}
|
|
31
|
+
const projectJobs = projects.map((project) => ({
|
|
32
|
+
properties: { project },
|
|
33
|
+
execute: async () => collectProjectRecord(codeBuildClient, project)
|
|
34
|
+
}));
|
|
35
|
+
const projectResults = await Promise.all(syncOptions.workerPool.enqueueAll(projectJobs));
|
|
36
|
+
const records = [];
|
|
37
|
+
for (const result of projectResults) {
|
|
38
|
+
if (result.status === 'rejected') {
|
|
39
|
+
const project = result.properties.project;
|
|
40
|
+
log_1.log.error('Failed to collect CodeBuild project', result.reason, {
|
|
41
|
+
projectArn: project.arn
|
|
42
|
+
});
|
|
43
|
+
throw new Error(`Failed to collect CodeBuild project ${project.arn}`);
|
|
44
|
+
}
|
|
45
|
+
records.push(result.value);
|
|
46
|
+
}
|
|
47
|
+
await (0, sync_js_1.syncData)(records, storage, accountId, {
|
|
48
|
+
service: 'codebuild',
|
|
49
|
+
resourceType: 'project',
|
|
50
|
+
account: credentials.accountId,
|
|
51
|
+
region
|
|
52
|
+
}, syncOptions.writeOnly);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
async function collectProjectRecord(codeBuildClient, project) {
|
|
56
|
+
const projectArn = project.arn;
|
|
57
|
+
const policy = await (0, client_tools_js_1.withDnsRetry)(() => (0, client_tools_js_1.runAndCatchAccessDeniedWithLog)(projectArn, 'codebuild', 'projects', 'policy', () => (0, client_tools_js_1.runAndCatchError)('ResourceNotFoundException', async () => {
|
|
58
|
+
const response = await codeBuildClient.send(new client_codebuild_1.GetResourcePolicyCommand({ resourceArn: projectArn }));
|
|
59
|
+
return (0, json_js_1.parseIfPresent)(response.policy);
|
|
60
|
+
})));
|
|
61
|
+
return {
|
|
62
|
+
arn: projectArn,
|
|
63
|
+
metadata: {
|
|
64
|
+
arn: projectArn,
|
|
65
|
+
name: project.name,
|
|
66
|
+
description: project.description,
|
|
67
|
+
serviceRole: project.serviceRole,
|
|
68
|
+
resourceAccessRole: project.resourceAccessRole,
|
|
69
|
+
encryptionKey: project.encryptionKey,
|
|
70
|
+
projectVisibility: project.projectVisibility,
|
|
71
|
+
publicProjectAlias: project.publicProjectAlias
|
|
72
|
+
},
|
|
73
|
+
tags: (0, tags_js_1.convertTagsToRecord)(project.tags),
|
|
74
|
+
policy
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../../src/syncs/codebuild/projects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.d.ts","sourceRoot":"","sources":["../../../../src/syncs/iot/policies.ts"],"names":[],"mappings":"AAeA;;GAEG;AACH,eAAO,MAAM,eAAe,2BA0C3B,CAAA"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IotPoliciesSync = void 0;
|
|
4
|
+
const client_iot_1 = require("@aws-sdk/client-iot");
|
|
5
|
+
const client_tools_js_1 = require("../../utils/client-tools.js");
|
|
6
|
+
const json_js_1 = require("../../utils/json.js");
|
|
7
|
+
const typedSync_js_1 = require("../typedSync.js");
|
|
8
|
+
const paginationConfig = {
|
|
9
|
+
inputKey: 'marker',
|
|
10
|
+
outputKey: 'nextMarker'
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Sync AWS IoT policies, their default policy documents, and attached targets.
|
|
14
|
+
*/
|
|
15
|
+
exports.IotPoliciesSync = (0, typedSync_js_1.createTypedSyncOperation)('iot', 'policies', (0, typedSync_js_1.createResourceSyncType)({
|
|
16
|
+
client: client_iot_1.IoTClient,
|
|
17
|
+
command: client_iot_1.ListPoliciesCommand,
|
|
18
|
+
key: 'policies',
|
|
19
|
+
paginationConfig,
|
|
20
|
+
arn: (policy) => policy.policyArn,
|
|
21
|
+
extraFields: {
|
|
22
|
+
details: async (client, policy) => {
|
|
23
|
+
return (0, client_tools_js_1.runAndCatch404)(() => client.send(new client_iot_1.GetPolicyCommand({ policyName: policy.policyName })));
|
|
24
|
+
},
|
|
25
|
+
targets: async (client, policy) => {
|
|
26
|
+
return (0, client_tools_js_1.runAndCatch404)(() => (0, typedSync_js_1.paginateResource)(client, client_iot_1.ListTargetsForPolicyCommand, 'targets', paginationConfig, {
|
|
27
|
+
policyName: policy.policyName
|
|
28
|
+
}));
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
tags: () => undefined,
|
|
32
|
+
resourceTypeParts: (accountId, region) => ({
|
|
33
|
+
service: 'iot',
|
|
34
|
+
resourceType: 'policy',
|
|
35
|
+
account: accountId,
|
|
36
|
+
region
|
|
37
|
+
}),
|
|
38
|
+
results: (policy) => ({
|
|
39
|
+
metadata: {
|
|
40
|
+
name: policy.extraFields.details?.policyName ?? policy.policyName,
|
|
41
|
+
defaultVersionId: policy.extraFields.details?.defaultVersionId,
|
|
42
|
+
generationId: policy.extraFields.details?.generationId,
|
|
43
|
+
creationDate: policy.extraFields.details?.creationDate,
|
|
44
|
+
lastModifiedDate: policy.extraFields.details?.lastModifiedDate
|
|
45
|
+
},
|
|
46
|
+
'current-policy': (0, json_js_1.parseIfPresent)(policy.extraFields.details?.policyDocument),
|
|
47
|
+
targets: policy.extraFields.targets
|
|
48
|
+
})
|
|
49
|
+
}));
|
|
50
|
+
//# sourceMappingURL=policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies.js","sourceRoot":"","sources":["../../../../src/syncs/iot/policies.ts"],"names":[],"mappings":";;;AAAA,oDAK4B;AAC5B,iEAA4D;AAC5D,iDAAoD;AACpD,kDAAoG;AAEpG,MAAM,gBAAgB,GAAG;IACvB,QAAQ,EAAE,QAAQ;IAClB,SAAS,EAAE,YAAY;CACf,CAAA;AAEV;;GAEG;AACU,QAAA,eAAe,GAAG,IAAA,uCAAwB,EACrD,KAAK,EACL,UAAU,EACV,IAAA,qCAAsB,EAAC;IACrB,MAAM,EAAE,sBAAS;IACjB,OAAO,EAAE,gCAAmB;IAC5B,GAAG,EAAE,UAAU;IACf,gBAAgB;IAChB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU;IAClC,WAAW,EAAE;QACX,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChC,OAAO,IAAA,gCAAc,EAAC,GAAG,EAAE,CACzB,MAAM,CAAC,IAAI,CAAC,IAAI,6BAAgB,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAW,EAAE,CAAC,CAAC,CACtE,CAAA;QACH,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;YAChC,OAAO,IAAA,gCAAc,EAAC,GAAG,EAAE,CACzB,IAAA,+BAAgB,EAAC,MAAM,EAAE,wCAA2B,EAAE,SAAS,EAAE,gBAAgB,EAAE;gBACjF,UAAU,EAAE,MAAM,CAAC,UAAW;aAC/B,CAAC,CACH,CAAA;QACH,CAAC;KACF;IACD,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACzC,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,QAAQ;QACtB,OAAO,EAAE,SAAS;QAClB,MAAM;KACP,CAAC;IACF,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpB,QAAQ,EAAE;YACR,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU;YACjE,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB;YAC9D,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY;YACtD,YAAY,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY;YACtD,gBAAgB,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,gBAAgB;SAC/D;QACD,gBAAgB,EAAE,IAAA,wBAAc,EAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC;QAC5E,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO;KACpC,CAAC;CACH,CAAC,CACH,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identities.d.ts","sourceRoot":"","sources":["../../../../src/syncs/ses/identities.ts"],"names":[],"mappings":"AAWA,OAAO,EAAmB,KAAK,IAAI,EAAY,MAAM,YAAY,CAAA;AAKjE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,IA2C/B,CAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SesIdentitiesSync = void 0;
|
|
4
|
+
const client_ses_1 = require("@aws-sdk/client-ses");
|
|
5
|
+
const log_1 = require("@actsecurity/log");
|
|
6
|
+
const client_tools_js_1 = require("../../utils/client-tools.js");
|
|
7
|
+
const json_js_1 = require("../../utils/json.js");
|
|
8
|
+
const sync_js_1 = require("../sync.js");
|
|
9
|
+
const typedSync_js_1 = require("../typedSync.js");
|
|
10
|
+
const VERIFICATION_BATCH_SIZE = 100;
|
|
11
|
+
/**
|
|
12
|
+
* Sync verified SES identities and their named sending authorization policies.
|
|
13
|
+
*/
|
|
14
|
+
exports.SesIdentitiesSync = {
|
|
15
|
+
awsService: 'ses',
|
|
16
|
+
name: 'identities',
|
|
17
|
+
execute: async (accountId, region, credentials, storage, endpoint, syncOptions) => {
|
|
18
|
+
const sesClient = syncOptions.clientPool.client(client_ses_1.SESClient, credentials, region, endpoint);
|
|
19
|
+
const identities = await (0, client_tools_js_1.withDnsRetry)(() => (0, typedSync_js_1.paginateResource)(sesClient, client_ses_1.ListIdentitiesCommand, 'Identities', {
|
|
20
|
+
inputKey: 'NextToken',
|
|
21
|
+
outputKey: 'NextToken'
|
|
22
|
+
}));
|
|
23
|
+
const verifiedIdentities = await getVerifiedIdentities(sesClient, identities);
|
|
24
|
+
const jobs = verifiedIdentities.map((identity) => ({
|
|
25
|
+
properties: { identity },
|
|
26
|
+
execute: async () => collectIdentity(sesClient, identity, accountId, region, credentials.partition)
|
|
27
|
+
}));
|
|
28
|
+
const results = await Promise.all(syncOptions.workerPool.enqueueAll(jobs));
|
|
29
|
+
const records = [];
|
|
30
|
+
for (const result of results) {
|
|
31
|
+
if (result.status === 'rejected') {
|
|
32
|
+
const identity = result.properties.identity;
|
|
33
|
+
log_1.log.error('Failed to collect SES identity policies', result.reason, { identity, region });
|
|
34
|
+
throw new Error(`Failed to collect policies for SES identity ${identity}`);
|
|
35
|
+
}
|
|
36
|
+
records.push(result.value);
|
|
37
|
+
}
|
|
38
|
+
await (0, sync_js_1.syncData)(records, storage, accountId, {
|
|
39
|
+
service: 'ses',
|
|
40
|
+
resourceType: 'identity',
|
|
41
|
+
account: accountId,
|
|
42
|
+
region
|
|
43
|
+
}, syncOptions.writeOnly);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
async function getVerifiedIdentities(sesClient, identities) {
|
|
47
|
+
const verifiedIdentities = [];
|
|
48
|
+
for (let index = 0; index < identities.length; index += VERIFICATION_BATCH_SIZE) {
|
|
49
|
+
const batch = identities.slice(index, index + VERIFICATION_BATCH_SIZE);
|
|
50
|
+
const response = await (0, client_tools_js_1.withDnsRetry)(() => sesClient.send(new client_ses_1.GetIdentityVerificationAttributesCommand({ Identities: batch })));
|
|
51
|
+
for (const identity of batch) {
|
|
52
|
+
if (response.VerificationAttributes?.[identity]?.VerificationStatus === 'Success') {
|
|
53
|
+
verifiedIdentities.push(identity);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return verifiedIdentities;
|
|
58
|
+
}
|
|
59
|
+
async function collectIdentity(sesClient, identity, accountId, region, partition) {
|
|
60
|
+
const arn = identityArn(partition, region, accountId, identity);
|
|
61
|
+
const policies = await (0, client_tools_js_1.runAndCatchAccessDeniedWithLog)(arn, 'ses', 'identity', 'policies', async () => {
|
|
62
|
+
const listResponse = await (0, client_tools_js_1.withDnsRetry)(() => sesClient.send(new client_ses_1.ListIdentityPoliciesCommand({ Identity: identity })));
|
|
63
|
+
const policyNames = listResponse.PolicyNames || [];
|
|
64
|
+
if (policyNames.length === 0) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const response = await (0, client_tools_js_1.withDnsRetry)(() => sesClient.send(new client_ses_1.GetIdentityPoliciesCommand({ Identity: identity, PolicyNames: policyNames })));
|
|
68
|
+
return Object.fromEntries(Object.entries(response.Policies || {}).map(([name, document]) => [
|
|
69
|
+
name,
|
|
70
|
+
(0, json_js_1.parseIfPresent)(document)
|
|
71
|
+
]));
|
|
72
|
+
});
|
|
73
|
+
return {
|
|
74
|
+
arn,
|
|
75
|
+
metadata: {
|
|
76
|
+
arn,
|
|
77
|
+
name: identity,
|
|
78
|
+
identityType: identity.includes('@') ? 'EmailAddress' : 'Domain'
|
|
79
|
+
},
|
|
80
|
+
policies
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function identityArn(partition, region, accountId, identity) {
|
|
84
|
+
return `arn:${partition}:ses:${region}:${accountId}:identity/${identity}`;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=identities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identities.js","sourceRoot":"","sources":["../../../../src/syncs/ses/identities.ts"],"names":[],"mappings":";;;AAAA,oDAM4B;AAE5B,0CAAsC;AACtC,iEAA0F;AAC1F,iDAAoD;AACpD,wCAAiE;AACjE,kDAAkD;AAElD,MAAM,uBAAuB,GAAG,GAAG,CAAA;AAEnC;;GAEG;AACU,QAAA,iBAAiB,GAAS;IACrC,UAAU,EAAE,KAAK;IACjB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE;QAChF,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAS,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QACzF,MAAM,UAAU,GAAG,MAAM,IAAA,8BAAY,EAAC,GAAG,EAAE,CACzC,IAAA,+BAAgB,EAAC,SAAS,EAAE,kCAAqB,EAAE,YAAY,EAAE;YAC/D,QAAQ,EAAE,WAAW;YACrB,SAAS,EAAE,WAAW;SACvB,CAAC,CACH,CAAA;QACD,MAAM,kBAAkB,GAAG,MAAM,qBAAqB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAE7E,MAAM,IAAI,GAA4C,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC1F,UAAU,EAAE,EAAE,QAAQ,EAAE;YACxB,OAAO,EAAE,KAAK,IAAI,EAAE,CAClB,eAAe,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,SAAS,CAAC;SACjF,CAAC,CAAC,CAAA;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;QAC1E,MAAM,OAAO,GAAiB,EAAE,CAAA;QAEhC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBACjC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAkB,CAAA;gBACrD,SAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;gBACzF,MAAM,IAAI,KAAK,CAAC,+CAA+C,QAAQ,EAAE,CAAC,CAAA;YAC5E,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAC5B,CAAC;QAED,MAAM,IAAA,kBAAQ,EACZ,OAAO,EACP,OAAO,EACP,SAAS,EACT;YACE,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,SAAS;YAClB,MAAM;SACP,EACD,WAAW,CAAC,SAAS,CACtB,CAAA;IACH,CAAC;CACF,CAAA;AAED,KAAK,UAAU,qBAAqB,CAClC,SAAoB,EACpB,UAAoB;IAEpB,MAAM,kBAAkB,GAAa,EAAE,CAAA;IAEvC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAChF,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,uBAAuB,CAAC,CAAA;QACtE,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAY,EAAC,GAAG,EAAE,CACvC,SAAS,CAAC,IAAI,CAAC,IAAI,qDAAwC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CACpF,CAAA;QAED,KAAK,MAAM,QAAQ,IAAI,KAAK,EAAE,CAAC;YAC7B,IAAI,QAAQ,CAAC,sBAAsB,EAAE,CAAC,QAAQ,CAAC,EAAE,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBAClF,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,kBAAkB,CAAA;AAC3B,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,SAAoB,EACpB,QAAgB,EAChB,SAAiB,EACjB,MAAc,EACd,SAAiB;IAEjB,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAA;IAC/D,MAAM,QAAQ,GAAG,MAAM,IAAA,gDAA8B,EACnD,GAAG,EACH,KAAK,EACL,UAAU,EACV,UAAU,EACV,KAAK,IAAI,EAAE;QACT,MAAM,YAAY,GAAG,MAAM,IAAA,8BAAY,EAAC,GAAG,EAAE,CAC3C,SAAS,CAAC,IAAI,CAAC,IAAI,wCAA2B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CACxE,CAAA;QACD,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,IAAI,EAAE,CAAA;QAClD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAA,8BAAY,EAAC,GAAG,EAAE,CACvC,SAAS,CAAC,IAAI,CACZ,IAAI,uCAA0B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CACjF,CACF,CAAA;QACD,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChE,IAAI;YACJ,IAAA,wBAAc,EAAC,QAAQ,CAAC;SACzB,CAAC,CACH,CAAA;IACH,CAAC,CACF,CAAA;IAED,OAAO;QACL,GAAG;QACH,QAAQ,EAAE;YACR,GAAG;YACH,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,QAAQ;SACjE;QACD,QAAQ;KACT,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAClB,SAAiB,EACjB,MAAc,EACd,SAAiB,EACjB,QAAgB;IAEhB,OAAO,OAAO,SAAS,QAAQ,MAAM,IAAI,SAAS,aAAa,QAAQ,EAAE,CAAA;AAC3E,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Sync } from '../sync.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an instance-scoped sync for the Identity Store directory associated with an
|
|
4
|
+
* IAM Identity Center instance.
|
|
5
|
+
*/
|
|
6
|
+
export declare function createIdentityStoreDirectorySync(identityStoreId: string, instanceArn: string): Sync;
|
|
7
|
+
//# sourceMappingURL=identityStoreDirectory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identityStoreDirectory.d.ts","sourceRoot":"","sources":["../../../../src/syncs/sso/identityStoreDirectory.ts"],"names":[],"mappings":"AAYA,OAAO,EAAmB,KAAK,IAAI,EAA8B,MAAM,YAAY,CAAA;AAUnF;;;GAGG;AACH,wBAAgB,gCAAgC,CAC9C,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,MAAM,GAClB,IAAI,CA4KN"}
|