@actsecurity/iam-simulate 0.1.197 → 0.1.198
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/README.md +9 -0
- package/dist/cjs/condition/string/ignoreCaseEquals.d.ts +23 -2
- package/dist/cjs/condition/string/ignoreCaseEquals.d.ts.map +1 -1
- package/dist/cjs/condition/string/ignoreCaseEquals.js +25 -6
- package/dist/cjs/condition/string/ignoreCaseEquals.js.map +1 -1
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -1
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js +6 -4
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/requestContext.d.ts.map +1 -1
- package/dist/cjs/requestContext.js +4 -3
- package/dist/cjs/requestContext.js.map +1 -1
- package/dist/esm/condition/string/ignoreCaseEquals.d.ts +23 -2
- package/dist/esm/condition/string/ignoreCaseEquals.d.ts.map +1 -1
- package/dist/esm/condition/string/ignoreCaseEquals.js +21 -5
- package/dist/esm/condition/string/ignoreCaseEquals.js.map +1 -1
- package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -1
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js +6 -4
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/requestContext.d.ts.map +1 -1
- package/dist/esm/requestContext.js +4 -3
- package/dist/esm/requestContext.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,6 +17,15 @@ The simulator currently supports these features of AWS IAM
|
|
|
17
17
|
- Same Account and Cross Account Requests
|
|
18
18
|
- Custom trust behavior for IAM Trust Policies and KMS Key Policies
|
|
19
19
|
|
|
20
|
+
### IAM string-value comparisons
|
|
21
|
+
|
|
22
|
+
The package exports `iamStringEquals`, `iamStringEqualsIgnoreCase`, and
|
|
23
|
+
`iamStringEqualsNormalizeCaseInsensitive` for comparing or indexing **already-resolved literal
|
|
24
|
+
condition values**. They do not resolve policy variables or evaluate condition operators. The
|
|
25
|
+
ignore-case helper and normalizer apply the same per-UTF-16-code-unit lowercase mapping used by
|
|
26
|
+
the IAM `StringEqualsIgnoreCase` implementation. This behavior is an empirical approximation of
|
|
27
|
+
the AWS IAM policy simulator and depends on the JavaScript runtime's Unicode mappings.
|
|
28
|
+
|
|
20
29
|
### Request Validation
|
|
21
30
|
|
|
22
31
|
iam-simulate will automatically validate inputs including
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compare
|
|
2
|
+
* Compare two already-resolved IAM condition values using JavaScript strict string equality.
|
|
3
|
+
* This does not resolve variables or evaluate wildcards.
|
|
4
|
+
*
|
|
5
|
+
* @param left the first literal value
|
|
6
|
+
* @param right the second literal value
|
|
7
|
+
* @returns whether the values are identical
|
|
8
|
+
*/
|
|
9
|
+
export declare function iamStringEquals(left: string, right: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Compare already-resolved literal strings using the case behavior observed in AWS IAM's policy simulator.
|
|
12
|
+
* This does not resolve policy variables or evaluate condition operators.
|
|
3
13
|
*
|
|
4
14
|
* Lowercase each UTF-16 code unit independently, rather than applying Unicode case
|
|
5
15
|
* folding or lowercasing whole strings. This is an empirical approximation: the
|
|
@@ -9,5 +19,16 @@
|
|
|
9
19
|
* @param right the second string to compare
|
|
10
20
|
* @returns whether the strings compare equal ignoring case
|
|
11
21
|
*/
|
|
12
|
-
export declare function
|
|
22
|
+
export declare function iamStringEqualsIgnoreCase(left: string, right: string): boolean;
|
|
23
|
+
/** Internal alias retained for the IAM string condition operators. */
|
|
24
|
+
export declare const ignoreCaseEquals: typeof iamStringEqualsIgnoreCase;
|
|
25
|
+
/**
|
|
26
|
+
* Normalize an already-resolved IAM string value for case-insensitive equality or indexing.
|
|
27
|
+
* Lowercases individual UTF-16 code units, including mappings that expand to multiple units.
|
|
28
|
+
* This is distinct from context-key normalization and depends on runtime Unicode mappings.
|
|
29
|
+
*
|
|
30
|
+
* @param value the string to transform
|
|
31
|
+
* @returns the concatenation of the lowercase code units
|
|
32
|
+
*/
|
|
33
|
+
export declare function iamStringEqualsNormalizeCaseInsensitive(value: string): string;
|
|
13
34
|
//# sourceMappingURL=ignoreCaseEquals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreCaseEquals.d.ts","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ignoreCaseEquals.d.ts","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI9E;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,kCAA4B,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7E"}
|
|
@@ -1,8 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ignoreCaseEquals =
|
|
3
|
+
exports.ignoreCaseEquals = void 0;
|
|
4
|
+
exports.iamStringEquals = iamStringEquals;
|
|
5
|
+
exports.iamStringEqualsIgnoreCase = iamStringEqualsIgnoreCase;
|
|
6
|
+
exports.iamStringEqualsNormalizeCaseInsensitive = iamStringEqualsNormalizeCaseInsensitive;
|
|
4
7
|
/**
|
|
5
|
-
* Compare
|
|
8
|
+
* Compare two already-resolved IAM condition values using JavaScript strict string equality.
|
|
9
|
+
* This does not resolve variables or evaluate wildcards.
|
|
10
|
+
*
|
|
11
|
+
* @param left the first literal value
|
|
12
|
+
* @param right the second literal value
|
|
13
|
+
* @returns whether the values are identical
|
|
14
|
+
*/
|
|
15
|
+
function iamStringEquals(left, right) {
|
|
16
|
+
return left === right;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compare already-resolved literal strings using the case behavior observed in AWS IAM's policy simulator.
|
|
20
|
+
* This does not resolve policy variables or evaluate condition operators.
|
|
6
21
|
*
|
|
7
22
|
* Lowercase each UTF-16 code unit independently, rather than applying Unicode case
|
|
8
23
|
* folding or lowercasing whole strings. This is an empirical approximation: the
|
|
@@ -12,16 +27,20 @@ exports.ignoreCaseEquals = ignoreCaseEquals;
|
|
|
12
27
|
* @param right the second string to compare
|
|
13
28
|
* @returns whether the strings compare equal ignoring case
|
|
14
29
|
*/
|
|
15
|
-
function
|
|
16
|
-
return
|
|
30
|
+
function iamStringEqualsIgnoreCase(left, right) {
|
|
31
|
+
return (iamStringEqualsNormalizeCaseInsensitive(left) === iamStringEqualsNormalizeCaseInsensitive(right));
|
|
17
32
|
}
|
|
33
|
+
/** Internal alias retained for the IAM string condition operators. */
|
|
34
|
+
exports.ignoreCaseEquals = iamStringEqualsIgnoreCase;
|
|
18
35
|
/**
|
|
19
|
-
*
|
|
36
|
+
* Normalize an already-resolved IAM string value for case-insensitive equality or indexing.
|
|
37
|
+
* Lowercases individual UTF-16 code units, including mappings that expand to multiple units.
|
|
38
|
+
* This is distinct from context-key normalization and depends on runtime Unicode mappings.
|
|
20
39
|
*
|
|
21
40
|
* @param value the string to transform
|
|
22
41
|
* @returns the concatenation of the lowercase code units
|
|
23
42
|
*/
|
|
24
|
-
function
|
|
43
|
+
function iamStringEqualsNormalizeCaseInsensitive(value) {
|
|
25
44
|
let result = '';
|
|
26
45
|
for (let index = 0; index < value.length; index++) {
|
|
27
46
|
result += value[index].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreCaseEquals.js","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ignoreCaseEquals.js","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":";;;AAQA,0CAEC;AAcD,8DAIC;AAaD,0FAMC;AA/CD;;;;;;;GAOG;AACH,SAAgB,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,yBAAyB,CAAC,IAAY,EAAE,KAAa;IACnE,OAAO,CACL,uCAAuC,CAAC,IAAI,CAAC,KAAK,uCAAuC,CAAC,KAAK,CAAC,CACjG,CAAA;AACH,CAAC;AAED,sEAAsE;AACzD,QAAA,gBAAgB,GAAG,yBAAyB,CAAA;AAEzD;;;;;;;GAOG;AACH,SAAgB,uCAAuC,CAAC,KAAa;IACnE,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryContextKeyConstraints.d.ts","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discoveryContextKeyConstraints.d.ts","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,UAAU,gCAAgC;IACxC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,UAAU,iCAAiC;IACzC,gEAAgE;IAChE,eAAe,EAAE,IAAI,CAAA;IAErB,0FAA0F;IAC1F,YAAY,EAAE,IAAI,CAAA;CACnB;AAED;;GAEG;AACH,UAAU,mCAAmC;IAC3C,gEAAgE;IAChE,eAAe,EAAE,IAAI,CAAA;IAErB,sEAAsE;IACtE,YAAY,EAAE,KAAK,CAAA;CACpB;AAED;;;;;GAKG;AACH,UAAU,yBAAyB;IACjC,oEAAoE;IACpE,eAAe,EAAE,KAAK,CAAA;IAEtB,qEAAqE;IACrE,YAAY,EAAE,KAAK,CAAA;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,6BAA6B,GAAG,gCAAgC,GAC1E,CACI,iCAAiC,GACjC,mCAAmC,GACnC,yBAAyB,CAC5B,CAAA;AAEH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sCAAsC,GAAG,CACjD,iCAAiC,GACjC,mCAAmC,GACnC,yBAAyB,CAC5B,GAAG;IACF,iFAAiF;IACjF,oBAAoB,EAAE,OAAO,CAAA;CAC9B,CAAA;AAuCD;;;;;GAKG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,0BAA0B,CAA6C;IAC/E,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,aAAa,CAAiE;IAEtF;;;;OAIG;gBACS,WAAW,GAAE,6BAA6B,EAAO;IAgB7D;;;;;OAKG;IACI,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,sCAAsC;IAwCzE;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DiscoveryContextKeyConstraints = void 0;
|
|
4
|
+
const iam_utils_1 = require("@actsecurity/iam-utils");
|
|
4
5
|
const unconstrained = {
|
|
5
6
|
presenceIsKnown: false,
|
|
6
7
|
valueIsKnown: false,
|
|
@@ -39,7 +40,8 @@ class DiscoveryContextKeyConstraints {
|
|
|
39
40
|
*/
|
|
40
41
|
constraintFor(key) {
|
|
41
42
|
const lowerKey = key.toLowerCase();
|
|
42
|
-
|
|
43
|
+
// Regex matching can distinguish names that normalizeCaseInsensitive equates.
|
|
44
|
+
const cached = this.resolvedCache.get(key);
|
|
43
45
|
if (cached) {
|
|
44
46
|
return cached;
|
|
45
47
|
}
|
|
@@ -47,7 +49,7 @@ class DiscoveryContextKeyConstraints {
|
|
|
47
49
|
const merge = (constraint) => {
|
|
48
50
|
result = effectiveConstraint(result.presenceIsKnown || constraint.presenceIsKnown, result.valueIsKnown || constraint.valueIsKnown, true);
|
|
49
51
|
};
|
|
50
|
-
const literal = this.literalConstraints.get(
|
|
52
|
+
const literal = this.literalConstraints.get((0, iam_utils_1.normalizeCaseInsensitive)(key));
|
|
51
53
|
if (literal) {
|
|
52
54
|
merge(literal);
|
|
53
55
|
}
|
|
@@ -63,7 +65,7 @@ class DiscoveryContextKeyConstraints {
|
|
|
63
65
|
merge(constraint);
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
|
-
this.resolvedCache.set(
|
|
68
|
+
this.resolvedCache.set(key, result);
|
|
67
69
|
return result;
|
|
68
70
|
}
|
|
69
71
|
/**
|
|
@@ -91,7 +93,7 @@ class DiscoveryContextKeyConstraints {
|
|
|
91
93
|
}
|
|
92
94
|
}
|
|
93
95
|
else {
|
|
94
|
-
const key = constraint.keyName
|
|
96
|
+
const key = (0, iam_utils_1.normalizeCaseInsensitive)(constraint.keyName);
|
|
95
97
|
const existing = this.literalConstraints.get(key);
|
|
96
98
|
this.literalConstraints.set(key, existing ? mergeStored(existing, stored) : stored);
|
|
97
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryContextKeyConstraints.js","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"discoveryContextKeyConstraints.js","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { getDenialReasons, getGrantReasons, type DenialPolicyType, type RequestGrant, type RequestDenial } from './analysis/analyzeResults.js';
|
|
2
|
+
export { iamStringEquals, iamStringEqualsIgnoreCase, iamStringEqualsNormalizeCaseInsensitive } from './condition/string/ignoreCaseEquals.js';
|
|
2
3
|
export { typeForContextKey } from './context_keys/contextKeys.js';
|
|
3
4
|
export { isConditionKeyArray, type BaseConditionKeyType, type ConditionKeyType } from './context_keys/contextKeyTypes.js';
|
|
4
5
|
export type { DiscoveryContextKeyConstraint } from './context_keys/discoveryContextKeyConstraints.js';
|
package/dist/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAA;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AAC1E,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EACjC,MAAM,yCAAyC,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uCAAuC,EACxC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAA;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AAC1E,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EACjC,MAAM,yCAAyC,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isWildcardOnlyAction = exports.runUnsafeSimulation = exports.runSimulation = exports.isSimulationRequestPrincipal = exports.isAnonymousRequestPrincipal = exports.anonymousPrincipal = exports.allowedContextKeysForRequest = exports.findContextKeys = exports.isConditionKeyArray = exports.typeForContextKey = exports.getGrantReasons = exports.getDenialReasons = void 0;
|
|
3
|
+
exports.isWildcardOnlyAction = exports.runUnsafeSimulation = exports.runSimulation = exports.isSimulationRequestPrincipal = exports.isAnonymousRequestPrincipal = exports.anonymousPrincipal = exports.allowedContextKeysForRequest = exports.findContextKeys = exports.isConditionKeyArray = exports.typeForContextKey = exports.iamStringEqualsNormalizeCaseInsensitive = exports.iamStringEqualsIgnoreCase = exports.iamStringEquals = exports.getGrantReasons = exports.getDenialReasons = void 0;
|
|
4
4
|
var analyzeResults_js_1 = require("./analysis/analyzeResults.js");
|
|
5
5
|
Object.defineProperty(exports, "getDenialReasons", { enumerable: true, get: function () { return analyzeResults_js_1.getDenialReasons; } });
|
|
6
6
|
Object.defineProperty(exports, "getGrantReasons", { enumerable: true, get: function () { return analyzeResults_js_1.getGrantReasons; } });
|
|
7
|
+
var ignoreCaseEquals_js_1 = require("./condition/string/ignoreCaseEquals.js");
|
|
8
|
+
Object.defineProperty(exports, "iamStringEquals", { enumerable: true, get: function () { return ignoreCaseEquals_js_1.iamStringEquals; } });
|
|
9
|
+
Object.defineProperty(exports, "iamStringEqualsIgnoreCase", { enumerable: true, get: function () { return ignoreCaseEquals_js_1.iamStringEqualsIgnoreCase; } });
|
|
10
|
+
Object.defineProperty(exports, "iamStringEqualsNormalizeCaseInsensitive", { enumerable: true, get: function () { return ignoreCaseEquals_js_1.iamStringEqualsNormalizeCaseInsensitive; } });
|
|
7
11
|
var contextKeys_js_1 = require("./context_keys/contextKeys.js");
|
|
8
12
|
Object.defineProperty(exports, "typeForContextKey", { enumerable: true, get: function () { return contextKeys_js_1.typeForContextKey; } });
|
|
9
13
|
var contextKeyTypes_js_1 = require("./context_keys/contextKeyTypes.js");
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kEAMqC;AALnC,qHAAA,gBAAgB,OAAA;AAChB,oHAAA,eAAe,OAAA;AAKjB,gEAAiE;AAAxD,mHAAA,iBAAiB,OAAA;AAC1B,wEAI0C;AAHxC,yHAAA,mBAAmB,OAAA;AAKrB,wEAAmE;AAA1D,qHAAA,eAAe,OAAA;AA0BxB,qEAAiF;AAAxE,8HAAA,4BAA4B,OAAA;AACrC,mEAS0C;AARxC,mHAAA,kBAAkB,OAAA;AAClB,4HAAA,2BAA2B,OAAA;AAC3B,6HAAA,4BAA4B,OAAA;AAO9B,+EAAuE;AAA9D,oHAAA,aAAa,OAAA;AAatB,2FAAmF;AAA1E,gIAAA,mBAAmB,OAAA;AAC5B,qCAAgD;AAAvC,+GAAA,oBAAoB,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AAAA,kEAMqC;AALnC,qHAAA,gBAAgB,OAAA;AAChB,oHAAA,eAAe,OAAA;AAKjB,8EAI+C;AAH7C,sHAAA,eAAe,OAAA;AACf,gIAAA,yBAAyB,OAAA;AACzB,8IAAA,uCAAuC,OAAA;AAEzC,gEAAiE;AAAxD,mHAAA,iBAAiB,OAAA;AAC1B,wEAI0C;AAHxC,yHAAA,mBAAmB,OAAA;AAKrB,wEAAmE;AAA1D,qHAAA,eAAe,OAAA;AA0BxB,qEAAiF;AAAxE,8HAAA,4BAA4B,OAAA;AACrC,mEAS0C;AARxC,mHAAA,kBAAkB,OAAA;AAClB,4HAAA,2BAA2B,OAAA;AAC3B,6HAAA,4BAA4B,OAAA;AAO9B,+EAAuE;AAA9D,oHAAA,aAAa,OAAA;AAatB,2FAAmF;AAA1E,gIAAA,mBAAmB,OAAA;AAC5B,qCAAgD;AAAvC,+GAAA,oBAAoB,OAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAE3C;;;;;OAKG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,aAAa,IAAI,IAAI,IAAI,gBAAgB,CAAA;IAEzC;;OAEG;IACH,YAAY,IAAI,IAAI,IAAI,eAAe,CAAA;CACxC;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD;;OAEG;IAEH,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,OAAO,CAAqC;gBAExC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAM9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;CAGjD;AAED,qBAAa,cAAe,YAAW,UAAU,EAAE,gBAAgB,EAAE,eAAe;IAEzE,IAAI,EAAE,MAAM;IACnB,OAAO,CAAC,IAAI;gBADL,IAAI,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAGjC,aAAa,IAAI,IAAI,IAAI,gBAAgB;IAGzC,YAAY,IAAI,IAAI,IAAI,eAAe;IAIvC,IAAI,MAAM,IAAI,MAAM,EAAE,CAKrB;IAED,IAAI,KAAK,IAAI,MAAM,CAKlB;CACF"}
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ContextKeyImpl = exports.RequestContextImpl = void 0;
|
|
4
|
+
const iam_utils_1 = require("@actsecurity/iam-utils");
|
|
4
5
|
class RequestContextImpl {
|
|
5
6
|
context = new Map();
|
|
6
7
|
constructor(values) {
|
|
7
8
|
for (const key in values) {
|
|
8
|
-
this.context.set(
|
|
9
|
+
this.context.set((0, iam_utils_1.normalizeCaseInsensitive)(key), new ContextKeyImpl(key, values[key]));
|
|
9
10
|
}
|
|
10
11
|
}
|
|
11
12
|
contextKeyExists(name) {
|
|
12
|
-
return this.context.has(
|
|
13
|
+
return this.context.has((0, iam_utils_1.normalizeCaseInsensitive)(name));
|
|
13
14
|
}
|
|
14
15
|
contextKeyValue(name) {
|
|
15
|
-
return this.context.get(
|
|
16
|
+
return this.context.get((0, iam_utils_1.normalizeCaseInsensitive)(name));
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
19
|
exports.RequestContextImpl = RequestContextImpl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":";;;AAAA,sDAAiE;AAyDjE,MAAa,kBAAkB;IACrB,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;IAEpD,YAAY,MAAyC;QACnD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,oCAAwB,EAAC,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAC,CAAA;IACzD,CAAC;IAEM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAA,oCAAwB,EAAC,IAAI,CAAC,CAAe,CAAA;IACvE,CAAC;CACF;AAhBD,gDAgBC;AAED,MAAa,cAAc;IAEhB;IACC;IAFV,YACS,IAAY,EACX,IAAuB;QADxB,SAAI,GAAJ,IAAI,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAmB;IAC9B,CAAC;IAEJ,aAAa;QACX,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;IACtC,CAAC;IACD,YAAY;QACV,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,MAAM;QACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,KAAK;QACP,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAA;IAC5D,CAAC;CACF;AA1BD,wCA0BC"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compare
|
|
2
|
+
* Compare two already-resolved IAM condition values using JavaScript strict string equality.
|
|
3
|
+
* This does not resolve variables or evaluate wildcards.
|
|
4
|
+
*
|
|
5
|
+
* @param left the first literal value
|
|
6
|
+
* @param right the second literal value
|
|
7
|
+
* @returns whether the values are identical
|
|
8
|
+
*/
|
|
9
|
+
export declare function iamStringEquals(left: string, right: string): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Compare already-resolved literal strings using the case behavior observed in AWS IAM's policy simulator.
|
|
12
|
+
* This does not resolve policy variables or evaluate condition operators.
|
|
3
13
|
*
|
|
4
14
|
* Lowercase each UTF-16 code unit independently, rather than applying Unicode case
|
|
5
15
|
* folding or lowercasing whole strings. This is an empirical approximation: the
|
|
@@ -9,5 +19,16 @@
|
|
|
9
19
|
* @param right the second string to compare
|
|
10
20
|
* @returns whether the strings compare equal ignoring case
|
|
11
21
|
*/
|
|
12
|
-
export declare function
|
|
22
|
+
export declare function iamStringEqualsIgnoreCase(left: string, right: string): boolean;
|
|
23
|
+
/** Internal alias retained for the IAM string condition operators. */
|
|
24
|
+
export declare const ignoreCaseEquals: typeof iamStringEqualsIgnoreCase;
|
|
25
|
+
/**
|
|
26
|
+
* Normalize an already-resolved IAM string value for case-insensitive equality or indexing.
|
|
27
|
+
* Lowercases individual UTF-16 code units, including mappings that expand to multiple units.
|
|
28
|
+
* This is distinct from context-key normalization and depends on runtime Unicode mappings.
|
|
29
|
+
*
|
|
30
|
+
* @param value the string to transform
|
|
31
|
+
* @returns the concatenation of the lowercase code units
|
|
32
|
+
*/
|
|
33
|
+
export declare function iamStringEqualsNormalizeCaseInsensitive(value: string): string;
|
|
13
34
|
//# sourceMappingURL=ignoreCaseEquals.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreCaseEquals.d.ts","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ignoreCaseEquals.d.ts","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAI9E;AAED,sEAAsE;AACtE,eAAO,MAAM,gBAAgB,kCAA4B,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7E"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Compare
|
|
2
|
+
* Compare two already-resolved IAM condition values using JavaScript strict string equality.
|
|
3
|
+
* This does not resolve variables or evaluate wildcards.
|
|
4
|
+
*
|
|
5
|
+
* @param left the first literal value
|
|
6
|
+
* @param right the second literal value
|
|
7
|
+
* @returns whether the values are identical
|
|
8
|
+
*/
|
|
9
|
+
export function iamStringEquals(left, right) {
|
|
10
|
+
return left === right;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Compare already-resolved literal strings using the case behavior observed in AWS IAM's policy simulator.
|
|
14
|
+
* This does not resolve policy variables or evaluate condition operators.
|
|
3
15
|
*
|
|
4
16
|
* Lowercase each UTF-16 code unit independently, rather than applying Unicode case
|
|
5
17
|
* folding or lowercasing whole strings. This is an empirical approximation: the
|
|
@@ -9,16 +21,20 @@
|
|
|
9
21
|
* @param right the second string to compare
|
|
10
22
|
* @returns whether the strings compare equal ignoring case
|
|
11
23
|
*/
|
|
12
|
-
export function
|
|
13
|
-
return
|
|
24
|
+
export function iamStringEqualsIgnoreCase(left, right) {
|
|
25
|
+
return (iamStringEqualsNormalizeCaseInsensitive(left) === iamStringEqualsNormalizeCaseInsensitive(right));
|
|
14
26
|
}
|
|
27
|
+
/** Internal alias retained for the IAM string condition operators. */
|
|
28
|
+
export const ignoreCaseEquals = iamStringEqualsIgnoreCase;
|
|
15
29
|
/**
|
|
16
|
-
*
|
|
30
|
+
* Normalize an already-resolved IAM string value for case-insensitive equality or indexing.
|
|
31
|
+
* Lowercases individual UTF-16 code units, including mappings that expand to multiple units.
|
|
32
|
+
* This is distinct from context-key normalization and depends on runtime Unicode mappings.
|
|
17
33
|
*
|
|
18
34
|
* @param value the string to transform
|
|
19
35
|
* @returns the concatenation of the lowercase code units
|
|
20
36
|
*/
|
|
21
|
-
function
|
|
37
|
+
export function iamStringEqualsNormalizeCaseInsensitive(value) {
|
|
22
38
|
let result = '';
|
|
23
39
|
for (let index = 0; index < value.length; index++) {
|
|
24
40
|
result += value[index].toLowerCase();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ignoreCaseEquals.js","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ignoreCaseEquals.js","sourceRoot":"","sources":["../../../../src/condition/string/ignoreCaseEquals.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,OAAO,IAAI,KAAK,KAAK,CAAA;AACvB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,KAAa;IACnE,OAAO,CACL,uCAAuC,CAAC,IAAI,CAAC,KAAK,uCAAuC,CAAC,KAAK,CAAC,CACjG,CAAA;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,CAAC,MAAM,gBAAgB,GAAG,yBAAyB,CAAA;AAEzD;;;;;;;GAOG;AACH,MAAM,UAAU,uCAAuC,CAAC,KAAa;IACnE,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAA;IACtC,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryContextKeyConstraints.d.ts","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discoveryContextKeyConstraints.d.ts","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"AAEA,yEAAyE;AACzE,UAAU,gCAAgC;IACxC;;;;;OAKG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,UAAU,iCAAiC;IACzC,gEAAgE;IAChE,eAAe,EAAE,IAAI,CAAA;IAErB,0FAA0F;IAC1F,YAAY,EAAE,IAAI,CAAA;CACnB;AAED;;GAEG;AACH,UAAU,mCAAmC;IAC3C,gEAAgE;IAChE,eAAe,EAAE,IAAI,CAAA;IAErB,sEAAsE;IACtE,YAAY,EAAE,KAAK,CAAA;CACpB;AAED;;;;;GAKG;AACH,UAAU,yBAAyB;IACjC,oEAAoE;IACpE,eAAe,EAAE,KAAK,CAAA;IAEtB,qEAAqE;IACrE,YAAY,EAAE,KAAK,CAAA;CACpB;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,6BAA6B,GAAG,gCAAgC,GAC1E,CACI,iCAAiC,GACjC,mCAAmC,GACnC,yBAAyB,CAC5B,CAAA;AAEH;;;;;;;;;;GAUG;AACH,MAAM,MAAM,sCAAsC,GAAG,CACjD,iCAAiC,GACjC,mCAAmC,GACnC,yBAAyB,CAC5B,GAAG;IACF,iFAAiF;IACjF,oBAAoB,EAAE,OAAO,CAAA;CAC9B,CAAA;AAuCD;;;;;GAKG;AACH,qBAAa,8BAA8B;IACzC,OAAO,CAAC,kBAAkB,CAA2C;IACrE,OAAO,CAAC,0BAA0B,CAA6C;IAC/E,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,aAAa,CAAiE;IAEtF;;;;OAIG;gBACS,WAAW,GAAE,6BAA6B,EAAO;IAgB7D;;;;;OAKG;IACI,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,sCAAsC;IAwCzE;;;;;;;;OAQG;IACH,OAAO,CAAC,aAAa;CAoBtB"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { normalizeCaseInsensitive } from '@actsecurity/iam-utils';
|
|
1
2
|
const unconstrained = {
|
|
2
3
|
presenceIsKnown: false,
|
|
3
4
|
valueIsKnown: false,
|
|
@@ -36,7 +37,8 @@ export class DiscoveryContextKeyConstraints {
|
|
|
36
37
|
*/
|
|
37
38
|
constraintFor(key) {
|
|
38
39
|
const lowerKey = key.toLowerCase();
|
|
39
|
-
|
|
40
|
+
// Regex matching can distinguish names that normalizeCaseInsensitive equates.
|
|
41
|
+
const cached = this.resolvedCache.get(key);
|
|
40
42
|
if (cached) {
|
|
41
43
|
return cached;
|
|
42
44
|
}
|
|
@@ -44,7 +46,7 @@ export class DiscoveryContextKeyConstraints {
|
|
|
44
46
|
const merge = (constraint) => {
|
|
45
47
|
result = effectiveConstraint(result.presenceIsKnown || constraint.presenceIsKnown, result.valueIsKnown || constraint.valueIsKnown, true);
|
|
46
48
|
};
|
|
47
|
-
const literal = this.literalConstraints.get(
|
|
49
|
+
const literal = this.literalConstraints.get(normalizeCaseInsensitive(key));
|
|
48
50
|
if (literal) {
|
|
49
51
|
merge(literal);
|
|
50
52
|
}
|
|
@@ -60,7 +62,7 @@ export class DiscoveryContextKeyConstraints {
|
|
|
60
62
|
merge(constraint);
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
|
-
this.resolvedCache.set(
|
|
65
|
+
this.resolvedCache.set(key, result);
|
|
64
66
|
return result;
|
|
65
67
|
}
|
|
66
68
|
/**
|
|
@@ -88,7 +90,7 @@ export class DiscoveryContextKeyConstraints {
|
|
|
88
90
|
}
|
|
89
91
|
}
|
|
90
92
|
else {
|
|
91
|
-
const key = constraint.keyName
|
|
93
|
+
const key = normalizeCaseInsensitive(constraint.keyName);
|
|
92
94
|
const existing = this.literalConstraints.get(key);
|
|
93
95
|
this.literalConstraints.set(key, existing ? mergeStored(existing, stored) : stored);
|
|
94
96
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discoveryContextKeyConstraints.js","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"discoveryContextKeyConstraints.js","sourceRoot":"","sources":["../../../src/context_keys/discoveryContextKeyConstraints.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { getDenialReasons, getGrantReasons, type DenialPolicyType, type RequestGrant, type RequestDenial } from './analysis/analyzeResults.js';
|
|
2
|
+
export { iamStringEquals, iamStringEqualsIgnoreCase, iamStringEqualsNormalizeCaseInsensitive } from './condition/string/ignoreCaseEquals.js';
|
|
2
3
|
export { typeForContextKey } from './context_keys/contextKeys.js';
|
|
3
4
|
export { isConditionKeyArray, type BaseConditionKeyType, type ConditionKeyType } from './context_keys/contextKeyTypes.js';
|
|
4
5
|
export type { DiscoveryContextKeyConstraint } from './context_keys/discoveryContextKeyConstraints.js';
|
package/dist/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAA;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AAC1E,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EACjC,MAAM,yCAAyC,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uCAAuC,EACxC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACtB,MAAM,mCAAmC,CAAA;AAC1C,YAAY,EAAE,6BAA6B,EAAE,MAAM,kDAAkD,CAAA;AACrG,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,YAAY,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAA;AAC1E,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EAChB,MAAM,eAAe,CAAA;AACtB,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EACjB,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,yBAAyB,EAC9B,KAAK,UAAU,EACf,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AACvE,YAAY,EACV,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,wBAAwB,EACxB,oBAAoB,EACpB,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EACjC,MAAM,yCAAyC,CAAA;AAChD,YAAY,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { getDenialReasons, getGrantReasons } from './analysis/analyzeResults.js';
|
|
2
|
+
export { iamStringEquals, iamStringEqualsIgnoreCase, iamStringEqualsNormalizeCaseInsensitive } from './condition/string/ignoreCaseEquals.js';
|
|
2
3
|
export { typeForContextKey } from './context_keys/contextKeys.js';
|
|
3
4
|
export { isConditionKeyArray } from './context_keys/contextKeyTypes.js';
|
|
4
5
|
export { findContextKeys } from './context_keys/findContextKeys.js';
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAIhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EAGpB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AA0BnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAM7B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AAavE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,eAAe,EAIhB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,eAAe,EACf,yBAAyB,EACzB,uCAAuC,EACxC,MAAM,wCAAwC,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EACL,mBAAmB,EAGpB,MAAM,mCAAmC,CAAA;AAE1C,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AA0BnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAA;AACjF,OAAO,EACL,kBAAkB,EAClB,2BAA2B,EAC3B,4BAA4B,EAM7B,MAAM,mCAAmC,CAAA;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAA;AAavE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+CAA+C,CAAA;AACnF,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestContext.d.ts","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,gBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAE3C;;;;;OAKG;IACH,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,CAAA;CAC9C;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAA;IAEZ;;OAEG;IACH,aAAa,IAAI,IAAI,IAAI,gBAAgB,CAAA;IAEzC;;OAEG;IACH,YAAY,IAAI,IAAI,IAAI,eAAe,CAAA;CACxC;AAED,MAAM,WAAW,gBAAiB,SAAQ,UAAU;IAClD;;OAEG;IACH,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD;;OAEG;IAEH,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,OAAO,CAAqC;gBAExC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAM9C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;CAGjD;AAED,qBAAa,cAAe,YAAW,UAAU,EAAE,gBAAgB,EAAE,eAAe;IAEzE,IAAI,EAAE,MAAM;IACnB,OAAO,CAAC,IAAI;gBADL,IAAI,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAGjC,aAAa,IAAI,IAAI,IAAI,gBAAgB;IAGzC,YAAY,IAAI,IAAI,IAAI,eAAe;IAIvC,IAAI,MAAM,IAAI,MAAM,EAAE,CAKrB;IAED,IAAI,KAAK,IAAI,MAAM,CAKlB;CACF"}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
+
import { normalizeCaseInsensitive } from '@actsecurity/iam-utils';
|
|
1
2
|
export class RequestContextImpl {
|
|
2
3
|
constructor(values) {
|
|
3
4
|
this.context = new Map();
|
|
4
5
|
for (const key in values) {
|
|
5
|
-
this.context.set(key
|
|
6
|
+
this.context.set(normalizeCaseInsensitive(key), new ContextKeyImpl(key, values[key]));
|
|
6
7
|
}
|
|
7
8
|
}
|
|
8
9
|
contextKeyExists(name) {
|
|
9
|
-
return this.context.has(name
|
|
10
|
+
return this.context.has(normalizeCaseInsensitive(name));
|
|
10
11
|
}
|
|
11
12
|
contextKeyValue(name) {
|
|
12
|
-
return this.context.get(name
|
|
13
|
+
return this.context.get(normalizeCaseInsensitive(name));
|
|
13
14
|
}
|
|
14
15
|
}
|
|
15
16
|
export class ContextKeyImpl {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"requestContext.js","sourceRoot":"","sources":["../../src/requestContext.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AAyDjE,MAAM,OAAO,kBAAkB;IAG7B,YAAY,MAAyC;QAF7C,YAAO,GAA4B,IAAI,GAAG,EAAE,CAAA;QAGlD,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,GAAG,CAAC,EAAE,IAAI,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IAEM,gBAAgB,CAAC,IAAY;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAA;IACzD,CAAC;IAEM,eAAe,CAAC,IAAY;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAe,CAAA;IACvE,CAAC;CACF;AAED,MAAM,OAAO,cAAc;IACzB,YACS,IAAY,EACX,IAAuB;QADxB,SAAI,GAAJ,IAAI,CAAQ;QACX,SAAI,GAAJ,IAAI,CAAmB;IAC9B,CAAC;IAEJ,aAAa;QACX,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAA;IACtC,CAAC;IACD,YAAY;QACV,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,MAAM;QACR,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAA;IAC5D,CAAC;IAED,IAAI,KAAK;QACP,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,IAAI,CAAA;QAClB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAA;IAC5D,CAAC;CACF"}
|