@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,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAllWildcards = isAllWildcards;
|
|
4
|
+
exports.delimitedSegmentAt = delimitedSegmentAt;
|
|
5
|
+
exports.lastDelimitedSegment = lastDelimitedSegment;
|
|
6
|
+
exports.delimitedSegmentRemainder = delimitedSegmentRemainder;
|
|
7
|
+
exports.caseInsensitiveEquals = caseInsensitiveEquals;
|
|
8
|
+
exports.caseInsensitiveEndsWith = caseInsensitiveEndsWith;
|
|
9
|
+
/**
|
|
10
|
+
* Checks if a string is all wildcards(*)
|
|
11
|
+
*
|
|
12
|
+
* @param value The value to check if it is a wildcard
|
|
13
|
+
* @returns True if the value is all wildcards, false otherwise
|
|
14
|
+
*/
|
|
15
|
+
function isAllWildcards(value) {
|
|
16
|
+
return value.match(/^\*+$/) !== null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Returns the segment at the requested zero-based index without allocating an
|
|
20
|
+
* array for every segment in the value.
|
|
21
|
+
*
|
|
22
|
+
* @param value - the delimited string to read from
|
|
23
|
+
* @param delimiter - the delimiter that separates segments
|
|
24
|
+
* @param segmentIndex - the zero-based segment index to return
|
|
25
|
+
* @returns the requested segment, or undefined when the index is not present
|
|
26
|
+
*/
|
|
27
|
+
function delimitedSegmentAt(value, delimiter, segmentIndex) {
|
|
28
|
+
let segmentStart = 0;
|
|
29
|
+
for (let currentIndex = 0; currentIndex < segmentIndex; currentIndex++) {
|
|
30
|
+
const delimiterIndex = value.indexOf(delimiter, segmentStart);
|
|
31
|
+
if (delimiterIndex === -1) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
segmentStart = delimiterIndex + delimiter.length;
|
|
35
|
+
}
|
|
36
|
+
const segmentEnd = value.indexOf(delimiter, segmentStart);
|
|
37
|
+
if (segmentEnd === -1) {
|
|
38
|
+
return value.slice(segmentStart);
|
|
39
|
+
}
|
|
40
|
+
return value.slice(segmentStart, segmentEnd);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Returns the last segment of a delimited string without allocating an array for
|
|
44
|
+
* all preceding segments.
|
|
45
|
+
*
|
|
46
|
+
* @param value - the delimited string to read from
|
|
47
|
+
* @param delimiter - the delimiter that separates segments
|
|
48
|
+
* @returns the final segment after the last delimiter, or the whole value if no delimiter exists
|
|
49
|
+
*/
|
|
50
|
+
function lastDelimitedSegment(value, delimiter) {
|
|
51
|
+
const delimiterIndex = value.lastIndexOf(delimiter);
|
|
52
|
+
if (delimiterIndex === -1) {
|
|
53
|
+
return value;
|
|
54
|
+
}
|
|
55
|
+
return value.slice(delimiterIndex + delimiter.length);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Returns the remainder of a delimited string starting at the requested
|
|
59
|
+
* zero-based segment index.
|
|
60
|
+
*
|
|
61
|
+
* @param value - the delimited string to read from
|
|
62
|
+
* @param delimiter - the delimiter that separates segments
|
|
63
|
+
* @param segmentIndex - the zero-based segment index where the remainder starts
|
|
64
|
+
* @returns the substring starting at the requested segment, or undefined when the segment is not present
|
|
65
|
+
*/
|
|
66
|
+
function delimitedSegmentRemainder(value, delimiter, segmentIndex) {
|
|
67
|
+
let segmentStart = 0;
|
|
68
|
+
for (let currentIndex = 0; currentIndex < segmentIndex; currentIndex++) {
|
|
69
|
+
const delimiterIndex = value.indexOf(delimiter, segmentStart);
|
|
70
|
+
if (delimiterIndex === -1) {
|
|
71
|
+
return undefined;
|
|
72
|
+
}
|
|
73
|
+
segmentStart = delimiterIndex + delimiter.length;
|
|
74
|
+
}
|
|
75
|
+
return value.slice(segmentStart);
|
|
76
|
+
}
|
|
77
|
+
const caseInsensitiveCompareOptions = { sensitivity: 'accent' };
|
|
78
|
+
/**
|
|
79
|
+
* Compares two strings without case sensitivity and without lowercasing either
|
|
80
|
+
* value first.
|
|
81
|
+
*
|
|
82
|
+
* @param first - the first string to compare
|
|
83
|
+
* @param second - the second string to compare
|
|
84
|
+
* @returns true when both strings match case-insensitively
|
|
85
|
+
*/
|
|
86
|
+
function caseInsensitiveEquals(first, second) {
|
|
87
|
+
return first.localeCompare(second, undefined, caseInsensitiveCompareOptions) === 0;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Checks whether a value ends with a suffix without case sensitivity and
|
|
91
|
+
* without lowercasing the value first.
|
|
92
|
+
*
|
|
93
|
+
* @param value - the value to check
|
|
94
|
+
* @param suffix - the suffix to compare against the end of the value
|
|
95
|
+
* @returns true when the value ends with the suffix case-insensitively
|
|
96
|
+
*/
|
|
97
|
+
function caseInsensitiveEndsWith(value, suffix) {
|
|
98
|
+
return caseInsensitiveEquals(value.slice(suffix.length * -1), suffix);
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;AAMA,wCAEC;AAWD,gDAmBC;AAUD,oDAMC;AAWD,8DAcC;AAYD,sDAEC;AAUD,0DAEC;AAzGD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,KAAa;IAC1C,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAA;AACtC,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,kBAAkB,CAChC,KAAa,EACb,SAAiB,EACjB,YAAoB;IAEpB,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC;QACvE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC7D,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC,MAAM,CAAA;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;IACzD,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAAC,KAAa,EAAE,SAAiB;IACnE,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;IACnD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,GAAG,SAAS,CAAC,MAAM,CAAC,CAAA;AACvD,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,yBAAyB,CACvC,KAAa,EACb,SAAiB,EACjB,YAAoB;IAEpB,IAAI,YAAY,GAAG,CAAC,CAAA;IACpB,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,YAAY,EAAE,YAAY,EAAE,EAAE,CAAC;QACvE,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAC7D,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC,MAAM,CAAA;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;AAClC,CAAC;AAED,MAAM,6BAA6B,GAAyB,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAA;AAErF;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,KAAa,EAAE,MAAc;IACjE,OAAO,KAAK,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,6BAA6B,CAAC,KAAK,CAAC,CAAA;AACpF,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,uBAAuB,CAAC,KAAa,EAAE,MAAc;IACnE,OAAO,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;AACvE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testutil.d.ts","sourceRoot":"","sources":["../../../src/validate/testutil.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAEpD,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,eAAe,EAAE,CAcvE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.sortErrors = sortErrors;
|
|
4
|
+
function sortErrors(errors) {
|
|
5
|
+
return errors.sort((a, b) => {
|
|
6
|
+
if (a.path < b.path) {
|
|
7
|
+
return -1;
|
|
8
|
+
}
|
|
9
|
+
else if (a.path > b.path) {
|
|
10
|
+
return 1;
|
|
11
|
+
}
|
|
12
|
+
else if (a.message < b.message) {
|
|
13
|
+
return -1;
|
|
14
|
+
}
|
|
15
|
+
else if (a.message > b.message) {
|
|
16
|
+
return 1;
|
|
17
|
+
}
|
|
18
|
+
return 0;
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=testutil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testutil.js","sourceRoot":"","sources":["../../../src/validate/testutil.ts"],"names":[],"mappings":";;AAEA,gCAcC;AAdD,SAAgB,UAAU,CAAC,MAAyB;IAClD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC1B,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3B,OAAO,CAAC,CAAA;QACV,CAAC;aAAM,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,CAAC,CAAA;QACX,CAAC;aAAM,IAAI,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,CAAA;QACV,CAAC;QAED,OAAO,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface ValidationError {
|
|
2
|
+
message: string;
|
|
3
|
+
path: string;
|
|
4
|
+
}
|
|
5
|
+
export interface ValidationCallbacks {
|
|
6
|
+
validateVersion?: (version: any, path: string) => ValidationError[];
|
|
7
|
+
validateStatement?: (statement: any, path: string) => ValidationError[];
|
|
8
|
+
validateAction?: (action: string, path: string) => ValidationError[];
|
|
9
|
+
validateNotAction?: (notAction: string, path: string) => ValidationError[];
|
|
10
|
+
validatePrincipal?: (principal: any, path: string) => ValidationError[];
|
|
11
|
+
validateNotPrincipal?: (notPrincipal: any, path: string) => ValidationError[];
|
|
12
|
+
validateResource?: (resource: string, path: string) => ValidationError[];
|
|
13
|
+
validateNotResource?: (notResource: string, path: string) => ValidationError[];
|
|
14
|
+
}
|
|
15
|
+
export declare function validatePolicySyntax(policyDocument: any, validationCallbacks?: ValidationCallbacks): ValidationError[];
|
|
16
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/validate/validate.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;CACb;AAsCD,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACnE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACvE,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACpE,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IAC1E,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACvE,oBAAoB,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IAC7E,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;IACxE,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,eAAe,EAAE,CAAA;CAC/E;AAED,wBAAgB,oBAAoB,CAClC,cAAc,EAAE,GAAG,EACnB,mBAAmB,GAAE,mBAAwB,GAC5C,eAAe,EAAE,CAuCnB"}
|
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validatePolicySyntax = validatePolicySyntax;
|
|
4
|
+
const utils_js_1 = require("../utils.js");
|
|
5
|
+
const serviceRegex = /^[a-zA-Z0-9-]+$/;
|
|
6
|
+
const actionRegex = /^[a-zA-Z0-9*\?, \-]+$/;
|
|
7
|
+
const allowedPolicyKeys = new Set(['Version', 'Statement', 'Id']);
|
|
8
|
+
const allowedStatementKeys = new Set([
|
|
9
|
+
'Sid',
|
|
10
|
+
'Effect',
|
|
11
|
+
'Action',
|
|
12
|
+
'NotAction',
|
|
13
|
+
'Resource',
|
|
14
|
+
'NotResource',
|
|
15
|
+
'Principal',
|
|
16
|
+
'NotPrincipal',
|
|
17
|
+
'Condition'
|
|
18
|
+
]);
|
|
19
|
+
const allowedPrincipalKeys = new Set(['AWS', 'Service', 'Federated', 'CanonicalUser']);
|
|
20
|
+
const validConditionOperatorPattern = /^[a-zA-Z0-9:]+$/;
|
|
21
|
+
const allowedSetOperators = ['ForAllValues', 'ForAnyValue'];
|
|
22
|
+
/**
|
|
23
|
+
* Checks whether a condition set operator is one of the IAM set operator names,
|
|
24
|
+
* ignoring case without normalizing the candidate string first.
|
|
25
|
+
*
|
|
26
|
+
* @param setOperator - the condition set operator to check
|
|
27
|
+
* @returns true when the set operator is allowed
|
|
28
|
+
*/
|
|
29
|
+
function isAllowedSetOperator(setOperator) {
|
|
30
|
+
for (const allowedSetOperator of allowedSetOperators) {
|
|
31
|
+
if ((0, utils_js_1.caseInsensitiveEquals)(setOperator, allowedSetOperator)) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
function validatePolicySyntax(policyDocument, validationCallbacks = {}) {
|
|
38
|
+
const allErrors = [];
|
|
39
|
+
if (typeof policyDocument !== 'object') {
|
|
40
|
+
return [
|
|
41
|
+
{ path: '', message: `Policy must be an object, received type ${typeof policyDocument}` }
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
else if (Array.isArray(policyDocument)) {
|
|
45
|
+
return [{ path: '', message: 'Policy must be an object, received an array' }];
|
|
46
|
+
}
|
|
47
|
+
allErrors.push(...validateKeys(policyDocument, allowedPolicyKeys, ''));
|
|
48
|
+
if (validationCallbacks.validateVersion) {
|
|
49
|
+
allErrors.push(...validationCallbacks.validateVersion(policyDocument.Version, ''));
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
allErrors.push(...validatePolicyVersion(policyDocument.Version));
|
|
53
|
+
}
|
|
54
|
+
allErrors.push(...validateDataTypeIfExists(policyDocument.Id, 'Id', 'string'));
|
|
55
|
+
if (!policyDocument.Statement) {
|
|
56
|
+
allErrors.push({
|
|
57
|
+
path: '',
|
|
58
|
+
message: 'Statement is required'
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
allErrors.push(...validateTypeOrArrayOfTypeIfExists(policyDocument.Statement, 'Statement', ['object']));
|
|
62
|
+
if (typeof policyDocument.Statement === 'object' && !Array.isArray(policyDocument.Statement)) {
|
|
63
|
+
allErrors.push(...validateStatement(policyDocument.Statement, 'Statement', validationCallbacks));
|
|
64
|
+
}
|
|
65
|
+
else if (Array.isArray(policyDocument.Statement)) {
|
|
66
|
+
for (let i = 0; i < policyDocument.Statement.length; i++) {
|
|
67
|
+
allErrors.push(...validateStatement(policyDocument.Statement[i], `Statement[${i}]`, validationCallbacks));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return allErrors;
|
|
71
|
+
}
|
|
72
|
+
function validatePolicyVersion(version) {
|
|
73
|
+
if (version === undefined || version === null) {
|
|
74
|
+
return [];
|
|
75
|
+
}
|
|
76
|
+
if (typeof version !== 'string') {
|
|
77
|
+
return [
|
|
78
|
+
{
|
|
79
|
+
path: 'Version',
|
|
80
|
+
message: `Version must be a string if present`
|
|
81
|
+
}
|
|
82
|
+
];
|
|
83
|
+
}
|
|
84
|
+
if (version === '2012-10-17' || version === '2008-10-17') {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
return [
|
|
88
|
+
{
|
|
89
|
+
path: 'Version',
|
|
90
|
+
message: `Version must be either "2012-10-17" or "2008-10-17"`
|
|
91
|
+
}
|
|
92
|
+
];
|
|
93
|
+
}
|
|
94
|
+
function validateStatement(statement, path, validationCallbacks) {
|
|
95
|
+
const statementErrors = [];
|
|
96
|
+
statementErrors.push(...validateKeys(statement, allowedStatementKeys, path));
|
|
97
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Sid, `${path}.Sid`, 'string'));
|
|
98
|
+
if (!statement.Effect) {
|
|
99
|
+
statementErrors.push({
|
|
100
|
+
path: `${path}`,
|
|
101
|
+
message: `Effect must be present and exactly "Allow" or "Deny"`
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
else if (statement.Effect !== 'Allow' && statement.Effect !== 'Deny') {
|
|
105
|
+
statementErrors.push({
|
|
106
|
+
path: `${path}.Effect`,
|
|
107
|
+
message: `Effect must be present and exactly "Allow" or "Deny"`
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
statementErrors.push(...(validationCallbacks.validateStatement?.(statement, path) || []));
|
|
111
|
+
statementErrors.push(...validateOnlyOneOf(statement, path, 'Action', 'NotAction'));
|
|
112
|
+
statementErrors.push(...validateOnlyOneOf(statement, path, 'Resource', 'NotResource'));
|
|
113
|
+
statementErrors.push(...validateOnlyOneOf(statement, path, 'Principal', 'NotPrincipal'));
|
|
114
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.Action, `${path}.Action`, 'string'));
|
|
115
|
+
statementErrors.push(...validateTypeOrArrayOfTypeIfExists(statement.NotAction, `${path}.NotAction`, 'string'));
|
|
116
|
+
statementErrors.push(...validateActionIfPresent(statement.Action, `${path}.Action`));
|
|
117
|
+
statementErrors.push(...validateActionIfPresent(statement.NotAction, `${path}.NotAction`));
|
|
118
|
+
statementErrors.push(...validateStringOrArrayStringCallback(statement, 'Action', path, validationCallbacks.validateAction));
|
|
119
|
+
statementErrors.push(...validateStringOrArrayStringCallback(statement, 'NotAction', path, validationCallbacks.validateNotAction));
|
|
120
|
+
statementErrors.push(...validateResource(statement.Resource, `${path}.Resource`));
|
|
121
|
+
statementErrors.push(...validateResource(statement.NotResource, `${path}.NotResource`));
|
|
122
|
+
statementErrors.push(...validateDataTypeIfExists(statement.Principal, `${path}.Principal`, ['string', 'object']));
|
|
123
|
+
statementErrors.push(...validateDataTypeIfExists(statement.NotPrincipal, `${path}.NotPrincipal`, [
|
|
124
|
+
'string',
|
|
125
|
+
'object'
|
|
126
|
+
]));
|
|
127
|
+
statementErrors.push(...validatePrincipal(statement.Principal, `${path}.Principal`));
|
|
128
|
+
statementErrors.push(...validatePrincipal(statement.NotPrincipal, `${path}.NotPrincipal`));
|
|
129
|
+
//TODO: If the condition key exists but there is no value, it is an error
|
|
130
|
+
statementErrors.push(...validateCondition(statement.Condition, `${path}.Condition`));
|
|
131
|
+
return statementErrors;
|
|
132
|
+
}
|
|
133
|
+
function validatePrincipal(principal, path) {
|
|
134
|
+
const principalErrors = [];
|
|
135
|
+
if (principal === undefined || typeof principal === 'string') {
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
if (typeof principal === 'object') {
|
|
139
|
+
principalErrors.push(...validateKeys(principal, allowedPrincipalKeys, path));
|
|
140
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.AWS, `${path}.AWS`, 'string'));
|
|
141
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Service, `${path}.Service`, 'string'));
|
|
142
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.Federated, `${path}.Federated`, 'string'));
|
|
143
|
+
principalErrors.push(...validateTypeOrArrayOfTypeIfExists(principal.CanonicalUser, `${path}.CanonicalUser`, 'string'));
|
|
144
|
+
}
|
|
145
|
+
return principalErrors;
|
|
146
|
+
}
|
|
147
|
+
function validateResource(resource, path) {
|
|
148
|
+
if (resource === undefined) {
|
|
149
|
+
return [];
|
|
150
|
+
}
|
|
151
|
+
if (typeof resource === 'string') {
|
|
152
|
+
return [];
|
|
153
|
+
}
|
|
154
|
+
else if (Array.isArray(resource)) {
|
|
155
|
+
const validationErrors = [];
|
|
156
|
+
for (let i = 0; i < resource.length; i++) {
|
|
157
|
+
if (typeof resource[i] !== 'string') {
|
|
158
|
+
validationErrors.push({
|
|
159
|
+
message: `Resource must be a string or array of strings, found type ${typeof resource[i]}`,
|
|
160
|
+
path: `${path}[${i}]`
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
return validationErrors;
|
|
165
|
+
}
|
|
166
|
+
return [
|
|
167
|
+
{
|
|
168
|
+
path,
|
|
169
|
+
message: `Must be a string or array of strings`
|
|
170
|
+
}
|
|
171
|
+
];
|
|
172
|
+
}
|
|
173
|
+
function validateActionIfPresent(action, path) {
|
|
174
|
+
if (action === undefined || action === null) {
|
|
175
|
+
return [];
|
|
176
|
+
}
|
|
177
|
+
//Type errors are caught elsewhere
|
|
178
|
+
if (typeof action === 'string') {
|
|
179
|
+
return validateActionString(action, path);
|
|
180
|
+
}
|
|
181
|
+
else if (Array.isArray(action)) {
|
|
182
|
+
const actionErrors = [];
|
|
183
|
+
for (let i = 0; i < action.length; i++) {
|
|
184
|
+
const value = action[i];
|
|
185
|
+
if (typeof value === 'string') {
|
|
186
|
+
actionErrors.push(...validateActionString(action[i], `${path}[${i}]`));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return actionErrors;
|
|
190
|
+
}
|
|
191
|
+
return [];
|
|
192
|
+
}
|
|
193
|
+
function validateActionString(string, path) {
|
|
194
|
+
if (string === '*') {
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
const trimmedString = string.trim();
|
|
198
|
+
const firstColonIndex = trimmedString.indexOf(':');
|
|
199
|
+
if (firstColonIndex === -1 || trimmedString.indexOf(':', firstColonIndex + 1) !== -1) {
|
|
200
|
+
return [
|
|
201
|
+
{
|
|
202
|
+
path,
|
|
203
|
+
message: `Action must be a wildcard (*) or have 2 segments`
|
|
204
|
+
}
|
|
205
|
+
];
|
|
206
|
+
}
|
|
207
|
+
const service = trimmedString.slice(0, firstColonIndex);
|
|
208
|
+
const action = trimmedString.slice(firstColonIndex + 1);
|
|
209
|
+
const errors = [];
|
|
210
|
+
if (!serviceRegex.test(service)) {
|
|
211
|
+
errors.push({
|
|
212
|
+
path,
|
|
213
|
+
message: `Service can only contain letters, numbers, and hyphens`
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
if (action.length > 0 && !actionRegex.test(action)) {
|
|
217
|
+
errors.push({
|
|
218
|
+
path,
|
|
219
|
+
message: `Action can only contain letters, numbers, asterisks, question marks, commas, hyphens, and spaces`
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
return errors;
|
|
223
|
+
}
|
|
224
|
+
function validateCondition(condition, path) {
|
|
225
|
+
const conditionErrors = [];
|
|
226
|
+
if (condition === undefined || condition === null) {
|
|
227
|
+
return [];
|
|
228
|
+
}
|
|
229
|
+
conditionErrors.push(...validateDataTypeIfExists(condition, path, 'object'));
|
|
230
|
+
if (typeof condition !== 'object') {
|
|
231
|
+
return conditionErrors;
|
|
232
|
+
}
|
|
233
|
+
else if (Array.isArray(condition)) {
|
|
234
|
+
conditionErrors.push({
|
|
235
|
+
message: 'Condition must be an object, found an array',
|
|
236
|
+
path
|
|
237
|
+
});
|
|
238
|
+
return conditionErrors;
|
|
239
|
+
}
|
|
240
|
+
const conditionOperators = Object.keys(condition);
|
|
241
|
+
for (const operator of conditionOperators) {
|
|
242
|
+
//If not valid pattern
|
|
243
|
+
if (!validConditionOperatorPattern.test(operator)) {
|
|
244
|
+
conditionErrors.push({
|
|
245
|
+
path: `${path}.#${operator}`,
|
|
246
|
+
message: `Condition operator is invalid`
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
const firstColonIndex = operator.indexOf(':');
|
|
250
|
+
if (firstColonIndex !== -1 && operator.indexOf(':', firstColonIndex + 1) !== -1) {
|
|
251
|
+
conditionErrors.push({
|
|
252
|
+
path: `${path}.#${operator}`,
|
|
253
|
+
message: `Condition operator is invalid`
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else if (firstColonIndex !== -1) {
|
|
257
|
+
const setOperator = (0, utils_js_1.delimitedSegmentAt)(operator, ':', 0);
|
|
258
|
+
if (!isAllowedSetOperator(setOperator)) {
|
|
259
|
+
conditionErrors.push({
|
|
260
|
+
path: `${path}.#${operator}`,
|
|
261
|
+
message: `Condition set operator must be either ForAllValues or ForAnyValue`
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
conditionErrors.push(...validateDataTypeIfExists(condition[operator], `${path}.${operator}`, 'object'));
|
|
266
|
+
if (Array.isArray(condition[operator])) {
|
|
267
|
+
conditionErrors.push({
|
|
268
|
+
message: 'Condition operator must be an object, found an array',
|
|
269
|
+
path: `${path}.${operator}`
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
if (typeof condition[operator] === 'object' && !Array.isArray(condition[operator])) {
|
|
273
|
+
const conditionKeys = Object.keys(condition[operator]);
|
|
274
|
+
for (const key of conditionKeys) {
|
|
275
|
+
conditionErrors.push(...validateTypeOrArrayOfTypeIfExists(condition[operator][key], `${path}.${operator}.${key}`, ['string', 'boolean', 'number']));
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return conditionErrors;
|
|
280
|
+
}
|
|
281
|
+
function validateKeys(object, allowedKeys, path) {
|
|
282
|
+
const keyErrors = [];
|
|
283
|
+
for (const key of Object.keys(object)) {
|
|
284
|
+
if (!allowedKeys.has(key)) {
|
|
285
|
+
keyErrors.push({
|
|
286
|
+
message: `Invalid key ${key}`,
|
|
287
|
+
path: `${path}.#${key}`
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
else if (object[key] === undefined || object[key] === null) {
|
|
291
|
+
keyErrors.push({
|
|
292
|
+
message: `If present, ${key} cannot be null or undefined`,
|
|
293
|
+
path: `${path}.${key}`
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return keyErrors;
|
|
298
|
+
}
|
|
299
|
+
function validateTypeOrArrayOfTypeIfExists(value, path, allowedTypes) {
|
|
300
|
+
if (value === undefined) {
|
|
301
|
+
return [];
|
|
302
|
+
}
|
|
303
|
+
allowedTypes = Array.isArray(allowedTypes) ? allowedTypes : [allowedTypes];
|
|
304
|
+
const arrayOfTypeErrors = [];
|
|
305
|
+
if (!Array.isArray(value)) {
|
|
306
|
+
return validateDataTypeIfExists(value, path, allowedTypes);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
for (let i = 0; i < value.length; i++) {
|
|
310
|
+
arrayOfTypeErrors.push(...validateDataTypeIfExists(value[i], `${path}[${i}]`, allowedTypes));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
return arrayOfTypeErrors;
|
|
314
|
+
}
|
|
315
|
+
function validateDataTypeIfExists(value, path, allowedDataTypes) {
|
|
316
|
+
if (value === undefined) {
|
|
317
|
+
return [];
|
|
318
|
+
}
|
|
319
|
+
allowedDataTypes = Array.isArray(allowedDataTypes) ? allowedDataTypes : [allowedDataTypes];
|
|
320
|
+
const errors = [];
|
|
321
|
+
const foundDataType = typeof value;
|
|
322
|
+
if (!allowedDataTypes.includes(foundDataType)) {
|
|
323
|
+
errors.push({
|
|
324
|
+
message: `Found data type ${foundDataType} allowed type(s) are ${allowedDataTypes.join(', ')}`,
|
|
325
|
+
path
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
return errors;
|
|
329
|
+
}
|
|
330
|
+
function validateOnlyOneOf(value, path, firstKey, secondKey) {
|
|
331
|
+
const keys = Object.keys(value);
|
|
332
|
+
if (keys.includes(firstKey) && keys.includes(secondKey)) {
|
|
333
|
+
return [
|
|
334
|
+
{
|
|
335
|
+
message: `Only one of ${firstKey} or ${secondKey} is allowed, found both`,
|
|
336
|
+
path
|
|
337
|
+
}
|
|
338
|
+
];
|
|
339
|
+
}
|
|
340
|
+
return [];
|
|
341
|
+
}
|
|
342
|
+
function validateStringOrArrayStringCallback(statement, fieldName, path, callback) {
|
|
343
|
+
if (statement === undefined || !statement[fieldName] || !callback) {
|
|
344
|
+
return [];
|
|
345
|
+
}
|
|
346
|
+
const value = statement[fieldName];
|
|
347
|
+
path = `${path}.${fieldName}`;
|
|
348
|
+
if (typeof value === 'string') {
|
|
349
|
+
return callback(value, path);
|
|
350
|
+
}
|
|
351
|
+
else if (Array.isArray(value)) {
|
|
352
|
+
const errors = [];
|
|
353
|
+
for (let i = 0; i < value.length; i++) {
|
|
354
|
+
errors.push(...callback(value[i], `${path}[${i}]`));
|
|
355
|
+
}
|
|
356
|
+
return errors;
|
|
357
|
+
}
|
|
358
|
+
//If it's not a string or string array that is caught elsewhere
|
|
359
|
+
return [];
|
|
360
|
+
}
|
|
361
|
+
//# 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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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ValidationError } from './validate.js';
|
|
2
|
+
/**
|
|
3
|
+
* Validates an Identity Policy attached to an IAM role or user, or managed policy
|
|
4
|
+
*
|
|
5
|
+
* @param policy the policy to validate
|
|
6
|
+
* @returns an array of validation errors
|
|
7
|
+
*/
|
|
8
|
+
export declare function validateIdentityPolicy(policy: any): ValidationError[];
|
|
9
|
+
/**
|
|
10
|
+
* Validates a Service Control Policy (SCP)
|
|
11
|
+
*
|
|
12
|
+
* @param policy the policy to validate
|
|
13
|
+
* @returns an array of validation errors
|
|
14
|
+
*/
|
|
15
|
+
export declare function validateServiceControlPolicy(policy: any): ValidationError[];
|
|
16
|
+
/**
|
|
17
|
+
* Validates a Resource Policy attached to an S3 bucket, SQS queue, or other resource. \
|
|
18
|
+
*
|
|
19
|
+
* This is very generic and will not be able to validate all resource policies.
|
|
20
|
+
*
|
|
21
|
+
* @param policy the policy to validate
|
|
22
|
+
* @returns an array of validation errors
|
|
23
|
+
*/
|
|
24
|
+
export declare function validateResourcePolicy(policy: any): ValidationError[];
|
|
25
|
+
/**
|
|
26
|
+
* Validates a Resource Control Policy (RCP)
|
|
27
|
+
*
|
|
28
|
+
* @param policy the policy to validate
|
|
29
|
+
* @returns an array of validation errors
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateResourceControlPolicy(policy: any): ValidationError[];
|
|
32
|
+
/**
|
|
33
|
+
* Validates a Trust Policy attached to a role
|
|
34
|
+
*
|
|
35
|
+
* @param policy the policy to validate
|
|
36
|
+
* @returns an array of validation errors
|
|
37
|
+
*/
|
|
38
|
+
export declare function validateTrustPolicy(policy: any): ValidationError[];
|
|
39
|
+
/**
|
|
40
|
+
* Validates an VPC Endpoint Policy
|
|
41
|
+
*
|
|
42
|
+
* @param policy the policy to validate
|
|
43
|
+
* @returns an array of validation errors
|
|
44
|
+
*/
|
|
45
|
+
export declare function validateEndpointPolicy(policy: any): ValidationError[];
|
|
46
|
+
/**
|
|
47
|
+
* Validates a session policy
|
|
48
|
+
*
|
|
49
|
+
* @param policy the policy to validate
|
|
50
|
+
* @returns an array of validation errors
|
|
51
|
+
*/
|
|
52
|
+
export declare function validateSessionPolicy(policy: any): ValidationError[];
|
|
53
|
+
//# sourceMappingURL=validateTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTypes.d.ts","sourceRoot":"","sources":["../../../src/validate/validateTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AAE1E;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAarE;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAe3E;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CASrE;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAoD5E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAelE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAkBrE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,GAAG,eAAe,EAAE,CAapE"}
|