@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,190 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lintPolicy = lintPolicy;
4
+ exports.lintResourcePolicy = lintResourcePolicy;
5
+ exports.findEmptyActions = findEmptyActions;
6
+ exports.findDuplicateSids = findDuplicateSids;
7
+ const validate_js_1 = require("../validate/validate.js");
8
+ const validateTypes_js_1 = require("../validate/validateTypes.js");
9
+ /**
10
+ * Lints an IAM policy document by running all syntax validation checks from
11
+ * {@link validatePolicySyntax} plus additional best-practice checks that AWS
12
+ * technically allows but that may indicate authoring mistakes.
13
+ *
14
+ * @param policyDocument - the raw policy document object to lint
15
+ * @param validationCallbacks - optional callbacks to customize validation behavior per policy type
16
+ * @returns an array of validation errors including both syntax errors and lint warnings
17
+ */
18
+ function lintPolicy(policyDocument, validationCallbacks = {}) {
19
+ const allErrors = (0, validate_js_1.validatePolicySyntax)(policyDocument, validationCallbacks);
20
+ allErrors.push(...findDuplicateSids(policyDocument));
21
+ allErrors.push(...findEmptyActions(policyDocument));
22
+ return allErrors;
23
+ }
24
+ /**
25
+ * Lints a resource policy document. Runs the resource-policy syntax validation
26
+ * plus the generic lint rules and the resource-policy-specific check for
27
+ * statements missing both `Principal` and `NotPrincipal`. AWS accepts such
28
+ * statements syntactically, but they can never match a request.
29
+ *
30
+ * @param policyDocument - the raw resource policy document to lint
31
+ * @returns an array of validation errors including syntax errors and lint warnings
32
+ */
33
+ function lintResourcePolicy(policyDocument) {
34
+ const errors = (0, validateTypes_js_1.validateResourcePolicy)(policyDocument);
35
+ errors.push(...findDuplicateSids(policyDocument));
36
+ errors.push(...findEmptyActions(policyDocument));
37
+ errors.push(...findStatementsWithoutPrincipal(policyDocument));
38
+ return errors;
39
+ }
40
+ /**
41
+ * Finds statements in a resource policy that have neither a `Principal` nor a
42
+ * `NotPrincipal` element. AWS accepts these syntactically but they can never
43
+ * match a request, which is almost always an authoring mistake.
44
+ *
45
+ * @param policyDocument - the raw resource policy document to check
46
+ * @returns an array of validation errors, one for each statement missing both Principal and NotPrincipal
47
+ */
48
+ function findStatementsWithoutPrincipal(policyDocument) {
49
+ if (typeof policyDocument !== 'object' || policyDocument === null) {
50
+ return [];
51
+ }
52
+ const rawStatements = policyDocument.Statement;
53
+ if (rawStatements === undefined) {
54
+ return [];
55
+ }
56
+ const statements = Array.isArray(rawStatements) ? rawStatements : [rawStatements];
57
+ const isArray = Array.isArray(rawStatements);
58
+ const errors = [];
59
+ for (let i = 0; i < statements.length; i++) {
60
+ const statement = statements[i];
61
+ if (typeof statement !== 'object' || statement === null) {
62
+ continue;
63
+ }
64
+ if (statement.Principal === undefined && statement.NotPrincipal === undefined) {
65
+ errors.push({
66
+ path: isArray ? `Statement[${i}]` : 'Statement',
67
+ message: 'One of Principal or NotPrincipal is required in a resource policy'
68
+ });
69
+ }
70
+ }
71
+ return errors;
72
+ }
73
+ /**
74
+ * Checks a single action string for issues with the action part after the
75
+ * colon. Flags two cases:
76
+ * - Empty or whitespace-only action (e.g. "s3:" or "s3: ")
77
+ * - Action containing whitespace (e.g. "s3:GetObject " or "s3: GetObject")
78
+ *
79
+ * AWS technically allows these, but they almost always indicate authoring
80
+ * mistakes.
81
+ *
82
+ * @param action - the raw action string value
83
+ * @param path - the JSON-path location of this action in the policy document
84
+ * @returns an array of validation errors for any issues found
85
+ */
86
+ function lintActionString(action, path) {
87
+ if (typeof action !== 'string') {
88
+ return [];
89
+ }
90
+ const colonIndex = action.indexOf(':');
91
+ if (colonIndex === -1 || action.indexOf(':', colonIndex + 1) !== -1) {
92
+ return [];
93
+ }
94
+ const actionName = action.slice(colonIndex + 1);
95
+ if (actionName.trim().length === 0) {
96
+ return [
97
+ {
98
+ path,
99
+ message: 'Action is empty for the service'
100
+ }
101
+ ];
102
+ }
103
+ if (actionName !== actionName.trim()) {
104
+ return [
105
+ {
106
+ path,
107
+ message: 'Action contains whitespace'
108
+ }
109
+ ];
110
+ }
111
+ return [];
112
+ }
113
+ /**
114
+ * Finds actions in a policy document that have the format "service:" — a
115
+ * service prefix followed by a colon but no action name. AWS allows this
116
+ * but it likely indicates an authoring mistake.
117
+ *
118
+ * @param policyDocument - the raw policy document object to check
119
+ * @returns an array of validation errors, one for each action that has an empty action part
120
+ */
121
+ function findEmptyActions(policyDocument) {
122
+ if (typeof policyDocument !== 'object' || policyDocument === null) {
123
+ return [];
124
+ }
125
+ const statements = Array.isArray(policyDocument.Statement)
126
+ ? policyDocument.Statement
127
+ : policyDocument.Statement !== undefined
128
+ ? [policyDocument.Statement]
129
+ : [];
130
+ const errors = [];
131
+ for (let i = 0; i < statements.length; i++) {
132
+ const statement = statements[i];
133
+ if (typeof statement !== 'object' || statement === null) {
134
+ continue;
135
+ }
136
+ const basePath = Array.isArray(policyDocument.Statement) ? `Statement[${i}]` : 'Statement';
137
+ for (const field of ['Action', 'NotAction']) {
138
+ const value = statement[field];
139
+ if (value === undefined) {
140
+ continue;
141
+ }
142
+ const fieldPath = `${basePath}.${field}`;
143
+ if (typeof value === 'string') {
144
+ errors.push(...lintActionString(value, fieldPath));
145
+ }
146
+ else if (Array.isArray(value)) {
147
+ for (let j = 0; j < value.length; j++) {
148
+ errors.push(...lintActionString(value[j], `${fieldPath}[${j}]`));
149
+ }
150
+ }
151
+ }
152
+ }
153
+ return errors;
154
+ }
155
+ /**
156
+ * Finds duplicate Statement Ids (Sid) within a policy document.
157
+ *
158
+ * AWS allows duplicate Sids in resource policies, but they can indicate
159
+ * copy-paste mistakes or authoring errors.
160
+ *
161
+ * @param policyDocument - the raw policy document object to check
162
+ * @returns an array of validation errors, one for each statement that shares a duplicate Sid
163
+ */
164
+ function findDuplicateSids(policyDocument) {
165
+ if (typeof policyDocument !== 'object' || !Array.isArray(policyDocument?.Statement)) {
166
+ return [];
167
+ }
168
+ const statementIdCounts = policyDocument.Statement.reduce((acc, statement, index) => {
169
+ if (statement.Sid) {
170
+ if (!acc[statement.Sid]) {
171
+ acc[statement.Sid] = [];
172
+ }
173
+ acc[statement.Sid].push(`Statement[${index}].Sid`);
174
+ }
175
+ return acc;
176
+ }, {});
177
+ const errors = [];
178
+ for (const [, paths] of Object.entries(statementIdCounts)) {
179
+ if (paths.length > 1) {
180
+ for (const path of paths) {
181
+ errors.push({
182
+ path,
183
+ message: `Statement Ids (Sid) must be unique`
184
+ });
185
+ }
186
+ }
187
+ }
188
+ return errors;
189
+ }
190
+ //# sourceMappingURL=lint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/lint/lint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ {
2
+ "type": "commonjs"
3
+ }
@@ -0,0 +1,13 @@
1
+ import { type Policy } from './policies/policy.js';
2
+ /**
3
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
4
+ * the raw document and metadata are extracted from it automatically. When both
5
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
6
+ * the explicit metadata takes precedence.
7
+ *
8
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
9
+ * @param metadata optional metadata to attach to the loaded Policy
10
+ * @returns the Policy object for the backing policy document
11
+ */
12
+ export declare function loadPolicy<T = undefined>(policyDocument: any, metadata?: T): Policy<T>;
13
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,sBAAsB,CAAA;AAG9D;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,CAAC,GAAG,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAKtF"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadPolicy = loadPolicy;
4
+ const policy_js_1 = require("./policies/policy.js");
5
+ const validatedPolicy_js_1 = require("./validatedPolicy.js");
6
+ /**
7
+ * Load a Policy from a policy document. If a {@link ValidatedPolicy} is passed,
8
+ * the raw document and metadata are extracted from it automatically. When both
9
+ * the ValidatedPolicy carries metadata and the caller supplies explicit metadata,
10
+ * the explicit metadata takes precedence.
11
+ *
12
+ * @param policyDocument the policy document JSON object, or a ValidatedPolicy
13
+ * @param metadata optional metadata to attach to the loaded Policy
14
+ * @returns the Policy object for the backing policy document
15
+ */
16
+ function loadPolicy(policyDocument, metadata) {
17
+ if ((0, validatedPolicy_js_1.isValidatedPolicy)(policyDocument)) {
18
+ return new policy_js_1.PolicyImpl(policyDocument.policyDocument, metadata ?? policyDocument.metadata);
19
+ }
20
+ return new policy_js_1.PolicyImpl(policyDocument, metadata);
21
+ }
22
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;AAaA,gCAKC;AAlBD,oDAA8D;AAC9D,6DAAwD;AAExD;;;;;;;;;GASG;AACH,SAAgB,UAAU,CAAgB,cAAmB,EAAE,QAAY;IACzE,IAAI,IAAA,sCAAiB,EAAC,cAAc,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,sBAAU,CAAC,cAAc,CAAC,cAAc,EAAE,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAA;IAC3F,CAAC;IACD,OAAO,IAAI,sBAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;AACjD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type Statement } from '../statements/statement.js';
2
+ export interface Policy<T = undefined> {
3
+ /**
4
+ * The version of the policy
5
+ */
6
+ version(): string | undefined;
7
+ /**
8
+ * The ID of the policy
9
+ */
10
+ id(): string | undefined;
11
+ /**
12
+ * The statements in the policy
13
+ */
14
+ statements(): Statement[];
15
+ /**
16
+ * Whether the statement is an array
17
+ */
18
+ statementIsArray(): boolean;
19
+ /**
20
+ * The raw policy object as JSON
21
+ */
22
+ toJSON(): any;
23
+ /**
24
+ * Metadata is any object to store additional information about the policy.
25
+ * Up to you as a user to define the type of the metadata and is optional.
26
+ */
27
+ metadata(): T;
28
+ }
29
+ export declare class PolicyImpl<T = undefined> implements Policy<T> {
30
+ private readonly policyObject;
31
+ private readonly theMetadata?;
32
+ constructor(policyObject: any, theMetadata?: T | undefined);
33
+ version(): string | undefined;
34
+ id(): string | undefined;
35
+ statements(): Statement[];
36
+ private newStatements;
37
+ statementIsArray(): boolean;
38
+ toJSON(): any;
39
+ metadata(): T;
40
+ }
41
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../../src/policies/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAiB,MAAM,4BAA4B,CAAA;AAE1E,MAAM,WAAW,MAAM,CAAC,CAAC,GAAG,SAAS;IACnC;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;IAE7B;;OAEG;IACH,EAAE,IAAI,MAAM,GAAG,SAAS,CAAA;IAExB;;OAEG;IACH,UAAU,IAAI,SAAS,EAAE,CAAA;IAEzB;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAA;IAE3B;;OAEG;IACH,MAAM,IAAI,GAAG,CAAA;IAEb;;;OAGG;IACH,QAAQ,IAAI,CAAC,CAAA;CACd;AAED,qBAAa,UAAU,CAAC,CAAC,GAAG,SAAS,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAEvD,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;gBADZ,YAAY,EAAE,GAAG,EACjB,WAAW,CAAC,EAAE,CAAC,YAAA;IAG3B,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,EAAE,IAAI,MAAM,GAAG,SAAS;IAIxB,UAAU,IAAI,SAAS,EAAE;IAIhC,OAAO,CAAC,aAAa;IASd,gBAAgB,IAAI,OAAO;IAI3B,MAAM,IAAI,GAAG;IAIb,QAAQ,IAAI,CAAC;CAGrB"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolicyImpl = void 0;
4
+ const statement_js_1 = require("../statements/statement.js");
5
+ class PolicyImpl {
6
+ policyObject;
7
+ theMetadata;
8
+ constructor(policyObject, theMetadata) {
9
+ this.policyObject = policyObject;
10
+ this.theMetadata = theMetadata;
11
+ }
12
+ version() {
13
+ return this.policyObject.Version;
14
+ }
15
+ id() {
16
+ return this.policyObject.Id;
17
+ }
18
+ statements() {
19
+ return this.newStatements();
20
+ }
21
+ newStatements() {
22
+ if (!this.statementIsArray()) {
23
+ return [new statement_js_1.StatementImpl(this.policyObject.Statement, 1, { path: 'Statement' })];
24
+ }
25
+ return [this.policyObject.Statement].flat().map((statement, index) => {
26
+ return new statement_js_1.StatementImpl(statement, index + 1, { path: `Statement[${index}]` });
27
+ });
28
+ }
29
+ statementIsArray() {
30
+ return Array.isArray(this.policyObject.Statement);
31
+ }
32
+ toJSON() {
33
+ return this.policyObject;
34
+ }
35
+ metadata() {
36
+ return this.theMetadata;
37
+ }
38
+ }
39
+ exports.PolicyImpl = PolicyImpl;
40
+ //# sourceMappingURL=policy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/policies/policy.ts"],"names":[],"mappings":";;;AAAA,6DAA0E;AAmC1E,MAAa,UAAU;IAEF;IACA;IAFnB,YACmB,YAAiB,EACjB,WAAe;QADf,iBAAY,GAAZ,YAAY,CAAK;QACjB,gBAAW,GAAX,WAAW,CAAI;IAC/B,CAAC;IAEG,OAAO;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA;IAClC,CAAC;IAEM,EAAE;QACP,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAA;IAC7B,CAAC;IAEM,UAAU;QACf,OAAO,IAAI,CAAC,aAAa,EAAE,CAAA;IAC7B,CAAC;IAEO,aAAa;QACnB,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,4BAAa,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAA;QACnF,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,SAAc,EAAE,KAAK,EAAE,EAAE;YACxE,OAAO,IAAI,4BAAa,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE,IAAI,EAAE,aAAa,KAAK,GAAG,EAAE,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;IACJ,CAAC;IAEM,gBAAgB;QACrB,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAA;IACnD,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,WAAgB,CAAA;IAC9B,CAAC;CACF;AAtCD,gCAsCC"}
@@ -0,0 +1,122 @@
1
+ export type PrincipalType = 'AWS' | 'Service' | 'Federated' | 'CanonicalUser';
2
+ /**
3
+ * A Principal in a policy statement
4
+ */
5
+ export interface Principal {
6
+ /**
7
+ * The type of principal, such as "AWS", "Service", "Federated", "CanonicalUser"
8
+ */
9
+ type(): PrincipalType;
10
+ /**
11
+ * The raw string of the principal
12
+ */
13
+ value(): string;
14
+ /**
15
+ * Whether the principal is a wildcard principal: `"*"`
16
+ */
17
+ isWildcardPrincipal(): this is WildcardPrincipal;
18
+ /**
19
+ * Whether the principal is an AWS principal
20
+ */
21
+ isServicePrincipal(): this is ServicePrincipal;
22
+ /**
23
+ * Whether the principal is an AWS principal that is not an account or wildcard principal
24
+ */
25
+ isAwsPrincipal(): this is AwsPrincipal;
26
+ /**
27
+ * Whether the principal is a unique id principal
28
+ */
29
+ isUniqueIdPrincipal(): this is UniqueIdPrincipal;
30
+ /**
31
+ * Whether the principal is a federated principal
32
+ */
33
+ isFederatedPrincipal(): this is FederatedPrincipal;
34
+ /**
35
+ * Whether the principal is a canonical user principal
36
+ */
37
+ isCanonicalUserPrincipal(): this is CanonicalUserPrincipal;
38
+ /**
39
+ * Whether the principal is an account principal
40
+ */
41
+ isAccountPrincipal(): this is AccountPrincipal;
42
+ }
43
+ /**
44
+ * A wildcard principal: `"*"`
45
+ */
46
+ export interface WildcardPrincipal extends Principal {
47
+ /**
48
+ * The wildcard character `"*"`, this exists to differentiate between this interface and the Principal interface
49
+ */
50
+ wildcard(): '*';
51
+ }
52
+ /**
53
+ * An AWS principal: `"arn:aws:iam::account-id:root"` or a 12 digit account id
54
+ */
55
+ export interface AccountPrincipal extends Principal {
56
+ /**
57
+ * The 12 digit account id of the principal
58
+ */
59
+ accountId(): string;
60
+ }
61
+ /**
62
+ * An AWS principal this is an ARN that is not an account or wildcard principal
63
+ */
64
+ export interface AwsPrincipal extends Principal {
65
+ arn(): string;
66
+ }
67
+ /**
68
+ * An AWS principal that is a unique Id
69
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids
70
+ */
71
+ export interface UniqueIdPrincipal extends Principal {
72
+ uniqueId(): string;
73
+ }
74
+ /**
75
+ * An AWS principal that is a service principal: `"service"`
76
+ */
77
+ export interface ServicePrincipal extends Principal {
78
+ /**
79
+ * The service the principal represents
80
+ */
81
+ service(): string;
82
+ }
83
+ /**
84
+ * A federated principal
85
+ */
86
+ export interface FederatedPrincipal extends Principal {
87
+ /**
88
+ * The id of the federated principal
89
+ */
90
+ federated(): string;
91
+ }
92
+ /**
93
+ * A canonical user principal
94
+ */
95
+ export interface CanonicalUserPrincipal extends Principal {
96
+ /**
97
+ * The canonical user id of the principal
98
+ */
99
+ canonicalUser(): string;
100
+ }
101
+ export declare class PrincipalImpl implements Principal, WildcardPrincipal, AccountPrincipal, UniqueIdPrincipal, AwsPrincipal, ServicePrincipal, FederatedPrincipal, CanonicalUserPrincipal {
102
+ private readonly principalType;
103
+ private readonly principalId;
104
+ constructor(principalType: PrincipalType, principalId: string);
105
+ value(): string;
106
+ type(): PrincipalType;
107
+ isWildcardPrincipal(): this is WildcardPrincipal;
108
+ isAccountPrincipal(): this is AccountPrincipal;
109
+ isUniqueIdPrincipal(): this is UniqueIdPrincipal;
110
+ isAwsPrincipal(): this is AwsPrincipal;
111
+ isServicePrincipal(): this is ServicePrincipal;
112
+ isFederatedPrincipal(): this is FederatedPrincipal;
113
+ isCanonicalUserPrincipal(): this is CanonicalUserPrincipal;
114
+ wildcard(): '*';
115
+ accountId(): string;
116
+ uniqueId(): string;
117
+ arn(): string;
118
+ service(): string;
119
+ federated(): string;
120
+ canonicalUser(): string;
121
+ }
122
+ //# sourceMappingURL=principal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../../../src/principals/principal.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAA;AAE7E;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,IAAI,IAAI,aAAa,CAAA;IAErB;;OAEG;IACH,KAAK,IAAI,MAAM,CAAA;IAEf;;OAEG;IACH,mBAAmB,IAAI,IAAI,IAAI,iBAAiB,CAAA;IAEhD;;OAEG;IACH,kBAAkB,IAAI,IAAI,IAAI,gBAAgB,CAAA;IAE9C;;OAEG;IACH,cAAc,IAAI,IAAI,IAAI,YAAY,CAAA;IAEtC;;OAEG;IACH,mBAAmB,IAAI,IAAI,IAAI,iBAAiB,CAAA;IAEhD;;OAEG;IACH,oBAAoB,IAAI,IAAI,IAAI,kBAAkB,CAAA;IAElD;;OAEG;IACH,wBAAwB,IAAI,IAAI,IAAI,sBAAsB,CAAA;IAE1D;;OAEG;IACH,kBAAkB,IAAI,IAAI,IAAI,gBAAgB,CAAA;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD;;OAEG;IACH,SAAS,IAAI,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C,GAAG,IAAI,MAAM,CAAA;CACd;AAED;;;GAGG;AACH,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,QAAQ,IAAI,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IACjD;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD;;OAEG;IACH,SAAS,IAAI,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,SAAS;IACvD;;OAEG;IACH,aAAa,IAAI,MAAM,CAAA;CACxB;AAMD,qBAAa,aACX,YACE,SAAS,EACT,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB;IAGtB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW;gBADX,aAAa,EAAE,aAAa,EAC5B,WAAW,EAAE,MAAM;IAG/B,KAAK,IAAI,MAAM;IAIf,IAAI,IAAI,aAAa;IAIrB,mBAAmB,IAAI,IAAI,IAAI,iBAAiB;IAIhD,kBAAkB,IAAI,IAAI,IAAI,gBAAgB;IAO9C,mBAAmB,IAAI,IAAI,IAAI,iBAAiB;IAOhD,cAAc,IAAI,IAAI,IAAI,YAAY;IAYtC,kBAAkB,IAAI,IAAI,IAAI,gBAAgB;IAI9C,oBAAoB,IAAI,IAAI,IAAI,kBAAkB;IAIlD,wBAAwB,IAAI,IAAI,IAAI,sBAAsB;IAI1D,QAAQ,IAAI,GAAG;IASf,SAAS,IAAI,MAAM;IAYnB,QAAQ,IAAI,MAAM;IASlB,GAAG,IAAI,MAAM;IASb,OAAO,IAAI,MAAM;IASjB,SAAS,IAAI,MAAM;IASnB,aAAa,IAAI,MAAM;CAQ/B"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrincipalImpl = void 0;
4
+ const utils_js_1 = require("../utils.js");
5
+ const accountIdRegex = /^[0-9]{12}$/;
6
+ const accountArnRegex = /^arn:.*?:iam::[0-9]{12}:root$/;
7
+ const uniqueIdRegex = /^A[0-9A-Z]+$/;
8
+ class PrincipalImpl {
9
+ principalType;
10
+ principalId;
11
+ constructor(principalType, principalId) {
12
+ this.principalType = principalType;
13
+ this.principalId = principalId;
14
+ }
15
+ value() {
16
+ return this.principalId;
17
+ }
18
+ type() {
19
+ return this.principalType;
20
+ }
21
+ isWildcardPrincipal() {
22
+ return this.principalType === 'AWS' && (0, utils_js_1.isAllWildcards)(this.principalId);
23
+ }
24
+ isAccountPrincipal() {
25
+ if (this.principalType !== 'AWS') {
26
+ return false;
27
+ }
28
+ return accountIdRegex.test(this.principalId) || accountArnRegex.test(this.principalId);
29
+ }
30
+ isUniqueIdPrincipal() {
31
+ if (this.principalType !== 'AWS') {
32
+ return false;
33
+ }
34
+ return uniqueIdRegex.test(this.principalId);
35
+ }
36
+ isAwsPrincipal() {
37
+ if (this.principalType !== 'AWS') {
38
+ return false;
39
+ }
40
+ const anyThis = this;
41
+ return (!(0, utils_js_1.isAllWildcards)(anyThis.principalId) &&
42
+ !anyThis.isAccountPrincipal() &&
43
+ !anyThis.isUniqueIdPrincipal());
44
+ }
45
+ isServicePrincipal() {
46
+ return this.principalType === 'Service';
47
+ }
48
+ isFederatedPrincipal() {
49
+ return this.principalType === 'Federated';
50
+ }
51
+ isCanonicalUserPrincipal() {
52
+ return this.principalType === 'CanonicalUser';
53
+ }
54
+ wildcard() {
55
+ if (!this.isWildcardPrincipal()) {
56
+ throw new Error('Principal is not a wildcard principal, call isWildcardPrincipal() before calling wildcard()');
57
+ }
58
+ return '*';
59
+ }
60
+ accountId() {
61
+ if (!this.isAccountPrincipal()) {
62
+ throw new Error('Principal is not an account principal, call isAccountPrincipal() before calling accountId()');
63
+ }
64
+ if (accountArnRegex.test(this.principalId)) {
65
+ return (0, utils_js_1.delimitedSegmentAt)(this.principalId, ':', 4);
66
+ }
67
+ return this.principalId;
68
+ }
69
+ uniqueId() {
70
+ if (!this.isUniqueIdPrincipal()) {
71
+ throw new Error('Principal is not a unique id principal, call isUniqueIdPrincipal() before calling uniqueId()');
72
+ }
73
+ return this.principalId;
74
+ }
75
+ arn() {
76
+ if (!this.isAwsPrincipal()) {
77
+ throw new Error('Principal is not an AWS principal, call isAwsPrincipal() before calling arn()');
78
+ }
79
+ return this.principalId;
80
+ }
81
+ service() {
82
+ if (!this.isServicePrincipal()) {
83
+ throw new Error('Principal is not a service principal, call isServicePrincipal() before calling service()');
84
+ }
85
+ return this.principalId;
86
+ }
87
+ federated() {
88
+ if (this.principalType !== 'Federated') {
89
+ throw new Error('Principal is not a federated principal, call isFederatedPrincipal() before calling federated()');
90
+ }
91
+ return this.principalId;
92
+ }
93
+ canonicalUser() {
94
+ if (this.principalType !== 'CanonicalUser') {
95
+ throw new Error('Principal is not a canonical user principal, call isCanonicalUserPrincipal() before calling canonicalUser()');
96
+ }
97
+ return this.principalId;
98
+ }
99
+ }
100
+ exports.PrincipalImpl = PrincipalImpl;
101
+ //# sourceMappingURL=principal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"principal.js","sourceRoot":"","sources":["../../../src/principals/principal.ts"],"names":[],"mappings":";;;AAAA,0CAAgE;AAuHhE,MAAM,cAAc,GAAG,aAAa,CAAA;AACpC,MAAM,eAAe,GAAG,+BAA+B,CAAA;AACvD,MAAM,aAAa,GAAG,cAAc,CAAA;AAEpC,MAAa,aAAa;IAYL;IACA;IAFnB,YACmB,aAA4B,EAC5B,WAAmB;QADnB,kBAAa,GAAb,aAAa,CAAe;QAC5B,gBAAW,GAAX,WAAW,CAAQ;IACnC,CAAC;IAEG,KAAK;QACV,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAEM,mBAAmB;QACxB,OAAO,IAAI,CAAC,aAAa,KAAK,KAAK,IAAI,IAAA,yBAAc,EAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACzE,CAAC;IAEM,kBAAkB;QACvB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IACxF,CAAC;IAEM,mBAAmB;QACxB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;IAC7C,CAAC;IAEM,cAAc;QACnB,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACjC,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,OAAO,GAAQ,IAAI,CAAA;QACzB,OAAO,CACL,CAAC,IAAA,yBAAc,EAAC,OAAO,CAAC,WAAW,CAAC;YACpC,CAAC,OAAO,CAAC,kBAAkB,EAAE;YAC7B,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAC/B,CAAA;IACH,CAAC;IAEM,kBAAkB;QACvB,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,CAAA;IACzC,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,aAAa,KAAK,WAAW,CAAA;IAC3C,CAAC;IAEM,wBAAwB;QAC7B,OAAO,IAAI,CAAC,aAAa,KAAK,eAAe,CAAA;IAC/C,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;QACH,CAAC;QACD,OAAO,GAAG,CAAA;IACZ,CAAC;IAEM,SAAS;QACd,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,6FAA6F,CAC9F,CAAA;QACH,CAAC;QACD,IAAI,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,OAAO,IAAA,6BAAkB,EAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAE,CAAA;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,QAAQ;QACb,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,CAAC;YAChC,MAAM,IAAI,KAAK,CACb,8FAA8F,CAC/F,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,GAAG;QACR,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACb,0FAA0F,CAC3F,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,SAAS;QACd,IAAI,IAAI,CAAC,aAAa,KAAK,WAAW,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CACb,gGAAgG,CACjG,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,aAAa;QAClB,IAAI,IAAI,CAAC,aAAa,KAAK,eAAe,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,6GAA6G,CAC9G,CAAA;QACH,CAAC;QACD,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;CACF;AAnID,sCAmIC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * A resource string in an IAM policy
3
+ */
4
+ export interface Resource {
5
+ /**
6
+ * The raw string of the resource
7
+ */
8
+ value(): string;
9
+ /**
10
+ * Whether the resource is all resources: `"*"`
11
+ */
12
+ isAllResources(): boolean;
13
+ /**
14
+ * Whether the resource is an ARN resource
15
+ */
16
+ isArnResource(): this is ArnResource;
17
+ /**
18
+ * The path to the resource in the policy document
19
+ */
20
+ path(): string;
21
+ }
22
+ export interface ArnResource extends Resource {
23
+ /**
24
+ * The partition of the ARN
25
+ */
26
+ partition(): string;
27
+ /**
28
+ * The service of the ARN
29
+ */
30
+ service(): string;
31
+ /**
32
+ * The region of the ARN
33
+ */
34
+ region(): string;
35
+ /**
36
+ * The account of the ARN
37
+ */
38
+ account(): string;
39
+ /**
40
+ * The resource of the ARN
41
+ */
42
+ resource(): string;
43
+ }
44
+ export declare class ResourceImpl implements Resource, ArnResource {
45
+ private readonly rawValue;
46
+ private readonly otherProps;
47
+ constructor(rawValue: string, otherProps: {
48
+ path: string;
49
+ });
50
+ path(): string;
51
+ partition(): string;
52
+ service(): string;
53
+ region(): string;
54
+ account(): string;
55
+ resource(): string;
56
+ value(): string;
57
+ isAllResources(): boolean;
58
+ isArnResource(): this is ArnResource;
59
+ }
60
+ //# sourceMappingURL=resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/resources/resource.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB;;OAEG;IACH,KAAK,IAAI,MAAM,CAAA;IAEf;;OAEG;IACH,cAAc,IAAI,OAAO,CAAA;IAEzB;;OAEG;IACH,aAAa,IAAI,IAAI,IAAI,WAAW,CAAA;IAEpC;;OAEG;IACH,IAAI,IAAI,MAAM,CAAA;CACf;AAED,MAAM,WAAW,WAAY,SAAQ,QAAQ;IAC3C;;OAEG;IACH,SAAS,IAAI,MAAM,CAAA;IAEnB;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;IAEhB;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,QAAQ,IAAI,MAAM,CAAA;CACnB;AAED,qBAAa,YAAa,YAAW,QAAQ,EAAE,WAAW;IAEtD,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBADV,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE;QAC3B,IAAI,EAAE,MAAM,CAAA;KACb;IAGH,IAAI,IAAI,MAAM;IAId,SAAS,IAAI,MAAM;IASnB,OAAO,IAAI,MAAM;IASjB,MAAM,IAAI,MAAM;IAShB,OAAO,IAAI,MAAM;IASjB,QAAQ,IAAI,MAAM;IASlB,KAAK,IAAI,MAAM;IAIf,cAAc,IAAI,OAAO;IAIzB,aAAa,IAAI,IAAI,IAAI,WAAW;CAGrC"}