@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,585 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.requestMatchesStatementResources = requestMatchesStatementResources;
|
|
4
|
+
exports.requestMatchesResources = requestMatchesResources;
|
|
5
|
+
exports.requestMatchesNotResources = requestMatchesNotResources;
|
|
6
|
+
exports.resourcePatternOverlap = resourcePatternOverlap;
|
|
7
|
+
const statementExplain_js_1 = require("../explain/statementExplain.js");
|
|
8
|
+
const util_js_1 = require("../util.js");
|
|
9
|
+
/**
|
|
10
|
+
* Map of resource matching settings per policy type. Controls how short ARNs are treated:
|
|
11
|
+
* - `'expand'` — treat missing trailing segments as `*`, then match normally
|
|
12
|
+
* - `'reject'` — return an error (ARN is not valid for this policy type)
|
|
13
|
+
* - `'noMatch'` — silently does not match
|
|
14
|
+
*/
|
|
15
|
+
const policyTypeResourceSettings = {
|
|
16
|
+
identity: { shortArnWithoutWildcard: 'expand', shortArnWithWildcard: 'expand' },
|
|
17
|
+
session: { shortArnWithoutWildcard: 'expand', shortArnWithWildcard: 'expand' },
|
|
18
|
+
pb: { shortArnWithoutWildcard: 'expand', shortArnWithWildcard: 'expand' },
|
|
19
|
+
resource: { shortArnWithoutWildcard: 'noMatch', shortArnWithWildcard: 'expand' },
|
|
20
|
+
vpce: { shortArnWithoutWildcard: 'noMatch', shortArnWithWildcard: 'expand' },
|
|
21
|
+
scp: { shortArnWithoutWildcard: 'reject', shortArnWithWildcard: 'expand' },
|
|
22
|
+
rcp: { shortArnWithoutWildcard: 'reject', shortArnWithWildcard: 'reject' }
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Create a lightweight Resource object from an expanded ARN string.
|
|
26
|
+
* Used when a short ARN is padded with `*` segments to form a full 6-segment ARN.
|
|
27
|
+
*
|
|
28
|
+
* @param expandedValue the full 6-segment ARN string
|
|
29
|
+
* @returns a Resource object that can be used in the existing matching logic
|
|
30
|
+
*/
|
|
31
|
+
function createExpandedResource(expandedValue) {
|
|
32
|
+
const parts = expandedValue.split(':');
|
|
33
|
+
const resource = {
|
|
34
|
+
value: () => expandedValue,
|
|
35
|
+
isAllResources: () => false,
|
|
36
|
+
isArnResource: () => true,
|
|
37
|
+
path: () => '',
|
|
38
|
+
partition: () => parts[1],
|
|
39
|
+
service: () => parts[2],
|
|
40
|
+
region: () => parts[3],
|
|
41
|
+
account: () => parts[4],
|
|
42
|
+
resource: () => parts.slice(5).join(':')
|
|
43
|
+
};
|
|
44
|
+
return resource;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Convert a resource segment to a regular expression. This is without variables.
|
|
48
|
+
*
|
|
49
|
+
* @param segment the segment to convert to a regular expression
|
|
50
|
+
* @returns a regular that replaces any wildcards in the segment with the appropriate regular expression.
|
|
51
|
+
*/
|
|
52
|
+
function convertResourceSegmentToRegex(segment) {
|
|
53
|
+
if (segment.indexOf(':') != -1) {
|
|
54
|
+
throw new Error('Segment should not contain a colon');
|
|
55
|
+
}
|
|
56
|
+
const pattern = '^' + segment.replace(/\?/g, '.').replace(/\*/g, '.*?') + '$';
|
|
57
|
+
return new RegExp(pattern, 'i');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Replace regex characters in a resource pattern with escaped versions.
|
|
61
|
+
*
|
|
62
|
+
* @param pattern the resource pattern to escape for use inside a regular expression
|
|
63
|
+
* @returns the pattern with regex metacharacters escaped
|
|
64
|
+
*/
|
|
65
|
+
function escapeResourcePatternRegexCharacters(pattern) {
|
|
66
|
+
return pattern.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Convert a request resource pattern to a regex string for overlap checks.
|
|
70
|
+
* Request resources support asterisks as wildcards, but question marks are literals.
|
|
71
|
+
*
|
|
72
|
+
* @param requestString the request resource pattern to convert
|
|
73
|
+
* @returns a regex string that matches the request resource pattern
|
|
74
|
+
*/
|
|
75
|
+
function requestResourcePatternToRegexString(requestString) {
|
|
76
|
+
return '^' + escapeResourcePatternRegexCharacters(requestString).replace(/\\\*/g, '.*?') + '$';
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Convert a policy resource pattern to a regex string for overlap checks.
|
|
80
|
+
* Policy resources support asterisks and question marks as IAM wildcards.
|
|
81
|
+
*
|
|
82
|
+
* @param policyString the policy resource pattern to convert
|
|
83
|
+
* @returns a regex string that matches the policy resource pattern
|
|
84
|
+
*/
|
|
85
|
+
function policyResourcePatternToRegexString(policyString) {
|
|
86
|
+
return ('^' +
|
|
87
|
+
escapeResourcePatternRegexCharacters(policyString)
|
|
88
|
+
.replace(/\\\?/g, '.')
|
|
89
|
+
.replace(/\\\*/g, '.*?') +
|
|
90
|
+
'$');
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Check if a request matches the Resource or NotResource elements of a statement.
|
|
94
|
+
*
|
|
95
|
+
* @param request the request to check
|
|
96
|
+
* @param statement the statement to check against
|
|
97
|
+
* @param policyType the type of policy being evaluated
|
|
98
|
+
* @returns true if the request matches the resources in the statement, false otherwise
|
|
99
|
+
*/
|
|
100
|
+
function requestMatchesStatementResources(request, statement, policyType) {
|
|
101
|
+
if (statement.isResourceStatement()) {
|
|
102
|
+
const { matches, explains } = requestMatchesResources(request, statement.resources(), 'Resource', statement.effect(), policyType);
|
|
103
|
+
if (!statement.resourceIsArray()) {
|
|
104
|
+
return { matches, details: { resources: explains[0] } };
|
|
105
|
+
}
|
|
106
|
+
return { matches, details: { resources: explains } };
|
|
107
|
+
}
|
|
108
|
+
else if (statement.isNotResourceStatement()) {
|
|
109
|
+
const { matches, explains } = requestMatchesNotResources(request, statement.notResources(), 'NotResource', statement.effect(), policyType);
|
|
110
|
+
if (!statement.notResourceIsArray()) {
|
|
111
|
+
return { matches, details: { notResources: explains[0] } };
|
|
112
|
+
}
|
|
113
|
+
return { matches, details: { notResources: explains } };
|
|
114
|
+
}
|
|
115
|
+
return { matches: true, details: {} };
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Check if a request matches a set of resources.
|
|
119
|
+
*
|
|
120
|
+
* @param request the request to check
|
|
121
|
+
* @param policyResources the resources to check against
|
|
122
|
+
* @param resourceType whether this is a Resource or NotResource element
|
|
123
|
+
* @param effect the effect of the statement
|
|
124
|
+
* @param policyType the type of policy being evaluated
|
|
125
|
+
* @returns true if the request matches any of the resources, false otherwise
|
|
126
|
+
*/
|
|
127
|
+
function requestMatchesResources(request, policyResources, resourceType, effect, policyType) {
|
|
128
|
+
const explains = policyResources.map((policyResource) => singleResourceMatchesRequest(request, policyResource, resourceType, effect, policyType));
|
|
129
|
+
const matches = explains.some((explain) => explain.matches);
|
|
130
|
+
return { matches, explains };
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if a request matches a NotResource element in a policy.
|
|
134
|
+
*
|
|
135
|
+
* @param request the request to check
|
|
136
|
+
* @param policyResources the resources to check against
|
|
137
|
+
* @param resourceType whether this is a Resource or NotResource element
|
|
138
|
+
* @param effect the effect of the statement
|
|
139
|
+
* @param policyType the type of policy being evaluated
|
|
140
|
+
* @returns true if the request does not match any of the resources, false otherwise
|
|
141
|
+
*/
|
|
142
|
+
function requestMatchesNotResources(request, policyResources, resourceType, effect, policyType) {
|
|
143
|
+
const explains = policyResources.map((policyResource) => {
|
|
144
|
+
const explain = singleResourceMatchesRequest(request, policyResource, resourceType, effect, policyType);
|
|
145
|
+
if (shouldInvertNotResourceExplain(explain)) {
|
|
146
|
+
explain.matches = !explain.matches;
|
|
147
|
+
delete explain.errors;
|
|
148
|
+
delete explain.mismatchReason;
|
|
149
|
+
}
|
|
150
|
+
return explain;
|
|
151
|
+
});
|
|
152
|
+
const matches = !explains.some((explain) => !explain.matches);
|
|
153
|
+
return { matches, explains };
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Determine whether a Resource match explain can be inverted for NotResource matching.
|
|
157
|
+
*
|
|
158
|
+
* The resource mismatch reason registry owns the decision about which mismatches
|
|
159
|
+
* definitively prove the request is outside the NotResource set and can be inverted.
|
|
160
|
+
*
|
|
161
|
+
* @param explain the Resource matching explain to inspect
|
|
162
|
+
* @returns true when the explain should be inverted for NotResource semantics
|
|
163
|
+
*/
|
|
164
|
+
function shouldInvertNotResourceExplain(explain) {
|
|
165
|
+
if (explain.matches) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
if (!explain.mismatchReason) {
|
|
169
|
+
throw new Error(`Non-matching resource explain is missing mismatchReason: ${explain.resource}`);
|
|
170
|
+
}
|
|
171
|
+
return statementExplain_js_1.resourceMismatchReasons[explain.mismatchReason].invertible;
|
|
172
|
+
}
|
|
173
|
+
/*
|
|
174
|
+
Specifications for **request resource** wildcards:
|
|
175
|
+
- Asterisks (*) can be used to match any sequence of characters (including an empty sequence)
|
|
176
|
+
- Asterisks can appear in any segment of the ARN (partition, service, region, account, resource)
|
|
177
|
+
- Asterisks are not greedy, and can be followed or preceded by other characters in the same segment
|
|
178
|
+
- Existing rules of matching wildcard segments in ARNs still apply
|
|
179
|
+
- Question marks (?) are not supported in the request resource ARN
|
|
180
|
+
|
|
181
|
+
If the string in the policy is the same as the resolved string after variable substitution, it is a match
|
|
182
|
+
|
|
183
|
+
For an Allow/Resource Statement:
|
|
184
|
+
- If the resolved string matches the request resource, it is a match
|
|
185
|
+
- If the resolved string is a superset of the request resource, it is a match
|
|
186
|
+
- If the resolved string is a subset of the request resource, it is a match
|
|
187
|
+
- If there is no overlap at all between the resolved string and the request resource, it is not a match
|
|
188
|
+
|
|
189
|
+
For a Deny/Resource Statement:
|
|
190
|
+
- If the resolved string matches the request resource, it is a match
|
|
191
|
+
- If the resolved string is a superset of the request resource, it is a match
|
|
192
|
+
- If the resolved string is a subset of the request resource, it is not a match
|
|
193
|
+
- If there is no overlap at all between the resolved string and the request resource, it is not a match
|
|
194
|
+
|
|
195
|
+
For an Allow/NotResource Statement:
|
|
196
|
+
- If the resolved string matches the request resource, it is not a match
|
|
197
|
+
- If the resolved string is a superset of the request resource, it is not a match
|
|
198
|
+
- If the resolved string is a subset of the request resource, it is a match
|
|
199
|
+
- If there is no overlap at all between the resolved string and the request resource, it is a match
|
|
200
|
+
|
|
201
|
+
For a Deny/NotResource Statement:
|
|
202
|
+
- If the resolved string matches the request resource, it is not a match
|
|
203
|
+
- If the resolved string is a superset of the request resource, it is not a match
|
|
204
|
+
- If the resolved string is a subset of the request resource, it is not a match
|
|
205
|
+
- If there is no overlap at all between the resolved string and the request resource, it is a match
|
|
206
|
+
*/
|
|
207
|
+
/**
|
|
208
|
+
* Check if a single resource matches a request.
|
|
209
|
+
*
|
|
210
|
+
* @param request the request to check against
|
|
211
|
+
* @param policyResource the resource to check against
|
|
212
|
+
* @param resourceType whether this is a Resource or NotResource element
|
|
213
|
+
* @param effect the effect of the statement
|
|
214
|
+
* @param policyType the type of policy being evaluated
|
|
215
|
+
* @returns true if the request matches the resource, false otherwise
|
|
216
|
+
*/
|
|
217
|
+
function singleResourceMatchesRequest(request, policyResource, resourceType, effect, policyType) {
|
|
218
|
+
// Policy is all resources
|
|
219
|
+
if (policyResource.isAllResources()) {
|
|
220
|
+
return {
|
|
221
|
+
resource: policyResource.value(),
|
|
222
|
+
matches: true
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
// Short ARN handling — fewer than 6 colon-separated segments
|
|
226
|
+
if (policyResource.isArnResource() && policyResource.value().split(':').length < 6) {
|
|
227
|
+
const settings = policyTypeResourceSettings[policyType];
|
|
228
|
+
// For policy types that reject short ARNs without wildcards, only a wildcard
|
|
229
|
+
// in the last segment counts — a wildcard in the middle doesn't make it valid.
|
|
230
|
+
const lastSegment = policyResource.value().split(':').at(-1) ?? '';
|
|
231
|
+
const hasTrailingWildcard = lastSegment.endsWith('*');
|
|
232
|
+
const hasAnyWildcard = policyResource.value().includes('*');
|
|
233
|
+
const hasWildcard = settings.shortArnWithoutWildcard === 'reject' ? hasTrailingWildcard : hasAnyWildcard;
|
|
234
|
+
const behavior = hasWildcard ? settings.shortArnWithWildcard : settings.shortArnWithoutWildcard;
|
|
235
|
+
if (behavior === 'reject') {
|
|
236
|
+
return {
|
|
237
|
+
resource: policyResource.value(),
|
|
238
|
+
matches: false,
|
|
239
|
+
errors: ['Policy resource ARN is not valid for this policy type'],
|
|
240
|
+
mismatchReason: 'invalidPolicyResourceArn'
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
if (behavior === 'noMatch') {
|
|
244
|
+
return {
|
|
245
|
+
resource: policyResource.value(),
|
|
246
|
+
matches: false,
|
|
247
|
+
mismatchReason: 'shortArnNoMatch'
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
// behavior === 'expand': pad missing segments with '*' and recurse with expanded resource
|
|
251
|
+
const segments = policyResource.value().split(':');
|
|
252
|
+
while (segments.length < 6) {
|
|
253
|
+
segments.push('*');
|
|
254
|
+
}
|
|
255
|
+
const result = singleResourceMatchesRequest(request, createExpandedResource(segments.join(':')), resourceType, effect, policyType);
|
|
256
|
+
// Preserve the original (unexpanded) resource value in the explain
|
|
257
|
+
result.resource = policyResource.value();
|
|
258
|
+
if (!result.matches && result.mismatchReason) {
|
|
259
|
+
result.mismatchReason = 'shortArnExpandedMismatch';
|
|
260
|
+
}
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
// Request is all resources
|
|
264
|
+
if (request.resource?.isAllResources()) {
|
|
265
|
+
// For wildcard-only actions, only a literal "*" policy resource (handled above) grants access.
|
|
266
|
+
// A specific ARN in the policy does not match a wildcard-only action's "*" request resource.
|
|
267
|
+
if (request.wildcardOnlyAction) {
|
|
268
|
+
return {
|
|
269
|
+
resource: policyResource.value(),
|
|
270
|
+
matches: false,
|
|
271
|
+
mismatchReason: 'wildcardOnlyActionSpecificResource'
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
if (effect === 'Allow' && resourceType === 'Resource') {
|
|
275
|
+
return {
|
|
276
|
+
resource: policyResource.value(),
|
|
277
|
+
matches: true
|
|
278
|
+
};
|
|
279
|
+
}
|
|
280
|
+
else if (effect === 'Allow' && resourceType === 'NotResource') {
|
|
281
|
+
return {
|
|
282
|
+
resource: policyResource.value(),
|
|
283
|
+
matches: false, // This gets inverted in the caller
|
|
284
|
+
mismatchReason: 'requestAllResourcesSpecificNotResource'
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
else if (effect === 'Deny' && resourceType === 'Resource') {
|
|
288
|
+
// This is a Deny statement that is not all resources, so it's not a match
|
|
289
|
+
return {
|
|
290
|
+
resource: policyResource.value(),
|
|
291
|
+
matches: false,
|
|
292
|
+
mismatchReason: 'requestAllResourcesDenySpecificResource'
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
else if (effect === 'Deny' && resourceType === 'NotResource') {
|
|
296
|
+
return {
|
|
297
|
+
resource: policyResource.value(),
|
|
298
|
+
matches: true // This gets inverted in the caller
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
throw new Error(`Unknown Resource Type and Effect Combination: ${resourceType} ${effect}`);
|
|
302
|
+
}
|
|
303
|
+
// Request contains wildcards but neither is a full *
|
|
304
|
+
if (request.resource.hasWildcards() && policyResource.isArnResource()) {
|
|
305
|
+
const overlaps = [
|
|
306
|
+
resourcePatternOverlap(policyResource.partition(), request.resource.partition()),
|
|
307
|
+
resourcePatternOverlap(policyResource.service(), request.resource.service()),
|
|
308
|
+
resourcePatternOverlap(policyResource.region(), request.resource.region()),
|
|
309
|
+
resourcePatternOverlap(policyResource.account(), request.resource.account()),
|
|
310
|
+
resourcePatternOverlap(policyResource.resource(), request.resource.resource())
|
|
311
|
+
];
|
|
312
|
+
if (resourceType === 'Resource' && effect === 'Allow') {
|
|
313
|
+
if (overlaps.every((o) => o !== 'none')) {
|
|
314
|
+
return {
|
|
315
|
+
resource: policyResource.value(),
|
|
316
|
+
matches: true
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
else if (resourceType === 'Resource' && effect === 'Deny') {
|
|
321
|
+
if (overlaps.some((o) => o === 'none' || o === 'policy_is_subset')) {
|
|
322
|
+
return {
|
|
323
|
+
resource: policyResource.value(),
|
|
324
|
+
matches: false,
|
|
325
|
+
mismatchReason: 'resourcePatternMismatch'
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
else if (resourceType === 'NotResource' && effect === 'Allow') {
|
|
330
|
+
/*
|
|
331
|
+
* For an Allow/NotResource Statement:
|
|
332
|
+
- If the resolved string matches the request resource, it is not a match
|
|
333
|
+
- If the resolved string is a superset of the request resource, it is not a match
|
|
334
|
+
- If the resolved string is a subset of the request resource, it is a match
|
|
335
|
+
- If there is no overlap at all between the resolved string and the request resource, it is a match
|
|
336
|
+
*/
|
|
337
|
+
if (overlaps.every((o) => o === 'equal' || o === 'policy_is_superset')) {
|
|
338
|
+
return {
|
|
339
|
+
resource: policyResource.value(),
|
|
340
|
+
// This gets inverted in the caller
|
|
341
|
+
matches: true
|
|
342
|
+
};
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
return {
|
|
346
|
+
resource: policyResource.value(),
|
|
347
|
+
// This gets inverted in the caller
|
|
348
|
+
matches: false,
|
|
349
|
+
mismatchReason: 'resourcePatternMismatch'
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
}
|
|
353
|
+
else if (resourceType === 'NotResource' && effect === 'Deny') {
|
|
354
|
+
/*
|
|
355
|
+
For a Deny/NotResource Statement:
|
|
356
|
+
- If the resolved string matches the request resource, it is not a match
|
|
357
|
+
- If the resolved string is a superset of the request resource, it is not a match
|
|
358
|
+
- If the resolved string is a subset of the request resource, it is not a match
|
|
359
|
+
- If there is no overlap at all between the resolved string and the request resource, it is a match
|
|
360
|
+
*/
|
|
361
|
+
if (overlaps.some((o) => o === 'none')) {
|
|
362
|
+
return {
|
|
363
|
+
resource: policyResource.value(),
|
|
364
|
+
// This gets inverted in the caller
|
|
365
|
+
matches: false,
|
|
366
|
+
mismatchReason: 'resourcePatternMismatch'
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
return {
|
|
371
|
+
resource: policyResource.value(),
|
|
372
|
+
// This gets inverted in the caller
|
|
373
|
+
matches: true
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
throw new Error(`Unknown Resource Type and Effect Combination: ${resourceType} ${effect}`);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
if (policyResource.isArnResource()) {
|
|
382
|
+
if (!request.resource) {
|
|
383
|
+
return {
|
|
384
|
+
resource: policyResource.value(),
|
|
385
|
+
matches: false,
|
|
386
|
+
errors: ['Request does not have a resource'],
|
|
387
|
+
mismatchReason: 'requestMissingResource'
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
const resource = request.resource;
|
|
391
|
+
if (!convertResourceSegmentToRegex(policyResource.partition()).test(resource.partition())) {
|
|
392
|
+
return {
|
|
393
|
+
resource: policyResource.value(),
|
|
394
|
+
matches: false,
|
|
395
|
+
errors: ['Partition does not match'],
|
|
396
|
+
mismatchReason: 'partitionMismatch'
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
if (!convertResourceSegmentToRegex(policyResource.service()).test(resource.service())) {
|
|
400
|
+
return {
|
|
401
|
+
resource: policyResource.value(),
|
|
402
|
+
matches: false,
|
|
403
|
+
errors: ['Service does not match'],
|
|
404
|
+
mismatchReason: 'serviceMismatch'
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
if (!convertResourceSegmentToRegex(policyResource.region()).test(resource.region())) {
|
|
408
|
+
return {
|
|
409
|
+
resource: policyResource.value(),
|
|
410
|
+
matches: false,
|
|
411
|
+
errors: ['Region does not match'],
|
|
412
|
+
mismatchReason: 'regionMismatch'
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
if (!convertResourceSegmentToRegex(policyResource.account()).test(resource.account())) {
|
|
416
|
+
return {
|
|
417
|
+
resource: policyResource.value(),
|
|
418
|
+
matches: false,
|
|
419
|
+
errors: ['Account does not match'],
|
|
420
|
+
mismatchReason: 'accountMismatch'
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
//Wildcards and variables are not allowed in the product segment https://docs.aws.amazon.com/IAM/latest/UserGuide/reference-arns.html "Incorrect wildcard usage"
|
|
424
|
+
const [policyProduct, policyResourceId] = (0, util_js_1.getResourceSegments)(policyResource);
|
|
425
|
+
if (!resource.resource().startsWith(policyProduct)) {
|
|
426
|
+
return {
|
|
427
|
+
resource: policyResource.value(),
|
|
428
|
+
matches: false,
|
|
429
|
+
errors: ['Product does not match'],
|
|
430
|
+
mismatchReason: 'productMismatch'
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
const requestResourceId = resource.resource().slice(policyProduct.length);
|
|
434
|
+
const { pattern, errors } = (0, util_js_1.convertIamString)(policyResourceId, request);
|
|
435
|
+
const resolvedResourceId = (0, util_js_1.convertIamString)(policyResourceId, request, {
|
|
436
|
+
convertToRegex: false,
|
|
437
|
+
replaceWildcards: false
|
|
438
|
+
});
|
|
439
|
+
const resolvedResource = policyResource.value().slice(0, policyResource.value().length - policyResourceId.length) +
|
|
440
|
+
resolvedResourceId;
|
|
441
|
+
const resolvedValue = resolvedResource === policyResource.value() ? undefined : resolvedResource;
|
|
442
|
+
if (!pattern.test(requestResourceId)) {
|
|
443
|
+
const mismatchReason = errors?.length ? 'unresolvablePolicyVariable' : 'resourceIdMismatch';
|
|
444
|
+
return {
|
|
445
|
+
resource: policyResource.value(),
|
|
446
|
+
matches: false,
|
|
447
|
+
errors,
|
|
448
|
+
mismatchReason,
|
|
449
|
+
resolvedValue
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
return {
|
|
453
|
+
resource: policyResource.value(),
|
|
454
|
+
matches: true,
|
|
455
|
+
resolvedValue
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
else {
|
|
459
|
+
throw new Error('Unknown resource type');
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Determines if the policy string is equal to, a subset of, a superset of,
|
|
464
|
+
* or has no overlap with the request string.
|
|
465
|
+
*
|
|
466
|
+
* @param policyString the policy string to use
|
|
467
|
+
* @param requestString the request string to compare to the policy string
|
|
468
|
+
* @returns 'equal' if the strings are equal, 'subset' if the policy string is a subset of the request string, 'superset' if the policy string is a superset of the request string, 'overlap' if the strings have a non-empty intersection but neither contains the other, or 'none' if there is no overlap
|
|
469
|
+
*/
|
|
470
|
+
function resourcePatternOverlap(policyString, requestString) {
|
|
471
|
+
if (policyString === requestString) {
|
|
472
|
+
return 'equal';
|
|
473
|
+
}
|
|
474
|
+
const requestPattern = requestResourcePatternToRegexString(requestString);
|
|
475
|
+
if (policyString.match(requestPattern)) {
|
|
476
|
+
return 'policy_is_subset';
|
|
477
|
+
}
|
|
478
|
+
const policyPattern = policyResourcePatternToRegexString(policyString);
|
|
479
|
+
if (requestString.match(policyPattern)) {
|
|
480
|
+
return 'policy_is_superset';
|
|
481
|
+
}
|
|
482
|
+
if (resourcePatternsIntersect(policyString, requestString)) {
|
|
483
|
+
return 'overlap';
|
|
484
|
+
}
|
|
485
|
+
return 'none';
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Checks whether a policy resource pattern and request resource pattern share
|
|
489
|
+
* at least one concrete resource string.
|
|
490
|
+
*
|
|
491
|
+
* Policy patterns use IAM `*` and `?` wildcards. Request patterns only treat
|
|
492
|
+
* `*` as a wildcard; `?` remains literal to match the existing request
|
|
493
|
+
* wildcard semantics in this module.
|
|
494
|
+
*
|
|
495
|
+
* @param policyString the policy-side resource pattern segment to compare
|
|
496
|
+
* @param requestString the request-side resource pattern segment to compare
|
|
497
|
+
* @returns true when the patterns have a non-empty intersection
|
|
498
|
+
*/
|
|
499
|
+
function resourcePatternsIntersect(policyString, requestString) {
|
|
500
|
+
const policyPattern = [...policyString];
|
|
501
|
+
const requestPattern = [...requestString];
|
|
502
|
+
const visited = new Set();
|
|
503
|
+
const queue = [[0, 0]];
|
|
504
|
+
const key = (policyIndex, requestIndex) => `${policyIndex},${requestIndex}`;
|
|
505
|
+
while (queue.length > 0) {
|
|
506
|
+
const [policyIndex, requestIndex] = queue.shift();
|
|
507
|
+
const stateKey = key(policyIndex, requestIndex);
|
|
508
|
+
if (visited.has(stateKey)) {
|
|
509
|
+
continue;
|
|
510
|
+
}
|
|
511
|
+
visited.add(stateKey);
|
|
512
|
+
if (policyIndex === policyPattern.length && requestIndex === requestPattern.length) {
|
|
513
|
+
return true;
|
|
514
|
+
}
|
|
515
|
+
const policyToken = tokenAt(policyPattern, policyIndex);
|
|
516
|
+
const requestToken = tokenAt(requestPattern, requestIndex);
|
|
517
|
+
if (policyToken === '*') {
|
|
518
|
+
queue.push([policyIndex + 1, requestIndex]);
|
|
519
|
+
}
|
|
520
|
+
if (requestToken === '*') {
|
|
521
|
+
queue.push([policyIndex, requestIndex + 1]);
|
|
522
|
+
}
|
|
523
|
+
if (resourcePatternTokensCanConsumeSameCharacter(policyToken, requestToken)) {
|
|
524
|
+
const nextPolicyIndexes = nextResourcePatternIndexesAfterOneCharacter(policyPattern, policyIndex, true);
|
|
525
|
+
const nextRequestIndexes = nextResourcePatternIndexesAfterOneCharacter(requestPattern, requestIndex, false);
|
|
526
|
+
for (const nextPolicyIndex of nextPolicyIndexes) {
|
|
527
|
+
for (const nextRequestIndex of nextRequestIndexes) {
|
|
528
|
+
queue.push([nextPolicyIndex, nextRequestIndex]);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
return false;
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Reads a token from a pattern, returning null at the end of the pattern.
|
|
537
|
+
*
|
|
538
|
+
* @param pattern the pattern characters
|
|
539
|
+
* @param index the index to read
|
|
540
|
+
* @returns the token at the index, or null when the index is past the end
|
|
541
|
+
*/
|
|
542
|
+
function tokenAt(pattern, index) {
|
|
543
|
+
return index < pattern.length ? pattern[index] : null;
|
|
544
|
+
}
|
|
545
|
+
/**
|
|
546
|
+
* Determines whether policy and request pattern tokens can match the same next
|
|
547
|
+
* concrete character under their respective wildcard semantics.
|
|
548
|
+
*
|
|
549
|
+
* @param policyToken token from the policy pattern, where `*` and `?` are wildcards
|
|
550
|
+
* @param requestToken token from the request pattern, where only `*` is a wildcard
|
|
551
|
+
* @returns true if both tokens can consume the same concrete character
|
|
552
|
+
*/
|
|
553
|
+
function resourcePatternTokensCanConsumeSameCharacter(policyToken, requestToken) {
|
|
554
|
+
if (policyToken === null || requestToken === null) {
|
|
555
|
+
return false;
|
|
556
|
+
}
|
|
557
|
+
const policyWildcard = policyToken === '*' || policyToken === '?';
|
|
558
|
+
const requestWildcard = requestToken === '*';
|
|
559
|
+
if (!policyWildcard && !requestWildcard) {
|
|
560
|
+
return policyToken === requestToken;
|
|
561
|
+
}
|
|
562
|
+
return true;
|
|
563
|
+
}
|
|
564
|
+
/**
|
|
565
|
+
* Returns possible next indexes after consuming one concrete character from a pattern.
|
|
566
|
+
*
|
|
567
|
+
* @param pattern the pattern characters
|
|
568
|
+
* @param index current pattern index
|
|
569
|
+
* @param questionMarkIsWildcard whether `?` should be treated as a one-character wildcard
|
|
570
|
+
* @returns possible next indexes after one concrete character is consumed
|
|
571
|
+
*/
|
|
572
|
+
function nextResourcePatternIndexesAfterOneCharacter(pattern, index, questionMarkIsWildcard) {
|
|
573
|
+
const token = tokenAt(pattern, index);
|
|
574
|
+
if (token === null) {
|
|
575
|
+
return [];
|
|
576
|
+
}
|
|
577
|
+
if (token === '*') {
|
|
578
|
+
return [index];
|
|
579
|
+
}
|
|
580
|
+
if (token === '?' && questionMarkIsWildcard) {
|
|
581
|
+
return [index + 1];
|
|
582
|
+
}
|
|
583
|
+
return [index + 1];
|
|
584
|
+
}
|
|
585
|
+
//# sourceMappingURL=resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../../src/resource/resource.ts"],"names":[],"mappings":";;AA0HA,4EA+BC;AAYD,0DAYC;AAYD,gEAwBC;AAuVD,wDAsBC;AAjkBD,wEAIuC;AAGvC,wCAAkE;AAelE;;;;;GAKG;AACH,MAAM,0BAA0B,GAAmD;IACjF,QAAQ,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IAC/E,OAAO,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IAC9E,EAAE,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IACzE,QAAQ,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IAChF,IAAI,EAAE,EAAE,uBAAuB,EAAE,SAAS,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IAC5E,GAAG,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE;IAC1E,GAAG,EAAE,EAAE,uBAAuB,EAAE,QAAQ,EAAE,oBAAoB,EAAE,QAAQ,EAAE;CAC3E,CAAA;AAED;;;;;;GAMG;AACH,SAAS,sBAAsB,CAAC,aAAqB;IACnD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG;QACf,KAAK,EAAE,GAAG,EAAE,CAAC,aAAa;QAC1B,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK;QAC3B,aAAa,EAAE,GAAG,EAAE,CAAC,IAAI;QACzB,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;QACd,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACzB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACtB,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACvB,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KACzC,CAAA;IACD,OAAO,QAA+B,CAAA;AACxC,CAAC;AAED;;;;;GAKG;AACH,SAAS,6BAA6B,CAAC,OAAe;IACpD,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;IACvD,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;IAC7E,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED;;;;;GAKG;AACH,SAAS,oCAAoC,CAAC,OAAe;IAC3D,OAAO,OAAO,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAA;AACvD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,mCAAmC,CAAC,aAAqB;IAChE,OAAO,GAAG,GAAG,oCAAoC,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,GAAG,CAAA;AAChG,CAAC;AAED;;;;;;GAMG;AACH,SAAS,kCAAkC,CAAC,YAAoB;IAC9D,OAAO,CACL,GAAG;QACH,oCAAoC,CAAC,YAAY,CAAC;aAC/C,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;aACrB,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAC1B,GAAG,CACJ,CAAA;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAC9C,OAAmB,EACnB,SAAoB,EACpB,UAAsB;IAEtB,IAAI,SAAS,CAAC,mBAAmB,EAAE,EAAE,CAAC;QACpC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,uBAAuB,CACnD,OAAO,EACP,SAAS,CAAC,SAAS,EAAE,EACrB,UAAU,EACV,SAAS,CAAC,MAAM,EAAsB,EACtC,UAAU,CACX,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QACzD,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,CAAA;IACtD,CAAC;SAAM,IAAI,SAAS,CAAC,sBAAsB,EAAE,EAAE,CAAC;QAC9C,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,0BAA0B,CACtD,OAAO,EACP,SAAS,CAAC,YAAY,EAAE,EACxB,aAAa,EACb,SAAS,CAAC,MAAM,EAAsB,EACtC,UAAU,CACX,CAAA;QACD,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;QAC5D,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,CAAA;IACzD,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;AACvC,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,uBAAuB,CACrC,OAAmB,EACnB,eAA2B,EAC3B,YAAwC,EACxC,MAAwB,EACxB,UAAsB;IAEtB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CACtD,4BAA4B,CAAC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,CACxF,CAAA;IACD,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC3D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,0BAA0B,CACxC,OAAmB,EACnB,eAA2B,EAC3B,YAAwC,EACxC,MAAwB,EACxB,UAAsB;IAEtB,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE;QACtD,MAAM,OAAO,GAAG,4BAA4B,CAC1C,OAAO,EACP,cAAc,EACd,YAAY,EACZ,MAAM,EACN,UAAU,CACX,CAAA;QACD,IAAI,8BAA8B,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5C,OAAO,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,CAAA;YAClC,OAAO,OAAO,CAAC,MAAM,CAAA;YACrB,OAAO,OAAO,CAAC,cAAc,CAAA;QAC/B,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7D,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAA;AAC9B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,8BAA8B,CAAC,OAAwB;IAC9D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,4DAA4D,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACjG,CAAC;IAED,OAAO,6CAAuB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,UAAU,CAAA;AACnE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiCE;AAEF;;;;;;;;;GASG;AACH,SAAS,4BAA4B,CACnC,OAAmB,EACnB,cAAwB,EACxB,YAAwC,EACxC,MAAwB,EACxB,UAAsB;IAEtB,0BAA0B;IAC1B,IAAI,cAAc,CAAC,cAAc,EAAE,EAAE,CAAC;QACpC,OAAO;YACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;YAChC,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;IAED,6DAA6D;IAC7D,IAAI,cAAc,CAAC,aAAa,EAAE,IAAI,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnF,MAAM,QAAQ,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAA;QACvD,6EAA6E;QAC7E,+EAA+E;QAC/E,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAClE,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QACrD,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;QAC3D,MAAM,WAAW,GACf,QAAQ,CAAC,uBAAuB,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,cAAc,CAAA;QACtF,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAA;QAE/F,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,uDAAuD,CAAC;gBACjE,cAAc,EAAE,0BAA0B;aAC3C,CAAA;QACH,CAAC;QAED,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,iBAAiB;aAClC,CAAA;QACH,CAAC;QAED,0FAA0F;QAC1F,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAClD,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;QACD,MAAM,MAAM,GAAG,4BAA4B,CACzC,OAAO,EACP,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC1C,YAAY,EACZ,MAAM,EACN,UAAU,CACX,CAAA;QACD,mEAAmE;QACnE,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,CAAA;QACxC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC7C,MAAM,CAAC,cAAc,GAAG,0BAA0B,CAAA;QACpD,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,2BAA2B;IAC3B,IAAI,OAAO,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,CAAC;QACvC,+FAA+F;QAC/F,6FAA6F;QAC7F,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC/B,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,oCAAoC;aACrD,CAAA;QACH,CAAC;QAED,IAAI,MAAM,KAAK,OAAO,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YACtD,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,IAAI;aACd,CAAA;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,OAAO,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;YAChE,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK,EAAE,mCAAmC;gBACnD,cAAc,EAAE,wCAAwC;aACzD,CAAA;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;YAC5D,0EAA0E;YAC1E,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,cAAc,EAAE,yCAAyC;aAC1D,CAAA;QACH,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;YAC/D,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,IAAI,CAAC,mCAAmC;aAClD,CAAA;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,IAAI,MAAM,EAAE,CAAC,CAAA;IAC5F,CAAC;IAED,qDAAqD;IACrD,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,IAAI,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;QACtE,MAAM,QAAQ,GAAG;YACf,sBAAsB,CAAC,cAAc,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YAChF,sBAAsB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5E,sBAAsB,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1E,sBAAsB,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5E,sBAAsB,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SAC/E,CAAA;QAED,IAAI,YAAY,KAAK,UAAU,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACtD,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,OAAO,EAAE,IAAI;iBACd,CAAA;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5D,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,kBAAkB,CAAC,EAAE,CAAC;gBACnE,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE,yBAAyB;iBAC1C,CAAA;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YAChE;;;;;;eAMG;YACH,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,OAAO,IAAI,CAAC,KAAK,oBAAoB,CAAC,EAAE,CAAC;gBACvE,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,mCAAmC;oBACnC,OAAO,EAAE,IAAI;iBACd,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,mCAAmC;oBACnC,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE,yBAAyB;iBAC1C,CAAA;YACH,CAAC;QACH,CAAC;aAAM,IAAI,YAAY,KAAK,aAAa,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC/D;;;;;;cAME;YACF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC;gBACvC,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,mCAAmC;oBACnC,OAAO,EAAE,KAAK;oBACd,cAAc,EAAE,yBAAyB;iBAC1C,CAAA;YACH,CAAC;iBAAM,CAAC;gBACN,OAAO;oBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;oBAChC,mCAAmC;oBACnC,OAAO,EAAE,IAAI;iBACd,CAAA;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,IAAI,MAAM,EAAE,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED,IAAI,cAAc,CAAC,aAAa,EAAE,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,kCAAkC,CAAC;gBAC5C,cAAc,EAAE,wBAAwB;aACzC,CAAA;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QACjC,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;YAC1F,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,0BAA0B,CAAC;gBACpC,cAAc,EAAE,mBAAmB;aACpC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACtF,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,wBAAwB,CAAC;gBAClC,cAAc,EAAE,iBAAiB;aAClC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;YACpF,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,uBAAuB,CAAC;gBACjC,cAAc,EAAE,gBAAgB;aACjC,CAAA;QACH,CAAC;QAED,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;YACtF,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,wBAAwB,CAAC;gBAClC,cAAc,EAAE,iBAAiB;aAClC,CAAA;QACH,CAAC;QAED,gKAAgK;QAChK,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,IAAA,6BAAmB,EAAC,cAAc,CAAC,CAAA;QAC7E,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM,EAAE,CAAC,wBAAwB,CAAC;gBAClC,cAAc,EAAE,iBAAiB;aAClC,CAAA;QACH,CAAC;QAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACzE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,IAAA,0BAAgB,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAA;QACvE,MAAM,kBAAkB,GAAG,IAAA,0BAAgB,EAAC,gBAAgB,EAAE,OAAO,EAAE;YACrE,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;SACxB,CAAC,CAAA;QACF,MAAM,gBAAgB,GACpB,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC;YACxF,kBAAkB,CAAA;QACpB,MAAM,aAAa,GAAG,gBAAgB,KAAK,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAA;QAEhG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,MAAM,cAAc,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,oBAAoB,CAAA;YAC3F,OAAO;gBACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;gBAChC,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,cAAc;gBACd,aAAa;aACd,CAAA;QACH,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,cAAc,CAAC,KAAK,EAAE;YAChC,OAAO,EAAE,IAAI;YACb,aAAa;SACd,CAAA;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;IAC1C,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,sBAAsB,CACpC,YAAoB,EACpB,aAAqB;IAErB,IAAI,YAAY,KAAK,aAAa,EAAE,CAAC;QACnC,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,cAAc,GAAG,mCAAmC,CAAC,aAAa,CAAC,CAAA;IACzE,IAAI,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACvC,OAAO,kBAAkB,CAAA;IAC3B,CAAC;IAED,MAAM,aAAa,GAAG,kCAAkC,CAAC,YAAY,CAAC,CAAA;IACtE,IAAI,aAAa,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;QACvC,OAAO,oBAAoB,CAAA;IAC7B,CAAC;IAED,IAAI,yBAAyB,CAAC,YAAY,EAAE,aAAa,CAAC,EAAE,CAAC;QAC3D,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,yBAAyB,CAAC,YAAoB,EAAE,aAAqB;IAC5E,MAAM,aAAa,GAAG,CAAC,GAAG,YAAY,CAAC,CAAA;IACvC,MAAM,cAAc,GAAG,CAAC,GAAG,aAAa,CAAC,CAAA;IACzC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,KAAK,GAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IAC/C,MAAM,GAAG,GAAG,CAAC,WAAmB,EAAE,YAAoB,EAAE,EAAE,CAAC,GAAG,WAAW,IAAI,YAAY,EAAE,CAAA;IAE3F,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,GAAG,KAAK,CAAC,KAAK,EAAG,CAAA;QAClD,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAQ;QACV,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAErB,IAAI,WAAW,KAAK,aAAa,CAAC,MAAM,IAAI,YAAY,KAAK,cAAc,CAAC,MAAM,EAAE,CAAC;YACnF,OAAO,IAAI,CAAA;QACb,CAAC;QAED,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAA;QACvD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,EAAE,YAAY,CAAC,CAAA;QAE1D,IAAI,WAAW,KAAK,GAAG,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,CAAC,EAAE,YAAY,CAAC,CAAC,CAAA;QAC7C,CAAC;QACD,IAAI,YAAY,KAAK,GAAG,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,4CAA4C,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,CAAC;YAC5E,MAAM,iBAAiB,GAAG,2CAA2C,CACnE,aAAa,EACb,WAAW,EACX,IAAI,CACL,CAAA;YACD,MAAM,kBAAkB,GAAG,2CAA2C,CACpE,cAAc,EACd,YAAY,EACZ,KAAK,CACN,CAAA;YACD,KAAK,MAAM,eAAe,IAAI,iBAAiB,EAAE,CAAC;gBAChD,KAAK,MAAM,gBAAgB,IAAI,kBAAkB,EAAE,CAAC;oBAClD,KAAK,CAAC,IAAI,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC,CAAA;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;GAMG;AACH,SAAS,OAAO,CAAC,OAAiB,EAAE,KAAa;IAC/C,OAAO,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACvD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,4CAA4C,CACnD,WAA0B,EAC1B,YAA2B;IAE3B,IAAI,WAAW,KAAK,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,cAAc,GAAG,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,GAAG,CAAA;IACjE,MAAM,eAAe,GAAG,YAAY,KAAK,GAAG,CAAA;IAC5C,IAAI,CAAC,cAAc,IAAI,CAAC,eAAe,EAAE,CAAC;QACxC,OAAO,WAAW,KAAK,YAAY,CAAA;IACrC,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,2CAA2C,CAClD,OAAiB,EACjB,KAAa,EACb,sBAA+B;IAE/B,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACrC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,CAAA;IAChB,CAAC;IACD,IAAI,KAAK,KAAK,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5C,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;AACpB,CAAC"}
|