@kensio/yulin 1.20.16 → 1.20.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/dist/service/aws/caller/sim-aws-ambient-caller.d.ts +23 -0
  2. package/dist/service/aws/caller/sim-aws-ambient-caller.js +12 -0
  3. package/dist/service/aws/caller/sim-aws-caller-resolver.d.ts +17 -6
  4. package/dist/service/aws/caller/sim-aws-caller-resolver.js +21 -26
  5. package/dist/service/aws/factory/sim-aws-account-region-service-builder.d.ts +6 -0
  6. package/dist/service/aws/factory/sim-aws-account-region-service-builder.js +3 -0
  7. package/dist/service/aws/factory/sim-aws-account-service-cache.d.ts +6 -0
  8. package/dist/service/aws/factory/sim-aws-account-service-cache.js +5 -1
  9. package/dist/service/aws/factory/sim-aws-registered-service-builder.js +3 -1
  10. package/dist/service/aws/factory/sim-aws-service-factory.js +9 -1
  11. package/dist/service/cloudformation/command/create-stack/create-stack.handler.d.ts +4 -0
  12. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +4 -1
  13. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-deployer.js +2 -1
  14. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.d.ts +11 -2
  15. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-plan.js +2 -1
  16. package/dist/service/cloudformation/deploy/sim-cfn-cdk-out-stack-options.d.ts +6 -0
  17. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.d.ts +11 -0
  18. package/dist/service/cloudformation/deploy/sim-cfn-template-deployer.js +17 -15
  19. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.d.ts +12 -0
  20. package/dist/service/cloudformation/deploy/sim-cfn-template-file-loader.js +2 -1
  21. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.d.ts +23 -0
  22. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cache-policy-cfn.js +30 -0
  23. package/dist/service/cloudformation/resource/cfn/cloudfront/sim-cloudfront-cfn-value-adapter.js +8 -0
  24. package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.d.ts +29 -12
  25. package/dist/service/cloudformation/resource/name/sim-cfn-generated-resource-name.js +51 -20
  26. package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.d.ts +19 -0
  27. package/dist/service/cloudformation/stack/deploy/sim-cfn-resource-order.js +6 -0
  28. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.d.ts +7 -0
  29. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-batch-creator.js +9 -2
  30. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.d.ts +2 -0
  31. package/dist/service/cloudformation/stack/deploy/sim-cfn-stack-resource-creator.js +2 -1
  32. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +6 -0
  33. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +4 -1
  34. package/dist/service/cloudformation/stack/sim-cfn-stack.js +2 -1
  35. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +6 -0
  36. package/dist/service/cloudfront/behaviour/sim-cloud-front-behavior.d.ts +5 -0
  37. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.d.ts +37 -0
  38. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy-registry.js +50 -0
  39. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.d.ts +25 -0
  40. package/dist/service/cloudfront/cache-policy/sim-cf-cache-policy.js +21 -0
  41. package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.d.ts +28 -0
  42. package/dist/service/cloudfront/cache-policy/sim-cf-managed-cache-policies.js +48 -0
  43. package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.d.ts +8 -0
  44. package/dist/service/cloudfront/cff/function-code-input/cff-function-code-input.js +13 -0
  45. package/dist/service/cloudfront/cff/sim-cf-function-commands.d.ts +52 -0
  46. package/dist/service/cloudfront/cff/sim-cf-function-commands.js +51 -0
  47. package/dist/service/cloudfront/cff/sim-cff-configuration.d.ts +41 -0
  48. package/dist/service/cloudfront/cff/sim-cff-configuration.js +34 -0
  49. package/dist/service/cloudfront/cff/sim-cff-stage.d.ts +23 -0
  50. package/dist/service/cloudfront/cff/sim-cff-stage.js +30 -0
  51. package/dist/service/cloudfront/cff/sim-cloudfront-function.d.ts +6 -1
  52. package/dist/service/cloudfront/cff/sim-cloudfront-function.js +6 -0
  53. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.d.ts +27 -0
  54. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-config.js +42 -0
  55. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.d.ts +24 -0
  56. package/dist/service/cloudfront/cfn/cache-policy/sim-cfn-cf-cache-policy-creator.js +32 -0
  57. package/dist/service/cloudfront/cfn/distro/{sim-cfn-cf-distro-response-headers-policy.d.ts → sim-cfn-cf-distro-behavior-policies.d.ts} +8 -7
  58. package/dist/service/cloudfront/cfn/distro/{sim-cfn-cf-distro-response-headers-policy.js → sim-cfn-cf-distro-behavior-policies.js} +11 -37
  59. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.d.ts +6 -5
  60. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-creator.js +8 -7
  61. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.d.ts +23 -0
  62. package/dist/service/cloudfront/cfn/distro/sim-cfn-cf-distro-policy-drops.js +50 -0
  63. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.d.ts +1 -0
  64. package/dist/service/cloudfront/cfn/sim-cfn-cloudfront-resource-factory.js +10 -0
  65. package/dist/service/cloudfront/command/create-distribution/create-distribution.command.d.ts +1 -0
  66. package/dist/service/cloudfront/command/create-distribution/create-distribution.handler.d.ts +2 -0
  67. package/dist/service/cloudfront/command/create-function/create-function.handler.js +7 -1
  68. package/dist/service/cloudfront/command/function/sim-cf-describe-function.d.ts +22 -0
  69. package/dist/service/cloudfront/command/function/sim-cf-describe-function.js +32 -0
  70. package/dist/service/cloudfront/command/function/sim-cf-function-access.d.ts +48 -0
  71. package/dist/service/cloudfront/command/function/sim-cf-function-access.js +48 -0
  72. package/dist/service/cloudfront/command/function/sim-cf-function-command.types.d.ts +97 -0
  73. package/dist/service/cloudfront/command/function/sim-cf-function-command.types.js +10 -0
  74. package/dist/service/cloudfront/command/function/sim-cf-function-lookup.d.ts +12 -0
  75. package/dist/service/cloudfront/command/function/sim-cf-function-lookup.js +21 -0
  76. package/dist/service/cloudfront/command/function/sim-cf-function-summary.d.ts +11 -0
  77. package/dist/service/cloudfront/command/function/sim-cf-function-summary.js +30 -0
  78. package/dist/service/cloudfront/command/function/sim-cf-get-function.d.ts +23 -0
  79. package/dist/service/cloudfront/command/function/sim-cf-get-function.js +33 -0
  80. package/dist/service/cloudfront/command/function/sim-cf-list-functions.d.ts +22 -0
  81. package/dist/service/cloudfront/command/function/sim-cf-list-functions.js +38 -0
  82. package/dist/service/cloudfront/command/update-distribution/update-distribution.handler.d.ts +2 -0
  83. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.d.ts +18 -0
  84. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-cache-policy.js +30 -0
  85. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.d.ts +28 -0
  86. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-policies.js +41 -0
  87. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.d.ts +2 -2
  88. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-properties.js +6 -3
  89. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.d.ts +0 -10
  90. package/dist/service/cloudfront/distribution/configurator/sim-cf-behavior-response-headers-policy.js +0 -19
  91. package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.d.ts +2 -0
  92. package/dist/service/cloudfront/distribution/configurator/sim-cf-distribution-configurator.factory.js +4 -2
  93. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.d.ts +3 -3
  94. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-behavior-configurator.js +5 -5
  95. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.d.ts +3 -3
  96. package/dist/service/cloudfront/distribution/configurator/sim-cloud-front-distribution-configurator.js +4 -4
  97. package/dist/service/cloudfront/distribution/sim-cf-distribution-configuration-state.d.ts +3 -1
  98. package/dist/service/cloudfront/distribution/sim-cf-distribution-reconfigurer.d.ts +2 -0
  99. package/dist/service/cloudfront/error/sim-cloudfront.error.d.ts +21 -0
  100. package/dist/service/cloudfront/error/sim-cloudfront.error.js +25 -0
  101. package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store-access.js +2 -10
  102. package/dist/service/cloudfront/key-value-store/sim-cf-key-value-store.js +2 -1
  103. package/dist/service/cloudfront/sdk/sim-cloudfront-sdk-command-router.js +12 -0
  104. package/dist/service/cloudfront/sim-cf-authorize.d.ts +16 -0
  105. package/dist/service/cloudfront/sim-cf-authorize.js +19 -0
  106. package/dist/service/cloudfront/sim-cf-etag.d.ts +7 -0
  107. package/dist/service/cloudfront/sim-cf-etag.js +10 -0
  108. package/dist/service/cloudfront/sim-cloudfront-commands.d.ts +8 -12
  109. package/dist/service/cloudfront/sim-cloudfront-commands.js +8 -17
  110. package/dist/service/cloudfront/sim-cloudfront-policies.d.ts +43 -0
  111. package/dist/service/cloudfront/sim-cloudfront-policies.js +53 -0
  112. package/dist/service/cloudfront/sim-cloudfront.d.ts +13 -17
  113. package/dist/service/cloudfront/sim-cloudfront.js +22 -25
  114. package/dist/service/ecr/authorize/sim-ecr-authorizer.d.ts +31 -0
  115. package/dist/service/ecr/authorize/sim-ecr-authorizer.js +38 -0
  116. package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.d.ts +11 -2
  117. package/dist/service/ecr/cfn/repository/sim-cfn-ecr-repository-creator.js +11 -2
  118. package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.d.ts +4 -2
  119. package/dist/service/ecr/cfn/sim-ecr-cfn-resource-factory.js +8 -9
  120. package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.d.ts +7 -0
  121. package/dist/service/ecr/cfn/sim-ecr-cfn-unsupported-resource.js +9 -0
  122. package/dist/service/ecr/sim-ecr.d.ts +7 -0
  123. package/dist/service/ecr/sim-ecr.js +16 -4
  124. package/dist/service/ecs/command/authorize/sim-ecs-authorizer.d.ts +12 -0
  125. package/dist/service/ecs/command/authorize/sim-ecs-authorizer.js +21 -0
  126. package/dist/service/ecs/command/register-task-definition/register-task-definition.handler.js +1 -0
  127. package/dist/service/ecs/sim-ecs-service-principal.d.ts +8 -0
  128. package/dist/service/ecs/sim-ecs-service-principal.js +8 -0
  129. package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.d.ts +12 -0
  130. package/dist/service/eventbridge/command/authorize/sim-event-bridge-authorizer.js +21 -0
  131. package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.d.ts +13 -0
  132. package/dist/service/eventbridge/command/rule/sim-event-bridge-rule-access.js +9 -0
  133. package/dist/service/eventbridge/command/target/sim-event-bridge-put-targets.js +1 -0
  134. package/dist/service/firehose/command/authorize/sim-firehose-authorizer.d.ts +12 -0
  135. package/dist/service/firehose/command/authorize/sim-firehose-authorizer.js +20 -0
  136. package/dist/service/firehose/command/sim-firehose-delivery-stream-access.d.ts +4 -0
  137. package/dist/service/firehose/command/sim-firehose-delivery-stream-access.js +6 -0
  138. package/dist/service/firehose/command/stream/sim-firehose-create-delivery-stream.js +3 -1
  139. package/dist/service/firehose/sim-firehose-service-principal.d.ts +8 -0
  140. package/dist/service/firehose/sim-firehose-service-principal.js +8 -0
  141. package/dist/service/firehose/source/sim-firehose-source.d.ts +5 -0
  142. package/dist/service/firehose/source/sim-firehose-source.js +5 -0
  143. package/dist/service/glue/cfn/database/sim-cfn-glue-database-properties.js +2 -2
  144. package/dist/service/glue/cfn/sim-cfn-glue-generated-name.d.ts +10 -0
  145. package/dist/service/glue/cfn/sim-cfn-glue-generated-name.js +25 -0
  146. package/dist/service/glue/cfn/table/sim-cfn-glue-table-properties.js +2 -3
  147. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts +33 -2
  148. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js +33 -2
  149. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.d.ts +4 -3
  150. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.js +9 -3
  151. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.d.ts +14 -5
  152. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.js +16 -12
  153. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.d.ts +9 -3
  154. package/dist/service/iam/authorize/context/sim-iam-auth-z-caller-context-builder.js +5 -3
  155. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts +9 -71
  156. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js +2 -1
  157. package/dist/service/iam/authorize/context/sim-iam-auth-z-input.d.ts +87 -0
  158. package/dist/service/iam/authorize/context/sim-iam-auth-z-input.js +1 -0
  159. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts +11 -3
  160. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js +20 -8
  161. package/dist/service/iam/authorize/match/sim-iam-principal-match.d.ts +29 -8
  162. package/dist/service/iam/authorize/match/sim-iam-principal-match.js +38 -13
  163. package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.d.ts +74 -0
  164. package/dist/service/iam/authorize/pass-role/sim-iam-pass-role-authorizer.js +92 -0
  165. package/dist/service/iam/authorize/sim-iam-account-auth-z.d.ts +14 -5
  166. package/dist/service/iam/authorize/sim-iam-account-auth-z.js +6 -4
  167. package/dist/service/iam/authorize/sim-iam-authorizer.d.ts +3 -1
  168. package/dist/service/iam/authorize/sim-iam-authorizer.js +2 -1
  169. package/dist/service/iam/authorize/sim-iam-inter-service-auth-z.d.ts +1 -1
  170. package/dist/service/iam/authorize/sim-iam-wildcard.js +39 -4
  171. package/dist/service/iam/cfn/managed-policy/sim-cfn-iam-managed-policy-creator.js +2 -1
  172. package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.d.ts +16 -0
  173. package/dist/service/iam/cfn/name/sim-cfn-iam-generated-name.js +36 -0
  174. package/dist/service/iam/cfn/role/sim-cfn-iam-role-properties-parser.js +9 -8
  175. package/dist/service/iam/cfn/sim-cfn-iam-optional-string.d.ts +17 -0
  176. package/dist/service/iam/cfn/sim-cfn-iam-optional-string.js +17 -0
  177. package/dist/service/iam/cfn/user/sim-cfn-iam-user-properties-parser.js +4 -8
  178. package/dist/service/iam/command/policy/create-policy/create-policy-input-resolver.js +2 -0
  179. package/dist/service/iam/command/policy/put-role-policy/put-role-policy.handler.js +5 -0
  180. package/dist/service/iam/command/policy/put-user-policy/put-user-policy.handler.js +5 -0
  181. package/dist/service/iam/command/role/create-role/create-role.handler.js +4 -1
  182. package/dist/service/iam/error/sim-iam.error.d.ts +11 -0
  183. package/dist/service/iam/error/sim-iam.error.js +13 -0
  184. package/dist/service/iam/index.d.ts +1 -0
  185. package/dist/service/iam/policy/sim-iam-policy-document-of-size.d.ts +18 -0
  186. package/dist/service/iam/policy/sim-iam-policy-document-of-size.js +41 -0
  187. package/dist/service/iam/role/sim-iam-deploy-role.d.ts +56 -0
  188. package/dist/service/iam/role/sim-iam-deploy-role.js +50 -0
  189. package/dist/service/iam/role/sim-iam-role-with-policy.factory.d.ts +3 -1
  190. package/dist/service/iam/sim-iam-account-parts.d.ts +8 -0
  191. package/dist/service/iam/sim-iam-account-parts.js +1 -0
  192. package/dist/service/iam/sim-iam.d.ts +12 -2
  193. package/dist/service/iam/sim-iam.js +12 -0
  194. package/dist/service/iam/validate/size/sim-iam-policy-document-size.d.ts +57 -0
  195. package/dist/service/iam/validate/size/sim-iam-policy-document-size.js +71 -0
  196. package/dist/service/kms/command/authorize/sim-kms-authorizer.d.ts +3 -1
  197. package/dist/service/kms/command/authorize/sim-kms-authorizer.js +4 -1
  198. package/dist/service/kms/command/sim-kms-request-options.d.ts +11 -0
  199. package/dist/service/kms/key/sim-kms-key-policy.d.ts +5 -4
  200. package/dist/service/kms/key/sim-kms-key-policy.js +4 -3
  201. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.d.ts +2 -2
  202. package/dist/service/lambda/cfn/function/sim-cfn-lambda-function-properties-parser.js +4 -3
  203. package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.d.ts +10 -0
  204. package/dist/service/lambda/cfn/function/sim-cfn-lambda-generated-function-name.js +25 -0
  205. package/dist/service/lambda/command/authorize/sim-lambda-resource-policies.d.ts +1 -1
  206. package/dist/service/lambda/command/create-function/create-function-authorizer.d.ts +9 -2
  207. package/dist/service/lambda/command/create-function/create-function-authorizer.js +16 -2
  208. package/dist/service/lambda/command/create-function/create-function.handler.js +1 -1
  209. package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.d.ts +7 -2
  210. package/dist/service/lambda/command/update-function-configuration/update-function-configuration-authorizer.js +14 -2
  211. package/dist/service/lambda/command/update-function-configuration/update-function-configuration.handler.js +1 -1
  212. package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +10 -1
  213. package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +25 -1
  214. package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.d.ts +13 -0
  215. package/dist/service/lambda/function/logging/sim-lambda-invoke-error-log.js +18 -0
  216. package/dist/service/lambda/sim-lambda-service-principal.d.ts +7 -0
  217. package/dist/service/lambda/sim-lambda-service-principal.js +7 -0
  218. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.d.ts +46 -0
  219. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-authorization.js +49 -0
  220. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.d.ts +5 -0
  221. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-creator.js +6 -0
  222. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.d.ts +5 -0
  223. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-destination-creator.js +6 -0
  224. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.d.ts +5 -0
  225. package/dist/service/logs/cfn/delivery/sim-cfn-delivery-source-creator.js +6 -0
  226. package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.d.ts +9 -2
  227. package/dist/service/logs/cfn/group/sim-cfn-log-group-creator.js +34 -5
  228. package/dist/service/logs/cfn/sim-logs-cfn-resource-deleter.js +1 -1
  229. package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.d.ts +4 -0
  230. package/dist/service/logs/cfn/sim-logs-cfn-resource-factory.js +9 -4
  231. package/dist/service/logs/sim-logs-commands.d.ts +3 -0
  232. package/dist/service/logs/sim-logs-commands.js +4 -0
  233. package/dist/service/logs/sim-logs.js +6 -1
  234. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.d.ts +2 -2
  235. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.js +4 -3
  236. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.d.ts +12 -0
  237. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-generated-name.js +22 -0
  238. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.d.ts +1 -1
  239. package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.d.ts +10 -1
  240. package/dist/service/scheduler/command/authorize/sim-scheduler-authorizer.js +19 -1
  241. package/dist/service/scheduler/command/schedule/sim-scheduler-create-schedule.js +1 -0
  242. package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.d.ts +8 -0
  243. package/dist/service/scheduler/command/schedule/sim-scheduler-schedule-access.js +9 -0
  244. package/dist/service/scheduler/command/schedule/sim-scheduler-update-schedule.js +1 -0
  245. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.d.ts +15 -0
  246. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-generated-name.js +22 -0
  247. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.d.ts +4 -10
  248. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-properties.js +13 -31
  249. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.d.ts +17 -0
  250. package/dist/service/secretsmanager/cfn/secret/sim-cfn-secrets-manager-secret-value.js +30 -0
  251. package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.d.ts +6 -0
  252. package/dist/service/secretsmanager/secret/sim-secrets-manager-secret-name.js +8 -3
  253. package/dist/service/sns/command/authorize/sim-sns-topic-resource-policies.d.ts +1 -1
  254. package/dist/service/sqs/command/authorize/sim-sqs-queue-resource-policies.d.ts +1 -1
  255. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.d.ts +16 -0
  256. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-generated-parameter-name.js +23 -0
  257. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.d.ts +2 -4
  258. package/dist/service/ssm/cfn/parameter/sim-cfn-ssm-parameter-properties.js +5 -5
  259. package/dist/service/ssm/parameter/sim-ssm-kms-crypto.d.ts +6 -4
  260. package/dist/service/ssm/parameter/sim-ssm-kms-crypto.js +4 -4
  261. package/dist/service/ssm/parameter/sim-ssm-parameter-arn.d.ts +17 -0
  262. package/dist/service/ssm/parameter/sim-ssm-parameter-arn.js +20 -0
  263. package/dist/service/ssm/parameter/sim-ssm-parameter-kms.d.ts +15 -9
  264. package/dist/service/ssm/parameter/sim-ssm-parameter-kms.js +20 -10
  265. package/dist/service/ssm/parameter/sim-ssm-parameter-name.js +3 -12
  266. package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.d.ts +41 -0
  267. package/dist/service/stepfunctions/command/authorize/sim-step-functions-authorizer.js +64 -0
  268. package/dist/service/stepfunctions/command/machine/sim-state-machine-create.d.ts +5 -2
  269. package/dist/service/stepfunctions/command/machine/sim-state-machine-create.js +6 -2
  270. package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.d.ts +26 -0
  271. package/dist/service/stepfunctions/command/machine/sim-state-machine-delete.js +29 -0
  272. package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.d.ts +7 -0
  273. package/dist/service/stepfunctions/command/machine/sim-state-machine-lookup.js +12 -3
  274. package/dist/service/stepfunctions/command/machine/sim-state-machine-update.d.ts +19 -0
  275. package/dist/service/stepfunctions/command/machine/{sim-state-machine-writes.js → sim-state-machine-update.js} +3 -14
  276. package/dist/service/stepfunctions/sim-step-functions.d.ts +8 -2
  277. package/dist/service/stepfunctions/sim-step-functions.js +26 -9
  278. package/dist/service/sts/command/assume-role/assume-role.handler.d.ts +5 -0
  279. package/dist/service/sts/command/assume-role/assume-role.handler.js +1 -0
  280. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.d.ts +5 -0
  281. package/dist/service/sts/command/get-caller-identity/get-caller-identity.handler.js +1 -0
  282. package/dist/service/sts/sim-sts.d.ts +9 -0
  283. package/dist/service/sts/sim-sts.js +4 -0
  284. package/dist/util/memo/bounded-memo.d.ts +36 -0
  285. package/dist/util/memo/bounded-memo.js +58 -0
  286. package/docs/sdk/README.md +3 -1
  287. package/docs/services/cloudformation/README.md +196 -11
  288. package/docs/services/cloudfront/README.md +230 -6
  289. package/docs/services/cloudwatch/README.md +6 -4
  290. package/docs/services/cognito/README.md +8 -7
  291. package/docs/services/dynamodb/README.md +6 -5
  292. package/docs/services/ecs/README.md +20 -9
  293. package/docs/services/elbv2/README.md +6 -2
  294. package/docs/services/eventbridge/README.md +9 -1
  295. package/docs/services/firehose/README.md +9 -3
  296. package/docs/services/glue/README.md +6 -0
  297. package/docs/services/iam/README.md +322 -27
  298. package/docs/services/kinesis/README.md +3 -2
  299. package/docs/services/kms/README.md +7 -2
  300. package/docs/services/lambda/README.md +76 -2
  301. package/docs/services/logs/README.md +16 -2
  302. package/docs/services/s3/README.md +7 -2
  303. package/docs/services/scheduler/README.md +12 -4
  304. package/docs/services/secretsmanager/README.md +6 -3
  305. package/docs/services/ses/README.md +3 -1
  306. package/docs/services/sns/README.md +5 -5
  307. package/docs/services/sqs/README.md +5 -5
  308. package/docs/services/ssm/README.md +40 -16
  309. package/docs/services/stepfunctions/README.md +11 -2
  310. package/docs/services/wafv2/README.md +5 -3
  311. package/package.json +1 -1
  312. package/dist/service/stepfunctions/command/machine/sim-state-machine-writes.d.ts +0 -25
