sst 3.0.0 → 3.0.1-10

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 (460) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.js +2 -0
  3. package/dist/resource.d.ts +4 -0
  4. package/dist/resource.js +15 -0
  5. package/dist/vector-client.d.ts +126 -0
  6. package/dist/vector-client.js +38 -0
  7. package/package.json +16 -137
  8. package/LICENSE +0 -21
  9. package/README.md +0 -43
  10. package/bootstrap.d.ts +0 -5
  11. package/bootstrap.js +0 -318
  12. package/bus.d.ts +0 -20
  13. package/bus.js +0 -52
  14. package/cache.d.ts +0 -4
  15. package/cache.js +0 -31
  16. package/cdk/deploy-stack.d.ts +0 -223
  17. package/cdk/deploy-stack.js +0 -562
  18. package/cdk/deployments-wrapper.d.ts +0 -3
  19. package/cdk/deployments-wrapper.js +0 -135
  20. package/cdk/deployments.d.ts +0 -327
  21. package/cdk/deployments.js +0 -360
  22. package/cdk/util.d.ts +0 -1
  23. package/cdk/util.js +0 -17
  24. package/cli/ci-info.d.ts +0 -4
  25. package/cli/ci-info.js +0 -8
  26. package/cli/colors.d.ts +0 -17
  27. package/cli/colors.js +0 -27
  28. package/cli/commands/bind.d.ts +0 -19
  29. package/cli/commands/bind.js +0 -360
  30. package/cli/commands/bootstrap.d.ts +0 -15
  31. package/cli/commands/bootstrap.js +0 -11
  32. package/cli/commands/build.d.ts +0 -17
  33. package/cli/commands/build.js +0 -25
  34. package/cli/commands/connect.d.ts +0 -17
  35. package/cli/commands/connect.js +0 -55
  36. package/cli/commands/console.d.ts +0 -15
  37. package/cli/commands/console.js +0 -22
  38. package/cli/commands/deploy.d.ts +0 -19
  39. package/cli/commands/deploy.js +0 -112
  40. package/cli/commands/dev.d.ts +0 -25
  41. package/cli/commands/dev.js +0 -351
  42. package/cli/commands/diff.d.ts +0 -19
  43. package/cli/commands/diff.js +0 -89
  44. package/cli/commands/plugins/kysely.d.ts +0 -1
  45. package/cli/commands/plugins/kysely.js +0 -87
  46. package/cli/commands/plugins/pothos.d.ts +0 -1
  47. package/cli/commands/plugins/pothos.js +0 -58
  48. package/cli/commands/plugins/warmer.d.ts +0 -1
  49. package/cli/commands/plugins/warmer.js +0 -33
  50. package/cli/commands/remove.d.ts +0 -19
  51. package/cli/commands/remove.js +0 -62
  52. package/cli/commands/secrets/get.d.ts +0 -19
  53. package/cli/commands/secrets/get.js +0 -27
  54. package/cli/commands/secrets/list.d.ts +0 -19
  55. package/cli/commands/secrets/list.js +0 -69
  56. package/cli/commands/secrets/load.d.ts +0 -17
  57. package/cli/commands/secrets/load.js +0 -47
  58. package/cli/commands/secrets/remove.d.ts +0 -19
  59. package/cli/commands/secrets/remove.js +0 -27
  60. package/cli/commands/secrets/secrets.d.ts +0 -2
  61. package/cli/commands/secrets/secrets.js +0 -16
  62. package/cli/commands/secrets/set.d.ts +0 -21
  63. package/cli/commands/secrets/set.js +0 -54
  64. package/cli/commands/telemetry.d.ts +0 -17
  65. package/cli/commands/telemetry.js +0 -24
  66. package/cli/commands/transform.d.ts +0 -17
  67. package/cli/commands/transform.js +0 -62
  68. package/cli/commands/types.d.ts +0 -15
  69. package/cli/commands/types.js +0 -25
  70. package/cli/commands/update.d.ts +0 -17
  71. package/cli/commands/update.js +0 -116
  72. package/cli/commands/version.d.ts +0 -15
  73. package/cli/commands/version.js +0 -15
  74. package/cli/local/router.d.ts +0 -44
  75. package/cli/local/router.js +0 -43
  76. package/cli/local/server.d.ts +0 -22
  77. package/cli/local/server.js +0 -319
  78. package/cli/program.d.ts +0 -19
  79. package/cli/program.js +0 -87
  80. package/cli/spinner.d.ts +0 -3
  81. package/cli/spinner.js +0 -14
  82. package/cli/sst.d.ts +0 -2
  83. package/cli/sst.js +0 -74
  84. package/cli/telemetry/environment.d.ts +0 -15
  85. package/cli/telemetry/environment.js +0 -27
  86. package/cli/telemetry/post-payload.d.ts +0 -1
  87. package/cli/telemetry/post-payload.js +0 -27
  88. package/cli/telemetry/project-id.d.ts +0 -2
  89. package/cli/telemetry/project-id.js +0 -47
  90. package/cli/telemetry/telemetry.d.ts +0 -19
  91. package/cli/telemetry/telemetry.js +0 -103
  92. package/cli/terminal.d.ts +0 -1
  93. package/cli/terminal.js +0 -8
  94. package/cli/ui/deploy.d.ts +0 -10
  95. package/cli/ui/deploy.js +0 -172
  96. package/cli/ui/functions.d.ts +0 -2
  97. package/cli/ui/functions.js +0 -130
  98. package/cli/ui/header.d.ts +0 -5
  99. package/cli/ui/header.js +0 -16
  100. package/cli/ui/stack.d.ts +0 -1
  101. package/cli/ui/stack.js +0 -6
  102. package/config.d.ts +0 -56
  103. package/config.js +0 -244
  104. package/constructs/Api.d.ts +0 -814
  105. package/constructs/Api.js +0 -743
  106. package/constructs/ApiGatewayV1Api.d.ts +0 -642
  107. package/constructs/ApiGatewayV1Api.js +0 -767
  108. package/constructs/App.d.ts +0 -168
  109. package/constructs/App.js +0 -493
  110. package/constructs/AppSyncApi.d.ts +0 -550
  111. package/constructs/AppSyncApi.js +0 -493
  112. package/constructs/AstroSite.d.ts +0 -39
  113. package/constructs/AstroSite.js +0 -78
  114. package/constructs/AstroSite.tsdoc.d.ts +0 -2
  115. package/constructs/AstroSite.tsdoc.js +0 -2
  116. package/constructs/Auth.d.ts +0 -100
  117. package/constructs/Auth.js +0 -177
  118. package/constructs/BaseSite.d.ts +0 -29
  119. package/constructs/BaseSite.js +0 -43
  120. package/constructs/Bucket.d.ts +0 -364
  121. package/constructs/Bucket.js +0 -327
  122. package/constructs/Cognito.d.ts +0 -232
  123. package/constructs/Cognito.js +0 -370
  124. package/constructs/Config.d.ts +0 -3
  125. package/constructs/Config.js +0 -3
  126. package/constructs/Construct.d.ts +0 -23
  127. package/constructs/Construct.js +0 -46
  128. package/constructs/Cron.d.ts +0 -164
  129. package/constructs/Cron.js +0 -114
  130. package/constructs/Distribution.d.ts +0 -143
  131. package/constructs/Distribution.js +0 -260
  132. package/constructs/EdgeFunction.d.ts +0 -49
  133. package/constructs/EdgeFunction.js +0 -442
  134. package/constructs/EventBus.d.ts +0 -444
  135. package/constructs/EventBus.js +0 -440
  136. package/constructs/Function.d.ts +0 -690
  137. package/constructs/Function.js +0 -583
  138. package/constructs/FunctionalStack.d.ts +0 -13
  139. package/constructs/FunctionalStack.js +0 -62
  140. package/constructs/Job.d.ts +0 -337
  141. package/constructs/Job.js +0 -404
  142. package/constructs/KinesisStream.d.ts +0 -224
  143. package/constructs/KinesisStream.js +0 -207
  144. package/constructs/Metadata.d.ts +0 -60
  145. package/constructs/Metadata.js +0 -1
  146. package/constructs/NextjsSite.d.ts +0 -104
  147. package/constructs/NextjsSite.js +0 -308
  148. package/constructs/Parameter.d.ts +0 -37
  149. package/constructs/Parameter.js +0 -53
  150. package/constructs/Queue.d.ts +0 -194
  151. package/constructs/Queue.js +0 -204
  152. package/constructs/RDS.d.ts +0 -221
  153. package/constructs/RDS.js +0 -363
  154. package/constructs/RemixSite.d.ts +0 -42
  155. package/constructs/RemixSite.js +0 -158
  156. package/constructs/RemixSite.tsdoc.d.ts +0 -2
  157. package/constructs/RemixSite.tsdoc.js +0 -2
  158. package/constructs/Script.d.ts +0 -160
  159. package/constructs/Script.js +0 -179
  160. package/constructs/Secret.d.ts +0 -30
  161. package/constructs/Secret.js +0 -59
  162. package/constructs/Service.d.ts +0 -487
  163. package/constructs/Service.js +0 -655
  164. package/constructs/SolidStartSite.d.ts +0 -37
  165. package/constructs/SolidStartSite.js +0 -66
  166. package/constructs/SolidStartSite.tsdoc.d.ts +0 -2
  167. package/constructs/SolidStartSite.tsdoc.js +0 -2
  168. package/constructs/SsrFunction.d.ts +0 -60
  169. package/constructs/SsrFunction.js +0 -226
  170. package/constructs/SsrSite.d.ts +0 -407
  171. package/constructs/SsrSite.js +0 -850
  172. package/constructs/Stack.d.ts +0 -127
  173. package/constructs/Stack.js +0 -243
  174. package/constructs/StaticSite.d.ts +0 -348
  175. package/constructs/StaticSite.js +0 -468
  176. package/constructs/SvelteKitSite.d.ts +0 -40
  177. package/constructs/SvelteKitSite.js +0 -106
  178. package/constructs/SvelteKitSite.tsdoc.d.ts +0 -2
  179. package/constructs/SvelteKitSite.tsdoc.js +0 -2
  180. package/constructs/Table.d.ts +0 -410
  181. package/constructs/Table.js +0 -425
  182. package/constructs/Topic.d.ts +0 -257
  183. package/constructs/Topic.js +0 -273
  184. package/constructs/WebSocketApi.d.ts +0 -355
  185. package/constructs/WebSocketApi.js +0 -404
  186. package/constructs/cdk/HttpAwsIntegration.d.ts +0 -32
  187. package/constructs/cdk/HttpAwsIntegration.js +0 -24
  188. package/constructs/cdk/certificate-base.d.ts +0 -18
  189. package/constructs/cdk/certificate-base.js +0 -26
  190. package/constructs/cdk/dns-validated-certificate.d.ts +0 -77
  191. package/constructs/cdk/dns-validated-certificate.js +0 -125
  192. package/constructs/cdk/website-redirect.d.ts +0 -53
  193. package/constructs/cdk/website-redirect.js +0 -77
  194. package/constructs/context.d.ts +0 -3
  195. package/constructs/context.js +0 -27
  196. package/constructs/deferred_task.d.ts +0 -6
  197. package/constructs/deferred_task.js +0 -45
  198. package/constructs/deprecated/NextjsSite.d.ts +0 -309
  199. package/constructs/deprecated/NextjsSite.js +0 -1074
  200. package/constructs/deprecated/cross-region-helper.d.ts +0 -7
  201. package/constructs/deprecated/cross-region-helper.js +0 -152
  202. package/constructs/deprecated/index.d.ts +0 -1
  203. package/constructs/deprecated/index.js +0 -1
  204. package/constructs/future/Auth.d.ts +0 -80
  205. package/constructs/future/Auth.js +0 -122
  206. package/constructs/future/index.d.ts +0 -1
  207. package/constructs/future/index.js +0 -1
  208. package/constructs/index.d.ts +0 -32
  209. package/constructs/index.js +0 -32
  210. package/constructs/static-file-list.d.ts +0 -1
  211. package/constructs/static-file-list.js +0 -51
  212. package/constructs/util/apiGatewayV1AccessLog.d.ts +0 -15
  213. package/constructs/util/apiGatewayV1AccessLog.js +0 -76
  214. package/constructs/util/apiGatewayV2AccessLog.d.ts +0 -10
  215. package/constructs/util/apiGatewayV2AccessLog.js +0 -107
  216. package/constructs/util/apiGatewayV2Cors.d.ts +0 -67
  217. package/constructs/util/apiGatewayV2Cors.js +0 -21
  218. package/constructs/util/apiGatewayV2Domain.d.ts +0 -47
  219. package/constructs/util/apiGatewayV2Domain.js +0 -208
  220. package/constructs/util/appSyncApiDomain.d.ts +0 -41
  221. package/constructs/util/appSyncApiDomain.js +0 -176
  222. package/constructs/util/builder.d.ts +0 -3
  223. package/constructs/util/builder.js +0 -9
  224. package/constructs/util/duration.d.ts +0 -3
  225. package/constructs/util/duration.js +0 -19
  226. package/constructs/util/functionBinding.d.ts +0 -31
  227. package/constructs/util/functionBinding.js +0 -104
  228. package/constructs/util/functionUrlCors.d.ts +0 -67
  229. package/constructs/util/functionUrlCors.js +0 -23
  230. package/constructs/util/permission.d.ts +0 -8
  231. package/constructs/util/permission.js +0 -228
  232. package/constructs/util/size.d.ts +0 -3
  233. package/constructs/util/size.js +0 -12
  234. package/constructs/util/warning.d.ts +0 -11
  235. package/constructs/util/warning.js +0 -21
  236. package/context/context.d.ts +0 -13
  237. package/context/context.js +0 -69
  238. package/context/context2.d.ts +0 -16
  239. package/context/context2.js +0 -108
  240. package/context/handler.d.ts +0 -25
  241. package/context/handler.js +0 -21
  242. package/context/index.d.ts +0 -2
  243. package/context/index.js +0 -2
  244. package/credentials.d.ts +0 -9
  245. package/credentials.js +0 -145
  246. package/error.d.ts +0 -6
  247. package/error.js +0 -10
  248. package/index.d.ts +0 -1
  249. package/index.js +0 -1
  250. package/iot.d.ts +0 -6
  251. package/iot.js +0 -163
  252. package/logger.d.ts +0 -3
  253. package/logger.js +0 -32
  254. package/node/actor/index.d.ts +0 -29
  255. package/node/actor/index.js +0 -17
  256. package/node/api/index.d.ts +0 -64
  257. package/node/api/index.js +0 -179
  258. package/node/auth/adapter/adapter.d.ts +0 -3
  259. package/node/auth/adapter/adapter.js +0 -3
  260. package/node/auth/adapter/facebook.d.ts +0 -2
  261. package/node/auth/adapter/facebook.js +0 -26
  262. package/node/auth/adapter/github.d.ts +0 -2
  263. package/node/auth/adapter/github.js +0 -21
  264. package/node/auth/adapter/google.d.ts +0 -9
  265. package/node/auth/adapter/google.js +0 -18
  266. package/node/auth/adapter/link.d.ts +0 -8
  267. package/node/auth/adapter/link.js +0 -39
  268. package/node/auth/adapter/oauth.d.ts +0 -25
  269. package/node/auth/adapter/oauth.js +0 -52
  270. package/node/auth/adapter/oidc.d.ts +0 -17
  271. package/node/auth/adapter/oidc.js +0 -50
  272. package/node/auth/adapter/twitch.d.ts +0 -2
  273. package/node/auth/adapter/twitch.js +0 -11
  274. package/node/auth/auth.d.ts +0 -24
  275. package/node/auth/auth.js +0 -74
  276. package/node/auth/index.d.ts +0 -13
  277. package/node/auth/index.js +0 -12
  278. package/node/auth/session.d.ts +0 -76
  279. package/node/auth/session.js +0 -121
  280. package/node/bucket/index.d.ts +0 -3
  281. package/node/bucket/index.js +0 -2
  282. package/node/config/index.d.ts +0 -13
  283. package/node/config/index.js +0 -22
  284. package/node/event-bus/index.d.ts +0 -51
  285. package/node/event-bus/index.js +0 -76
  286. package/node/function/index.d.ts +0 -3
  287. package/node/function/index.js +0 -3
  288. package/node/future/auth/adapter/adapter.d.ts +0 -10
  289. package/node/future/auth/adapter/adapter.js +0 -1
  290. package/node/future/auth/adapter/code.d.ts +0 -17
  291. package/node/future/auth/adapter/code.js +0 -68
  292. package/node/future/auth/adapter/facebook.d.ts +0 -16
  293. package/node/future/auth/adapter/facebook.js +0 -27
  294. package/node/future/auth/adapter/github.d.ts +0 -23
  295. package/node/future/auth/adapter/github.js +0 -23
  296. package/node/future/auth/adapter/google.d.ts +0 -28
  297. package/node/future/auth/adapter/google.js +0 -22
  298. package/node/future/auth/adapter/link.d.ts +0 -13
  299. package/node/future/auth/adapter/link.js +0 -47
  300. package/node/future/auth/adapter/microsoft.d.ts +0 -22
  301. package/node/future/auth/adapter/microsoft.js +0 -16
  302. package/node/future/auth/adapter/oauth.d.ts +0 -41
  303. package/node/future/auth/adapter/oauth.js +0 -67
  304. package/node/future/auth/adapter/oidc.d.ts +0 -30
  305. package/node/future/auth/adapter/oidc.js +0 -63
  306. package/node/future/auth/adapter/spotify.d.ts +0 -23
  307. package/node/future/auth/adapter/spotify.js +0 -22
  308. package/node/future/auth/encryption.d.ts +0 -2
  309. package/node/future/auth/encryption.js +0 -30
  310. package/node/future/auth/handler.d.ts +0 -46
  311. package/node/future/auth/handler.js +0 -280
  312. package/node/future/auth/index.d.ts +0 -17
  313. package/node/future/auth/index.js +0 -15
  314. package/node/future/auth/session.d.ts +0 -71
  315. package/node/future/auth/session.js +0 -146
  316. package/node/graphql/index.d.ts +0 -15
  317. package/node/graphql/index.js +0 -32
  318. package/node/job/index.d.ts +0 -37
  319. package/node/job/index.js +0 -64
  320. package/node/kinesis-stream/index.d.ts +0 -3
  321. package/node/kinesis-stream/index.js +0 -3
  322. package/node/queue/index.d.ts +0 -3
  323. package/node/queue/index.js +0 -2
  324. package/node/rds/index.d.ts +0 -3
  325. package/node/rds/index.js +0 -2
  326. package/node/service/index.d.ts +0 -3
  327. package/node/service/index.js +0 -4
  328. package/node/site/index.d.ts +0 -18
  329. package/node/site/index.js +0 -18
  330. package/node/table/index.d.ts +0 -3
  331. package/node/table/index.js +0 -4
  332. package/node/topic/index.d.ts +0 -3
  333. package/node/topic/index.js +0 -4
  334. package/node/util/index.d.ts +0 -2
  335. package/node/util/index.js +0 -196
  336. package/node/util/loader.d.ts +0 -2
  337. package/node/util/loader.js +0 -51
  338. package/node/websocket-api/index.d.ts +0 -23
  339. package/node/websocket-api/index.js +0 -48
  340. package/pothos.d.ts +0 -7
  341. package/pothos.js +0 -160
  342. package/project.d.ts +0 -75
  343. package/project.js +0 -188
  344. package/runtime/handlers/container.d.ts +0 -2
  345. package/runtime/handlers/container.js +0 -263
  346. package/runtime/handlers/dotnet.d.ts +0 -2
  347. package/runtime/handlers/dotnet.js +0 -115
  348. package/runtime/handlers/go.d.ts +0 -2
  349. package/runtime/handlers/go.js +0 -126
  350. package/runtime/handlers/java.d.ts +0 -2
  351. package/runtime/handlers/java.js +0 -103
  352. package/runtime/handlers/node.d.ts +0 -2
  353. package/runtime/handlers/node.js +0 -269
  354. package/runtime/handlers/python.d.ts +0 -2
  355. package/runtime/handlers/python.js +0 -141
  356. package/runtime/handlers/pythonBundling.d.ts +0 -82
  357. package/runtime/handlers/pythonBundling.js +0 -80
  358. package/runtime/handlers/rust.d.ts +0 -2
  359. package/runtime/handlers/rust.js +0 -110
  360. package/runtime/handlers.d.ts +0 -74
  361. package/runtime/handlers.js +0 -151
  362. package/runtime/iot.d.ts +0 -1
  363. package/runtime/iot.js +0 -17
  364. package/runtime/runtime.d.ts +0 -32
  365. package/runtime/runtime.js +0 -1
  366. package/runtime/server.d.ts +0 -6
  367. package/runtime/server.js +0 -150
  368. package/runtime/workers.d.ts +0 -37
  369. package/runtime/workers.js +0 -85
  370. package/stacks/app-metadata.d.ts +0 -7
  371. package/stacks/app-metadata.js +0 -75
  372. package/stacks/assembly.d.ts +0 -1
  373. package/stacks/assembly.js +0 -4
  374. package/stacks/build.d.ts +0 -9
  375. package/stacks/build.js +0 -110
  376. package/stacks/deploy.d.ts +0 -9
  377. package/stacks/deploy.js +0 -240
  378. package/stacks/diff.d.ts +0 -8
  379. package/stacks/diff.js +0 -62
  380. package/stacks/index.d.ts +0 -10
  381. package/stacks/index.js +0 -10
  382. package/stacks/metadata.d.ts +0 -11
  383. package/stacks/metadata.js +0 -83
  384. package/stacks/monitor.d.ts +0 -32
  385. package/stacks/monitor.js +0 -151
  386. package/stacks/remove.d.ts +0 -8
  387. package/stacks/remove.js +0 -76
  388. package/stacks/synth.d.ts +0 -12
  389. package/stacks/synth.js +0 -94
  390. package/support/base-site-archiver.mjs +0 -99
  391. package/support/base-site-custom-resource/s3-handler.py +0 -195
  392. package/support/base-site-custom-resource/s3-upload.py +0 -89
  393. package/support/bootstrap-metadata-function/index.mjs +0 -58011
  394. package/support/bridge/Dockerfile +0 -3
  395. package/support/bridge/bridge.mjs +0 -146
  396. package/support/certificate-requestor/index.js +0 -549
  397. package/support/custom-resources/index.mjs +0 -180627
  398. package/support/dotnet31-bootstrap/Program.cs +0 -17
  399. package/support/dotnet31-bootstrap/dotnet-bootstrap.csproj +0 -12
  400. package/support/dotnet31-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
  401. package/support/dotnet31-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
  402. package/support/dotnet31-bootstrap/release/System.Runtime.CompilerServices.Unsafe.dll +0 -0
  403. package/support/dotnet31-bootstrap/release/System.Text.Encodings.Web.dll +0 -0
  404. package/support/dotnet31-bootstrap/release/System.Text.Json.dll +0 -0
  405. package/support/dotnet31-bootstrap/release/dotnet-bootstrap +0 -0
  406. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.deps.json +0 -230
  407. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.dll +0 -0
  408. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.pdb +0 -0
  409. package/support/dotnet31-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -9
  410. package/support/dotnet6-bootstrap/Program.cs +0 -17
  411. package/support/dotnet6-bootstrap/dotnet-bootstrap.csproj +0 -12
  412. package/support/dotnet6-bootstrap/release/Amazon.Lambda.Core.dll +0 -0
  413. package/support/dotnet6-bootstrap/release/Amazon.Lambda.RuntimeSupport.dll +0 -0
  414. package/support/dotnet6-bootstrap/release/dotnet-bootstrap +0 -0
  415. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.deps.json +0 -59
  416. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.dll +0 -0
  417. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.pdb +0 -0
  418. package/support/dotnet6-bootstrap/release/dotnet-bootstrap.runtimeconfig.json +0 -12
  419. package/support/edge-function/edge-lambda-version.mjs +0 -3
  420. package/support/edge-function/edge-lambda.mjs +0 -3
  421. package/support/edge-function/s3-bucket.mjs +0 -3
  422. package/support/event-bus-retrier/index.mjs +0 -75
  423. package/support/java-runtime/install.sh +0 -25
  424. package/support/java-runtime/pom.xml +0 -39
  425. package/support/java-runtime/release/aws-lambda-java-core-1.2.0.jar +0 -0
  426. package/support/java-runtime/release/aws-lambda-java-runtime-interface-client-1.1.0.jar +0 -0
  427. package/support/java-runtime/release/aws-lambda-java-serialization-1.0.0.jar +0 -0
  428. package/support/job-manager/index.mjs +0 -57679
  429. package/support/nixpacks/Dockerfile +0 -6
  430. package/support/nodejs-runtime/index.mjs +0 -169
  431. package/support/python-runtime/Dockerfile +0 -9
  432. package/support/python-runtime/Dockerfile.custom +0 -21
  433. package/support/python-runtime/Dockerfile.dependencies +0 -26
  434. package/support/python-runtime/runtime.py +0 -127
  435. package/support/rds-migrator/index.mjs +0 -49
  436. package/support/remix-site-function/edge-server.js +0 -161
  437. package/support/remix-site-function/polyfill.js +0 -24
  438. package/support/remix-site-function/regional-server.js +0 -164
  439. package/support/script-function/index.mjs +0 -48760
  440. package/support/service-dev-function/index.js +0 -1
  441. package/support/signing-function/index.mjs +0 -3769
  442. package/support/sls-nextjs-site-build-helper/build.cjs +0 -91
  443. package/support/sls-nextjs-site-build-helper/index-wrapper.js +0 -19
  444. package/support/sls-nextjs-site-function-code-replacer/lambda-code-updater.py +0 -156
  445. package/support/sls-nextjs-site-stub/index.html +0 -99
  446. package/support/ssr-site-function-archiver.mjs +0 -96
  447. package/support/ssr-site-function-stub/index.js +0 -5
  448. package/support/ssr-warmer/index.mjs +0 -34235
  449. package/util/error.d.ts +0 -3
  450. package/util/error.js +0 -6
  451. package/util/fs.d.ts +0 -4
  452. package/util/fs.js +0 -46
  453. package/util/lazy.d.ts +0 -1
  454. package/util/lazy.js +0 -11
  455. package/util/module.d.ts +0 -1
  456. package/util/module.js +0 -5
  457. package/util/process.d.ts +0 -2
  458. package/util/process.js +0 -3
  459. package/watcher.d.ts +0 -14
  460. package/watcher.js +0 -35
