@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
package/README.md
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# IAM Policy Syntax Validator and Parser
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@cloud-copilot/iam-policy) [](LICENSE.txt) [](https://github.com/cloud-copilot/iam-policy/actions/workflows/guarddog.yml) [](https://snyk.io/test/github/cloud-copilot/iam-policy?targetFile=package.json)
|
|
4
|
+
|
|
5
|
+
This is a simple IAM policy library that allows you to safely parse and navigate IAM policies without worrying about the more difficult details of parsing policies or validating syntax.
|
|
6
|
+
|
|
7
|
+
This may be updated in the future to allow modifying policies, right now it's read-only.
|
|
8
|
+
|
|
9
|
+
## Validate Policy Syntax with `validatePolicySyntax`
|
|
10
|
+
|
|
11
|
+
`validatePolicySyntax` is a syntax linter and will not validate the the policy is logical, secure, or correct.
|
|
12
|
+
|
|
13
|
+
This will take any object and return back an array of findings. If the array is empty then the policy is valid.
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { validatePolicySyntax } from '@cloud-copilot/iam-policy'
|
|
17
|
+
|
|
18
|
+
validatePolicySyntax({
|
|
19
|
+
Version: '2012-10-17',
|
|
20
|
+
Statement: [
|
|
21
|
+
{
|
|
22
|
+
Sid: 'VisualEditor0',
|
|
23
|
+
Effect: 'Allow',
|
|
24
|
+
Action: 's3:GetObject',
|
|
25
|
+
Resource: 'arn:aws:s3:::mybucket/*'
|
|
26
|
+
}
|
|
27
|
+
]
|
|
28
|
+
}) // []
|
|
29
|
+
|
|
30
|
+
validatePolicySyntax({
|
|
31
|
+
Version: '2012-10-17',
|
|
32
|
+
Statement: [
|
|
33
|
+
{
|
|
34
|
+
Sid: 7,
|
|
35
|
+
Effect: 'Allow',
|
|
36
|
+
Action: 's3:GetObject',
|
|
37
|
+
Resource: 'arn:aws:s3:::mybucket/*'
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
}) // [{ message: 'Found data type number allowed type(s) are string', path: 'Statement[0].Sid'}]
|
|
41
|
+
|
|
42
|
+
/* It will attempt to find as many issues as possible in one pass */
|
|
43
|
+
validatePolicySyntax({
|
|
44
|
+
Version: '2012-10-17',
|
|
45
|
+
Comment: 'Jacob is kewl',
|
|
46
|
+
Statement: [
|
|
47
|
+
{
|
|
48
|
+
Sid: 'SomeStatement',
|
|
49
|
+
Effect: 7,
|
|
50
|
+
Action: 's3:GetObject',
|
|
51
|
+
Resource: 'arn:aws:s3:::mybucket/*'
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
Sid: 'SomeStatement',
|
|
55
|
+
Effect: ['Allow'],
|
|
56
|
+
Action: 's3:GetObject',
|
|
57
|
+
Resource: 'arn:aws:s3:::mybucket/*',
|
|
58
|
+
Condition: {
|
|
59
|
+
NumericLessThan: {
|
|
60
|
+
's3:max-keys': 7
|
|
61
|
+
},
|
|
62
|
+
StringLike: {
|
|
63
|
+
's3:authType': new RegExp(/REST.*/),
|
|
64
|
+
'aws:TagKeys/Foo': ['Bar*', 'Baz*']
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}) /*
|
|
70
|
+
[
|
|
71
|
+
{ message: 'Invalid key Comment', path: 'Comment' },
|
|
72
|
+
{ message: 'Effect must be present and exactly "Allow" or "Deny"', path: 'Statement[0].Effect' },
|
|
73
|
+
{ message: 'Effect must be present and exactly "Allow" or "Deny"', path: 'Statement[1].Effect' },
|
|
74
|
+
{ message: 'Found data type object allowed type(s) are string, boolean, number', path: 'Statement[1].Condition.StringLike.s3:authType' }
|
|
75
|
+
]
|
|
76
|
+
*/
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Validate Specific Policy Types
|
|
80
|
+
|
|
81
|
+
There are functions to validate specific policy types, these do all of the general policy validation and additional checks for the specific policy type. For instance Service Control Policies only allow the Condition element when the Effect is Deny.
|
|
82
|
+
|
|
83
|
+
- `validateIdentityPolicy(policy: any): ValidationError[]`
|
|
84
|
+
- `validateServiceControlPolicy(policy: any): ValidationError[]`
|
|
85
|
+
- `validateResourcePolicy(policy: any): ValidationError[]`
|
|
86
|
+
- `validateTrustPolicy(policy: any): ValidationError[]`
|
|
87
|
+
- `validateResourceControlPolicy(policy: any): ValidationError[]`
|
|
88
|
+
- `validateEndpointPolicy(policy: any): ValidationError[]`
|
|
89
|
+
- `validateSessionPolicy(policy: any): ValidationError[]`
|
|
90
|
+
|
|
91
|
+
## IAM Policy Parsing and Processing with `loadPolicy`
|
|
92
|
+
|
|
93
|
+
`loadPolicy` _**does not validate policies**_, if you want validation ahead of time use `validatePolicySyntax`.
|
|
94
|
+
|
|
95
|
+
### Normalizes Policy Elements that are Objects/Array of Objects or String/Array of Strings
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
import { loadPolicy } from '@cloud-copilot/iam-policy'
|
|
99
|
+
|
|
100
|
+
//Statement can be an array of objects
|
|
101
|
+
const policyOne = {
|
|
102
|
+
Version: '2012-10-17',
|
|
103
|
+
Statement: [
|
|
104
|
+
{
|
|
105
|
+
Sid: 'ArrayStatement',
|
|
106
|
+
Effect: 'Allow',
|
|
107
|
+
Action: ['s3:GetObject'],
|
|
108
|
+
Resource: 'arn:aws:s3:::government-secrets/*'
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
//Statement can also be a single object
|
|
114
|
+
const policyTwo = {
|
|
115
|
+
Version: '2012-10-17',
|
|
116
|
+
Statement: {
|
|
117
|
+
Sid: 'ObjectStatement',
|
|
118
|
+
Effect: 'Allow',
|
|
119
|
+
Action: ['s3:GetObject'],
|
|
120
|
+
Resource: 'arn:aws:s3:::government-secrets/*'
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
//In both cases you can use the `statements` function to get an array of statements
|
|
125
|
+
const p1 = loadPolicy(policyOne)
|
|
126
|
+
const p2 = loadPolicy(policyTwo)
|
|
127
|
+
console.log(p1.statements()[0].sid()) //ArrayStatement
|
|
128
|
+
console.log(p2.statements()[0].sid()) //ObjectStatement
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
There is similar support for condition values, principals, and resources.
|
|
132
|
+
|
|
133
|
+
### Mutually Exclusive or Optional Policy Elements
|
|
134
|
+
|
|
135
|
+
In IAM policies there are some elements that are mutually exclusive. For example, you can't have a `Principal` and a `NotPrincipal` in the same statement. Some elements are completely optional. We leverage the Typescript type system to make sure you only access data that is confirmed to exist in the policy.
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
import{ loadPolicy } from '@cloud-copilot/iam-policy'
|
|
139
|
+
|
|
140
|
+
const actionPolicy = {
|
|
141
|
+
"Version": "2012-10-17",
|
|
142
|
+
"Statement": {
|
|
143
|
+
"Effect": "Allow",
|
|
144
|
+
"Action": [
|
|
145
|
+
"s3:GetObject",
|
|
146
|
+
],
|
|
147
|
+
"Resource": "arn:aws:s3:::government-secrets/*"
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
const p = loadPolicy(actionPolicy);
|
|
152
|
+
const statement = p.statements()[0]; // Get the first statement out
|
|
153
|
+
|
|
154
|
+
statement.actions() // Compile time error because Statement does not the `actions` function
|
|
155
|
+
|
|
156
|
+
if(statement.isActionStatement()) {
|
|
157
|
+
// Type is narrowed to ActionStatement so `actions` is now available
|
|
158
|
+
statement.actions() /
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if(statement.isNotActionStatement()) {
|
|
162
|
+
// Will not exectue because the statement does not have a NotAction element
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
`isNotActionStatement` checks for the presence of the NotAction element and is not the inverse of `isActionStatement`. It's possible for a statement to return false for both `isActionStatement` and `isNotActionStatement` if both elements are absent in the statement.
|
|
167
|
+
|
|
168
|
+
There is similar support for `Action`, `NotAction`, `Principal`, `NotPrincipal`, `Resource`, and `NotResource` elements.
|
|
169
|
+
|
|
170
|
+
### Flatten Complex Structures
|
|
171
|
+
|
|
172
|
+
Simplifies complex elements by flattening them into an array of homogenous objects. For example the Principal value can be a string or an object; the object values can be strings or arrays of strings. We flatten those into an array of objects similar to what you would define in a terraform policy.
|
|
173
|
+
|
|
174
|
+
```typescript
|
|
175
|
+
import { loadPolicy } from '@cloud-copilot/iam-policy'
|
|
176
|
+
|
|
177
|
+
const principalPolicy = {
|
|
178
|
+
Version: '2012-10-17',
|
|
179
|
+
Statement: {
|
|
180
|
+
Effect: 'Allow',
|
|
181
|
+
Principal: {
|
|
182
|
+
AWS: ['arn:aws:iam::123456789012:root', 'arn:aws:iam::123456789013:user/FoxMulder'],
|
|
183
|
+
CanonicalUser: '79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be',
|
|
184
|
+
Federated: 'cognito-identity.amazonaws.com'
|
|
185
|
+
},
|
|
186
|
+
Action: ['s3:GetObject'],
|
|
187
|
+
Resource: 'arn:aws:s3:::government-secrets/*'
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
const p = loadPolicy(principalPolicy)
|
|
192
|
+
|
|
193
|
+
const statement = p.statements()[0] // Get the first statement out
|
|
194
|
+
if (statement.isPrincipalStatement()) {
|
|
195
|
+
//Get an array of 4 Principal objects with a type and value
|
|
196
|
+
const principals = statement.principals()
|
|
197
|
+
principals[0].type() //AWS
|
|
198
|
+
principals[0].value() //arn:aws:iam::123456789012:root
|
|
199
|
+
//and so on
|
|
200
|
+
principals[3].type() //Federated
|
|
201
|
+
principals[3].value() //cognito-identity.amazonaws.com
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
There is similar flattening for the `Condition` element.
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
import { loadPolicy } from '@cloud-copilot/iam-policy'
|
|
209
|
+
|
|
210
|
+
const principalPolicy = {
|
|
211
|
+
Version: '2012-10-17',
|
|
212
|
+
Statement: {
|
|
213
|
+
Effect: 'Allow',
|
|
214
|
+
Principal: {
|
|
215
|
+
AWS: 'arn:aws:iam::123456789012:root'
|
|
216
|
+
},
|
|
217
|
+
Action: ['s3:GetObject'],
|
|
218
|
+
Resource: 'arn:aws:s3:::government-secrets/*',
|
|
219
|
+
Condition: {
|
|
220
|
+
StringEquals: {
|
|
221
|
+
's3:prefix': 'home/${aws:username}',
|
|
222
|
+
'aws:PrincipalOrgID': 'o-1234567890'
|
|
223
|
+
},
|
|
224
|
+
StringLike: {
|
|
225
|
+
's3:authType': 'REST*',
|
|
226
|
+
'aws:TagKeys/Foo': ['Bar*', 'Baz*']
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
const p = loadPolicy(principalPolicy)
|
|
233
|
+
|
|
234
|
+
const statement = p.statements()[0] // Get the first statement out
|
|
235
|
+
|
|
236
|
+
const conditions = statement.conditions()
|
|
237
|
+
conditions[0].operation().value() //StringEquals
|
|
238
|
+
conditions[0].conditionKey() //s3:prefix
|
|
239
|
+
conditions[0].conditionValues() //[ home/${aws:username} ]
|
|
240
|
+
//and so on
|
|
241
|
+
conditions[3].operation().value() //StringLike
|
|
242
|
+
conditions[3].conditionKey() //aws:TagKeys/Foo
|
|
243
|
+
conditions[3].conditionValues() // [Bar*, Baz*]
|
|
244
|
+
```
|
|
@@ -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,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActionImpl = void 0;
|
|
4
|
+
const utils_js_1 = require("../utils.js");
|
|
5
|
+
class ActionImpl {
|
|
6
|
+
rawValue;
|
|
7
|
+
otherProps;
|
|
8
|
+
constructor(rawValue, otherProps) {
|
|
9
|
+
this.rawValue = rawValue;
|
|
10
|
+
this.otherProps = otherProps;
|
|
11
|
+
}
|
|
12
|
+
path() {
|
|
13
|
+
return this.otherProps.path;
|
|
14
|
+
}
|
|
15
|
+
type() {
|
|
16
|
+
if ((0, utils_js_1.isAllWildcards)(this.rawValue)) {
|
|
17
|
+
return 'wildcard';
|
|
18
|
+
}
|
|
19
|
+
return 'service';
|
|
20
|
+
}
|
|
21
|
+
wildcardValue() {
|
|
22
|
+
return '*';
|
|
23
|
+
}
|
|
24
|
+
value() {
|
|
25
|
+
return this.rawValue;
|
|
26
|
+
}
|
|
27
|
+
isWildcardAction() {
|
|
28
|
+
return this.type() === 'wildcard';
|
|
29
|
+
}
|
|
30
|
+
isServiceAction() {
|
|
31
|
+
return this.type() === 'service';
|
|
32
|
+
}
|
|
33
|
+
service() {
|
|
34
|
+
return (0, utils_js_1.delimitedSegmentAt)(this.rawValue, ':', 0).toLowerCase();
|
|
35
|
+
}
|
|
36
|
+
action() {
|
|
37
|
+
return (0, utils_js_1.delimitedSegmentAt)(this.rawValue, ':', 1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.ActionImpl = ActionImpl;
|
|
41
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/actions/action.ts"],"names":[],"mappings":";;;AAAA,0CAAgE;AA+DhE,MAAa,UAAU;IAEF;IACA;IAFnB,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,IAAA,yBAAc,EAAC,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,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAE,CAAC,WAAW,EAAE,CAAA;IACjE,CAAC;IAEM,MAAM;QACX,OAAO,IAAA,6BAAkB,EAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAE,CAAA;IACnD,CAAC;CACF;AA1CD,gCA0CC"}
|
|
@@ -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,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConditionImpl = void 0;
|
|
4
|
+
const conditionOperation_js_1 = require("./conditionOperation.js");
|
|
5
|
+
class ConditionImpl {
|
|
6
|
+
op;
|
|
7
|
+
key;
|
|
8
|
+
values;
|
|
9
|
+
otherProps;
|
|
10
|
+
constructor(op, key, values, otherProps) {
|
|
11
|
+
this.op = op;
|
|
12
|
+
this.key = key;
|
|
13
|
+
this.values = values;
|
|
14
|
+
this.otherProps = otherProps;
|
|
15
|
+
}
|
|
16
|
+
operation() {
|
|
17
|
+
return new conditionOperation_js_1.ConditionOperationImpl(this.op);
|
|
18
|
+
}
|
|
19
|
+
conditionKey() {
|
|
20
|
+
return this.key;
|
|
21
|
+
}
|
|
22
|
+
conditionValues() {
|
|
23
|
+
const values = Array.isArray(this.values) ? this.values : [this.values];
|
|
24
|
+
return values.map((v) => String(v));
|
|
25
|
+
}
|
|
26
|
+
valueIsArray() {
|
|
27
|
+
return Array.isArray(this.values);
|
|
28
|
+
}
|
|
29
|
+
operatorKeyPath() {
|
|
30
|
+
return `${this.otherProps.conditionPath}.#${this.op}`;
|
|
31
|
+
}
|
|
32
|
+
operatorValuePath() {
|
|
33
|
+
return `${this.otherProps.conditionPath}.${this.op}`;
|
|
34
|
+
}
|
|
35
|
+
keyPath() {
|
|
36
|
+
return `${this.otherProps.conditionPath}.${this.op}.#${this.key}`;
|
|
37
|
+
}
|
|
38
|
+
valuesPath() {
|
|
39
|
+
return `${this.otherProps.conditionPath}.${this.op}.${this.key}`;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.ConditionImpl = ConditionImpl;
|
|
43
|
+
//# sourceMappingURL=condition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../../src/conditions/condition.ts"],"names":[],"mappings":";;;AAAA,mEAAyF;AAqDzF,MAAa,aAAa;IAEL;IACA;IACA;IACA;IAJnB,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,8CAAsB,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;AA1CD,sCA0CC"}
|
|
@@ -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,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConditionOperationImpl = void 0;
|
|
4
|
+
const utils_js_1 = require("../utils.js");
|
|
5
|
+
const ifExistsSlice = 'IfExists'.length * -1;
|
|
6
|
+
class ConditionOperationImpl {
|
|
7
|
+
op;
|
|
8
|
+
constructor(op) {
|
|
9
|
+
this.op = op;
|
|
10
|
+
}
|
|
11
|
+
setOperator() {
|
|
12
|
+
if (!this.op.includes(':')) {
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
const setOp = (0, utils_js_1.delimitedSegmentAt)(this.op, ':', 0);
|
|
16
|
+
if ((0, utils_js_1.caseInsensitiveEquals)(setOp, 'ForAllValues')) {
|
|
17
|
+
return 'ForAllValues';
|
|
18
|
+
}
|
|
19
|
+
else if ((0, utils_js_1.caseInsensitiveEquals)(setOp, 'ForAnyValue')) {
|
|
20
|
+
return 'ForAnyValue';
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Unknown set operator: ${setOp}`);
|
|
23
|
+
}
|
|
24
|
+
isIfExists() {
|
|
25
|
+
return (0, utils_js_1.caseInsensitiveEndsWith)(this.op, 'IfExists');
|
|
26
|
+
}
|
|
27
|
+
baseOperator() {
|
|
28
|
+
const base = (0, utils_js_1.lastDelimitedSegment)(this.op, ':');
|
|
29
|
+
if ((0, utils_js_1.caseInsensitiveEndsWith)(base, 'IfExists')) {
|
|
30
|
+
return base.slice(0, ifExistsSlice);
|
|
31
|
+
}
|
|
32
|
+
return base;
|
|
33
|
+
}
|
|
34
|
+
value() {
|
|
35
|
+
return this.op;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
exports.ConditionOperationImpl = ConditionOperationImpl;
|
|
39
|
+
//# sourceMappingURL=conditionOperation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditionOperation.js","sourceRoot":"","sources":["../../../src/conditions/conditionOperation.ts"],"names":[],"mappings":";;;AAAA,0CAKoB;AA6BpB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AAE5C,MAAa,sBAAsB;IACJ;IAA7B,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,IAAA,6BAAkB,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAE,CAAA;QAClD,IAAI,IAAA,gCAAqB,EAAC,KAAK,EAAE,cAAc,CAAC,EAAE,CAAC;YACjD,OAAO,cAAc,CAAA;QACvB,CAAC;aAAM,IAAI,IAAA,gCAAqB,EAAC,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,IAAA,kCAAuB,EAAC,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;IACrD,CAAC;IAEM,YAAY;QACjB,MAAM,IAAI,GAAG,IAAA,+BAAoB,EAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;QAC/C,IAAI,IAAA,kCAAuB,EAAC,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;AA/BD,wDA+BC"}
|
|
@@ -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,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateTrustPolicy = exports.validateSessionPolicy = exports.validateServiceControlPolicy = exports.validateResourcePolicy = exports.validateResourceControlPolicy = exports.validateIdentityPolicy = exports.validateEndpointPolicy = exports.validatePolicySyntax = exports.isValidatedPolicy = exports.createValidatedPolicy = exports.lintResourcePolicy = exports.lintPolicy = exports.loadPolicy = void 0;
|
|
4
|
+
var parser_js_1 = require("./parser.js");
|
|
5
|
+
Object.defineProperty(exports, "loadPolicy", { enumerable: true, get: function () { return parser_js_1.loadPolicy; } });
|
|
6
|
+
var lint_js_1 = require("./lint/lint.js");
|
|
7
|
+
Object.defineProperty(exports, "lintPolicy", { enumerable: true, get: function () { return lint_js_1.lintPolicy; } });
|
|
8
|
+
Object.defineProperty(exports, "lintResourcePolicy", { enumerable: true, get: function () { return lint_js_1.lintResourcePolicy; } });
|
|
9
|
+
var validatedPolicy_js_1 = require("./validatedPolicy.js");
|
|
10
|
+
Object.defineProperty(exports, "createValidatedPolicy", { enumerable: true, get: function () { return validatedPolicy_js_1.createValidatedPolicy; } });
|
|
11
|
+
Object.defineProperty(exports, "isValidatedPolicy", { enumerable: true, get: function () { return validatedPolicy_js_1.isValidatedPolicy; } });
|
|
12
|
+
var validate_js_1 = require("./validate/validate.js");
|
|
13
|
+
Object.defineProperty(exports, "validatePolicySyntax", { enumerable: true, get: function () { return validate_js_1.validatePolicySyntax; } });
|
|
14
|
+
var validateTypes_js_1 = require("./validate/validateTypes.js");
|
|
15
|
+
Object.defineProperty(exports, "validateEndpointPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateEndpointPolicy; } });
|
|
16
|
+
Object.defineProperty(exports, "validateIdentityPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateIdentityPolicy; } });
|
|
17
|
+
Object.defineProperty(exports, "validateResourceControlPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateResourceControlPolicy; } });
|
|
18
|
+
Object.defineProperty(exports, "validateResourcePolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateResourcePolicy; } });
|
|
19
|
+
Object.defineProperty(exports, "validateServiceControlPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateServiceControlPolicy; } });
|
|
20
|
+
Object.defineProperty(exports, "validateSessionPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateSessionPolicy; } });
|
|
21
|
+
Object.defineProperty(exports, "validateTrustPolicy", { enumerable: true, get: function () { return validateTypes_js_1.validateTrustPolicy; } });
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAGA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA;AAsBnB,0CAA+D;AAAtD,qGAAA,UAAU,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AACvC,2DAI6B;AAH3B,2HAAA,qBAAqB,OAAA;AACrB,uHAAA,iBAAiB,OAAA;AAGnB,sDAAmF;AAA1E,mHAAA,oBAAoB,OAAA;AAC7B,gEAQoC;AAPlC,0HAAA,sBAAsB,OAAA;AACtB,0HAAA,sBAAsB,OAAA;AACtB,iIAAA,6BAA6B,OAAA;AAC7B,0HAAA,sBAAsB,OAAA;AACtB,gIAAA,4BAA4B,OAAA;AAC5B,yHAAA,qBAAqB,OAAA;AACrB,uHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ValidationCallbacks, type ValidationError } from '../validate/validate.js';
|
|
2
|
+
/**
|
|
3
|
+
* Lints an IAM policy document by running all syntax validation checks from
|
|
4
|
+
* {@link validatePolicySyntax} plus additional best-practice checks that AWS
|
|
5
|
+
* technically allows but that may indicate authoring mistakes.
|
|
6
|
+
*
|
|
7
|
+
* @param policyDocument - the raw policy document object to lint
|
|
8
|
+
* @param validationCallbacks - optional callbacks to customize validation behavior per policy type
|
|
9
|
+
* @returns an array of validation errors including both syntax errors and lint warnings
|
|
10
|
+
*/
|
|
11
|
+
export declare function lintPolicy(policyDocument: any, validationCallbacks?: ValidationCallbacks): ValidationError[];
|
|
12
|
+
/**
|
|
13
|
+
* Lints a resource policy document. Runs the resource-policy syntax validation
|
|
14
|
+
* plus the generic lint rules and the resource-policy-specific check for
|
|
15
|
+
* statements missing both `Principal` and `NotPrincipal`. AWS accepts such
|
|
16
|
+
* statements syntactically, but they can never match a request.
|
|
17
|
+
*
|
|
18
|
+
* @param policyDocument - the raw resource policy document to lint
|
|
19
|
+
* @returns an array of validation errors including syntax errors and lint warnings
|
|
20
|
+
*/
|
|
21
|
+
export declare function lintResourcePolicy(policyDocument: any): ValidationError[];
|
|
22
|
+
/**
|
|
23
|
+
* Finds actions in a policy document that have the format "service:" — a
|
|
24
|
+
* service prefix followed by a colon but no action name. AWS allows this
|
|
25
|
+
* but it likely indicates an authoring mistake.
|
|
26
|
+
*
|
|
27
|
+
* @param policyDocument - the raw policy document object to check
|
|
28
|
+
* @returns an array of validation errors, one for each action that has an empty action part
|
|
29
|
+
*/
|
|
30
|
+
export declare function findEmptyActions(policyDocument: any): ValidationError[];
|
|
31
|
+
/**
|
|
32
|
+
* Finds duplicate Statement Ids (Sid) within a policy document.
|
|
33
|
+
*
|
|
34
|
+
* AWS allows duplicate Sids in resource policies, but they can indicate
|
|
35
|
+
* copy-paste mistakes or authoring errors.
|
|
36
|
+
*
|
|
37
|
+
* @param policyDocument - the raw policy document object to check
|
|
38
|
+
* @returns an array of validation errors, one for each statement that shares a duplicate Sid
|
|
39
|
+
*/
|
|
40
|
+
export declare function findDuplicateSids(policyDocument: any): ValidationError[];
|
|
41
|
+
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/lint/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAA;AAGhC;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CACxB,cAAc,EAAE,GAAG,EACnB,mBAAmB,GAAE,mBAAwB,GAC5C,eAAe,EAAE,CAKnB;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe,EAAE,CAMzE;AAiFD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe,EAAE,CAoCvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe,EAAE,CA8BxE"}
|