@kensio/yulin 0.37.0 → 0.38.0

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 (488) hide show
  1. package/dist/sdk/router/resolve-sim-sdk-command-router.d.ts.map +1 -1
  2. package/dist/sdk/router/resolve-sim-sdk-command-router.js +3 -0
  3. package/dist/sdk/router/resolve-sim-sdk-command-router.js.map +1 -1
  4. package/dist/serve/controller/sim-service-controller.d.ts +13 -0
  5. package/dist/serve/controller/sim-service-controller.d.ts.map +1 -1
  6. package/dist/serve/controller/sim-service-controller.js.map +1 -1
  7. package/dist/serve/http/url/sim-aws-local-url.d.ts.map +1 -1
  8. package/dist/serve/http/url/sim-aws-local-url.js +5 -1
  9. package/dist/serve/http/url/sim-aws-local-url.js.map +1 -1
  10. package/dist/service/aws/factory/sim-aws-service-factory.d.ts +8 -0
  11. package/dist/service/aws/factory/sim-aws-service-factory.d.ts.map +1 -1
  12. package/dist/service/aws/factory/sim-aws-service-factory.js +14 -0
  13. package/dist/service/aws/factory/sim-aws-service-factory.js.map +1 -1
  14. package/dist/service/aws/sim-aws-account-region-scope.d.ts +5 -0
  15. package/dist/service/aws/sim-aws-account-region-scope.d.ts.map +1 -1
  16. package/dist/service/aws/sim-aws-account-region-scope.js +6 -0
  17. package/dist/service/aws/sim-aws-account-region-scope.js.map +1 -1
  18. package/dist/service/aws/sim-aws-account.d.ts +5 -0
  19. package/dist/service/aws/sim-aws-account.d.ts.map +1 -1
  20. package/dist/service/aws/sim-aws-account.js +6 -0
  21. package/dist/service/aws/sim-aws-account.js.map +1 -1
  22. package/dist/service/aws/sim-aws-region.d.ts +5 -0
  23. package/dist/service/aws/sim-aws-region.d.ts.map +1 -1
  24. package/dist/service/aws/sim-aws-region.js +6 -0
  25. package/dist/service/aws/sim-aws-region.js.map +1 -1
  26. package/dist/service/aws/sim-aws-request-authentication.d.ts +35 -0
  27. package/dist/service/aws/sim-aws-request-authentication.d.ts.map +1 -0
  28. package/dist/service/aws/sim-aws-request-authentication.js +32 -0
  29. package/dist/service/aws/sim-aws-request-authentication.js.map +1 -0
  30. package/dist/service/aws/sim-aws.d.ts +7 -21
  31. package/dist/service/aws/sim-aws.d.ts.map +1 -1
  32. package/dist/service/aws/sim-aws.js +15 -26
  33. package/dist/service/aws/sim-aws.js.map +1 -1
  34. package/dist/service/cloudformation/resource/dependency/sim-cfn-resource-dependencies.d.ts.map +1 -1
  35. package/dist/service/cloudformation/resource/dependency/sim-cfn-resource-dependencies.js +1 -1
  36. package/dist/service/cloudformation/resource/dependency/sim-cfn-resource-dependencies.js.map +1 -1
  37. package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js +1 -1
  38. package/dist/service/cloudfront/controller/dependency/sim-cf-controller-dependency.js.map +1 -1
  39. package/dist/service/cloudfront/router/sim-cloud-front-distro-router.d.ts.map +1 -1
  40. package/dist/service/cloudfront/router/sim-cloud-front-distro-router.js +2 -1
  41. package/dist/service/cloudfront/router/sim-cloud-front-distro-router.js.map +1 -1
  42. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts +56 -0
  43. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.d.ts.map +1 -1
  44. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js +66 -0
  45. package/dist/service/iam/authorize/allow/sim-iam-allow-requirement.js.map +1 -1
  46. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.d.ts +7 -1
  47. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.d.ts.map +1 -1
  48. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.js +11 -1
  49. package/dist/service/iam/authorize/allow/sim-iam-allow-statements.js.map +1 -1
  50. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.d.ts +17 -0
  51. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.d.ts.map +1 -0
  52. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.js +24 -0
  53. package/dist/service/iam/authorize/context/sim-iam-auth-z-allow-requirement.js.map +1 -0
  54. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts +10 -0
  55. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.d.ts.map +1 -1
  56. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js +3 -1
  57. package/dist/service/iam/authorize/context/sim-iam-auth-z-context-builder.js.map +1 -1
  58. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts +6 -1
  59. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.d.ts.map +1 -1
  60. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js +25 -16
  61. package/dist/service/iam/authorize/match/sim-iam-policy-principal-matcher.js.map +1 -1
  62. package/dist/service/iam/authorize/match/sim-iam-policy-statement-matcher.d.ts +2 -1
  63. package/dist/service/iam/authorize/match/sim-iam-policy-statement-matcher.d.ts.map +1 -1
  64. package/dist/service/iam/authorize/match/sim-iam-policy-statement-matcher.js +2 -1
  65. package/dist/service/iam/authorize/match/sim-iam-policy-statement-matcher.js.map +1 -1
  66. package/dist/service/iam/authorize/match/sim-iam-principal-match.d.ts +39 -0
  67. package/dist/service/iam/authorize/match/sim-iam-principal-match.d.ts.map +1 -0
  68. package/dist/service/iam/authorize/match/sim-iam-principal-match.js +55 -0
  69. package/dist/service/iam/authorize/match/sim-iam-principal-match.js.map +1 -0
  70. package/dist/service/iam/authorize/sim-iam-decision.d.ts.map +1 -1
  71. package/dist/service/iam/authorize/sim-iam-decision.js +3 -2
  72. package/dist/service/iam/authorize/sim-iam-decision.js.map +1 -1
  73. package/dist/service/iam/index.d.ts +1 -0
  74. package/dist/service/iam/index.d.ts.map +1 -1
  75. package/dist/service/iam/index.js +1 -0
  76. package/dist/service/iam/index.js.map +1 -1
  77. package/dist/service/iam/request/sim-aws-request-caller-resolver.d.ts +21 -5
  78. package/dist/service/iam/request/sim-aws-request-caller-resolver.d.ts.map +1 -1
  79. package/dist/service/iam/request/sim-aws-request-caller-resolver.js +15 -9
  80. package/dist/service/iam/request/sim-aws-request-caller-resolver.js.map +1 -1
  81. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-canonical-request.d.ts +3 -1
  82. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-canonical-request.d.ts.map +1 -1
  83. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-canonical-request.js +6 -4
  84. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-canonical-request.js.map +1 -1
  85. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-payload-hash.d.ts +34 -14
  86. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-payload-hash.d.ts.map +1 -1
  87. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-payload-hash.js +56 -29
  88. package/dist/service/iam/sigv4/canonical/sim-iam-sigv4-payload-hash.js.map +1 -1
  89. package/dist/service/iam/sigv4/error/sim-iam-sigv4.error.d.ts +13 -1
  90. package/dist/service/iam/sigv4/error/sim-iam-sigv4.error.d.ts.map +1 -1
  91. package/dist/service/iam/sigv4/error/sim-iam-sigv4.error.js +14 -0
  92. package/dist/service/iam/sigv4/error/sim-iam-sigv4.error.js.map +1 -1
  93. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-credential.d.ts +25 -0
  94. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-credential.d.ts.map +1 -0
  95. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-credential.js +41 -0
  96. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-credential.js.map +1 -0
  97. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-parameters.d.ts +27 -0
  98. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-parameters.d.ts.map +1 -0
  99. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-parameters.js +41 -0
  100. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-parameters.js.map +1 -0
  101. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-query.d.ts +39 -0
  102. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-query.d.ts.map +1 -0
  103. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-query.js +59 -0
  104. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-query.js.map +1 -0
  105. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-window.d.ts +30 -0
  106. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-window.d.ts.map +1 -0
  107. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-window.js +64 -0
  108. package/dist/service/iam/sigv4/presign/sim-iam-sigv4-presigned-window.js.map +1 -0
  109. package/dist/service/iam/sigv4/sim-iam-sigv4-authorization.d.ts +2 -1
  110. package/dist/service/iam/sigv4/sim-iam-sigv4-authorization.d.ts.map +1 -1
  111. package/dist/service/iam/sigv4/sim-iam-sigv4-authorization.js.map +1 -1
  112. package/dist/service/iam/sigv4/sim-iam-sigv4-request-date.d.ts +22 -1
  113. package/dist/service/iam/sigv4/sim-iam-sigv4-request-date.d.ts.map +1 -1
  114. package/dist/service/iam/sigv4/sim-iam-sigv4-request-date.js +49 -7
  115. package/dist/service/iam/sigv4/sim-iam-sigv4-request-date.js.map +1 -1
  116. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-check.d.ts +9 -2
  117. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-check.d.ts.map +1 -1
  118. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-check.js +5 -5
  119. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-check.js.map +1 -1
  120. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-statement.d.ts +16 -0
  121. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-statement.d.ts.map +1 -0
  122. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-statement.js +2 -0
  123. package/dist/service/iam/sigv4/sim-iam-sigv4-signature-statement.js.map +1 -0
  124. package/dist/service/iam/sigv4/sim-iam-sigv4-signing-credentials.d.ts +12 -3
  125. package/dist/service/iam/sigv4/sim-iam-sigv4-signing-credentials.d.ts.map +1 -1
  126. package/dist/service/iam/sigv4/sim-iam-sigv4-signing-credentials.js +9 -5
  127. package/dist/service/iam/sigv4/sim-iam-sigv4-signing-credentials.js.map +1 -1
  128. package/dist/service/iam/sigv4/sim-iam-sigv4-verifier.d.ts +20 -4
  129. package/dist/service/iam/sigv4/sim-iam-sigv4-verifier.d.ts.map +1 -1
  130. package/dist/service/iam/sigv4/sim-iam-sigv4-verifier.js +52 -6
  131. package/dist/service/iam/sigv4/sim-iam-sigv4-verifier.js.map +1 -1
  132. package/dist/service/kms/command/alias/alias.command.d.ts +43 -0
  133. package/dist/service/kms/command/alias/alias.command.d.ts.map +1 -0
  134. package/dist/service/kms/command/alias/alias.command.js +2 -0
  135. package/dist/service/kms/command/alias/alias.command.js.map +1 -0
  136. package/dist/service/kms/command/alias/sim-kms-alias-commands.d.ts +34 -0
  137. package/dist/service/kms/command/alias/sim-kms-alias-commands.d.ts.map +1 -0
  138. package/dist/service/kms/command/alias/sim-kms-alias-commands.js +56 -0
  139. package/dist/service/kms/command/alias/sim-kms-alias-commands.js.map +1 -0
  140. package/dist/service/kms/command/authorize/sim-kms-authorizer.d.ts +38 -0
  141. package/dist/service/kms/command/authorize/sim-kms-authorizer.d.ts.map +1 -0
  142. package/dist/service/kms/command/authorize/sim-kms-authorizer.js +58 -0
  143. package/dist/service/kms/command/authorize/sim-kms-authorizer.js.map +1 -0
  144. package/dist/service/kms/command/crypto/crypto.command.d.ts +68 -0
  145. package/dist/service/kms/command/crypto/crypto.command.d.ts.map +1 -0
  146. package/dist/service/kms/command/crypto/crypto.command.js +2 -0
  147. package/dist/service/kms/command/crypto/crypto.command.js.map +1 -0
  148. package/dist/service/kms/command/crypto/sim-kms-ciphertext-key.d.ts +40 -0
  149. package/dist/service/kms/command/crypto/sim-kms-ciphertext-key.d.ts.map +1 -0
  150. package/dist/service/kms/command/crypto/sim-kms-ciphertext-key.js +58 -0
  151. package/dist/service/kms/command/crypto/sim-kms-ciphertext-key.js.map +1 -0
  152. package/dist/service/kms/command/crypto/sim-kms-crypto-commands.d.ts +38 -0
  153. package/dist/service/kms/command/crypto/sim-kms-crypto-commands.d.ts.map +1 -0
  154. package/dist/service/kms/command/crypto/sim-kms-crypto-commands.js +74 -0
  155. package/dist/service/kms/command/crypto/sim-kms-crypto-commands.js.map +1 -0
  156. package/dist/service/kms/command/crypto/sim-kms-data-key-spec.d.ts +16 -0
  157. package/dist/service/kms/command/crypto/sim-kms-data-key-spec.d.ts.map +1 -0
  158. package/dist/service/kms/command/crypto/sim-kms-data-key-spec.js +50 -0
  159. package/dist/service/kms/command/crypto/sim-kms-data-key-spec.js.map +1 -0
  160. package/dist/service/kms/command/crypto/sim-kms-generate-data-key.d.ts +31 -0
  161. package/dist/service/kms/command/crypto/sim-kms-generate-data-key.d.ts.map +1 -0
  162. package/dist/service/kms/command/crypto/sim-kms-generate-data-key.js +35 -0
  163. package/dist/service/kms/command/crypto/sim-kms-generate-data-key.js.map +1 -0
  164. package/dist/service/kms/command/key/key.command.d.ts +159 -0
  165. package/dist/service/kms/command/key/key.command.d.ts.map +1 -0
  166. package/dist/service/kms/command/key/key.command.js +2 -0
  167. package/dist/service/kms/command/key/key.command.js.map +1 -0
  168. package/dist/service/kms/command/key/sim-kms-key-commands.d.ts +41 -0
  169. package/dist/service/kms/command/key/sim-kms-key-commands.d.ts.map +1 -0
  170. package/dist/service/kms/command/key/sim-kms-key-commands.js +45 -0
  171. package/dist/service/kms/command/key/sim-kms-key-commands.js.map +1 -0
  172. package/dist/service/kms/command/key/sim-kms-key-lifecycle-commands.d.ts +48 -0
  173. package/dist/service/kms/command/key/sim-kms-key-lifecycle-commands.d.ts.map +1 -0
  174. package/dist/service/kms/command/key/sim-kms-key-lifecycle-commands.js +67 -0
  175. package/dist/service/kms/command/key/sim-kms-key-lifecycle-commands.js.map +1 -0
  176. package/dist/service/kms/command/key/sim-kms-key-policy-commands.d.ts +39 -0
  177. package/dist/service/kms/command/key/sim-kms-key-policy-commands.d.ts.map +1 -0
  178. package/dist/service/kms/command/key/sim-kms-key-policy-commands.js +57 -0
  179. package/dist/service/kms/command/key/sim-kms-key-policy-commands.js.map +1 -0
  180. package/dist/service/kms/command/key/sim-kms-key-type.d.ts +14 -0
  181. package/dist/service/kms/command/key/sim-kms-key-type.d.ts.map +1 -0
  182. package/dist/service/kms/command/key/sim-kms-key-type.js +31 -0
  183. package/dist/service/kms/command/key/sim-kms-key-type.js.map +1 -0
  184. package/dist/service/kms/command/key/sim-kms-list-keys.d.ts +29 -0
  185. package/dist/service/kms/command/key/sim-kms-list-keys.d.ts.map +1 -0
  186. package/dist/service/kms/command/key/sim-kms-list-keys.js +31 -0
  187. package/dist/service/kms/command/key/sim-kms-list-keys.js.map +1 -0
  188. package/dist/service/kms/command/key/sim-kms-pending-window.d.ts +17 -0
  189. package/dist/service/kms/command/key/sim-kms-pending-window.d.ts.map +1 -0
  190. package/dist/service/kms/command/key/sim-kms-pending-window.js +37 -0
  191. package/dist/service/kms/command/key/sim-kms-pending-window.js.map +1 -0
  192. package/dist/service/kms/command/sim-kms-command.types.d.ts +10 -0
  193. package/dist/service/kms/command/sim-kms-command.types.d.ts.map +1 -0
  194. package/dist/service/kms/command/sim-kms-command.types.js +2 -0
  195. package/dist/service/kms/command/sim-kms-command.types.js.map +1 -0
  196. package/dist/service/kms/error/sim-kms.error.d.ts +88 -0
  197. package/dist/service/kms/error/sim-kms.error.d.ts.map +1 -0
  198. package/dist/service/kms/error/sim-kms.error.js +101 -0
  199. package/dist/service/kms/error/sim-kms.error.js.map +1 -0
  200. package/dist/service/kms/index.d.ts +8 -0
  201. package/dist/service/kms/index.d.ts.map +1 -0
  202. package/dist/service/kms/index.js +6 -0
  203. package/dist/service/kms/index.js.map +1 -0
  204. package/dist/service/kms/key/sim-kms-alias.d.ts +45 -0
  205. package/dist/service/kms/key/sim-kms-alias.d.ts.map +1 -0
  206. package/dist/service/kms/key/sim-kms-alias.js +59 -0
  207. package/dist/service/kms/key/sim-kms-alias.js.map +1 -0
  208. package/dist/service/kms/key/sim-kms-ciphertext-blob.d.ts +43 -0
  209. package/dist/service/kms/key/sim-kms-ciphertext-blob.d.ts.map +1 -0
  210. package/dist/service/kms/key/sim-kms-ciphertext-blob.js +89 -0
  211. package/dist/service/kms/key/sim-kms-ciphertext-blob.js.map +1 -0
  212. package/dist/service/kms/key/sim-kms-encryption-context.d.ts +34 -0
  213. package/dist/service/kms/key/sim-kms-encryption-context.d.ts.map +1 -0
  214. package/dist/service/kms/key/sim-kms-encryption-context.js +39 -0
  215. package/dist/service/kms/key/sim-kms-encryption-context.js.map +1 -0
  216. package/dist/service/kms/key/sim-kms-key-factory.d.ts +36 -0
  217. package/dist/service/kms/key/sim-kms-key-factory.d.ts.map +1 -0
  218. package/dist/service/kms/key/sim-kms-key-factory.js +47 -0
  219. package/dist/service/kms/key/sim-kms-key-factory.js.map +1 -0
  220. package/dist/service/kms/key/sim-kms-key-identifier.d.ts +44 -0
  221. package/dist/service/kms/key/sim-kms-key-identifier.d.ts.map +1 -0
  222. package/dist/service/kms/key/sim-kms-key-identifier.js +81 -0
  223. package/dist/service/kms/key/sim-kms-key-identifier.js.map +1 -0
  224. package/dist/service/kms/key/sim-kms-key-lifecycle.d.ts +71 -0
  225. package/dist/service/kms/key/sim-kms-key-lifecycle.d.ts.map +1 -0
  226. package/dist/service/kms/key/sim-kms-key-lifecycle.js +106 -0
  227. package/dist/service/kms/key/sim-kms-key-lifecycle.js.map +1 -0
  228. package/dist/service/kms/key/sim-kms-key-material.d.ts +36 -0
  229. package/dist/service/kms/key/sim-kms-key-material.d.ts.map +1 -0
  230. package/dist/service/kms/key/sim-kms-key-material.js +74 -0
  231. package/dist/service/kms/key/sim-kms-key-material.js.map +1 -0
  232. package/dist/service/kms/key/sim-kms-key-metadata.d.ts +45 -0
  233. package/dist/service/kms/key/sim-kms-key-metadata.d.ts.map +1 -0
  234. package/dist/service/kms/key/sim-kms-key-metadata.js +44 -0
  235. package/dist/service/kms/key/sim-kms-key-metadata.js.map +1 -0
  236. package/dist/service/kms/key/sim-kms-key-policy.d.ts +45 -0
  237. package/dist/service/kms/key/sim-kms-key-policy.d.ts.map +1 -0
  238. package/dist/service/kms/key/sim-kms-key-policy.js +69 -0
  239. package/dist/service/kms/key/sim-kms-key-policy.js.map +1 -0
  240. package/dist/service/kms/key/sim-kms-key-store.d.ts +58 -0
  241. package/dist/service/kms/key/sim-kms-key-store.d.ts.map +1 -0
  242. package/dist/service/kms/key/sim-kms-key-store.js +111 -0
  243. package/dist/service/kms/key/sim-kms-key-store.js.map +1 -0
  244. package/dist/service/kms/key/sim-kms-key.d.ts +88 -0
  245. package/dist/service/kms/key/sim-kms-key.d.ts.map +1 -0
  246. package/dist/service/kms/key/sim-kms-key.js +106 -0
  247. package/dist/service/kms/key/sim-kms-key.js.map +1 -0
  248. package/dist/service/kms/key/sim-kms-policy-document.d.ts +30 -0
  249. package/dist/service/kms/key/sim-kms-policy-document.d.ts.map +1 -0
  250. package/dist/service/kms/key/sim-kms-policy-document.js +54 -0
  251. package/dist/service/kms/key/sim-kms-policy-document.js.map +1 -0
  252. package/dist/service/kms/sdk/sim-kms-sdk-command-router.d.ts +18 -0
  253. package/dist/service/kms/sdk/sim-kms-sdk-command-router.d.ts.map +1 -0
  254. package/dist/service/kms/sdk/sim-kms-sdk-command-router.js +80 -0
  255. package/dist/service/kms/sdk/sim-kms-sdk-command-router.js.map +1 -0
  256. package/dist/service/kms/sim-kms.d.ts +105 -0
  257. package/dist/service/kms/sim-kms.d.ts.map +1 -0
  258. package/dist/service/kms/sim-kms.js +187 -0
  259. package/dist/service/kms/sim-kms.js.map +1 -0
  260. package/dist/service/lambda/command/create-function/create-function.handler.d.ts.map +1 -1
  261. package/dist/service/lambda/command/create-function/create-function.handler.js +3 -0
  262. package/dist/service/lambda/command/create-function/create-function.handler.js.map +1 -1
  263. package/dist/service/lambda/function/code/sim-lambda-code-resolver.d.ts +6 -0
  264. package/dist/service/lambda/function/code/sim-lambda-code-resolver.d.ts.map +1 -1
  265. package/dist/service/lambda/function/code/sim-lambda-code-resolver.js +1 -0
  266. package/dist/service/lambda/function/code/sim-lambda-code-resolver.js.map +1 -1
  267. package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts +15 -0
  268. package/dist/service/lambda/function/code/sim-lambda-executable-code.d.ts.map +1 -1
  269. package/dist/service/lambda/function/code/sim-lambda-executable-code.js +5 -0
  270. package/dist/service/lambda/function/code/sim-lambda-executable-code.js.map +1 -1
  271. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code-factory.d.ts +3 -0
  272. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code-factory.d.ts.map +1 -1
  273. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code-factory.js +3 -0
  274. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code-factory.js.map +1 -1
  275. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts +11 -0
  276. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.d.ts.map +1 -1
  277. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js +7 -2
  278. package/dist/service/lambda/function/code/sim-lambda-vm-zip-code.js.map +1 -1
  279. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts +6 -5
  280. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.d.ts.map +1 -1
  281. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js +10 -5
  282. package/dist/service/lambda/function/code/vm/sim-lambda-vm-context.js.map +1 -1
  283. package/dist/service/lambda/function/invoke/sim-lambda-process-clock.d.ts +53 -0
  284. package/dist/service/lambda/function/invoke/sim-lambda-process-clock.d.ts.map +1 -0
  285. package/dist/service/lambda/function/invoke/sim-lambda-process-clock.js +101 -0
  286. package/dist/service/lambda/function/invoke/sim-lambda-process-clock.js.map +1 -0
  287. package/dist/service/lambda/function/sim-lambda-function.d.ts +8 -0
  288. package/dist/service/lambda/function/sim-lambda-function.d.ts.map +1 -1
  289. package/dist/service/lambda/function/sim-lambda-function.js +15 -1
  290. package/dist/service/lambda/function/sim-lambda-function.js.map +1 -1
  291. package/dist/service/lambda/serve/sim-lambda-url-router.js +1 -1
  292. package/dist/service/lambda/serve/sim-lambda-url-router.js.map +1 -1
  293. package/dist/service/route53/resolve/sim-r53-service-target-resolver.d.ts +14 -0
  294. package/dist/service/route53/resolve/sim-r53-service-target-resolver.d.ts.map +1 -1
  295. package/dist/service/route53/resolve/sim-r53-service-target-resolver.js +38 -0
  296. package/dist/service/route53/resolve/sim-r53-service-target-resolver.js.map +1 -1
  297. package/dist/service/s3/bucket/public-access/sim-s3-pinning-condition.d.ts +7 -0
  298. package/dist/service/s3/bucket/public-access/sim-s3-pinning-condition.d.ts.map +1 -0
  299. package/dist/service/s3/bucket/public-access/sim-s3-pinning-condition.js +73 -0
  300. package/dist/service/s3/bucket/public-access/sim-s3-pinning-condition.js.map +1 -0
  301. package/dist/service/s3/bucket/public-access/sim-s3-public-access-block.d.ts +61 -0
  302. package/dist/service/s3/bucket/public-access/sim-s3-public-access-block.d.ts.map +1 -0
  303. package/dist/service/s3/bucket/public-access/sim-s3-public-access-block.js +57 -0
  304. package/dist/service/s3/bucket/public-access/sim-s3-public-access-block.js.map +1 -0
  305. package/dist/service/s3/bucket/public-access/sim-s3-public-policy-guard.d.ts +19 -0
  306. package/dist/service/s3/bucket/public-access/sim-s3-public-policy-guard.d.ts.map +1 -0
  307. package/dist/service/s3/bucket/public-access/sim-s3-public-policy-guard.js +28 -0
  308. package/dist/service/s3/bucket/public-access/sim-s3-public-policy-guard.js.map +1 -0
  309. package/dist/service/s3/bucket/public-access/sim-s3-public-policy.d.ts +18 -0
  310. package/dist/service/s3/bucket/public-access/sim-s3-public-policy.d.ts.map +1 -0
  311. package/dist/service/s3/bucket/public-access/sim-s3-public-policy.js +35 -0
  312. package/dist/service/s3/bucket/public-access/sim-s3-public-policy.js.map +1 -0
  313. package/dist/service/s3/bucket/public-access/sim-s3-public-principal.d.ts +11 -0
  314. package/dist/service/s3/bucket/public-access/sim-s3-public-principal.d.ts.map +1 -0
  315. package/dist/service/s3/bucket/public-access/sim-s3-public-principal.js +34 -0
  316. package/dist/service/s3/bucket/public-access/sim-s3-public-principal.js.map +1 -0
  317. package/dist/service/s3/bucket/sim-s3-bucket-arn.d.ts +9 -0
  318. package/dist/service/s3/bucket/sim-s3-bucket-arn.d.ts.map +1 -0
  319. package/dist/service/s3/bucket/sim-s3-bucket-arn.js +10 -0
  320. package/dist/service/s3/bucket/sim-s3-bucket-arn.js.map +1 -0
  321. package/dist/service/s3/bucket/sim-s3-bucket.d.ts +25 -0
  322. package/dist/service/s3/bucket/sim-s3-bucket.d.ts.map +1 -1
  323. package/dist/service/s3/bucket/sim-s3-bucket.js +34 -1
  324. package/dist/service/s3/bucket/sim-s3-bucket.js.map +1 -1
  325. package/dist/service/s3/bucket/sim-s3-endpoint-url.d.ts +16 -0
  326. package/dist/service/s3/bucket/sim-s3-endpoint-url.d.ts.map +1 -0
  327. package/dist/service/s3/bucket/sim-s3-endpoint-url.js +19 -0
  328. package/dist/service/s3/bucket/sim-s3-endpoint-url.js.map +1 -0
  329. package/dist/service/s3/bucket/website/sim-s3-public-website.fixture.d.ts +13 -0
  330. package/dist/service/s3/bucket/website/sim-s3-public-website.fixture.d.ts.map +1 -0
  331. package/dist/service/s3/bucket/website/sim-s3-public-website.fixture.js +36 -0
  332. package/dist/service/s3/bucket/website/sim-s3-public-website.fixture.js.map +1 -0
  333. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.d.ts +27 -0
  334. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.d.ts.map +1 -0
  335. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.js +92 -0
  336. package/dist/service/s3/cfn/bucket/sim-cfn-s3-bucket-creator.js.map +1 -0
  337. package/dist/service/s3/cfn/bucket-policy/sim-cfn-s3-bucket-policy-creator.d.ts +32 -0
  338. package/dist/service/s3/cfn/bucket-policy/sim-cfn-s3-bucket-policy-creator.d.ts.map +1 -0
  339. package/dist/service/s3/cfn/bucket-policy/sim-cfn-s3-bucket-policy-creator.js +55 -0
  340. package/dist/service/s3/cfn/bucket-policy/sim-cfn-s3-bucket-policy-creator.js.map +1 -0
  341. package/dist/service/s3/cfn/sim-cfn-s3-resource-factory.d.ts +2 -4
  342. package/dist/service/s3/cfn/sim-cfn-s3-resource-factory.d.ts.map +1 -1
  343. package/dist/service/s3/cfn/sim-cfn-s3-resource-factory.js +10 -61
  344. package/dist/service/s3/cfn/sim-cfn-s3-resource-factory.js.map +1 -1
  345. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.d.ts +11 -0
  346. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.d.ts.map +1 -0
  347. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.js +22 -0
  348. package/dist/service/s3/command/authorize/sim-s3-bucket-resource-policies.js.map +1 -0
  349. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy-authorizer.d.ts +23 -0
  350. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy-authorizer.d.ts.map +1 -0
  351. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy-authorizer.js +36 -0
  352. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy-authorizer.js.map +1 -0
  353. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.command.d.ts +20 -0
  354. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.command.d.ts.map +1 -0
  355. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.command.js +2 -0
  356. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.command.js.map +1 -0
  357. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.handler.d.ts +32 -0
  358. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.handler.d.ts.map +1 -0
  359. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.handler.js +37 -0
  360. package/dist/service/s3/command/delete-bucket-policy/delete-bucket-policy.handler.js.map +1 -0
  361. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.command.d.ts +20 -0
  362. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.command.d.ts.map +1 -0
  363. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.command.js +2 -0
  364. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.command.js.map +1 -0
  365. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.handler.d.ts +30 -0
  366. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.handler.d.ts.map +1 -0
  367. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.handler.js +35 -0
  368. package/dist/service/s3/command/delete-public-access-block/delete-public-access-block.handler.js.map +1 -0
  369. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy-authorizer.d.ts +20 -0
  370. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy-authorizer.d.ts.map +1 -0
  371. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy-authorizer.js +33 -0
  372. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy-authorizer.js.map +1 -0
  373. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.command.d.ts +24 -0
  374. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.command.d.ts.map +1 -0
  375. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.command.js +2 -0
  376. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.command.js.map +1 -0
  377. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.handler.d.ts +29 -0
  378. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.handler.d.ts.map +1 -0
  379. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.handler.js +40 -0
  380. package/dist/service/s3/command/get-bucket-policy/get-bucket-policy.handler.js.map +1 -0
  381. package/dist/service/s3/command/get-public-access-block/get-public-access-block.command.d.ts +22 -0
  382. package/dist/service/s3/command/get-public-access-block/get-public-access-block.command.d.ts.map +1 -0
  383. package/dist/service/s3/command/get-public-access-block/get-public-access-block.command.js +2 -0
  384. package/dist/service/s3/command/get-public-access-block/get-public-access-block.command.js.map +1 -0
  385. package/dist/service/s3/command/get-public-access-block/get-public-access-block.handler.d.ts +32 -0
  386. package/dist/service/s3/command/get-public-access-block/get-public-access-block.handler.d.ts.map +1 -0
  387. package/dist/service/s3/command/get-public-access-block/get-public-access-block.handler.js +39 -0
  388. package/dist/service/s3/command/get-public-access-block/get-public-access-block.handler.js.map +1 -0
  389. package/dist/service/s3/command/public-access-block/sim-s3-public-access-block-authorizer.d.ts +31 -0
  390. package/dist/service/s3/command/public-access-block/sim-s3-public-access-block-authorizer.d.ts.map +1 -0
  391. package/dist/service/s3/command/public-access-block/sim-s3-public-access-block-authorizer.js +48 -0
  392. package/dist/service/s3/command/public-access-block/sim-s3-public-access-block-authorizer.js.map +1 -0
  393. package/dist/service/s3/command/put-bucket-policy/put-bucket-policy.handler.d.ts +1 -0
  394. package/dist/service/s3/command/put-bucket-policy/put-bucket-policy.handler.d.ts.map +1 -1
  395. package/dist/service/s3/command/put-bucket-policy/put-bucket-policy.handler.js +7 -6
  396. package/dist/service/s3/command/put-bucket-policy/put-bucket-policy.handler.js.map +1 -1
  397. package/dist/service/s3/command/put-public-access-block/put-public-access-block.command.d.ts +22 -0
  398. package/dist/service/s3/command/put-public-access-block/put-public-access-block.command.d.ts.map +1 -0
  399. package/dist/service/s3/command/put-public-access-block/put-public-access-block.command.js +2 -0
  400. package/dist/service/s3/command/put-public-access-block/put-public-access-block.command.js.map +1 -0
  401. package/dist/service/s3/command/put-public-access-block/put-public-access-block.handler.d.ts +33 -0
  402. package/dist/service/s3/command/put-public-access-block/put-public-access-block.handler.d.ts.map +1 -0
  403. package/dist/service/s3/command/put-public-access-block/put-public-access-block.handler.js +40 -0
  404. package/dist/service/s3/command/put-public-access-block/put-public-access-block.handler.js.map +1 -0
  405. package/dist/service/s3/command/require-sim-s3-bucket.d.ts +10 -0
  406. package/dist/service/s3/command/require-sim-s3-bucket.d.ts.map +1 -0
  407. package/dist/service/s3/command/require-sim-s3-bucket.js +16 -0
  408. package/dist/service/s3/command/require-sim-s3-bucket.js.map +1 -0
  409. package/dist/service/s3/command/sim-s3-command-handlers.d.ts +91 -0
  410. package/dist/service/s3/command/sim-s3-command-handlers.d.ts.map +1 -0
  411. package/dist/service/s3/command/sim-s3-command-handlers.js +115 -0
  412. package/dist/service/s3/command/sim-s3-command-handlers.js.map +1 -0
  413. package/dist/service/s3/command/sim-s3-command.types.d.ts +19 -0
  414. package/dist/service/s3/command/sim-s3-command.types.d.ts.map +1 -0
  415. package/dist/service/s3/command/sim-s3-command.types.js +8 -0
  416. package/dist/service/s3/command/sim-s3-command.types.js.map +1 -0
  417. package/dist/service/s3/error/sim-s3-checksum.error.d.ts +28 -0
  418. package/dist/service/s3/error/sim-s3-checksum.error.d.ts.map +1 -0
  419. package/dist/service/s3/error/sim-s3-checksum.error.js +32 -0
  420. package/dist/service/s3/error/sim-s3-checksum.error.js.map +1 -0
  421. package/dist/service/s3/error/sim-s3.error.d.ts +20 -0
  422. package/dist/service/s3/error/sim-s3.error.d.ts.map +1 -1
  423. package/dist/service/s3/error/sim-s3.error.js +24 -0
  424. package/dist/service/s3/error/sim-s3.error.js.map +1 -1
  425. package/dist/service/s3/sdk/sim-s3-sdk-command-router.d.ts.map +1 -1
  426. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js +20 -0
  427. package/dist/service/s3/sdk/sim-s3-sdk-command-router.js.map +1 -1
  428. package/dist/service/s3/serve/sim-s3-bucket-locator.d.ts +40 -0
  429. package/dist/service/s3/serve/sim-s3-bucket-locator.d.ts.map +1 -0
  430. package/dist/service/s3/serve/sim-s3-bucket-locator.js +59 -0
  431. package/dist/service/s3/serve/sim-s3-bucket-locator.js.map +1 -0
  432. package/dist/service/s3/serve/sim-s3-controller.d.ts +7 -0
  433. package/dist/service/s3/serve/sim-s3-controller.d.ts.map +1 -1
  434. package/dist/service/s3/serve/sim-s3-controller.js +14 -2
  435. package/dist/service/s3/serve/sim-s3-controller.js.map +1 -1
  436. package/dist/service/s3/serve/sim-s3-get-object-controller.d.ts +40 -6
  437. package/dist/service/s3/serve/sim-s3-get-object-controller.d.ts.map +1 -1
  438. package/dist/service/s3/serve/sim-s3-get-object-controller.js +80 -49
  439. package/dist/service/s3/serve/sim-s3-get-object-controller.js.map +1 -1
  440. package/dist/service/s3/serve/sim-s3-object-address.d.ts +42 -0
  441. package/dist/service/s3/serve/sim-s3-object-address.d.ts.map +1 -0
  442. package/dist/service/s3/serve/sim-s3-object-address.js +66 -0
  443. package/dist/service/s3/serve/sim-s3-object-address.js.map +1 -0
  444. package/dist/service/s3/serve/sim-s3-request-router.d.ts +18 -13
  445. package/dist/service/s3/serve/sim-s3-request-router.d.ts.map +1 -1
  446. package/dist/service/s3/serve/sim-s3-request-router.js +72 -48
  447. package/dist/service/s3/serve/sim-s3-request-router.js.map +1 -1
  448. package/dist/service/s3/serve/sim-s3-rest-controller.d.ts +36 -0
  449. package/dist/service/s3/serve/sim-s3-rest-controller.d.ts.map +1 -0
  450. package/dist/service/s3/serve/sim-s3-rest-controller.js +92 -0
  451. package/dist/service/s3/serve/sim-s3-rest-controller.js.map +1 -0
  452. package/dist/service/s3/serve/sim-s3-rest-error-response.d.ts +28 -0
  453. package/dist/service/s3/serve/sim-s3-rest-error-response.d.ts.map +1 -0
  454. package/dist/service/s3/serve/sim-s3-rest-error-response.js +63 -0
  455. package/dist/service/s3/serve/sim-s3-rest-error-response.js.map +1 -0
  456. package/dist/service/s3/serve/sim-s3-rest-refusal.d.ts +7 -0
  457. package/dist/service/s3/serve/sim-s3-rest-refusal.d.ts.map +1 -0
  458. package/dist/service/s3/serve/sim-s3-rest-refusal.js +18 -0
  459. package/dist/service/s3/serve/sim-s3-rest-refusal.js.map +1 -0
  460. package/dist/service/s3/serve/sim-s3-route.d.ts +40 -0
  461. package/dist/service/s3/serve/sim-s3-route.d.ts.map +1 -0
  462. package/dist/service/s3/serve/sim-s3-route.js +7 -0
  463. package/dist/service/s3/serve/sim-s3-route.js.map +1 -0
  464. package/dist/service/s3/serve/sim-s3-upload-checksum.d.ts +27 -0
  465. package/dist/service/s3/serve/sim-s3-upload-checksum.d.ts.map +1 -0
  466. package/dist/service/s3/serve/sim-s3-upload-checksum.js +86 -0
  467. package/dist/service/s3/serve/sim-s3-upload-checksum.js.map +1 -0
  468. package/dist/service/s3/serve/website/sim-s3-website-object-loader.d.ts +51 -0
  469. package/dist/service/s3/serve/website/sim-s3-website-object-loader.d.ts.map +1 -0
  470. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js +75 -0
  471. package/dist/service/s3/serve/website/sim-s3-website-object-loader.js.map +1 -0
  472. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts +18 -0
  473. package/dist/service/s3/serve/website/sim-s3-website-object.d.ts.map +1 -0
  474. package/dist/service/s3/serve/website/sim-s3-website-object.js +28 -0
  475. package/dist/service/s3/serve/website/sim-s3-website-object.js.map +1 -0
  476. package/dist/service/s3/serve/website/sim-s3-website-responses.d.ts +27 -0
  477. package/dist/service/s3/serve/website/sim-s3-website-responses.d.ts.map +1 -0
  478. package/dist/service/s3/serve/website/sim-s3-website-responses.js +44 -0
  479. package/dist/service/s3/serve/website/sim-s3-website-responses.js.map +1 -0
  480. package/dist/service/s3/sim-s3.d.ts +34 -9
  481. package/dist/service/s3/sim-s3.d.ts.map +1 -1
  482. package/dist/service/s3/sim-s3.js +65 -55
  483. package/dist/service/s3/sim-s3.js.map +1 -1
  484. package/dist/util/clock/sim-clock-date.d.ts +20 -0
  485. package/dist/util/clock/sim-clock-date.d.ts.map +1 -0
  486. package/dist/util/clock/sim-clock-date.js +43 -0
  487. package/dist/util/clock/sim-clock-date.js.map +1 -0
  488. package/package.json +17 -11