@@ -0,0 +1,74 @@
1
+ import type { SimAwsCaller, SimAwsPrincipal } from "../../../aws/caller/sim-aws-caller.js";
2
+ import type { SimIamInterServiceAuthZ } from "../sim-iam-inter-service-auth-z.js";
3
+ /**
4
+ * What a service needs to report a Role the caller may not pass.
5
+ */
6
+ export interface SimIamPassRoleDenial {
7
+ readonly principal: SimAwsPrincipal;
8
+ readonly roleArn: string;
9
+ /**
10
+ * What else the message should say about why the request was denied, in the
11
+ * sense SimIamAccessDenied uses it.
12
+ */
13
+ readonly reason?: string | undefined;
14
+ }
15
+ interface SimIamPassRoleAuthorizerProperties {
16
+ readonly iam: SimIamInterServiceAuthZ;
17
+ /**
18
+ * The service principal the Role is being handed to, such as
19
+ * `lambda.amazonaws.com`. This is what `iam:PassedToService` carries.
20
+ */
21
+ readonly passedToService: string;
22
+ /**
23
+ * The error a refusal is reported as.
24
+ *
25
+ * Defaults to the shared IAM AccessDenied. A service reporting its own
26
+ * denials as its own error type supplies one, so a caller catching that type
27
+ * catches a refused Role along with everything else the service refused
28
+ * them.
29
+ */
30
+ readonly denied?: (denial: SimIamPassRoleDenial) => Error;
31
+ }
32
+ /**
33
+ * Authorizes handing a Role to a simulated service.
34
+ *
35
+ * A service given a Role to keep uses it under its own identity later, so
36
+ * being allowed to create the thing settles only half of the request. AWS asks
37
+ * separately whether the caller may hand that Role over, and the resource of
38
+ * that question is the Role. A scoped deployment role refused `iam:PassRole` is
39
+ * one of the commoner ways a real deployment stops.
40
+ *
41
+ * The Role need not exist. Real IAM decides a request before the service
42
+ * handles it, so a caller with no permission to pass a Role is refused whether
43
+ * or not the ARN names one.
44
+ */
45
+ export declare class SimIamPassRoleAuthorizer {
46
+ private readonly iam;
47
+ private readonly passedToService;
48
+ private readonly denied;
49
+ constructor(properties: SimIamPassRoleAuthorizerProperties);
50
+ /**
51
+ * Ensure the caller may hand this Role to the service.
52
+ *
53
+ * A request naming no Role passes nothing and is left alone. That covers an
54
+ * optional Role, such as the one an update request omits to keep the Role
55
+ * already in place, and saves each call site repeating the check.
56
+ */
57
+ authorize(roleArn: string | undefined, caller?: SimAwsCaller): void;
58
+ /**
59
+ * Ensure the caller may hand every one of these Roles to the service.
60
+ *
61
+ * A Firehose delivery stream carrying a Role for its destination beside one
62
+ * for its source is what this is for. Each Role is its own question, and the
63
+ * first refusal is the one reported.
64
+ */
65
+ authorizeAll(roleArns: readonly (string | undefined)[], caller?: SimAwsCaller): void;
66
+ }
67
+ /**
68
+ * The message a service reports a refused Role with, in AWS's wording.
69
+ *
70
+ * A service reporting denials as its own error type builds its message from
71
+ * this, so a refused Role reads the same however it is reported.
72
+ */
73
+ export declare function simIamPassRoleDenialMessage(denial: SimIamPassRoleDenial): string;
74
+ export {};
@@ -0,0 +1,92 @@
1
+ import { SimIamCallerIdentifier } from "../../error/sim-iam-caller-identifier.js";
2
+ import { SimIamAccessDenied } from "../../error/sim-iam.error.js";
3
+ /**
4
+ * The IAM action a caller handing a Role to a service is authorized for.
5
+ */
6
+ const passRoleAction = "iam:PassRole";
7
+ /**
8
+ * The condition key naming the service the Role is being handed to.
9
+ */
10
+ const passedToServiceKey = "iam:PassedToService";
11
+ /**
12
+ * Authorizes handing a Role to a simulated service.
13
+ *
14
+ * A service given a Role to keep uses it under its own identity later, so
15
+ * being allowed to create the thing settles only half of the request. AWS asks
16
+ * separately whether the caller may hand that Role over, and the resource of
17
+ * that question is the Role. A scoped deployment role refused `iam:PassRole` is
18
+ * one of the commoner ways a real deployment stops.
19
+ *
20
+ * The Role need not exist. Real IAM decides a request before the service
21
+ * handles it, so a caller with no permission to pass a Role is refused whether
22
+ * or not the ARN names one.
23
+ */
24
+ export class SimIamPassRoleAuthorizer {
25
+ iam;
26
+ passedToService;
27
+ denied;
28
+ constructor(properties) {
29
+ this.iam = properties.iam;
30
+ this.passedToService = properties.passedToService;
31
+ this.denied = properties.denied ?? accessDenied;
32
+ }
33
+ /**
34
+ * Ensure the caller may hand this Role to the service.
35
+ *
36
+ * A request naming no Role passes nothing and is left alone. That covers an
37
+ * optional Role, such as the one an update request omits to keep the Role
38
+ * already in place, and saves each call site repeating the check.
39
+ */
40
+ authorize(roleArn, caller) {
41
+ if (roleArn === undefined) {
42
+ return;
43
+ }
44
+ const decision = this.iam.authorize({
45
+ action: passRoleAction,
46
+ resource: roleArn,
47
+ conditionContext: { [passedToServiceKey]: this.passedToService },
48
+ caller,
49
+ });
50
+ if (decision.isDenied) {
51
+ throw this.denied({
52
+ principal: decision.caller.principal,
53
+ roleArn,
54
+ reason: decision.denialReason,
55
+ });
56
+ }
57
+ }
58
+ /**
59
+ * Ensure the caller may hand every one of these Roles to the service.
60
+ *
61
+ * A Firehose delivery stream carrying a Role for its destination beside one
62
+ * for its source is what this is for. Each Role is its own question, and the
63
+ * first refusal is the one reported.
64
+ */
65
+ authorizeAll(roleArns, caller) {
66
+ for (const roleArn of roleArns) {
67
+ this.authorize(roleArn, caller);
68
+ }
69
+ }
70
+ }
71
+ /**
72
+ * Report a refused Role as the shared IAM AccessDenied.
73
+ */
74
+ function accessDenied(denial) {
75
+ return new SimIamAccessDenied({
76
+ principal: denial.principal,
77
+ reason: denial.reason,
78
+ action: passRoleAction,
79
+ resource: denial.roleArn,
80
+ });
81
+ }
82
+ /**
83
+ * The message a service reports a refused Role with, in AWS's wording.
84
+ *
85
+ * A service reporting denials as its own error type builds its message from
86
+ * this, so a refused Role reads the same however it is reported.
87
+ */
88
+ export function simIamPassRoleDenialMessage(denial) {
89
+ const identifier = new SimIamCallerIdentifier().format(denial.principal);
90
+ return (`User: ${identifier} is not authorized to perform: ${passRoleAction} on ` +
91
+ `resource: ${denial.roleArn}`);
92
+ }
@@ -2,11 +2,12 @@ import type { SimAwsAccountId } from "../../aws/sim-aws-account.js";
2
2
  import type { SimArn } from "../../aws/arn.js";
