@cloud-copilot/iam-policy 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +674 -0
- package/README.md +135 -0
- package/dist/cjs/actions/action.d.ts +51 -0
- package/dist/cjs/actions/action.d.ts.map +1 -0
- package/dist/cjs/actions/action.js +33 -0
- package/dist/cjs/actions/action.js.map +1 -0
- package/dist/cjs/conditions/condition.d.ts +15 -0
- package/dist/cjs/conditions/condition.d.ts.map +1 -0
- package/dist/cjs/conditions/condition.js +24 -0
- package/dist/cjs/conditions/condition.js.map +1 -0
- package/dist/cjs/conditions/conditions.d.ts +15 -0
- package/dist/cjs/conditions/conditions.d.ts.map +1 -0
- package/dist/cjs/conditions/conditions.js +24 -0
- package/dist/cjs/conditions/conditions.js.map +1 -0
- package/dist/cjs/index.d.ts +8 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/parser.d.ts +9 -0
- package/dist/cjs/parser.d.ts.map +1 -0
- package/dist/cjs/parser.js +14 -0
- package/dist/cjs/parser.js.map +1 -0
- package/dist/cjs/policies/policy.d.ts +14 -0
- package/dist/cjs/policies/policy.d.ts.map +1 -0
- package/dist/cjs/policies/policy.js +21 -0
- package/dist/cjs/policies/policy.js.map +1 -0
- package/dist/cjs/principals/principal.d.ts +21 -0
- package/dist/cjs/principals/principal.d.ts.map +1 -0
- package/dist/cjs/principals/principal.js +35 -0
- package/dist/cjs/principals/principal.js.map +1 -0
- package/dist/cjs/principals/principals.d.ts +21 -0
- package/dist/cjs/principals/principals.d.ts.map +1 -0
- package/dist/cjs/principals/principals.js +35 -0
- package/dist/cjs/principals/principals.js.map +1 -0
- package/dist/cjs/resources/resource.d.ts +20 -0
- package/dist/cjs/resources/resource.d.ts.map +1 -0
- package/dist/cjs/resources/resource.js +18 -0
- package/dist/cjs/resources/resource.js.map +1 -0
- package/dist/cjs/statements/statement.d.ts +146 -0
- package/dist/cjs/statements/statement.d.ts.map +1 -0
- package/dist/cjs/statements/statement.js +121 -0
- package/dist/cjs/statements/statement.js.map +1 -0
- package/dist/cjs/utils.d.ts +8 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +13 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/actions/action.d.ts +51 -0
- package/dist/esm/actions/action.d.ts.map +1 -0
- package/dist/esm/actions/action.js +28 -0
- package/dist/esm/actions/action.js.map +1 -0
- package/dist/esm/conditions/condition.d.ts +15 -0
- package/dist/esm/conditions/condition.d.ts.map +1 -0
- package/dist/esm/conditions/condition.js +17 -0
- package/dist/esm/conditions/condition.js.map +1 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/parser.d.ts +9 -0
- package/dist/esm/parser.d.ts.map +1 -0
- package/dist/esm/parser.js +11 -0
- package/dist/esm/parser.js.map +1 -0
- package/dist/esm/policies/policy.d.ts +14 -0
- package/dist/esm/policies/policy.d.ts.map +1 -0
- package/dist/esm/policies/policy.js +16 -0
- package/dist/esm/policies/policy.js.map +1 -0
- package/dist/esm/principals/principal.d.ts +21 -0
- package/dist/esm/principals/principal.d.ts.map +1 -0
- package/dist/esm/principals/principal.js +25 -0
- package/dist/esm/principals/principal.js.map +1 -0
- package/dist/esm/resources/resource.d.ts +20 -0
- package/dist/esm/resources/resource.d.ts.map +1 -0
- package/dist/esm/resources/resource.js +13 -0
- package/dist/esm/resources/resource.js.map +1 -0
- package/dist/esm/statements/statement.d.ts +146 -0
- package/dist/esm/statements/statement.d.ts.map +1 -0
- package/dist/esm/statements/statement.js +116 -0
- package/dist/esm/statements/statement.js.map +1 -0
- package/dist/esm/utils.d.ts +8 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +10 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
# IAM Policy Parser
|
2
|
+
|
3
|
+
This is a simple IAM policy library that allows you parse and navigate IAM policies without worry about the more difficult details of parsing policies.
|
4
|
+
|
5
|
+
This may be updated in the future to allow modifying policies, right now it's read-only.
|
6
|
+
|
7
|
+
**This does not validate policies**, it only parses them. If you pass in totally invalid JSON it will fail in glorious and unpredictable ways.
|
8
|
+
|
9
|
+
Here are some ways it helps:
|
10
|
+
|
11
|
+
## Normalizing Policy Elements that are Objects/Array of Object or String/Array of Strings
|
12
|
+
```typescript
|
13
|
+
import{ loadPolicy } from '@cloud-copilot/iam-policy'
|
14
|
+
|
15
|
+
//Statement can be an array of objects
|
16
|
+
const policyOne = {
|
17
|
+
{
|
18
|
+
"Version": "2012-10-17",
|
19
|
+
"Statement": [
|
20
|
+
{
|
21
|
+
"Sid": "ArrayStatement",
|
22
|
+
"Effect": "Allow",
|
23
|
+
"Action": [
|
24
|
+
"s3:GetObject",
|
25
|
+
],
|
26
|
+
"Resource": "arn:aws:s3:::government-secrets/*"
|
27
|
+
}
|
28
|
+
]
|
29
|
+
}
|
30
|
+
};
|
31
|
+
|
32
|
+
//Statement can also be a single object
|
33
|
+
const policyTwo = {
|
34
|
+
{
|
35
|
+
"Version": "2012-10-17",
|
36
|
+
"Statement": {
|
37
|
+
"Sid": "ObjectStatement",
|
38
|
+
"Effect": "Allow",
|
39
|
+
"Action": [
|
40
|
+
"s3:GetObject",
|
41
|
+
],
|
42
|
+
"Resource": "arn:aws:s3:::government-secrets/*"
|
43
|
+
}
|
44
|
+
}
|
45
|
+
};
|
46
|
+
|
47
|
+
//In both cases you can use the `statements` function to get an array of statements
|
48
|
+
const p1 = loadPolicy(policyOne);
|
49
|
+
const p2 = loadPolicy(policyTwo);
|
50
|
+
console.log(p1.statements()[0].sid()); //ArrayStatement
|
51
|
+
console.log(p2.statements()[0].sid()); //ObjectStatement
|
52
|
+
```
|
53
|
+
|
54
|
+
There is similar support for condition values, principals, and resources.
|
55
|
+
|
56
|
+
## Mutually Exclusive Policy Elements
|
57
|
+
|
58
|
+
In IAM policies there are some elements that are mutually exclusive. For example, you can't have a `Principal` and a `NotPrincipal` in the same statement. We leverage the Typescript type system to make sure you only access data that is confirmed to exist in the policy.
|
59
|
+
|
60
|
+
```typescript
|
61
|
+
import{ loadPolicy } from '@cloud-copilot/iam-policy'
|
62
|
+
const actionPolicy = {
|
63
|
+
{
|
64
|
+
"Version": "2012-10-17",
|
65
|
+
"Statement": {
|
66
|
+
"Effect": "Allow",
|
67
|
+
"Action": [
|
68
|
+
"s3:GetObject",
|
69
|
+
],
|
70
|
+
"Resource": "arn:aws:s3:::government-secrets/*"
|
71
|
+
}
|
72
|
+
}
|
73
|
+
};
|
74
|
+
|
75
|
+
const p = loadPolicy(actionPolicy);
|
76
|
+
const statement = p.statements()[0]; // Get the first statement out
|
77
|
+
|
78
|
+
statement.actions() // Causes a compile time error becuase we haven't confirmed the statement has actions
|
79
|
+
|
80
|
+
if(statement.isActionStatement()) {
|
81
|
+
statement.actions() // Now we can access the actions because the type has been confirmed
|
82
|
+
}
|
83
|
+
|
84
|
+
if(statement.isNotActionStatement()) {
|
85
|
+
// This will not exectue because the statement does not have a NotAction element
|
86
|
+
}
|
87
|
+
```
|
88
|
+
|
89
|
+
`isNotActionStatement` checks for the presence of the NotAction element and is not the inverse of `isActionStatement`. It's possible for a statement to return false for both `isActionStatement` and `isNotActionStatement` if both elements are absent in the statement.
|
90
|
+
|
91
|
+
There is similar support for `Action`, `NotAction`, `Principal`, `NotPrincipal`, `Resource`, and `NotResource` elements.
|
92
|
+
|
93
|
+
## Flatten Complex Structures
|
94
|
+
|
95
|
+
We simplify processing of elements by flattening them into an array of homogenous objects. For example the Principal element can be a string or an object; the object values can be strings or arrays of strings. We flatten those into an array of objects similar to what you would define in a terraform policy.
|
96
|
+
|
97
|
+
```typescript
|
98
|
+
import{ loadPolicy } from '@cloud-copilot/iam-policy'
|
99
|
+
|
100
|
+
const principalPolicy = {
|
101
|
+
{
|
102
|
+
"Version": "2012-10-17",
|
103
|
+
"Statement": {
|
104
|
+
"Effect": "Allow",
|
105
|
+
"Principal": {
|
106
|
+
"AWS": [
|
107
|
+
"arn:aws:iam::123456789012:root",
|
108
|
+
"arn:aws:iam::123456789013:user/FoxMulder"
|
109
|
+
],
|
110
|
+
"CanonicalUser": "79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be",
|
111
|
+
"Federated": "cognito-identity.amazonaws.com"
|
112
|
+
},
|
113
|
+
"Action": [
|
114
|
+
"s3:GetObject",
|
115
|
+
],
|
116
|
+
"Resource": "arn:aws:s3:::government-secrets/*"
|
117
|
+
}
|
118
|
+
}
|
119
|
+
};
|
120
|
+
|
121
|
+
const p = loadPolicy(principalPolicy);
|
122
|
+
|
123
|
+
const statement = p.statements()[0]; // Get the first statement out
|
124
|
+
if(statement.isPrincipalStatement()) {
|
125
|
+
//Get an array of 4 Principal objects with a type and value
|
126
|
+
const principals = statement.principals();
|
127
|
+
principals[0].type() //AWS
|
128
|
+
principals[0].value() //arn:aws:iam::123456789012:root
|
129
|
+
...
|
130
|
+
principals[3].type() //Federated
|
131
|
+
principals[3].value() //arn:aws:iam::123456789012:root
|
132
|
+
}
|
133
|
+
```
|
134
|
+
|
135
|
+
There is flattening for the `Condition` element.
|
@@ -0,0 +1,51 @@
|
|
1
|
+
export type ActionType = 'service' | 'wildcard';
|
2
|
+
/**
|
3
|
+
* An Action string in an IAM policy
|
4
|
+
*/
|
5
|
+
export interface Action {
|
6
|
+
/**
|
7
|
+
* The type of actions
|
8
|
+
*/
|
9
|
+
type(): ActionType;
|
10
|
+
/**
|
11
|
+
* The raw string of the action
|
12
|
+
*/
|
13
|
+
value(): string;
|
14
|
+
/**
|
15
|
+
* Whether the action is a wildcard action: `"*"`
|
16
|
+
*/
|
17
|
+
isWildcardAction(): boolean;
|
18
|
+
/**
|
19
|
+
* Whether the action is a service action: `"service:Action"`
|
20
|
+
*/
|
21
|
+
isServiceAction(): boolean;
|
22
|
+
}
|
23
|
+
/**
|
24
|
+
* A wildcard action: `"*"`
|
25
|
+
*/
|
26
|
+
export interface WildcardAction extends Action {
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* A service action: `"service:Action"`
|
30
|
+
*/
|
31
|
+
export interface ServiceAction extends Action {
|
32
|
+
/**
|
33
|
+
* The service of the action
|
34
|
+
*/
|
35
|
+
service(): string;
|
36
|
+
/**
|
37
|
+
* The action within the service
|
38
|
+
*/
|
39
|
+
action(): string;
|
40
|
+
}
|
41
|
+
export declare class ActionImpl implements Action, WildcardAction, ServiceAction {
|
42
|
+
private readonly rawValue;
|
43
|
+
constructor(rawValue: string);
|
44
|
+
type(): ActionType;
|
45
|
+
value(): string;
|
46
|
+
isWildcardAction(): this is WildcardAction;
|
47
|
+
isServiceAction(): this is ServiceAction;
|
48
|
+
service(): string;
|
49
|
+
action(): string;
|
50
|
+
}
|
51
|
+
//# sourceMappingURL=action.d.ts.map
|
@@ -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,OAAO,CAAA;IAE3B;;OAEG;IACH,eAAe,IAAI,OAAO,CAAA;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,MAAM;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,MAAM;IAC3C;;OAEG;IACH,OAAO,IAAI,MAAM,CAAA;IAEjB;;OAEG;IACH,MAAM,IAAI,MAAM,CAAA;CACjB;AAED,qBAAa,UAAW,YAAW,MAAM,EAAG,cAAc,EAAE,aAAa;IAC3D,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEtC,IAAI,IAAI,UAAU;IAOlB,KAAK,IAAI,MAAM;IAIf,gBAAgB,IAAI,IAAI,IAAI,cAAc;IAI1C,eAAe,IAAI,IAAI,IAAI,aAAa;IAIxC,OAAO,IAAI,MAAM;IAIjB,MAAM,IAAI,MAAM;CAGxB"}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ActionImpl = void 0;
|
4
|
+
const utils_js_1 = require("../utils.js");
|
5
|
+
class ActionImpl {
|
6
|
+
rawValue;
|
7
|
+
constructor(rawValue) {
|
8
|
+
this.rawValue = rawValue;
|
9
|
+
}
|
10
|
+
type() {
|
11
|
+
if ((0, utils_js_1.isAllWildcards)(this.rawValue)) {
|
12
|
+
return 'wildcard';
|
13
|
+
}
|
14
|
+
return 'service';
|
15
|
+
}
|
16
|
+
value() {
|
17
|
+
return this.rawValue;
|
18
|
+
}
|
19
|
+
isWildcardAction() {
|
20
|
+
return this.type() === 'wildcard';
|
21
|
+
}
|
22
|
+
isServiceAction() {
|
23
|
+
return this.type() === 'service';
|
24
|
+
}
|
25
|
+
service() {
|
26
|
+
return this.rawValue.split(':')[0];
|
27
|
+
}
|
28
|
+
action() {
|
29
|
+
return this.rawValue.split(':')[1];
|
30
|
+
}
|
31
|
+
}
|
32
|
+
exports.ActionImpl = ActionImpl;
|
33
|
+
//# sourceMappingURL=action.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../../src/actions/action.ts"],"names":[],"mappings":";;;AAAA,0CAA4C;AAkD5C,MAAa,UAAU;IACQ;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAE1C,IAAI;QACT,IAAG,IAAA,yBAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,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,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;IAEM,MAAM;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC;CACF;AA7BD,gCA6BC"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export interface Condition {
|
2
|
+
operation(): string;
|
3
|
+
conditionKey(): string;
|
4
|
+
conditionValues(): string[];
|
5
|
+
}
|
6
|
+
export declare class ConditionImpl implements Condition {
|
7
|
+
private readonly op;
|
8
|
+
private readonly key;
|
9
|
+
private readonly values;
|
10
|
+
constructor(op: string, key: string, values: string | string[]);
|
11
|
+
operation(): string;
|
12
|
+
conditionKey(): string;
|
13
|
+
conditionValues(): string[];
|
14
|
+
}
|
15
|
+
//# sourceMappingURL=condition.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"condition.d.ts","sourceRoot":"","sources":["../../../src/conditions/condition.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,IAAI,MAAM,CAAA;IACnB,YAAY,IAAI,MAAM,CAAA;IACtB,eAAe,IAAI,MAAM,EAAE,CAAA;CAC5B;AAED,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAU,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAjE,EAAE,EAAE,MAAM,EAAmB,GAAG,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAE1G,SAAS,IAAI,MAAM;IAInB,YAAY,IAAI,MAAM;IAItB,eAAe,IAAI,MAAM,EAAE;CAGnC"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ConditionImpl = void 0;
|
4
|
+
class ConditionImpl {
|
5
|
+
op;
|
6
|
+
key;
|
7
|
+
values;
|
8
|
+
constructor(op, key, values) {
|
9
|
+
this.op = op;
|
10
|
+
this.key = key;
|
11
|
+
this.values = values;
|
12
|
+
}
|
13
|
+
operation() {
|
14
|
+
return this.op;
|
15
|
+
}
|
16
|
+
conditionKey() {
|
17
|
+
return this.key;
|
18
|
+
}
|
19
|
+
conditionValues() {
|
20
|
+
return typeof this.values === 'string' ? [this.values] : this.values;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
exports.ConditionImpl = ConditionImpl;
|
24
|
+
//# sourceMappingURL=condition.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"condition.js","sourceRoot":"","sources":["../../../src/conditions/condition.ts"],"names":[],"mappings":";;;AAMA,MAAa,aAAa;IACK;IAA6B;IAA8B;IAAxF,YAA6B,EAAU,EAAmB,GAAW,EAAmB,MAAyB;QAApF,OAAE,GAAF,EAAE,CAAQ;QAAmB,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAE9G,SAAS;QACd,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,eAAe;QACpB,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IACtE,CAAC;CACF;AAdD,sCAcC"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
export interface Condition {
|
2
|
+
operation(): string;
|
3
|
+
conditionKey(): string;
|
4
|
+
conditionValues(): string[];
|
5
|
+
}
|
6
|
+
export declare class ConditionImpl implements Condition {
|
7
|
+
private readonly op;
|
8
|
+
private readonly key;
|
9
|
+
private readonly values;
|
10
|
+
constructor(op: string, key: string, values: string | string[]);
|
11
|
+
operation(): string;
|
12
|
+
conditionKey(): string;
|
13
|
+
conditionValues(): string[];
|
14
|
+
}
|
15
|
+
//# sourceMappingURL=conditions.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../../../src/conditions/conditions.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,SAAS,IAAI,MAAM,CAAA;IACnB,YAAY,IAAI,MAAM,CAAA;IACtB,eAAe,IAAI,MAAM,EAAE,CAAA;CAC5B;AAED,qBAAa,aAAc,YAAW,SAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,EAAE;IAAU,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAU,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAjE,EAAE,EAAE,MAAM,EAAmB,GAAG,EAAE,MAAM,EAAmB,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAE1G,SAAS,IAAI,MAAM;IAInB,YAAY,IAAI,MAAM;IAItB,eAAe,IAAI,MAAM,EAAE;CAGnC"}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ConditionImpl = void 0;
|
4
|
+
class ConditionImpl {
|
5
|
+
op;
|
6
|
+
key;
|
7
|
+
values;
|
8
|
+
constructor(op, key, values) {
|
9
|
+
this.op = op;
|
10
|
+
this.key = key;
|
11
|
+
this.values = values;
|
12
|
+
}
|
13
|
+
operation() {
|
14
|
+
return this.op;
|
15
|
+
}
|
16
|
+
conditionKey() {
|
17
|
+
return this.key;
|
18
|
+
}
|
19
|
+
conditionValues() {
|
20
|
+
return typeof this.values === 'string' ? [this.values] : this.values;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
exports.ConditionImpl = ConditionImpl;
|
24
|
+
//# sourceMappingURL=conditions.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../../../src/conditions/conditions.ts"],"names":[],"mappings":";;;AAMA,MAAa,aAAa;IACK;IAA6B;IAA8B;IAAxF,YAA6B,EAAU,EAAmB,GAAW,EAAmB,MAAyB;QAApF,OAAE,GAAF,EAAE,CAAQ;QAAmB,QAAG,GAAH,GAAG,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAmB;IAAG,CAAC;IAE9G,SAAS;QACd,OAAO,IAAI,CAAC,EAAE,CAAA;IAChB,CAAC;IAEM,YAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAEM,eAAe;QACpB,OAAO,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAA;IACtE,CAAC;CACF;AAdD,sCAcC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
export type { Action, ActionType, ServiceAction, WildcardAction } from './actions/action.js';
|
2
|
+
export type { Condition } from './conditions/condition.js';
|
3
|
+
export { loadPolicy } from './parser.js';
|
4
|
+
export type { Policy } from './policies/policy.js';
|
5
|
+
export type { Principal, PrincipalType } from './principals/principal.js';
|
6
|
+
export type { Resource } from './resources/resource.js';
|
7
|
+
export type { ActionStatement, NotActionStatement, NotPrincipalStatement, NotResourceStatement, PrincipalStatement, ResourceStatement, Statement } from './statements/statement.js';
|
8
|
+
//# 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,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,YAAY,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAClD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzE,YAAY,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AACvD,YAAY,EAAE,eAAe,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA"}
|
@@ -0,0 +1,6 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.loadPolicy = void 0;
|
4
|
+
var parser_js_1 = require("./parser.js");
|
5
|
+
Object.defineProperty(exports, "loadPolicy", { enumerable: true, get: function () { return parser_js_1.loadPolicy; } });
|
6
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAEA,yCAAwC;AAA/B,uGAAA,UAAU,OAAA"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import { PolicyImpl } from "./policies/policy.js";
|
2
|
+
/**
|
3
|
+
* Load a Policy from a policy document
|
4
|
+
*
|
5
|
+
* @param policyDocument the policy document JSON object
|
6
|
+
* @returns the Policy object for the backing policy document
|
7
|
+
*/
|
8
|
+
export declare function loadPolicy(policyDocument: any): PolicyImpl;
|
9
|
+
//# 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,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,cAAc,EAAE,GAAG,cAE7C"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.loadPolicy = loadPolicy;
|
4
|
+
const policy_js_1 = require("./policies/policy.js");
|
5
|
+
/**
|
6
|
+
* Load a Policy from a policy document
|
7
|
+
*
|
8
|
+
* @param policyDocument the policy document JSON object
|
9
|
+
* @returns the Policy object for the backing policy document
|
10
|
+
*/
|
11
|
+
function loadPolicy(policyDocument) {
|
12
|
+
return new policy_js_1.PolicyImpl(policyDocument);
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=parser.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/parser.ts"],"names":[],"mappings":";;AAQA,gCAEC;AAVD,oDAAkD;AAElD;;;;;GAKG;AACH,SAAgB,UAAU,CAAC,cAAmB;IAC1C,OAAO,IAAI,sBAAU,CAAC,cAAc,CAAC,CAAC;AAC1C,CAAC"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Statement } from '../statements/statement.js';
|
2
|
+
export interface Policy {
|
3
|
+
version(): string | undefined;
|
4
|
+
id(): string | undefined;
|
5
|
+
statements(): Statement[];
|
6
|
+
}
|
7
|
+
export declare class PolicyImpl {
|
8
|
+
private readonly policyObject;
|
9
|
+
constructor(policyObject: any);
|
10
|
+
version(): string | undefined;
|
11
|
+
id(): string | undefined;
|
12
|
+
statements(): Statement[];
|
13
|
+
}
|
14
|
+
//# 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,SAAS,EAAiB,MAAM,4BAA4B,CAAA;AAErE,MAAM,WAAW,MAAM;IACrB,OAAO,IAAI,MAAM,GAAG,SAAS,CAAA;IAC7B,EAAE,IAAI,MAAM,GAAG,SAAS,CAAA;IACxB,UAAU,IAAI,SAAS,EAAE,CAAA;CAC1B;AAED,qBAAa,UAAU;IACT,OAAO,CAAC,QAAQ,CAAC,YAAY;gBAAZ,YAAY,EAAE,GAAG;IAEvC,OAAO,IAAI,MAAM,GAAG,SAAS;IAI7B,EAAE,IAAI,MAAM,GAAG,SAAS;IAIxB,UAAU,IAAI,SAAS,EAAE;CAGjC"}
|
@@ -0,0 +1,21 @@
|
|
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
|
+
constructor(policyObject) {
|
8
|
+
this.policyObject = policyObject;
|
9
|
+
}
|
10
|
+
version() {
|
11
|
+
return this.policyObject.Version;
|
12
|
+
}
|
13
|
+
id() {
|
14
|
+
return this.policyObject.Id;
|
15
|
+
}
|
16
|
+
statements() {
|
17
|
+
return [this.policyObject.Statement].flat().map((statement) => new statement_js_1.StatementImpl(statement));
|
18
|
+
}
|
19
|
+
}
|
20
|
+
exports.PolicyImpl = PolicyImpl;
|
21
|
+
//# sourceMappingURL=policy.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../../src/policies/policy.ts"],"names":[],"mappings":";;;AAAA,6DAAqE;AAQrE,MAAa,UAAU;IACQ;IAA7B,YAA6B,YAAiB;QAAjB,iBAAY,GAAZ,YAAY,CAAK;IAAG,CAAC;IAE3C,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,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,SAAc,EAAE,EAAE,CAAC,IAAI,4BAAa,CAAC,SAAS,CAAC,CAAC,CAAA;IACnG,CAAC;CACF;AAdD,gCAcC"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
export type PrincipalType = 'AWS' | 'Service' | 'Federated' | 'CanonicalUser';
|
2
|
+
export interface Principal {
|
3
|
+
type(): PrincipalType;
|
4
|
+
value(): string;
|
5
|
+
}
|
6
|
+
export declare class PrincipalImpl {
|
7
|
+
private readonly principalType;
|
8
|
+
private readonly principalId;
|
9
|
+
constructor(principalType: PrincipalType, principalId: string);
|
10
|
+
value(): string;
|
11
|
+
type(): PrincipalType;
|
12
|
+
}
|
13
|
+
export declare class AwsPrincipal extends PrincipalImpl {
|
14
|
+
}
|
15
|
+
export declare class ServicePrincipal extends PrincipalImpl {
|
16
|
+
}
|
17
|
+
export declare class FederatedPrincipal extends PrincipalImpl {
|
18
|
+
}
|
19
|
+
export declare class CanonicalUserPrincipal extends PrincipalImpl {
|
20
|
+
}
|
21
|
+
//# sourceMappingURL=principal.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"principal.d.ts","sourceRoot":"","sources":["../../../src/principals/principal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAA;AAE7E,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,aAAa,CAAA;IACrB,KAAK,IAAI,MAAM,CAAA;CAChB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAiB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAA1D,aAAa,EAAE,aAAa,EAAmB,WAAW,EAAE,MAAM;IAExF,KAAK,IAAI,MAAM;IAIf,IAAI,IAAI,aAAa;CAG7B;AAGD,qBAAa,YAAa,SAAQ,aAAa;CAC9C;AAGD,qBAAa,gBAAiB,SAAQ,aAAa;CAClD;AAGD,qBAAa,kBAAmB,SAAQ,aAAa;CACpD;AAGD,qBAAa,sBAAuB,SAAQ,aAAa;CACxD"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CanonicalUserPrincipal = exports.FederatedPrincipal = exports.ServicePrincipal = exports.AwsPrincipal = exports.PrincipalImpl = void 0;
|
4
|
+
class PrincipalImpl {
|
5
|
+
principalType;
|
6
|
+
principalId;
|
7
|
+
constructor(principalType, principalId) {
|
8
|
+
this.principalType = principalType;
|
9
|
+
this.principalId = principalId;
|
10
|
+
}
|
11
|
+
value() {
|
12
|
+
return this.principalId;
|
13
|
+
}
|
14
|
+
type() {
|
15
|
+
return this.principalType;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
exports.PrincipalImpl = PrincipalImpl;
|
19
|
+
//AWS
|
20
|
+
class AwsPrincipal extends PrincipalImpl {
|
21
|
+
}
|
22
|
+
exports.AwsPrincipal = AwsPrincipal;
|
23
|
+
//Service
|
24
|
+
class ServicePrincipal extends PrincipalImpl {
|
25
|
+
}
|
26
|
+
exports.ServicePrincipal = ServicePrincipal;
|
27
|
+
//Federated
|
28
|
+
class FederatedPrincipal extends PrincipalImpl {
|
29
|
+
}
|
30
|
+
exports.FederatedPrincipal = FederatedPrincipal;
|
31
|
+
//CanonicalUser
|
32
|
+
class CanonicalUserPrincipal extends PrincipalImpl {
|
33
|
+
}
|
34
|
+
exports.CanonicalUserPrincipal = CanonicalUserPrincipal;
|
35
|
+
//# sourceMappingURL=principal.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"principal.js","sourceRoot":"","sources":["../../../src/principals/principal.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IACK;IAA+C;IAA5E,YAA6B,aAA4B,EAAmB,WAAmB;QAAlE,kBAAa,GAAb,aAAa,CAAe;QAAmB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE5F,KAAK;QACV,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;CACF;AAVD,sCAUC;AAED,KAAK;AACL,MAAa,YAAa,SAAQ,aAAa;CAC9C;AADD,oCACC;AAED,SAAS;AACT,MAAa,gBAAiB,SAAQ,aAAa;CAClD;AADD,4CACC;AAED,WAAW;AACX,MAAa,kBAAmB,SAAQ,aAAa;CACpD;AADD,gDACC;AAED,eAAe;AACf,MAAa,sBAAuB,SAAQ,aAAa;CACxD;AADD,wDACC"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
export type PrincipalType = 'AWS' | 'Service' | 'Federated' | 'CanonicalUser';
|
2
|
+
export interface Principal {
|
3
|
+
type(): PrincipalType;
|
4
|
+
value(): string;
|
5
|
+
}
|
6
|
+
export declare class PrincipalImpl {
|
7
|
+
private readonly principalType;
|
8
|
+
private readonly principalId;
|
9
|
+
constructor(principalType: PrincipalType, principalId: string);
|
10
|
+
value(): string;
|
11
|
+
type(): PrincipalType;
|
12
|
+
}
|
13
|
+
export declare class AwsPrincipal extends PrincipalImpl {
|
14
|
+
}
|
15
|
+
export declare class ServicePrincipal extends PrincipalImpl {
|
16
|
+
}
|
17
|
+
export declare class FederatedPrincipal extends PrincipalImpl {
|
18
|
+
}
|
19
|
+
export declare class CanonicalUserPrincipal extends PrincipalImpl {
|
20
|
+
}
|
21
|
+
//# sourceMappingURL=principals.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"principals.d.ts","sourceRoot":"","sources":["../../../src/principals/principals.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,GAAG,eAAe,CAAA;AAE7E,MAAM,WAAW,SAAS;IACxB,IAAI,IAAI,aAAa,CAAA;IACrB,KAAK,IAAI,MAAM,CAAA;CAChB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,QAAQ,CAAC,aAAa;IAAiB,OAAO,CAAC,QAAQ,CAAC,WAAW;gBAA1D,aAAa,EAAE,aAAa,EAAmB,WAAW,EAAE,MAAM;IAExF,KAAK,IAAI,MAAM;IAIf,IAAI,IAAI,aAAa;CAG7B;AAGD,qBAAa,YAAa,SAAQ,aAAa;CAC9C;AAGD,qBAAa,gBAAiB,SAAQ,aAAa;CAClD;AAGD,qBAAa,kBAAmB,SAAQ,aAAa;CACpD;AAGD,qBAAa,sBAAuB,SAAQ,aAAa;CACxD"}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.CanonicalUserPrincipal = exports.FederatedPrincipal = exports.ServicePrincipal = exports.AwsPrincipal = exports.PrincipalImpl = void 0;
|
4
|
+
class PrincipalImpl {
|
5
|
+
principalType;
|
6
|
+
principalId;
|
7
|
+
constructor(principalType, principalId) {
|
8
|
+
this.principalType = principalType;
|
9
|
+
this.principalId = principalId;
|
10
|
+
}
|
11
|
+
value() {
|
12
|
+
return this.principalId;
|
13
|
+
}
|
14
|
+
type() {
|
15
|
+
return this.principalType;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
exports.PrincipalImpl = PrincipalImpl;
|
19
|
+
//AWS
|
20
|
+
class AwsPrincipal extends PrincipalImpl {
|
21
|
+
}
|
22
|
+
exports.AwsPrincipal = AwsPrincipal;
|
23
|
+
//Service
|
24
|
+
class ServicePrincipal extends PrincipalImpl {
|
25
|
+
}
|
26
|
+
exports.ServicePrincipal = ServicePrincipal;
|
27
|
+
//Federated
|
28
|
+
class FederatedPrincipal extends PrincipalImpl {
|
29
|
+
}
|
30
|
+
exports.FederatedPrincipal = FederatedPrincipal;
|
31
|
+
//CanonicalUser
|
32
|
+
class CanonicalUserPrincipal extends PrincipalImpl {
|
33
|
+
}
|
34
|
+
exports.CanonicalUserPrincipal = CanonicalUserPrincipal;
|
35
|
+
//# sourceMappingURL=principals.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"principals.js","sourceRoot":"","sources":["../../../src/principals/principals.ts"],"names":[],"mappings":";;;AAOA,MAAa,aAAa;IACK;IAA+C;IAA5E,YAA6B,aAA4B,EAAmB,WAAmB;QAAlE,kBAAa,GAAb,aAAa,CAAe;QAAmB,gBAAW,GAAX,WAAW,CAAQ;IAAG,CAAC;IAE5F,KAAK;QACV,OAAO,IAAI,CAAC,WAAW,CAAA;IACzB,CAAC;IAEM,IAAI;QACT,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;CACF;AAVD,sCAUC;AAED,KAAK;AACL,MAAa,YAAa,SAAQ,aAAa;CAC9C;AADD,oCACC;AAED,SAAS;AACT,MAAa,gBAAiB,SAAQ,aAAa;CAClD;AADD,4CACC;AAED,WAAW;AACX,MAAa,kBAAmB,SAAQ,aAAa;CACpD;AADD,gDACC;AAED,eAAe;AACf,MAAa,sBAAuB,SAAQ,aAAa;CACxD;AADD,wDACC"}
|
@@ -0,0 +1,20 @@
|
|
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
|
+
export declare class ResourceImpl implements Resource {
|
15
|
+
private readonly rawValue;
|
16
|
+
constructor(rawValue: string);
|
17
|
+
value(): string;
|
18
|
+
isAllResources(): boolean;
|
19
|
+
}
|
20
|
+
//# 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;CAC1B;AAGD,qBAAa,YAAa,YAAW,QAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,MAAM;IAEtC,KAAK,IAAI,MAAM;IAIf,cAAc,IAAI,OAAO;CAGjC"}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.ResourceImpl = void 0;
|
4
|
+
const utils_js_1 = require("../utils.js");
|
5
|
+
class ResourceImpl {
|
6
|
+
rawValue;
|
7
|
+
constructor(rawValue) {
|
8
|
+
this.rawValue = rawValue;
|
9
|
+
}
|
10
|
+
value() {
|
11
|
+
return this.rawValue;
|
12
|
+
}
|
13
|
+
isAllResources() {
|
14
|
+
return (0, utils_js_1.isAllWildcards)(this.rawValue);
|
15
|
+
}
|
16
|
+
}
|
17
|
+
exports.ResourceImpl = ResourceImpl;
|
18
|
+
//# sourceMappingURL=resource.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/resources/resource.ts"],"names":[],"mappings":";;;AAAA,0CAA6C;AAkB7C,MAAa,YAAY;IACM;IAA7B,YAA6B,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAE1C,KAAK;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,cAAc;QACnB,OAAO,IAAA,yBAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtC,CAAC;CACF;AAVD,oCAUC"}
|