@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.
Files changed (125) hide show
  1. package/LICENSE.txt +661 -0
  2. package/README.md +244 -0
  3. package/dist/cjs/actions/action.d.ts +68 -0
  4. package/dist/cjs/actions/action.d.ts.map +1 -0
  5. package/dist/cjs/actions/action.js +41 -0
  6. package/dist/cjs/actions/action.js.map +1 -0
  7. package/dist/cjs/conditions/condition.d.ts +62 -0
  8. package/dist/cjs/conditions/condition.d.ts.map +1 -0
  9. package/dist/cjs/conditions/condition.js +43 -0
  10. package/dist/cjs/conditions/condition.js.map +1 -0
  11. package/dist/cjs/conditions/conditionOperation.d.ts +31 -0
  12. package/dist/cjs/conditions/conditionOperation.d.ts.map +1 -0
  13. package/dist/cjs/conditions/conditionOperation.js +39 -0
  14. package/dist/cjs/conditions/conditionOperation.js.map +1 -0
  15. package/dist/cjs/index.d.ts +13 -0
  16. package/dist/cjs/index.d.ts.map +1 -0
  17. package/dist/cjs/index.js +22 -0
  18. package/dist/cjs/index.js.map +1 -0
  19. package/dist/cjs/lint/lint.d.ts +41 -0
  20. package/dist/cjs/lint/lint.d.ts.map +1 -0
  21. package/dist/cjs/lint/lint.js +190 -0
  22. package/dist/cjs/lint/lint.js.map +1 -0
  23. package/dist/cjs/package.json +3 -0
  24. package/dist/cjs/parser.d.ts +13 -0
  25. package/dist/cjs/parser.d.ts.map +1 -0
  26. package/dist/cjs/parser.js +22 -0
  27. package/dist/cjs/parser.js.map +1 -0
  28. package/dist/cjs/policies/policy.d.ts +41 -0
  29. package/dist/cjs/policies/policy.d.ts.map +1 -0
  30. package/dist/cjs/policies/policy.js +40 -0
  31. package/dist/cjs/policies/policy.js.map +1 -0
  32. package/dist/cjs/principals/principal.d.ts +122 -0
  33. package/dist/cjs/principals/principal.d.ts.map +1 -0
  34. package/dist/cjs/principals/principal.js +101 -0
  35. package/dist/cjs/principals/principal.js.map +1 -0
  36. package/dist/cjs/resources/resource.d.ts +60 -0
  37. package/dist/cjs/resources/resource.d.ts.map +1 -0
  38. package/dist/cjs/resources/resource.js +56 -0
  39. package/dist/cjs/resources/resource.js.map +1 -0
  40. package/dist/cjs/statements/statement.d.ts +227 -0
  41. package/dist/cjs/statements/statement.d.ts.map +1 -0
  42. package/dist/cjs/statements/statement.js +236 -0
  43. package/dist/cjs/statements/statement.js.map +1 -0
  44. package/dist/cjs/utils.d.ts +55 -0
  45. package/dist/cjs/utils.d.ts.map +1 -0
  46. package/dist/cjs/utils.js +100 -0
  47. package/dist/cjs/utils.js.map +1 -0
  48. package/dist/cjs/validate/testutil.d.ts +3 -0
  49. package/dist/cjs/validate/testutil.d.ts.map +1 -0
  50. package/dist/cjs/validate/testutil.js +21 -0
  51. package/dist/cjs/validate/testutil.js.map +1 -0
  52. package/dist/cjs/validate/validate.d.ts +16 -0
  53. package/dist/cjs/validate/validate.d.ts.map +1 -0
  54. package/dist/cjs/validate/validate.js +361 -0
  55. package/dist/cjs/validate/validate.js.map +1 -0
  56. package/dist/cjs/validate/validateTypes.d.ts +53 -0
  57. package/dist/cjs/validate/validateTypes.d.ts.map +1 -0
  58. package/dist/cjs/validate/validateTypes.js +224 -0
  59. package/dist/cjs/validate/validateTypes.js.map +1 -0
  60. package/dist/cjs/validatedPolicy.d.ts +40 -0
  61. package/dist/cjs/validatedPolicy.d.ts.map +1 -0
  62. package/dist/cjs/validatedPolicy.js +30 -0
  63. package/dist/cjs/validatedPolicy.js.map +1 -0
  64. package/dist/esm/actions/action.d.ts +68 -0
  65. package/dist/esm/actions/action.d.ts.map +1 -0
  66. package/dist/esm/actions/action.js +35 -0
  67. package/dist/esm/actions/action.js.map +1 -0
  68. package/dist/esm/conditions/condition.d.ts +62 -0
  69. package/dist/esm/conditions/condition.d.ts.map +1 -0
  70. package/dist/esm/conditions/condition.js +35 -0
  71. package/dist/esm/conditions/condition.js.map +1 -0
  72. package/dist/esm/conditions/conditionOperation.d.ts +31 -0
  73. package/dist/esm/conditions/conditionOperation.d.ts.map +1 -0
  74. package/dist/esm/conditions/conditionOperation.js +34 -0
  75. package/dist/esm/conditions/conditionOperation.js.map +1 -0
  76. package/dist/esm/index.d.ts +13 -0
  77. package/dist/esm/index.d.ts.map +1 -0
  78. package/dist/esm/index.js +6 -0
  79. package/dist/esm/index.js.map +1 -0
  80. package/dist/esm/lint/lint.d.ts +41 -0
  81. package/dist/esm/lint/lint.d.ts.map +1 -0
  82. package/dist/esm/lint/lint.js +184 -0
  83. package/dist/esm/lint/lint.js.map +1 -0
  84. package/dist/esm/package.json +3 -0
  85. package/dist/esm/parser.d.ts +13 -0
  86. package/dist/esm/parser.d.ts.map +1 -0
  87. package/dist/esm/parser.js +19 -0
  88. package/dist/esm/parser.js.map +1 -0
  89. package/dist/esm/policies/policy.d.ts +41 -0
  90. package/dist/esm/policies/policy.d.ts.map +1 -0
  91. package/dist/esm/policies/policy.js +34 -0
  92. package/dist/esm/policies/policy.js.map +1 -0
  93. package/dist/esm/principals/principal.d.ts +122 -0
  94. package/dist/esm/principals/principal.d.ts.map +1 -0
  95. package/dist/esm/principals/principal.js +95 -0
  96. package/dist/esm/principals/principal.js.map +1 -0
  97. package/dist/esm/resources/resource.d.ts +60 -0
  98. package/dist/esm/resources/resource.d.ts.map +1 -0
  99. package/dist/esm/resources/resource.js +50 -0
  100. package/dist/esm/resources/resource.js.map +1 -0
  101. package/dist/esm/statements/statement.d.ts +227 -0
  102. package/dist/esm/statements/statement.d.ts.map +1 -0
  103. package/dist/esm/statements/statement.js +229 -0
  104. package/dist/esm/statements/statement.js.map +1 -0
  105. package/dist/esm/utils.d.ts +55 -0
  106. package/dist/esm/utils.d.ts.map +1 -0
  107. package/dist/esm/utils.js +92 -0
  108. package/dist/esm/utils.js.map +1 -0
  109. package/dist/esm/validate/testutil.d.ts +3 -0
  110. package/dist/esm/validate/testutil.d.ts.map +1 -0
  111. package/dist/esm/validate/testutil.js +19 -0
  112. package/dist/esm/validate/testutil.js.map +1 -0
  113. package/dist/esm/validate/validate.d.ts +16 -0
  114. package/dist/esm/validate/validate.d.ts.map +1 -0
  115. package/dist/esm/validate/validate.js +358 -0
  116. package/dist/esm/validate/validate.js.map +1 -0
  117. package/dist/esm/validate/validateTypes.d.ts +53 -0
  118. package/dist/esm/validate/validateTypes.d.ts.map +1 -0
  119. package/dist/esm/validate/validateTypes.js +215 -0
  120. package/dist/esm/validate/validateTypes.js.map +1 -0
  121. package/dist/esm/validatedPolicy.d.ts +40 -0
  122. package/dist/esm/validatedPolicy.d.ts.map +1 -0
  123. package/dist/esm/validatedPolicy.js +26 -0
  124. package/dist/esm/validatedPolicy.js.map +1 -0
  125. 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,3 @@
1
+ import { type ValidationError } from './validate.js';
2
+ export declare function sortErrors(errors: ValidationError[]): ValidationError[];
3
+ //# sourceMappingURL=testutil.d.ts.map
@@ -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"}