3
3
  import type { SimAwsCredentialIdentityResolver } from "../../aws/caller/sim-aws-caller-resolver.js";
4
4
  import type { SimAwsDefaultCaller, SimAwsPrincipal } from "../../aws/caller/sim-aws-caller.js";
5
+ import type { SimAwsAmbientCaller } from "../../aws/caller/sim-aws-ambient-caller.js";
5
6
  import type { SimIamManagedPolicy } from "../policy/sim-iam-policy.js";
6
7
  import type { SimIamRole, SimIamRoleName } from "../role/sim-iam-role.js";
7
8
  import type { SimIamUser, SimIamUsername } from "../user/sim-iam-user.js";
8
9
  import type { SimIamAccountResolver } from "../registry/sim-iam-account-resolver.js";
9
- import type { SimIamAuthorizationInput } from "./context/sim-iam-auth-z-context-builder.js";
10
+ import type { SimIamAuthorizationInput } from "./context/sim-iam-auth-z-input.js";
10
11
  import type { SimIamAuthZPolicySource } from "./context/sim-iam-auth-z-context.js";
11
12
  import type { SimIamAccountIdentityPolicies } from "./identity/sim-iam-account-identity-policies.js";
12
13
  import type { SimIamPolicyDecision } from "./sim-iam-decision.js";