@@ -1,850 +0,0 @@
1
- import path from "path";
2
- import url from "url";
3
- import fs from "fs";
4
- import glob from "glob";
5
- import crypto from "crypto";
6
- import spawn from "cross-spawn";
7
- import { execSync } from "child_process";
8
- import { Construct } from "constructs";
9
- import { Fn, Token, Duration as CdkDuration, RemovalPolicy, CustomResource, } from "aws-cdk-lib/core";
10
- import { BlockPublicAccess, Bucket, } from "aws-cdk-lib/aws-s3";
11
- import { Effect, Role, Policy, PolicyStatement, AccountPrincipal, ServicePrincipal, CompositePrincipal, } from "aws-cdk-lib/aws-iam";
12
- import { Function as CdkFunction, Code, Runtime, FunctionUrlAuthType, InvokeMode, } from "aws-cdk-lib/aws-lambda";
13
- import { Asset } from "aws-cdk-lib/aws-s3-assets";
14
- import { ViewerProtocolPolicy, AllowedMethods, CachedMethods, LambdaEdgeEventType, CachePolicy, CacheQueryStringBehavior, CacheHeaderBehavior, CacheCookieBehavior, OriginRequestPolicy, Function as CfFunction, FunctionCode as CfFunctionCode, FunctionEventType as CfFunctionEventType, } from "aws-cdk-lib/aws-cloudfront";
15
- import { AwsCliLayer } from "aws-cdk-lib/lambda-layer-awscli";
16
- import { S3Origin, HttpOrigin } from "aws-cdk-lib/aws-cloudfront-origins";
17
- import { Rule, Schedule } from "aws-cdk-lib/aws-events";
18
- import { LambdaFunction } from "aws-cdk-lib/aws-events-targets";
19
- import { Stack } from "./Stack.js";
20
- import { Distribution } from "./Distribution.js";
21
- import { Logger } from "../logger.js";
22
- import { createAppContext } from "./context.js";
23
- import { isCDKConstruct } from "./Construct.js";
24
- import { Secret } from "./Secret.js";
25
- import { SsrFunction } from "./SsrFunction.js";
26
- import { EdgeFunction } from "./EdgeFunction.js";
27
- import { getBuildCmdEnvironment, } from "./BaseSite.js";
28
- import { useDeferredTasks } from "./deferred_task.js";
29
- import { toCdkDuration } from "./util/duration.js";
30
- import { attachPermissionsToRole } from "./util/permission.js";
31
- import { getParameterPath, } from "./util/functionBinding.js";
32
- import { useProject } from "../project.js";
33
- import { VisibleError } from "../error.js";
34
- const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
35
- /**
36
- * The `SsrSite` construct is a higher level CDK construct that makes it easy to create modern web apps with Server Side Rendering capabilities.
37
- * @example
38
- * Deploys an Astro app in the `web` directory.
39
- *
40
- * ```js
41
- * new SsrSite(stack, "site", {
42
- * path: "web",
43
- * });
44
- * ```
45
- */
46
- export class SsrSite extends Construct {
47
- id;
48
- props;
49
- doNotDeploy;
50
- buildConfig;
51
- deferredTaskCallbacks = [];
52
- serverLambdaForEdge;
53
- serverLambdaForRegional;
54
- serverLambdaForDev;
55
- serverUrlSigningFunction;
56
- bucket;
57
- serverCfFunction;
58
- serverBehaviorCachePolicy;
59
- serverBehaviorOriginRequestPolicy;
60
- staticCfFunction;
61
- s3Origin;
62
- distribution;
63
- constructor(scope, id, props) {
64
- super(scope, props?.cdk?.id || id);
65
- const app = scope.node.root;
66
- const stack = Stack.of(this);
67
- this.id = id;
68
- this.props = {
69
- path: ".",
70
- waitForInvalidation: false,
71
- runtime: "nodejs18.x",
72
- timeout: "10 seconds",
73
- memorySize: "1024 MB",
74
- ...props,
75
- };
76
- this.doNotDeploy =
77
- !stack.isActive || (app.mode === "dev" && !this.props.dev?.deploy);
78
- this.buildConfig = this.initBuildConfig();
79
- this.validateSiteExists();
80
- this.validateTimeout();
81
- this.writeTypesFile();
82
- useSites().add(stack.stackName, id, this.constructor.name, this.props);
83
- if (this.doNotDeploy) {
84
- // @ts-expect-error
85
- this.bucket = this.s3Origin = this.distribution = null;
86
- this.serverLambdaForDev = this.createFunctionForDev();
87
- return;
88
- }
89
- // Create Bucket which will be utilised to contain the statics
90
- this.bucket = this.createS3Bucket();
91
- // Create Server functions
92
- if (this.props.edge) {
93
- this.serverLambdaForEdge = this.createFunctionForEdge();
94
- }
95
- else {
96
- this.serverLambdaForRegional = this.createFunctionForRegional();
97
- }
98
- this.grantServerS3Permissions();
99
- // Create CloudFront
100
- this.s3Origin = this.createCloudFrontS3Origin();
101
- this.distribution = this.props.edge
102
- ? this.createCloudFrontDistributionForEdge()
103
- : this.createCloudFrontDistributionForRegional();
104
- this.grantServerCloudFrontPermissions();
105
- useDeferredTasks().add(async () => {
106
- // Build app
107
- this.buildApp();
108
- // Build server functions
109
- await this.serverLambdaForEdge?.build();
110
- await this.serverLambdaForRegional?.build();
111
- await this.serverUrlSigningFunction?.build();
112
- // Create warmer
113
- // Note: create warmer after build app b/c the warmer code
114
- // for NextjsSite depends on OpenNext build output
115
- this.createWarmer();
116
- // Create S3 Deployment
117
- const cliLayer = new AwsCliLayer(this, "AwsCliLayer");
118
- const assets = this.createS3Assets();
119
- const assetFileOptions = this.createS3AssetFileOptions();
120
- const s3deployCR = this.createS3Deployment(cliLayer, assets, assetFileOptions);
121
- this.distribution.node.addDependency(s3deployCR);
122
- // Add static file behaviors
123
- this.addStaticFileBehaviors();
124
- // Invalidate CloudFront
125
- this.distribution.createInvalidation(this.generateBuildId());
126
- for (const task of this.deferredTaskCallbacks) {
127
- await task();
128
- }
129
- });
130
- }
131
- /////////////////////
132
- // Public Properties
133
- /////////////////////
134
- /**
135
- * The CloudFront URL of the website.
136
- */
137
- get url() {
138
- if (this.doNotDeploy)
139
- return this.props.dev?.url;
140
- return this.distribution.url;
141
- }
142
- /**
143
- * If the custom domain is enabled, this is the URL of the website with the
144
- * custom domain.
145
- */
146
- get customDomainUrl() {
147
- if (this.doNotDeploy)
148
- return;
149
- return this.distribution.customDomainUrl;
150
- }
151
- /**
152
- * The internally created CDK resources.
153
- */
154
- get cdk() {
155
- if (this.doNotDeploy)
156
- return;
157
- return {
158
- function: this.serverLambdaForEdge?.function ||
159
- this.serverLambdaForRegional?.function,
160
- bucket: this.bucket,
161
- distribution: this.distribution.cdk.distribution,
162
- hostedZone: this.distribution.cdk.hostedZone,
163
- certificate: this.distribution.cdk.certificate,
164
- };
165
- }
166
- /////////////////////
167
- // Public Methods
168
- /////////////////////
169
- /**
170
- * Attaches the given list of permissions to allow the server side
171
- * rendering framework to access other AWS resources.
172
- *
173
- * @example
174
- * ```js
175
- * site.attachPermissions(["sns"]);
176
- * ```
177
- */
178
- attachPermissions(permissions) {
179
- const server = this.serverLambdaForEdge ||
180
- this.serverLambdaForRegional ||
181
- this.serverLambdaForDev;
182
- attachPermissionsToRole(server?.role, permissions);
183
- }
184
- /** @internal */
185
- getConstructMetadataBase() {
186
- return {
187
- data: {
188
- mode: this.doNotDeploy
189
- ? "placeholder"
190
- : "deployed",
191
- path: this.props.path,
192
- runtime: this.props.runtime,
193
- customDomainUrl: this.customDomainUrl,
194
- url: this.url,
195
- edge: this.props.edge,
196
- server: (this.serverLambdaForDev ||
197
- this.serverLambdaForRegional ||
198
- this.serverLambdaForEdge)?.functionArn,
199
- secrets: (this.props.bind || [])
200
- .filter((c) => c instanceof Secret)
201
- .map((c) => c.name),
202
- },
203
- };
204
- }
205
- /** @internal */
206
- getFunctionBinding() {
207
- const app = this.node.root;
208
- return {
209
- clientPackage: "site",
210
- variables: {
211
- url: this.doNotDeploy
212
- ? {
213
- type: "plain",
214
- value: this.props.dev?.url ?? "localhost",
215
- }
216
- : {
217
- // Do not set real value b/c we don't want to make the Lambda function
218
- // depend on the Site. B/c often the site depends on the Api, causing
219
- // a CloudFormation circular dependency if the Api and the Site belong
220
- // to different stacks.
221
- type: "site_url",
222
- value: this.customDomainUrl || this.url,
223
- },
224
- },
225
- permissions: {
226
- "ssm:GetParameters": [
227
- `arn:${Stack.of(this).partition}:ssm:${app.region}:${app.account}:parameter${getParameterPath(this, "url")}`,
228
- ],
229
- },
230
- };
231
- }
232
- /////////////////////
233
- // Build App
234
- /////////////////////
235
- initBuildConfig() {
236
- return {
237
- typesPath: ".",
238
- serverBuildOutputFile: "placeholder",
239
- clientBuildOutputDir: "placeholder",
240
- clientBuildVersionedSubDir: "placeholder",
241
- };
242
- }
243
- buildApp() {
244
- const app = this.node.root;
245
- if (!app.isRunningSSTTest()) {
246
- this.runBuild();
247
- }
248
- this.validateBuildOutput();
249
- }
250
- validateBuildOutput() {
251
- const serverBuildFile = path.join(this.props.path, this.buildConfig.serverBuildOutputFile);
252
- if (!fs.existsSync(serverBuildFile)) {
253
- throw new Error(`No server build output found at "${serverBuildFile}"`);
254
- }
255
- }
256
- runBuild() {
257
- const { path: sitePath, buildCommand: rawBuildCommand, environment, } = this.props;
258
- const defaultCommand = "npm run build";
259
- const buildCommand = rawBuildCommand || defaultCommand;
260
- if (buildCommand === defaultCommand) {
261
- // Ensure that the site has a build script defined
262
- if (!fs.existsSync(path.join(sitePath, "package.json"))) {
263
- throw new Error(`No package.json found at "${sitePath}".`);
264
- }
265
- const packageJson = JSON.parse(fs.readFileSync(path.join(sitePath, "package.json")).toString());
266
- if (!packageJson.scripts || !packageJson.scripts.build) {
267
- throw new Error(`No "build" script found within package.json in "${sitePath}".`);
268
- }
269
- }
270
- // Run build
271
- Logger.debug(`Running "${buildCommand}" script`);
272
- try {
273
- execSync(buildCommand, {
274
- cwd: sitePath,
275
- stdio: "inherit",
276
- env: {
277
- SST: "1",
278
- ...process.env,
279
- ...getBuildCmdEnvironment(environment),
280
- },
281
- });
282
- }
283
- catch (e) {
284
- throw new Error(`There was a problem building the "${this.node.id}" ${this.getConstructMetadata().type}.`);
285
- }
286
- }
287
- /////////////////////
288
- // Bundle S3 Assets
289
- /////////////////////
290
- createS3Assets() {
291
- // Create temp folder, clean up if exists
292
- const zipOutDir = path.resolve(path.join(useProject().paths.artifacts, `Site-${this.node.id}-${this.node.addr}`));
293
- fs.rmSync(zipOutDir, { recursive: true, force: true });
294
- // Create zip files
295
- const app = this.node.root;
296
- const script = path.resolve(__dirname, "../support/base-site-archiver.mjs");
297
- const fileSizeLimit = app.isRunningSSTTest()
298
- ? // eslint-disable-next-line @typescript-eslint/ban-ts-comment
299
- // @ts-ignore: "sstTestFileSizeLimitOverride" not exposed in props
300
- this.props.sstTestFileSizeLimitOverride || 200
301
- : 200;
302
- const result = spawn.sync("node", [
303
- script,
304
- Buffer.from(JSON.stringify([
305
- {
306
- src: path.join(this.props.path, this.buildConfig.clientBuildOutputDir),
307
- tar: this.buildConfig.clientBuildS3KeyPrefix || "",
308
- },
309
- ...(this.buildConfig.prerenderedBuildOutputDir
310
- ? [
311
- {
312
- src: path.join(this.props.path, this.buildConfig.prerenderedBuildOutputDir),
313
- tar: this.buildConfig.prerenderedBuildS3KeyPrefix || "",
314
- },
315
- ]
316
- : []),
317
- ])).toString("base64"),
318
- zipOutDir,
319
- `${fileSizeLimit}`,
320
- ], {
321
- stdio: "inherit",
322
- });
323
- if (result.status !== 0) {
324
- throw new Error(`There was a problem generating the assets package.`);
325
- }
326
- // Create S3 Assets for each zip file
327
- const assets = [];
328
- for (let partId = 0;; partId++) {
329
- const zipFilePath = path.join(zipOutDir, `part${partId}.zip`);
330
- if (!fs.existsSync(zipFilePath)) {
331
- break;
332
- }
333
- assets.push(new Asset(this, `Asset${partId}`, {
334
- path: zipFilePath,
335
- }));
336
- }
337
- return assets;
338
- }
339
- createS3AssetFileOptions() {
340
- if (this.props.fileOptions)
341
- return this.props.fileOptions;
342
- // Build file options
343
- const fileOptions = [];
344
- const clientPath = path.join(this.props.path, this.buildConfig.clientBuildOutputDir);
345
- for (const item of fs.readdirSync(clientPath)) {
346
- // Versioned files will be cached for 1 year (immutable) both at
347
- // the CDN and browser level.
348
- if (item === this.buildConfig.clientBuildVersionedSubDir) {
349
- fileOptions.push({
350
- exclude: "*",
351
- include: path.posix.join(this.buildConfig.clientBuildS3KeyPrefix ?? "", this.buildConfig.clientBuildVersionedSubDir, "*"),
352
- cacheControl: "public,max-age=31536000,immutable",
353
- });
354
- }
355
- // Un-versioned files will be cached for 1 year at the CDN level.
356
- // But not at the browser level. CDN cache will be invalidated on deploy.
357
- else {
358
- const itemPath = path.join(clientPath, item);
359
- fileOptions.push({
360
- exclude: "*",
361
- include: path.posix.join(this.buildConfig.clientBuildS3KeyPrefix ?? "", item, fs.statSync(itemPath).isDirectory() ? "*" : ""),
362
- cacheControl: "public,max-age=0,s-maxage=31536000,must-revalidate",
363
- });
364
- }
365
- }
366
- return fileOptions;
367
- }
368
- createS3Bucket() {
369
- const { cdk } = this.props;
370
- // cdk.bucket is an imported construct
371
- if (cdk?.bucket && isCDKConstruct(cdk?.bucket)) {
372
- return cdk.bucket;
373
- }
374
- // cdk.bucket is a prop
375
- return new Bucket(this, "S3Bucket", {
376
- publicReadAccess: false,
377
- blockPublicAccess: BlockPublicAccess.BLOCK_ALL,
378
- autoDeleteObjects: true,
379
- removalPolicy: RemovalPolicy.DESTROY,
380
- enforceSSL: true,
381
- ...cdk?.bucket,
382
- });
383
- }
384
- createS3Deployment(cliLayer, assets, fileOptions) {
385
- // Create a Lambda function that will be doing the uploading
386
- const uploader = new CdkFunction(this, "S3Uploader", {
387
- code: Code.fromAsset(path.join(__dirname, "../support/base-site-custom-resource")),
388
- layers: [cliLayer],
389
- runtime: Runtime.PYTHON_3_11,
390
- handler: "s3-upload.handler",
391
- timeout: CdkDuration.minutes(15),
392
- memorySize: 1024,
393
- });
394
- this.bucket.grantReadWrite(uploader);
395
- assets.forEach((asset) => asset.grantRead(uploader));
396
- // Create the custom resource function
397
- const handler = new CdkFunction(this, "S3Handler", {
398
- code: Code.fromAsset(path.join(__dirname, "../support/base-site-custom-resource")),
399
- layers: [cliLayer],
400
- runtime: Runtime.PYTHON_3_11,
401
- handler: "s3-handler.handler",
402
- timeout: CdkDuration.minutes(15),
403
- memorySize: 1024,
404
- environment: {
405
- UPLOADER_FUNCTION_NAME: uploader.functionName,
406
- },
407
- });
408
- this.bucket.grantReadWrite(handler);
409
- uploader.grantInvoke(handler);
410
- // Create custom resource
411
- return new CustomResource(this, "S3Deployment", {
412
- serviceToken: handler.functionArn,
413
- resourceType: "Custom::SSTBucketDeployment",
414
- properties: {
415
- Sources: assets.map((asset) => ({
416
- BucketName: asset.s3BucketName,
417
- ObjectKey: asset.s3ObjectKey,
418
- })),
419
- DestinationBucketName: this.bucket.bucketName,
420
- FileOptions: (fileOptions || []).map(({ exclude, include, cacheControl, contentType }) => {
421
- if (typeof exclude === "string") {
422
- exclude = [exclude];
423
- }
424
- if (typeof include === "string") {
425
- include = [include];
426
- }
427
- return [
428
- ...exclude.map((per) => ["--exclude", per]),
429
- ...include.map((per) => ["--include", per]),
430
- ["--cache-control", cacheControl],
431
- contentType ? ["--content-type", contentType] : [],
432
- ].flat();
433
- }),
434
- ReplaceValues: this.getS3ContentReplaceValues(),
435
- },
436
- });
437
- }
438
- /////////////////////
439
- // Bundle Lambda Server
440
- /////////////////////
441
- createFunctionForRegional() {
442
- return {};
443
- }
444
- createFunctionForEdge() {
445
- return {};
446
- }
447
- createFunctionForDev() {
448
- const { runtime, timeout, memorySize, permissions, environment, bind } = this.props;
449
- const app = this.node.root;
450
- const role = new Role(this, "ServerFunctionRole", {
451
- assumedBy: new CompositePrincipal(new AccountPrincipal(app.account), new ServicePrincipal("lambda.amazonaws.com")),
452
- maxSessionDuration: CdkDuration.hours(12),
453
- });
454
- const ssrFn = new SsrFunction(this, `ServerFunction`, {
455
- description: "Server handler placeholder",
456
- bundle: path.join(__dirname, "../support/ssr-site-function-stub"),
457
- handler: "index.handler",
458
- runtime,
459
- memorySize,
460
- timeout,
461
- role,
462
- bind,
463
- environment,
464
- permissions,
465
- // note: do not need to set vpc settings b/c this function is not being used
466
- });
467
- useDeferredTasks().add(async () => {
468
- await ssrFn.build();
469
- });
470
- return ssrFn;
471
- }
472
- grantServerS3Permissions() {
473
- const server = this.serverLambdaForEdge || this.serverLambdaForRegional;
474
- this.bucket.grantReadWrite(server.role);
475
- }
476
- grantServerCloudFrontPermissions() {
477
- const stack = Stack.of(this);
478
- const server = this.serverLambdaForEdge || this.serverLambdaForRegional;
479
- const policy = new Policy(this, "ServerFunctionInvalidatorPolicy", {
480
- statements: [
481
- new PolicyStatement({
482
- actions: ["cloudfront:CreateInvalidation"],
483
- resources: [
484
- `arn:${stack.partition}:cloudfront::${stack.account}:distribution/${this.distribution.cdk.distribution.distributionId}`,
485
- ],
486
- }),
487
- ],
488
- });
489
- server?.role?.attachInlinePolicy(policy);
490
- }
491
- createWarmer() {
492
- const { warm, edge } = this.props;
493
- if (!warm)
494
- return;
495
- if (warm && edge) {
496
- throw new VisibleError(`In the "${this.node.id}" Site, warming is currently supported only for the regional mode.`);
497
- }
498
- if (!this.serverLambdaForRegional)
499
- return;
500
- // Create warmer function
501
- const warmer = new CdkFunction(this, "WarmerFunction", {
502
- description: "Next.js warmer",
503
- code: Code.fromAsset(this.buildConfig.warmerFunctionAssetPath ??
504
- path.join(__dirname, "../support/ssr-warmer")),
505
- runtime: Runtime.NODEJS_18_X,
506
- handler: "index.handler",
507
- timeout: CdkDuration.minutes(15),
508
- memorySize: 1024,
509
- environment: {
510
- FUNCTION_NAME: this.serverLambdaForRegional.functionName,
511
- CONCURRENCY: warm.toString(),
512
- },
513
- });
514
- this.serverLambdaForRegional.grantInvoke(warmer);
515
- // Create cron job
516
- new Rule(this, "WarmerRule", {
517
- schedule: Schedule.rate(CdkDuration.minutes(5)),
518
- targets: [new LambdaFunction(warmer, { retryAttempts: 0 })],
519
- });
520
- // Create custom resource to prewarm on deploy
521
- const stack = Stack.of(this);
522
- const policy = new Policy(this, "PrewarmerPolicy", {
523
- statements: [
524
- new PolicyStatement({
525
- effect: Effect.ALLOW,
526
- actions: ["lambda:InvokeFunction"],
527
- resources: [warmer.functionArn],
528
- }),
529
- ],
530
- });
531
- stack.customResourceHandler.role?.attachInlinePolicy(policy);
532
- const resource = new CustomResource(this, "Prewarmer", {
533
- serviceToken: stack.customResourceHandler.functionArn,
534
- resourceType: "Custom::FunctionInvoker",
535
- properties: {
536
- version: Date.now().toString(),
537
- functionName: warmer.functionName,
538
- },
539
- });
540
- resource.node.addDependency(policy);
541
- }
542
- /////////////////////
543
- // CloudFront Distribution
544
- /////////////////////
545
- createCloudFrontS3Origin() {
546
- return new S3Origin(this.bucket, {
547
- originPath: "/" + (this.buildConfig.clientBuildS3KeyPrefix ?? ""),
548
- });
549
- }
550
- createCloudFrontDistributionForRegional() {
551
- const { customDomain, cdk } = this.props;
552
- const cfDistributionProps = cdk?.distribution || {};
553
- return new Distribution(this, "CDN", {
554
- scopeOverride: this,
555
- customDomain,
556
- cdk: {
557
- distribution: {
558
- // these values can be overwritten by cfDistributionProps
559
- defaultRootObject: "",
560
- // Override props.
561
- ...cfDistributionProps,
562
- // these values can NOT be overwritten by cfDistributionProps
563
- defaultBehavior: this.buildDefaultBehaviorForRegional(),
564
- additionalBehaviors: {
565
- ...(cfDistributionProps.additionalBehaviors || {}),
566
- },
567
- },
568
- },
569
- });
570
- }
571
- createCloudFrontDistributionForEdge() {
572
- const { customDomain, cdk } = this.props;
573
- const cfDistributionProps = cdk?.distribution || {};
574
- return new Distribution(this, "CDN", {
575
- scopeOverride: this,
576
- customDomain,
577
- cdk: {
578
- distribution: {
579
- // these values can be overwritten by cfDistributionProps
580
- defaultRootObject: "",
581
- // Override props.
582
- ...cfDistributionProps,
583
- // these values can NOT be overwritten by cfDistributionProps
584
- defaultBehavior: this.buildDefaultBehaviorForEdge(),
585
- additionalBehaviors: {
586
- ...(cfDistributionProps.additionalBehaviors || {}),
587
- },
588
- },
589
- },
590
- });
591
- }
592
- buildDefaultBehaviorForRegional() {
593
- const { timeout, regional, cdk } = this.props;
594
- const cfDistributionProps = cdk?.distribution || {};
595
- const fnUrl = this.serverLambdaForRegional.addFunctionUrl({
596
- authType: regional?.enableServerUrlIamAuth
597
- ? FunctionUrlAuthType.AWS_IAM
598
- : FunctionUrlAuthType.NONE,
599
- invokeMode: this.supportsStreaming()
600
- ? InvokeMode.RESPONSE_STREAM
601
- : undefined,
602
- });
603
- return {
604
- viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
605
- origin: new HttpOrigin(Fn.parseDomainName(fnUrl.url), {
606
- readTimeout: typeof timeout === "string"
607
- ? toCdkDuration(timeout)
608
- : CdkDuration.seconds(timeout),
609
- }),
610
- allowedMethods: AllowedMethods.ALLOW_ALL,
611
- cachedMethods: CachedMethods.CACHE_GET_HEAD_OPTIONS,
612
- compress: true,
613
- cachePolicy: cdk?.serverCachePolicy ?? this.useServerBehaviorCachePolicy(),
614
- responseHeadersPolicy: cdk?.responseHeadersPolicy,
615
- originRequestPolicy: this.useServerBehaviorOriginRequestPolicy(),
616
- ...(cfDistributionProps.defaultBehavior || {}),
617
- functionAssociations: [
618
- ...this.useServerBehaviorFunctionAssociations(),
619
- ...(cfDistributionProps.defaultBehavior?.functionAssociations || []),
620
- ],
621
- edgeLambdas: [
622
- ...(regional?.enableServerUrlIamAuth
623
- ? [
624
- {
625
- includeBody: true,
626
- eventType: LambdaEdgeEventType.ORIGIN_REQUEST,
627
- functionVersion: this.useServerUrlSigningFunction().currentVersion,
628
- },
629
- ]
630
- : []),
631
- ...(cfDistributionProps.defaultBehavior?.edgeLambdas || []),
632
- ],
633
- };
634
- }
635
- buildDefaultBehaviorForEdge() {
636
- const { cdk } = this.props;
637
- const cfDistributionProps = cdk?.distribution || {};
638
- return {
639
- viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
640
- origin: this.s3Origin,
641
- allowedMethods: AllowedMethods.ALLOW_ALL,
642
- cachedMethods: CachedMethods.CACHE_GET_HEAD_OPTIONS,
643
- compress: true,
644
- cachePolicy: cdk?.serverCachePolicy ?? this.useServerBehaviorCachePolicy(),
645
- responseHeadersPolicy: cdk?.responseHeadersPolicy,
646
- originRequestPolicy: this.useServerBehaviorOriginRequestPolicy(),
647
- ...(cfDistributionProps.defaultBehavior || {}),
648
- functionAssociations: [
649
- ...this.useServerBehaviorFunctionAssociations(),
650
- ...(cfDistributionProps.defaultBehavior?.functionAssociations || []),
651
- ],
652
- edgeLambdas: [
653
- {
654
- includeBody: true,
655
- eventType: LambdaEdgeEventType.ORIGIN_REQUEST,
656
- functionVersion: this.serverLambdaForEdge.currentVersion,
657
- },
658
- ...(cfDistributionProps.defaultBehavior?.edgeLambdas || []),
659
- ],
660
- };
661
- }
662
- addStaticFileBehaviors() {
663
- const { cdk } = this.props;
664
- // Create a template for statics behaviours
665
- const publicDir = path.join(this.props.path, this.buildConfig.clientBuildOutputDir);
666
- for (const item of fs.readdirSync(publicDir)) {
667
- const isDir = fs.statSync(path.join(publicDir, item)).isDirectory();
668
- this.distribution.cdk.distribution.addBehavior(isDir ? `${item}/*` : item, this.s3Origin, {
669
- viewerProtocolPolicy: ViewerProtocolPolicy.REDIRECT_TO_HTTPS,
670
- allowedMethods: AllowedMethods.ALLOW_GET_HEAD_OPTIONS,
671
- cachedMethods: CachedMethods.CACHE_GET_HEAD_OPTIONS,
672
- compress: true,
673
- cachePolicy: CachePolicy.CACHING_OPTIMIZED,
674
- responseHeadersPolicy: cdk?.responseHeadersPolicy,
675
- functionAssociations: [
676
- ...this.useStaticBehaviorFunctionAssociations(),
677
- ],
678
- });
679
- }
680
- }
681
- useServerBehaviorFunctionAssociations() {
682
- this.serverCfFunction =
683
- this.serverCfFunction ??
684
- new CfFunction(this, "CloudFrontFunction", {
685
- code: CfFunctionCode.fromInline(`
686
- function handler(event) {
687
- var request = event.request;
688
- request.headers["x-forwarded-host"] = request.headers.host;
689
- ${this.buildConfig.serverCFFunctionInjection || ""}
690
- return request;
691
- }`),
692
- });
693
- return [
694
- {
695
- eventType: CfFunctionEventType.VIEWER_REQUEST,
696
- function: this.serverCfFunction,
697
- },
698
- ];
699
- }
700
- useStaticBehaviorFunctionAssociations() {
701
- if (!this.buildConfig.clientCFFunctionInjection)
702
- return [];
703
- this.staticCfFunction =
704
- this.staticCfFunction ??
705
- new CfFunction(this, "CloudFrontFunctionForStaticBehavior", {
706
- code: CfFunctionCode.fromInline(`
707
- function handler(event) {
708
- var request = event.request;
709
- ${this.buildConfig.clientCFFunctionInjection || ""}
710
- return request;
711
- }`),
712
- });
713
- return [
714
- {
715
- eventType: CfFunctionEventType.VIEWER_REQUEST,
716
- function: this.staticCfFunction,
717
- },
718
- ];
719
- }
720
- useServerUrlSigningFunction() {
721
- this.serverUrlSigningFunction =
722
- this.serverUrlSigningFunction ??
723
- new EdgeFunction(this, "ServerUrlSigningFunction", {
724
- bundle: path.join(__dirname, "../support/signing-function"),
725
- runtime: "nodejs18.x",
726
- handler: "index.handler",
727
- timeout: 10,
728
- memorySize: 128,
729
- permissions: [
730
- new PolicyStatement({
731
- actions: ["lambda:InvokeFunctionUrl"],
732
- resources: [this.serverLambdaForRegional?.functionArn],
733
- }),
734
- ],
735
- });
736
- return this.serverUrlSigningFunction;
737
- }
738
- useServerBehaviorCachePolicy(allowedHeaders) {
739
- this.serverBehaviorCachePolicy =
740
- this.serverBehaviorCachePolicy ??
741
- new CachePolicy(this, "ServerCache", {
742
- queryStringBehavior: CacheQueryStringBehavior.all(),
743
- headerBehavior: allowedHeaders && allowedHeaders.length > 0
744
- ? CacheHeaderBehavior.allowList(...allowedHeaders)
745
- : CacheHeaderBehavior.none(),
746
- cookieBehavior: CacheCookieBehavior.none(),
747
- defaultTtl: CdkDuration.days(0),
748
- maxTtl: CdkDuration.days(365),
749
- minTtl: CdkDuration.days(0),
750
- enableAcceptEncodingBrotli: true,
751
- enableAcceptEncodingGzip: true,
752
- comment: "SST server response cache policy",
753
- });
754
- return this.serverBehaviorCachePolicy;
755
- }
756
- useServerBehaviorOriginRequestPolicy() {
757
- // CloudFront's Managed-AllViewerExceptHostHeader policy
758
- this.serverBehaviorOriginRequestPolicy =
759
- this.serverBehaviorOriginRequestPolicy ??
760
- OriginRequestPolicy.fromOriginRequestPolicyId(this, "ServerOriginRequestPolicy", "b689b0a8-53d0-40ab-baf2-68738e2966ac");
761
- return this.serverBehaviorOriginRequestPolicy;
762
- }
763
- /////////////////////
764
- // Helper Functions
765
- /////////////////////
766
- getS3ContentReplaceValues() {
767
- const replaceValues = [];
768
- Object.entries(this.props.environment || {})
769
- .filter(([, value]) => Token.isUnresolved(value))
770
- .forEach(([key, value]) => {
771
- const token = `{{ ${key} }}`;
772
- replaceValues.push({
773
- files: "**/*.html",
774
- search: token,
775
- replace: value,
776
- }, {
777
- files: "**/*.js",
778
- search: token,
779
- replace: value,
780
- }, {
781
- files: "**/*.json",
782
- search: token,
783
- replace: value,
784
- });
785
- });
786
- return replaceValues;
787
- }
788
- validateSiteExists() {
789
- const { path: sitePath } = this.props;
790
- if (!fs.existsSync(sitePath)) {
791
- throw new Error(`No site found at "${path.resolve(sitePath)}"`);
792
- }
793
- }
794
- validateTimeout() {
795
- const { edge, timeout } = this.props;
796
- const num = typeof timeout === "number"
797
- ? timeout
798
- : toCdkDuration(timeout).toSeconds();
799
- const limit = edge ? 30 : 180;
800
- if (num > limit) {
801
- throw new Error(edge
802
- ? `Timeout must be less than or equal to 30 seconds when the "edge" flag is enabled.`
803
- : `Timeout must be less than or equal to 180 seconds.`);
804
- }
805
- }
806
- writeTypesFile() {
807
- const typesPath = path.resolve(this.props.path, this.buildConfig.typesPath, "sst-env.d.ts");
808
- // Do not override the types file if it already exists
809
- if (fs.existsSync(typesPath))
810
- return;
811
- const relPathToSstTypesFile = path.join(path.relative(path.dirname(typesPath), useProject().paths.root), ".sst/types/index.ts");
812
- fs.writeFileSync(typesPath, `/// <reference path="${relPathToSstTypesFile}" />`);
813
- }
814
- generateBuildId() {
815
- // We will generate a hash based on the contents of the "public" folder
816
- // which will be used to indicate if we need to invalidate our CloudFront
817
- // cache.
818
- // The below options are needed to support following symlinks when building zip files:
819
- // - nodir: This will prevent symlinks themselves from being copied into the zip.
820
- // - follow: This will follow symlinks and copy the files within.
821
- const globOptions = {
822
- dot: true,
823
- nodir: true,
824
- follow: true,
825
- cwd: path.resolve(this.props.path, this.buildConfig.clientBuildOutputDir),
826
- };
827
- const files = glob.sync("**", globOptions);
828
- const hash = crypto.createHash("sha1");
829
- for (const file of files) {
830
- hash.update(file);
831
- }
832
- const buildId = hash.digest("hex");
833
- Logger.debug(`Generated build ID ${buildId}`);
834
- return buildId;
835
- }
836
- supportsStreaming() {
837
- return false;
838
- }
839
- }
840
- export const useSites = createAppContext(() => {
841
- const sites = [];
842
- return {
843
- add(stack, name, type, props) {
844
- sites.push({ stack, name, type, props });
845
- },
846
- get all() {
847
- return sites;
848
- },
849
- };
850
- });