@kensio/yulin 1.21.2 → 1.21.4

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 (634) hide show
  1. package/dist/service/athena/engine/sim-athena-column-types.d.ts +2 -0
  2. package/dist/service/athena/engine/sim-athena-column-types.js +4 -0
  3. package/dist/service/athena/engine/sim-athena-delimited-format.d.ts +7 -0
  4. package/dist/service/athena/engine/sim-athena-delimited-format.js +51 -0
  5. package/dist/service/athena/engine/sim-athena-engine-result.js +5 -0
  6. package/dist/service/athena/engine/sim-athena-engine-run.d.ts +22 -2
  7. package/dist/service/athena/engine/sim-athena-engine-run.js +21 -31
  8. package/dist/service/athena/engine/sim-athena-loaded-tables.d.ts +10 -0
  9. package/dist/service/athena/engine/sim-athena-loaded-tables.js +35 -0
  10. package/dist/service/athena/engine/sim-athena-parquet-module.d.ts +25 -0
  11. package/dist/service/athena/engine/sim-athena-parquet-module.js +39 -0
  12. package/dist/service/athena/engine/sim-athena-parquet-records.d.ts +13 -0
  13. package/dist/service/athena/engine/sim-athena-parquet-records.js +57 -0
  14. package/dist/service/athena/engine/sim-athena-query-engine.d.ts +23 -5
  15. package/dist/service/athena/engine/sim-athena-query-engine.js +31 -10
  16. package/dist/service/athena/engine/sim-athena-record-reader.d.ts +12 -6
  17. package/dist/service/athena/engine/sim-athena-record-reader.js +28 -53
  18. package/dist/service/athena/engine/sim-athena-sql-translation.d.ts +15 -9
  19. package/dist/service/athena/engine/sim-athena-sql-translation.js +25 -13
  20. package/dist/service/athena/engine/sim-athena-sqlite-values.d.ts +5 -0
  21. package/dist/service/athena/engine/sim-athena-sqlite-values.js +24 -1
  22. package/dist/service/athena/engine/sim-athena-table-objects.d.ts +7 -2
  23. package/dist/service/athena/engine/sim-athena-table-objects.js +8 -4
  24. package/dist/service/athena/engine/sim-athena-table-rows.js +4 -3
  25. package/dist/service/athena/engine/sim-athena-turn-down.d.ts +26 -0
  26. package/dist/service/athena/engine/sim-athena-turn-down.js +43 -0
  27. package/dist/service/athena/execution/sim-athena-query-completion.d.ts +3 -1
  28. package/dist/service/athena/execution/sim-athena-query-completion.js +7 -1
  29. package/dist/service/athena/index.d.ts +1 -1
  30. package/dist/service/athena/index.js +1 -1
  31. package/dist/service/athena/result/sim-athena-query-answer.d.ts +12 -0
  32. package/dist/service/athena/result/sim-athena-query-answer.js +26 -4
  33. package/dist/service/athena/sim-athena-answered-query.fixture.d.ts +2 -0
  34. package/dist/service/athena/sim-athena-answered-query.fixture.js +1 -0
  35. package/dist/service/athena/sim-athena-engine.fixture.d.ts +20 -0
  36. package/dist/service/athena/sim-athena-engine.fixture.js +34 -0
  37. package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.d.ts +23 -0
  38. package/dist/service/cloudformation/authorize/sim-cloudformation-authorization.js +37 -0
  39. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.d.ts +2 -0
  40. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-copier.js +1 -0
  41. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.d.ts +7 -0
  42. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-file.js +13 -1
  43. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.d.ts +6 -0
  44. package/dist/service/cloudformation/cdk/s3/bucket-deployment/copy/sim-cdk-bucket-deploy-pruner.js +7 -1
  45. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.d.ts +50 -0
  46. package/dist/service/cloudformation/cdk/s3/bucket-deployment/notify/sim-cdk-bucket-deploy-notifier.js +71 -0
  47. package/dist/service/cloudformation/cdk/s3/bucket-deployment/sim-cdk-bucket-deployment.js +6 -1
  48. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.d.ts +5 -0
  49. package/dist/service/cloudformation/cdk/s3/bucket-deployment/source/sim-cdk-bucket-deploy-source.js +7 -0
  50. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.d.ts +9 -0
  51. package/dist/service/cloudformation/changeset/sim-cfn-change-set-arn.js +12 -0
  52. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.d.ts +42 -0
  53. package/dist/service/cloudformation/changeset/sim-cfn-change-set-changes.js +69 -0
  54. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.d.ts +62 -0
  55. package/dist/service/cloudformation/changeset/sim-cfn-change-set-commands.js +89 -0
  56. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.d.ts +31 -0
  57. package/dist/service/cloudformation/changeset/sim-cfn-change-set-execution.js +59 -0
  58. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.d.ts +21 -0
  59. package/dist/service/cloudformation/changeset/sim-cfn-change-set-failure.js +19 -0
  60. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.d.ts +17 -0
  61. package/dist/service/cloudformation/changeset/sim-cfn-change-set-input.js +18 -0
  62. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.d.ts +18 -0
  63. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack-id.js +13 -0
  64. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.d.ts +45 -0
  65. package/dist/service/cloudformation/changeset/sim-cfn-change-set-stack.js +52 -0
  66. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.d.ts +12 -0
  67. package/dist/service/cloudformation/changeset/sim-cfn-change-set-type.js +21 -0
  68. package/dist/service/cloudformation/changeset/sim-cfn-change-set.d.ts +54 -0
  69. package/dist/service/cloudformation/changeset/sim-cfn-change-set.js +49 -0
  70. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.d.ts +35 -0
  71. package/dist/service/cloudformation/changeset/sim-cfn-change-set.type.js +1 -0
  72. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.d.ts +53 -0
  73. package/dist/service/cloudformation/changeset/sim-cfn-change-sets.js +83 -0
  74. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.d.ts +32 -0
  75. package/dist/service/cloudformation/command/create-change-set/create-change-set.command.js +1 -0
  76. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.d.ts +38 -0
  77. package/dist/service/cloudformation/command/create-change-set/create-change-set.handler.js +80 -0
  78. package/dist/service/cloudformation/command/create-stack/create-stack.handler.js +12 -12
  79. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.d.ts +22 -0
  80. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.command.js +1 -0
  81. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.d.ts +27 -0
  82. package/dist/service/cloudformation/command/delete-change-set/delete-change-set.handler.js +35 -0
  83. package/dist/service/cloudformation/command/delete-stack/delete-stack.command.d.ts +6 -0
  84. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.d.ts +11 -0
  85. package/dist/service/cloudformation/command/delete-stack/delete-stack.handler.js +15 -1
  86. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.d.ts +48 -0
  87. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.command.js +1 -0
  88. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.d.ts +23 -0
  89. package/dist/service/cloudformation/command/describe-change-set/describe-change-set.handler.js +52 -0
  90. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.d.ts +3 -0
  91. package/dist/service/cloudformation/command/describe-stacks/describe-stacks.handler.js +8 -4
  92. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.d.ts +18 -6
  93. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-described-stacks.js +22 -7
  94. package/dist/service/cloudformation/command/describe-stacks/sim-cfn-stack-describer.js +1 -1
  95. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.d.ts +25 -0
  96. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.command.js +1 -0
  97. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.d.ts +31 -0
  98. package/dist/service/cloudformation/command/execute-change-set/execute-change-set.handler.js +37 -0
  99. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.d.ts +36 -0
  100. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.command.js +1 -0
  101. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.d.ts +26 -0
  102. package/dist/service/cloudformation/command/list-change-sets/list-change-sets.handler.js +39 -0
  103. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.d.ts +31 -0
  104. package/dist/service/cloudformation/command/update-stack/update-stack-previous-values.js +52 -0
  105. package/dist/service/cloudformation/command/update-stack/update-stack-template.d.ts +22 -0
  106. package/dist/service/cloudformation/command/update-stack/update-stack-template.js +34 -0
  107. package/dist/service/cloudformation/command/update-stack/update-stack.command.d.ts +17 -1
  108. package/dist/service/cloudformation/command/update-stack/update-stack.handler.js +8 -15
  109. package/dist/service/cloudformation/error/sim-cloudformation.error.d.ts +21 -0
  110. package/dist/service/cloudformation/error/sim-cloudformation.error.js +25 -0
  111. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.d.ts +7 -0
  112. package/dist/service/cloudformation/parameters/pseudo/sim-cfn-pseudo-parameters.js +3 -1
  113. package/dist/service/cloudformation/parameters/sim-cfn-parameters.d.ts +9 -0
  114. package/dist/service/cloudformation/parameters/sim-cfn-parameters.js +12 -0
  115. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.d.ts +4 -0
  116. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-delete-operation.js +10 -0
  117. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.d.ts +44 -0
  118. package/dist/service/cloudformation/resource/delete/sim-cfn-resource-retention.js +33 -0
  119. package/dist/service/cloudformation/resource/factory/sim-cfn-resource-factory.type.d.ts +9 -0
  120. package/dist/service/cloudformation/resource/sim-cfn-resource-record.d.ts +15 -0
  121. package/dist/service/cloudformation/resource/sim-cfn-resource-record.js +21 -1
  122. package/dist/service/cloudformation/resource/sim-cfn-resource.d.ts +9 -7
  123. package/dist/service/cloudformation/resource/sim-cfn-resource.js +11 -11
  124. package/dist/service/cloudformation/resource/sim-cfn-resource.type.d.ts +19 -0
  125. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.d.ts +3 -3
  126. package/dist/service/cloudformation/resource/state/sim-cfn-resource-deletion-state.js +3 -3
  127. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.d.ts +4 -0
  128. package/dist/service/cloudformation/resource/template/sim-cfn-resource-template-reader.js +9 -0
  129. package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.d.ts +26 -0
  130. package/dist/service/cloudformation/resource/update/sim-cfn-resource-update-validator.js +55 -0
  131. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.d.ts +37 -0
  132. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.js +77 -0
  133. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.d.ts +51 -0
  134. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-auth.types.js +10 -0
  135. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.d.ts +11 -0
  136. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-authorizers.js +34 -0
  137. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.d.ts +21 -0
  138. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-api-identity.js +31 -0
  139. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.d.ts +14 -0
  140. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-definition.js +1 -0
  141. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.d.ts +26 -0
  142. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-authorizer-function.js +58 -0
  143. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.d.ts +18 -0
  144. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-event-authorization.js +89 -0
  145. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.d.ts +15 -0
  146. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-api-auth.js +65 -0
  147. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.d.ts +13 -0
  148. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-jwt-authorizer.js +60 -0
  149. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.d.ts +13 -0
  150. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-http-lambda-authorizer.js +50 -0
  151. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.d.ts +13 -0
  152. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-prefixes.js +30 -0
  153. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.d.ts +26 -0
  154. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-identity-source.js +44 -0
  155. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.d.ts +15 -0
  156. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-api-auth.js +59 -0
  157. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.d.ts +11 -0
  158. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-cognito-authorizer.js +43 -0
  159. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.d.ts +15 -0
  160. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-rest-lambda-authorizer.js +67 -0
  161. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.d.ts +26 -0
  162. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-template-api-auth.js +61 -0
  163. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.d.ts +18 -0
  164. package/dist/service/cloudformation/sam/api/auth/sim-cfn-sam-unsupported-auth.js +59 -0
  165. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api-template.factory.js +1 -1
  166. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.d.ts +4 -0
  167. package/dist/service/cloudformation/sam/api/sim-cfn-sam-http-api.js +12 -5
  168. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api-template.factory.js +1 -1
  169. package/dist/service/cloudformation/sam/api/sim-cfn-sam-rest-api.js +7 -3
  170. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-api-event.js +7 -3
  171. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.d.ts +26 -0
  172. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-cognito-event.js +88 -0
  173. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.d.ts +12 -0
  174. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-declared-event.js +1 -0
  175. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-function-events.js +8 -5
  176. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-event.js +23 -1
  177. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.d.ts +9 -2
  178. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-http-api-route.js +5 -3
  179. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.d.ts +6 -1
  180. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-implicit-http-api.js +7 -1
  181. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.d.ts +19 -0
  182. package/dist/service/cloudformation/sam/function/event/sim-cfn-sam-triggered-user-pool.js +69 -0
  183. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.d.ts +5 -0
  184. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-template.factory.js +3 -1
  185. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.d.ts +8 -0
  186. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-type.js +8 -0
  187. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function-url.js +1 -4
  188. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.d.ts +6 -4
  189. package/dist/service/cloudformation/sam/function/sim-cfn-sam-function.js +2 -4
  190. package/dist/service/cloudformation/sam/sim-cfn-sam-error.d.ts +31 -0
  191. package/dist/service/cloudformation/sam/sim-cfn-sam-error.js +17 -0
  192. package/dist/service/cloudformation/sam/sim-cfn-sam-expansion.js +11 -6
  193. package/dist/service/cloudformation/sdk/sim-cloudformation-sdk-command-router.js +20 -0
  194. package/dist/service/cloudformation/serve/sim-cloudformation-api.d.ts +4 -3
  195. package/dist/service/cloudformation/serve/sim-cloudformation-api.js +6 -3
  196. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.d.ts +10 -0
  197. package/dist/service/cloudformation/serve/sim-cloudformation-change-set-api.js +94 -0
  198. package/dist/service/cloudformation/sim-cloudformation.d.ts +31 -0
  199. package/dist/service/cloudformation/sim-cloudformation.js +56 -9
  200. package/dist/service/cloudformation/stack/resource-map/sim-cfn-stack-resource-map.js +1 -0
  201. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.d.ts +20 -0
  202. package/dist/service/cloudformation/stack/sim-cfn-deleted-stacks.js +23 -0
  203. package/dist/service/cloudformation/stack/sim-cfn-deployed-stack.type.d.ts +6 -0
  204. package/dist/service/cloudformation/stack/sim-cfn-stack-id.d.ts +30 -0
  205. package/dist/service/cloudformation/stack/sim-cfn-stack-id.js +24 -0
  206. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.d.ts +51 -3
  207. package/dist/service/cloudformation/stack/sim-cfn-stack-resource-operations.js +84 -6
  208. package/dist/service/cloudformation/stack/sim-cfn-stack.d.ts +28 -16
  209. package/dist/service/cloudformation/stack/sim-cfn-stack.js +59 -32
  210. package/dist/service/cloudformation/stack/sim-cfn-stack.type.d.ts +7 -1
  211. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.d.ts +7 -1
  212. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-deletion-lifecycle.js +3 -1
  213. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.d.ts +3 -0
  214. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-batch-deleter.js +3 -0
  215. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.d.ts +3 -0
  216. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-resource-deleter.js +2 -1
  217. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.d.ts +18 -0
  218. package/dist/service/cloudformation/stack/teardown/sim-cfn-stack-retained-logical-ids.js +30 -0
  219. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.d.ts +9 -0
  220. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-guard.js +14 -0
  221. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.d.ts +25 -14
  222. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-lifecycle.js +41 -24
  223. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.d.ts +16 -1
  224. package/dist/service/cloudformation/stack/update/sim-cfn-stack-update-plan.js +27 -0
  225. package/dist/service/cloudformation/stack/update/sim-cfn-stack-updater.js +7 -1
  226. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.d.ts +12 -3
  227. package/dist/service/cloudformation/template/condition/sim-cfn-condition-expression.js +29 -3
  228. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.d.ts +28 -0
  229. package/dist/service/cloudformation/template/condition/sim-cfn-output-conditions.js +39 -0
  230. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.d.ts +25 -1
  231. package/dist/service/cloudformation/template/node/fn/find-in-map/sim-cfn-fn-find-in-map.js +43 -11
  232. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.d.ts +7 -0
  233. package/dist/service/cloudformation/template/parse/fn/find-in-map/sim-cfn-fn-find-in-map-parser.js +29 -3
  234. package/dist/service/cloudformation/template/sim-cfn-command-template.d.ts +40 -0
  235. package/dist/service/cloudformation/template/sim-cfn-command-template.js +45 -0
  236. package/dist/service/cloudformation/template/sim-cfn-template.d.ts +7 -0
  237. package/dist/service/cloudformation/template/sim-cfn-template.js +15 -1
  238. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.d.ts +2 -0
  239. package/dist/service/cloudfront/origin/custom/sim-cf-custom-origin-request.js +49 -0
  240. package/dist/service/cloudfront/origin/custom/sim-cloudfront-custom-origin.js +1 -0
  241. package/dist/service/cloudfront/origin/s3/sim-cf-s3-origin-responses.js +1 -0
  242. package/dist/service/cognito/serve/page/sim-cognito-provider-page.js +1 -1
  243. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.d.ts +5 -0
  244. package/dist/service/cognito/user-pool/idp/sim-cognito-attribute-mapping.js +17 -0
  245. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.d.ts +5 -5
  246. package/dist/service/cognito/user-pool/idp/sim-cognito-presented-external-user.js +24 -8
  247. package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.d.ts +5 -0
  248. package/dist/service/dynamodb/cfn/sim-cfn-dynamodb-resource-factory.js +15 -0
  249. package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.d.ts +24 -0
  250. package/dist/service/dynamodb/cfn/table/sim-cfn-dynamodb-table-update-validator.js +38 -0
  251. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.d.ts +11 -8
  252. package/dist/service/dynamodb/command/query/sim-dynamodb-query-expressions.js +20 -8
  253. package/dist/service/dynamodb/command/query/sim-dynamodb-query.js +2 -0
  254. package/dist/service/dynamodb/command/query/sim-dynamodb-unsimulated-query-input.js +0 -1
  255. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.d.ts +14 -4
  256. package/dist/service/dynamodb/command/read/sim-dynamodb-read-answer.js +16 -4
  257. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.d.ts +17 -0
  258. package/dist/service/dynamodb/command/read/sim-dynamodb-table-read.fixture.js +39 -0
  259. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.d.ts +28 -0
  260. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan-expressions.js +50 -0
  261. package/dist/service/dynamodb/command/scan/sim-dynamodb-scan.js +12 -5
  262. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.d.ts +3 -3
  263. package/dist/service/dynamodb/command/scan/sim-dynamodb-unsimulated-scan-input.js +3 -4
  264. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.d.ts +5 -16
  265. package/dist/service/dynamodb/expression/filter/sim-dynamodb-filter-expression.js +4 -21
  266. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.d.ts +15 -0
  267. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection-expression.js +18 -1
  268. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.d.ts +13 -0
  269. package/dist/service/dynamodb/expression/projection/sim-dynamodb-projection.js +15 -0
  270. package/dist/service/dynamodb/table/sim-dynamodb-index-update.js +1 -2
  271. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-properties.js +2 -0
  272. package/dist/service/lambda/cfn/event-source-mapping/sim-cfn-lambda-event-source-mapping-property-rules.js +5 -3
  273. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.d.ts +21 -0
  274. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-cors.js +37 -0
  275. package/dist/service/lambda/cfn/url/sim-cfn-lambda-url-creator.js +6 -0
  276. package/dist/service/lambda/command/create-function/create-function.handler.d.ts +3 -0
  277. package/dist/service/lambda/command/create-function/create-function.handler.js +5 -1
  278. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.command.d.ts +2 -3
  279. package/dist/service/lambda/command/create-function-url-config/create-function-url-config.handler.js +1 -0
  280. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.d.ts +6 -0
  281. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-input.js +10 -0
  282. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping-refusals.js +2 -6
  283. package/dist/service/lambda/command/event-source-mapping/create-event-source-mapping.handler.js +1 -0
  284. package/dist/service/lambda/command/function/sim-lambda-function-commands.d.ts +2 -0
  285. package/dist/service/lambda/command/function-url/function-url-cors-constraints.d.ts +25 -0
  286. package/dist/service/lambda/command/function-url/function-url-cors-constraints.js +49 -0
  287. package/dist/service/lambda/command/function-url/function-url-cors-input.d.ts +25 -0
  288. package/dist/service/lambda/command/function-url/function-url-cors-input.js +57 -0
  289. package/dist/service/lambda/command/function-url/function-url-input.d.ts +7 -0
  290. package/dist/service/lambda/command/function-url/function-url-input.js +9 -0
  291. package/dist/service/lambda/command/invoke/async/sim-lambda-async-invocation.js +10 -13
  292. package/dist/service/lambda/command/invoke/async/sim-lambda-async-outcome.js +2 -0
  293. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.d.ts +13 -0
  294. package/dist/service/lambda/command/invoke/async/sim-lambda-handler-attempt.js +12 -0
  295. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.command.d.ts +2 -0
  296. package/dist/service/lambda/command/update-function-url-config/update-function-url-config.handler.js +1 -0
  297. package/dist/service/lambda/destination/deliver/sim-lambda-destination-bus.js +1 -1
  298. package/dist/service/lambda/destination/deliver/sim-lambda-destination-function.js +8 -12
  299. package/dist/service/lambda/destination/deliver/sim-lambda-destination-queue.js +4 -3
  300. package/dist/service/lambda/destination/deliver/sim-lambda-destination-send.d.ts +2 -0
  301. package/dist/service/lambda/destination/deliver/sim-lambda-destination-topic.js +4 -3
  302. package/dist/service/lambda/destination/sim-aws-lambda-destinations.d.ts +4 -6
  303. package/dist/service/lambda/destination/sim-aws-lambda-destinations.js +6 -6
  304. package/dist/service/lambda/destination/sim-lambda-destination-targets.d.ts +3 -0
  305. package/dist/service/lambda/event-source/poll/kinesis/sim-lambda-kinesis-stream-delivery.js +4 -9
  306. package/dist/service/lambda/event-source/poll/sim-lambda-dynamodb-stream-delivery.js +4 -9
  307. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.d.ts +22 -3
  308. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-outcome.js +39 -9
  309. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.d.ts +7 -6
  310. package/dist/service/lambda/event-source/poll/sim-lambda-stream-batch-response.js +14 -12
  311. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.d.ts +9 -15
  312. package/dist/service/lambda/event-source/poll/sim-lambda-stream-checkpoint.js +9 -16
  313. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.d.ts +10 -6
  314. package/dist/service/lambda/event-source/poll/sim-lambda-stream-progress.js +22 -12
  315. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.d.ts +23 -0
  316. package/dist/service/lambda/event-source/poll/sim-lambda-stream-record-times.js +18 -0
  317. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.d.ts +12 -13
  318. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry-backoff.js +24 -17
  319. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.d.ts +64 -0
  320. package/dist/service/lambda/event-source/poll/sim-lambda-stream-retry.js +86 -0
  321. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.d.ts +6 -0
  322. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-arn.js +8 -1
  323. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.d.ts +6 -0
  324. package/dist/service/lambda/event-source/queue/sim-lambda-sqs-event-source-rules.js +7 -0
  325. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.d.ts +11 -1
  326. package/dist/service/lambda/event-source/sim-lambda-event-source-mapping.js +13 -0
  327. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.d.ts +39 -0
  328. package/dist/service/lambda/event-source/sim-lambda-event-source-retry-limits.js +46 -0
  329. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.d.ts +56 -0
  330. package/dist/service/lambda/event-source/sim-lambda-stream-retry-limits.js +110 -0
  331. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.d.ts +5 -0
  332. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-arn.js +7 -1
  333. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.d.ts +6 -0
  334. package/dist/service/lambda/event-source/stream/kinesis/sim-lambda-kinesis-event-source-rules.js +6 -0
  335. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.d.ts +6 -1
  336. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-arn.js +8 -6
  337. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.d.ts +10 -8
  338. package/dist/service/lambda/event-source/stream/sim-lambda-dynamodb-stream-event-source-rules.js +18 -1
  339. package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts +8 -2
  340. package/dist/service/lambda/function/code/sim-lambda-executable-code.js +2 -1
  341. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts +2 -11
  342. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js +13 -39
  343. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts +7 -0
  344. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js +13 -7
  345. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.d.ts +23 -0
  346. package/dist/service/lambda/function/code/vm/sim-lambda-vm-handler-lookup.js +42 -0
  347. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.d.ts +12 -4
  348. package/dist/service/lambda/function/code/vm/sim-lambda-vm-output-stream.js +15 -5
  349. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.d.ts +7 -0
  350. package/dist/service/lambda/function/invoke/sim-lambda-host-scope.js +6 -2
  351. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.d.ts +26 -0
  352. package/dist/service/lambda/function/invoke/sim-lambda-invocation-deadline.js +84 -0
  353. package/dist/service/lambda/function/invoke/sim-lambda-invocation.d.ts +44 -0
  354. package/dist/service/lambda/function/invoke/sim-lambda-invocation.js +44 -0
  355. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.d.ts +6 -0
  356. package/dist/service/lambda/function/invoke/sim-lambda-invoke-context-builder.js +1 -2
  357. package/dist/service/lambda/function/invoke/sim-lambda-process-output.d.ts +6 -1
  358. package/dist/service/lambda/function/invoke/sim-lambda-process-output.js +19 -6
  359. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.d.ts +15 -0
  360. package/dist/service/lambda/function/invoke/sim-lambda-timed-out.error.js +18 -0
  361. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.d.ts +12 -0
  362. package/dist/service/lambda/function/invoke/timer/sim-lambda-clear-timer.js +28 -0
  363. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.d.ts +46 -0
  364. package/dist/service/lambda/function/invoke/timer/sim-lambda-clock-timer.js +104 -0
  365. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.d.ts +24 -0
  366. package/dist/service/lambda/function/invoke/timer/sim-lambda-host-timers.js +27 -0
  367. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.d.ts +43 -0
  368. package/dist/service/lambda/function/invoke/timer/sim-lambda-invocation-timers.js +112 -0
  369. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.d.ts +57 -0
  370. package/dist/service/lambda/function/invoke/timer/sim-lambda-process-timers.js +79 -0
  371. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.d.ts +10 -0
  372. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-delay.js +15 -0
  373. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.d.ts +11 -0
  374. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-global.js +24 -0
  375. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.d.ts +50 -0
  376. package/dist/service/lambda/function/invoke/timer/sim-lambda-timer-handle.js +43 -0
  377. package/dist/service/lambda/function/logging/sim-lambda-function-logging.d.ts +17 -0
  378. package/dist/service/lambda/function/logging/sim-lambda-function-logging.js +12 -1
  379. package/dist/service/lambda/function/logging/sim-lambda-output.d.ts +56 -0
  380. package/dist/service/lambda/function/logging/sim-lambda-output.js +62 -0
  381. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.d.ts +8 -0
  382. package/dist/service/lambda/function/outbound/sim-lambda-aws-api-outbound.js +27 -1
  383. package/dist/service/lambda/function/sim-lambda-function.d.ts +1 -1
  384. package/dist/service/lambda/function/sim-lambda-function.js +11 -9
  385. package/dist/service/lambda/function/sim-lambda-function.type.d.ts +15 -0
  386. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.d.ts +16 -0
  387. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.d.ts +22 -0
  388. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.factory.js +17 -0
  389. package/dist/service/lambda/function/url/sim-lambda-function-url-cors.js +1 -0
  390. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.d.ts +2 -0
  391. package/dist/service/lambda/function/url/sim-lambda-function-url-factory.js +2 -1
  392. package/dist/service/lambda/function/url/sim-lambda-function-url-store.d.ts +2 -0
  393. package/dist/service/lambda/function/url/sim-lambda-function-url.d.ts +16 -0
  394. package/dist/service/lambda/function/url/sim-lambda-function-url.js +16 -1
  395. package/dist/service/lambda/index.d.ts +1 -0
  396. package/dist/service/lambda/index.js +1 -0
  397. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.d.ts +50 -0
  398. package/dist/service/lambda/serve/response/sim-lambda-url-cors-headers.js +96 -0
  399. package/dist/service/lambda/serve/sim-lambda-controller.d.ts +14 -0
  400. package/dist/service/lambda/serve/sim-lambda-controller.js +27 -0
  401. package/dist/service/lambda/sim-lambda-commands.d.ts +10 -0
  402. package/dist/service/lambda/sim-lambda-commands.js +11 -0
  403. package/dist/service/lambda/sim-lambda.d.ts +12 -0
  404. package/dist/service/lambda/sim-lambda.js +13 -0
  405. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.d.ts +67 -0
  406. package/dist/service/s3/bucket/encryption/sim-s3-bucket-encryption.js +69 -0
  407. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.d.ts +4 -31
  408. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-configuration.js +7 -6
  409. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.d.ts +5 -0
  410. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-expiry.js +8 -4
  411. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.d.ts +1 -14
  412. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-selection.js +16 -8
  413. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.d.ts +41 -0
  414. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-subject.js +1 -0
  415. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.d.ts +14 -0
  416. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-sweep.js +32 -2
  417. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.d.ts +33 -0
  418. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition-instant.js +48 -0
  419. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.d.ts +16 -0
  420. package/dist/service/s3/bucket/lifecycle/sim-s3-lifecycle-transition.js +44 -0
  421. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.d.ts +8 -0
  422. package/dist/service/s3/bucket/lifecycle/sim-s3-noncurrent-sweep.js +27 -0
  423. package/dist/service/s3/bucket/notification/sim-s3-notification-event.d.ts +1 -1
  424. package/dist/service/s3/bucket/notification/sim-s3-notification-event.js +5 -0
  425. package/dist/service/s3/bucket/notification/sim-s3-unsimulated-notification-events.js +0 -3
  426. package/dist/service/s3/bucket/sim-s3-bucket-access.d.ts +3 -0
  427. package/dist/service/s3/bucket/sim-s3-bucket-access.js +6 -2
  428. package/dist/service/s3/bucket/sim-s3-bucket-configuration.d.ts +84 -0
  429. package/dist/service/s3/bucket/sim-s3-bucket-configuration.js +115 -0
  430. package/dist/service/s3/bucket/sim-s3-bucket-objects.d.ts +10 -0
  431. package/dist/service/s3/bucket/sim-s3-bucket-objects.js +18 -0
  432. package/dist/service/s3/bucket/sim-s3-bucket-properties.d.ts +41 -0
  433. package/dist/service/s3/bucket/sim-s3-bucket-properties.js +1 -0
  434. package/dist/service/s3/bucket/sim-s3-bucket.d.ts +11 -83
  435. package/dist/service/s3/bucket/sim-s3-bucket.js +14 -83
  436. package/dist/service/s3/bucket/sim-s3-public-read.fixture.d.ts +6 -0
  437. package/dist/service/s3/bucket/sim-s3-public-read.fixture.js +20 -6
  438. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.d.ts +58 -0
  439. package/dist/service/s3/bucket/tagging/sim-s3-taggable-object.js +73 -0
  440. package/dist/service/s3/bucket/versioning/sim-s3-object-version.d.ts +19 -1
  441. package/dist/service/s3/bucket/versioning/sim-s3-object-version.js +20 -0
  442. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.d.ts +21 -0
  443. package/dist/service/s3/cfn/bucket/encryption/sim-cfn-s3-bucket-encryption.js +44 -0
  444. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-configuration.js +6 -0
  445. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.d.ts +5 -4
  446. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-fields.js +12 -5
  447. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.d.ts +21 -0
  448. package/dist/service/s3/cfn/bucket/lifecycle/sim-cfn-s3-bucket-lifecycle-filter.js +30 -0
  449. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-configurator.js +1 -0
  450. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.d.ts +14 -1
  451. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-declared-configurations.js +41 -16
  452. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.d.ts +3 -5
  453. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-property-names.js +7 -10
  454. package/dist/service/s3/command/authorize/sim-s3-authorize-action.d.ts +6 -1
  455. package/dist/service/s3/command/authorize/sim-s3-authorize-action.js +5 -0
  456. package/dist/service/s3/command/copy-object/copy-object-builder.d.ts +10 -1
  457. package/dist/service/s3/command/copy-object/copy-object-builder.js +17 -1
  458. package/dist/service/s3/command/copy-object/copy-object.command.d.ts +11 -1
  459. package/dist/service/s3/command/copy-object/copy-object.handler.js +2 -1
  460. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.command.d.ts +5 -1
  461. package/dist/service/s3/command/create-multipart-upload/create-multipart-upload.handler.js +7 -0
  462. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.d.ts +19 -0
  463. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.command.js +1 -0
  464. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.d.ts +30 -0
  465. package/dist/service/s3/command/delete-bucket-encryption/delete-bucket-encryption.handler.js +38 -0
  466. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.d.ts +23 -0
  467. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.command.js +1 -0
  468. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.d.ts +22 -0
  469. package/dist/service/s3/command/delete-object-tagging/delete-object-tagging.handler.js +42 -0
  470. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.d.ts +29 -0
  471. package/dist/service/s3/command/encryption/sim-s3-encryption-authorizer.js +49 -0
  472. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.d.ts +22 -0
  473. package/dist/service/s3/command/encryption/sim-s3-encryption-commands.js +30 -0
  474. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.d.ts +24 -0
  475. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.command.js +1 -0
  476. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.d.ts +31 -0
  477. package/dist/service/s3/command/get-bucket-encryption/get-bucket-encryption.handler.js +39 -0
  478. package/dist/service/s3/command/get-object/get-object-authorizer.d.ts +11 -8
  479. package/dist/service/s3/command/get-object/get-object-authorizer.js +26 -34
  480. package/dist/service/s3/command/get-object/get-object-loader.d.ts +7 -3
  481. package/dist/service/s3/command/get-object/get-object-loader.js +9 -4
  482. package/dist/service/s3/command/get-object/get-object.command.d.ts +2 -1
  483. package/dist/service/s3/command/get-object/get-object.handler.d.ts +4 -0
  484. package/dist/service/s3/command/get-object/get-object.handler.js +13 -7
  485. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.d.ts +29 -0
  486. package/dist/service/s3/command/get-object-tagging/get-object-tagging.command.js +1 -0
  487. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.d.ts +21 -0
  488. package/dist/service/s3/command/get-object-tagging/get-object-tagging.handler.js +33 -0
  489. package/dist/service/s3/command/head-object/head-object-loader.js +2 -0
  490. package/dist/service/s3/command/head-object/head-object.command.d.ts +2 -1
  491. package/dist/service/s3/command/lifecycle/sim-s3-lifecycle-rules-validation.js +18 -0
  492. package/dist/service/s3/command/list-multipart-uploads/list-multipart-uploads.handler.js +1 -2
  493. package/dist/service/s3/command/list-object-versions/list-object-versions-summaries.js +1 -2
  494. package/dist/service/s3/command/list-objects/list-objects-page-builder.d.ts +5 -0
  495. package/dist/service/s3/command/list-objects/list-objects-page-builder.js +11 -6
  496. package/dist/service/s3/command/list-objects/list-objects.command.d.ts +5 -1
  497. package/dist/service/s3/command/list-objects/list-objects.handler.js +5 -0
  498. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.d.ts +6 -0
  499. package/dist/service/s3/command/list-objects-v2/list-objects-v2-page-builder.js +11 -5
  500. package/dist/service/s3/command/list-objects-v2/list-objects-v2.command.d.ts +5 -1
  501. package/dist/service/s3/command/list-objects-v2/list-objects-v2.handler.js +5 -0
  502. package/dist/service/s3/command/list-parts/list-parts.handler.js +3 -3
  503. package/dist/service/s3/command/multipart/sim-s3-multipart-access.js +1 -1
  504. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.d.ts +21 -0
  505. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.command.js +1 -0
  506. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.d.ts +31 -0
  507. package/dist/service/s3/command/put-bucket-encryption/put-bucket-encryption.handler.js +41 -0
  508. package/dist/service/s3/command/put-object/put-object-builder.d.ts +5 -1
  509. package/dist/service/s3/command/put-object/put-object-builder.js +10 -1
  510. package/dist/service/s3/command/put-object/put-object.command.d.ts +5 -1
  511. package/dist/service/s3/command/put-object/put-object.handler.js +2 -1
  512. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.d.ts +37 -0
  513. package/dist/service/s3/command/put-object-tagging/put-object-tagging.command.js +1 -0
  514. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.d.ts +22 -0
  515. package/dist/service/s3/command/put-object-tagging/put-object-tagging.handler.js +46 -0
  516. package/dist/service/s3/command/sim-s3-command.types.d.ts +6 -0
  517. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.d.ts +61 -0
  518. package/dist/service/s3/command/tagging/sim-s3-object-tagging-access.js +49 -0
  519. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.d.ts +30 -0
  520. package/dist/service/s3/command/tagging/sim-s3-object-tagging-authorizer.js +27 -0
  521. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.d.ts +26 -0
  522. package/dist/service/s3/command/tagging/sim-s3-object-tagging-commands.js +34 -0
  523. package/dist/service/s3/error/sim-s3-upload.error.d.ts +41 -0
  524. package/dist/service/s3/error/sim-s3-upload.error.js +47 -0
  525. package/dist/service/s3/error/sim-s3.error.d.ts +22 -34
  526. package/dist/service/s3/error/sim-s3.error.js +26 -40
  527. package/dist/service/s3/mount/sim-s3-mount.type.d.ts +10 -0
  528. package/dist/service/s3/notification/event/sim-s3-event-records.d.ts +3 -2
  529. package/dist/service/s3/notification/event/sim-s3-event-records.js +5 -3
  530. package/dist/service/s3/notification/event/sim-s3-object-event-builder.d.ts +33 -8
  531. package/dist/service/s3/notification/event/sim-s3-object-event-builder.js +23 -9
  532. package/dist/service/s3/notification/sim-s3-object-notifier.d.ts +5 -1
  533. package/dist/service/s3/notification/sim-s3-object-notifier.js +6 -0
  534. package/dist/service/s3/object/s3-key-encoding.d.ts +12 -0
  535. package/dist/service/s3/object/s3-key-encoding.js +14 -0
  536. package/dist/service/s3/object/s3-listing-encoding.d.ts +42 -0
  537. package/dist/service/s3/object/s3-listing-encoding.js +75 -0
  538. package/dist/service/s3/object/s3-object-response-headers.d.ts +40 -0
  539. package/dist/service/s3/object/s3-object-response-headers.js +49 -2
  540. package/dist/service/s3/object/s3-object-storage-report.d.ts +19 -0
  541. package/dist/service/s3/object/s3-object-storage-report.js +18 -0
  542. package/dist/service/s3/object/s3-object-summary.d.ts +2 -10
  543. package/dist/service/s3/object/s3-object-summary.js +1 -10
  544. package/dist/service/s3/object/s3-object-tags.d.ts +61 -0
  545. package/dist/service/s3/object/s3-object-tags.js +77 -0
  546. package/dist/service/s3/object/s3-object.d.ts +49 -0
  547. package/dist/service/s3/object/s3-object.js +52 -1
  548. package/dist/service/s3/object/s3-server-side-encryption.d.ts +30 -0
  549. package/dist/service/s3/object/s3-server-side-encryption.js +42 -0
  550. package/dist/service/s3/object/s3-storage-class.d.ts +45 -0
  551. package/dist/service/s3/object/s3-storage-class.js +67 -0
  552. package/dist/service/s3/object/s3-write-metadata.d.ts +17 -3
  553. package/dist/service/s3/object/s3-write-metadata.js +43 -0
  554. package/dist/service/s3/object/s3-write-storage.d.ts +27 -0
  555. package/dist/service/s3/object/s3-write-storage.js +21 -0
  556. package/dist/service/s3/object/s3-write-tagging.d.ts +24 -0
  557. package/dist/service/s3/object/s3-write-tagging.js +19 -0
  558. package/dist/service/s3/sdk/sim-s3-sdk-bucket-routes.js +12 -0
  559. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +2 -0
  560. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.d.ts +9 -0
  561. package/dist/service/s3/sdk/sim-s3-sdk-object-tagging-routes.js +23 -0
  562. package/dist/service/s3/serve/api/sim-s3-api-bucket-routes.js +22 -0
  563. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.d.ts +4 -0
  564. package/dist/service/s3/serve/api/sim-s3-api-configuration-output.js +10 -0
  565. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.d.ts +7 -0
  566. package/dist/service/s3/serve/api/sim-s3-api-encryption-read.js +30 -0
  567. package/dist/service/s3/serve/api/sim-s3-api-head-output.d.ts +4 -2
  568. package/dist/service/s3/serve/api/sim-s3-api-head-output.js +8 -2
  569. package/dist/service/s3/serve/api/sim-s3-api-input.d.ts +0 -6
  570. package/dist/service/s3/serve/api/sim-s3-api-input.js +2 -13
  571. package/dist/service/s3/serve/api/sim-s3-api-listing.d.ts +5 -0
  572. package/dist/service/s3/serve/api/sim-s3-api-listing.js +5 -0
  573. package/dist/service/s3/serve/api/sim-s3-api-object-input.d.ts +16 -0
  574. package/dist/service/s3/serve/api/sim-s3-api-object-input.js +34 -7
  575. package/dist/service/s3/serve/api/sim-s3-api-object-output.d.ts +18 -1
  576. package/dist/service/s3/serve/api/sim-s3-api-object-output.js +21 -2
  577. package/dist/service/s3/serve/api/sim-s3-api-object-routes.js +22 -1
  578. package/dist/service/s3/serve/api/sim-s3-api-output.d.ts +5 -1
  579. package/dist/service/s3/serve/api/sim-s3-api-output.js +16 -5
  580. package/dist/service/s3/serve/api/sim-s3-api-request.d.ts +6 -5
  581. package/dist/service/s3/serve/api/sim-s3-api-request.js +55 -11
  582. package/dist/service/s3/serve/api/sim-s3-api-routes.js +2 -2
  583. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.d.ts +9 -0
  584. package/dist/service/s3/serve/api/sim-s3-api-tagging-read.js +14 -0
  585. package/dist/service/s3/serve/api/sim-s3-api.d.ts +7 -1
  586. package/dist/service/s3/serve/api/sim-s3-api.js +7 -1
  587. package/dist/service/s3/serve/sim-s3-rest-controller.d.ts +1 -5
  588. package/dist/service/s3/serve/sim-s3-rest-controller.js +3 -17
  589. package/dist/service/s3/serve/sim-s3-rest-object-reader.d.ts +3 -0
  590. package/dist/service/s3/serve/sim-s3-rest-object-reader.js +8 -1
  591. package/dist/service/s3/serve/sim-s3-rest-upload.d.ts +20 -0
  592. package/dist/service/s3/serve/sim-s3-rest-upload.js +30 -0
  593. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +1 -0
  594. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +2 -0
  595. package/dist/service/s3/serve/website/sim-s3-website-object.js +3 -0
  596. package/dist/service/s3/sim-s3-commands.d.ts +4 -0
  597. package/dist/service/s3/sim-s3-commands.js +6 -0
  598. package/dist/service/s3/sim-s3-operations.d.ts +11 -4
  599. package/dist/service/s3/sim-s3-operations.js +17 -4
  600. package/dist/service/s3/sim-s3-tagging-operations.d.ts +21 -0
  601. package/dist/service/s3/sim-s3-tagging-operations.js +25 -0
  602. package/dist/service/s3/sim-s3.d.ts +12 -0
  603. package/dist/service/s3/sim-s3.js +13 -0
  604. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.d.ts +34 -0
  605. package/dist/service/s3/storage/filesystem/s3-filesystem-deleting-storage.js +34 -0
  606. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.d.ts +9 -0
  607. package/dist/service/s3/storage/filesystem/s3-filesystem-deletion.js +24 -0
  608. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.d.ts +5 -4
  609. package/dist/service/s3/storage/filesystem/s3-filesystem-storage.js +5 -3
  610. package/dist/service/s3/upload/sim-s3-completed-upload.js +5 -1
  611. package/dist/service/s3/upload/sim-s3-multipart-upload.d.ts +18 -0
  612. package/dist/service/s3/upload/sim-s3-multipart-upload.js +8 -0
  613. package/dist/service/s3/upload/sim-s3-multipart-uploads.d.ts +6 -0
  614. package/dist/service/s3/upload/sim-s3-multipart-uploads.js +5 -0
  615. package/dist/util/background/background-clock-waits.d.ts +52 -0
  616. package/dist/util/background/background-clock-waits.js +76 -0
  617. package/dist/util/background/background-jitter.js +1 -0
  618. package/dist/util/background/background-pending-tasks.d.ts +55 -0
  619. package/dist/util/background/background-pending-tasks.js +117 -0
  620. package/dist/util/background/background-settled-tasks.d.ts +4 -1
  621. package/dist/util/background/background-settled-tasks.js +4 -1
  622. package/dist/util/background/background.d.ts +43 -0
  623. package/dist/util/background/background.js +27 -19
  624. package/dist/util/background/non-deterministic-background.d.ts +12 -0
  625. package/dist/util/background/non-deterministic-background.js +24 -20
  626. package/dist/util/clock/sim-clock-control.js +23 -2
  627. package/docs/services/apigateway/README.md +3 -1
  628. package/docs/services/athena/README.md +126 -3
  629. package/docs/services/cloudformation/README.md +775 -65
  630. package/docs/services/cognito/README.md +5 -0
  631. package/docs/services/dynamodb/README.md +86 -11
  632. package/docs/services/lambda/README.md +603 -39
  633. package/docs/services/s3/README.md +688 -57
  634. package/package.json +8 -2