@@ -23,6 +24,13 @@ interface SimIamAccountAuthZProperties {
23
24
  * Left out, such a request is decided as this Account's root principal.
24
25
  */
25
26
  readonly defaultCaller?: SimAwsDefaultCaller | undefined;
27
+ /**
28
+ * Where a request naming no caller looks before the default.
29
+ *
30
+ * A run-as block says who is making the requests inside it, which outranks
31
+ * what the simulation holds for its unattributed requests generally.
32
+ */
33
+ readonly ambientCaller?: SimAwsAmbientCaller | undefined;
26
34
  /**
27
35
  * Resolves other Accounts' IAM in the same simulation.
28
36
  *
@@ -43,10 +51,11 @@ interface SimIamAccountAuthZProperties {
43
51
  * Evaluates IAM authorization attempts against one simulated Account's IAM
44
52
  * state.
45
53
  *
46
- * If the caller is omitted, authorization defaults to the simulation's default
47
- * caller, and to the root principal of the owning sim Account where the
48
- * simulation has none. An explicit anonymous caller suppresses both and is
49
- * evaluated without identity policies.
54
+ * If the caller is omitted, authorization defaults to the ambient caller of the
55
+ * run-as block the request is inside, then to the simulation's default caller,
56
+ * and to the root principal of the owning sim Account where there is neither.
57
+ * An explicit anonymous caller suppresses all three and is evaluated without
58
+ * identity policies.
50
59
  */
51
60
  export declare class SimIamAccountAuthZ implements SimIamAccountIdentityPolicies {
52
61
  private readonly properties;
@@ -3,10 +3,11 @@ import { SimIamAuthorizer } from "./sim-iam-authorizer.js";
3
3
  * Evaluates IAM authorization attempts against one simulated Account's IAM
4
4
  * state.
5
5
  *
6
- * If the caller is omitted, authorization defaults to the simulation's default
7
- * caller, and to the root principal of the owning sim Account where the
8
- * simulation has none. An explicit anonymous caller suppresses both and is
9
- * evaluated without identity policies.
6
+ * If the caller is omitted, authorization defaults to the ambient caller of the
7
+ * run-as block the request is inside, then to the simulation's default caller,
8
+ * and to the root principal of the owning sim Account where there is neither.
9
+ * An explicit anonymous caller suppresses all three and is evaluated without
10
+ * identity policies.
10
11
  */
11
12
  export class SimIamAccountAuthZ {
12
13
  properties;
@@ -40,6 +41,7 @@ export class SimIamAccountAuthZ {
40
41
  users: this.properties.users,
41
42
  credentialIdentityResolver: this.properties.credentialIdentityResolver,
42
43
  defaultCaller: this.properties.defaultCaller,
44
+ ambientCaller: this.properties.ambientCaller,
43
45
  iamResolver: this.properties.iamResolver,
44
46
  scpResolver: this.properties.scpResolver,
45
47
  });
@@ -1,11 +1,12 @@
1
1
  import type { SimArn } from "../../aws/arn.js";
2
2
  import type { SimIamPolicy } from "../policy/sim-iam-policy.js";
3
3
  import type { SimIamRole, SimIamRoleName } from "../role/sim-iam-role.js";
4
- import { type SimIamAuthorizationInput } from "./context/sim-iam-auth-z-context-builder.js";
4
+ import type { SimIamAuthorizationInput } from "./context/sim-iam-auth-z-input.js";
5
5
  import { SimIamPolicyDecision } from "./sim-iam-decision.js";
6
6
  import type { SimAwsDefaultCaller, SimAwsPrincipal } from "../../aws/caller/sim-aws-caller.js";
7
7
  import type { SimIamUser, SimIamUsername } from "../user/sim-iam-user.js";
8
8
  import type { SimAwsCredentialIdentityResolver } from "../../aws/caller/sim-aws-caller-resolver.js";
9
+ import type { SimAwsAmbientCaller } from "../../aws/caller/sim-aws-ambient-caller.js";
9
10
  import type { SimAwsAccountId } from "../../aws/sim-aws-account.js";
10
11
  import type { SimIamAccountResolver } from "../registry/sim-iam-account-resolver.js";
11
12
  import type { SimIamAuthZPolicySource } from "./context/sim-iam-auth-z-context.js";
@@ -18,6 +19,7 @@ interface SimIamAuthorizerProperties {
18
19
  readonly users: ReadonlyMap<SimIamUsername, SimIamUser>;
19
20
  readonly credentialIdentityResolver: SimAwsCredentialIdentityResolver;
20
21
  readonly defaultCaller?: SimAwsDefaultCaller | undefined;
22
+ readonly ambientCaller?: SimAwsAmbientCaller | undefined;
21
23
  readonly iamResolver?: SimIamAccountResolver | undefined;
22
24
  readonly scpResolver?: SimIamServiceControlPolicyResolver | undefined;
23
25
  }
@@ -1,4 +1,4 @@
1
- import { SimIamAuthZContextBuilder, } from "./context/sim-iam-auth-z-context-builder.js";
1
+ import { SimIamAuthZContextBuilder } from "./context/sim-iam-auth-z-context-builder.js";
2
2
  import { SimIamPolicyDecision } from "./sim-iam-decision.js";
3
3
  /**
4
4
  * Facade for simulated IAM authorization decisions.
@@ -18,6 +18,7 @@ export class SimIamAuthorizer {
18
18
  users: properties.users,
19
19
  credentialIdentityResolver: properties.credentialIdentityResolver,
20
20
  defaultCaller: properties.defaultCaller,
21
+ ambientCaller: properties.ambientCaller,
21
22
  iamResolver: properties.iamResolver,
22
23
  scpResolver: properties.scpResolver,
23
24
  });
@@ -1,4 +1,4 @@
1
- import type { SimIamAuthorizationInput } from "./context/sim-iam-auth-z-context-builder.js";
1
+ import type { SimIamAuthorizationInput } from "./context/sim-iam-auth-z-input.js";
2
2
  import type { SimAwsResolvedCaller } from "../../aws/caller/sim-aws-caller-resolver.js";
3
3
  /**
4
4
  * The part of an IAM authorization decision needed by service integrations.
@@ -1,12 +1,48 @@
1
+ import { BoundedMemo } from "../../../util/memo/bounded-memo.js";
2
+ /**
3
+ * How many compiled patterns to keep, for each of the two case sensitivities.
4
+ *
5
+ * One realistic organization policy set produces fewer than a hundred distinct
6
+ * patterns, and every request evaluates the same ones again. A few thousand
7
+ * leaves room for many documents attached at once, and holds a few thousand
8
+ * small regular expressions at worst.
9
+ */
10
+ const compiledPatternLimit = 2000;
11
+ /*
12
+ * Wildcard patterns already turned into regular expressions, held in a store
13
+ * per case sensitivity so that a lookup needs no key built for it.
14
+ *
15
+ * A pattern's text and its case sensitivity decide the whole of what is
16
+ * compiled. An entry made while evaluating one simulation's policies is the
17
+ * entry another simulation would have made for itself. A compiled expression
18
+ * also carries nothing from one use to the next, because the flags below leave
19
+ * out "g" and "y", and `test` keeps a position only under those. These stores
20
+ * therefore last as long as the process does, and a `SimAws` that goes out of
21
+ * scope leaves them behind for the next one.
22
+ */
23
+ const caseSensitivePatterns = new BoundedMemo(compiledPatternLimit);
24
+ const caseInsensitivePatterns = new BoundedMemo(compiledPatternLimit);
1
25
  /**
2
26
  * Match an IAM-style wildcard pattern.
3
27
  *
4
28
  * "*" means zero or more characters and "?" means exactly one character.
5
29
  */
6
30
  export function simIamWildcardMatch(pattern, value, options) {
7
- return wildcardMatch(pattern, value, options);
31
+ return patternRegExp(pattern, options.caseSensitive).test(value);
8
32
  }
9
- function wildcardMatch(pattern, value, options) {
33
+ /**
34
+ * The regular expression a pattern compiles to, compiling it the first time it
35
+ * is asked for and reusing it afterwards.
36
+ */
37
+ function patternRegExp(pattern, caseSensitive) {
38
+ return caseSensitive
39
+ ? caseSensitivePatterns.getOrCreate(pattern, () => compilePattern(pattern, "u"))
40
+ : caseInsensitivePatterns.getOrCreate(pattern, () => compilePattern(pattern, "iu"));
41
+ }
42
+ /**
43
+ * Turn a wildcard pattern into the regular expression that matches it.
44
+ */
45
+ function compilePattern(pattern, flags) {
10
46
  const regexPattern = pattern
11
47
  .replaceAll(/[\\^$.*+?()[\]{}|]/gu, String.raw `\$&`)
12
48
  .replaceAll(String.raw `\*`, ".*")
@@ -17,6 +53,5 @@ function wildcardMatch(pattern, value, options) {
17
53
  * other regex characters are escaped above.
18
54
  */
19
55
  // oxlint-disable-next-line security/detect-non-literal-regexp
20
- const regExp = new RegExp(`^${regexPattern}$`, options.caseSensitive ? "u" : "iu");
21
- return regExp.test(value);
56
+ return new RegExp(`^${regexPattern}$`, flags);
22
57
  }
@@ -1,4 +1,5 @@
1
1
  import { SimCfnIamManagedPolicyAttacher } from "./sim-cfn-iam-managed-policy-attacher.js";
2
+ import { simCfnIamPolicyGeneratedName } from "../name/sim-cfn-iam-generated-name.js";
2
3
  import { assertDefined } from "../../../../util/type-guard/defined.js";
3
4
  /**
4
5
  * Creates simulated IAM Managed Policies from CloudFormation Resources.
@@ -35,7 +36,7 @@ export class SimCfnIamManagedPolicyCreator {
35
36
  managedPolicyName(resource, properties) {
36
37
  const managedPolicyName = properties["ManagedPolicyName"];
37
38
  if (managedPolicyName === undefined) {
38
- return resource.logicalId;
39
+ return simCfnIamPolicyGeneratedName(resource);
39
40
  }
40
41
  if (typeof managedPolicyName !== "string") {
41
42
  throw new TypeError(`Invalid AWS::IAM::ManagedPolicy ${resource.logicalId}: ManagedPolicyName must be a string`);
@@ -0,0 +1,16 @@
1
+ import type { SimCfnResource } from "../../../cloudformation/resource/sim-cfn-resource.js";
2
+ /**
3
+ * The name CloudFormation gives a Role or a User whose template does not name
4
+ * it.
5
+ *
6
+ * Sixty-four characters is short for a name made of a stack name and a logical
7
+ * ID, so `SimCfnGeneratedResourceName` usually has to trim one. The case is
8
+ * left alone, since IAM keeps a name as it was given, and every character a
9
+ * stack name or a logical ID is made of is one an IAM name allows.
10
+ */
11
+ export declare function simCfnIamPrincipalGeneratedName(resource: SimCfnResource): string;
12
+ /**
13
+ * The name CloudFormation gives a Managed Policy whose template does not name
14
+ * it, under the same rules as a Role's but with twice the room.
15
+ */
16
+ export declare function simCfnIamPolicyGeneratedName(resource: SimCfnResource): string;
@@ -0,0 +1,36 @@
1
+ import { SimCfnGeneratedResourceName } from "../../../cloudformation/resource/name/sim-cfn-generated-resource-name.js";
2
+ /**
3
+ * The longest name IAM accepts for a Role or a User. Both take the same
4
+ * length.
5
+ *
6
+ * https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_iam-quotas.html
7
+ */
8
+ const maximumPrincipalNameLength = 64;
9
+ /** The longest name IAM accepts for a Policy, twice what a Role takes. */
10
+ const maximumPolicyNameLength = 128;
11
+ /**
12
+ * The name CloudFormation gives a Role or a User whose template does not name
13
+ * it.
14
+ *
15
+ * Sixty-four characters is short for a name made of a stack name and a logical
16
+ * ID, so `SimCfnGeneratedResourceName` usually has to trim one. The case is
17
+ * left alone, since IAM keeps a name as it was given, and every character a
18
+ * stack name or a logical ID is made of is one an IAM name allows.
19
+ */
20
+ export function simCfnIamPrincipalGeneratedName(resource) {
21
+ return generatedName(resource, maximumPrincipalNameLength);
22
+ }
23
+ /**
24
+ * The name CloudFormation gives a Managed Policy whose template does not name
25
+ * it, under the same rules as a Role's but with twice the room.
26
+ */
27
+ export function simCfnIamPolicyGeneratedName(resource) {
28
+ return generatedName(resource, maximumPolicyNameLength);
29
+ }
30
+ function generatedName(resource, maximumLength) {
31
+ return new SimCfnGeneratedResourceName({
32
+ stackName: resource.stackName,
33
+ logicalId: resource.logicalId,
34
+ maximumLength,
35
+ }).value;
36
+ }
@@ -1,3 +1,5 @@
1
+ import { simCfnIamPrincipalGeneratedName } from "../name/sim-cfn-iam-generated-name.js";
2
+ import { simCfnIamOptionalString } from "../sim-cfn-iam-optional-string.js";
1
3
  import { SimCfnIamPoliciesParser, } from "../sim-cfn-iam-policies-parser.js";
2
4
  /**
3
5
  * Parses and validates AWS::IAM::Role CloudFormation properties into the shape
@@ -16,7 +18,7 @@ export class SimCfnIamRolePropertiesParser {
16
18
  parse(resource, properties) {
17
19
  return {
18
20
  roleName: this.optionalString(resource, properties["RoleName"], "RoleName") ??
19
- resource.logicalId,
21
+ simCfnIamPrincipalGeneratedName(resource),
20
22
  path: this.optionalString(resource, properties["Path"], "Path"),
21
23
  description: this.optionalString(resource, properties["Description"], "Description"),
22
24
  assumeRolePolicyDocument: this.jsonObject(resource, properties["AssumeRolePolicyDocument"], "AssumeRolePolicyDocument"),
@@ -25,13 +27,12 @@ export class SimCfnIamRolePropertiesParser {
25
27
  };
26
28
  }
27
29
  optionalString(resource, value, label) {
28
- if (value === undefined) {
29
- return undefined;
30
- }
31
- if (typeof value !== "string") {
32
- throw new TypeError(`Invalid AWS::IAM::Role ${resource.logicalId}: ${label} must be a string`);
33
- }
34
- return value;
30
+ return simCfnIamOptionalString({
31
+ resourceType: "AWS::IAM::Role",
32
+ resource,
33
+ value,
34
+ label,
35
+ });
35
36
  }
36
37
  jsonObject(resource, value, label) {
37
38
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
@@ -0,0 +1,17 @@
1
+ import type { SimCfnResource } from "../../cloudformation/resource/sim-cfn-resource.js";
2
+ import type { SimCfnTemplateValueRecord } from "../../cloudformation/template/value/sim-cfn-template-value.js";
3
+ interface SimCfnIamOptionalStringProperties {
4
+ readonly resourceType: string;
5
+ readonly resource: SimCfnResource;
6
+ readonly value: SimCfnTemplateValueRecord[string] | undefined;
7
+ readonly label: string;
8
+ }
9
+ /**
10
+ * Read a string property an IAM Resource may leave out.
11
+ *
12
+ * A Role and a User read most of their own properties this way, and both
13
+ * refuse a non-string the same way, naming the Resource type the template
14
+ * declared.
15
+ */
16
+ export declare function simCfnIamOptionalString(properties: SimCfnIamOptionalStringProperties): string | undefined;
17
+ export {};
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Read a string property an IAM Resource may leave out.
3
+ *
4
+ * A Role and a User read most of their own properties this way, and both
5
+ * refuse a non-string the same way, naming the Resource type the template
6
+ * declared.
7
+ */
8
+ export function simCfnIamOptionalString(properties) {
9
+ const { resourceType, resource, value, label } = properties;
10
+ if (value === undefined) {
11
+ return undefined;
12
+ }
13
+ if (typeof value !== "string") {
14
+ throw new TypeError(`Invalid ${resourceType} ${resource.logicalId}: ${label} must be a string`);
15
+ }
16
+ return value;
17
+ }
@@ -1,3 +1,5 @@
1
+ import { simCfnIamPrincipalGeneratedName } from "../name/sim-cfn-iam-generated-name.js";
2
+ import { simCfnIamOptionalString } from "../sim-cfn-iam-optional-string.js";
1
3
  import { SimCfnIamPoliciesParser, } from "../sim-cfn-iam-policies-parser.js";
2
4
  const resourceType = "AWS::IAM::User";
3
5
  /**
@@ -18,7 +20,7 @@ export class SimCfnIamUserPropertiesParser {
18
20
  this.rejectGroups(resource, properties);
19
21
  return {
20
22
  userName: this.optionalString(resource, properties["UserName"], "UserName") ??
21
- resource.logicalId,
23
+ simCfnIamPrincipalGeneratedName(resource),
22
24
  path: this.optionalString(resource, properties["Path"], "Path"),
23
25
  inlinePolicies: this.policiesParser.inlinePolicies(resource, properties),
24
26
  managedPolicyArns: this.policiesParser.managedPolicyArns(resource, properties),
@@ -68,12 +70,6 @@ export class SimCfnIamUserPropertiesParser {
68
70
  };
69
71
  }
70
72
  optionalString(resource, value, label) {
71
- if (value === undefined) {
72
- return undefined;
73
- }
74
- if (typeof value !== "string") {
75
- throw new TypeError(`Invalid ${resourceType} ${resource.logicalId}: ${label} must be a string`);
76
- }
77
- return value;
73
+ return simCfnIamOptionalString({ resourceType, resource, value, label });
78
74
  }
79
75
  }
@@ -1,6 +1,7 @@
1
1
  import { makeSimPolicyArn } from "../../../policy/sim-iam-policy-arn.js";
2
2
  import { normalisePolicyPath } from "../../../policy/sim-iam-policy-path.js";
3
3
  import { SimIamPolicyDocumentValidator } from "../../../validate/sim-iam-policy-document-validator.js";
4
+ import { assertSimIamManagedPolicyWithinSizeLimit } from "../../../validate/size/sim-iam-policy-document-size.js";
4
5
  /**
5
6
  * Validates CreatePolicy command input and resolves it into the policy's
6
7
  * identity (name, normalised path, and ARN).
@@ -26,6 +27,7 @@ export class CreatePolicyInputResolver {
26
27
  if (policyName === undefined || policyName.length === 0) {
27
28
  throw new Error("PolicyName is required");
28
29
  }
30
+ assertSimIamManagedPolicyWithinSizeLimit(command.input.PolicyDocument);
29
31
  this.policyDocValidator.validateOptional(command.input.PolicyDocument, {
30
32
  attachedTo: "Policy",
31
33
  name: policyName,
@@ -1,6 +1,7 @@
1
1
  import { BackgroundTasks, } from "../../../../../util/background/background.js";
2
2
  import { SimIamNoSuchEntity } from "../../../error/sim-iam.error.js";
3
3
  import { SimIamPolicyDocumentValidator } from "../../../validate/sim-iam-policy-document-validator.js";
4
+ import { assertSimIamInlinePolicyWithinSizeLimit } from "../../../validate/size/sim-iam-policy-document-size.js";
4
5
  /**
5
6
  * IAM PutRolePolicyCommand handler.
6
7
  *
@@ -33,6 +34,10 @@ export class PutRolePolicyCommandHandler {
33
34
  throw new Error("PolicyName is required");
34
35
  }
35
36
  const policyDocument = command.input.PolicyDocument;
37
+ assertSimIamInlinePolicyWithinSizeLimit(policyDocument, {
38
+ kind: "role",
39
+ name: roleName,
40
+ });
36
41
  this.policyDocValidator.validateRequired(policyDocument, {
37
42
  attachedTo: "Role",
38
43
  name: roleName,
@@ -1,6 +1,7 @@
1
1
  import { BackgroundTasks, } from "../../../../../util/background/background.js";
2
2
  import { SimIamNoSuchEntity } from "../../../error/sim-iam.error.js";
3
3
  import { SimIamPolicyDocumentValidator } from "../../../validate/sim-iam-policy-document-validator.js";
4
+ import { assertSimIamInlinePolicyWithinSizeLimit } from "../../../validate/size/sim-iam-policy-document-size.js";
4
5
  import { assertDefined } from "../../../../../util/type-guard/defined.js";
5
6
  /**
6
7
  * IAM PutUserPolicyCommand handler.
@@ -29,6 +30,10 @@ export class PutUserPolicyCommandHandler {
29
30
  const policyName = command.input.PolicyName;
30
31
  assertDefined(policyName, "PutUserPolicyCommand.input.PolicyName");
31
32
  const policyDocument = command.input.PolicyDocument;
33
+ assertSimIamInlinePolicyWithinSizeLimit(policyDocument, {
34
+ kind: "user",
35
+ name: username,
36
+ });
32
37
  this.policyDocValidator.validateRequired(policyDocument, {
33
38
  attachedTo: "User",
34
39
  name: username,
@@ -4,6 +4,7 @@ import { SimIamEntityAlreadyExists } from "../../../error/sim-iam.error.js";
4
4
  import { normaliseRolePath } from "../../../role/sim-iam-role-path.js";
5
5
  import { makeSimRoleArn } from "../../../role/arn/sim-iam-role-arn.js";
6
6
  import { SimIamTrustPolicyDocumentValidator } from "../../../validate/trust/sim-iam-trust-policy-document-validator.js";
7
+ import { assertSimIamTrustPolicyWithinSizeLimit } from "../../../validate/size/sim-iam-policy-document-size.js";
7
8
  /**
8
9
  * IAM CreateRoleCommand handler.
9
10
  *
@@ -34,7 +35,9 @@ export class CreateRoleCommandHandler {
34
35
  if (roleName === undefined || roleName.length === 0) {
35
36
  throw new Error("RoleName is required");
36
37
  }
37
- this.trustPolicyValidator.validateRequired(command.input.AssumeRolePolicyDocument);
38
+ const trustPolicyDocument = command.input.AssumeRolePolicyDocument;
39
+ assertSimIamTrustPolicyWithinSizeLimit(trustPolicyDocument, roleName);
40
+ this.trustPolicyValidator.validateRequired(trustPolicyDocument);
38
41
  const path = normaliseRolePath(command.input.Path);
39
42
  const arn = makeSimRoleArn({
40
43
  accountId: this.accountId,
@@ -84,3 +84,14 @@ export declare class SimIamMalformedPolicyDocument extends SimIamError {
84
84
  readonly name = "MalformedPolicyDocument";
85
85
  constructor(message: string);
86
86
  }
87
+ /**
88
+ * Simulated IAM LimitExceeded error.
89
+ *
90
+ * IAM answers a request that would take the account past one of its quotas
91
+ * with this, such as a policy document longer than the limit for where it is
92
+ * going.
93
+ */
94
+ export declare class SimIamLimitExceeded extends SimIamError {
95
+ readonly name = "LimitExceeded";
96
+ constructor(message: string);
97
+ }
@@ -83,3 +83,16 @@ export class SimIamMalformedPolicyDocument extends SimIamError {
83
83
  super(message, { httpStatusCode: 400 });
84
84
  }
85
85
  }
86
+ /**
87
+ * Simulated IAM LimitExceeded error.
88
+ *
89
+ * IAM answers a request that would take the account past one of its quotas
90
+ * with this, such as a policy document longer than the limit for where it is
91
+ * going.
92
+ */
93
+ export class SimIamLimitExceeded extends SimIamError {
94
+ name = "LimitExceeded";
95
+ constructor(message) {
96
+ super(message, { httpStatusCode: 409 });
97
+ }
98
+ }
@@ -2,6 +2,7 @@ export { SimIam } from "./sim-iam.js";
2
2
  export type { SimIamConditionValue, SimIamPolicyDocument, SimIamPolicyDocumentCondition, SimIamPolicyDocumentPrincipal, SimIamPolicyDocumentStatement, } from "./policy/sim-iam-policy.js";
3
3
  export { SimIamAccessDenied, SimIamError } from "./error/sim-iam.error.js";
4
4
  export type { SimIamRequestOptions } from "./command/sim-iam-request-options.js";
5
+ export type { SimIamDeployRoleInput, SimIamDeployRolePolicy, } from "./role/sim-iam-deploy-role.js";
5
6
  export type { SimIamCredentialIdentity } from "./credential/sim-aws-credentials.js";
6
7
  export { SimIamCredentialScopeMismatch, SimIamExpiredToken, SimIamIncompleteSignature, SimIamInvalidClientTokenId, SimIamSignatureDoesNotMatch, SimIamSigV4Error, type SimIamSigV4ErrorCode, } from "./sigv4/error/sim-iam-sigv4.error.js";
7
8
  export type { SimIamSigV4ExpectedScope } from "./sigv4/sim-iam-sigv4-expected-scope.js";
@@ -0,0 +1,18 @@
1
+ import type { SimIamPolicyDocument } from "./sim-iam-policy.js";
2
+ /**
3
+ * Build a policy document IAM would measure at exactly this many characters.
4
+ *
5
+ * A test about IAM's character limits has a size to state rather than a
6
+ * statement. Padding an ARN leaves a document IAM would otherwise take, so the
7
+ * size is the only thing the command is being asked about. The size is the one
8
+ * IAM counts, of the document written compactly, and a caller is free to
9
+ * indent what it hands over.
10
+ */
11
+ export declare function simIamPolicyDocumentOfSize(characters: number): SimIamPolicyDocument;
12
+ /**
13
+ * Build a Role trust policy document of exactly this many characters.
14
+ *
15
+ * A trust policy carries a Principal and no Resource, so it is padded through
16
+ * a Sid instead.
17
+ */
18
+ export declare function simIamTrustPolicyDocumentOfSize(characters: number): SimIamPolicyDocument;