@@ -5,10 +5,17 @@ interface SimS3ServiceControllerProperties {
5
5
  }
6
6
  /**
7
7
  * Localhost HTTP controller for simulated S3.
8
+ *
9
+ * S3 answers on two endpoints that behave differently, so a request is routed
10
+ * by the hostname it arrived on before anything else: the website endpoint
11
+ * serves a static site, and the REST endpoint serves the API. Both serve as
12
+ * whoever the request is authenticated as, so a website Bucket needs a Bucket
13
+ * policy making it readable before it serves anything.
8
14
  */
9
15
  export declare class SimS3ServiceController implements SimAwsServiceController {
10
16
  private readonly s3Router;
11
17
  private readonly s3GetObjectController;
18
+ private readonly s3RestController;
12
19
  constructor(properties?: SimS3ServiceControllerProperties);
13
20
  /**
14
21
  * Handle an HTTP request routed to a simulated S3 Bucket.
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-controller.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,qDAAqD,CAAC;AAI7D,UAAU,gCAAgC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IAEjE,YAAY,UAAU,GAAE,gCAAqC,EAI5D;IAED;;OAEG;IACG,aAAa,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkB3E;CACF"}
1
+ {"version":3,"file":"sim-s3-controller.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,qDAAqD,CAAC;AAK7D,UAAU,gCAAgC;IACxC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,YAAW,uBAAuB;IACpE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;IAC9C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAsB;IAEvD,YAAY,UAAU,GAAE,gCAAqC,EAK5D;IAED;;OAEG;IACG,aAAa,CAAC,cAAc,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAqB3E;CACF"}
@@ -1,16 +1,25 @@
1
1
  import { SimAws } from "../../aws/sim-aws.js";
2
2
  import { SimS3RequestRouter } from "./sim-s3-request-router.js";
3
3
  import { SimS3GetObjectController } from "./sim-s3-get-object-controller.js";
4
+ import { SimS3RestController } from "./sim-s3-rest-controller.js";
4
5
  /**
5
6
  * Localhost HTTP controller for simulated S3.
7
+ *
8
+ * S3 answers on two endpoints that behave differently, so a request is routed
9
+ * by the hostname it arrived on before anything else: the website endpoint
10
+ * serves a static site, and the REST endpoint serves the API. Both serve as
11
+ * whoever the request is authenticated as, so a website Bucket needs a Bucket
12
+ * policy making it readable before it serves anything.
6
13
  */
7
14
  export class SimS3ServiceController {
8
15
  s3Router;
9
16
  s3GetObjectController;
17
+ s3RestController;
10
18
  constructor(properties = {}) {
11
19
  const { simAws = new SimAws() } = properties;
12
20
  this.s3Router = new SimS3RequestRouter({ simAws });
13
- this.s3GetObjectController = new SimS3GetObjectController();
21
+ this.s3GetObjectController = new SimS3GetObjectController({ simAws });
22
+ this.s3RestController = new SimS3RestController({ simAws });
14
23
  }
15
24
  /**
16
25
  * Handle an HTTP request routed to a simulated S3 Bucket.
@@ -26,7 +35,10 @@ export class SimS3ServiceController {
26
35
  },
27
36
  });
28
37
  }
29
- return this.s3GetObjectController.handleRequest(route.bucket, route.objectKey, request);
38
+ if (route.action === "restObject") {
39
+ return await this.s3RestController.handleRequest(route, serviceRequest);
40
+ }
41
+ return await this.s3GetObjectController.handleRequest(route, serviceRequest);
30
42
  }
31
43
  }
32
44
  //# sourceMappingURL=sim-s3-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-controller.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAM7E;;GAEG;AACH,MAAM,OAAO,sBAAsB;IAChB,QAAQ,CAAqB;IAC7B,qBAAqB,CAA2B;IAEjE,YAAY,UAAU,GAAqC,EAAE;QAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,EAAE,GAAG,UAAU,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,IAAI,wBAAwB,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,cAAoC;QACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;gBACjC,MAAM,EAAE,KAAK,CAAC,UAAU;gBACxB,OAAO,EAAE;oBACP,cAAc,EAAE,2BAA2B;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAC7C,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,SAAS,EACf,OAAO,CACR,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"sim-s3-controller.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAK9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAMlE;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAsB;IAChB,QAAQ,CAAqB;IAC7B,qBAAqB,CAA2B;IAChD,gBAAgB,CAAsB;IAEvD,YAAY,UAAU,GAAqC,EAAE;QAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE,EAAE,GAAG,UAAU,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,qBAAqB,GAAG,IAAI,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,cAAoC;QACtD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,cAAc,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAEnD,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE;gBACjC,MAAM,EAAE,KAAK,CAAC,UAAU;gBACxB,OAAO,EAAE;oBACP,cAAc,EAAE,2BAA2B;iBAC5C;aACF,CAAC,CAAC;QACL,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;YAClC,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1E,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,aAAa,CACnD,KAAK,EACL,cAAc,CACf,CAAC;IACJ,CAAC;CACF"}
@@ -1,14 +1,48 @@
1
- import type { SimS3Bucket } from "../bucket/sim-s3-bucket.js";
1
+ import type { SimAwsServiceRequest } from "../../../serve/controller/sim-service-controller.js";
2
+ import type { SimAws } from "../../aws/sim-aws.js";
3
+ import type { SimS3WebsiteRoute } from "./sim-s3-route.js";
4
+ interface SimS3GetObjectControllerProperties {
5
+ readonly simAws: SimAws;
6
+ }
2
7
  /**
3
- * Serves a simulated S3 Object over HTTP.
8
+ * Serves a simulated S3 Object over the static website endpoint.
9
+ *
10
+ * Real S3 serves a website endpoint only what the Bucket policy makes readable,
11
+ * answering 403 for an Object that is not publicly readable. Objects are
12
+ * therefore read through the ordinary GetObject command, so a Bucket with no
13
+ * policy serves nothing to the browser that asks for a page.
14
+ *
15
+ * The reading is done as whoever the boundary resolved rather than always as
16
+ * anonymous, which is a deliberate divergence: a real website endpoint
17
+ * authenticates nothing, so an identity policy could never reach it there. It
18
+ * keeps the simulator's served services consistent with each other, at the cost
19
+ * of being looser than S3 for a request that names a principal.
4
20
  */
5
21
  export declare class SimS3GetObjectController {
22
+ private readonly simAws;
23
+ private readonly responses;
24
+ constructor(properties: SimS3GetObjectControllerProperties);
6
25
  /**
7
- * Handle a GET request for an S3 Object via simulated S3.
26
+ * Handle a GET or HEAD request for an S3 Object via the website endpoint.
8
27
  */
9
- handleRequest(bucket: SimS3Bucket, objectKey: string, request: Request): Promise<Response>;
28
+ handleRequest(route: SimS3WebsiteRoute, serviceRequest: SimAwsServiceRequest): Promise<Response>;
10
29
  private websiteResponse;
11
- private foundObjectResponse;
12
- private notFoundResponse;
30
+ /**
31
+ * Answer a request for an Object the Bucket does not hold, which is either a
32
+ * folder needing a trailing slash, the error document, or a plain 404.
33
+ */
34
+ private missingResponse;
35
+ /**
36
+ * Load the Object the visitor asked for, reporting a denial as a value so
37
+ * the caller can answer 403 rather than falling through to the 404 path.
38
+ */
39
+ private loadRequested;
40
+ /**
41
+ * Real S3 serves the custom error document for the whole 4XX class, so a
42
+ * denied request gets it too, provided the visitor may read it.
43
+ */
44
+ private deniedResponse;
45
+ private errorDocument;
13
46
  }
47
+ export {};
14
48
  //# sourceMappingURL=sim-s3-get-object-controller.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-get-object-controller.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-get-object-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAG9D;;GAEG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,QAAQ,CAAC,CAyBnB;YAEa,eAAe;IAuC7B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,gBAAgB;CAWzB"}
1
+ {"version":3,"file":"sim-s3-get-object-controller.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-get-object-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qDAAqD,CAAC;AAChG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAGnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAK3D,UAAU,kCAAkC;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+B;IAEzD,YAAY,UAAU,EAAE,kCAAkC,EAEzD;IAED;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,iBAAiB,EACxB,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,QAAQ,CAAC,CA0BnB;YAEa,eAAe;IAoB7B;;;OAGG;YACW,eAAe;IA2B7B;;;OAGG;YACW,aAAa;IAe3B;;;OAGG;YACW,cAAc;YAcd,aAAa;CAY5B"}
@@ -1,73 +1,104 @@
1
+ import { SimIamAccessDenied } from "../../iam/error/sim-iam.error.js";
2
+ import { SimS3WebsiteObjectLoader } from "./website/sim-s3-website-object-loader.js";
3
+ import { SimS3WebsiteResponses } from "./website/sim-s3-website-responses.js";
1
4
  /**
2
- * Serves a simulated S3 Object over HTTP.
5
+ * Serves a simulated S3 Object over the static website endpoint.
6
+ *
7
+ * Real S3 serves a website endpoint only what the Bucket policy makes readable,
8
+ * answering 403 for an Object that is not publicly readable. Objects are
9
+ * therefore read through the ordinary GetObject command, so a Bucket with no
10
+ * policy serves nothing to the browser that asks for a page.
11
+ *
12
+ * The reading is done as whoever the boundary resolved rather than always as
13
+ * anonymous, which is a deliberate divergence: a real website endpoint
14
+ * authenticates nothing, so an identity policy could never reach it there. It
15
+ * keeps the simulator's served services consistent with each other, at the cost
16
+ * of being looser than S3 for a request that names a principal.
3
17
  */
4
18
  export class SimS3GetObjectController {
19
+ simAws;
20
+ responses = new SimS3WebsiteResponses();
21
+ constructor(properties) {
22
+ this.simAws = properties.simAws;
23
+ }
5
24
  /**
6
- * Handle a GET request for an S3 Object via simulated S3.
25
+ * Handle a GET or HEAD request for an S3 Object via the website endpoint.
7
26
  */
8
- async handleRequest(bucket, objectKey, request) {
27
+ async handleRequest(route, serviceRequest) {
28
+ const { bucket } = route;
9
29
  const website = bucket.getWebsite();
30
+ const { request } = serviceRequest;
10
31
  if (!website.websiteEnabled()) {
11
- return new Response(`Static website hosting is not enabled for bucket ${bucket.bucketName}\n`, {
12
- status: 403,
13
- headers: {
14
- "content-type": "text/plain; charset=utf-8",
15
- },
16
- });
32
+ return this.responses.websiteNotEnabled(bucket.bucketName);
17
33
  }
18
34
  if (website.redirectsAllRequests()) {
19
35
  return website.redirectForRequestResponse(request, new Response(undefined));
20
36
  }
21
- const response = await this.websiteResponse(bucket, objectKey, request);
22
- return website.redirectForRequestResponse(request, response);
37
+ const loader = SimS3WebsiteObjectLoader.forRoute(this.simAws, route, serviceRequest);
38
+ return website.redirectForRequestResponse(request, await this.websiteResponse(route, request, loader));
23
39
  }
24
- async websiteResponse(bucket, objectKey, request) {
25
- const website = bucket.getWebsite();
26
- const websiteObjectKey = website.objectKeyForRequest(objectKey);
27
- const object = await bucket.getObject(websiteObjectKey);
40
+ async websiteResponse(route, request, loader) {
41
+ const { bucket, objectKey } = route;
42
+ const websiteObjectKey = bucket.getWebsite().objectKeyForRequest(objectKey);
43
+ const object = await this.loadRequested(loader, websiteObjectKey);
44
+ if (object instanceof SimIamAccessDenied) {
45
+ return await this.deniedResponse(bucket, request, loader);
46
+ }
28
47
  if (object !== undefined) {
29
- return this.foundObjectResponse(object, request);
48
+ return this.responses.foundObject(object, request);
30
49
  }
50
+ return await this.missingResponse(route, request, loader, websiteObjectKey);
51
+ }
52
+ /**
53
+ * Answer a request for an Object the Bucket does not hold, which is either a
54
+ * folder needing a trailing slash, the error document, or a plain 404.
55
+ */
56
+ async missingResponse(route, request, loader, websiteObjectKey) {
57
+ const { bucket, objectKey } = route;
58
+ const website = bucket.getWebsite();
31
59
  const folderIndexDocumentKey = website.folderIndexDocumentKeyForRequest(objectKey);
32
- if (folderIndexDocumentKey !== undefined) {
33
- const folderIndexDocumentObject = await bucket.getObject(folderIndexDocumentKey);
34
- if (folderIndexDocumentObject !== undefined) {
35
- return website.trailingSlashRedirect(request);
36
- }
60
+ if (folderIndexDocumentKey !== undefined &&
61
+ (await loader.loadIfPermitted(folderIndexDocumentKey)) !== undefined) {
62
+ return website.trailingSlashRedirect(request);
37
63
  }
38
- const errorDocumentKey = website.errorDocumentKey();
39
- if (errorDocumentKey !== undefined) {
40
- const errorDocumentObject = await bucket.getObject(errorDocumentKey);
41
- if (errorDocumentObject !== undefined) {
42
- return this.foundObjectResponse(errorDocumentObject, request, 404);
64
+ const errorDocumentObject = await this.errorDocument(bucket, loader);
65
+ if (errorDocumentObject !== undefined) {
66
+ return this.responses.foundObject(errorDocumentObject, request, 404);
67
+ }
68
+ return this.responses.notFound(bucket.bucketName, websiteObjectKey);
69
+ }
70
+ /**
71
+ * Load the Object the visitor asked for, reporting a denial as a value so
72
+ * the caller can answer 403 rather than falling through to the 404 path.
73
+ */
74
+ async loadRequested(loader, objectKey) {
75
+ try {
76
+ return await loader.load(objectKey);
77
+ }
78
+ catch (error) {
79
+ if (error instanceof SimIamAccessDenied) {
80
+ return error;
43
81
  }
82
+ throw error;
44
83
  }
45
- return this.notFoundResponse(bucket, websiteObjectKey);
46
84
  }
47
- foundObjectResponse(object, request, status = 200) {
48
- const contentType = object.metadata.values["content-type"];
49
- const headers = {
50
- "content-length": String(object.body.length),
51
- ...(contentType !== undefined && { "content-type": contentType }),
52
- };
53
- if (request.method === "HEAD") {
54
- return new Response(undefined, {
55
- status,
56
- headers,
57
- });
85
+ /**
86
+ * Real S3 serves the custom error document for the whole 4XX class, so a
87
+ * denied request gets it too, provided the visitor may read it.
88
+ */
89
+ async deniedResponse(bucket, request, loader) {
90
+ const errorDocumentObject = await this.errorDocument(bucket, loader);
91
+ if (errorDocumentObject !== undefined) {
92
+ return this.responses.foundObject(errorDocumentObject, request, 403);
58
93
  }
59
- return new Response(object.body, {
60
- status,
61
- headers,
62
- });
94
+ return this.responses.accessDenied(bucket.bucketName);
63
95
  }
64
- notFoundResponse(bucket, objectKey) {
65
- return new Response(`Object ${objectKey} not found in bucket ${bucket.bucketName}`, {
66
- status: 404,
67
- headers: {
68
- "content-type": "text/plain; charset=utf-8",
69
- },
70
- });
96
+ async errorDocument(bucket, loader) {
97
+ const errorDocumentKey = bucket.getWebsite().errorDocumentKey();
98
+ if (errorDocumentKey === undefined) {
99
+ return undefined;
100
+ }
101
+ return await loader.loadIfPermitted(errorDocumentKey);
71
102
  }
72
103
  }
73
104
  //# sourceMappingURL=sim-s3-get-object-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-get-object-controller.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-get-object-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sim-s3-get-object-controller.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-get-object-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import type { SimAwsServiceTarget } from "../../../serve/controller/sim-service-controller.js";
2
+ import type { SimS3BucketName } from "../bucket/sim-s3-bucket.js";
3
+ /**
4
+ * A request path that is not valid percent-encoding, so names no Object.
5
+ *
6
+ * Real S3 answers this as a client error, and so does the simulator: a path
7
+ * such as `/reports/%zz` is the caller's mistake, not the simulator's, and
8
+ * letting the decoding failure escape as an internal error would say the
9
+ * opposite.
10
+ */
11
+ export declare class SimS3UndecodableUri {
12
+ readonly pathname: string;
13
+ constructor(pathname: string);
14
+ }
15
+ /**
16
+ * Decode a request path into its Object key segments.
17
+ *
18
+ * Segments are decoded one at a time, because a key may itself contain an
19
+ * encoded slash and decoding the whole path first would split the key at a
20
+ * separator that was never there.
21
+ */
22
+ export declare function simS3PathSegments(pathname: string): string[] | SimS3UndecodableUri;
23
+ /**
24
+ * Which Bucket and Object key an S3 REST request names.
25
+ *
26
+ * S3 has two ways of addressing the same Object. A virtual-hosted style request
27
+ * carries the Bucket in the hostname and nothing but the key in the path; a
28
+ * path style request carries both in the path. The AWS SDK picks between them
29
+ * for itself, so both have to be understood, and the request cannot be served
30
+ * until this is settled.
31
+ */
32
+ export declare class SimS3ObjectAddress {
33
+ readonly bucketName: SimS3BucketName;
34
+ readonly objectKey: string;
35
+ private constructor();
36
+ /**
37
+ * Read the address out of a REST request, or undefined when it names no
38
+ * Bucket at all.
39
+ */
40
+ static fromRestRequest(target: SimAwsServiceTarget, url: URL): SimS3ObjectAddress | SimS3UndecodableUri | undefined;
41
+ }
42
+ //# sourceMappingURL=sim-s3-object-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-s3-object-address.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-object-address.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE;;;;;;;GAOG;AACH,qBAAa,mBAAmB;aACF,QAAQ,EAAE,MAAM;IAA5C,YAA4B,QAAQ,EAAE,MAAM,EAAI;CACjD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GACf,MAAM,EAAE,GAAG,mBAAmB,CAQhC;AAED;;;;;;;;GAQG;AACH,qBAAa,kBAAkB;IAC7B,SAAgB,UAAU,EAAE,eAAe,CAAC;IAC5C,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,OAAO,eAGN;IAED;;;OAGG;IACH,MAAM,CAAC,eAAe,CACpB,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,GAAG,GACP,kBAAkB,GAAG,mBAAmB,GAAG,SAAS,CAwBtD;CACF"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * A request path that is not valid percent-encoding, so names no Object.
3
+ *
4
+ * Real S3 answers this as a client error, and so does the simulator: a path
5
+ * such as `/reports/%zz` is the caller's mistake, not the simulator's, and
6
+ * letting the decoding failure escape as an internal error would say the
7
+ * opposite.
8
+ */
9
+ export class SimS3UndecodableUri {
10
+ pathname;
11
+ constructor(pathname) {
12
+ this.pathname = pathname;
13
+ }
14
+ }
15
+ /**
16
+ * Decode a request path into its Object key segments.
17
+ *
18
+ * Segments are decoded one at a time, because a key may itself contain an
19
+ * encoded slash and decoding the whole path first would split the key at a
20
+ * separator that was never there.
21
+ */
22
+ export function simS3PathSegments(pathname) {
23
+ const encoded = pathname.replace(/^\/+/u, "").split("/");
24
+ try {
25
+ return encoded.map((segment) => decodeURIComponent(segment));
26
+ }
27
+ catch {
28
+ return new SimS3UndecodableUri(pathname);
29
+ }
30
+ }
31
+ /**
32
+ * Which Bucket and Object key an S3 REST request names.
33
+ *
34
+ * S3 has two ways of addressing the same Object. A virtual-hosted style request
35
+ * carries the Bucket in the hostname and nothing but the key in the path; a
36
+ * path style request carries both in the path. The AWS SDK picks between them
37
+ * for itself, so both have to be understood, and the request cannot be served
38
+ * until this is settled.
39
+ */
40
+ export class SimS3ObjectAddress {
41
+ bucketName;
42
+ objectKey;
43
+ constructor(bucketName, objectKey) {
44
+ this.bucketName = bucketName;
45
+ this.objectKey = objectKey;
46
+ }
47
+ /**
48
+ * Read the address out of a REST request, or undefined when it names no
49
+ * Bucket at all.
50
+ */
51
+ static fromRestRequest(target, url) {
52
+ const segments = simS3PathSegments(url.pathname);
53
+ if (segments instanceof SimS3UndecodableUri) {
54
+ return segments;
55
+ }
56
+ if (target.resourceName.length > 0) {
57
+ return new SimS3ObjectAddress(target.resourceName, segments.join("/"));
58
+ }
59
+ const bucketName = segments[0];
60
+ if (bucketName === undefined || bucketName.length === 0) {
61
+ return undefined;
62
+ }
63
+ return new SimS3ObjectAddress(bucketName, segments.slice(1).join("/"));
64
+ }
65
+ }
66
+ //# sourceMappingURL=sim-s3-object-address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sim-s3-object-address.js","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-object-address.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,OAAO,mBAAmB;IACF,QAAQ;IAApC,YAA4B,QAAgB;wBAAhB,QAAQ;IAAW,CAAC;CACjD;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAC/B,QAAgB;IAEhB,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IACb,UAAU,CAAkB;IAC5B,SAAS,CAAS;IAElC,YAAoB,UAA2B,EAAE,SAAiB;QAChE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,eAAe,CACpB,MAA2B,EAC3B,GAAQ;QAER,MAAM,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,QAAQ,YAAY,mBAAmB,EAAE,CAAC;YAC5C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,kBAAkB,CAC3B,MAAM,CAAC,YAA+B,EACtC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CACnB,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,OAAO,IAAI,kBAAkB,CAC3B,UAA6B,EAC7B,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAC5B,CAAC;IACJ,CAAC;CACF"}
@@ -1,30 +1,35 @@
1
1
  import { SimAws } from "../../aws/sim-aws.js";
2
- import type { SimS3Bucket } from "../bucket/sim-s3-bucket.js";
3
2
  import type { SimAwsServiceTarget } from "../../../serve/controller/sim-service-controller.js";
4
- export interface SimS3GetObjectRoute {
5
- readonly action: "getObject";
6
- readonly bucket: SimS3Bucket;
7
- readonly objectKey: string;
8
- }
9
- export interface SimS3RouteFailure {
10
- readonly action: "failure";
11
- readonly statusCode: number;
12
- readonly message: string;
13
- }
14
- export type SimS3Route = SimS3GetObjectRoute | SimS3RouteFailure;
3
+ import { type SimS3Route } from "./sim-s3-route.js";
15
4
  interface SimS3RequestRouterProperties {
16
5
  readonly simAws?: SimAws;
17
6
  }
18
7
  /**
19
8
  * Resolves HTTP requests into simulated S3 actions.
9
+ *
10
+ * Which endpoint the request arrived at decides what it can be: the website
11
+ * endpoint serves static sites and reads nothing but GET and HEAD, while the
12
+ * REST endpoint is the API, and only it accepts an upload or authenticates a
13
+ * caller. Real S3 draws the same line, and a test that could reach the API
14
+ * through a website hostname would prove something about a deployment that
15
+ * cannot happen.
20
16
  */
21
17
  export declare class SimS3RequestRouter {
22
- private readonly simAws;
18
+ private readonly buckets;
23
19
  constructor(properties?: SimS3RequestRouterProperties);
24
20
  /**
25
21
  * Route an incoming service target and HTTP request to a simulated S3 action.
26
22
  */
27
23
  route(target: SimAwsServiceTarget, request: Request): SimS3Route;
24
+ private websiteRoute;
25
+ /**
26
+ * Route a request that arrived at the REST API endpoint.
27
+ *
28
+ * Only the Object operations simulated S3 has are accepted. Anything else is
29
+ * refused as unsupported rather than answered with something plausible, so a
30
+ * gap in the simulation shows up in the test that found it.
31
+ */
32
+ private restRoute;
28
33
  }
29
34
  export {};
30
35
  //# sourceMappingURL=sim-s3-request-router.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sim-s3-request-router.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-request-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAmB,MAAM,4BAA4B,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAE/F,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,GAAG,mBAAmB,GAAG,iBAAiB,CAAC;AAEjE,UAAU,4BAA4B;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,UAAU,GAAE,4BAAiC,EAGxD;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAkE/D;CACF"}
1
+ {"version":3,"file":"sim-s3-request-router.d.ts","sourceRoot":"","sources":["../../../../src/service/s3/serve/sim-s3-request-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAE9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,EACL,KAAK,UAAU,EAGhB,MAAM,mBAAmB,CAAC;AAY3B,UAAU,4BAA4B;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;GASG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAE7C,YAAY,UAAU,GAAE,4BAAiC,EAGxD;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,UAAU,CAY/D;IAED,OAAO,CAAC,YAAY;IAsCpB;;;;;;OAMG;IACH,OAAO,CAAC,SAAS;CAoClB"}
@@ -1,73 +1,97 @@
1
1
  import { SimAws } from "../../aws/sim-aws.js";
2
+ import { simS3RouteFailure as failure, } from "./sim-s3-route.js";
3
+ import { SimS3BucketLocator, SimS3BucketNotFound, } from "./sim-s3-bucket-locator.js";
4
+ import { SimS3ObjectAddress, simS3PathSegments, SimS3UndecodableUri, } from "./sim-s3-object-address.js";
5
+ import { simS3RestRefusal } from "./sim-s3-rest-refusal.js";
2
6
  /**
3
7
  * Resolves HTTP requests into simulated S3 actions.
8
+ *
9
+ * Which endpoint the request arrived at decides what it can be: the website
10
+ * endpoint serves static sites and reads nothing but GET and HEAD, while the
11
+ * REST endpoint is the API, and only it accepts an upload or authenticates a
12
+ * caller. Real S3 draws the same line, and a test that could reach the API
13
+ * through a website hostname would prove something about a deployment that
14
+ * cannot happen.
4
15
  */
5
16
  export class SimS3RequestRouter {
6
- simAws;
17
+ buckets;
7
18
  constructor(properties = {}) {
8
19
  const { simAws = new SimAws() } = properties;
9
- this.simAws = simAws;
20
+ this.buckets = new SimS3BucketLocator({ simAws });
10
21
  }
11
22
  /**
12
23
  * Route an incoming service target and HTTP request to a simulated S3 action.
13
24
  */
14
25
  route(target, request) {
26
+ const regionName = target.regionName;
27
+ if (regionName === undefined) {
28
+ return failure(400, "Missing S3 Bucket region\n");
29
+ }
30
+ if (target.endpoint === "rest") {
31
+ return this.restRoute(target, request, regionName);
32
+ }
33
+ return this.websiteRoute(target, request, regionName);
34
+ }
35
+ websiteRoute(target, request, regionName) {
15
36
  if (request.method !== "GET" && request.method !== "HEAD") {
16
- return {
17
- action: "failure",
18
- statusCode: 405,
19
- message: "Method not allowed\n",
20
- };
37
+ return failure(405, "Method not allowed\n");
21
38
  }
22
39
  if (target.resourceName.length === 0) {
23
- return {
24
- action: "failure",
25
- statusCode: 400,
26
- message: "Missing S3 Bucket name\n",
27
- };
40
+ return failure(400, "Missing S3 Bucket name\n");
28
41
  }
29
- if (target.regionName === undefined) {
30
- return {
31
- action: "failure",
32
- statusCode: 400,
33
- message: "Missing S3 Bucket region\n",
34
- };
42
+ // Read before the Bucket is looked up, as the REST endpoint reads its
43
+ // address: a path that is not a path names nothing in any Bucket.
44
+ const segments = simS3PathSegments(new URL(request.url).pathname);
45
+ if (segments instanceof SimS3UndecodableUri) {
46
+ return undecodableFailure(segments);
35
47
  }
36
- const url = new URL(request.url);
37
- const objectKey = decodeURIComponent(url.pathname.replace(/^\/+/u, ""));
38
- const bucketName = target.resourceName;
39
- const bucketScope = this.simAws.s3().findBucketScope(bucketName);
40
- if (bucketScope === undefined) {
41
- return {
42
- action: "failure",
43
- statusCode: 404,
44
- message: `S3 bucket named ${bucketName} not found`,
45
- };
48
+ const found = this.buckets.locate(target.resourceName, regionName);
49
+ if (found instanceof SimS3BucketNotFound) {
50
+ return failure(found.statusCode, found.message);
46
51
  }
47
- if (bucketScope.regionName !== target.regionName) {
48
- return {
49
- action: "failure",
50
- statusCode: 404,
51
- message: `S3 bucket named ${bucketName} is in region ${bucketScope.regionName}, not requested ${target.regionName}`,
52
- };
52
+ return {
53
+ action: "website",
54
+ bucket: found.bucket,
55
+ bucketScope: found.bucketScope,
56
+ objectKey: segments.join("/"),
57
+ };
58
+ }
59
+ /**
60
+ * Route a request that arrived at the REST API endpoint.
61
+ *
62
+ * Only the Object operations simulated S3 has are accepted. Anything else is
63
+ * refused as unsupported rather than answered with something plausible, so a
64
+ * gap in the simulation shows up in the test that found it.
65
+ */
66
+ restRoute(target, request, regionName) {
67
+ const address = SimS3ObjectAddress.fromRestRequest(target, new URL(request.url));
68
+ if (address instanceof SimS3UndecodableUri) {
69
+ return undecodableFailure(address);
70
+ }
71
+ if (address === undefined) {
72
+ return failure(400, "Missing S3 Bucket name\n");
73
+ }
74
+ const refusal = simS3RestRefusal(request.method, address);
75
+ if (refusal !== undefined) {
76
+ return refusal;
53
77
  }
54
- const bucket = this.simAws
55
- .accountRegionScope(bucketScope.accountId, bucketScope.regionName)
56
- .s3()
57
- .getSimBucketByName(bucketName);
58
- /* v8 ignore if -- does not happen in practice */
59
- if (bucket === undefined) {
60
- return {
61
- action: "failure",
62
- statusCode: 404,
63
- message: `S3 bucket named ${bucketName} not found`,
64
- };
78
+ const found = this.buckets.locate(address.bucketName, regionName);
79
+ if (found instanceof SimS3BucketNotFound) {
80
+ return failure(found.statusCode, found.message);
65
81
  }
66
82
  return {
67
- action: "getObject",
68
- bucket,
69
- objectKey,
83
+ action: "restObject",
84
+ bucket: found.bucket,
85
+ bucketScope: found.bucketScope,
86
+ objectKey: address.objectKey,
70
87
  };
71
88
  }
72
89
  }
90
+ /**
91
+ * Refuse a path the simulator cannot read as an Object key.
92
+ */
93
+ function undecodableFailure(undecodable) {
94
+ return failure(400, `Could not parse the request path ${undecodable.pathname} as an S3 ` +
95
+ `Object key: it is not valid percent-encoding.\n`);
96
+ }
73
97
  //# sourceMappingURL=sim-s3-request-router.js.map