@@ -286,6 +286,70 @@ console.log(logged.events?.map((event) => event.message));
286
286
  await simAws.backgroundTasksComplete();
287
287
  ```
288
288
 
289
+ #### Keeping handler output out of the test console
290
+
291
+ A handler that logs on every invocation makes that tee expensive. Powertools' `Metrics` writes an
292
+ EMF document for every metric it counts, and a suite invoking a function a few hundred times buries
293
+ its own output under them. `captureOnly()` stops the forwarding for every function of one simulated
294
+ Lambda:
295
+
296
+ ```typescript sim-lambda-capture-only-output
297
+ /**
298
+ * Recording what a handler prints without printing it again.
299
+ */
300
+
301
+ import { FilterLogEventsCommand } from "@aws-sdk/client-cloudwatch-logs";
302
+ import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
303
+
304
+ import { SimAws } from "@kensio/yulin";
305
+ import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
306
+
307
+ const simAws = new SimAws();
308
+
309
+ await simAws.lambda().createFunction(
310
+ new CreateFunctionCommand({
311
+ FunctionName: "user",
312
+ Role: "arn:aws:iam::111111111111:role/UserRole",
313
+ Code: {
314
+ ZipFile: makeLambdaZipFileInput(() => {
315
+ // What AWS Lambda Powertools' Metrics writes for every metric it
316
+ // counts, once per request.
317
+ process.stdout.write(
318
+ `${JSON.stringify({ service: "user", UserRequest: 1 })}\n`,
319
+ );
320
+
321
+ return { statusCode: 200 };
322
+ }),
323
+ },
324
+ }),
325
+ );
326
+
327
+ // The test run's own console stays clean from here on.
328
+ simAws.lambda().output().captureOnly();
329
+
330
+ await simAws.lambda().invoke(new InvokeCommand({ FunctionName: "user" }));
331
+
332
+ // The log group holds the line, as it did before.
333
+ const found = await simAws
334
+ .logs()
335
+ .filterLogEvents(
336
+ new FilterLogEventsCommand({ logGroupName: "/aws/lambda/user" }),
337
+ );
338
+
339
+ console.log(found.events?.[0]?.message);
340
+ ```
341
+
342
+ The log group holds every line either way. Nothing is lost by it, and `teeToHost()` puts the
343
+ forwarding back.
344
+
345
+ The settings belong to one Account and Region, as the functions do. A suite invoking through
346
+ `simAws.region("eu-west-1")` sets them on that scope. They are read as each line is written. A
347
+ change reaches a function that has already cold started.
348
+
349
+ A function with no simulated CloudWatch Logs behind it goes on printing whatever the settings say.
350
+ That is a function on a standalone `SimLambda`, built outside a `SimAws` instance, and it has no log
351
+ group for its output to be read back out of.
352
+
289
353
  ### When a handler throws
290
354
 
291
355
  An invocation that ends in an error nothing caught leaves an `ERROR Invoke Error` line in the
@@ -687,7 +751,13 @@ AWS JSON protocol. Those are the ones that can be read back without the operatio
687
751
  ACM, CloudWatch Logs, Cognito Identity Provider, DynamoDB, DynamoDB Streams, ECS, EventBridge, KMS,
688
752
  Rekognition, Secrets Manager, SQS and SSM.
689
753
 
690
- A bundled call to any other simulated service, such as S3, SNS, SES or Lambda itself, fails with an
754
+ S3 states its operation in the method and the path. A bundled S3 client reaches the endpoint that
755
+ already serves S3 to a client given `--endpoint-url`, in either of the two addressing styles an SDK
756
+ sends. A function can read and write Objects with an `S3Client` its archive inlines. The execution
757
+ Role authorizes each request, and a read it holds no `s3:GetObject` for comes back to the SDK as
758
+ `AccessDenied`.
759
+
760
+ A bundled call to any other simulated service, such as SNS, SES or Lambda itself, fails with an
691
761
  error naming the service. Leaving the SDK out of that archive puts it back
692
762
  on the module interception path above, which every simulated service is reachable through.
693
763
 
@@ -946,6 +1016,19 @@ results go. An invocation that fails its last attempt is sent to the `OnFailure`
946
1016
  one whose handler returns is sent to `OnSuccess`. A destination ARN can name a simulated SQS queue,
947
1017
  SNS topic, EventBridge event bus or Lambda function.
948
1018
 
1019
+ The source function's execution role must allow the operation that writes to the destination:
1020
+
1021
+ | Destination | Required action |
1022
+ | --------------------- | ----------------------- |
1023
+ | SQS queue | `sqs:SendMessage` |
1024
+ | SNS topic | `sns:Publish` |
1025
+ | EventBridge event bus | `events:PutEvents` |
1026
+ | Lambda function | `lambda:InvokeFunction` |
1027
+
1028
+ Simulated Lambda calls the destination service with that role as its caller. A denied delivery
1029
+ rejects the background task without changing the destination. A Lambda destination is invoked
1030
+ asynchronously, so the delivery succeeds once the target invocation has been accepted.
1031
+
949
1032
  ```typescript sim-lambda-async-destinations
