@actsecurity/iam-policy 0.1.109
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/LICENSE.txt +661 -0
- package/README.md +244 -0
- package/dist/cjs/actions/action.d.ts +68 -0
- package/dist/cjs/actions/action.d.ts.map +1 -0
- package/dist/cjs/actions/action.js +41 -0
- package/dist/cjs/actions/action.js.map +1 -0
- package/dist/cjs/conditions/condition.d.ts +62 -0
- package/dist/cjs/conditions/condition.d.ts.map +1 -0
- package/dist/cjs/conditions/condition.js +43 -0
- package/dist/cjs/conditions/condition.js.map +1 -0
- package/dist/cjs/conditions/conditionOperation.d.ts +31 -0
- package/dist/cjs/conditions/conditionOperation.d.ts.map +1 -0
- package/dist/cjs/conditions/conditionOperation.js +39 -0
- package/dist/cjs/conditions/conditionOperation.js.map +1 -0
- package/dist/cjs/index.d.ts +13 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +22 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lint/lint.d.ts +41 -0
- package/dist/cjs/lint/lint.d.ts.map +1 -0
- package/dist/cjs/lint/lint.js +190 -0
- package/dist/cjs/lint/lint.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser.d.ts +13 -0
- package/dist/cjs/parser.d.ts.map +1 -0
- package/dist/cjs/parser.js +22 -0
- package/dist/cjs/parser.js.map +1 -0
- package/dist/cjs/policies/policy.d.ts +41 -0
- package/dist/cjs/policies/policy.d.ts.map +1 -0
- package/dist/cjs/policies/policy.js +40 -0
- package/dist/cjs/policies/policy.js.map +1 -0
- package/dist/cjs/principals/principal.d.ts +122 -0
- package/dist/cjs/principals/principal.d.ts.map +1 -0
- package/dist/cjs/principals/principal.js +101 -0
- package/dist/cjs/principals/principal.js.map +1 -0
- package/dist/cjs/resources/resource.d.ts +60 -0
- package/dist/cjs/resources/resource.d.ts.map +1 -0
- package/dist/cjs/resources/resource.js +56 -0
- package/dist/cjs/resources/resource.js.map +1 -0
- package/dist/cjs/statements/statement.d.ts +227 -0
- package/dist/cjs/statements/statement.d.ts.map +1 -0
- package/dist/cjs/statements/statement.js +236 -0
- package/dist/cjs/statements/statement.js.map +1 -0
- package/dist/cjs/utils.d.ts +55 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +100 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/cjs/validate/testutil.d.ts +3 -0
- package/dist/cjs/validate/testutil.d.ts.map +1 -0
- package/dist/cjs/validate/testutil.js +21 -0
- package/dist/cjs/validate/testutil.js.map +1 -0
- package/dist/cjs/validate/validate.d.ts +16 -0
- package/dist/cjs/validate/validate.d.ts.map +1 -0
- package/dist/cjs/validate/validate.js +361 -0
- package/dist/cjs/validate/validate.js.map +1 -0
- package/dist/cjs/validate/validateTypes.d.ts +53 -0
- package/dist/cjs/validate/validateTypes.d.ts.map +1 -0
- package/dist/cjs/validate/validateTypes.js +224 -0
- package/dist/cjs/validate/validateTypes.js.map +1 -0
- package/dist/cjs/validatedPolicy.d.ts +40 -0
- package/dist/cjs/validatedPolicy.d.ts.map +1 -0
- package/dist/cjs/validatedPolicy.js +30 -0
- package/dist/cjs/validatedPolicy.js.map +1 -0
- package/dist/esm/actions/action.d.ts +68 -0
- package/dist/esm/actions/action.d.ts.map +1 -0
- package/dist/esm/actions/action.js +35 -0
- package/dist/esm/actions/action.js.map +1 -0
- package/dist/esm/conditions/condition.d.ts +62 -0
- package/dist/esm/conditions/condition.d.ts.map +1 -0
- package/dist/esm/conditions/condition.js +35 -0
- package/dist/esm/conditions/condition.js.map +1 -0
- package/dist/esm/conditions/conditionOperation.d.ts +31 -0
- package/dist/esm/conditions/conditionOperation.d.ts.map +1 -0
- package/dist/esm/conditions/conditionOperation.js +34 -0
- package/dist/esm/conditions/conditionOperation.js.map +1 -0
- package/dist/esm/index.d.ts +13 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lint/lint.d.ts +41 -0
- package/dist/esm/lint/lint.d.ts.map +1 -0
- package/dist/esm/lint/lint.js +184 -0
- package/dist/esm/lint/lint.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/parser.d.ts +13 -0
- package/dist/esm/parser.d.ts.map +1 -0
- package/dist/esm/parser.js +19 -0
- package/dist/esm/parser.js.map +1 -0
- package/dist/esm/policies/policy.d.ts +41 -0
- package/dist/esm/policies/policy.d.ts.map +1 -0
- package/dist/esm/policies/policy.js +34 -0
- package/dist/esm/policies/policy.js.map +1 -0
- package/dist/esm/principals/principal.d.ts +122 -0
- package/dist/esm/principals/principal.d.ts.map +1 -0
- package/dist/esm/principals/principal.js +95 -0
- package/dist/esm/principals/principal.js.map +1 -0
- package/dist/esm/resources/resource.d.ts +60 -0
- package/dist/esm/resources/resource.d.ts.map +1 -0
- package/dist/esm/resources/resource.js +50 -0
- package/dist/esm/resources/resource.js.map +1 -0
- package/dist/esm/statements/statement.d.ts +227 -0
- package/dist/esm/statements/statement.d.ts.map +1 -0
- package/dist/esm/statements/statement.js +229 -0
- package/dist/esm/statements/statement.js.map +1 -0
- package/dist/esm/utils.d.ts +55 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +92 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/validate/testutil.d.ts +3 -0
- package/dist/esm/validate/testutil.d.ts.map +1 -0
- package/dist/esm/validate/testutil.js +19 -0
- package/dist/esm/validate/testutil.js.map +1 -0
- package/dist/esm/validate/validate.d.ts +16 -0
- package/dist/esm/validate/validate.d.ts.map +1 -0
- package/dist/esm/validate/validate.js +358 -0
- package/dist/esm/validate/validate.js.map +1 -0
- package/dist/esm/validate/validateTypes.d.ts +53 -0
- package/dist/esm/validate/validateTypes.d.ts.map +1 -0
- package/dist/esm/validate/validateTypes.js +215 -0
- package/dist/esm/validate/validateTypes.js.map +1 -0
- package/dist/esm/validatedPolicy.d.ts +40 -0
- package/dist/esm/validatedPolicy.d.ts.map +1 -0
- package/dist/esm/validatedPolicy.js +26 -0
- package/dist/esm/validatedPolicy.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateIdentityPolicy = validateIdentityPolicy;
|
|
4
|
+
exports.validateServiceControlPolicy = validateServiceControlPolicy;
|
|
5
|
+
exports.validateResourcePolicy = validateResourcePolicy;
|
|
6
|
+
exports.validateResourceControlPolicy = validateResourceControlPolicy;
|
|
7
|
+
exports.validateTrustPolicy = validateTrustPolicy;
|
|
8
|
+
exports.validateEndpointPolicy = validateEndpointPolicy;
|
|
9
|
+
exports.validateSessionPolicy = validateSessionPolicy;
|
|
10
|
+
const validate_js_1 = require("./validate.js");
|
|
11
|
+
/**
|
|
12
|
+
* Validates an Identity Policy attached to an IAM role or user, or managed policy
|
|
13
|
+
*
|
|
14
|
+
* @param policy the policy to validate
|
|
15
|
+
* @returns an array of validation errors
|
|
16
|
+
*/
|
|
17
|
+
function validateIdentityPolicy(policy) {
|
|
18
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
19
|
+
validateStatement: (statement, path) => {
|
|
20
|
+
const policyType = 'an identity policy statement';
|
|
21
|
+
const errors = [];
|
|
22
|
+
errors.push(...validateProhibitedFields(statement, ['Principal', 'NotPrincipal'], path, policyType));
|
|
23
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
24
|
+
errors.push(...validateAtLeastOneOf(statement, ['Resource', 'NotResource'], path, policyType));
|
|
25
|
+
return errors;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validates a Service Control Policy (SCP)
|
|
31
|
+
*
|
|
32
|
+
* @param policy the policy to validate
|
|
33
|
+
* @returns an array of validation errors
|
|
34
|
+
*/
|
|
35
|
+
function validateServiceControlPolicy(policy) {
|
|
36
|
+
const policyType = 'a service control policy';
|
|
37
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
38
|
+
validateStatement: (statement, path) => {
|
|
39
|
+
const errors = [];
|
|
40
|
+
errors.push(...validateProhibitedFields(statement, ['Principal', 'NotPrincipal'], path, policyType));
|
|
41
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
42
|
+
errors.push(...validateAtLeastOneOf(statement, ['Resource', 'NotResource'], path, policyType));
|
|
43
|
+
return errors;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Validates a Resource Policy attached to an S3 bucket, SQS queue, or other resource. \
|
|
49
|
+
*
|
|
50
|
+
* This is very generic and will not be able to validate all resource policies.
|
|
51
|
+
*
|
|
52
|
+
* @param policy the policy to validate
|
|
53
|
+
* @returns an array of validation errors
|
|
54
|
+
*/
|
|
55
|
+
function validateResourcePolicy(policy) {
|
|
56
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
57
|
+
validateStatement: (statement, path) => {
|
|
58
|
+
const policyType = 'a resource policy';
|
|
59
|
+
const errors = [];
|
|
60
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
61
|
+
return errors;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Validates a Resource Control Policy (RCP)
|
|
67
|
+
*
|
|
68
|
+
* @param policy the policy to validate
|
|
69
|
+
* @returns an array of validation errors
|
|
70
|
+
*/
|
|
71
|
+
function validateResourceControlPolicy(policy) {
|
|
72
|
+
const policyType = 'a resource control policy';
|
|
73
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
74
|
+
validateVersion: (version, path) => {
|
|
75
|
+
if (version !== '2012-10-17') {
|
|
76
|
+
return [
|
|
77
|
+
{
|
|
78
|
+
path: version === undefined ? path : `Version`,
|
|
79
|
+
message: `Version must be "2012-10-17" in ${policyType}`
|
|
80
|
+
}
|
|
81
|
+
];
|
|
82
|
+
}
|
|
83
|
+
return [];
|
|
84
|
+
},
|
|
85
|
+
validateStatement: (statement, path) => {
|
|
86
|
+
const errors = [];
|
|
87
|
+
if (statement.Effect !== 'Deny') {
|
|
88
|
+
errors.push({
|
|
89
|
+
path: `${path}.Effect`,
|
|
90
|
+
message: `Effect must be "Deny" in ${policyType}`
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
if (statement.Principal !== '*') {
|
|
94
|
+
errors.push({
|
|
95
|
+
path: statement.Principal == undefined ? path : `${path}.Principal`,
|
|
96
|
+
message: `Principal must be "*" in ${policyType}`
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
errors.push(...validateProhibitedFields(statement, ['NotPrincipal', 'NotAction'], path, policyType));
|
|
100
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action'], path, policyType));
|
|
101
|
+
errors.push(...validateAtLeastOneOf(statement, ['Resource', 'NotResource'], path, policyType));
|
|
102
|
+
return errors;
|
|
103
|
+
},
|
|
104
|
+
validateAction: (action, path) => {
|
|
105
|
+
if (action === '*') {
|
|
106
|
+
return [
|
|
107
|
+
{
|
|
108
|
+
path,
|
|
109
|
+
message: `Action cannot be "*" in ${policyType}`
|
|
110
|
+
}
|
|
111
|
+
];
|
|
112
|
+
}
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Validates a Trust Policy attached to a role
|
|
119
|
+
*
|
|
120
|
+
* @param policy the policy to validate
|
|
121
|
+
* @returns an array of validation errors
|
|
122
|
+
*/
|
|
123
|
+
function validateTrustPolicy(policy) {
|
|
124
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
125
|
+
validateStatement: (statement, path) => {
|
|
126
|
+
const policyType = 'a trust policy';
|
|
127
|
+
const errors = [];
|
|
128
|
+
errors.push(...validateProhibitedFields(statement, ['Resource', 'NotResource'], path, policyType));
|
|
129
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
130
|
+
errors.push(...validateAtLeastOneOf(statement, ['Principal', 'NotPrincipal'], path, policyType));
|
|
131
|
+
return errors;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validates an VPC Endpoint Policy
|
|
137
|
+
*
|
|
138
|
+
* @param policy the policy to validate
|
|
139
|
+
* @returns an array of validation errors
|
|
140
|
+
*/
|
|
141
|
+
function validateEndpointPolicy(policy) {
|
|
142
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
143
|
+
validateStatement: (statement, path) => {
|
|
144
|
+
const policyType = 'an endpoint policy';
|
|
145
|
+
const errors = [];
|
|
146
|
+
errors.push(...validateProhibitedFields(statement, ['NotPrincipal'], path, policyType));
|
|
147
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
148
|
+
errors.push(...validateAtLeastOneOf(statement, ['Resource', 'NotResource'], path, policyType));
|
|
149
|
+
errors.push(...validateAtLeastOneOf(statement, ['Principal'], path, policyType));
|
|
150
|
+
if (statement.Principal && statement.Principal !== '*') {
|
|
151
|
+
errors.push({
|
|
152
|
+
message: `Principal must be "*" in ${policyType}`,
|
|
153
|
+
path: `${path}.Principal`
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
return errors;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Validates a session policy
|
|
162
|
+
*
|
|
163
|
+
* @param policy the policy to validate
|
|
164
|
+
* @returns an array of validation errors
|
|
165
|
+
*/
|
|
166
|
+
function validateSessionPolicy(policy) {
|
|
167
|
+
return (0, validate_js_1.validatePolicySyntax)(policy, {
|
|
168
|
+
validateStatement: (statement, path) => {
|
|
169
|
+
const policyType = 'a session policy';
|
|
170
|
+
const errors = [];
|
|
171
|
+
errors.push(...validateProhibitedFields(statement, ['Principal', 'NotPrincipal'], path, policyType));
|
|
172
|
+
errors.push(...validateAtLeastOneOf(statement, ['Action', 'NotAction'], path, policyType));
|
|
173
|
+
errors.push(...validateAtLeastOneOf(statement, ['Resource', 'NotResource'], path, policyType));
|
|
174
|
+
return errors;
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Validates that at least one of the specified fields is present in a statement
|
|
180
|
+
*
|
|
181
|
+
* @param statement the statement to validate
|
|
182
|
+
* @param requiredFields the list of fields, that at least one must be present
|
|
183
|
+
* @param path the path to the statement in the policy
|
|
184
|
+
* @param policyType the type of policy being validated
|
|
185
|
+
* @returns an array of validation errors
|
|
186
|
+
*/
|
|
187
|
+
function validateAtLeastOneOf(statement, requiredFields, path, policyType) {
|
|
188
|
+
const presentFields = requiredFields.filter((field) => statement[field]);
|
|
189
|
+
let message = `One of ${requiredFields.join(' or ')} is required in ${policyType}`;
|
|
190
|
+
if (requiredFields.length === 1) {
|
|
191
|
+
message = `${requiredFields[0]} is required in ${policyType}`;
|
|
192
|
+
}
|
|
193
|
+
if (presentFields.length === 0) {
|
|
194
|
+
return [
|
|
195
|
+
{
|
|
196
|
+
path,
|
|
197
|
+
message
|
|
198
|
+
}
|
|
199
|
+
];
|
|
200
|
+
}
|
|
201
|
+
return [];
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Validates prohibited fields do not exist in a statement
|
|
205
|
+
*
|
|
206
|
+
* @param statement the statement to validate
|
|
207
|
+
* @param prohibitedFields the list of fields that are not allowed
|
|
208
|
+
* @param path the path to the statement in the policy
|
|
209
|
+
* @param policyType the type of policy being validated
|
|
210
|
+
* @returns an array of validation errors
|
|
211
|
+
*/
|
|
212
|
+
function validateProhibitedFields(statement, prohibitedFields, path, policyType) {
|
|
213
|
+
const errors = [];
|
|
214
|
+
for (const field of prohibitedFields) {
|
|
215
|
+
if (statement[field]) {
|
|
216
|
+
errors.push({
|
|
217
|
+
path: `${path}.#${field}`,
|
|
218
|
+
message: `${field} is not allowed in ${policyType}`
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return errors;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=validateTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTypes.js","sourceRoot":"","sources":["../../../src/validate/validateTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { ValidationError } from './validate/validate.js';
|
|
2
|
+
/**
|
|
3
|
+
* A policy document that has been validated. Carries the raw policy document,
|
|
4
|
+
* optional metadata, and the validation result so that downstream consumers
|
|
5
|
+
* can skip re-validation.
|
|
6
|
+
*
|
|
7
|
+
* Every field is a plain value — no class instances — so the entire object
|
|
8
|
+
* survives JSON serialization (e.g. through SharedArrayBuffer) unchanged.
|
|
9
|
+
*/
|
|
10
|
+
export interface ValidatedPolicy<T = undefined> {
|
|
11
|
+
/** Discriminant for runtime detection via {@link isValidatedPolicy}. */
|
|
12
|
+
readonly __validated: true;
|
|
13
|
+
/** The raw policy JSON document. */
|
|
14
|
+
readonly policyDocument: any;
|
|
15
|
+
/** Optional metadata carried through to {@link loadPolicy} (e.g. `{ name: string }` for error reporting). */
|
|
16
|
+
readonly metadata?: T;
|
|
17
|
+
/** Validation errors. An empty array means the policy is valid. */
|
|
18
|
+
readonly errors: readonly ValidationError[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Validates a policy document using the provided validation function and
|
|
22
|
+
* bundles the result with the raw document and optional metadata.
|
|
23
|
+
*
|
|
24
|
+
* The caller chooses the validation function, so this factory is agnostic
|
|
25
|
+
* to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
|
|
26
|
+
*
|
|
27
|
+
* @param policyDocument the raw policy JSON document
|
|
28
|
+
* @param validateFn a validation function that returns an array of errors (empty if valid)
|
|
29
|
+
* @param metadata optional metadata to carry with the validated policy
|
|
30
|
+
* @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
|
|
31
|
+
*/
|
|
32
|
+
export declare function createValidatedPolicy<T = undefined>(policyDocument: any, validateFn: (policy: any) => ValidationError[], metadata?: T): ValidatedPolicy<T>;
|
|
33
|
+
/**
|
|
34
|
+
* Type guard that checks whether a value is a {@link ValidatedPolicy}.
|
|
35
|
+
*
|
|
36
|
+
* @param value the value to check
|
|
37
|
+
* @returns true if the value is a ValidatedPolicy
|
|
38
|
+
*/
|
|
39
|
+
export declare function isValidatedPolicy(value: any): value is ValidatedPolicy;
|
|
40
|
+
//# sourceMappingURL=validatedPolicy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatedPolicy.d.ts","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAE7D;;;;;;;GAOG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,SAAS;IAC5C,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAE1B,oCAAoC;IACpC,QAAQ,CAAC,cAAc,EAAE,GAAG,CAAA;IAE5B,6GAA6G;IAC7G,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAErB,mEAAmE;IACnE,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACjD,cAAc,EAAE,GAAG,EACnB,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,eAAe,EAAE,EAC9C,QAAQ,CAAC,EAAE,CAAC,GACX,eAAe,CAAC,CAAC,CAAC,CAGpB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,KAAK,IAAI,eAAe,CAEtE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createValidatedPolicy = createValidatedPolicy;
|
|
4
|
+
exports.isValidatedPolicy = isValidatedPolicy;
|
|
5
|
+
/**
|
|
6
|
+
* Validates a policy document using the provided validation function and
|
|
7
|
+
* bundles the result with the raw document and optional metadata.
|
|
8
|
+
*
|
|
9
|
+
* The caller chooses the validation function, so this factory is agnostic
|
|
10
|
+
* to the policy type (identity, SCP, RCP, resource, trust, endpoint, etc.).
|
|
11
|
+
*
|
|
12
|
+
* @param policyDocument the raw policy JSON document
|
|
13
|
+
* @param validateFn a validation function that returns an array of errors (empty if valid)
|
|
14
|
+
* @param metadata optional metadata to carry with the validated policy
|
|
15
|
+
* @returns a ValidatedPolicy containing the raw document, metadata, and validation errors
|
|
16
|
+
*/
|
|
17
|
+
function createValidatedPolicy(policyDocument, validateFn, metadata) {
|
|
18
|
+
const errors = validateFn(policyDocument);
|
|
19
|
+
return { __validated: true, policyDocument, metadata, errors };
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Type guard that checks whether a value is a {@link ValidatedPolicy}.
|
|
23
|
+
*
|
|
24
|
+
* @param value the value to check
|
|
25
|
+
* @returns true if the value is a ValidatedPolicy
|
|
26
|
+
*/
|
|
27
|
+
function isValidatedPolicy(value) {
|
|
28
|
+
return !!value && value.__validated === true;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=validatedPolicy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validatedPolicy.js","sourceRoot":"","sources":["../../src/validatedPolicy.ts"],"names":[],"mappings":";;AAoCA,sDAOC;AAQD,8CAEC;AA7BD;;;;;;;;;;;GAWG;AACH,SAAgB,qBAAqB,CACnC,cAAmB,EACnB,UAA8C,EAC9C,QAAY;IAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,cAAc,CAAC,CAAA;IACzC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;AAChE,CAAC;AAED;;;;;GAKG;AACH,SAAgB,iBAAiB,CAAC,KAAU;IAC1C,OAAO,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,KAAK,IAAI,CAAA;AAC9C,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export type ActionType = 'service' | 'wildcard';
|
|
2
|
+
/**
|
|
3
|
+
* An Action string in an IAM policy
|
|
4
|
+
*/
|
|
5
|
+
export interface Action {
|
|
6
|
+
/**
|
|
7
|
+
* The type of actions
|
|
8
|
+
*/
|
|
9
|
+
type(): ActionType;
|
|
10
|
+
/**
|
|
11
|
+
* The raw string of the action
|
|
12
|
+
*/
|
|
13
|
+
value(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Whether the action is a wildcard action: `"*"`
|
|
16
|
+
*/
|
|
17
|
+
isWildcardAction(): this is WildcardAction;
|
|
18
|
+
/**
|
|
19
|
+
* Whether the action is a service action: `"service:Action"`
|
|
20
|
+
*/
|
|
21
|
+
isServiceAction(): this is ServiceAction;
|
|
22
|
+
/**
|
|
23
|
+
* The path to the action string in the policy
|
|
24
|
+
*/
|
|
25
|
+
path(): string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A wildcard action: `"*"`
|
|
29
|
+
*/
|
|
30
|
+
export interface WildcardAction extends Action {
|
|
31
|
+
/**
|
|
32
|
+
* The wildcard character `"*"`
|
|
33
|
+
*
|
|
34
|
+
* This mainly exists to differentiate between this interface and the Action interface
|
|
35
|
+
*/
|
|
36
|
+
wildcardValue(): '*';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* A service action: `"service:Action"`
|
|
40
|
+
*/
|
|
41
|
+
export interface ServiceAction extends Action {
|
|
42
|
+
/**
|
|
43
|
+
* The service of the action
|
|
44
|
+
*
|
|
45
|
+
* Guaranteed to be lowercase
|
|
46
|
+
*/
|
|
47
|
+
service(): string;
|
|
48
|
+
/**
|
|
49
|
+
* The action within the service
|
|
50
|
+
*/
|
|
51
|
+
action(): string;
|
|
52
|
+
}
|
|
53
|
+
export declare class ActionImpl implements Action, WildcardAction, ServiceAction {
|
|
54
|
+
private readonly rawValue;
|
|
55
|
+
private readonly otherProps;
|
|
56
|
+
constructor(rawValue: string, otherProps: {
|
|
57
|
+
path: string;
|
|
58
|
+
});
|
|
59
|
+
path(): string;
|
|
60
|
+
type(): ActionType;
|
|
61
|
+
wildcardValue(): '*';
|
|
62
|
+
value(): string;
|
|
63
|
+
isWildcardAction(): this is WildcardAction;
|
|
64
|
+
isServiceAction(): this is ServiceAction;
|
|
65
|
+
service(): string;
|
|
66
|
+
action(): string;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../../src/actions/action.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;AAE/C;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,IAAI,IAAI,UAAU,CAAA;IAElB;;OAEG;IACH,KAAK,IAAI,MAAM,CAAA;IAEf;;OAEG;IACH,gBAAgB,IAAI,IAAI,IAAI,cAAc,CAAA;IAE1C;;OAEG;IACH,eAAe,IAAI,IAAI,IAAI,aAAa,CAAA;IAExC;;OAEG;IACH,IAAI,IAAI,MAAM,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;IAC5C;;;;OAIG;IACH,aAAa,IAAI,GAAG,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;;;OAIG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,MAAM,EAAE,cAAc,EAAE,aAAa;IAEpE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAA;KACb;IAGI,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,UAAU;IAOlB,aAAa,IAAI,GAAG;IAIpB,KAAK,IAAI,MAAM;IAIf,gBAAgB,IAAI,IAAI,IAAI,cAAc;IAI1C,eAAe,IAAI,IAAI,IAAI,aAAa;IAIxC,OAAO,IAAI,MAAM;IAIjB,MAAM,IAAI,MAAM;CAGxB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { delimitedSegmentAt, isAllWildcards } from '../utils.js';
|
|
2
|
+
export class ActionImpl {
|
|
3
|
+
constructor(rawValue, otherProps) {
|
|
4
|
+
this.rawValue = rawValue;
|
|
5
|
+
this.otherProps = otherProps;
|
|
6
|
+
}
|
|
7
|
+
path() {
|
|
8
|
+
return this.otherProps.path;
|
|
9
|
+
}
|
|
10
|
+
type() {
|
|
11
|
+
if (isAllWildcards(this.rawValue)) {
|
|
12
|
+
return 'wildcard';
|
|
13
|
+
}
|
|
14
|
+
return 'service';
|
|
15
|
+
}
|
|
16
|
+
wildcardValue() {
|
|
17
|
+
return '*';
|
|
18
|
+
}
|
|
19
|
+
value() {
|
|
20
|
+
return this.rawValue;
|
|
21
|
+
}
|
|
22
|
+
isWildcardAction() {
|
|
23
|
+
return this.type() === 'wildcard';
|
|
24
|
+
}
|
|
25
|
+
isServiceAction() {
|
|
26
|
+
return this.type() === 'service';
|
|
27
|
+
}
|
|
28
|
+
service() {
|
|
29
|
+
return delimitedSegmentAt(this.rawValue, ':', 0).toLowerCase();
|
|
30
|
+
}
|
|
31
|
+
action() {
|
|
32
|
+
return delimitedSegmentAt(this.rawValue, ':', 1);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/actions/action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AA+DhE,MAAM,OAAO,UAAU;IACrB,YACmB,QAAgB,EAChB,UAEhB;QAHgB,aAAQ,GAAR,QAAQ,CAAQ;QAChB,eAAU,GAAV,UAAU,CAE1B;IACA,CAAC;IAEG,IAAI;QACT,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAA;IAC7B,CAAC;IAEM,IAAI;QACT,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAEM,aAAa;QAClB,OAAO,GAAG,CAAA;IACZ,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,UAAU,CAAA;IACnC,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,SAAS,CAAA;IAClC,CAAC;IAEM,OAAO;QACZ,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAE,CAAC,WAAW,EAAE,CAAA;IACjE,CAAC;IAEM,MAAM;QACX,OAAO,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAE,CAAA;IACnD,CAAC;CACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type ConditionOperation } from './conditionOperation.js';
|
|
2
|
+
export interface Condition {
|
|
3
|
+
/**
|
|
4
|
+
* Returns the operation of the condition. For example "StringEquals" or "StringLike".
|
|
5
|
+
*
|
|
6
|
+
* @returns the operation of the condition.
|
|
7
|
+
*/
|
|
8
|
+
operation(): ConditionOperation;
|
|
9
|
+
/**
|
|
10
|
+
* Returns the key of the condition. For example "aws:PrincipalOrgID".
|
|
11
|
+
*
|
|
12
|
+
* @returns the condition key of the action
|
|
13
|
+
*/
|
|
14
|
+
conditionKey(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Returns the values of the condition. For example ["o-1234567890abcdef0"].
|
|
17
|
+
* Boolean literals in the policy are converted to their string equivalents.
|
|
18
|
+
*
|
|
19
|
+
* @returns the values of the condition.
|
|
20
|
+
*/
|
|
21
|
+
conditionValues(): string[];
|
|
22
|
+
/**
|
|
23
|
+
* Checks if the the condition values are an array.
|
|
24
|
+
*
|
|
25
|
+
* @returns true if the condition values are an array, false otherwise.
|
|
26
|
+
*/
|
|
27
|
+
valueIsArray(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the path to the operator key in the policy.
|
|
30
|
+
*/
|
|
31
|
+
operatorKeyPath(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Returns the path to the operator value in the policy.
|
|
34
|
+
*/
|
|
35
|
+
operatorValuePath(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Returns the path to the condition key for the policy.
|
|
38
|
+
*/
|
|
39
|
+
keyPath(): string;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the path to the condition values in the policy.
|
|
42
|
+
*/
|
|
43
|
+
valuesPath(): string;
|
|
44
|
+
}
|
|
45
|
+
export declare class ConditionImpl implements Condition {
|
|
46
|
+
private readonly op;
|
|
47
|
+
private readonly key;
|
|
48
|
+
private readonly values;
|
|
49
|
+
private readonly otherProps;
|
|
50
|
+
constructor(op: string, key: string, values: string | boolean | (string | boolean)[], otherProps: {
|
|
51
|
+
conditionPath: string;
|
|
52
|
+
});
|
|
53
|
+
operation(): ConditionOperation;
|
|
54
|
+
conditionKey(): string;
|
|
55
|
+
conditionValues(): string[];
|
|
56
|
+
valueIsArray(): boolean;
|
|
57
|
+
operatorKeyPath(): string;
|
|
58
|
+
operatorValuePath(): string;
|
|
59
|
+
keyPath(): string;
|
|
60
|
+
valuesPath(): string;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=condition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../../src/conditions/condition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAA0B,MAAM,yBAAyB,CAAA;AAEzF,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,SAAS,IAAI,kBAAkB,CAAA;IAE/B;;;;OAIG;IACH,YAAY,IAAI,MAAM,CAAA;IAEtB;;;;;OAKG;IACH,eAAe,IAAI,MAAM,EAAE,CAAA;IAE3B;;;;OAIG;IACH,YAAY,IAAI,OAAO,CAAA;IAEvB;;OAEG;IACH,eAAe,IAAI,MAAM,CAAA;IAEzB;;OAEG;IACH,iBAAiB,IAAI,MAAM,CAAA;IAE3B;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,UAAU,IAAI,MAAM,CAAA;CACrB;AAED,qBAAa,aAAc,YAAW,SAAS;IAE3C,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAHV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,EAC/C,UAAU,EAAE;QAC3B,aAAa,EAAE,MAAM,CAAA;KACtB;IAGI,SAAS,IAAI,kBAAkB;IAI/B,YAAY,IAAI,MAAM;IAItB,eAAe,IAAI,MAAM,EAAE;IAK3B,YAAY,IAAI,OAAO;IAIvB,eAAe,IAAI,MAAM;IAIzB,iBAAiB,IAAI,MAAM;IAI3B,OAAO,IAAI,MAAM;IAIjB,UAAU,IAAI,MAAM;CAG5B"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ConditionOperationImpl } from './conditionOperation.js';
|
|
2
|
+
export class ConditionImpl {
|
|
3
|
+
constructor(op, key, values, otherProps) {
|
|
4
|
+
this.op = op;
|
|
5
|
+
this.key = key;
|
|
6
|
+
this.values = values;
|
|
7
|
+
this.otherProps = otherProps;
|
|
8
|
+
}
|
|
9
|
+
operation() {
|
|
10
|
+
return new ConditionOperationImpl(this.op);
|
|
11
|
+
}
|
|
12
|
+
conditionKey() {
|
|
13
|
+
return this.key;
|
|
14
|
+
}
|
|
15
|
+
conditionValues() {
|
|
16
|
+
const values = Array.isArray(this.values) ? this.values : [this.values];
|
|
17
|
+
return values.map((v) => String(v));
|
|
18
|
+
}
|
|
19
|
+
valueIsArray() {
|
|
20
|
+
return Array.isArray(this.values);
|
|
21
|
+
}
|
|
22
|
+
operatorKeyPath() {
|
|
23
|
+
return `${this.otherProps.conditionPath}.#${this.op}`;
|
|
24
|
+
}
|
|
25
|
+
operatorValuePath() {
|
|
26
|
+
return `${this.otherProps.conditionPath}.${this.op}`;
|
|
27
|
+
}
|
|
28
|
+
keyPath() {
|
|
29
|
+
return `${this.otherProps.conditionPath}.${this.op}.#${this.key}`;
|
|
30
|
+
}
|
|
31
|
+
valuesPath() {
|
|
32
|
+
return `${this.otherProps.conditionPath}.${this.op}.${this.key}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=condition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../../src/conditions/condition.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAqDzF,MAAM,OAAO,aAAa;IACxB,YACmB,EAAU,EACV,GAAW,EACX,MAA+C,EAC/C,UAEhB;QALgB,OAAE,GAAF,EAAE,CAAQ;QACV,QAAG,GAAH,GAAG,CAAQ;QACX,WAAM,GAAN,MAAM,CAAyC;QAC/C,eAAU,GAAV,UAAU,CAE1B;IACA,CAAC;IAEG,SAAS;QACd,OAAO,IAAI,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC5C,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,eAAe;QACpB,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACvE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC;IAEM,YAAY;QACjB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAEM,eAAe;QACpB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,KAAK,IAAI,CAAC,EAAE,EAAE,CAAA;IACvD,CAAC;IAEM,iBAAiB;QACtB,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,EAAE,CAAA;IACtD,CAAC;IAEM,OAAO;QACZ,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,CAAA;IACnE,CAAC;IAEM,UAAU;QACf,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAA;IAClE,CAAC;CACF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type SetOperator = 'ForAllValues' | 'ForAnyValue';
|
|
2
|
+
/**
|
|
3
|
+
* ConditionOperation is a string that represents the operation of a condition.
|
|
4
|
+
*/
|
|
5
|
+
export interface ConditionOperation {
|
|
6
|
+
/**
|
|
7
|
+
* Returns the set modifier if present.
|
|
8
|
+
*/
|
|
9
|
+
setOperator(): SetOperator | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Returns the base operator of the condition without the set modifier or IfExists.
|
|
12
|
+
*/
|
|
13
|
+
baseOperator(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if the condition operation ends with IfExists.
|
|
16
|
+
*/
|
|
17
|
+
isIfExists(): boolean;
|
|
18
|
+
/**
|
|
19
|
+
* Returns the raw string of the condition operation.
|
|
20
|
+
*/
|
|
21
|
+
value(): string;
|
|
22
|
+
}
|
|
23
|
+
export declare class ConditionOperationImpl implements ConditionOperation {
|
|
24
|
+
private readonly op;
|
|
25
|
+
constructor(op: string);
|
|
26
|
+
setOperator(): SetOperator | undefined;
|
|
27
|
+
isIfExists(): boolean;
|
|
28
|
+
baseOperator(): string;
|
|
29
|
+
value(): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=conditionOperation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionOperation.d.ts","sourceRoot":"","sources":["../../../src/conditions/conditionOperation.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG,aAAa,CAAA;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,WAAW,IAAI,WAAW,GAAG,SAAS,CAAA;IAEtC;;OAEG;IACH,YAAY,IAAI,MAAM,CAAA;IAEtB;;OAEG;IACH,UAAU,IAAI,OAAO,CAAA;IAErB;;OAEG;IACH,KAAK,IAAI,MAAM,CAAA;CAChB;AAID,qBAAa,sBAAuB,YAAW,kBAAkB;IACnD,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM;IAEhC,WAAW,IAAI,WAAW,GAAG,SAAS;IAatC,UAAU,IAAI,OAAO;IAIrB,YAAY,IAAI,MAAM;IAQtB,KAAK,IAAI,MAAM;CAGvB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { caseInsensitiveEndsWith, caseInsensitiveEquals, delimitedSegmentAt, lastDelimitedSegment } from '../utils.js';
|
|
2
|
+
const ifExistsSlice = 'IfExists'.length * -1;
|
|
3
|
+
export class ConditionOperationImpl {
|
|
4
|
+
constructor(op) {
|
|
5
|
+
this.op = op;
|
|
6
|
+
}
|
|
7
|
+
setOperator() {
|
|
8
|
+
if (!this.op.includes(':')) {
|
|
9
|
+
return undefined;
|
|
10
|
+
}
|
|
11
|
+
const setOp = delimitedSegmentAt(this.op, ':', 0);
|
|
12
|
+
if (caseInsensitiveEquals(setOp, 'ForAllValues')) {
|
|
13
|
+
return 'ForAllValues';
|
|
14
|
+
}
|
|
15
|
+
else if (caseInsensitiveEquals(setOp, 'ForAnyValue')) {
|
|
16
|
+
return 'ForAnyValue';
|
|
17
|
+
}
|
|
18
|
+
throw new Error(`Unknown set operator: ${setOp}`);
|
|
19
|
+
}
|
|
20
|
+
isIfExists() {
|
|
21
|
+
return caseInsensitiveEndsWith(this.op, 'IfExists');
|
|
22
|
+
}
|
|
23
|
+
baseOperator() {
|
|
24
|
+
const base = lastDelimitedSegment(this.op, ':');
|
|
25
|
+
if (caseInsensitiveEndsWith(base, 'IfExists')) {
|
|
26
|
+
return base.slice(0, ifExistsSlice);
|
|
27
|
+
}
|
|
28
|
+
return base;
|
|
29
|
+
}
|
|
30
|
+
value() {
|
|
31
|
+
return this.op;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=conditionOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionOperation.js","sourceRoot":"","sources":["../../../src/conditions/conditionOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,aAAa,CAAA;AA6BpB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAE5C,MAAM,OAAO,sBAAsB;IACjC,YAA6B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAEpC,WAAW;QAChB,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAE,CAAA;QAClD,IAAI,qBAAqB,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACjD,OAAO,cAAc,CAAA;QACvB,CAAC;aAAM,IAAI,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACvD,OAAO,aAAa,CAAA;QACtB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;IAEM,UAAU;QACf,OAAO,uBAAuB,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC;IAEM,YAAY;QACjB,MAAM,IAAI,GAAG,oBAAoB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC/C,IAAI,uBAAuB,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAA;QACrC,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type { Action, ActionType, ServiceAction, WildcardAction } from './actions/action.js';
|
|
2
|
+
export type { Condition } from './conditions/condition.js';
|
|
3
|
+
export type { ConditionOperation, SetOperator } from './conditions/conditionOperation.js';
|
|
4
|
+
export { loadPolicy } from './parser.js';
|
|
5
|
+
export type { Policy } from './policies/policy.js';
|
|
6
|
+
export type { AccountPrincipal, AwsPrincipal, CanonicalUserPrincipal, FederatedPrincipal, Principal, PrincipalType, ServicePrincipal, WildcardPrincipal } from './principals/principal.js';
|
|
7
|
+
export type { Resource, ArnResource } from './resources/resource.js';
|
|
8
|
+
export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
|
|
9
|
+
export { lintPolicy, lintResourcePolicy } from './lint/lint.js';
|
|
10
|
+
export { createValidatedPolicy, isValidatedPolicy, type ValidatedPolicy } from './validatedPolicy.js';
|
|
11
|
+
export { validatePolicySyntax, type ValidationError } from './validate/validate.js';
|
|
12
|
+
export { validateEndpointPolicy, validateIdentityPolicy, validateResourceControlPolicy, validateResourcePolicy, validateServiceControlPolicy, validateSessionPolicy, validateTrustPolicy } from './validate/validateTypes.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC5F,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAC1D,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAA;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,sBAAsB,EACtB,kBAAkB,EAClB,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAA;AAClC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACpE,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,SAAS,EACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { loadPolicy } from './parser.js';
|
|
2
|
+
export { lintPolicy, lintResourcePolicy } from './lint/lint.js';
|
|
3
|
+
export { createValidatedPolicy, isValidatedPolicy } from './validatedPolicy.js';
|
|
4
|
+
export { validatePolicySyntax } from './validate/validate.js';
|
|
5
|
+
export { validateEndpointPolicy, validateIdentityPolicy, validateResourceControlPolicy, validateResourcePolicy, validateServiceControlPolicy, validateSessionPolicy, validateTrustPolicy } from './validate/validateTypes.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAsBxC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC/D,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EAElB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,6BAA6B,EAC7B,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA"}
|