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