@cloud-copilot/iam-policy 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -7
- package/dist/cjs/actions/action.d.ts +2 -2
- package/dist/cjs/actions/action.d.ts.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/validate/validate.d.ts +6 -0
- package/dist/cjs/validate/validate.d.ts.map +1 -0
- package/dist/cjs/validate/validate.js +147 -0
- package/dist/cjs/validate/validate.js.map +1 -0
- package/dist/esm/actions/action.d.ts +2 -2
- package/dist/esm/actions/action.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/validate/validate.d.ts +6 -0
- package/dist/esm/validate/validate.d.ts.map +1 -0
- package/dist/esm/validate/validate.js +144 -0
- package/dist/esm/validate/validate.js.map +1 -0
- package/package.json +4 -2
- package/dist/actions/action.d.ts +0 -51
- package/dist/actions/action.d.ts.map +0 -1
- package/dist/actions/action.js +0 -33
- package/dist/actions/action.js.map +0 -1
- package/dist/actions/actions.test.d.ts +0 -2
- package/dist/actions/actions.test.d.ts.map +0 -1
- package/dist/actions/actions.test.js +0 -91
- package/dist/actions/actions.test.js.map +0 -1
- package/dist/cjs/conditions/conditions.d.ts +0 -15
- package/dist/cjs/conditions/conditions.d.ts.map +0 -1
- package/dist/cjs/conditions/conditions.js +0 -24
- package/dist/cjs/conditions/conditions.js.map +0 -1
- package/dist/cjs/principals/principals.d.ts +0 -21
- package/dist/cjs/principals/principals.d.ts.map +0 -1
- package/dist/cjs/principals/principals.js +0 -35
- package/dist/cjs/principals/principals.js.map +0 -1
- package/dist/conditions/condition.d.ts +0 -16
- package/dist/conditions/condition.d.ts.map +0 -1
- package/dist/conditions/condition.js +0 -25
- package/dist/conditions/condition.js.map +0 -1
- package/dist/conditions/conditionOperation.d.ts +0 -31
- package/dist/conditions/conditionOperation.d.ts.map +0 -1
- package/dist/conditions/conditionOperation.js +0 -31
- package/dist/conditions/conditionOperation.js.map +0 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/parser.d.ts +0 -9
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js +0 -14
- package/dist/parser.js.map +0 -1
- package/dist/policies/policy.d.ts +0 -14
- package/dist/policies/policy.d.ts.map +0 -1
- package/dist/policies/policy.js +0 -21
- package/dist/policies/policy.js.map +0 -1
- package/dist/policies/policy.test.d.ts +0 -2
- package/dist/policies/policy.test.d.ts.map +0 -1
- package/dist/policies/policy.test.js +0 -74
- package/dist/policies/policy.test.js.map +0 -1
- package/dist/principals/principal.d.ts +0 -21
- package/dist/principals/principal.d.ts.map +0 -1
- package/dist/principals/principal.js +0 -35
- package/dist/principals/principal.js.map +0 -1
- package/dist/resources/resource.d.ts +0 -20
- package/dist/resources/resource.d.ts.map +0 -1
- package/dist/resources/resource.js +0 -18
- package/dist/resources/resource.js.map +0 -1
- package/dist/resources/resource.test.d.ts +0 -2
- package/dist/resources/resource.test.d.ts.map +0 -1
- package/dist/resources/resource.test.js +0 -35
- package/dist/resources/resource.test.js.map +0 -1
- package/dist/statements/statement.d.ts +0 -146
- package/dist/statements/statement.d.ts.map +0 -1
- package/dist/statements/statement.js +0 -121
- package/dist/statements/statement.js.map +0 -1
- package/dist/statements/statement.test.d.ts +0 -2
- package/dist/statements/statement.test.d.ts.map +0 -1
- package/dist/statements/statement.test.js +0 -479
- package/dist/statements/statement.test.js.map +0 -1
- package/dist/utils.d.ts +0 -8
- package/dist/utils.d.ts.map +0 -1
- package/dist/utils.js +0 -13
- package/dist/utils.js.map +0 -1
package/README.md
CHANGED
@@ -1,14 +1,82 @@
|
|
1
|
-
# IAM Policy Parser
|
1
|
+
# IAM Policy Syntax Validator and Parser
|
2
2
|
|
3
|
-
This is a simple IAM policy library that allows you parse and navigate IAM policies without worring about the more difficult details of parsing policies.
|
3
|
+
This is a simple IAM policy library that allows you to safely parse and navigate IAM policies without worring about the more difficult details of parsing policies or validating syntax.
|
4
4
|
|
5
5
|
This may be updated in the future to allow modifying policies, right now it's read-only.
|
6
6
|
|
7
|
-
|
7
|
+
## Validate Policy Syntax with `validatePolicySyntax`
|
8
|
+
`validatePolicySyntax` is a syntax linter and will not validate the the policy is logical, secure, or correct.
|
8
9
|
|
9
|
-
|
10
|
+
This will take any object and return back an array of findings. If the array is empty then the policy is valid.
|
11
|
+
```typescript
|
12
|
+
import { validatePolicySyntax } from '@cloud-copilot/iam-policy'
|
13
|
+
|
14
|
+
validatePolicySyntax({
|
15
|
+
"Version": "2012-10-17",
|
16
|
+
"Statement": [
|
17
|
+
{
|
18
|
+
"Sid": "VisualEditor0",
|
19
|
+
"Effect": "Allow",
|
20
|
+
"Action": "s3:GetObject",
|
21
|
+
"Resource": "arn:aws:s3:::mybucket/*"
|
22
|
+
}
|
23
|
+
]
|
24
|
+
}); // []
|
25
|
+
|
26
|
+
validatePolicySyntax({
|
27
|
+
"Version": "2012-10-17",
|
28
|
+
"Statement": [
|
29
|
+
{
|
30
|
+
"Sid": 7,
|
31
|
+
"Effect": "Allow",
|
32
|
+
"Action": "s3:GetObject",
|
33
|
+
"Resource": "arn:aws:s3:::mybucket/*"
|
34
|
+
}
|
35
|
+
]
|
36
|
+
}); // [{ message: 'Found data type number allowed type(s) are string', path: 'Statement[0].Sid'}]
|
37
|
+
|
38
|
+
|
39
|
+
/* It will attempt to find as many issues as possible in one pass */
|
40
|
+
validatePolicySyntax({
|
41
|
+
"Version": "2012-10-17",
|
42
|
+
"Comment": "Jacob is kewl",
|
43
|
+
"Statement": [
|
44
|
+
{
|
45
|
+
"Sid": "SomeStatement",
|
46
|
+
"Effect": 7,
|
47
|
+
"Action": "s3:GetObject",
|
48
|
+
"Resource": "arn:aws:s3:::mybucket/*"
|
49
|
+
}, {
|
50
|
+
"Sid": "SomeStatement",
|
51
|
+
"Effect": ["Allow"],
|
52
|
+
"Action": "s3:GetObject",
|
53
|
+
"Resource": "arn:aws:s3:::mybucket/*",
|
54
|
+
"Condition": {
|
55
|
+
"NumericLessThan": {
|
56
|
+
"s3:max-keys": 7,
|
57
|
+
},
|
58
|
+
"StringLike": {
|
59
|
+
"s3:authType": new RegExp(/REST.*/),
|
60
|
+
"aws:TagKeys/Foo": ["Bar*", "Baz*"]
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
]
|
65
|
+
}); /*
|
66
|
+
[
|
67
|
+
{ message: 'Invalid key Comment', path: 'Comment' },
|
68
|
+
{ message: 'Effect must be present and exactly "Allow" or "Deny"', path: 'Statement[0].Effect' },
|
69
|
+
{ message: 'Effect must be present and exactly "Allow" or "Deny"', path: 'Statement[1].Effect' },
|
70
|
+
{ message: 'Found data type number allowed type(s) are string', path: 'Statement[1].Condition.NumericLessThan s3:max-keys' },
|
71
|
+
{ message: 'Found data type object allowed type(s) are string', path: 'Statement[1].Condition.StringLike.s3:authType' }
|
72
|
+
]
|
73
|
+
*/
|
74
|
+
```
|
75
|
+
|
76
|
+
## IAM Policy Parsing and Processing with `loadPolicy`
|
77
|
+
`loadPolicy` _**does not validate policies**_, if you want validation ahead of time use `validatePolicySyntax`.
|
10
78
|
|
11
|
-
|
79
|
+
### Normalizes Policy Elements that are Objects/Array of Objects or String/Array of Strings
|
12
80
|
```typescript
|
13
81
|
import{ loadPolicy } from '@cloud-copilot/iam-policy'
|
14
82
|
|
@@ -49,7 +117,7 @@ console.log(p2.statements()[0].sid()); //ObjectStatement
|
|
49
117
|
|
50
118
|
There is similar support for condition values, principals, and resources.
|
51
119
|
|
52
|
-
|
120
|
+
### Mutually Exclusive or Optional Policy Elements
|
53
121
|
|
54
122
|
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.
|
55
123
|
|
@@ -86,7 +154,7 @@ if(statement.isNotActionStatement()) {
|
|
86
154
|
|
87
155
|
There is similar support for `Action`, `NotAction`, `Principal`, `NotPrincipal`, `Resource`, and `NotResource` elements.
|
88
156
|
|
89
|
-
|
157
|
+
### Flatten Complex Structures
|
90
158
|
|
91
159
|
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.
|
92
160
|
|
@@ -14,11 +14,11 @@ export interface Action {
|
|
14
14
|
/**
|
15
15
|
* Whether the action is a wildcard action: `"*"`
|
16
16
|
*/
|
17
|
-
isWildcardAction():
|
17
|
+
isWildcardAction(): this is WildcardAction;
|
18
18
|
/**
|
19
19
|
* Whether the action is a service action: `"service:Action"`
|
20
20
|
*/
|
21
|
-
isServiceAction():
|
21
|
+
isServiceAction(): this is ServiceAction;
|
22
22
|
}
|
23
23
|
/**
|
24
24
|
* A wildcard action: `"*"`
|
@@ -1 +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,
|
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;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,MAAM,EAAG,cAAc,EAAE,aAAa;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEtC,IAAI,IAAI,UAAU;IAOlB,KAAK,IAAI,MAAM;IAIf,gBAAgB,IAAI,IAAI,IAAI,cAAc;IAI1C,eAAe,IAAI,IAAI,IAAI,aAAa;IAIxC,OAAO,IAAI,MAAM;IAIjB,MAAM,IAAI,MAAM;CAGxB"}
|
package/dist/cjs/index.d.ts
CHANGED
@@ -6,4 +6,5 @@ export type { Policy } from './policies/policy.js';
|
|
6
6
|
export type { Principal, PrincipalType } from './principals/principal.js';
|
7
7
|
export type { Resource } from './resources/resource.js';
|
8
8
|
export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
|
9
|
+
export { validatePolicySyntax, type ValidationError } from './validate/validate.js';
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/cjs/index.d.ts.map
CHANGED
@@ -1 +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,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA"}
|
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,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACnL,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/cjs/index.js
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.loadPolicy = void 0;
|
3
|
+
exports.validatePolicySyntax = exports.loadPolicy = void 0;
|
4
4
|
var parser_js_1 = require("./parser.js");
|
5
5
|
Object.defineProperty(exports, "loadPolicy", { enumerable: true, get: function () { return parser_js_1.loadPolicy; } });
|
6
|
+
var validate_js_1 = require("./validate/validate.js");
|
7
|
+
Object.defineProperty(exports, "validatePolicySyntax", { enumerable: true, get: function () { return validate_js_1.validatePolicySyntax; } });
|
6
8
|
//# sourceMappingURL=index.js.map
|
package/dist/cjs/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAGA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAGA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA;AAKnB,sDAAmF;AAA1E,mHAAA,oBAAoB,OAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAOD,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe,EAAE,CA4B3E"}
|
@@ -0,0 +1,147 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.validatePolicySyntax = validatePolicySyntax;
|
4
|
+
const allowedPolicyKeys = new Set(['Version', 'Statement', 'Id']);
|
5
|
+
const allowedStatementKeys = new Set(['Sid', 'Effect', 'Action', 'NotAction', 'Resource', 'NotResource', 'Principal', 'NotPrincipal', 'Condition']);
|
6
|
+
const allowedPrincipalKeys = new Set(['AWS', 'Service', 'Federated', 'CanonicalUser']);
|
7
|
+
function validatePolicySyntax(policyDocument) {
|
8
|
+
const allErrors = [];
|
9
|
+
if (typeof policyDocument !== 'object') {
|
10
|
+
return [{ path: '', message: `Policy must be an object, received type ${typeof policyDocument}` }];
|
11
|
+
}
|
12
|
+
else if (Array.isArray(policyDocument)) {
|
13
|
+
return [{ path: '', message: 'Policy must be an object, received an array' }];
|
14
|
+
}
|
15
|
+
allErrors.push(...validateKeys(policyDocument, allowedPolicyKeys, ''));
|
16
|
+
allErrors.push(...validateDataTypeIfExists(policyDocument.Version, 'Version', 'string'));
|
17
|
+
allErrors.push(...validateDataTypeIfExists(policyDocument.Id, 'Id', 'string'));
|
18
|
+
if (!policyDocument.Statement) {
|
19
|
+
allErrors.push({
|
20
|
+
path: 'Statement',
|
21
|
+
message: 'Statement is required',
|
22
|
+
});
|
23
|
+
}
|
24
|
+
allErrors.push(...validateTypeOrArrayOfTypeIfExists(policyDocument.Statement, 'Statement', ['object']));
|
25
|
+
if (typeof policyDocument.Statement === 'object' && !Array.isArray(policyDocument.Statement)) {
|
26
|
+
allErrors.push(...validateStatement(policyDocument.Statement, 'Statement'));
|
27
|
+
}
|
28
|
+
else if (Array.isArray(policyDocument.Statement)) {
|
29
|
+
for (let i = 0; i < policyDocument.Statement.length; i++) {
|
30
|
+
allErrors.push(...validateStatement(policyDocument.Statement[i], `Statement[${i}]`));
|
31
|
+
}
|
32
|
+
}
|
33
|
+
return allErrors;
|
34
|
+
}
|
35
|
+
function validateStatement(statement, path) {
|
36
|
+
const statementErrors = [];
|
37
|
+
statementErrors.push(...validateKeys(statement, allowedStatementKeys, path));
|
38
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Sid, `${path}.Sid`, 'string'));
|
39
|
+
if (statement.Effect !== 'Allow' && statement.Effect !== 'Deny') {
|
40
|
+
statementErrors.push({ path: `${path}.Effect`, message: `Effect must be present and exactly "Allow" or "Deny"` });
|
41
|
+
}
|
42
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.Action, `${path}.Action`, 'string'));
|
43
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.NotAction, `${path}.NotAction`, 'string'));
|
44
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.Resource, `${path}.Resource`, 'string'));
|
45
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.NotResource, `${path}.NotResource`, 'string'));
|
46
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Principal, `${path}.Principal`, ['string', 'object']));
|
47
|
+
statementErrors.push(...validateDataTypeIfExists(statement.NotPrincipal, `${path}.NotPrincipal`, ['string', 'object']));
|
48
|
+
statementErrors.push(...validatePrincipal(statement.Principal, `${path}.Principal`));
|
49
|
+
statementErrors.push(...validatePrincipal(statement.NotPrincipal, `${path}.NotPrincipal`));
|
50
|
+
statementErrors.push(...validateCondition(statement.Condition, `${path}.Condition`));
|
51
|
+
return statementErrors;
|
52
|
+
}
|
53
|
+
function validatePrincipal(principal, path) {
|
54
|
+
const principalErrors = [];
|
55
|
+
if (principal === undefined || typeof principal === 'string') {
|
56
|
+
return [];
|
57
|
+
}
|
58
|
+
if (typeof principal === 'object') {
|
59
|
+
principalErrors.push(...validateKeys(principal, allowedPrincipalKeys, path));
|
60
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.AWS, `${path}.AWS`, 'string'));
|
61
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Service, `${path}.Service`, 'string'));
|
62
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Federated, `${path}.Federated`, 'string'));
|
63
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.CanonicalUser, `${path}.CanonicalUser`, 'string'));
|
64
|
+
}
|
65
|
+
return principalErrors;
|
66
|
+
}
|
67
|
+
function validateCondition(condition, path) {
|
68
|
+
const conditionErrors = [];
|
69
|
+
if (condition === undefined) {
|
70
|
+
return [];
|
71
|
+
}
|
72
|
+
conditionErrors.push(...validateDataTypeIfExists(condition, path, 'object'));
|
73
|
+
if (typeof condition !== 'object') {
|
74
|
+
return conditionErrors;
|
75
|
+
}
|
76
|
+
else if (Array.isArray(condition)) {
|
77
|
+
conditionErrors.push({
|
78
|
+
message: 'Condition must be an object, found an array',
|
79
|
+
path
|
80
|
+
});
|
81
|
+
return conditionErrors;
|
82
|
+
}
|
83
|
+
const conditionOperators = Object.keys(condition);
|
84
|
+
for (const operator of conditionOperators) {
|
85
|
+
conditionErrors.push(...validateDataTypeIfExists(condition[operator], `${path}.${operator}`, 'object'));
|
86
|
+
if (Array.isArray(condition[operator])) {
|
87
|
+
conditionErrors.push({
|
88
|
+
message: 'Condition operator must be an object, found an array',
|
89
|
+
path: `${path}.${operator}`
|
90
|
+
});
|
91
|
+
}
|
92
|
+
if (typeof condition[operator] === 'object' && !Array.isArray(condition[operator])) {
|
93
|
+
const conditionKeys = Object.keys(condition[operator]);
|
94
|
+
for (const key of conditionKeys) {
|
95
|
+
conditionErrors.push(...validateTypeOrArrayOfTypeIfExists(condition[operator][key], `${path}.${operator}.${key}`, 'string'));
|
96
|
+
}
|
97
|
+
}
|
98
|
+
}
|
99
|
+
return conditionErrors;
|
100
|
+
}
|
101
|
+
function validateKeys(object, allowedKeys, path) {
|
102
|
+
const keyErrors = [];
|
103
|
+
if (path != '') {
|
104
|
+
path = `${path}.`;
|
105
|
+
}
|
106
|
+
for (const key of Object.keys(object)) {
|
107
|
+
if (!allowedKeys.has(key)) {
|
108
|
+
keyErrors.push({
|
109
|
+
message: `Invalid key ${key}`,
|
110
|
+
path: `${path}${key}`
|
111
|
+
});
|
112
|
+
}
|
113
|
+
}
|
114
|
+
return keyErrors;
|
115
|
+
}
|
116
|
+
function validateTypeOrArrayOfTypeIfExists(value, path, allowedTypes) {
|
117
|
+
if (value === undefined) {
|
118
|
+
return [];
|
119
|
+
}
|
120
|
+
allowedTypes = Array.isArray(allowedTypes) ? allowedTypes : [allowedTypes];
|
121
|
+
const arrayOfTypeErrors = [];
|
122
|
+
if (!Array.isArray(value)) {
|
123
|
+
return validateDataTypeIfExists(value, path, allowedTypes);
|
124
|
+
}
|
125
|
+
else {
|
126
|
+
for (let i = 0; i < value.length; i++) {
|
127
|
+
arrayOfTypeErrors.push(...validateDataTypeIfExists(value[i], `${path}[${i}]`, allowedTypes));
|
128
|
+
}
|
129
|
+
}
|
130
|
+
return arrayOfTypeErrors;
|
131
|
+
}
|
132
|
+
function validateDataTypeIfExists(value, path, allowedDataTypes) {
|
133
|
+
if (value === undefined) {
|
134
|
+
return [];
|
135
|
+
}
|
136
|
+
allowedDataTypes = Array.isArray(allowedDataTypes) ? allowedDataTypes : [allowedDataTypes];
|
137
|
+
const errors = [];
|
138
|
+
const foundDataType = typeof value;
|
139
|
+
if (!allowedDataTypes.includes(foundDataType)) {
|
140
|
+
errors.push({
|
141
|
+
message: `Found data type ${foundDataType} allowed type(s) are ${allowedDataTypes.join(', ')}`,
|
142
|
+
path
|
143
|
+
});
|
144
|
+
}
|
145
|
+
return errors;
|
146
|
+
}
|
147
|
+
//# sourceMappingURL=validate.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"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"}
|
@@ -14,11 +14,11 @@ export interface Action {
|
|
14
14
|
/**
|
15
15
|
* Whether the action is a wildcard action: `"*"`
|
16
16
|
*/
|
17
|
-
isWildcardAction():
|
17
|
+
isWildcardAction(): this is WildcardAction;
|
18
18
|
/**
|
19
19
|
* Whether the action is a service action: `"service:Action"`
|
20
20
|
*/
|
21
|
-
isServiceAction():
|
21
|
+
isServiceAction(): this is ServiceAction;
|
22
22
|
}
|
23
23
|
/**
|
24
24
|
* A wildcard action: `"*"`
|
@@ -1 +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,
|
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;CACzC;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,MAAM,EAAG,cAAc,EAAE,aAAa;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEtC,IAAI,IAAI,UAAU;IAOlB,KAAK,IAAI,MAAM;IAIf,gBAAgB,IAAI,IAAI,IAAI,cAAc;IAI1C,eAAe,IAAI,IAAI,IAAI,aAAa;IAIxC,OAAO,IAAI,MAAM;IAIjB,MAAM,IAAI,MAAM;CAGxB"}
|
package/dist/esm/index.d.ts
CHANGED
@@ -6,4 +6,5 @@ export type { Policy } from './policies/policy.js';
|
|
6
6
|
export type { Principal, PrincipalType } from './principals/principal.js';
|
7
7
|
export type { Resource } from './resources/resource.js';
|
8
8
|
export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
|
9
|
+
export { validatePolicySyntax, type ValidationError } from './validate/validate.js';
|
9
10
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/esm/index.d.ts.map
CHANGED
@@ -1 +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,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA"}
|
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,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACnL,OAAO,EAAE,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAA"}
|
package/dist/esm/index.js
CHANGED
package/dist/esm/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA"}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKxC,OAAO,EAAE,oBAAoB,EAAwB,MAAM,wBAAwB,CAAA"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAOD,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,GAAG,GAAG,eAAe,EAAE,CA4B3E"}
|
@@ -0,0 +1,144 @@
|
|
1
|
+
const allowedPolicyKeys = new Set(['Version', 'Statement', 'Id']);
|
2
|
+
const allowedStatementKeys = new Set(['Sid', 'Effect', 'Action', 'NotAction', 'Resource', 'NotResource', 'Principal', 'NotPrincipal', 'Condition']);
|
3
|
+
const allowedPrincipalKeys = new Set(['AWS', 'Service', 'Federated', 'CanonicalUser']);
|
4
|
+
export function validatePolicySyntax(policyDocument) {
|
5
|
+
const allErrors = [];
|
6
|
+
if (typeof policyDocument !== 'object') {
|
7
|
+
return [{ path: '', message: `Policy must be an object, received type ${typeof policyDocument}` }];
|
8
|
+
}
|
9
|
+
else if (Array.isArray(policyDocument)) {
|
10
|
+
return [{ path: '', message: 'Policy must be an object, received an array' }];
|
11
|
+
}
|
12
|
+
allErrors.push(...validateKeys(policyDocument, allowedPolicyKeys, ''));
|
13
|
+
allErrors.push(...validateDataTypeIfExists(policyDocument.Version, 'Version', 'string'));
|
14
|
+
allErrors.push(...validateDataTypeIfExists(policyDocument.Id, 'Id', 'string'));
|
15
|
+
if (!policyDocument.Statement) {
|
16
|
+
allErrors.push({
|
17
|
+
path: 'Statement',
|
18
|
+
message: 'Statement is required',
|
19
|
+
});
|
20
|
+
}
|
21
|
+
allErrors.push(...validateTypeOrArrayOfTypeIfExists(policyDocument.Statement, 'Statement', ['object']));
|
22
|
+
if (typeof policyDocument.Statement === 'object' && !Array.isArray(policyDocument.Statement)) {
|
23
|
+
allErrors.push(...validateStatement(policyDocument.Statement, 'Statement'));
|
24
|
+
}
|
25
|
+
else if (Array.isArray(policyDocument.Statement)) {
|
26
|
+
for (let i = 0; i < policyDocument.Statement.length; i++) {
|
27
|
+
allErrors.push(...validateStatement(policyDocument.Statement[i], `Statement[${i}]`));
|
28
|
+
}
|
29
|
+
}
|
30
|
+
return allErrors;
|
31
|
+
}
|
32
|
+
function validateStatement(statement, path) {
|
33
|
+
const statementErrors = [];
|
34
|
+
statementErrors.push(...validateKeys(statement, allowedStatementKeys, path));
|
35
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Sid, `${path}.Sid`, 'string'));
|
36
|
+
if (statement.Effect !== 'Allow' && statement.Effect !== 'Deny') {
|
37
|
+
statementErrors.push({ path: `${path}.Effect`, message: `Effect must be present and exactly "Allow" or "Deny"` });
|
38
|
+
}
|
39
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.Action, `${path}.Action`, 'string'));
|
40
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.NotAction, `${path}.NotAction`, 'string'));
|
41
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.Resource, `${path}.Resource`, 'string'));
|
42
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.NotResource, `${path}.NotResource`, 'string'));
|
43
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Principal, `${path}.Principal`, ['string', 'object']));
|
44
|
+
statementErrors.push(...validateDataTypeIfExists(statement.NotPrincipal, `${path}.NotPrincipal`, ['string', 'object']));
|
45
|
+
statementErrors.push(...validatePrincipal(statement.Principal, `${path}.Principal`));
|
46
|
+
statementErrors.push(...validatePrincipal(statement.NotPrincipal, `${path}.NotPrincipal`));
|
47
|
+
statementErrors.push(...validateCondition(statement.Condition, `${path}.Condition`));
|
48
|
+
return statementErrors;
|
49
|
+
}
|
50
|
+
function validatePrincipal(principal, path) {
|
51
|
+
const principalErrors = [];
|
52
|
+
if (principal === undefined || typeof principal === 'string') {
|
53
|
+
return [];
|
54
|
+
}
|
55
|
+
if (typeof principal === 'object') {
|
56
|
+
principalErrors.push(...validateKeys(principal, allowedPrincipalKeys, path));
|
57
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.AWS, `${path}.AWS`, 'string'));
|
58
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Service, `${path}.Service`, 'string'));
|
59
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Federated, `${path}.Federated`, 'string'));
|
60
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.CanonicalUser, `${path}.CanonicalUser`, 'string'));
|
61
|
+
}
|
62
|
+
return principalErrors;
|
63
|
+
}
|
64
|
+
function validateCondition(condition, path) {
|
65
|
+
const conditionErrors = [];
|
66
|
+
if (condition === undefined) {
|
67
|
+
return [];
|
68
|
+
}
|
69
|
+
conditionErrors.push(...validateDataTypeIfExists(condition, path, 'object'));
|
70
|
+
if (typeof condition !== 'object') {
|
71
|
+
return conditionErrors;
|
72
|
+
}
|
73
|
+
else if (Array.isArray(condition)) {
|
74
|
+
conditionErrors.push({
|
75
|
+
message: 'Condition must be an object, found an array',
|
76
|
+
path
|
77
|
+
});
|
78
|
+
return conditionErrors;
|
79
|
+
}
|
80
|
+
const conditionOperators = Object.keys(condition);
|
81
|
+
for (const operator of conditionOperators) {
|
82
|
+
conditionErrors.push(...validateDataTypeIfExists(condition[operator], `${path}.${operator}`, 'object'));
|
83
|
+
if (Array.isArray(condition[operator])) {
|
84
|
+
conditionErrors.push({
|
85
|
+
message: 'Condition operator must be an object, found an array',
|
86
|
+
path: `${path}.${operator}`
|
87
|
+
});
|
88
|
+
}
|
89
|
+
if (typeof condition[operator] === 'object' && !Array.isArray(condition[operator])) {
|
90
|
+
const conditionKeys = Object.keys(condition[operator]);
|
91
|
+
for (const key of conditionKeys) {
|
92
|
+
conditionErrors.push(...validateTypeOrArrayOfTypeIfExists(condition[operator][key], `${path}.${operator}.${key}`, 'string'));
|
93
|
+
}
|
94
|
+
}
|
95
|
+
}
|
96
|
+
return conditionErrors;
|
97
|
+
}
|
98
|
+
function validateKeys(object, allowedKeys, path) {
|
99
|
+
const keyErrors = [];
|
100
|
+
if (path != '') {
|
101
|
+
path = `${path}.`;
|
102
|
+
}
|
103
|
+
for (const key of Object.keys(object)) {
|
104
|
+
if (!allowedKeys.has(key)) {
|
105
|
+
keyErrors.push({
|
106
|
+
message: `Invalid key ${key}`,
|
107
|
+
path: `${path}${key}`
|
108
|
+
});
|
109
|
+
}
|
110
|
+
}
|
111
|
+
return keyErrors;
|
112
|
+
}
|
113
|
+
function validateTypeOrArrayOfTypeIfExists(value, path, allowedTypes) {
|
114
|
+
if (value === undefined) {
|
115
|
+
return [];
|
116
|
+
}
|
117
|
+
allowedTypes = Array.isArray(allowedTypes) ? allowedTypes : [allowedTypes];
|
118
|
+
const arrayOfTypeErrors = [];
|
119
|
+
if (!Array.isArray(value)) {
|
120
|
+
return validateDataTypeIfExists(value, path, allowedTypes);
|
121
|
+
}
|
122
|
+
else {
|
123
|
+
for (let i = 0; i < value.length; i++) {
|
124
|
+
arrayOfTypeErrors.push(...validateDataTypeIfExists(value[i], `${path}[${i}]`, allowedTypes));
|
125
|
+
}
|
126
|
+
}
|
127
|
+
return arrayOfTypeErrors;
|
128
|
+
}
|
129
|
+
function validateDataTypeIfExists(value, path, allowedDataTypes) {
|
130
|
+
if (value === undefined) {
|
131
|
+
return [];
|
132
|
+
}
|
133
|
+
allowedDataTypes = Array.isArray(allowedDataTypes) ? allowedDataTypes : [allowedDataTypes];
|
134
|
+
const errors = [];
|
135
|
+
const foundDataType = typeof value;
|
136
|
+
if (!allowedDataTypes.includes(foundDataType)) {
|
137
|
+
errors.push({
|
138
|
+
message: `Found data type ${foundDataType} allowed type(s) are ${allowedDataTypes.join(', ')}`,
|
139
|
+
path
|
140
|
+
});
|
141
|
+
}
|
142
|
+
return errors;
|
143
|
+
}
|
144
|
+
//# sourceMappingURL=validate.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@cloud-copilot/iam-policy",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.5",
|
4
4
|
"description": "An ORM for AWS IAM policies",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -18,8 +18,10 @@
|
|
18
18
|
"types": "dist/cjs/index.d.ts",
|
19
19
|
"scripts": {
|
20
20
|
"build": "npx tsc -p tsconfig.cjs.json && npx tsc -p tsconfig.esm.json && ./postbuild.sh",
|
21
|
+
"clean": "rm -rf dist",
|
21
22
|
"test": "npx vitest --run --coverage",
|
22
|
-
"
|
23
|
+
"release": "npm run clean && npm run build && npm test && npm publish"
|
24
|
+
|
23
25
|
},
|
24
26
|
"keywords": [
|
25
27
|
"AWS",
|
package/dist/actions/action.d.ts
DELETED
@@ -1,51 +0,0 @@
|
|
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(): boolean;
|
18
|
-
/**
|
19
|
-
* Whether the action is a service action: `"service:Action"`
|
20
|
-
*/
|
21
|
-
isServiceAction(): boolean;
|
22
|
-
}
|
23
|
-
/**
|
24
|
-
* A wildcard action: `"*"`
|
25
|
-
*/
|
26
|
-
export interface WildcardAction extends Action {
|
27
|
-
}
|
28
|
-
/**
|
29
|
-
* A service action: `"service:Action"`
|
30
|
-
*/
|
31
|
-
export interface ServiceAction extends Action {
|
32
|
-
/**
|
33
|
-
* The service of the action
|
34
|
-
*/
|
35
|
-
service(): string;
|
36
|
-
/**
|
37
|
-
* The action within the service
|
38
|
-
*/
|
39
|
-
action(): string;
|
40
|
-
}
|
41
|
-
export declare class ActionImpl implements Action, WildcardAction, ServiceAction {
|
42
|
-
private readonly rawValue;
|
43
|
-
constructor(rawValue: string);
|
44
|
-
type(): ActionType;
|
45
|
-
value(): string;
|
46
|
-
isWildcardAction(): this is WildcardAction;
|
47
|
-
isServiceAction(): this is ServiceAction;
|
48
|
-
service(): string;
|
49
|
-
action(): string;
|
50
|
-
}
|
51
|
-
//# sourceMappingURL=action.d.ts.map
|
@@ -1 +0,0 @@
|
|
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,OAAO,CAAA;IAE3B;;OAEG;IACH,eAAe,IAAI,OAAO,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,MAAM,EAAG,cAAc,EAAE,aAAa;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEtC,IAAI,IAAI,UAAU;IAOlB,KAAK,IAAI,MAAM;IAIf,gBAAgB,IAAI,IAAI,IAAI,cAAc;IAI1C,eAAe,IAAI,IAAI,IAAI,aAAa;IAIxC,OAAO,IAAI,MAAM;IAIjB,MAAM,IAAI,MAAM;CAGxB"}
|