950
1033
  /**
951
1034
  * Asynchronous invocation retries and an OnFailure destination.
@@ -956,6 +1039,7 @@ import {
956
1039
  InvokeCommand,
957
1040
  PutFunctionEventInvokeConfigCommand,
958
1041
  } from "@aws-sdk/client-lambda";
1042
+ import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
959
1043
  import { CreateQueueCommand, ReceiveMessageCommand } from "@aws-sdk/client-sqs";
960
1044
 
961
1045
  import { SimAws } from "@kensio/yulin";
@@ -964,19 +1048,51 @@ import {
964
1048
  type SimLambdaDestinationRecord,
965
1049
  } from "@kensio/yulin/lambda";
966
1050
 
967
- const simAws = new SimAws();
1051
+ const simAws = new SimAws({ defaultAccountId: "111111111111" });
1052
+ const iam = simAws.iam();
968
1053
  const lambda = simAws.lambda();
969
1054
  const sqs = simAws.sqs();
1055
+ const queueArn = `arn:aws:sqs:${simAws.defaultRegionName}:${simAws.defaultAccountId}:order-failures`;
970
1056
 
971
1057
  const created = await sqs.createQueue(
972
1058
  new CreateQueueCommand({ QueueName: "order-failures" }),
973
1059
  );
974
1060
 
1061
+ const role = await iam.createRole(
1062
+ new CreateRoleCommand({
1063
+ RoleName: "OrdersRole",
1064
+ AssumeRolePolicyDocument: JSON.stringify({
1065
+ Version: "2012-10-17",
1066
+ Statement: {
1067
+ Effect: "Allow",
1068
+ Principal: { Service: "lambda.amazonaws.com" },
1069
+ Action: "sts:AssumeRole",
1070
+ },
1071
+ }),
1072
+ }),
1073
+ );
1074
+ const roleArn = role.Role.Arn;
1075
+
1076
+ await iam.putRolePolicy(
1077
+ new PutRolePolicyCommand({
1078
+ RoleName: "OrdersRole",
1079
+ PolicyName: "SendFailedOrders",
1080
+ PolicyDocument: JSON.stringify({
1081
+ Version: "2012-10-17",
1082
+ Statement: {
1083
+ Effect: "Allow",
1084
+ Action: "sqs:SendMessage",
1085
+ Resource: queueArn,
1086
+ },
1087
+ }),
1088
+ }),
1089
+ );
1090
+
975
1091
  const attempts: string[] = [];
976
1092
  await lambda.createFunction(
977
1093
  new CreateFunctionCommand({
978
1094
  FunctionName: "orders",
979
- Role: "arn:aws:iam::111111111111:role/OrdersRole",
1095
+ Role: roleArn,
980
1096
  Code: {
981
1097
  ZipFile: makeLambdaZipFileInput((event: { id: number }) => {
982
1098
  attempts.push(`tried order ${event.id}`);
@@ -992,7 +1108,7 @@ await lambda.putFunctionEventInvokeConfig(
992
1108
  MaximumRetryAttempts: 1,
993
1109
  DestinationConfig: {
994
1110
  OnFailure: {
995
- Destination: "arn:aws:sqs:us-east-1:888888888888:order-failures",
1111
+ Destination: queueArn,
996
1112
  },
997
1113
  },
998
1114
  }),
@@ -1041,33 +1157,67 @@ a config of its own, and an invocation of a qualifier with no config of its own
1041
1157
  `DeadLetterConfig` is the older way to keep a failed asynchronous invocation, and simulated Lambda
1042
1158
  takes it on `CreateFunction` and `UpdateFunctionConfiguration`. Its `TargetArn` names a simulated
1043
1159
  SQS queue or SNS topic, which receives the event as it was invoked rather than the destination
1044
- record around it.
1160
+ record around it. The execution role needs `sqs:SendMessage` for a queue or `sns:Publish` for a
1161
+ topic. A denied delivery rejects the background task and leaves the target unchanged.
1045
1162
 
1046
1163
  ```typescript sim-lambda-dead-letter-queue
1047
1164
  /**
1048
1165
  * A simulated Lambda function with a dead-letter queue.
1049
1166
  */
