@cloud-copilot/iam-simulate 0.1.4 → 0.1.6
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/ConditionKeys.d.ts +19 -0
- package/dist/cjs/ConditionKeys.d.ts.map +1 -0
- package/dist/cjs/ConditionKeys.js +27 -0
- package/dist/cjs/ConditionKeys.js.map +1 -0
- package/dist/cjs/SCPAnalysis.d.ts +6 -0
- package/dist/cjs/SCPAnalysis.d.ts.map +1 -0
- package/dist/cjs/SCPAnalysis.js +3 -0
- package/dist/cjs/SCPAnalysis.js.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts +19 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.js +57 -0
- package/dist/cjs/context_keys/findContextKeys.js.map +1 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts +39 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/cjs/core_engine/coreSimulatorEngine.js +56 -0
- package/dist/cjs/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/cjs/evaluate.d.ts +1 -0
- package/dist/cjs/evaluate.d.ts.map +1 -1
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts +17 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js +296 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +7 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/principal/principal.d.ts +9 -1
- package/dist/cjs/principal/principal.d.ts.map +1 -1
- package/dist/cjs/principal/principal.js +17 -0
- package/dist/cjs/principal/principal.js.map +1 -1
- package/dist/cjs/request/requestPrincipal.d.ts.map +1 -1
- package/dist/cjs/request/requestPrincipal.js.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +30 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/services/DefaultServiceAuthorizer.js +93 -7
- package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/cjs/services/ServiceAuthorizer.d.ts +3 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/contextKeys.d.ts +9 -1
- package/dist/cjs/simulation_engine/contextKeys.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/contextKeys.js +27 -40
- package/dist/cjs/simulation_engine/contextKeys.js.map +1 -1
- package/dist/cjs/simulation_engine/simulation.d.ts +12 -1
- package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.d.ts +15 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/simulationEngine.js +133 -12
- package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +13 -4
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/cjs/util.d.ts +69 -0
- package/dist/cjs/util.d.ts.map +1 -1
- package/dist/cjs/util.js +166 -0
- package/dist/cjs/util.js.map +1 -1
- package/dist/esm/ConditionKeys.d.ts +19 -0
- package/dist/esm/ConditionKeys.d.ts.map +1 -0
- package/dist/esm/ConditionKeys.js +23 -0
- package/dist/esm/ConditionKeys.js.map +1 -0
- package/dist/esm/SCPAnalysis.d.ts +6 -0
- package/dist/esm/SCPAnalysis.d.ts.map +1 -0
- package/dist/esm/SCPAnalysis.js +2 -0
- package/dist/esm/SCPAnalysis.js.map +1 -0
- package/dist/esm/context_keys/findContextKeys.d.ts +19 -0
- package/dist/esm/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/findContextKeys.js +53 -0
- package/dist/esm/context_keys/findContextKeys.js.map +1 -0
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts +39 -0
- package/dist/esm/core_engine/coreSimulatorEngine.d.ts.map +1 -1
- package/dist/esm/core_engine/coreSimulatorEngine.js +54 -0
- package/dist/esm/core_engine/coreSimulatorEngine.js.map +1 -1
- package/dist/esm/evaluate.d.ts +1 -0
- package/dist/esm/evaluate.d.ts.map +1 -1
- package/dist/esm/global_conditions/globalConditionKeys.d.ts +17 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.js +290 -0
- package/dist/esm/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/principal/principal.d.ts +9 -1
- package/dist/esm/principal/principal.d.ts.map +1 -1
- package/dist/esm/principal/principal.js +16 -0
- package/dist/esm/principal/principal.js.map +1 -1
- package/dist/esm/request/requestPrincipal.d.ts.map +1 -1
- package/dist/esm/request/requestPrincipal.js.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts +30 -1
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/services/DefaultServiceAuthorizer.js +93 -7
- package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -1
- package/dist/esm/services/ServiceAuthorizer.d.ts +3 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -1
- package/dist/esm/simulation_engine/contextKeys.d.ts +9 -1
- package/dist/esm/simulation_engine/contextKeys.d.ts.map +1 -1
- package/dist/esm/simulation_engine/contextKeys.js +28 -40
- package/dist/esm/simulation_engine/contextKeys.js.map +1 -1
- package/dist/esm/simulation_engine/simulation.d.ts +12 -1
- package/dist/esm/simulation_engine/simulation.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.d.ts +15 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/simulationEngine.js +133 -13
- package/dist/esm/simulation_engine/simulationEngine.js.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -1
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js +13 -4
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -1
- package/dist/esm/util.d.ts +69 -0
- package/dist/esm/util.d.ts.map +1 -1
- package/dist/esm/util.js +158 -0
- package/dist/esm/util.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,38 +1,159 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runSimulation = runSimulation;
|
|
4
|
+
exports.normalizeSimulationParameters = normalizeSimulationParameters;
|
|
4
5
|
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
5
6
|
const iam_policy_1 = require("@cloud-copilot/iam-policy");
|
|
7
|
+
const ConditionKeys_js_1 = require("../ConditionKeys.js");
|
|
8
|
+
const coreSimulatorEngine_js_1 = require("../core_engine/coreSimulatorEngine.js");
|
|
9
|
+
const request_js_1 = require("../request/request.js");
|
|
10
|
+
const requestContext_js_1 = require("../requestContext.js");
|
|
11
|
+
const util_js_1 = require("../util.js");
|
|
12
|
+
const contextKeys_js_1 = require("./contextKeys.js");
|
|
13
|
+
/**
|
|
14
|
+
* Run a simulation with validation
|
|
15
|
+
*
|
|
16
|
+
* @param simulation The simulation to run
|
|
17
|
+
* @param simulationOptions Options for the simulation
|
|
18
|
+
* @returns
|
|
19
|
+
*/
|
|
6
20
|
async function runSimulation(simulation, simulationOptions) {
|
|
7
|
-
const identityPolicyErrors =
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
21
|
+
const identityPolicyErrors = {};
|
|
22
|
+
const identityPolicies = [];
|
|
23
|
+
simulation.identityPolicies.forEach((value) => {
|
|
24
|
+
const { name, policy } = value;
|
|
25
|
+
const validationErrors = (0, iam_policy_1.validateIdentityPolicy)(policy);
|
|
26
|
+
if (validationErrors.length == 0) {
|
|
27
|
+
identityPolicies.push((0, iam_policy_1.loadPolicy)(policy));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
identityPolicyErrors[name] = validationErrors;
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
const seviceControlPolicyErrors = {};
|
|
34
|
+
const serviceControlPolicies = simulation.serviceControlPolicies.map((scp) => {
|
|
35
|
+
const ouId = scp.orgIdentifier;
|
|
36
|
+
const validPolicies = [];
|
|
37
|
+
scp.policies.forEach((value) => {
|
|
38
|
+
const { name, policy } = value;
|
|
39
|
+
const validationErrors = (0, iam_policy_1.validateServiceControlPolicy)(policy);
|
|
40
|
+
if (validationErrors.length > 0) {
|
|
41
|
+
seviceControlPolicyErrors[name] = validationErrors;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
validPolicies.push((0, iam_policy_1.loadPolicy)(policy));
|
|
45
|
+
}
|
|
46
|
+
});
|
|
13
47
|
return {
|
|
14
|
-
|
|
48
|
+
orgIdentifier: ouId,
|
|
49
|
+
policies: validPolicies
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
const resourcePolicyErrors = simulation.resourcePolicy ? (0, iam_policy_1.validateResourcePolicy)(simulation.resourcePolicy) : [];
|
|
53
|
+
if (Object.keys(identityPolicyErrors).length > 0 ||
|
|
54
|
+
Object.keys(seviceControlPolicyErrors).length > 0 ||
|
|
55
|
+
resourcePolicyErrors.length > 0) {
|
|
56
|
+
return {
|
|
57
|
+
errors: {
|
|
58
|
+
identityPolicyErrors,
|
|
59
|
+
seviceControlPolicyErrors,
|
|
60
|
+
resourcePolicyErrors,
|
|
61
|
+
message: 'policy.errors'
|
|
62
|
+
}
|
|
15
63
|
};
|
|
16
64
|
}
|
|
65
|
+
const resourcePolicy = simulation.resourcePolicy ? (0, iam_policy_1.loadPolicy)(simulation.resourcePolicy) : undefined;
|
|
17
66
|
if (simulation.request.action.split(":").length != 2) {
|
|
18
67
|
return {
|
|
19
|
-
|
|
68
|
+
errors: {
|
|
69
|
+
message: 'invalid.action'
|
|
70
|
+
}
|
|
20
71
|
};
|
|
21
72
|
}
|
|
22
73
|
const [service, action] = simulation.request.action.split(":");
|
|
23
74
|
const validService = await (0, iam_data_1.iamServiceExists)(service);
|
|
24
75
|
if (!validService) {
|
|
25
76
|
return {
|
|
26
|
-
|
|
77
|
+
errors: {
|
|
78
|
+
message: 'invalid.service'
|
|
79
|
+
}
|
|
27
80
|
};
|
|
28
81
|
}
|
|
29
82
|
const validAction = await (0, iam_data_1.iamActionExists)(service, action);
|
|
30
83
|
if (!validAction) {
|
|
31
84
|
return {
|
|
32
|
-
|
|
85
|
+
errors: {
|
|
86
|
+
message: 'invalid.action'
|
|
87
|
+
}
|
|
33
88
|
};
|
|
34
89
|
}
|
|
35
|
-
|
|
36
|
-
|
|
90
|
+
const resourceArn = simulation.request.resource.resource;
|
|
91
|
+
const isWildCardOnlyAction = await (0, util_js_1.isWildcardOnlyAction)(service, action);
|
|
92
|
+
if (isWildCardOnlyAction) {
|
|
93
|
+
if (resourceArn !== "*") {
|
|
94
|
+
return {
|
|
95
|
+
errors: {
|
|
96
|
+
message: 'must.use.wildcard'
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
const resourceTypes = await (0, util_js_1.getResourceTypesForAction)(service, action, resourceArn);
|
|
103
|
+
if (resourceTypes.length === 0) {
|
|
104
|
+
return {
|
|
105
|
+
errors: {
|
|
106
|
+
message: 'no.resource.types'
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
else if (resourceTypes.length > 1) {
|
|
111
|
+
return {
|
|
112
|
+
errors: {
|
|
113
|
+
message: 'multiple.resource.types'
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const contextValues = await normalizeSimulationParameters(simulation);
|
|
119
|
+
const simulationResult = (0, coreSimulatorEngine_js_1.authorize)({
|
|
120
|
+
request: new request_js_1.AwsRequestImpl(simulation.request.principal, {
|
|
121
|
+
resource: simulation.request.resource.resource,
|
|
122
|
+
accountId: simulation.request.resource.accountId
|
|
123
|
+
}, simulation.request.action, new requestContext_js_1.RequestContextImpl(contextValues)),
|
|
124
|
+
identityPolicies,
|
|
125
|
+
serviceControlPolicies,
|
|
126
|
+
resourcePolicy
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
result: {
|
|
130
|
+
evaluationResult: simulationResult
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
async function normalizeSimulationParameters(simulation) {
|
|
135
|
+
const [service, action] = simulation.request.action.split(":");
|
|
136
|
+
const resourceArn = simulation.request.resource.resource;
|
|
137
|
+
const contextVariablesForAction = new Set(await (0, contextKeys_js_1.allowedContextKeysForRequest)(service, action, resourceArn));
|
|
138
|
+
//Get the types of the context variables and set a string or array of strings based on that.
|
|
139
|
+
const allowedContextKeys = {};
|
|
140
|
+
for (const key of Object.keys(simulation.request.contextVariables)) {
|
|
141
|
+
const value = simulation.request.contextVariables[key];
|
|
142
|
+
const lowerCaseKey = key.toLowerCase();
|
|
143
|
+
if (contextVariablesForAction.has(lowerCaseKey)) {
|
|
144
|
+
const conditionType = await (0, util_js_1.typeForContextKey)(lowerCaseKey);
|
|
145
|
+
const normalizedKey = await (0, util_js_1.normalizeContextKeyCase)(lowerCaseKey);
|
|
146
|
+
if ((0, ConditionKeys_js_1.isConditionKeyArray)(conditionType)) {
|
|
147
|
+
allowedContextKeys[normalizedKey] = [value].flat();
|
|
148
|
+
}
|
|
149
|
+
else if (Array.isArray(value)) {
|
|
150
|
+
allowedContextKeys[normalizedKey] = value[0];
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
allowedContextKeys[normalizedKey] = value;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return allowedContextKeys;
|
|
37
158
|
}
|
|
38
159
|
//# sourceMappingURL=simulationEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"simulationEngine.js","sourceRoot":"","sources":["../../../src/simulation_engine/simulationEngine.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"simulationEngine.js","sourceRoot":"","sources":["../../../src/simulation_engine/simulationEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { type EvaluationResult } from "../evaluate.js";
|
|
|
2
2
|
import { Simulation } from "./simulation.js";
|
|
3
3
|
import { SimulationOptions } from "./simulationOptions.js";
|
|
4
4
|
/**
|
|
5
|
-
* Runs a simulation without input validation or context
|
|
5
|
+
* Runs a simulation without input validation or context variable verification.
|
|
6
6
|
* Use this if you know what you're doing.
|
|
7
7
|
*
|
|
8
8
|
* @param simulation The simulation to run.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsafeSimulationEngine.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/unsafeSimulationEngine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"unsafeSimulationEngine.d.ts","sourceRoot":"","sources":["../../../src/simulation_engine/unsafeSimulationEngine.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,gBAAgB,CAuB3H"}
|
|
@@ -6,7 +6,7 @@ const coreSimulatorEngine_js_1 = require("../core_engine/coreSimulatorEngine.js"
|
|
|
6
6
|
const request_js_1 = require("../request/request.js");
|
|
7
7
|
const requestContext_js_1 = require("../requestContext.js");
|
|
8
8
|
/**
|
|
9
|
-
* Runs a simulation without input validation or context
|
|
9
|
+
* Runs a simulation without input validation or context variable verification.
|
|
10
10
|
* Use this if you know what you're doing.
|
|
11
11
|
*
|
|
12
12
|
* @param simulation The simulation to run.
|
|
@@ -14,8 +14,15 @@ const requestContext_js_1 = require("../requestContext.js");
|
|
|
14
14
|
* @returns The result of the simulation.
|
|
15
15
|
*/
|
|
16
16
|
function runUnsafeSimulation(simulation, simulationOptions) {
|
|
17
|
-
|
|
18
|
-
const
|
|
17
|
+
const identityPolicies = Object.values(simulation.identityPolicies).map(p => (0, iam_policy_1.loadPolicy)(p.policy));
|
|
18
|
+
const serviceControlPolicies = simulation.serviceControlPolicies.map((scp) => {
|
|
19
|
+
const ouId = scp.orgIdentifier;
|
|
20
|
+
const policies = scp.policies.map(val => (0, iam_policy_1.loadPolicy)(val.policy));
|
|
21
|
+
return {
|
|
22
|
+
orgIdentifier: ouId,
|
|
23
|
+
policies: policies
|
|
24
|
+
};
|
|
25
|
+
});
|
|
19
26
|
const requestContext = new requestContext_js_1.RequestContextImpl(simulation.request.contextVariables);
|
|
20
27
|
const request = new request_js_1.AwsRequestImpl(simulation.request.principal, {
|
|
21
28
|
resource: simulation.request.resource.resource,
|
|
@@ -23,7 +30,9 @@ function runUnsafeSimulation(simulation, simulationOptions) {
|
|
|
23
30
|
}, simulation.request.action, requestContext);
|
|
24
31
|
return (0, coreSimulatorEngine_js_1.authorize)({
|
|
25
32
|
request,
|
|
26
|
-
identityPolicies
|
|
33
|
+
identityPolicies,
|
|
34
|
+
serviceControlPolicies,
|
|
35
|
+
resourcePolicy: simulation.resourcePolicy ? (0, iam_policy_1.loadPolicy)(simulation.resourcePolicy) : undefined
|
|
27
36
|
});
|
|
28
37
|
}
|
|
29
38
|
//# sourceMappingURL=unsafeSimulationEngine.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unsafeSimulationEngine.js","sourceRoot":"","sources":["../../../src/simulation_engine/unsafeSimulationEngine.ts"],"names":[],"mappings":";;AAgBA,
|
|
1
|
+
{"version":3,"file":"unsafeSimulationEngine.js","sourceRoot":"","sources":["../../../src/simulation_engine/unsafeSimulationEngine.ts"],"names":[],"mappings":";;AAgBA,kDAuBC;AAvCD,0DAAuD;AACvD,kFAA0F;AAE1F,sDAAuD;AACvD,4DAA0D;AAI1D;;;;;;;GAOG;AACH,SAAgB,mBAAmB,CAAC,UAAsB,EAAE,iBAA6C;IACvG,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,uBAAU,EAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACnG,MAAM,sBAAsB,GAA6B,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACrG,MAAM,IAAI,GAAG,GAAG,CAAC,aAAa,CAAC;QAC/B,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAA,uBAAU,EAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAEjE,OAAO;YACL,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,QAAQ;SACnB,CAAA;IACH,CAAC,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,IAAI,sCAAkB,CAAC,UAAU,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAClF,MAAM,OAAO,GAAG,IAAI,2BAAc,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE;QAC/D,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ;QAC9C,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS;KACjD,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE9C,OAAO,IAAA,kCAAS,EAAC;QACf,OAAO;QACP,gBAAgB;QAChB,sBAAsB;QACtB,cAAc,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAA,uBAAU,EAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS;KAC9F,CAAC,CAAC;AACL,CAAC"}
|
package/dist/cjs/util.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ResourceType } from '@cloud-copilot/iam-data';
|
|
2
|
+
import { ConditionKeyType } from './ConditionKeys.js';
|
|
1
3
|
import { AwsRequest } from './request/request.js';
|
|
2
4
|
interface StringReplaceOptions {
|
|
3
5
|
replaceWildcards: boolean;
|
|
@@ -20,6 +22,12 @@ export interface ArnParts {
|
|
|
20
22
|
resourceType: string | undefined;
|
|
21
23
|
resourcePath: string | undefined;
|
|
22
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Split an ARN into its parts
|
|
27
|
+
*
|
|
28
|
+
* @param arn the arn to split
|
|
29
|
+
* @returns the parts of the ARN
|
|
30
|
+
*/
|
|
23
31
|
export declare function splitArnParts(arn: string): ArnParts;
|
|
24
32
|
/**
|
|
25
33
|
* Splits a resource into two segments. The first segment is the product segment and the second segment is the resource id segment.
|
|
@@ -43,5 +51,66 @@ export declare function isDefined<T>(value: T | undefined): value is T;
|
|
|
43
51
|
* @returns if the value is not defined or null
|
|
44
52
|
*/
|
|
45
53
|
export declare function isNotDefined<T>(value: T | undefined): value is undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Checks if an action is a wildcard only action
|
|
56
|
+
*
|
|
57
|
+
* @param service the service the action belongs to
|
|
58
|
+
* @param action the action to check if it is a wildcard only action
|
|
59
|
+
* @returns if the action is a wildcard only action
|
|
60
|
+
* @throws an error if the service or action does not exist
|
|
61
|
+
*/
|
|
62
|
+
export declare function isWildcardOnlyAction(service: string, action: string): Promise<boolean>;
|
|
63
|
+
/**
|
|
64
|
+
* Get the the possible reource types for an action and resource
|
|
65
|
+
*
|
|
66
|
+
* @param service the service the action belongs to
|
|
67
|
+
* @param action the action to get the resource type for
|
|
68
|
+
* @param resource the resource type matching the action, if any
|
|
69
|
+
* @throws an error if the service or action does not exist, or if the action is a wildcard only action
|
|
70
|
+
*/
|
|
71
|
+
export declare function getResourceTypesForAction(service: string, action: string, resource: string): Promise<ResourceType[]>;
|
|
72
|
+
/**
|
|
73
|
+
* Convert a resource pattern from iam-data to a regex pattern
|
|
74
|
+
*
|
|
75
|
+
* @param pattern the pattern to convert to a regex
|
|
76
|
+
* @returns the regex pattern
|
|
77
|
+
*/
|
|
78
|
+
export declare function convertResourcePatternToRegex(pattern: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Lowercase all strings in an array
|
|
81
|
+
*
|
|
82
|
+
* @param strings the strings to lowercase
|
|
83
|
+
* @returns the lowercased strings
|
|
84
|
+
*/
|
|
85
|
+
export declare function lowerCaseAll(strings: string[]): string[];
|
|
86
|
+
/**
|
|
87
|
+
* Check the capitalization of a context key and return the correct capitalization
|
|
88
|
+
*
|
|
89
|
+
* @param contextKey the condition key to check
|
|
90
|
+
* @returns if the condition key is an array type
|
|
91
|
+
*/
|
|
92
|
+
export declare function normalizeContextKeyCase(contextKey: string): Promise<string>;
|
|
93
|
+
/**
|
|
94
|
+
* Get the type of a context key
|
|
95
|
+
*
|
|
96
|
+
* @param contextKey - The string condition key to get the type for
|
|
97
|
+
* @returns The type of the condition key
|
|
98
|
+
* @throws an error if the condition key is not found
|
|
99
|
+
*/
|
|
100
|
+
export declare function typeForContextKey(contextKey: string): Promise<ConditionKeyType>;
|
|
101
|
+
/**
|
|
102
|
+
* Gets the IAM variables from a string
|
|
103
|
+
*
|
|
104
|
+
* @param value the string to get the variables from
|
|
105
|
+
* @returns the variables in the string, if any
|
|
106
|
+
*/
|
|
107
|
+
export declare function getVariablesFromString(value: string): string[];
|
|
108
|
+
/**
|
|
109
|
+
* Check if a context key actually exists
|
|
110
|
+
*
|
|
111
|
+
* @param key The context key to check
|
|
112
|
+
* @returns true if the context key is valid, false otherwise
|
|
113
|
+
*/
|
|
114
|
+
export declare function isActualContextKey(key: string): Promise<boolean>;
|
|
46
115
|
export {};
|
|
47
116
|
//# sourceMappingURL=util.d.ts.map
|
package/dist/cjs/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjD,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CA4DlI;
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6G,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACjK,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAIjD,UAAU,oBAAoB;IAC5B,gBAAgB,EAAE,OAAO,CAAA;CAC1B;AAMD;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,MAAM,CA4DlI;AA8CD,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAA;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAyBnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBtE;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,CAAC,CAE7D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,GAAG,KAAK,IAAI,SAAS,CAExE;AAED;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG5F;AAED;;;;;;;GAOG;AACH,wBAAsB,yBAAyB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAiB1H;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOrE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAExD;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBjF;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAarF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAY9D;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiBtE"}
|
package/dist/cjs/util.js
CHANGED
|
@@ -5,6 +5,16 @@ exports.splitArnParts = splitArnParts;
|
|
|
5
5
|
exports.getResourceSegments = getResourceSegments;
|
|
6
6
|
exports.isDefined = isDefined;
|
|
7
7
|
exports.isNotDefined = isNotDefined;
|
|
8
|
+
exports.isWildcardOnlyAction = isWildcardOnlyAction;
|
|
9
|
+
exports.getResourceTypesForAction = getResourceTypesForAction;
|
|
10
|
+
exports.convertResourcePatternToRegex = convertResourcePatternToRegex;
|
|
11
|
+
exports.lowerCaseAll = lowerCaseAll;
|
|
12
|
+
exports.normalizeContextKeyCase = normalizeContextKeyCase;
|
|
13
|
+
exports.typeForContextKey = typeForContextKey;
|
|
14
|
+
exports.getVariablesFromString = getVariablesFromString;
|
|
15
|
+
exports.isActualContextKey = isActualContextKey;
|
|
16
|
+
const iam_data_1 = require("@cloud-copilot/iam-data");
|
|
17
|
+
const globalConditionKeys_js_1 = require("./global_conditions/globalConditionKeys.js");
|
|
8
18
|
const matchesNothing = new RegExp('a^');
|
|
9
19
|
const defaultStringReplaceOptions = {
|
|
10
20
|
replaceWildcards: true
|
|
@@ -104,12 +114,26 @@ function getContextSingleValue(request, contextKeyName) {
|
|
|
104
114
|
}
|
|
105
115
|
return undefined;
|
|
106
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Get the replacement value for a string
|
|
119
|
+
*
|
|
120
|
+
* @param rawString the string to replace the value in
|
|
121
|
+
* @param wildcard the value to replace the wildcard with
|
|
122
|
+
* @param replaceWildcards if the wildcard or raw string should be used
|
|
123
|
+
* @returns
|
|
124
|
+
*/
|
|
107
125
|
function replacementValue(rawString, wildcard, replaceWildcards) {
|
|
108
126
|
if (replaceWildcards) {
|
|
109
127
|
return wildcard;
|
|
110
128
|
}
|
|
111
129
|
return rawString;
|
|
112
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Split an ARN into its parts
|
|
133
|
+
*
|
|
134
|
+
* @param arn the arn to split
|
|
135
|
+
* @returns the parts of the ARN
|
|
136
|
+
*/
|
|
113
137
|
function splitArnParts(arn) {
|
|
114
138
|
const parts = arn.split(':');
|
|
115
139
|
const partition = parts.at(1);
|
|
@@ -177,4 +201,146 @@ function isDefined(value) {
|
|
|
177
201
|
function isNotDefined(value) {
|
|
178
202
|
return !isDefined(value);
|
|
179
203
|
}
|
|
204
|
+
/**
|
|
205
|
+
* Checks if an action is a wildcard only action
|
|
206
|
+
*
|
|
207
|
+
* @param service the service the action belongs to
|
|
208
|
+
* @param action the action to check if it is a wildcard only action
|
|
209
|
+
* @returns if the action is a wildcard only action
|
|
210
|
+
* @throws an error if the service or action does not exist
|
|
211
|
+
*/
|
|
212
|
+
async function isWildcardOnlyAction(service, action) {
|
|
213
|
+
const actionDetails = await (0, iam_data_1.iamActionDetails)(service, action);
|
|
214
|
+
return actionDetails.resourceTypes.length === 0;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get the the possible reource types for an action and resource
|
|
218
|
+
*
|
|
219
|
+
* @param service the service the action belongs to
|
|
220
|
+
* @param action the action to get the resource type for
|
|
221
|
+
* @param resource the resource type matching the action, if any
|
|
222
|
+
* @throws an error if the service or action does not exist, or if the action is a wildcard only action
|
|
223
|
+
*/
|
|
224
|
+
async function getResourceTypesForAction(service, action, resource) {
|
|
225
|
+
const actionDetails = await (0, iam_data_1.iamActionDetails)(service, action);
|
|
226
|
+
if (actionDetails.resourceTypes.length === 0) {
|
|
227
|
+
throw new Error(`${service}:${action} does not have any resource types`);
|
|
228
|
+
}
|
|
229
|
+
const matchingResourceTypes = [];
|
|
230
|
+
for (const rt of actionDetails.resourceTypes) {
|
|
231
|
+
const resourceType = await (0, iam_data_1.iamResourceTypeDetails)(service, rt.name);
|
|
232
|
+
const pattern = convertResourcePatternToRegex(resourceType.arn);
|
|
233
|
+
const match = resource.match(new RegExp(pattern));
|
|
234
|
+
if (match) {
|
|
235
|
+
matchingResourceTypes.push(resourceType);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return matchingResourceTypes;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Convert a resource pattern from iam-data to a regex pattern
|
|
242
|
+
*
|
|
243
|
+
* @param pattern the pattern to convert to a regex
|
|
244
|
+
* @returns the regex pattern
|
|
245
|
+
*/
|
|
246
|
+
function convertResourcePatternToRegex(pattern) {
|
|
247
|
+
const regex = pattern.replace(/\$\{.*?\}/g, (match) => {
|
|
248
|
+
const name = match.substring(2, match.length - 1);
|
|
249
|
+
const camelName = name.at(0)?.toLowerCase() + name.substring(1);
|
|
250
|
+
return `(?<${camelName}>(.*?))`;
|
|
251
|
+
});
|
|
252
|
+
return `^${regex}$`;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Lowercase all strings in an array
|
|
256
|
+
*
|
|
257
|
+
* @param strings the strings to lowercase
|
|
258
|
+
* @returns the lowercased strings
|
|
259
|
+
*/
|
|
260
|
+
function lowerCaseAll(strings) {
|
|
261
|
+
return strings.map(s => s.toLowerCase());
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Check the capitalization of a context key and return the correct capitalization
|
|
265
|
+
*
|
|
266
|
+
* @param contextKey the condition key to check
|
|
267
|
+
* @returns if the condition key is an array type
|
|
268
|
+
*/
|
|
269
|
+
async function normalizeContextKeyCase(contextKey) {
|
|
270
|
+
const [service, key] = contextKey.split(":");
|
|
271
|
+
const serviceExists = await (0, iam_data_1.iamServiceExists)(service);
|
|
272
|
+
if (serviceExists) {
|
|
273
|
+
const serviceKeyExists = await (0, iam_data_1.iamConditionKeyExists)(service, contextKey);
|
|
274
|
+
if (serviceKeyExists) {
|
|
275
|
+
const keyDetails = await (0, iam_data_1.iamConditionKeyDetails)(service, contextKey);
|
|
276
|
+
return keyDetails.key;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
const globalConditionKey = (0, globalConditionKeys_js_1.getGlobalConditionKey)(contextKey);
|
|
280
|
+
if (globalConditionKey) {
|
|
281
|
+
return globalConditionKey.key;
|
|
282
|
+
}
|
|
283
|
+
throw new Error(`Context key ${contextKey} not found`);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Get the type of a context key
|
|
287
|
+
*
|
|
288
|
+
* @param contextKey - The string condition key to get the type for
|
|
289
|
+
* @returns The type of the condition key
|
|
290
|
+
* @throws an error if the condition key is not found
|
|
291
|
+
*/
|
|
292
|
+
async function typeForContextKey(contextKey) {
|
|
293
|
+
const [service, key] = contextKey.split(":");
|
|
294
|
+
const serviceKeyExists = await (0, iam_data_1.iamConditionKeyExists)(service, contextKey);
|
|
295
|
+
if (serviceKeyExists) {
|
|
296
|
+
const keyDetails = await (0, iam_data_1.iamConditionKeyDetails)(service, contextKey);
|
|
297
|
+
return keyDetails.type;
|
|
298
|
+
}
|
|
299
|
+
const globalConditionKey = (0, globalConditionKeys_js_1.getGlobalConditionKey)(contextKey);
|
|
300
|
+
if (globalConditionKey) {
|
|
301
|
+
return globalConditionKey.dataType;
|
|
302
|
+
}
|
|
303
|
+
throw new Error(`Condition key ${contextKey} not found`);
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Gets the IAM variables from a string
|
|
307
|
+
*
|
|
308
|
+
* @param value the string to get the variables from
|
|
309
|
+
* @returns the variables in the string, if any
|
|
310
|
+
*/
|
|
311
|
+
function getVariablesFromString(value) {
|
|
312
|
+
const matches = value.match(/\$\{.*?\}/g);
|
|
313
|
+
if (matches) {
|
|
314
|
+
return matches.map((m) => {
|
|
315
|
+
const inBrackets = m.slice(2, -1);
|
|
316
|
+
if (inBrackets.includes(',')) {
|
|
317
|
+
return inBrackets.split(',')[0].trim();
|
|
318
|
+
}
|
|
319
|
+
return inBrackets;
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
return [];
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Check if a context key actually exists
|
|
326
|
+
*
|
|
327
|
+
* @param key The context key to check
|
|
328
|
+
* @returns true if the context key is valid, false otherwise
|
|
329
|
+
*/
|
|
330
|
+
async function isActualContextKey(key) {
|
|
331
|
+
if ((0, globalConditionKeys_js_1.globalConditionKeyExists)(key)) {
|
|
332
|
+
return true;
|
|
333
|
+
}
|
|
334
|
+
const parts = key.split(":");
|
|
335
|
+
if (parts.length !== 2) {
|
|
336
|
+
return false;
|
|
337
|
+
}
|
|
338
|
+
const [service, action] = parts;
|
|
339
|
+
const serviceExists = await (0, iam_data_1.iamServiceExists)(service);
|
|
340
|
+
if (!serviceExists) {
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
const actionExists = await (0, iam_data_1.iamConditionKeyExists)(service, key);
|
|
344
|
+
return actionExists;
|
|
345
|
+
}
|
|
180
346
|
//# sourceMappingURL=util.js.map
|
package/dist/cjs/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/util.ts"],"names":[],"mappings":";;AAuBA,0DA4DC;AA8DD,sCAyBC;AASD,kDAgBC;AAQD,8BAEC;AAQD,oCAEC;AAUD,oDAGC;AAUD,8DAiBC;AAQD,sEAOC;AAQD,oCAEC;AAQD,0DAgBC;AASD,8CAaC;AAQD,wDAYC;AAQD,gDAiBC;AAnXD,sDAAiK;AAEjK,uFAA4G;AAG5G,MAAM,cAAc,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;AAMvC,MAAM,2BAA2B,GAAyB;IACxD,gBAAgB,EAAE,IAAI;CACvB,CAAA;AAED;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CAAC,KAAa,EAAE,OAAmB,EAAE,cAA8C;IACxH,MAAM,OAAO,GAAG,EAAC,GAAG,2BAA2B,EAAE,GAAG,cAAc,EAAC,CAAA;IAEnE,IAAI,oBAAoB,GAAG,KAAK,CAAA;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,yBAAyB,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC3E,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAC7D,aAAa;QACf,CAAC;aAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACxB,OAAO,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAC/D,eAAe;QACjB,CAAC;aAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACxE,eAAe;QACjB,CAAC;aAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACxE,eAAe;QACjB,CAAC;aAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,OAAO,gBAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAA;YACxE,eAAe;QACjB,CAAC;QACD,EAAE;QACF,4BAA4B;QAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAExC,IAAI,YAAY,GAAG,SAAS,CAAA;QAC5B,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC9C,IAAG,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC5B,MAAM,iBAAiB,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5C,IAAG,iBAAiB,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzE,YAAY,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC/C,CAAC;QACH,CAAC;QACD,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAA;QAE/C,MAAM,YAAY,GAAG,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAA;QAEjE,IAAG,YAAY,EAAE,CAAC;YAChB,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAA;QAC5C,CAAC;aAAM,IAAG,YAAY,EAAE,CAAC;YACvB;;;cAGE;YACF,OAAO,qBAAqB,CAAC,YAAY,CAAC,CAAA;QAC5C,CAAC;aAAM,CAAC;YACN,oBAAoB,GAAG,IAAI,CAAA;YAC3B;;cAEE;YACF,OAAO,gBAAgB,CAAA;QACzB,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAG,oBAAoB,EAAE,CAAC;QACxB,OAAO,cAAc,CAAA;IACvB,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,GAAG,GAAG,QAAQ,GAAG,GAAG,CAAC,CAAA;AACzC,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,OAAO,GAAG,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,qBAAqB,CAAC,OAAmB,EAAE,cAAsB;IACxE,IAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC;QAC7C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAA;IAC3D,IAAG,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,KAAK,CAAA;IACvB,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,gBAAgB,CAAC,SAAiB,EAAE,QAAgB,EAAE,gBAAyB;IACtF,IAAG,gBAAgB,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAYD;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,GAAW;IACvC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEzC,IAAI,YAAY,GAAG,SAAS,CAAA;IAC5B,IAAI,YAAY,GAAG,SAAS,CAAA;IAC5B,IAAG,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,CAAC,mBAAmB,EAAE,mBAAmB,CAAC,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAA;QAChF,YAAY,GAAG,mBAAmB,CAAA;QAClC,YAAY,GAAG,mBAAmB,CAAA;IACpC,CAAC;IAED,OAAO;QACL,SAAS;QACT,OAAO;QACP,MAAM;QACN,SAAS;QACT,QAAQ;QACR,YAAY;QACZ,YAAY;KACb,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,mBAAmB,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAExC,IAAI,UAAU,GAAG,UAAU,CAAA;IAC3B,IAAG,UAAU,IAAI,CAAC,CAAC,IAAI,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;QACxC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAA;IACnD,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5B,UAAU,GAAG,UAAU,GAAG,CAAC,CAAA;IAC7B,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC;QAC5B,UAAU,GAAG,UAAU,GAAG,CAAC,CAAA;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAA;IACzD,CAAC;IAED,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAA;AACpE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,SAAS,CAAI,KAAoB;IAC/C,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAI,KAAoB;IAClD,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,oBAAoB,CAAC,OAAe,EAAE,MAAc;IACxE,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7D,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,CAAA;AACjD,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,yBAAyB,CAAC,OAAe,EAAE,MAAc,EAAE,QAAgB;IAC/F,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC7D,IAAG,aAAa,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,MAAM,mCAAmC,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,qBAAqB,GAAmB,EAAE,CAAC;IACjD,KAAI,MAAM,EAAE,IAAI,aAAa,CAAC,aAAa,EAAE,CAAC;QAC5C,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAsB,EAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,6BAA6B,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAChE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QAClD,IAAG,KAAK,EAAE,CAAC;YACT,qBAAqB,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED;;;;;GAKG;AACH,SAAgB,6BAA6B,CAAC,OAAe;IAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC/D,OAAO,MAAM,SAAS,SAAS,CAAA;IACjC,CAAC,CAAC,CAAA;IACF,OAAO,IAAI,KAAK,GAAG,CAAA;AACrB,CAAC;AAED;;;;;GAKG;AACH,SAAgB,YAAY,CAAC,OAAiB;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AAC1C,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,uBAAuB,CAAC,UAAkB;IAC9D,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;IACtD,IAAG,aAAa,EAAE,CAAC;QACjB,MAAM,gBAAgB,GAAG,MAAM,IAAA,gCAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC1E,IAAG,gBAAgB,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,MAAM,IAAA,iCAAsB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO,UAAU,CAAC,GAAG,CAAC;QACxB,CAAC;IACH,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAA,8CAAqB,EAAC,UAAU,CAAC,CAAC;IAC7D,IAAG,kBAAkB,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC,GAAG,CAAC;IAChC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,eAAe,UAAU,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,MAAM,IAAA,gCAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC1E,IAAG,gBAAgB,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,MAAM,IAAA,iCAAsB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACrE,OAAO,UAAU,CAAC,IAAwB,CAAC;IAC7C,CAAC;IACD,MAAM,kBAAkB,GAAG,IAAA,8CAAqB,EAAC,UAAU,CAAC,CAAC;IAC7D,IAAG,kBAAkB,EAAE,CAAC;QACtB,OAAO,kBAAkB,CAAC,QAA4B,CAAC;IACzD,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,iBAAiB,UAAU,YAAY,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,SAAgB,sBAAsB,CAAC,KAAa;IAClD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IACzC,IAAG,OAAO,EAAE,CAAC;QACX,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACvB,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YACjC,IAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACxC,CAAC;YACD,OAAO,UAAU,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,EAAE,CAAA;AACX,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAClD,IAAG,IAAA,iDAAwB,EAAC,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAG,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAChC,MAAM,aAAa,GAAG,MAAM,IAAA,2BAAgB,EAAC,OAAO,CAAC,CAAC;IAEtD,IAAG,CAAC,aAAa,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,IAAA,gCAAqB,EAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type BaseConditionKeyType = 'String' | 'ARN' | 'Numeric' | 'Bool' | 'Date' | 'IPAddress' | 'Binary';
|
|
2
|
+
export type ArrayConditionKeyType = `ArrayOf${BaseConditionKeyType}`;
|
|
3
|
+
export type ConditionKeyType = BaseConditionKeyType | ArrayConditionKeyType;
|
|
4
|
+
/**
|
|
5
|
+
* Check if a condition key is an array types
|
|
6
|
+
*
|
|
7
|
+
* @param key the condition key type to check
|
|
8
|
+
* @returns true if the key is an array type, otherwise false
|
|
9
|
+
*/
|
|
10
|
+
export declare function isConditionKeyArray(key: ConditionKeyType): key is ArrayConditionKeyType;
|
|
11
|
+
/**
|
|
12
|
+
* Get the BaseConditionKeyType from an ArrayConditionKeyType
|
|
13
|
+
*
|
|
14
|
+
* @param key the ArrayConditionKeyType to get the base type from
|
|
15
|
+
* @returns the base type of the array key
|
|
16
|
+
* @throws if the key is not an array type
|
|
17
|
+
*/
|
|
18
|
+
export declare function getBaseConditionKeyType(key: ArrayConditionKeyType): BaseConditionKeyType;
|
|
19
|
+
//# sourceMappingURL=ConditionKeys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionKeys.d.ts","sourceRoot":"","sources":["../../src/ConditionKeys.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAA;AAC1G,MAAM,MAAM,qBAAqB,GAAG,UAAU,oBAAoB,EAAE,CAAA;AACpE,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,qBAAqB,CAAA;AAE3E;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,GAAG,IAAI,qBAAqB,CAEvF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,qBAAqB,GAAG,oBAAoB,CAKxF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check if a condition key is an array types
|
|
3
|
+
*
|
|
4
|
+
* @param key the condition key type to check
|
|
5
|
+
* @returns true if the key is an array type, otherwise false
|
|
6
|
+
*/
|
|
7
|
+
export function isConditionKeyArray(key) {
|
|
8
|
+
return key.startsWith('ArrayOf');
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Get the BaseConditionKeyType from an ArrayConditionKeyType
|
|
12
|
+
*
|
|
13
|
+
* @param key the ArrayConditionKeyType to get the base type from
|
|
14
|
+
* @returns the base type of the array key
|
|
15
|
+
* @throws if the key is not an array type
|
|
16
|
+
*/
|
|
17
|
+
export function getBaseConditionKeyType(key) {
|
|
18
|
+
if (!isConditionKeyArray(key)) {
|
|
19
|
+
throw new Error(`Expected ArrayConditionType, got ${key}`);
|
|
20
|
+
}
|
|
21
|
+
return key.slice(7);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ConditionKeys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionKeys.js","sourceRoot":"","sources":["../../src/ConditionKeys.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAqB;IACvD,OAAO,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;AAClC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,GAA0B;IAChE,IAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;IAC5D,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAyB,CAAA;AAC7C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SCPAnalysis.d.ts","sourceRoot":"","sources":["../../src/SCPAnalysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;CACxC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SCPAnalysis.js","sourceRoot":"","sources":["../../src/SCPAnalysis.ts"],"names":[],"mappings":""}
|