@actsecurity/iam-simulate 0.1.173
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 +661 -0
- package/README.md +257 -0
- package/dist/cjs/StatementAnalysis.d.ts +63 -0
- package/dist/cjs/StatementAnalysis.d.ts.map +1 -0
- package/dist/cjs/StatementAnalysis.js +48 -0
- package/dist/cjs/StatementAnalysis.js.map +1 -0
- package/dist/cjs/action/action.d.ts +37 -0
- package/dist/cjs/action/action.d.ts.map +1 -0
- package/dist/cjs/action/action.js +102 -0
- package/dist/cjs/action/action.js.map +1 -0
- package/dist/cjs/analysis/allowedConditions.d.ts +61 -0
- package/dist/cjs/analysis/allowedConditions.d.ts.map +1 -0
- package/dist/cjs/analysis/allowedConditions.js +395 -0
- package/dist/cjs/analysis/allowedConditions.js.map +1 -0
- package/dist/cjs/analysis/analyzeResults.d.ts +99 -0
- package/dist/cjs/analysis/analyzeResults.d.ts.map +1 -0
- package/dist/cjs/analysis/analyzeResults.js +187 -0
- package/dist/cjs/analysis/analyzeResults.js.map +1 -0
- package/dist/cjs/condition/BaseConditionOperator.d.ts +13 -0
- package/dist/cjs/condition/BaseConditionOperator.d.ts.map +1 -0
- package/dist/cjs/condition/BaseConditionOperator.js +3 -0
- package/dist/cjs/condition/BaseConditionOperator.js.map +1 -0
- package/dist/cjs/condition/arn/ArnEquals.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnEquals.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnEquals.js +12 -0
- package/dist/cjs/condition/arn/ArnEquals.js.map +1 -0
- package/dist/cjs/condition/arn/ArnLike.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnLike.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnLike.js +18 -0
- package/dist/cjs/condition/arn/ArnLike.js.map +1 -0
- package/dist/cjs/condition/arn/ArnNotEquals.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnNotEquals.js +12 -0
- package/dist/cjs/condition/arn/ArnNotEquals.js.map +1 -0
- package/dist/cjs/condition/arn/ArnNotLike.d.ts +3 -0
- package/dist/cjs/condition/arn/ArnNotLike.d.ts.map +1 -0
- package/dist/cjs/condition/arn/ArnNotLike.js +18 -0
- package/dist/cjs/condition/arn/ArnNotLike.js.map +1 -0
- package/dist/cjs/condition/arn/arn.d.ts +12 -0
- package/dist/cjs/condition/arn/arn.d.ts.map +1 -0
- package/dist/cjs/condition/arn/arn.js +71 -0
- package/dist/cjs/condition/arn/arn.js.map +1 -0
- package/dist/cjs/condition/binary/BinaryEquals.d.ts +7 -0
- package/dist/cjs/condition/binary/BinaryEquals.d.ts.map +1 -0
- package/dist/cjs/condition/binary/BinaryEquals.js +28 -0
- package/dist/cjs/condition/binary/BinaryEquals.js.map +1 -0
- package/dist/cjs/condition/boolean/Bool.d.ts +3 -0
- package/dist/cjs/condition/boolean/Bool.d.ts.map +1 -0
- package/dist/cjs/condition/boolean/Bool.js +54 -0
- package/dist/cjs/condition/boolean/Bool.js.map +1 -0
- package/dist/cjs/condition/condition.d.ts +26 -0
- package/dist/cjs/condition/condition.d.ts.map +1 -0
- package/dist/cjs/condition/condition.js +665 -0
- package/dist/cjs/condition/condition.js.map +1 -0
- package/dist/cjs/condition/conditionUtil.d.ts +10 -0
- package/dist/cjs/condition/conditionUtil.d.ts.map +1 -0
- package/dist/cjs/condition/conditionUtil.js +19 -0
- package/dist/cjs/condition/conditionUtil.js.map +1 -0
- package/dist/cjs/condition/date/DateEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateEquals.js +22 -0
- package/dist/cjs/condition/date/DateEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThan.d.ts +3 -0
- package/dist/cjs/condition/date/DateGreaterThan.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThan.js +22 -0
- package/dist/cjs/condition/date/DateGreaterThan.js.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.js +22 -0
- package/dist/cjs/condition/date/DateGreaterThanEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateLessThan.d.ts +3 -0
- package/dist/cjs/condition/date/DateLessThan.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateLessThan.js +22 -0
- package/dist/cjs/condition/date/DateLessThan.js.map +1 -0
- package/dist/cjs/condition/date/DateLessThanEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateLessThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateLessThanEquals.js +22 -0
- package/dist/cjs/condition/date/DateLessThanEquals.js.map +1 -0
- package/dist/cjs/condition/date/DateNotEquals.d.ts +3 -0
- package/dist/cjs/condition/date/DateNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/date/DateNotEquals.js +22 -0
- package/dist/cjs/condition/date/DateNotEquals.js.map +1 -0
- package/dist/cjs/condition/date/date.d.ts +18 -0
- package/dist/cjs/condition/date/date.d.ts.map +1 -0
- package/dist/cjs/condition/date/date.js +57 -0
- package/dist/cjs/condition/date/date.js.map +1 -0
- package/dist/cjs/condition/ipaddress/IpAddress.d.ts +3 -0
- package/dist/cjs/condition/ipaddress/IpAddress.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/IpAddress.js +20 -0
- package/dist/cjs/condition/ipaddress/IpAddress.js.map +1 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts +3 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.js +20 -0
- package/dist/cjs/condition/ipaddress/NotIpAddress.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ip.d.ts +11 -0
- package/dist/cjs/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ip.js +70 -0
- package/dist/cjs/condition/ipaddress/ip.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv4.d.ts +24 -0
- package/dist/cjs/condition/ipaddress/ipv4.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv4.js +59 -0
- package/dist/cjs/condition/ipaddress/ipv4.js.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv6.d.ts +24 -0
- package/dist/cjs/condition/ipaddress/ipv6.d.ts.map +1 -0
- package/dist/cjs/condition/ipaddress/ipv6.js +111 -0
- package/dist/cjs/condition/ipaddress/ipv6.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.js +22 -0
- package/dist/cjs/condition/numeric/NumericGreaterThan.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThan.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericLessThan.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThan.js +22 -0
- package/dist/cjs/condition/numeric/NumericLessThan.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericLessThanEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.d.ts +3 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.js +22 -0
- package/dist/cjs/condition/numeric/NumericNotEquals.js.map +1 -0
- package/dist/cjs/condition/numeric/numeric.d.ts +18 -0
- package/dist/cjs/condition/numeric/numeric.d.ts.map +1 -0
- package/dist/cjs/condition/numeric/numeric.js +56 -0
- package/dist/cjs/condition/numeric/numeric.js.map +1 -0
- package/dist/cjs/condition/string/StringEquals.d.ts +3 -0
- package/dist/cjs/condition/string/StringEquals.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringEquals.js +35 -0
- package/dist/cjs/condition/string/StringEquals.js.map +1 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js +35 -0
- package/dist/cjs/condition/string/StringEqualsIgnoreCase.js.map +1 -0
- package/dist/cjs/condition/string/StringLike.d.ts +3 -0
- package/dist/cjs/condition/string/StringLike.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringLike.js +35 -0
- package/dist/cjs/condition/string/StringLike.js.map +1 -0
- package/dist/cjs/condition/string/StringNotEquals.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotEquals.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotEquals.js +35 -0
- package/dist/cjs/condition/string/StringNotEquals.js.map +1 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js +35 -0
- package/dist/cjs/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
- package/dist/cjs/condition/string/StringNotLike.d.ts +3 -0
- package/dist/cjs/condition/string/StringNotLike.d.ts.map +1 -0
- package/dist/cjs/condition/string/StringNotLike.js +35 -0
- package/dist/cjs/condition/string/StringNotLike.js.map +1 -0
- package/dist/cjs/context_keys/contextKeyTypes.d.ts +19 -0
- package/dist/cjs/context_keys/contextKeyTypes.d.ts.map +1 -0
- package/dist/cjs/context_keys/contextKeyTypes.js +27 -0
- package/dist/cjs/context_keys/contextKeyTypes.js.map +1 -0
- package/dist/cjs/context_keys/contextKeys.d.ts +24 -0
- package/dist/cjs/context_keys/contextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/contextKeys.js +121 -0
- package/dist/cjs/context_keys/contextKeys.js.map +1 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js +153 -0
- package/dist/cjs/context_keys/discoveryContextKeyConstraints.js.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts +19 -0
- package/dist/cjs/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/cjs/context_keys/findContextKeys.js +58 -0
- package/dist/cjs/context_keys/findContextKeys.js.map +1 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts +134 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.js +444 -0
- package/dist/cjs/core_engine/CoreSimulatorEngine.js.map +1 -0
- package/dist/cjs/evaluate.d.ts +199 -0
- package/dist/cjs/evaluate.d.ts.map +1 -0
- package/dist/cjs/evaluate.js +3 -0
- package/dist/cjs/evaluate.js.map +1 -0
- package/dist/cjs/explain/displayExplainCli.d.ts +3 -0
- package/dist/cjs/explain/displayExplainCli.d.ts.map +1 -0
- package/dist/cjs/explain/displayExplainCli.js +260 -0
- package/dist/cjs/explain/displayExplainCli.js.map +1 -0
- package/dist/cjs/explain/statementExplain.d.ts +161 -0
- package/dist/cjs/explain/statementExplain.d.ts.map +1 -0
- package/dist/cjs/explain/statementExplain.js +33 -0
- package/dist/cjs/explain/statementExplain.js.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts +3 -0
- package/dist/cjs/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js +12 -0
- package/dist/cjs/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/cjs/index.d.ts +16 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +25 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/policyType.d.ts +13 -0
- package/dist/cjs/policyType.d.ts.map +1 -0
- package/dist/cjs/policyType.js +3 -0
- package/dist/cjs/policyType.js.map +1 -0
- package/dist/cjs/principal/principal.d.ts +61 -0
- package/dist/cjs/principal/principal.d.ts.map +1 -0
- package/dist/cjs/principal/principal.js +357 -0
- package/dist/cjs/principal/principal.js.map +1 -0
- package/dist/cjs/request/request.d.ts +66 -0
- package/dist/cjs/request/request.d.ts.map +1 -0
- package/dist/cjs/request/request.js +42 -0
- package/dist/cjs/request/request.js.map +1 -0
- package/dist/cjs/request/requestAction.d.ts +27 -0
- package/dist/cjs/request/requestAction.d.ts.map +1 -0
- package/dist/cjs/request/requestAction.js +20 -0
- package/dist/cjs/request/requestAction.js.map +1 -0
- package/dist/cjs/request/requestPrincipal.d.ts +92 -0
- package/dist/cjs/request/requestPrincipal.d.ts.map +1 -0
- package/dist/cjs/request/requestPrincipal.js +88 -0
- package/dist/cjs/request/requestPrincipal.js.map +1 -0
- package/dist/cjs/request/requestResource.d.ts +55 -0
- package/dist/cjs/request/requestResource.d.ts.map +1 -0
- package/dist/cjs/request/requestResource.js +40 -0
- package/dist/cjs/request/requestResource.js.map +1 -0
- package/dist/cjs/requestContext.d.ts +63 -0
- package/dist/cjs/requestContext.d.ts.map +1 -0
- package/dist/cjs/requestContext.js +46 -0
- package/dist/cjs/requestContext.js.map +1 -0
- package/dist/cjs/resource/resource.d.ts +54 -0
- package/dist/cjs/resource/resource.d.ts.map +1 -0
- package/dist/cjs/resource/resource.js +585 -0
- package/dist/cjs/resource/resource.js.map +1 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts +182 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.js +625 -0
- package/dist/cjs/services/DefaultServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/IamServiceAuthorizer.d.ts +10 -0
- package/dist/cjs/services/IamServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/IamServiceAuthorizer.js +65 -0
- package/dist/cjs/services/IamServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/KmsServiceAuthorizer.d.ts +29 -0
- package/dist/cjs/services/KmsServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/KmsServiceAuthorizer.js +83 -0
- package/dist/cjs/services/KmsServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts +27 -0
- package/dist/cjs/services/ServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/ServiceAuthorizer.js +3 -0
- package/dist/cjs/services/ServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/StsServiceAuthorizer.d.ts +19 -0
- package/dist/cjs/services/StsServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/StsServiceAuthorizer.js +45 -0
- package/dist/cjs/services/StsServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts +24 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.js +79 -0
- package/dist/cjs/services/s3/S3ServiceAuthorizer.js.map +1 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts +50 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.js +301 -0
- package/dist/cjs/services/s3/s3BlockPublicAccess.js.map +1 -0
- package/dist/cjs/simulation_engine/contextKeys.d.ts +13 -0
- package/dist/cjs/simulation_engine/contextKeys.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/contextKeys.js +58 -0
- package/dist/cjs/simulation_engine/contextKeys.js.map +1 -0
- package/dist/cjs/simulation_engine/overallResult.d.ts +13 -0
- package/dist/cjs/simulation_engine/overallResult.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/overallResult.js +35 -0
- package/dist/cjs/simulation_engine/overallResult.js.map +1 -0
- package/dist/cjs/simulation_engine/policyResources.d.ts +44 -0
- package/dist/cjs/simulation_engine/policyResources.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/policyResources.js +120 -0
- package/dist/cjs/simulation_engine/policyResources.js.map +1 -0
- package/dist/cjs/simulation_engine/resourceTypes.d.ts +11 -0
- package/dist/cjs/simulation_engine/resourceTypes.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/resourceTypes.js +26 -0
- package/dist/cjs/simulation_engine/resourceTypes.js.map +1 -0
- package/dist/cjs/simulation_engine/simulation.d.ts +114 -0
- package/dist/cjs/simulation_engine/simulation.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulation.js +35 -0
- package/dist/cjs/simulation_engine/simulation.js.map +1 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts +128 -0
- package/dist/cjs/simulation_engine/simulationEngine.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulationEngine.js +432 -0
- package/dist/cjs/simulation_engine/simulationEngine.js.map +1 -0
- package/dist/cjs/simulation_engine/simulationOptions.d.ts +21 -0
- package/dist/cjs/simulation_engine/simulationOptions.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/simulationOptions.js +3 -0
- package/dist/cjs/simulation_engine/simulationOptions.js.map +1 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js +62 -0
- package/dist/cjs/simulation_engine/unsafeSimulationEngine.js.map +1 -0
- package/dist/cjs/util/resourceStrings.d.ts +19 -0
- package/dist/cjs/util/resourceStrings.d.ts.map +1 -0
- package/dist/cjs/util/resourceStrings.js +107 -0
- package/dist/cjs/util/resourceStrings.js.map +1 -0
- package/dist/cjs/util.d.ts +90 -0
- package/dist/cjs/util.d.ts.map +1 -0
- package/dist/cjs/util.js +350 -0
- package/dist/cjs/util.js.map +1 -0
- package/dist/esm/StatementAnalysis.d.ts +63 -0
- package/dist/esm/StatementAnalysis.d.ts.map +1 -0
- package/dist/esm/StatementAnalysis.js +46 -0
- package/dist/esm/StatementAnalysis.js.map +1 -0
- package/dist/esm/action/action.d.ts +37 -0
- package/dist/esm/action/action.d.ts.map +1 -0
- package/dist/esm/action/action.js +100 -0
- package/dist/esm/action/action.js.map +1 -0
- package/dist/esm/analysis/allowedConditions.d.ts +61 -0
- package/dist/esm/analysis/allowedConditions.d.ts.map +1 -0
- package/dist/esm/analysis/allowedConditions.js +382 -0
- package/dist/esm/analysis/allowedConditions.js.map +1 -0
- package/dist/esm/analysis/analyzeResults.d.ts +99 -0
- package/dist/esm/analysis/analyzeResults.d.ts.map +1 -0
- package/dist/esm/analysis/analyzeResults.js +183 -0
- package/dist/esm/analysis/analyzeResults.js.map +1 -0
- package/dist/esm/condition/BaseConditionOperator.d.ts +13 -0
- package/dist/esm/condition/BaseConditionOperator.d.ts.map +1 -0
- package/dist/esm/condition/BaseConditionOperator.js +3 -0
- package/dist/esm/condition/BaseConditionOperator.js.map +1 -0
- package/dist/esm/condition/arn/ArnEquals.d.ts +3 -0
- package/dist/esm/condition/arn/ArnEquals.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnEquals.js +10 -0
- package/dist/esm/condition/arn/ArnEquals.js.map +1 -0
- package/dist/esm/condition/arn/ArnLike.d.ts +3 -0
- package/dist/esm/condition/arn/ArnLike.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnLike.js +16 -0
- package/dist/esm/condition/arn/ArnLike.js.map +1 -0
- package/dist/esm/condition/arn/ArnNotEquals.d.ts +3 -0
- package/dist/esm/condition/arn/ArnNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnNotEquals.js +10 -0
- package/dist/esm/condition/arn/ArnNotEquals.js.map +1 -0
- package/dist/esm/condition/arn/ArnNotLike.d.ts +3 -0
- package/dist/esm/condition/arn/ArnNotLike.d.ts.map +1 -0
- package/dist/esm/condition/arn/ArnNotLike.js +16 -0
- package/dist/esm/condition/arn/ArnNotLike.js.map +1 -0
- package/dist/esm/condition/arn/arn.d.ts +12 -0
- package/dist/esm/condition/arn/arn.d.ts.map +1 -0
- package/dist/esm/condition/arn/arn.js +70 -0
- package/dist/esm/condition/arn/arn.js.map +1 -0
- package/dist/esm/condition/binary/BinaryEquals.d.ts +7 -0
- package/dist/esm/condition/binary/BinaryEquals.d.ts.map +1 -0
- package/dist/esm/condition/binary/BinaryEquals.js +27 -0
- package/dist/esm/condition/binary/BinaryEquals.js.map +1 -0
- package/dist/esm/condition/boolean/Bool.d.ts +3 -0
- package/dist/esm/condition/boolean/Bool.d.ts.map +1 -0
- package/dist/esm/condition/boolean/Bool.js +53 -0
- package/dist/esm/condition/boolean/Bool.js.map +1 -0
- package/dist/esm/condition/condition.d.ts +26 -0
- package/dist/esm/condition/condition.d.ts.map +1 -0
- package/dist/esm/condition/condition.js +666 -0
- package/dist/esm/condition/condition.js.map +1 -0
- package/dist/esm/condition/conditionUtil.d.ts +10 -0
- package/dist/esm/condition/conditionUtil.d.ts.map +1 -0
- package/dist/esm/condition/conditionUtil.js +17 -0
- package/dist/esm/condition/conditionUtil.js.map +1 -0
- package/dist/esm/condition/date/DateEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateEquals.js +20 -0
- package/dist/esm/condition/date/DateEquals.js.map +1 -0
- package/dist/esm/condition/date/DateGreaterThan.d.ts +3 -0
- package/dist/esm/condition/date/DateGreaterThan.d.ts.map +1 -0
- package/dist/esm/condition/date/DateGreaterThan.js +20 -0
- package/dist/esm/condition/date/DateGreaterThan.js.map +1 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.js +20 -0
- package/dist/esm/condition/date/DateGreaterThanEquals.js.map +1 -0
- package/dist/esm/condition/date/DateLessThan.d.ts +3 -0
- package/dist/esm/condition/date/DateLessThan.d.ts.map +1 -0
- package/dist/esm/condition/date/DateLessThan.js +20 -0
- package/dist/esm/condition/date/DateLessThan.js.map +1 -0
- package/dist/esm/condition/date/DateLessThanEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateLessThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateLessThanEquals.js +20 -0
- package/dist/esm/condition/date/DateLessThanEquals.js.map +1 -0
- package/dist/esm/condition/date/DateNotEquals.d.ts +3 -0
- package/dist/esm/condition/date/DateNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/date/DateNotEquals.js +20 -0
- package/dist/esm/condition/date/DateNotEquals.js.map +1 -0
- package/dist/esm/condition/date/date.d.ts +18 -0
- package/dist/esm/condition/date/date.d.ts.map +1 -0
- package/dist/esm/condition/date/date.js +54 -0
- package/dist/esm/condition/date/date.js.map +1 -0
- package/dist/esm/condition/ipaddress/IpAddress.d.ts +3 -0
- package/dist/esm/condition/ipaddress/IpAddress.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/IpAddress.js +18 -0
- package/dist/esm/condition/ipaddress/IpAddress.js.map +1 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.d.ts +3 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.js +18 -0
- package/dist/esm/condition/ipaddress/NotIpAddress.js.map +1 -0
- package/dist/esm/condition/ipaddress/ip.d.ts +11 -0
- package/dist/esm/condition/ipaddress/ip.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ip.js +68 -0
- package/dist/esm/condition/ipaddress/ip.js.map +1 -0
- package/dist/esm/condition/ipaddress/ipv4.d.ts +24 -0
- package/dist/esm/condition/ipaddress/ipv4.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ipv4.js +54 -0
- package/dist/esm/condition/ipaddress/ipv4.js.map +1 -0
- package/dist/esm/condition/ipaddress/ipv6.d.ts +24 -0
- package/dist/esm/condition/ipaddress/ipv6.d.ts.map +1 -0
- package/dist/esm/condition/ipaddress/ipv6.js +106 -0
- package/dist/esm/condition/ipaddress/ipv6.js.map +1 -0
- package/dist/esm/condition/numeric/NumericEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.js +20 -0
- package/dist/esm/condition/numeric/NumericGreaterThan.js.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericGreaterThanEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThan.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericLessThan.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThan.js +20 -0
- package/dist/esm/condition/numeric/NumericLessThan.js.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericLessThanEquals.js.map +1 -0
- package/dist/esm/condition/numeric/NumericNotEquals.d.ts +3 -0
- package/dist/esm/condition/numeric/NumericNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/numeric/NumericNotEquals.js +20 -0
- package/dist/esm/condition/numeric/NumericNotEquals.js.map +1 -0
- package/dist/esm/condition/numeric/numeric.d.ts +18 -0
- package/dist/esm/condition/numeric/numeric.d.ts.map +1 -0
- package/dist/esm/condition/numeric/numeric.js +53 -0
- package/dist/esm/condition/numeric/numeric.js.map +1 -0
- package/dist/esm/condition/string/StringEquals.d.ts +3 -0
- package/dist/esm/condition/string/StringEquals.d.ts.map +1 -0
- package/dist/esm/condition/string/StringEquals.js +34 -0
- package/dist/esm/condition/string/StringEquals.js.map +1 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts +3 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js +34 -0
- package/dist/esm/condition/string/StringEqualsIgnoreCase.js.map +1 -0
- package/dist/esm/condition/string/StringLike.d.ts +3 -0
- package/dist/esm/condition/string/StringLike.d.ts.map +1 -0
- package/dist/esm/condition/string/StringLike.js +34 -0
- package/dist/esm/condition/string/StringLike.js.map +1 -0
- package/dist/esm/condition/string/StringNotEquals.d.ts +3 -0
- package/dist/esm/condition/string/StringNotEquals.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotEquals.js +34 -0
- package/dist/esm/condition/string/StringNotEquals.js.map +1 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts +3 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js +34 -0
- package/dist/esm/condition/string/StringNotEqualsIgnoreCase.js.map +1 -0
- package/dist/esm/condition/string/StringNotLike.d.ts +3 -0
- package/dist/esm/condition/string/StringNotLike.d.ts.map +1 -0
- package/dist/esm/condition/string/StringNotLike.js +34 -0
- package/dist/esm/condition/string/StringNotLike.js.map +1 -0
- package/dist/esm/context_keys/contextKeyTypes.d.ts +19 -0
- package/dist/esm/context_keys/contextKeyTypes.d.ts.map +1 -0
- package/dist/esm/context_keys/contextKeyTypes.js +23 -0
- package/dist/esm/context_keys/contextKeyTypes.js.map +1 -0
- package/dist/esm/context_keys/contextKeys.d.ts +24 -0
- package/dist/esm/context_keys/contextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/contextKeys.js +117 -0
- package/dist/esm/context_keys/contextKeys.js.map +1 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts +103 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.d.ts.map +1 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js +149 -0
- package/dist/esm/context_keys/discoveryContextKeyConstraints.js.map +1 -0
- package/dist/esm/context_keys/findContextKeys.d.ts +19 -0
- package/dist/esm/context_keys/findContextKeys.d.ts.map +1 -0
- package/dist/esm/context_keys/findContextKeys.js +55 -0
- package/dist/esm/context_keys/findContextKeys.js.map +1 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.d.ts +134 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.d.ts.map +1 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.js +441 -0
- package/dist/esm/core_engine/CoreSimulatorEngine.js.map +1 -0
- package/dist/esm/evaluate.d.ts +199 -0
- package/dist/esm/evaluate.d.ts.map +1 -0
- package/dist/esm/evaluate.js +2 -0
- package/dist/esm/evaluate.js.map +1 -0
- package/dist/esm/explain/displayExplainCli.d.ts +3 -0
- package/dist/esm/explain/displayExplainCli.d.ts.map +1 -0
- package/dist/esm/explain/displayExplainCli.js +258 -0
- package/dist/esm/explain/displayExplainCli.js.map +1 -0
- package/dist/esm/explain/statementExplain.d.ts +161 -0
- package/dist/esm/explain/statementExplain.d.ts.map +1 -0
- package/dist/esm/explain/statementExplain.js +30 -0
- package/dist/esm/explain/statementExplain.js.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts +3 -0
- package/dist/esm/global_conditions/globalConditionKeys.d.ts.map +1 -0
- package/dist/esm/global_conditions/globalConditionKeys.js +9 -0
- package/dist/esm/global_conditions/globalConditionKeys.js.map +1 -0
- package/dist/esm/index.d.ts +16 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +10 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/policyType.d.ts +13 -0
- package/dist/esm/policyType.d.ts.map +1 -0
- package/dist/esm/policyType.js +2 -0
- package/dist/esm/policyType.js.map +1 -0
- package/dist/esm/principal/principal.d.ts +61 -0
- package/dist/esm/principal/principal.d.ts.map +1 -0
- package/dist/esm/principal/principal.js +354 -0
- package/dist/esm/principal/principal.js.map +1 -0
- package/dist/esm/request/request.d.ts +66 -0
- package/dist/esm/request/request.d.ts.map +1 -0
- package/dist/esm/request/request.js +34 -0
- package/dist/esm/request/request.js.map +1 -0
- package/dist/esm/request/requestAction.d.ts +27 -0
- package/dist/esm/request/requestAction.d.ts.map +1 -0
- package/dist/esm/request/requestAction.js +15 -0
- package/dist/esm/request/requestAction.js.map +1 -0
- package/dist/esm/request/requestPrincipal.d.ts +92 -0
- package/dist/esm/request/requestPrincipal.d.ts.map +1 -0
- package/dist/esm/request/requestPrincipal.js +80 -0
- package/dist/esm/request/requestPrincipal.js.map +1 -0
- package/dist/esm/request/requestResource.d.ts +55 -0
- package/dist/esm/request/requestResource.d.ts.map +1 -0
- package/dist/esm/request/requestResource.js +34 -0
- package/dist/esm/request/requestResource.js.map +1 -0
- package/dist/esm/requestContext.d.ts +63 -0
- package/dist/esm/requestContext.d.ts.map +1 -0
- package/dist/esm/requestContext.js +39 -0
- package/dist/esm/requestContext.js.map +1 -0
- package/dist/esm/resource/resource.d.ts +54 -0
- package/dist/esm/resource/resource.d.ts.map +1 -0
- package/dist/esm/resource/resource.js +582 -0
- package/dist/esm/resource/resource.js.map +1 -0
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts +182 -0
- package/dist/esm/services/DefaultServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/DefaultServiceAuthorizer.js +623 -0
- package/dist/esm/services/DefaultServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/IamServiceAuthorizer.d.ts +10 -0
- package/dist/esm/services/IamServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/IamServiceAuthorizer.js +63 -0
- package/dist/esm/services/IamServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/KmsServiceAuthorizer.d.ts +29 -0
- package/dist/esm/services/KmsServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/KmsServiceAuthorizer.js +82 -0
- package/dist/esm/services/KmsServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts +27 -0
- package/dist/esm/services/ServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/ServiceAuthorizer.js +5 -0
- package/dist/esm/services/ServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/StsServiceAuthorizer.d.ts +19 -0
- package/dist/esm/services/StsServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/StsServiceAuthorizer.js +44 -0
- package/dist/esm/services/StsServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts +24 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.d.ts.map +1 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.js +76 -0
- package/dist/esm/services/s3/S3ServiceAuthorizer.js.map +1 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.d.ts +50 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.d.ts.map +1 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.js +299 -0
- package/dist/esm/services/s3/s3BlockPublicAccess.js.map +1 -0
- package/dist/esm/simulation_engine/contextKeys.d.ts +13 -0
- package/dist/esm/simulation_engine/contextKeys.d.ts.map +1 -0
- package/dist/esm/simulation_engine/contextKeys.js +55 -0
- package/dist/esm/simulation_engine/contextKeys.js.map +1 -0
- package/dist/esm/simulation_engine/overallResult.d.ts +13 -0
- package/dist/esm/simulation_engine/overallResult.d.ts.map +1 -0
- package/dist/esm/simulation_engine/overallResult.js +32 -0
- package/dist/esm/simulation_engine/overallResult.js.map +1 -0
- package/dist/esm/simulation_engine/policyResources.d.ts +44 -0
- package/dist/esm/simulation_engine/policyResources.d.ts.map +1 -0
- package/dist/esm/simulation_engine/policyResources.js +117 -0
- package/dist/esm/simulation_engine/policyResources.js.map +1 -0
- package/dist/esm/simulation_engine/resourceTypes.d.ts +11 -0
- package/dist/esm/simulation_engine/resourceTypes.d.ts.map +1 -0
- package/dist/esm/simulation_engine/resourceTypes.js +23 -0
- package/dist/esm/simulation_engine/resourceTypes.js.map +1 -0
- package/dist/esm/simulation_engine/simulation.d.ts +114 -0
- package/dist/esm/simulation_engine/simulation.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulation.js +30 -0
- package/dist/esm/simulation_engine/simulation.js.map +1 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts +128 -0
- package/dist/esm/simulation_engine/simulationEngine.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulationEngine.js +430 -0
- package/dist/esm/simulation_engine/simulationEngine.js.map +1 -0
- package/dist/esm/simulation_engine/simulationOptions.d.ts +21 -0
- package/dist/esm/simulation_engine/simulationOptions.d.ts.map +1 -0
- package/dist/esm/simulation_engine/simulationOptions.js +3 -0
- package/dist/esm/simulation_engine/simulationOptions.js.map +1 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts +13 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.d.ts.map +1 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js +62 -0
- package/dist/esm/simulation_engine/unsafeSimulationEngine.js.map +1 -0
- package/dist/esm/util/resourceStrings.d.ts +19 -0
- package/dist/esm/util/resourceStrings.d.ts.map +1 -0
- package/dist/esm/util/resourceStrings.js +103 -0
- package/dist/esm/util/resourceStrings.js.map +1 -0
- package/dist/esm/util.d.ts +90 -0
- package/dist/esm/util.d.ts.map +1 -0
- package/dist/esm/util.js +341 -0
- package/dist/esm/util.js.map +1 -0
- package/package.json +119 -0
|
@@ -0,0 +1,666 @@
|
|
|
1
|
+
import {} from '@actsecurity/iam-policy';
|
|
2
|
+
import {} from '../core_engine/CoreSimulatorEngine.js';
|
|
3
|
+
import {} from '../explain/statementExplain.js';
|
|
4
|
+
import {} from '../request/request.js';
|
|
5
|
+
import { ContextKeyImpl } from '../requestContext.js';
|
|
6
|
+
import { ArnEquals } from './arn/ArnEquals.js';
|
|
7
|
+
import { ArnLike } from './arn/ArnLike.js';
|
|
8
|
+
import { ArnNotEquals } from './arn/ArnNotEquals.js';
|
|
9
|
+
import { ArnNotLike } from './arn/ArnNotLike.js';
|
|
10
|
+
import {} from './BaseConditionOperator.js';
|
|
11
|
+
import { BinaryEquals } from './binary/BinaryEquals.js';
|
|
12
|
+
import { Bool } from './boolean/Bool.js';
|
|
13
|
+
import { DateEquals } from './date/DateEquals.js';
|
|
14
|
+
import { DateGreaterThan } from './date/DateGreaterThan.js';
|
|
15
|
+
import { DateGreaterThanEquals } from './date/DateGreaterThanEquals.js';
|
|
16
|
+
import { DateLessThan } from './date/DateLessThan.js';
|
|
17
|
+
import { DateLessThanEquals } from './date/DateLessThanEquals.js';
|
|
18
|
+
import { DateNotEquals } from './date/DateNotEquals.js';
|
|
19
|
+
import { IpAddress } from './ipaddress/IpAddress.js';
|
|
20
|
+
import { NotIpAddress } from './ipaddress/NotIpAddress.js';
|
|
21
|
+
import { NumericEquals } from './numeric/NumericEquals.js';
|
|
22
|
+
import { NumericGreaterThan } from './numeric/NumericGreaterThan.js';
|
|
23
|
+
import { NumericGreaterThanEquals } from './numeric/NumericGreaterThanEquals.js';
|
|
24
|
+
import { NumericLessThan } from './numeric/NumericLessThan.js';
|
|
25
|
+
import { NumericLessThanEquals } from './numeric/NumericLessThanEquals.js';
|
|
26
|
+
import { NumericNotEquals } from './numeric/NumericNotEquals.js';
|
|
27
|
+
import { StringEquals } from './string/StringEquals.js';
|
|
28
|
+
import { StringEqualsIgnoreCase } from './string/StringEqualsIgnoreCase.js';
|
|
29
|
+
import { StringLike } from './string/StringLike.js';
|
|
30
|
+
import { StringNotEquals } from './string/StringNotEquals.js';
|
|
31
|
+
import { StringNotEqualsIgnoreCase } from './string/StringNotEqualsIgnoreCase.js';
|
|
32
|
+
import { StringNotLike } from './string/StringNotLike.js';
|
|
33
|
+
const allOperators = [
|
|
34
|
+
StringEquals,
|
|
35
|
+
StringNotEquals,
|
|
36
|
+
StringEqualsIgnoreCase,
|
|
37
|
+
StringNotEqualsIgnoreCase,
|
|
38
|
+
StringLike,
|
|
39
|
+
StringNotLike,
|
|
40
|
+
NumericEquals,
|
|
41
|
+
NumericNotEquals,
|
|
42
|
+
NumericLessThan,
|
|
43
|
+
NumericLessThanEquals,
|
|
44
|
+
NumericGreaterThan,
|
|
45
|
+
NumericGreaterThanEquals,
|
|
46
|
+
DateEquals,
|
|
47
|
+
DateNotEquals,
|
|
48
|
+
DateLessThan,
|
|
49
|
+
DateLessThanEquals,
|
|
50
|
+
DateGreaterThan,
|
|
51
|
+
DateGreaterThanEquals,
|
|
52
|
+
Bool,
|
|
53
|
+
BinaryEquals,
|
|
54
|
+
IpAddress,
|
|
55
|
+
NotIpAddress,
|
|
56
|
+
ArnLike,
|
|
57
|
+
ArnEquals,
|
|
58
|
+
ArnNotLike,
|
|
59
|
+
ArnNotEquals
|
|
60
|
+
];
|
|
61
|
+
const baseOperations = {};
|
|
62
|
+
for (const operator of allOperators) {
|
|
63
|
+
baseOperations[operator.name.toLowerCase()] = operator;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Evaluate a set of conditions against a request
|
|
67
|
+
*
|
|
68
|
+
* @param request the request to test
|
|
69
|
+
* @param conditions the conditions to test
|
|
70
|
+
* @returns Match if all conditions match, NoMatch if any do not. Also returns all the details of the evaluation
|
|
71
|
+
*/
|
|
72
|
+
export function requestMatchesConditions(request, conditions, statementType, simulationParameters) {
|
|
73
|
+
const normalizedStatementType = statementType.toLowerCase();
|
|
74
|
+
const results = conditions.map((condition) => {
|
|
75
|
+
const evaluation = evaluateSingleCondition(request, condition, simulationParameters);
|
|
76
|
+
return {
|
|
77
|
+
condition,
|
|
78
|
+
explain: evaluation.explain,
|
|
79
|
+
knowledge: evaluation.knowledge
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
const isIgnored = (c) => {
|
|
83
|
+
if (simulationParameters.simulationMode !== 'Discovery') {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(c.condition.conditionKey());
|
|
87
|
+
if (c.knowledge.conditionResult !== 'known') {
|
|
88
|
+
if (normalizedStatementType === 'allow') {
|
|
89
|
+
return (!c.explain.matches ||
|
|
90
|
+
allowMatchedOnlyByUnknownMissingKey(c) ||
|
|
91
|
+
allowHasUnknownValueRequirement(c));
|
|
92
|
+
}
|
|
93
|
+
if (normalizedStatementType === 'deny') {
|
|
94
|
+
return true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (constraint.explicitlyConfigured) {
|
|
98
|
+
return false;
|
|
99
|
+
}
|
|
100
|
+
// In Allows we ignore conditions that do not match
|
|
101
|
+
if (normalizedStatementType === 'allow') {
|
|
102
|
+
return !c.explain.matches;
|
|
103
|
+
}
|
|
104
|
+
// In Denies we ignore conditions that do match
|
|
105
|
+
if (normalizedStatementType === 'deny') {
|
|
106
|
+
return c.explain.matches;
|
|
107
|
+
}
|
|
108
|
+
throw new Error(`Unexpected condition explain result in discovery mode, statementType: ${statementType}`);
|
|
109
|
+
};
|
|
110
|
+
const ignored = results.filter((r) => isIgnored(r));
|
|
111
|
+
const nonMatch = results.filter((r) => !isIgnored(r)).some((result) => !result.explain.matches);
|
|
112
|
+
const ignoredPossibleDeny = normalizedStatementType === 'deny' &&
|
|
113
|
+
ignored.some((result) => result.knowledge.conditionResult !== 'known' || result.explain.matches);
|
|
114
|
+
return {
|
|
115
|
+
matches: nonMatch || ignoredPossibleDeny ? 'NoMatch' : 'Match',
|
|
116
|
+
details: {
|
|
117
|
+
conditions: results.length == 0 ? undefined : results.map((r) => r.explain)
|
|
118
|
+
},
|
|
119
|
+
//Ignored conditions only matter if the non ignored fields all match
|
|
120
|
+
ignoredConditions: nonMatch ? undefined : ignoredConditions(results, isIgnored)
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get the list of conditions that were ignored during discovery mode, if any
|
|
125
|
+
*
|
|
126
|
+
* @param conditions the conditions that were evaluated with their explains
|
|
127
|
+
* @param statementType whether the statement is an allow or deny statement
|
|
128
|
+
* @param simulationParameters the general parameters for the simulation
|
|
129
|
+
* @returns an array of ignored conditions, or undefined if there are none
|
|
130
|
+
*/
|
|
131
|
+
function ignoredConditions(conditions, isIgnored) {
|
|
132
|
+
const ignoredConditions = conditions.filter(isIgnored);
|
|
133
|
+
if (ignoredConditions.length > 0) {
|
|
134
|
+
return ignoredConditions.map((r) => r.condition);
|
|
135
|
+
}
|
|
136
|
+
return undefined;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Checks to see if a single condition matches a request
|
|
140
|
+
*
|
|
141
|
+
* @param request the request to test
|
|
142
|
+
* @param condition the condition to test
|
|
143
|
+
* @returns the result of evaluating the condition
|
|
144
|
+
*/
|
|
145
|
+
export function singleConditionMatchesRequest(request, condition, simulationParameters) {
|
|
146
|
+
return evaluateSingleCondition(request, condition, simulationParameters).explain;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Evaluates a single condition and records internal Discovery knowledge.
|
|
150
|
+
*
|
|
151
|
+
* @param request the request to test
|
|
152
|
+
* @param condition the condition to evaluate
|
|
153
|
+
* @param simulationParameters the simulation mode and Discovery constraints
|
|
154
|
+
* @returns the condition explain output plus internal Discovery knowledge
|
|
155
|
+
*/
|
|
156
|
+
function evaluateSingleCondition(request, condition, simulationParameters) {
|
|
157
|
+
const key = condition.conditionKey();
|
|
158
|
+
const baseOperation = baseOperations[condition.operation().baseOperator().toLowerCase()];
|
|
159
|
+
const keyExists = request.contextKeyExists(key);
|
|
160
|
+
const keyValue = keyExists ? request.getContextKeyValue(key) : undefined;
|
|
161
|
+
const contextKeyKnowledge = discoveryKnowledgeForConditionKey(simulationParameters, condition.conditionKey(), keyExists);
|
|
162
|
+
if (condition.operation().value().toLowerCase() == 'null' ||
|
|
163
|
+
condition.operation().baseOperator()?.toLowerCase() == 'null') {
|
|
164
|
+
return {
|
|
165
|
+
explain: testNull(condition, keyExists),
|
|
166
|
+
knowledge: conditionKnowledgeForPresenceOnly(contextKeyKnowledge)
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
if (condition.operation().setOperator()) {
|
|
170
|
+
const setOperator = condition.operation().setOperator();
|
|
171
|
+
if (setOperator === 'ForAnyValue') {
|
|
172
|
+
return {
|
|
173
|
+
explain: forAnyValueMatch(request, condition, keyValue, baseOperation),
|
|
174
|
+
knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
else if (setOperator === 'ForAllValues') {
|
|
178
|
+
return {
|
|
179
|
+
explain: forAllValuesMatch(request, condition, keyValue, baseOperation),
|
|
180
|
+
knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
throw new Error(`Unknown set operator: ${setOperator}`);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return {
|
|
188
|
+
explain: singleValueMatch(request, condition, baseOperation, keyValue),
|
|
189
|
+
knowledge: conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge)
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Determines what request context-key facts are known for a condition key.
|
|
194
|
+
*
|
|
195
|
+
* This function intentionally does not know about operators such as `Null`,
|
|
196
|
+
* `IfExists`, `ForAnyValue`, or `ForAllValues`. It only answers whether the
|
|
197
|
+
* request context definitively establishes key presence and value. Operator
|
|
198
|
+
* evaluators decide how those facts affect the condition result.
|
|
199
|
+
*
|
|
200
|
+
* @param simulationParameters the simulation mode and Discovery constraints
|
|
201
|
+
* @param key the condition context key to classify
|
|
202
|
+
* @param keyExists whether the condition key exists in the request context
|
|
203
|
+
* @returns Discovery knowledge about the condition's context key
|
|
204
|
+
*/
|
|
205
|
+
function discoveryKnowledgeForConditionKey(simulationParameters, key, keyExists) {
|
|
206
|
+
if (simulationParameters.simulationMode !== 'Discovery') {
|
|
207
|
+
return requestContextKeyKnowledge(keyExists);
|
|
208
|
+
}
|
|
209
|
+
const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(key);
|
|
210
|
+
if (!constraint.explicitlyConfigured) {
|
|
211
|
+
return keyExists ? requestContextKeyKnowledge(keyExists) : unknownContextKeyKnowledge();
|
|
212
|
+
}
|
|
213
|
+
const contextKeyPresence = constraint.presenceIsKnown
|
|
214
|
+
? 'known'
|
|
215
|
+
: 'unknown';
|
|
216
|
+
return {
|
|
217
|
+
contextKeyPresence,
|
|
218
|
+
contextKeyValue: contextValueKnowledge(keyExists, contextKeyPresence, constraint.valueIsKnown)
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Derives condition-result knowledge for operators that only depend on key presence.
|
|
223
|
+
*
|
|
224
|
+
* `Null` conditions are evaluated by `testNull`; this helper only records that
|
|
225
|
+
* their result is known exactly when key presence is known.
|
|
226
|
+
*
|
|
227
|
+
* @param contextKeyKnowledge known facts about the condition context key
|
|
228
|
+
* @returns condition knowledge for a presence-only operator
|
|
229
|
+
*/
|
|
230
|
+
function conditionKnowledgeForPresenceOnly(contextKeyKnowledge) {
|
|
231
|
+
return {
|
|
232
|
+
conditionResult: contextKeyKnowledge.contextKeyPresence,
|
|
233
|
+
...contextKeyKnowledge
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Derives condition-result knowledge for operators whose result may depend on value.
|
|
238
|
+
*
|
|
239
|
+
* Single-value, `IfExists`, `ForAnyValue`, and `ForAllValues` evaluators handle
|
|
240
|
+
* their own missing-key semantics. Once those evaluators run, the result is
|
|
241
|
+
* known when key presence is known and any required concrete values or policy
|
|
242
|
+
* variable references are known.
|
|
243
|
+
*
|
|
244
|
+
* @param request the request being evaluated
|
|
245
|
+
* @param condition the condition whose policy values may contain variables
|
|
246
|
+
* @param simulationParameters the simulation mode and Discovery constraints
|
|
247
|
+
* @param contextKeyKnowledge known facts about the condition context key
|
|
248
|
+
* @returns condition knowledge for a value-capable operator
|
|
249
|
+
*/
|
|
250
|
+
function conditionKnowledgeForValueEvaluation(request, condition, simulationParameters, contextKeyKnowledge) {
|
|
251
|
+
if (contextKeyKnowledge.contextKeyPresence === 'unknown') {
|
|
252
|
+
return { conditionResult: 'unknown', ...contextKeyKnowledge };
|
|
253
|
+
}
|
|
254
|
+
if (contextKeyKnowledge.contextKeyValue === 'unknown') {
|
|
255
|
+
return { conditionResult: 'unknown', ...contextKeyKnowledge };
|
|
256
|
+
}
|
|
257
|
+
if (conditionValuesReferenceUnknownValue(request, condition, simulationParameters)) {
|
|
258
|
+
return { conditionResult: 'unknown', ...contextKeyKnowledge };
|
|
259
|
+
}
|
|
260
|
+
return { conditionResult: 'known', ...contextKeyKnowledge };
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Builds context-key knowledge for normal request-context semantics.
|
|
264
|
+
*
|
|
265
|
+
* Outside explicitly configured Discovery constraints, the request context is
|
|
266
|
+
* authoritative: key presence is known, and the value is known when present.
|
|
267
|
+
*
|
|
268
|
+
* @param keyExists whether the condition key exists in the request context
|
|
269
|
+
* @returns context-key knowledge for ordinary request-context evaluation
|
|
270
|
+
*/
|
|
271
|
+
function requestContextKeyKnowledge(keyExists) {
|
|
272
|
+
return {
|
|
273
|
+
contextKeyPresence: 'known',
|
|
274
|
+
contextKeyValue: keyExists ? 'known' : 'not-applicable'
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Builds context-key knowledge for an absent unconstrained Discovery key.
|
|
279
|
+
*
|
|
280
|
+
* In Discovery mode, an absent synthetic request-context value does not prove
|
|
281
|
+
* that the real request context lacks an unconstrained key.
|
|
282
|
+
*
|
|
283
|
+
* @returns context-key knowledge with unknown presence and value
|
|
284
|
+
*/
|
|
285
|
+
function unknownContextKeyKnowledge() {
|
|
286
|
+
return {
|
|
287
|
+
contextKeyPresence: 'unknown',
|
|
288
|
+
contextKeyValue: 'unknown'
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Checks whether an Allow condition should be reported because it matched only
|
|
293
|
+
* by missing-key semantics while the key's presence is unknown.
|
|
294
|
+
*
|
|
295
|
+
* `IfExists` and `ForAllValues` operators can match missing keys. Bare negative
|
|
296
|
+
* operators such as `StringNotEquals` can also match missing keys. When key
|
|
297
|
+
* presence is unknown, those matches are conditional on the real request also
|
|
298
|
+
* lacking the key. `ForAnyValue` missing-key evaluations do not match, so they
|
|
299
|
+
* are reported through the normal non-matching Allow condition path instead.
|
|
300
|
+
*
|
|
301
|
+
* @param conditionAndExplain the evaluated condition and its Discovery knowledge
|
|
302
|
+
* @returns true when the condition should be surfaced as an ignored Allow condition
|
|
303
|
+
*/
|
|
304
|
+
function allowMatchedOnlyByUnknownMissingKey(conditionAndExplain) {
|
|
305
|
+
if (conditionAndExplain.explain.matchedBecauseMissing !== true) {
|
|
306
|
+
return false;
|
|
307
|
+
}
|
|
308
|
+
const operation = conditionAndExplain.condition.operation();
|
|
309
|
+
if (operation.isIfExists()) {
|
|
310
|
+
return true;
|
|
311
|
+
}
|
|
312
|
+
if (operation.setOperator() === 'ForAnyValue') {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
const baseOperation = baseOperations[operation.baseOperator().toLowerCase()];
|
|
316
|
+
return !!baseOperation?.isNegative;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Checks whether an Allow condition should be reported because Discovery knows
|
|
320
|
+
* the key is present but not enough value-level facts to trust a placeholder match.
|
|
321
|
+
*
|
|
322
|
+
* When `conditionResult` is already unknown, presence is known, and the key has
|
|
323
|
+
* an applicable value, the uncertainty comes from either the condition key's
|
|
324
|
+
* concrete value or a policy variable referenced by the condition value. In both
|
|
325
|
+
* cases a matching placeholder must still be surfaced as an ignored/output
|
|
326
|
+
* requirement.
|
|
327
|
+
*
|
|
328
|
+
* @param conditionAndExplain the evaluated condition and its Discovery knowledge
|
|
329
|
+
* @returns true when a matched Allow condition still has an unknown value requirement
|
|
330
|
+
*/
|
|
331
|
+
function allowHasUnknownValueRequirement(conditionAndExplain) {
|
|
332
|
+
return (conditionAndExplain.knowledge.contextKeyPresence === 'known' &&
|
|
333
|
+
conditionAndExplain.knowledge.contextKeyValue !== 'not-applicable');
|
|
334
|
+
}
|
|
335
|
+
/**
|
|
336
|
+
* Determines the value-knowledge dimension for a condition key.
|
|
337
|
+
*
|
|
338
|
+
* If presence is unknown, the value is also unknown because the key might not be
|
|
339
|
+
* present. If presence is known and the key is absent, the value is not
|
|
340
|
+
* applicable rather than unknown.
|
|
341
|
+
*
|
|
342
|
+
* @param keyExists whether the condition key exists in the request context
|
|
343
|
+
* @param contextKeyPresence whether the condition key's presence is known
|
|
344
|
+
* @param configuredValueIsKnown whether constraints say a present value is authoritative
|
|
345
|
+
* @returns the value-knowledge dimension for the condition key
|
|
346
|
+
*/
|
|
347
|
+
function contextValueKnowledge(keyExists, contextKeyPresence, configuredValueIsKnown) {
|
|
348
|
+
// If the presence is unknown, the value must be unknown by definition
|
|
349
|
+
if (contextKeyPresence === 'unknown') {
|
|
350
|
+
return 'unknown';
|
|
351
|
+
}
|
|
352
|
+
// If the presence is known but the key does not exist, the value doesn't matter
|
|
353
|
+
if (!keyExists) {
|
|
354
|
+
return 'not-applicable';
|
|
355
|
+
}
|
|
356
|
+
// If the presence is known and the key exists, use discovery constraint
|
|
357
|
+
return configuredValueIsKnown ? 'known' : 'unknown';
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Checks whether any policy condition value references an unknown context value.
|
|
361
|
+
*
|
|
362
|
+
* For example, a known `s3:prefix` condition can still be unknown if the policy
|
|
363
|
+
* value is `${aws:SourceAccount}` and `aws:SourceAccount` has unknown value in
|
|
364
|
+
* Discovery mode.
|
|
365
|
+
*
|
|
366
|
+
* @param request the request being evaluated
|
|
367
|
+
* @param condition the condition whose policy values may contain variables
|
|
368
|
+
* @param simulationParameters the simulation mode and Discovery constraints
|
|
369
|
+
* @returns true if any referenced context variable has unknown presence or value
|
|
370
|
+
*/
|
|
371
|
+
function conditionValuesReferenceUnknownValue(request, condition, simulationParameters) {
|
|
372
|
+
for (const value of condition.conditionValues()) {
|
|
373
|
+
for (const variable of contextVariablesInString(value)) {
|
|
374
|
+
const constraint = simulationParameters.discoveryContextKeyConstraints.constraintFor(variable);
|
|
375
|
+
if (!constraint.explicitlyConfigured) {
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
if (!request.contextKeyExists(variable)) {
|
|
379
|
+
if (!constraint.presenceIsKnown) {
|
|
380
|
+
return true;
|
|
381
|
+
}
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
if (!constraint.valueIsKnown) {
|
|
385
|
+
return true;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return false;
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Extracts context variable names referenced by `${...}` policy variables.
|
|
393
|
+
*
|
|
394
|
+
* Special IAM escapes such as `${*}`, `${?}`, and `${$}` are ignored because
|
|
395
|
+
* they are literal substitutions rather than request context variables.
|
|
396
|
+
*
|
|
397
|
+
* @param value the raw policy value to inspect
|
|
398
|
+
* @returns context variable names referenced by the policy value
|
|
399
|
+
*/
|
|
400
|
+
function contextVariablesInString(value) {
|
|
401
|
+
const variables = [];
|
|
402
|
+
for (const match of value.matchAll(/\$\{(.*?)\}/g)) {
|
|
403
|
+
const variable = match[1]?.split(', ')[0]?.trim();
|
|
404
|
+
if (variable && variable !== '*' && variable !== '?' && variable !== '$') {
|
|
405
|
+
variables.push(variable);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
return variables;
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Tests a condition with a null operator
|
|
412
|
+
*
|
|
413
|
+
* @param condition the condition to test
|
|
414
|
+
* @param keyExists whether the key exists in the request
|
|
415
|
+
* @returns the result of evaluating the null operator
|
|
416
|
+
*/
|
|
417
|
+
function testNull(condition, keyExists) {
|
|
418
|
+
const goalValue = keyExists ? 'false' : 'true';
|
|
419
|
+
const conditionValues = condition.conditionValues().map((value) => {
|
|
420
|
+
return {
|
|
421
|
+
value,
|
|
422
|
+
matches: value.toLowerCase() === goalValue
|
|
423
|
+
};
|
|
424
|
+
});
|
|
425
|
+
return {
|
|
426
|
+
operator: condition.operation().value(),
|
|
427
|
+
conditionKeyValue: condition.conditionKey(),
|
|
428
|
+
values: condition.valueIsArray() ? conditionValues : conditionValues[0],
|
|
429
|
+
matches: conditionValues.some((value) => value.matches)
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function singleValueMatch(request, condition, baseOperation, keyValue) {
|
|
433
|
+
const isNotOperator = condition.operation().baseOperator().toLowerCase().includes('not');
|
|
434
|
+
if (condition.operation().isIfExists() || isNotOperator) {
|
|
435
|
+
//Check if it exists, return true if it doesn't
|
|
436
|
+
//Double check what happens here if the key is not a valid key or is of the wrong type
|
|
437
|
+
if (!keyValue) {
|
|
438
|
+
const valueExplains = condition.conditionValues().map((value) => ({
|
|
439
|
+
value,
|
|
440
|
+
matches: true
|
|
441
|
+
}));
|
|
442
|
+
return {
|
|
443
|
+
operator: condition.operation().value(),
|
|
444
|
+
conditionKeyValue: condition.conditionKey(),
|
|
445
|
+
values: condition.valueIsArray() ? valueExplains : valueExplains[0],
|
|
446
|
+
matches: true,
|
|
447
|
+
matchedBecauseMissing: true,
|
|
448
|
+
resolvedConditionKeyValue: keyValue
|
|
449
|
+
};
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
if (!keyValue || !keyValue.isStringValue()) {
|
|
453
|
+
//Set operator is required for a multi-value key
|
|
454
|
+
//Confirmed this at re:Inforce 2025 IAM431.
|
|
455
|
+
const valueExplains = condition.conditionValues().map((value) => ({
|
|
456
|
+
value,
|
|
457
|
+
matches: false
|
|
458
|
+
}));
|
|
459
|
+
return {
|
|
460
|
+
operator: condition.operation().value(),
|
|
461
|
+
conditionKeyValue: condition.conditionKey(),
|
|
462
|
+
values: condition.valueIsArray() ? valueExplains : valueExplains[0],
|
|
463
|
+
matches: false,
|
|
464
|
+
failedBecauseMissing: !keyValue,
|
|
465
|
+
failedBecauseArray: keyValue?.isArrayValue()
|
|
466
|
+
};
|
|
467
|
+
}
|
|
468
|
+
if (!baseOperation) {
|
|
469
|
+
const valueExplains = condition.conditionValues().map((value) => ({
|
|
470
|
+
value,
|
|
471
|
+
matches: false
|
|
472
|
+
}));
|
|
473
|
+
return {
|
|
474
|
+
operator: condition.operation().value(),
|
|
475
|
+
conditionKeyValue: condition.conditionKey(),
|
|
476
|
+
values: condition.valueIsArray() ? valueExplains : valueExplains[0],
|
|
477
|
+
matches: false,
|
|
478
|
+
missingOperator: true
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
const { matches, explains } = baseOperation.matches(request, keyValue.value, condition.conditionValues());
|
|
482
|
+
return {
|
|
483
|
+
matches,
|
|
484
|
+
operator: condition.operation().value(),
|
|
485
|
+
conditionKeyValue: condition.conditionKey(),
|
|
486
|
+
values: condition.valueIsArray() ? explains : explains[0],
|
|
487
|
+
resolvedConditionKeyValue: keyValue.value
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* Tests a condition with a ForAllValues set operator
|
|
492
|
+
*
|
|
493
|
+
* @param request the request to test
|
|
494
|
+
* @param condition the condition with ForAllValues set operator
|
|
495
|
+
* @param keyExists whether the key exists in the request
|
|
496
|
+
* @param keyValue the value of the key in the request
|
|
497
|
+
* @param baseOperation the base operation to test the key against
|
|
498
|
+
* @returns the result of evaluating the ForAllValues set operator
|
|
499
|
+
*/
|
|
500
|
+
function forAllValuesMatch(request, condition, keyValue, baseOperation) {
|
|
501
|
+
const matchingValueExplains = condition
|
|
502
|
+
.conditionValues()
|
|
503
|
+
.map((value) => ({
|
|
504
|
+
value,
|
|
505
|
+
matches: true
|
|
506
|
+
}));
|
|
507
|
+
const notMatchingValueExplains = condition
|
|
508
|
+
.conditionValues()
|
|
509
|
+
.map((value) => ({
|
|
510
|
+
value,
|
|
511
|
+
matches: false
|
|
512
|
+
}));
|
|
513
|
+
if (!keyValue) {
|
|
514
|
+
return {
|
|
515
|
+
operator: condition.operation().value(),
|
|
516
|
+
conditionKeyValue: condition.conditionKey(),
|
|
517
|
+
values: matchingValueExplains,
|
|
518
|
+
matches: true,
|
|
519
|
+
matchedBecauseMissing: true
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
// If the key only has a single value, convert it to an array to process
|
|
523
|
+
if (keyValue.isStringValue()) {
|
|
524
|
+
keyValue = new ContextKeyImpl(keyValue.name, [keyValue.value]);
|
|
525
|
+
}
|
|
526
|
+
if (!keyValue.isArrayValue()) {
|
|
527
|
+
throw new Error('Key value is not an array, this is a bug.');
|
|
528
|
+
}
|
|
529
|
+
if (!baseOperation) {
|
|
530
|
+
return {
|
|
531
|
+
operator: condition.operation().value(),
|
|
532
|
+
conditionKeyValue: condition.conditionKey(),
|
|
533
|
+
values: notMatchingValueExplains,
|
|
534
|
+
matches: false,
|
|
535
|
+
missingOperator: true
|
|
536
|
+
};
|
|
537
|
+
}
|
|
538
|
+
const valueExplains = keyValue.values.map((value) => {
|
|
539
|
+
const { matches, explains } = baseOperation.matches(request, value, condition.conditionValues());
|
|
540
|
+
return {
|
|
541
|
+
requestValue: value,
|
|
542
|
+
matches,
|
|
543
|
+
explains
|
|
544
|
+
};
|
|
545
|
+
});
|
|
546
|
+
const anyNonMatches = valueExplains.some((valueExplain) => !valueExplain.matches);
|
|
547
|
+
const overallMatch = !anyNonMatches;
|
|
548
|
+
const unmatchedValues = [];
|
|
549
|
+
const explains = {};
|
|
550
|
+
for (const valueExplain of valueExplains) {
|
|
551
|
+
if (!baseOperation.isNegative && !valueExplain.matches) {
|
|
552
|
+
unmatchedValues.push(valueExplain.requestValue);
|
|
553
|
+
}
|
|
554
|
+
else if (baseOperation.isNegative && valueExplain.matches) {
|
|
555
|
+
unmatchedValues.push(valueExplain.requestValue);
|
|
556
|
+
}
|
|
557
|
+
for (const explain of valueExplain.explains) {
|
|
558
|
+
let theExplain = explains[explain.value];
|
|
559
|
+
if (!theExplain) {
|
|
560
|
+
explains[explain.value] = {
|
|
561
|
+
value: explain.value,
|
|
562
|
+
matches: overallMatch
|
|
563
|
+
};
|
|
564
|
+
theExplain = explains[explain.value];
|
|
565
|
+
}
|
|
566
|
+
if (explain.matches && !baseOperation.isNegative) {
|
|
567
|
+
theExplain.matchingValues = theExplain.matchingValues || [];
|
|
568
|
+
theExplain.matchingValues.push(valueExplain.requestValue);
|
|
569
|
+
}
|
|
570
|
+
else if (!explain.matches && baseOperation.isNegative) {
|
|
571
|
+
theExplain.negativeMatchingValues = theExplain.negativeMatchingValues || [];
|
|
572
|
+
theExplain.negativeMatchingValues.push(valueExplain.requestValue);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
return {
|
|
577
|
+
operator: condition.operation().value(),
|
|
578
|
+
conditionKeyValue: condition.conditionKey(),
|
|
579
|
+
values: Object.values(explains),
|
|
580
|
+
matches: overallMatch,
|
|
581
|
+
unmatchedValues
|
|
582
|
+
};
|
|
583
|
+
}
|
|
584
|
+
/**
|
|
585
|
+
* Test a condition with a ForAnyValue set operator
|
|
586
|
+
*
|
|
587
|
+
* @param request the request to test
|
|
588
|
+
* @param condition the condition with ForAnyValue set operator
|
|
589
|
+
* @param keyExists whether the key exists in the request
|
|
590
|
+
* @param keyValue the value of the key in the request
|
|
591
|
+
* @param baseOperation the base operation to test the key against
|
|
592
|
+
* @returns the result of evaluating the ForAnyValue set operator
|
|
593
|
+
*/
|
|
594
|
+
function forAnyValueMatch(request, condition, keyValue, baseOperation) {
|
|
595
|
+
const failedValueExplains = condition.conditionValues().map((value) => ({
|
|
596
|
+
value,
|
|
597
|
+
matches: false
|
|
598
|
+
}));
|
|
599
|
+
if (!keyValue) {
|
|
600
|
+
return {
|
|
601
|
+
operator: condition.operation().value(),
|
|
602
|
+
conditionKeyValue: condition.conditionKey(),
|
|
603
|
+
values: failedValueExplains,
|
|
604
|
+
matches: false,
|
|
605
|
+
failedBecauseMissing: true
|
|
606
|
+
};
|
|
607
|
+
// return 'NoMatch'
|
|
608
|
+
}
|
|
609
|
+
// If the key only has a single value, convert it to an array to process
|
|
610
|
+
if (keyValue.isStringValue()) {
|
|
611
|
+
keyValue = new ContextKeyImpl(keyValue.name, [keyValue.value]);
|
|
612
|
+
}
|
|
613
|
+
if (!keyValue.isArrayValue()) {
|
|
614
|
+
throw new Error('Key value is not an array, this is a bug.');
|
|
615
|
+
}
|
|
616
|
+
if (!baseOperation) {
|
|
617
|
+
return {
|
|
618
|
+
operator: condition.operation().value(),
|
|
619
|
+
conditionKeyValue: condition.conditionKey(),
|
|
620
|
+
values: failedValueExplains,
|
|
621
|
+
matches: false,
|
|
622
|
+
missingOperator: true
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
const valueExplains = keyValue.values.map((value) => {
|
|
626
|
+
const { matches, explains } = baseOperation.matches(request, value, condition.conditionValues());
|
|
627
|
+
return {
|
|
628
|
+
requestValue: value,
|
|
629
|
+
matches,
|
|
630
|
+
explains
|
|
631
|
+
};
|
|
632
|
+
});
|
|
633
|
+
const overallMatch = valueExplains.some((valueExplain) => valueExplain.matches);
|
|
634
|
+
const unmatchedValues = [];
|
|
635
|
+
const explains = {};
|
|
636
|
+
for (const valueExplain of valueExplains) {
|
|
637
|
+
if (!baseOperation.isNegative && !valueExplain.matches) {
|
|
638
|
+
unmatchedValues.push(valueExplain.requestValue);
|
|
639
|
+
}
|
|
640
|
+
else if (baseOperation.isNegative && valueExplain.matches) {
|
|
641
|
+
unmatchedValues.push(valueExplain.requestValue);
|
|
642
|
+
}
|
|
643
|
+
for (const explain of valueExplain.explains) {
|
|
644
|
+
let theExplain = explains[explain.value];
|
|
645
|
+
if (!theExplain) {
|
|
646
|
+
explains[explain.value] = {
|
|
647
|
+
value: explain.value,
|
|
648
|
+
matches: overallMatch
|
|
649
|
+
};
|
|
650
|
+
theExplain = explains[explain.value];
|
|
651
|
+
}
|
|
652
|
+
if (explain.matches) {
|
|
653
|
+
theExplain.matchingValues = theExplain.matchingValues || [];
|
|
654
|
+
theExplain.matchingValues.push(valueExplain.requestValue);
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return {
|
|
659
|
+
operator: condition.operation().value(),
|
|
660
|
+
conditionKeyValue: condition.conditionKey(),
|
|
661
|
+
values: Object.values(explains),
|
|
662
|
+
matches: overallMatch,
|
|
663
|
+
unmatchedValues
|
|
664
|
+
};
|
|
665
|
+
}
|
|
666
|
+
//# sourceMappingURL=condition.js.map
|