1050
1167
 
1168
+ import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
1051
1169
  import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
1052
1170
  import { CreateQueueCommand, ReceiveMessageCommand } from "@aws-sdk/client-sqs";
1053
1171
 
1054
1172
  import { SimAws } from "@kensio/yulin";
1055
1173
  import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
1056
1174
 
1057
- const simAws = new SimAws();
1175
+ const simAws = new SimAws({ defaultAccountId: "111111111111" });
1176
+ const iam = simAws.iam();
1058
1177
  const lambda = simAws.lambda();
1059
1178
  const sqs = simAws.sqs();
1179
+ const queueArn = `arn:aws:sqs:${simAws.defaultRegionName}:${simAws.defaultAccountId}:orders-dlq`;
1060
1180
 
1061
1181
  const created = await sqs.createQueue(
1062
1182
  new CreateQueueCommand({ QueueName: "orders-dlq" }),
1063
1183
  );
1064
1184
 
1185
+ const role = await iam.createRole(
1186
+ new CreateRoleCommand({
1187
+ RoleName: "OrdersRole",
1188
+ AssumeRolePolicyDocument: JSON.stringify({
1189
+ Version: "2012-10-17",
1190
+ Statement: {
1191
+ Effect: "Allow",
1192
+ Principal: { Service: "lambda.amazonaws.com" },
1193
+ Action: "sts:AssumeRole",
1194
+ },
1195
+ }),
1196
+ }),
1197
+ );
1198
+ const roleArn = role.Role.Arn;
1199
+
1200
+ await iam.putRolePolicy(
1201
+ new PutRolePolicyCommand({
1202
+ RoleName: "OrdersRole",
1203
+ PolicyName: "SendFailedOrders",
1204
+ PolicyDocument: JSON.stringify({
1205
+ Version: "2012-10-17",
1206
+ Statement: {
1207
+ Effect: "Allow",
1208
+ Action: "sqs:SendMessage",
1209
+ Resource: queueArn,
1210
+ },
1211
+ }),
1212
+ }),
1213
+ );
1214
+
1065
1215
  await lambda.createFunction(
1066
1216
  new CreateFunctionCommand({
1067
1217
  FunctionName: "orders",
1068
- Role: "arn:aws:iam::111111111111:role/OrdersRole",
1218
+ Role: roleArn,
1069
1219
  DeadLetterConfig: {
1070
- TargetArn: "arn:aws:sqs:us-east-1:888888888888:orders-dlq",
1220
+ TargetArn: queueArn,
1071
1221
  },
1072
1222
  Code: {
1073
1223
  ZipFile: makeLambdaZipFileInput(() => {
@@ -1755,15 +1905,152 @@ Advancing the simulation's clock is what hands the batch over again:
1755
1905
  await simAws.clock().advanceBy({ seconds: 30 });
1756
1906
  ```
1757
1907
 
1758
- The batch is delivered again five times, after 1, 2, 4, 8 and 16 seconds, so six deliveries in all.
1759
- Then it is discarded and the mapping carries on with the stream, as AWS does once a stream mapping's
1760
- error handling has run out.
1908
+ A mapping that asks for no limit of its own delivers the batch again five times, after 1, 2, 4, 8
1909
+ and 16 seconds, so six deliveries in all. Then it is discarded and the mapping carries on with the
1910
+ stream, as AWS does once a stream mapping's error handling has run out.
1911
+
1912
+ The delays are a simulator constraint. AWS documents no delay between attempts. A delay of zero here
1913
+ would fall due at the instant the clock already reads, and a handler that always throws would leave
1914
+ `advanceBy` with work falling due forever. The growing delay is also what lets a test walk through
1915
+ the attempts by advancing the clock.
1916
+
1917
+ The five attempts are a cap on a mapping that named neither of the limits below. AWS retries until
1918
+ the records age out of the stream, a day later, and waiting out a simulated day is the same hang
1919
+ with more steps.
1920
+
1921
+ ### Limiting the retries and the record age
1922
+
1923
+ `MaximumRetryAttempts` and `MaximumRecordAgeInSeconds` govern the same failed-batch lifecycle, and a
1924
+ stream mapping keeps both. `MaximumRetryAttempts: 0` makes one delivery and no retries, and a
1925
+ positive value allows that many retries after the first delivery. `MaximumRecordAgeInSeconds`
1926
+ discards a record once the next attempt would fall past that age. Lambda's `-1` means no limit
1927
+ (that is what a mapping naming neither reports back).
1928
+
1929
+ ```typescript sim-lambda-stream-retry-limits
1930
+ /**
1931
+ * Giving up on a stream batch once its retries have run out.
1932
+ */
1933
+
1934
+ import { CreateTableCommand, PutItemCommand } from "@aws-sdk/client-dynamodb";
1935
+ import { CreateRoleCommand, PutRolePolicyCommand } from "@aws-sdk/client-iam";
1936
+ import {
1937
+ CreateEventSourceMappingCommand,
1938
+ CreateFunctionCommand,
1939
+ } from "@aws-sdk/client-lambda";
1940
+
1941
+ import { SimAws } from "@kensio/yulin";
1942
+ import {
1943
+ makeLambdaZipFileInput,
1944
+ type SimLambdaDynamoDbStreamEvent,
1945
+ } from "@kensio/yulin/lambda";
1946
+
1947
+ const simAws = new SimAws();
1948
+
1949
+ const { TableDescription } = await simAws.dynamoDb().createTable(
1950
+ new CreateTableCommand({
1951
+ TableName: "orders",
1952
+ KeySchema: [{ AttributeName: "orderId", KeyType: "HASH" }],
1953
+ AttributeDefinitions: [{ AttributeName: "orderId", AttributeType: "S" }],
1954
+ BillingMode: "PAY_PER_REQUEST",
1955
+ StreamSpecification: {
1956
+ StreamEnabled: true,
1957
+ StreamViewType: "NEW_AND_OLD_IMAGES",
1958
+ },
1959
+ }),
1960
+ );
1961
+
1962
+ const streamArn = TableDescription?.LatestStreamArn;
1761
1963
 
1762
- Both the cadence and the number of attempts are simulator constraints rather than AWS behaviour. AWS
1763
- documents no delay between attempts and retries until the records age out of the stream, a day
1764
- later. A delay of zero here would fall due at the instant the clock already reads. A handler that
1765
- always throws would then leave `advanceBy` with work falling due forever, and waiting out a
1766
- simulated day is the same problem with more steps.
1964
+ const role = await simAws.iam().createRole(
1965
+ new CreateRoleCommand({
1966
+ RoleName: "OrderProjectorRole",
1967
+ AssumeRolePolicyDocument: JSON.stringify({
1968
+ Version: "2012-10-17",
1969
+ Statement: {
1970
+ Effect: "Allow",
1971
+ Principal: { Service: "lambda.amazonaws.com" },
1972
+ Action: "sts:AssumeRole",
1973
+ },
1974
+ }),
1975
+ }),
1976
+ );
1977
+
1978
+ await simAws.iam().putRolePolicy(
1979
+ new PutRolePolicyCommand({
1980
+ RoleName: "OrderProjectorRole",
1981
+ PolicyName: "ReadOrdersStream",
1982
+ PolicyDocument: JSON.stringify({
1983
+ Version: "2012-10-17",
1984
+ Statement: [
1985
+ {
1986
+ Effect: "Allow",
1987
+ Action: [
1988
+ "dynamodb:DescribeStream",
1989
+ "dynamodb:GetRecords",
1990
+ "dynamodb:GetShardIterator",
1991
+ ],
1992
+ Resource: streamArn,
1993
+ },
1994
+ { Effect: "Allow", Action: "dynamodb:ListStreams", Resource: "*" },
1995
+ ],
1996
+ }),
1997
+ }),
1998
+ );
1999
+
2000
+ // The handler never gets through the batch, so the retries are what decide
2001
+ // how many times it is given one.
2002
+ const deliveries: SimLambdaDynamoDbStreamEvent[] = [];
2003
+
2004
+ await simAws.lambda().createFunction(
2005
+ new CreateFunctionCommand({
2006
+ FunctionName: "order-projector",
2007
+ Role: role.Role.Arn,
2008
+ Code: {
2009
+ ZipFile: makeLambdaZipFileInput(
2010
+ (event: SimLambdaDynamoDbStreamEvent): undefined => {
2011
+ deliveries.push(event);
2012
+
2013
+ throw new Error("Projector could not handle the batch");
2014
+ },
2015
+ ),
2016
+ },
2017
+ }),
2018
+ );
2019
+
2020
+ await simAws.lambda().createEventSourceMapping(
2021
+ new CreateEventSourceMappingCommand({
2022
+ EventSourceArn: streamArn,
2023
+ FunctionName: "order-projector",
2024
+ StartingPosition: "TRIM_HORIZON",
2025
+ MaximumRetryAttempts: 2,
2026
+ MaximumRecordAgeInSeconds: 120,
2027
+ }),
2028
+ );
2029
+
2030
+ await simAws.dynamoDb().putItem(
2031
+ new PutItemCommand({
2032
+ TableName: "orders",
2033
+ Item: { orderId: { S: "order-1" }, total: { N: "42" } },
2034
+ }),
2035
+ );
2036
+
2037
+ await simAws.backgroundTasksComplete();
2038
+
2039
+ // The two retries fall due 1 and 2 seconds after the deliveries they follow.
2040
+ await simAws.clock().advanceBy({ seconds: 30 });
2041
+
2042
+ console.log(deliveries.length); // 3
2043
+ ```
2044
+
2045
+ Records age out of the front of a batch, since a batch is in stream order. A batch whose oldest
2046
+ records are past the age goes over again from the first record that is still young enough, and the
2047
+ shard keeps moving. A batch that has had its retries, or whose records have all aged out, is
2048
+ discarded, and the mapping reads on from behind it.
2049
+
2050
+ `GetEventSourceMapping` and `ListEventSourceMappings` report both values, and
2051
+ `AWS::Lambda::EventSourceMapping` takes both in a template. A value outside Lambda's range (`-1` to
2052
+ 10,000 retries, `-1` to 604,800 seconds) is a `ValidationException`. A queue mapping takes neither,
2053
+ because a message the handler never takes is left to the queue's own redrive policy.
1767
2054
 
1768
2055
  ### Reporting individual record failures
1769
2056
 
@@ -1797,7 +2084,7 @@ why a stream consumer has to be idempotent.
1797
2084
 
1798
2085
  So a report naming only the last record of a batch delivers that record again. A report naming the
1799
2086
  first record delivers the whole batch again. The redelivery is a retry like any other. It waits out
1800
- the same backoff, counts against the same five attempts, and what is left is discarded when they run
2087
+ the same backoff, counts against the same retries, and what is left is discarded when they run
1801
2088
  out.
1802
2089
 
1803
2090
  A report naming a sequence number that was not in the batch delivers the whole batch again, as real
@@ -2167,6 +2454,8 @@ AWS managed policy and CDK's own grant give a stream consumer. A role missing on
2167
2454
  handler names a record by its `sequenceNumber`, and the mapping goes back to the lowest one the
2168
2455
  report names, so that record and everything after it on that shard is delivered again. A failing
2169
2456
  batch blocks its own shard and no other.
2457
+ [`MaximumRetryAttempts` and `MaximumRecordAgeInSeconds`](#limiting-the-retries-and-the-record-age)
2458
+ work the same way here, and each shard counts its own attempts.
2170
2459
 
2171
2460
  A mapping naming an enhanced fan-out consumer ARN is refused, since consumers are unsimulated.
2172
2461
  `AWS::Lambda::EventSourceMapping` deploys a Kinesis mapping the same way it deploys a DynamoDB one.
@@ -2364,11 +2653,115 @@ the route key, the stage and the path parameters are the endpoint's rather than
2364
2653
  ### Managing a Function URL
2365
2654
 
2366
2655
  `GetFunctionUrlConfigCommand` reads the configuration back, `UpdateFunctionUrlConfigCommand`
2367
- changes the `AuthType` or `InvokeMode` while keeping the same endpoint, and
2656
+ changes the `AuthType`, `InvokeMode` or `Cors` while keeping the same endpoint, and
2368
2657
  `DeleteFunctionUrlConfigCommand` removes it, after which the hostname stops resolving and returns
2369
2658
  `404`. `ListFunctionUrlConfigsCommand` lists what a function has, which is one configuration or
2370
2659
  none, since a function has at most one Function URL.
2371
2660
 
2661
+ A `Cors` block on an update replaces the whole block the URL was created with. An update that leaves
2662
+ `Cors` out keeps the block already in place.
2663
+
2664
+ ### Cross-origin resource sharing
2665
+
2666
+ A Function URL created with a `Cors` block sends the CORS headers that block describes on every
2667
+ response it serves, and answers a browser preflight from the block alone.
2668
+
2669
+ ```typescript sim-lambda-function-url-cors
2670
+ /**
2671
+ * Serving a simulated Lambda Function URL configured for CORS.
2672
+ */
2673
+
2674
+ import {
2675
+ CreateFunctionCommand,
2676
+ CreateFunctionUrlConfigCommand,
2677
+ } from "@aws-sdk/client-lambda";
2678
+
2679
+ import { SimAws } from "@kensio/yulin";
2680
+ import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
2681
+ import { serveSimAws } from "@kensio/yulin/serve";
2682
+
2683
+ const simAws = new SimAws();
2684
+ const lambda = simAws.lambda();
2685
+
2686
+ await lambda.createFunction(
2687
+ new CreateFunctionCommand({
2688
+ FunctionName: "rates",
2689
+ Role: "arn:aws:iam::111111111111:role/RatesRole",
2690
+ Code: {
2691
+ ZipFile: makeLambdaZipFileInput(() => ({
2692
+ statusCode: 200,
2693
+ headers: { "content-type": "application/json" },
2694
+ body: JSON.stringify({ gbp: 1.27 }),
2695
+ })),
2696
+ },
2697
+ }),
2698
+ );
2699
+
2700
+ const urlConfig = await lambda.createFunctionUrlConfig(
2701
+ new CreateFunctionUrlConfigCommand({
2702
+ FunctionName: "rates",
2703
+ AuthType: "NONE",
2704
+ Cors: {
2705
+ AllowOrigins: ["https://shop.example.com"],
2706
+ AllowMethods: ["GET", "POST"],
2707
+ AllowHeaders: ["content-type"],
2708
+ ExposeHeaders: ["x-request-id"],
2709
+ AllowCredentials: true,
2710
+ MaxAge: 600,
2711
+ },
2712
+ }),
2713
+ );
2714
+
2715
+ const srv = await serveSimAws({ simAws });
2716
+ const endpoint = srv.localUrl(urlConfig.FunctionUrl);
2717
+
2718
+ try {
2719
+ const preflight = await fetch(endpoint, {
2720
+ method: "OPTIONS",
2721
+ headers: {
2722
+ origin: "https://shop.example.com",
2723
+ "access-control-request-method": "GET",
2724
+ },
2725
+ });
2726
+
2727
+ // 200 https://shop.example.com GET,POST
2728
+ console.log(
2729
+ preflight.status,
2730
+ preflight.headers.get("access-control-allow-origin"),
2731
+ preflight.headers.get("access-control-allow-methods"),
2732
+ );
2733
+
2734
+ const response = await fetch(endpoint, {
2735
+ headers: { origin: "https://shop.example.com" },
2736
+ });
2737
+
2738
+ // {"gbp":1.27} x-request-id
2739
+ console.log(
2740
+ await response.text(),
2741
+ response.headers.get("access-control-expose-headers"),
2742
+ );
2743
+ } finally {
2744
+ await srv.close();
2745
+ }
2746
+ ```
2747
+
2748
+ `AllowOrigins` decides what goes in `Access-Control-Allow-Origin`. A list holding `*` allows every
2749
+ Origin. Any other list is matched against the `Origin` header the request carried, and a request
2750
+ from an Origin the list does not name gets no `Access-Control-Allow-Origin` header. `AllowMethods`,
2751
+ `AllowHeaders` and `ExposeHeaders` each go out as one comma-separated header, and an empty list
2752
+ leaves its header off. `AllowCredentials` sends `Access-Control-Allow-Credentials: true` when it is
2753
+ set. `MaxAge` sets `Access-Control-Max-Age` in seconds.
2754
+
2755
+ A preflight is an `OPTIONS` request carrying both `Origin` and `Access-Control-Request-Method`.
2756
+ Lambda answers it from the configuration and the function never runs. Every other method reaches the
2757
+ handler, and the configured headers are added to the response it returned. A handler that sends CORS
2758
+ headers of its own leaves the response carrying both values, which is what real Lambda serves.
2759
+ Browsers report the duplicate as an error, so keep CORS on the Function URL and leave it out of the
2760
+ handler.
2761
+
2762
+ An `AWS_IAM` Function URL authorizes a preflight the way it authorizes any other request. A browser
2763
+ cannot sign the preflight it sends, and an unsigned request to that URL is answered with `403`.
2764
+
2372
2765
  ### IAM-authenticated Function URLs
2373
2766
 
2374
2767
  A URL created with `AuthType: "AWS_IAM"` invokes the function only for a caller allowed
@@ -2748,6 +3141,129 @@ otherwise. A time read at module scope is therefore read too early, exactly as i
2748
3141
  variables. See [simulated time](https://yulinsim.dev/time/) for the whole picture, including where real
2749
3142
  AWS puts the time on the event.
2750
3143
 
3144
+ ## Timers and the invocation deadline
3145
+
3146
+ A handler's `setTimeout`, `clearTimeout`, `setInterval` and `clearInterval` measure their delays on
3147
+ the simulation's clock. A handler that sleeps wakes when a test advances time past its delay, and a
3148
+ frozen clock holds it asleep for as long as the test wants. The timers belong to one invocation. Two
3149
+ simulations running at once each keep their own, and code outside an invocation keeps the host
3150
+ timers it already had.
3151
+
3152
+ A sleeping handler is released by the clock. A test asks for the invocation and moves time before
3153
+ waiting on the answer.
3154
+
3155
+ ```typescript sim-lambda-handler-timers
3156
+ /**
3157
+ * A simulated Lambda handler sleeping on the simulation's clock.
3158
+ */
3159
+
3160
+ import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
3161
+
3162
+ import { SimAws } from "@kensio/yulin";
3163
+ import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
3164
+
3165
+ const simAws = new SimAws();
3166
+ const lambda = simAws.lambda();
3167
+
3168
+ await lambda.createFunction(
3169
+ new CreateFunctionCommand({
3170
+ FunctionName: "batcher",
3171
+ Role: "arn:aws:iam::111111111111:role/BatcherRole",
3172
+ Timeout: 60,
3173
+ Code: {
3174
+ ZipFile: makeLambdaZipFileInput(async () => {
3175
+ await new Promise((resolve) => {
3176
+ setTimeout(resolve, 30_000);
3177
+ });
3178
+
3179
+ return "batched";
3180
+ }),
3181
+ },
3182
+ }),
3183
+ );
3184
+
3185
+ // Asked for and left running, because the handler is waiting on the clock.
3186
+ const invocation = lambda.invoke(
3187
+ new InvokeCommand({ FunctionName: "batcher" }),
3188
+ );
3189
+
3190
+ await simAws.clock().advanceBy({ seconds: 30 });
3191
+
3192
+ const output = await invocation;
3193
+ if (output.Payload === undefined) throw new Error("No invoke Payload");
3194
+ console.log(Buffer.from(output.Payload).toString());
3195
+ ```
3196
+
3197
+ An interval runs once for each period an advance covers. Advancing eleven seconds past a two second
3198
+ interval runs it five times. A delay of zero, or none at all, is due at the instant it was asked
3199
+ for, and a handler yielding with `setTimeout(resolve, 0)` gets going again without the clock moving.
3200
+
3201
+ The function's `Timeout` is a deadline on the same clock. Where it arrives before the handler
3202
+ answers, the invocation ends in the error the real runtime reports.
3203
+
3204
+ ```typescript sim-lambda-invocation-timeout
3205
+ /**
3206
+ * A simulated Lambda invocation running out of the time its Timeout allows.
3207
+ */
3208
+
3209
+ import { CreateFunctionCommand, InvokeCommand } from "@aws-sdk/client-lambda";
3210
+
3211
+ import { SimAws } from "@kensio/yulin";
3212
+ import { makeLambdaZipFileInput } from "@kensio/yulin/lambda";
3213
+
3214
+ const simAws = new SimAws();
3215
+ const lambda = simAws.lambda();
3216
+
3217
+ await lambda.createFunction(
3218
+ new CreateFunctionCommand({
3219
+ FunctionName: "slowcoach",
3220
+ Role: "arn:aws:iam::111111111111:role/SlowcoachRole",
3221
+ Timeout: 3,
3222
+ Code: {
3223
+ ZipFile: makeLambdaZipFileInput(async () => {
3224
+ await new Promise((resolve) => {
3225
+ setTimeout(resolve, 60_000);
3226
+ });
3227
+
3228
+ return "too late";
3229
+ }),
3230
+ },
3231
+ }),
3232
+ );
3233
+
3234
+ const invocation = lambda.invoke(
3235
+ new InvokeCommand({ FunctionName: "slowcoach" }),
3236
+ );
3237
+
3238
+ await simAws.clock().advanceBy({ seconds: 10 });
3239
+
3240
+ const output = await invocation;
3241
+ if (output.Payload === undefined) throw new Error("No invoke Payload");
3242
+
3243
+ // Unhandled
3244
+ console.log(output.FunctionError);
3245
+
3246
+ const failure = JSON.parse(Buffer.from(output.Payload).toString()) as {
3247
+ errorType: string;
3248
+ errorMessage: string;
3249
+ };
3250
+
3251
+ // Sandbox.Timedout
3252
+ console.log(failure.errorType);
3253
+ // <deadline instant> <request id> Task timed out after 3.00 seconds
3254
+ console.log(failure.errorMessage);
3255
+ ```
3256
+
3257
+ The log group gets the `ERROR Invoke Error` line the runtime writes, and `AWS/Lambda` counts an
3258
+ `Errors` datapoint beside the `Invocations`. A handler that answers after its deadline reaches
3259
+ nobody, and the timers it left running are given up with the rest of the invocation.
3260
+
3261
+ For an `Event` invocation a timeout is a failed attempt. It goes to the same
3262
+ [retries and destinations](#asynchronous-retries-and-destinations) an attempt that threw goes to.
3263
+
3264
+ A frozen clock never reaches the deadline. A handler under one runs for as long as the host process
3265
+ lets it, and `context.getRemainingTimeInMillis()` reports the same budget throughout.
3266
+
2751
3267
  ## What an invocation counts in CloudWatch
2752
3268
 
2753
3269
  Every invocation publishes `Invocations` and a `Duration` into `AWS/Lambda`, dimensioned by
@@ -3226,11 +3742,45 @@ const stack = await simAws.cloudFormation().deployTemplate({
3226
3742
  Type: "AWS::SQS::Queue",
3227
3743
  Properties: { QueueName: "orders-dlq" },
3228
3744
  },
3745
+ OrdersRole: {
3746
+ Type: "AWS::IAM::Role",
3747
+ Properties: {
3748
+ RoleName: "OrdersRole",
3749
+ AssumeRolePolicyDocument: {
3750
+ Version: "2012-10-17",
3751
+ Statement: [
3752
+ {
3753
+ Effect: "Allow",
3754
+ Principal: { Service: "lambda.amazonaws.com" },
3755
+ Action: "sts:AssumeRole",
3756
+ },
3757
+ ],
3758
+ },
3759
+ Policies: [
3760
+ {
3761
+ PolicyName: "SendFailedOrders",
3762
+ PolicyDocument: {
3763
+ Version: "2012-10-17",
3764
+ Statement: [
3765
+ {
3766
+ Effect: "Allow",
3767
+ Action: "sqs:SendMessage",
3768
+ Resource: [
3769
+ { "Fn::GetAtt": ["OrderFailures", "Arn"] },
3770
+ { "Fn::GetAtt": ["OrderDeadLetters", "Arn"] },
3771
+ ],
3772
+ },
3773
+ ],
3774
+ },
3775
+ },
3776
+ ],
3777
+ },
3778
+ },
3229
3779
  OrdersFunction: {
3230
3780
  Type: "AWS::Lambda::Function",
3231
3781
  Properties: {
3232
3782
  FunctionName: "orders",
3233
- Role: "arn:aws:iam::111111111111:role/OrdersRole",
3783
+ Role: { "Fn::GetAtt": ["OrdersRole", "Arn"] },
3234
3784
  Handler: "index.handler",
3235
3785
  Runtime: "nodejs22.x",
3236
3786
  Code: {
@@ -3529,9 +4079,12 @@ Sim Lambda currently supports:
3529
4079
  - `ListFunctionsCommand`, reporting every function in the Account and Region, and their published
3530
4080
  versions with `FunctionVersion: "ALL"`
3531
4081
  - `InvokeCommand`, with the `RequestResponse`, `Event` and `DryRun` invocation types
4082
+ - Handler timers on the simulation's clock, and the function's `Timeout` as a deadline on the same
4083
+ clock, reported as real Lambda reports a timeout
3532
4084
  - Asynchronous invocation retries on the simulated clock, and `OnSuccess`/`OnFailure` destinations
3533
4085
  written with `PutFunctionEventInvokeConfigCommand`, delivering the AWS destination record to a
3534
- simulated SQS queue, SNS topic, EventBridge event bus or Lambda function
4086
+ simulated SQS queue, SNS topic, EventBridge event bus or Lambda function after authorizing the
4087
+ target operation against the source function's execution role
3535
4088
  - `GetFunctionEventInvokeConfigCommand`, `UpdateFunctionEventInvokeConfigCommand`,
3536
4089
  `DeleteFunctionEventInvokeConfigCommand` and `ListFunctionEventInvokeConfigsCommand`, each taking
3537
4090
  a `Qualifier` for a version's or an alias's own config
@@ -3539,6 +4092,8 @@ Sim Lambda currently supports:
3539
4092
  event to a simulated SQS queue or SNS topic
3540
4093
  - Function URLs, created with `CreateFunctionUrlConfigCommand` and served over HTTP on localhost
3541
4094
  with `serveSimAws`
4095
+ - `Cors` on a Function URL, adding the configured headers to every response and answering a browser
4096
+ preflight without invoking the function
3542
4097
  - `iam:PassRole` authorization of the execution role named by `CreateFunctionCommand` and
3543
4098
  `UpdateFunctionConfigurationCommand`, with `iam:PassedToService` supplied
3544
4099
  - `AuthType: "AWS_IAM"` Function URLs, authorizing `lambda:InvokeFunctionUrl` against the caller
@@ -3554,6 +4109,8 @@ Sim Lambda currently supports:
3554
4109
  DynamoDB stream and Kinesis events and honouring `BatchSize`
3555
4110
  - `StartingPosition: "TRIM_HORIZON"` and `"LATEST"` on a stream mapping, and `"AT_TIMESTAMP"` on a
3556
4111
  Kinesis one, with a failing batch blocking its shard until it is through or discarded
4112
+ - `MaximumRetryAttempts` and `MaximumRecordAgeInSeconds` on a stream mapping, ending the retries at
4113
+ a quota or at a record age
3557
4114
  - Every shard of a Kinesis stream read by a processor of its own, as real Lambda reads one
3558
4115
  - `FunctionResponseTypes: ["ReportBatchItemFailures"]` on a queue mapping, returning only the
3559
4116
  message ids the handler reported, and on a stream mapping, rewinding to the lowest sequence number
@@ -3565,6 +4122,8 @@ Sim Lambda currently supports:
3565
4122
  - A Node.js `vm` runtime for zip-packaged code, with warm module state across invocations, and
3566
4123
  writable standard streams for handler output, including a bundled AWS Lambda Powertools logger's
3567
4124
  own console
4125
+ - Handler output recorded into the function's log group and forwarded to the host console, with
4126
+ `simAws.lambda().output().captureOnly()` to drop the forwarding
3568
4127
  - Per-function environment variables with `Environment.Variables`
3569
4128
  - Runtime-provided `@aws-sdk/*` packages inside function code, routed into the owning simulated AWS
3570
4129
  environment
@@ -3609,17 +4168,14 @@ Current documented limitations:
3609
4168
  settings simulated Lambda models, leaving out `Layers`, `VpcConfig`, `TracingConfig`, `KMSKeyArn`,
3610
4169
  `EphemeralStorage`, `SnapStart`, `LoggingConfig` and `RevisionId`. `ListFunctions` leaves out
3611
4170
  `Marker`/`MaxItems` paging and `MasterRegion`.
3612
- - A destination is delivered to without checking that the function's execution role may write to it.
3613
- Real Lambda delivers under that role and drops the record where the role cannot, which would be
3614
- silent, so simulated Lambda delivers instead. Nothing else about the destination has to be set up,
3615
- since a destination needs no resource policy on real AWS either.
3616
4171
  - SAM's `EventInvokeConfig` and `DeadLetterQueue` on `AWS::Serverless::Function` are left out. A
3617
4172
  SAM application declaring either deploys a function with the default retries, no destinations and
3618
4173
  no dead-letter target. The `AWS::Lambda::EventInvokeConfig` Resource and the `DeadLetterConfig`
3619
4174
  property a CloudFormation or CDK template writes are both deployed. See
3620
4175
  [retries and destinations in templates](#retries-and-destinations-in-templates).
3621
- - Throttling and timeouts do not drive a retry. A retry follows a handler that threw, and the
3622
- `MaximumEventAgeInSeconds` a config carries is measured from when the invocation was accepted.
4176
+ - Throttling does not drive a retry. A retry follows a handler that threw or ran out of time, and
4177
+ the `MaximumEventAgeInSeconds` a config carries is measured from when the invocation was
4178
+ accepted.
3623
4179
  - `DestinationConfig` on an event source mapping is left out. It is a different mechanism from the
3624
4180
  asynchronous invocation destinations above.
3625
4181
  - A settings change takes effect at once. Real Lambda reports `LastUpdateStatus: "InProgress"` while
@@ -3638,7 +4194,9 @@ Current documented limitations:
3638
4194
  - `requestContext.authorizer.iam` reports `accessKey` as empty, and `callerId` and `userId` as the
3639
4195
  caller ARN rather than the opaque unique id real AWS uses. `cognitoIdentity` and `principalOrgId`
3640
4196
  are always null.
3641
- - The Function URL `Cors` configuration is left out, including OPTIONS preflight handling.
4197
+ - A Function URL's `Cors` block is checked against the bounds the Lambda API documents for each
4198
+ member. Values inside those bounds are taken as they are. An `AllowOrigins` entry that is not a
4199
+ well-formed Origin is stored and matches no request.
3642
4200
  - `InvokeMode: "RESPONSE_STREAM"` is accepted and reported, but responses are always served
3643
4201
  buffered.
3644
4202
  - A function has at most one Function URL, and qualified (version or alias) Function URLs are left
@@ -3691,9 +4249,15 @@ Current documented limitations:
3691
4249
  - An unsigned request to a service API endpoint is served over HTTP when the simulation serves that
3692
4250
  endpoint, which today means Cognito's regional endpoint and the S3 endpoints. Anywhere else it is
3693
4251
  read as a Command and refused as one.
3694
- - `Timeout` is recorded and never interrupts handler execution.
3695
- - Timers inside a handler are host timers. `setTimeout` waits in real time, and advancing the
3696
- simulation's clock leaves a sleeping handler asleep.
4252
+ - A handler is interrupted at its deadline only where it yields. The deadline waits on the
4253
+ simulation's clock like any other work, and dispatching it needs the event loop, so a handler
4254
+ looping over the CPU without awaiting anything runs to the end of its loop.
4255
+ - The global `setTimeout`, `clearTimeout`, `setInterval` and `clearInterval` are the timers on the
4256
+ simulation's clock. `node:timers`, `node:timers/promises` and `util.promisify(setTimeout)` are
4257
+ imported directly rather than read from the globals, and they wait in real time.
4258
+ - Module-scope initialization time and execution environment recycling are left out. A cold start
4259
+ costs nothing against the deadline, and a function keeps one warm environment for as long as it
4260
+ exists.
3697
4261
  - A time read at module scope, like an environment variable read there, is read before any
3698
4262
  invocation and sees the host clock. See [The time inside a handler](#the-time-inside-a-handler).
3699
4263
  - `Event` invocation retries and failure destinations are left out, and handler errors are dropped.
@@ -3703,15 +4267,15 @@ Current documented limitations:
3703
4267
  it stands.
3704
4268
  - SQS queues, DynamoDB streams and Kinesis streams are the only event sources. Kafka, DocumentDB and
3705
4269
  Kinesis enhanced fan-out consumers are refused outright, and so are `FilterCriteria`,
3706
- `ScalingConfig`, `DestinationConfig`, `MaximumRetryAttempts`, `BisectBatchOnFunctionError`,
3707
- `ParallelizationFactor`, `TumblingWindowInSeconds` and the other mapping inputs this simulation
3708
- has no behaviour for.
3709
- - A stream batch is delivered again five times, after 1, 2, 4, 8 and 16 seconds, and then discarded.
3710
- AWS documents no delay between attempts and retries until the records age out. Both differences
3711
- are deliberate. A delay of zero falls due at the instant the clock already reads, and a handler
3712
- that always throws would leave `advanceBy` with work falling due forever. A batch item failure
3713
- report counts against the same five attempts, and never starts them again for the records it
3714
- rewound to.
4270
+ `ScalingConfig`, `DestinationConfig`, `BisectBatchOnFunctionError`, `ParallelizationFactor`,
4271
+ `TumblingWindowInSeconds` and the other mapping inputs this simulation has no behaviour for.
4272
+ - A failed stream batch waits 1, 2, 4, 8 and 16 seconds between attempts, where AWS documents no
4273
+ delay. That is deliberate. A delay of zero falls due at the instant the clock already reads, and a
4274
+ handler that always throws would leave `advanceBy` with work falling due forever. A mapping that
4275
+ names neither `MaximumRetryAttempts` nor `MaximumRecordAgeInSeconds` gets five retries and then
4276
+ discards the batch, where AWS goes on until the records age out a day later. A batch item failure
4277
+ report counts against the same retries, and never starts them again for the records it rewound
4278
+ to.
3715
4279
  - A handler writing into the table whose stream invoked it is refused with
3716
4280
  `SimLambdaStreamCascadeError` rather than being delivered its own writes forever. Real Lambda runs
3717
4281
  that loop.