@remotion/lambda 4.0.0-2x.1 → 4.0.0-alpha.111

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 (403) hide show
  1. package/LICENSE.md +8 -8
  2. package/dist/admin/bundle-lambda.d.ts +0 -0
  3. package/dist/admin/bundle-lambda.js +16 -3
  4. package/dist/admin/generate-etag-list.d.ts +1 -0
  5. package/dist/admin/generate-etag-list.js +14 -0
  6. package/dist/admin/make-layer-public.d.ts +0 -0
  7. package/dist/admin/make-layer-public.js +62 -67
  8. package/dist/api/bucket-exists.d.ts +0 -0
  9. package/dist/api/bucket-exists.js +1 -1
  10. package/dist/api/clean-items.d.ts +0 -0
  11. package/dist/api/clean-items.js +2 -2
  12. package/dist/api/create-bucket.d.ts +0 -0
  13. package/dist/api/create-bucket.js +1 -1
  14. package/dist/api/create-function.d.ts +1 -3
  15. package/dist/api/create-function.js +25 -4
  16. package/dist/api/delete-function.d.ts +1 -1
  17. package/dist/api/delete-function.js +1 -1
  18. package/dist/api/delete-render.d.ts +19 -0
  19. package/dist/api/delete-render.js +66 -0
  20. package/dist/api/delete-site.d.ts +1 -1
  21. package/dist/api/delete-site.js +1 -6
  22. package/dist/api/deploy-function.d.ts +1 -4
  23. package/dist/api/deploy-function.js +6 -8
  24. package/dist/api/deploy-site.d.ts +11 -2
  25. package/dist/api/deploy-site.js +60 -22
  26. package/dist/api/download-media.d.ts +12 -3
  27. package/dist/api/download-media.js +16 -8
  28. package/dist/api/estimate-price.d.ts +2 -4
  29. package/dist/api/estimate-price.js +4 -10
  30. package/dist/api/get-aws-client.d.ts +7 -3
  31. package/dist/api/get-aws-client.js +10 -3
  32. package/dist/api/get-buckets.d.ts +0 -0
  33. package/dist/api/get-buckets.js +27 -10
  34. package/dist/api/get-compositions-on-lambda.d.ts +29 -0
  35. package/dist/api/get-compositions-on-lambda.js +54 -0
  36. package/dist/api/get-function-info.d.ts +2 -3
  37. package/dist/api/get-function-info.js +1 -1
  38. package/dist/api/get-functions.d.ts +1 -3
  39. package/dist/api/get-functions.js +3 -4
  40. package/dist/api/get-or-create-bucket.d.ts +2 -1
  41. package/dist/api/get-or-create-bucket.js +6 -11
  42. package/dist/api/get-regions.d.ts +6 -2
  43. package/dist/api/get-regions.js +6 -3
  44. package/dist/api/get-render-progress.d.ts +5 -2
  45. package/dist/api/get-render-progress.js +6 -2
  46. package/dist/api/get-sites.d.ts +2 -2
  47. package/dist/api/get-sites.js +1 -2
  48. package/dist/api/iam-validation/role-permissions.d.ts +0 -0
  49. package/dist/api/iam-validation/role-permissions.js +0 -0
  50. package/dist/api/iam-validation/simulate-rule.d.ts +0 -0
  51. package/dist/api/iam-validation/simulate-rule.js +0 -22
  52. package/dist/api/iam-validation/simulate.d.ts +1 -1
  53. package/dist/api/iam-validation/simulate.js +27 -6
  54. package/dist/api/iam-validation/suggested-policy.d.ts +0 -0
  55. package/dist/api/iam-validation/suggested-policy.js +0 -0
  56. package/dist/api/iam-validation/user-permissions.d.ts +1 -1
  57. package/dist/api/iam-validation/user-permissions.js +1 -8
  58. package/dist/api/mock-functions.d.ts +4 -5
  59. package/dist/api/mock-functions.js +0 -0
  60. package/dist/api/presign-url.d.ts +4 -4
  61. package/dist/api/presign-url.js +9 -4
  62. package/dist/api/render-media-on-lambda.d.ts +37 -16
  63. package/dist/api/render-media-on-lambda.js +88 -38
  64. package/dist/api/render-still-on-lambda.d.ts +11 -6
  65. package/dist/api/render-still-on-lambda.js +58 -31
  66. package/dist/api/speculate-function-name.d.ts +14 -0
  67. package/dist/api/speculate-function-name.js +22 -0
  68. package/dist/api/upload-dir.d.ts +4 -3
  69. package/dist/api/upload-dir.js +57 -50
  70. package/dist/api/validate-webhook-signature.d.ts +13 -0
  71. package/dist/api/validate-webhook-signature.js +32 -0
  72. package/dist/cli/args.d.ts +9 -4
  73. package/dist/cli/args.js +1 -5
  74. package/dist/cli/commands/compositions/index.d.ts +2 -0
  75. package/dist/cli/commands/compositions/index.js +44 -0
  76. package/dist/cli/commands/functions/deploy.d.ts +0 -0
  77. package/dist/cli/commands/functions/deploy.js +11 -13
  78. package/dist/cli/commands/functions/index.d.ts +0 -0
  79. package/dist/cli/commands/functions/index.js +16 -17
  80. package/dist/cli/commands/functions/ls.d.ts +0 -0
  81. package/dist/cli/commands/functions/ls.js +9 -7
  82. package/dist/cli/commands/functions/rm.d.ts +0 -0
  83. package/dist/cli/commands/functions/rm.js +8 -2
  84. package/dist/cli/commands/functions/rmall.d.ts +0 -0
  85. package/dist/cli/commands/functions/rmall.js +8 -2
  86. package/dist/cli/commands/policies/policies.d.ts +0 -0
  87. package/dist/cli/commands/policies/policies.js +0 -0
  88. package/dist/cli/commands/policies/role.d.ts +0 -0
  89. package/dist/cli/commands/policies/role.js +0 -0
  90. package/dist/cli/commands/policies/user.d.ts +0 -0
  91. package/dist/cli/commands/policies/user.js +0 -0
  92. package/dist/cli/commands/policies/validate.d.ts +0 -0
  93. package/dist/cli/commands/policies/validate.js +0 -0
  94. package/dist/cli/commands/quotas/increase.d.ts +0 -0
  95. package/dist/cli/commands/quotas/increase.js +28 -8
  96. package/dist/cli/commands/quotas/index.d.ts +0 -0
  97. package/dist/cli/commands/quotas/index.js +8 -9
  98. package/dist/cli/commands/quotas/list.d.ts +0 -0
  99. package/dist/cli/commands/quotas/list.js +0 -0
  100. package/dist/cli/commands/regions.d.ts +0 -0
  101. package/dist/cli/commands/regions.js +6 -2
  102. package/dist/cli/commands/render/progress.d.ts +9 -5
  103. package/dist/cli/commands/render/progress.js +66 -48
  104. package/dist/cli/commands/render/render.d.ts +1 -1
  105. package/dist/cli/commands/render/render.js +86 -29
  106. package/dist/cli/commands/sites/create.d.ts +1 -1
  107. package/dist/cli/commands/sites/create.js +30 -27
  108. package/dist/cli/commands/sites/index.d.ts +1 -1
  109. package/dist/cli/commands/sites/index.js +15 -16
  110. package/dist/cli/commands/sites/ls.d.ts +0 -0
  111. package/dist/cli/commands/sites/ls.js +10 -12
  112. package/dist/cli/commands/sites/rm.d.ts +0 -0
  113. package/dist/cli/commands/sites/rm.js +8 -19
  114. package/dist/cli/commands/sites/rmall.d.ts +0 -0
  115. package/dist/cli/commands/sites/rmall.js +7 -19
  116. package/dist/cli/commands/still.d.ts +1 -1
  117. package/dist/cli/commands/still.js +36 -27
  118. package/dist/cli/get-aws-region.d.ts +0 -0
  119. package/dist/cli/get-aws-region.js +2 -1
  120. package/dist/cli/help.d.ts +0 -0
  121. package/dist/cli/help.js +0 -0
  122. package/dist/cli/helpers/confirm.d.ts +0 -0
  123. package/dist/cli/helpers/confirm.js +0 -0
  124. package/dist/cli/helpers/date-string.d.ts +0 -0
  125. package/dist/cli/helpers/date-string.js +0 -0
  126. package/dist/cli/helpers/find-function-name.d.ts +0 -0
  127. package/dist/cli/helpers/find-function-name.js +37 -7
  128. package/dist/cli/helpers/progress-bar.d.ts +9 -3
  129. package/dist/cli/helpers/progress-bar.js +20 -8
  130. package/dist/cli/helpers/quit.d.ts +0 -0
  131. package/dist/cli/helpers/quit.js +0 -0
  132. package/dist/cli/helpers/yes-or-no.d.ts +0 -0
  133. package/dist/cli/helpers/yes-or-no.js +0 -0
  134. package/dist/cli/index.d.ts +1 -1
  135. package/dist/cli/index.js +20 -9
  136. package/dist/cli/is-cli.d.ts +0 -0
  137. package/dist/cli/is-cli.js +0 -0
  138. package/dist/cli/log.d.ts +12 -0
  139. package/dist/cli/log.js +0 -0
  140. package/dist/client.d.ts +10 -2
  141. package/dist/client.js +11 -1
  142. package/dist/defaults.d.ts +0 -0
  143. package/dist/defaults.js +0 -0
  144. package/dist/functions/chunk-optimization/plan-frame-ranges.d.ts +2 -6
  145. package/dist/functions/chunk-optimization/plan-frame-ranges.js +7 -19
  146. package/dist/functions/chunk-optimization/types.d.ts +0 -11
  147. package/dist/functions/chunk-optimization/types.js +0 -0
  148. package/dist/functions/compositions.d.ts +8 -0
  149. package/dist/functions/compositions.js +56 -0
  150. package/dist/functions/helpers/best-frames-per-lambda-param.d.ts +0 -0
  151. package/dist/functions/helpers/best-frames-per-lambda-param.js +0 -0
  152. package/dist/functions/helpers/calculate-chunk-times.d.ts +0 -0
  153. package/dist/functions/helpers/calculate-chunk-times.js +0 -0
  154. package/dist/functions/helpers/calculate-price-from-bucket.d.ts +1 -3
  155. package/dist/functions/helpers/calculate-price-from-bucket.js +1 -2
  156. package/dist/functions/helpers/check-if-render-exists.d.ts +3 -0
  157. package/dist/functions/helpers/check-if-render-exists.js +14 -0
  158. package/dist/functions/helpers/clean-tmpdir.d.ts +0 -0
  159. package/dist/functions/helpers/clean-tmpdir.js +1 -1
  160. package/dist/functions/helpers/concat-videos.d.ts +15 -6
  161. package/dist/functions/helpers/concat-videos.js +33 -32
  162. package/dist/functions/helpers/create-post-render-data.d.ts +0 -0
  163. package/dist/functions/helpers/create-post-render-data.js +1 -10
  164. package/dist/functions/helpers/delete-chunks.d.ts +0 -0
  165. package/dist/functions/helpers/delete-chunks.js +0 -0
  166. package/dist/functions/helpers/expected-out-name.d.ts +4 -2
  167. package/dist/functions/helpers/expected-out-name.js +27 -6
  168. package/dist/functions/helpers/find-output-file-in-bucket.d.ts +3 -1
  169. package/dist/functions/helpers/find-output-file-in-bucket.js +17 -9
  170. package/dist/functions/helpers/format-costs-info.d.ts +0 -0
  171. package/dist/functions/helpers/format-costs-info.js +0 -0
  172. package/dist/functions/helpers/get-browser-instance.d.ts +0 -0
  173. package/dist/functions/helpers/get-browser-instance.js +2 -2
  174. package/dist/functions/helpers/get-chromium-executable-path.d.ts +1 -1
  175. package/dist/functions/helpers/get-chromium-executable-path.js +3 -2
  176. package/dist/functions/helpers/get-cleanup-progress.d.ts +0 -0
  177. package/dist/functions/helpers/get-cleanup-progress.js +0 -0
  178. package/dist/functions/helpers/get-current-region.d.ts +1 -1
  179. package/dist/functions/helpers/get-current-region.js +0 -0
  180. package/dist/functions/helpers/get-custom-out-name.d.ts +6 -0
  181. package/dist/functions/helpers/get-custom-out-name.js +31 -0
  182. package/dist/functions/helpers/get-encoding-metadata.d.ts +5 -8
  183. package/dist/functions/helpers/get-encoding-metadata.js +7 -17
  184. package/dist/functions/helpers/get-files-in-folder.d.ts +0 -0
  185. package/dist/functions/helpers/get-files-in-folder.js +0 -0
  186. package/dist/functions/helpers/get-files-to-delete.d.ts +0 -0
  187. package/dist/functions/helpers/get-files-to-delete.js +1 -1
  188. package/dist/functions/helpers/get-final-encoding-status.d.ts +2 -4
  189. package/dist/functions/helpers/get-final-encoding-status.js +1 -4
  190. package/dist/functions/helpers/get-folder-size.d.ts +0 -0
  191. package/dist/functions/helpers/get-folder-size.js +0 -0
  192. package/dist/functions/helpers/get-lambdas-invoked-stats.d.ts +4 -3
  193. package/dist/functions/helpers/get-lambdas-invoked-stats.js +2 -10
  194. package/dist/functions/helpers/get-output-url-from-metadata.d.ts +2 -1
  195. package/dist/functions/helpers/get-output-url-from-metadata.js +2 -2
  196. package/dist/functions/helpers/get-overall-progress.d.ts +2 -1
  197. package/dist/functions/helpers/get-overall-progress.js +7 -5
  198. package/dist/functions/helpers/get-post-render-data.d.ts +0 -0
  199. package/dist/functions/helpers/get-post-render-data.js +0 -0
  200. package/dist/functions/helpers/get-progress.d.ts +4 -2
  201. package/dist/functions/helpers/get-progress.js +58 -44
  202. package/dist/functions/helpers/get-render-metadata.d.ts +0 -0
  203. package/dist/functions/helpers/get-render-metadata.js +0 -0
  204. package/dist/functions/helpers/get-rendered-frames-progress.d.ts +8 -0
  205. package/dist/functions/helpers/get-rendered-frames-progress.js +37 -0
  206. package/dist/functions/helpers/get-retry-stats.d.ts +0 -0
  207. package/dist/functions/helpers/get-retry-stats.js +1 -1
  208. package/dist/functions/helpers/get-time-to-finish.d.ts +0 -0
  209. package/dist/functions/helpers/get-time-to-finish.js +0 -0
  210. package/dist/functions/helpers/inspect-errors.d.ts +0 -0
  211. package/dist/functions/helpers/inspect-errors.js +0 -0
  212. package/dist/functions/helpers/io.d.ts +19 -1
  213. package/dist/functions/helpers/io.js +31 -8
  214. package/dist/functions/helpers/is-enosp-err.d.ts +0 -0
  215. package/dist/functions/helpers/is-enosp-err.js +1 -1
  216. package/dist/functions/helpers/is-warm.d.ts +0 -0
  217. package/dist/functions/helpers/is-warm.js +0 -0
  218. package/dist/functions/helpers/make-timeout-error.d.ts +8 -0
  219. package/dist/functions/helpers/make-timeout-error.js +48 -0
  220. package/dist/functions/helpers/min-max.d.ts +1 -1
  221. package/dist/functions/helpers/min-max.js +1 -1
  222. package/dist/functions/helpers/print-cloudwatch-helper.d.ts +1 -1
  223. package/dist/functions/helpers/print-cloudwatch-helper.js +0 -0
  224. package/dist/functions/helpers/print-concurrency-curve.d.ts +0 -0
  225. package/dist/functions/helpers/print-concurrency-curve.js +0 -0
  226. package/dist/functions/helpers/read-with-progress.d.ts +5 -2
  227. package/dist/functions/helpers/read-with-progress.js +16 -4
  228. package/dist/functions/helpers/timer.d.ts +0 -0
  229. package/dist/functions/helpers/timer.js +0 -0
  230. package/dist/functions/helpers/validate-composition.d.ts +6 -5
  231. package/dist/functions/helpers/validate-composition.js +9 -4
  232. package/dist/functions/helpers/write-lambda-error.d.ts +1 -1
  233. package/dist/functions/helpers/write-lambda-error.js +2 -0
  234. package/dist/functions/helpers/write-post-render-data.d.ts +0 -0
  235. package/dist/functions/helpers/write-post-render-data.js +2 -0
  236. package/dist/functions/index.d.ts +15 -4
  237. package/dist/functions/index.js +30 -11
  238. package/dist/functions/info.d.ts +2 -2
  239. package/dist/functions/info.js +2 -1
  240. package/dist/functions/launch.d.ts +1 -0
  241. package/dist/functions/launch.js +359 -129
  242. package/dist/functions/progress.d.ts +1 -1
  243. package/dist/functions/progress.js +10 -1
  244. package/dist/functions/renderer.d.ts +0 -0
  245. package/dist/functions/renderer.js +144 -77
  246. package/dist/functions/start.d.ts +5 -1
  247. package/dist/functions/start.js +44 -6
  248. package/dist/functions/still.d.ts +0 -0
  249. package/dist/functions/still.js +72 -25
  250. package/dist/index.d.ts +28 -8
  251. package/dist/index.js +27 -6
  252. package/dist/internals.d.ts +1 -1
  253. package/dist/internals.js +0 -0
  254. package/dist/pricing/aws-regions.d.ts +2 -1
  255. package/dist/pricing/aws-regions.js +31 -1
  256. package/dist/pricing/price-per-1-s.d.ts +0 -0
  257. package/dist/pricing/price-per-1-s.js +413 -39
  258. package/dist/regions.d.ts +0 -0
  259. package/dist/regions.js +0 -0
  260. package/dist/shared/await.d.ts +0 -0
  261. package/dist/shared/await.js +0 -0
  262. package/dist/shared/aws-clients.d.ts +16 -2
  263. package/dist/shared/aws-clients.js +118 -26
  264. package/dist/shared/bundle-site.d.ts +2 -6
  265. package/dist/shared/bundle-site.js +0 -0
  266. package/dist/shared/call-lambda.d.ts +0 -0
  267. package/dist/shared/call-lambda.js +0 -0
  268. package/dist/shared/check-credentials.d.ts +0 -0
  269. package/dist/shared/check-credentials.js +5 -2
  270. package/dist/shared/chunk-progress.d.ts +9 -0
  271. package/dist/shared/chunk-progress.js +2034 -0
  272. package/dist/shared/cleanup-serialized-input-props.d.ts +7 -0
  273. package/dist/shared/cleanup-serialized-input-props.js +19 -0
  274. package/dist/shared/constants.d.ts +126 -44
  275. package/dist/shared/constants.js +21 -11
  276. package/dist/shared/content-disposition-header.d.ts +7 -0
  277. package/dist/shared/content-disposition-header.js +19 -0
  278. package/dist/shared/convert-to-serve-url.d.ts +5 -1
  279. package/dist/shared/convert-to-serve-url.js +1 -5
  280. package/dist/shared/deserialize-input-props.d.ts +8 -0
  281. package/dist/shared/deserialize-input-props.js +26 -0
  282. package/dist/shared/docs-url.d.ts +0 -0
  283. package/dist/shared/docs-url.js +0 -0
  284. package/dist/shared/function-zip-path.d.ts +1 -1
  285. package/dist/shared/function-zip-path.js +2 -2
  286. package/dist/shared/get-account-id.d.ts +0 -0
  287. package/dist/shared/get-account-id.js +4 -6
  288. package/dist/shared/get-aws-urls.d.ts +14 -0
  289. package/dist/shared/get-aws-urls.js +12 -0
  290. package/dist/shared/get-etag.d.ts +1 -0
  291. package/dist/shared/get-etag.js +24 -0
  292. package/dist/shared/get-function-version.d.ts +1 -2
  293. package/dist/shared/get-function-version.js +0 -0
  294. package/dist/shared/get-most-expensive-chunks.d.ts +1 -1
  295. package/dist/shared/get-most-expensive-chunks.js +3 -2
  296. package/dist/shared/get-s3-operations.d.ts +10 -0
  297. package/dist/shared/get-s3-operations.js +36 -0
  298. package/dist/shared/hosted-layers.d.ts +4 -7
  299. package/dist/shared/hosted-layers.js +294 -284
  300. package/dist/shared/invoke-webhook.d.ts +46 -0
  301. package/dist/shared/invoke-webhook.js +89 -0
  302. package/dist/shared/is-in-lambda.d.ts +0 -0
  303. package/dist/shared/is-in-lambda.js +5 -1
  304. package/dist/shared/lambda-version-string.d.ts +1 -0
  305. package/dist/shared/lambda-version-string.js +7 -0
  306. package/dist/shared/make-s3-key.d.ts +0 -0
  307. package/dist/shared/make-s3-key.js +0 -0
  308. package/dist/shared/make-s3-url.d.ts +0 -0
  309. package/dist/shared/make-s3-url.js +0 -0
  310. package/dist/shared/p-limit.d.ts +0 -0
  311. package/dist/shared/p-limit.js +0 -0
  312. package/dist/shared/parse-chunk-key.d.ts +4 -0
  313. package/dist/shared/parse-chunk-key.js +14 -0
  314. package/dist/shared/parse-lambda-initialized-key.d.ts +0 -0
  315. package/dist/shared/parse-lambda-initialized-key.js +0 -0
  316. package/dist/shared/parse-lambda-timings-key.d.ts +0 -0
  317. package/dist/shared/parse-lambda-timings-key.js +0 -0
  318. package/dist/shared/random-hash.d.ts +0 -0
  319. package/dist/shared/random-hash.js +0 -0
  320. package/dist/shared/read-dir.d.ts +9 -0
  321. package/dist/shared/read-dir.js +57 -0
  322. package/dist/shared/return-values.d.ts +2 -0
  323. package/dist/shared/return-values.js +0 -0
  324. package/dist/shared/serialize-input-props.d.ts +8 -0
  325. package/dist/shared/serialize-input-props.js +42 -0
  326. package/dist/shared/sleep.d.ts +0 -0
  327. package/dist/shared/sleep.js +0 -0
  328. package/dist/shared/stream-to-string.d.ts +0 -0
  329. package/dist/shared/stream-to-string.js +0 -0
  330. package/dist/shared/truthy.d.ts +3 -0
  331. package/dist/shared/truthy.js +7 -0
  332. package/dist/shared/validate-aws-region.d.ts +0 -0
  333. package/dist/shared/validate-aws-region.js +0 -0
  334. package/dist/shared/validate-bucketname.d.ts +5 -0
  335. package/dist/shared/validate-bucketname.js +19 -1
  336. package/dist/shared/validate-custom-role-arn.d.ts +0 -0
  337. package/dist/shared/validate-custom-role-arn.js +0 -0
  338. package/dist/shared/validate-disk-size-in-mb.d.ts +0 -0
  339. package/dist/shared/validate-disk-size-in-mb.js +0 -0
  340. package/dist/shared/validate-download-behavior.d.ts +1 -0
  341. package/dist/shared/validate-download-behavior.js +21 -0
  342. package/dist/shared/validate-frames-per-lambda.d.ts +4 -1
  343. package/dist/shared/validate-frames-per-lambda.js +4 -3
  344. package/dist/shared/validate-lambda-codec.d.ts +4 -0
  345. package/dist/shared/validate-lambda-codec.js +30 -0
  346. package/dist/shared/validate-memory-size.d.ts +0 -0
  347. package/dist/shared/validate-memory-size.js +0 -0
  348. package/dist/shared/validate-outname.d.ts +3 -2
  349. package/dist/shared/validate-outname.js +13 -3
  350. package/dist/shared/validate-presign-expiration.d.ts +0 -2
  351. package/dist/shared/validate-presign-expiration.js +7 -7
  352. package/dist/shared/validate-privacy.d.ts +0 -0
  353. package/dist/shared/validate-privacy.js +2 -2
  354. package/dist/shared/validate-retention-period.d.ts +0 -0
  355. package/dist/shared/validate-retention-period.js +0 -0
  356. package/dist/shared/validate-retries.d.ts +0 -0
  357. package/dist/shared/validate-retries.js +0 -0
  358. package/dist/shared/validate-serveurl.d.ts +0 -0
  359. package/dist/shared/validate-serveurl.js +0 -0
  360. package/dist/shared/validate-site-name.d.ts +0 -0
  361. package/dist/shared/validate-site-name.js +0 -0
  362. package/dist/shared/validate-timeout.d.ts +0 -0
  363. package/dist/shared/validate-timeout.js +0 -0
  364. package/package.json +53 -27
  365. package/remotionlambda-arm64.zip +0 -0
  366. package/remotionlambda-x64.zip +0 -0
  367. package/remotionlambda.zip +0 -0
  368. package/.prettierrc.js +0 -14
  369. package/client.d.ts +0 -1
  370. package/client.js +0 -1
  371. package/dist/api/enable-s3-website.d.ts +0 -5
  372. package/dist/api/enable-s3-website.js +0 -16
  373. package/dist/cli/helpers/format-bytes.d.ts +0 -6
  374. package/dist/cli/helpers/format-bytes.js +0 -103
  375. package/dist/cli/helpers/get-cloudwatch-stream-url.d.ts +0 -8
  376. package/dist/cli/helpers/get-cloudwatch-stream-url.js +0 -7
  377. package/dist/functions/chunk-optimization/can-use-optimization.d.ts +0 -6
  378. package/dist/functions/chunk-optimization/can-use-optimization.js +0 -23
  379. package/dist/functions/chunk-optimization/collect-data.d.ts +0 -9
  380. package/dist/functions/chunk-optimization/collect-data.js +0 -27
  381. package/dist/functions/chunk-optimization/get-frame-ranges-from-profile.d.ts +0 -3
  382. package/dist/functions/chunk-optimization/get-frame-ranges-from-profile.js +0 -11
  383. package/dist/functions/chunk-optimization/get-profile-duration.d.ts +0 -3
  384. package/dist/functions/chunk-optimization/get-profile-duration.js +0 -18
  385. package/dist/functions/chunk-optimization/is-valid-profile.d.ts +0 -2
  386. package/dist/functions/chunk-optimization/is-valid-profile.js +0 -12
  387. package/dist/functions/chunk-optimization/optimize-invocation-order.d.ts +0 -2
  388. package/dist/functions/chunk-optimization/optimize-invocation-order.js +0 -19
  389. package/dist/functions/chunk-optimization/optimize-profile.d.ts +0 -9
  390. package/dist/functions/chunk-optimization/optimize-profile.js +0 -74
  391. package/dist/functions/chunk-optimization/s3-optimization-file.d.ts +0 -17
  392. package/dist/functions/chunk-optimization/s3-optimization-file.js +0 -45
  393. package/dist/functions/chunk-optimization/simulate-frame-ranges.d.ts +0 -7
  394. package/dist/functions/chunk-optimization/simulate-frame-ranges.js +0 -47
  395. package/dist/functions/chunk-optimization/sort-by-duration.d.ts +0 -2
  396. package/dist/functions/chunk-optimization/sort-by-duration.js +0 -25
  397. package/dist/functions/helpers/get-current-architecture.d.ts +0 -2
  398. package/dist/functions/helpers/get-current-architecture.js +0 -11
  399. package/dist/shared/chunk.d.ts +0 -1
  400. package/dist/shared/chunk.js +0 -11
  401. package/dist/shared/validate-architecture.d.ts +0 -4
  402. package/dist/shared/validate-architecture.js +0 -14
  403. package/tsconfig.json +0 -16
@@ -1,37 +1,55 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
4
24
  };
5
25
  Object.defineProperty(exports, "__esModule", { value: true });
6
26
  exports.launchHandler = void 0;
7
27
  const client_lambda_1 = require("@aws-sdk/client-lambda");
8
28
  const renderer_1 = require("@remotion/renderer");
9
- const fs_1 = __importDefault(require("fs"));
29
+ const fs_1 = __importStar(require("fs"));
30
+ const path_1 = require("path");
10
31
  const remotion_1 = require("remotion");
32
+ const version_1 = require("remotion/version");
11
33
  const aws_clients_1 = require("../shared/aws-clients");
34
+ const cleanup_serialized_input_props_1 = require("../shared/cleanup-serialized-input-props");
12
35
  const constants_1 = require("../shared/constants");
36
+ const deserialize_input_props_1 = require("../shared/deserialize-input-props");
13
37
  const docs_url_1 = require("../shared/docs-url");
38
+ const invoke_webhook_1 = require("../shared/invoke-webhook");
14
39
  const make_s3_url_1 = require("../shared/make-s3-url");
15
40
  const validate_frames_per_lambda_1 = require("../shared/validate-frames-per-lambda");
16
41
  const validate_outname_1 = require("../shared/validate-outname");
17
42
  const validate_privacy_1 = require("../shared/validate-privacy");
18
- const collect_data_1 = require("./chunk-optimization/collect-data");
19
- const get_frame_ranges_from_profile_1 = require("./chunk-optimization/get-frame-ranges-from-profile");
20
- const get_profile_duration_1 = require("./chunk-optimization/get-profile-duration");
21
- const is_valid_profile_1 = require("./chunk-optimization/is-valid-profile");
22
- const optimize_invocation_order_1 = require("./chunk-optimization/optimize-invocation-order");
23
- const optimize_profile_1 = require("./chunk-optimization/optimize-profile");
24
43
  const plan_frame_ranges_1 = require("./chunk-optimization/plan-frame-ranges");
25
- const s3_optimization_file_1 = require("./chunk-optimization/s3-optimization-file");
26
44
  const best_frames_per_lambda_param_1 = require("./helpers/best-frames-per-lambda-param");
27
45
  const concat_videos_1 = require("./helpers/concat-videos");
28
46
  const create_post_render_data_1 = require("./helpers/create-post-render-data");
29
47
  const delete_chunks_1 = require("./helpers/delete-chunks");
30
48
  const expected_out_name_1 = require("./helpers/expected-out-name");
49
+ const find_output_file_in_bucket_1 = require("./helpers/find-output-file-in-bucket");
31
50
  const get_browser_instance_1 = require("./helpers/get-browser-instance");
32
51
  const get_current_region_1 = require("./helpers/get-current-region");
33
52
  const get_files_to_delete_1 = require("./helpers/get-files-to-delete");
34
- const get_lambdas_invoked_stats_1 = require("./helpers/get-lambdas-invoked-stats");
35
53
  const get_output_url_from_metadata_1 = require("./helpers/get-output-url-from-metadata");
36
54
  const inspect_errors_1 = require("./helpers/inspect-errors");
37
55
  const io_1 = require("./helpers/io");
@@ -39,56 +57,133 @@ const timer_1 = require("./helpers/timer");
39
57
  const validate_composition_1 = require("./helpers/validate-composition");
40
58
  const write_lambda_error_1 = require("./helpers/write-lambda-error");
41
59
  const write_post_render_data_1 = require("./helpers/write-post-render-data");
60
+ const callFunctionWithRetry = async ({ payload, retries, functionName, }) => {
61
+ try {
62
+ await (0, aws_clients_1.getLambdaClient)((0, get_current_region_1.getCurrentRegionInFunction)()).send(new client_lambda_1.InvokeCommand({
63
+ FunctionName: functionName,
64
+ // @ts-expect-error
65
+ Payload: JSON.stringify(payload),
66
+ InvocationType: 'Event',
67
+ }), {});
68
+ }
69
+ catch (err) {
70
+ if (err.name === 'ResourceConflictException') {
71
+ if (retries > 10) {
72
+ throw err;
73
+ }
74
+ await new Promise((resolve) => {
75
+ setTimeout(resolve, 1000);
76
+ });
77
+ return callFunctionWithRetry({
78
+ payload,
79
+ retries: retries + 1,
80
+ functionName,
81
+ });
82
+ }
83
+ }
84
+ };
42
85
  const innerLaunchHandler = async (params, options) => {
43
- var _a, _b;
86
+ var _a, _b, _c, _d, _e;
44
87
  if (params.type !== constants_1.LambdaRoutines.launch) {
45
88
  throw new Error('Expected launch type');
46
89
  }
90
+ const functionName = (_a = params.rendererFunctionName) !== null && _a !== void 0 ? _a : process.env.AWS_LAMBDA_FUNCTION_NAME;
47
91
  const startedDate = Date.now();
48
- const [browserInstance, optimization] = await Promise.all([
49
- (0, get_browser_instance_1.getBrowserInstance)(remotion_1.Internals.Logging.isEqualOrBelowLogLevel(remotion_1.Internals.Logging.getLogLevel(), 'verbose'), params.chromiumOptions),
50
- (0, s3_optimization_file_1.getOptimization)({
51
- bucketName: params.bucketName,
52
- siteId: (0, make_s3_url_1.getServeUrlHash)(params.serveUrl),
53
- compositionId: params.composition,
54
- region: (0, get_current_region_1.getCurrentRegionInFunction)(),
55
- expectedBucketOwner: options.expectedBucketOwner,
56
- }),
57
- ]);
92
+ let webhookInvoked = false;
93
+ console.log(`Function has ${Math.max(options.getRemainingTimeInMillis() - 1000, 1000)} before it times out`);
94
+ const verbose = renderer_1.RenderInternals.isEqualOrBelowLogLevel(params.logLevel, 'verbose');
95
+ const webhookDueToTimeout = setTimeout(async () => {
96
+ if (params.webhook && !webhookInvoked) {
97
+ try {
98
+ await (0, invoke_webhook_1.invokeWebhook)({
99
+ url: params.webhook.url,
100
+ secret: params.webhook.secret,
101
+ payload: {
102
+ type: 'timeout',
103
+ renderId: params.renderId,
104
+ expectedBucketOwner: options.expectedBucketOwner,
105
+ bucketName: params.bucketName,
106
+ },
107
+ });
108
+ webhookInvoked = true;
109
+ }
110
+ catch (err) {
111
+ if (process.env.NODE_ENV === 'test') {
112
+ throw err;
113
+ }
114
+ await (0, write_lambda_error_1.writeLambdaError)({
115
+ bucketName: params.bucketName,
116
+ errorInfo: {
117
+ type: 'webhook',
118
+ message: err.message,
119
+ name: err.name,
120
+ stack: err.stack,
121
+ tmpDir: null,
122
+ frame: 0,
123
+ chunk: 0,
124
+ isFatal: false,
125
+ attempt: 1,
126
+ willRetry: false,
127
+ totalAttempts: 1,
128
+ },
129
+ renderId: params.renderId,
130
+ expectedBucketOwner: options.expectedBucketOwner,
131
+ });
132
+ console.log('Failed to invoke webhook:');
133
+ console.log(err);
134
+ }
135
+ }
136
+ }, Math.max(options.getRemainingTimeInMillis() - 1000, 1000));
137
+ const browserInstance = await (0, get_browser_instance_1.getBrowserInstance)(verbose, params.chromiumOptions);
138
+ const downloadMap = renderer_1.RenderInternals.makeDownloadMap();
139
+ const inputPropsPromise = (0, deserialize_input_props_1.deserializeInputProps)({
140
+ bucketName: params.bucketName,
141
+ expectedBucketOwner: options.expectedBucketOwner,
142
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
143
+ serialized: params.inputProps,
144
+ });
58
145
  const comp = await (0, validate_composition_1.validateComposition)({
59
146
  serveUrl: params.serveUrl,
60
147
  composition: params.composition,
61
148
  browserInstance,
62
- inputProps: params.inputProps,
149
+ inputProps: await inputPropsPromise,
63
150
  envVariables: params.envVariables,
64
- ffmpegExecutable: null,
65
- ffprobeExecutable: null,
66
151
  timeoutInMilliseconds: params.timeoutInMilliseconds,
67
152
  chromiumOptions: params.chromiumOptions,
68
153
  port: null,
154
+ downloadMap,
155
+ forceHeight: params.forceHeight,
156
+ forceWidth: params.forceWidth,
69
157
  });
70
- remotion_1.Internals.validateDurationInFrames(comp.durationInFrames, 'passed to <Component />');
71
- remotion_1.Internals.validateFps(comp.fps, 'passed to <Component />');
72
- remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to <Component />');
73
- remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to <Component />');
158
+ remotion_1.Internals.validateDurationInFrames({
159
+ durationInFrames: comp.durationInFrames,
160
+ component: 'passed to a Lambda render',
161
+ allowFloats: false,
162
+ });
163
+ remotion_1.Internals.validateFps(comp.fps, 'passed to a Lambda render', false);
164
+ remotion_1.Internals.validateDimension(comp.height, 'height', 'passed to a Lambda render');
165
+ remotion_1.Internals.validateDimension(comp.width, 'width', 'passed to a Lambda render');
166
+ renderer_1.RenderInternals.validateBitrate(params.audioBitrate, 'audioBitrate');
167
+ renderer_1.RenderInternals.validateBitrate(params.videoBitrate, 'videoBitrate');
168
+ renderer_1.RenderInternals.validateConcurrency(params.concurrencyPerLambda, 'concurrencyPerLambda');
74
169
  const realFrameRange = renderer_1.RenderInternals.getRealFrameRange(comp.durationInFrames, params.frameRange);
75
- const frameCount = renderer_1.RenderInternals.getDurationFromFrameRange(realFrameRange, 0);
76
- const framesPerLambda = (_a = params.framesPerLambda) !== null && _a !== void 0 ? _a : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount);
77
- (0, validate_frames_per_lambda_1.validateFramesPerLambda)(framesPerLambda);
78
- const chunkCount = Math.ceil(frameCount / framesPerLambda);
170
+ const frameCount = renderer_1.RenderInternals.getFramesToRender(realFrameRange, params.everyNthFrame);
171
+ const framesPerLambda = (_b = params.framesPerLambda) !== null && _b !== void 0 ? _b : (0, best_frames_per_lambda_param_1.bestFramesPerLambdaParam)(frameCount.length);
172
+ (0, validate_frames_per_lambda_1.validateFramesPerLambda)({
173
+ framesPerLambda,
174
+ durationInFrames: frameCount.length,
175
+ });
176
+ const chunkCount = Math.ceil(frameCount.length / framesPerLambda);
79
177
  if (chunkCount > constants_1.MAX_FUNCTIONS_PER_RENDER) {
80
- throw new Error(`Too many functions: This render would cause ${chunkCount} functions to spawn. We limit this amount to ${constants_1.MAX_FUNCTIONS_PER_RENDER} functions as more would result in diminishing returns. Values set: frameCount = ${frameCount}, framesPerLambda=${framesPerLambda}. See ${docs_url_1.DOCS_URL}/docs/lambda/concurrency for how this parameter is calculated.`);
178
+ throw new Error(`Too many functions: This render would cause ${chunkCount} functions to spawn. We limit this amount to ${constants_1.MAX_FUNCTIONS_PER_RENDER} functions as more would result in diminishing returns. Values set: frameCount = ${frameCount}, framesPerLambda=${framesPerLambda}. See ${docs_url_1.DOCS_URL}/docs/lambda/concurrency#too-many-functions for help.`);
81
179
  }
82
- (0, validate_outname_1.validateOutname)(params.outName);
180
+ (0, validate_outname_1.validateOutname)(params.outName, params.codec, params.audioCodec);
83
181
  (0, validate_privacy_1.validatePrivacy)(params.privacy);
84
182
  renderer_1.RenderInternals.validatePuppeteerTimeout(params.timeoutInMilliseconds);
85
- const { chunks, didUseOptimization } = (0, plan_frame_ranges_1.planFrameRanges)({
86
- chunkCount,
183
+ const { chunks } = (0, plan_frame_ranges_1.planFrameRanges)({
87
184
  framesPerLambda,
88
- optimization,
89
- // TODO: Re-enable chunk optimization later
90
- shouldUseOptimization: false,
91
185
  frameRange: realFrameRange,
186
+ everyNthFrame: params.everyNthFrame,
92
187
  });
93
188
  const sortedChunks = chunks.slice().sort((a, b) => a[0] - b[0]);
94
189
  const invokers = Math.round(Math.sqrt(chunks.length));
@@ -117,14 +212,23 @@ const innerLaunchHandler = async (params, options) => {
117
212
  proResProfile: params.proResProfile,
118
213
  quality: params.quality,
119
214
  privacy: params.privacy,
120
- logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : remotion_1.Internals.Logging.DEFAULT_LOG_LEVEL,
215
+ logLevel: (_a = params.logLevel) !== null && _a !== void 0 ? _a : 'info',
121
216
  attempt: 1,
122
217
  timeoutInMilliseconds: params.timeoutInMilliseconds,
123
218
  chromiumOptions: params.chromiumOptions,
124
219
  scale: params.scale,
220
+ everyNthFrame: params.everyNthFrame,
221
+ concurrencyPerLambda: params.concurrencyPerLambda,
222
+ muted: params.muted,
223
+ audioBitrate: params.audioBitrate,
224
+ videoBitrate: params.videoBitrate,
225
+ launchFunctionConfig: {
226
+ version: version_1.VERSION,
227
+ },
125
228
  };
126
229
  return payload;
127
230
  });
231
+ console.log('Render plan: ', chunks.map((c, i) => `Chunk ${i} (Frames ${c[0] - c[1]})`).join(', '));
128
232
  const renderMetadata = {
129
233
  startedDate,
130
234
  videoConfig: comp,
@@ -140,17 +244,43 @@ const innerLaunchHandler = async (params, options) => {
140
244
  compositionId: comp.id,
141
245
  siteId: (0, make_s3_url_1.getServeUrlHash)(params.serveUrl),
142
246
  codec: params.codec,
143
- usesOptimizationProfile: didUseOptimization,
144
247
  type: 'video',
145
248
  imageFormat: params.imageFormat,
146
249
  inputProps: params.inputProps,
147
- lambdaVersion: constants_1.CURRENT_VERSION,
250
+ lambdaVersion: version_1.VERSION,
148
251
  framesPerLambda,
149
252
  memorySizeInMb: Number(process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE),
150
253
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
151
254
  renderId: params.renderId,
152
- outName: (_b = params.outName) !== null && _b !== void 0 ? _b : undefined,
255
+ outName: (_c = params.outName) !== null && _c !== void 0 ? _c : undefined,
256
+ privacy: params.privacy,
257
+ everyNthFrame: params.everyNthFrame,
258
+ frameRange: realFrameRange,
259
+ audioCodec: params.audioCodec,
153
260
  };
261
+ const { key, renderBucketName, customCredentials } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, params.bucketName, typeof params.outName === 'string' || typeof params.outName === 'undefined'
262
+ ? null
263
+ : (_e = (_d = params.outName) === null || _d === void 0 ? void 0 : _d.s3OutputProvider) !== null && _e !== void 0 ? _e : null);
264
+ const output = await (0, find_output_file_in_bucket_1.findOutputFileInBucket)({
265
+ bucketName: params.bucketName,
266
+ customCredentials,
267
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
268
+ renderMetadata,
269
+ });
270
+ if (output) {
271
+ if (params.overwrite) {
272
+ console.info('Deleting', { bucketName: renderBucketName, key }, 'because it already existed and will be overwritten');
273
+ await (0, io_1.lambdaDeleteFile)({
274
+ bucketName: renderBucketName,
275
+ customCredentials,
276
+ key,
277
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
278
+ });
279
+ }
280
+ else {
281
+ throw new TypeError(`Output file "${key}" in bucket "${renderBucketName}" in region "${(0, get_current_region_1.getCurrentRegionInFunction)()}" already exists. Delete it before re-rendering, or use the overwrite option to delete it before render."`);
282
+ }
283
+ }
154
284
  await (0, io_1.lambdaWriteFile)({
155
285
  bucketName: params.bucketName,
156
286
  key: (0, constants_1.renderMetadataKey)(params.renderId),
@@ -158,43 +288,30 @@ const innerLaunchHandler = async (params, options) => {
158
288
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
159
289
  privacy: 'private',
160
290
  expectedBucketOwner: options.expectedBucketOwner,
291
+ downloadBehavior: null,
292
+ customCredentials: null,
161
293
  });
162
- await Promise.all(lambdaPayloads.map(async (payload, index) => {
163
- const callingLambdaTimer = (0, timer_1.timer)('Calling chunk ' + index);
164
- await (0, aws_clients_1.getLambdaClient)((0, get_current_region_1.getCurrentRegionInFunction)()).send(new client_lambda_1.InvokeCommand({
165
- FunctionName: process.env.AWS_LAMBDA_FUNCTION_NAME,
166
- // @ts-expect-error
167
- Payload: JSON.stringify(payload),
168
- InvocationType: 'Event',
169
- }), {});
170
- callingLambdaTimer.end();
294
+ await Promise.all(lambdaPayloads.map(async (payload) => {
295
+ await callFunctionWithRetry({ payload, retries: 0, functionName });
171
296
  }));
172
297
  reqSend.end();
173
298
  let lastProgressUploaded = 0;
174
- let encodingStop = null;
175
- const onProgress = (framesEncoded, start) => {
176
- const relativeProgress = framesEncoded / frameCount;
299
+ const onProgress = (framesEncoded) => {
300
+ const relativeProgress = framesEncoded / frameCount.length;
177
301
  const deltaSinceLastProgressUploaded = relativeProgress - lastProgressUploaded;
178
- if (relativeProgress === 1) {
179
- encodingStop = Date.now();
180
- }
181
302
  if (deltaSinceLastProgressUploaded < 0.1) {
182
303
  return;
183
304
  }
184
305
  lastProgressUploaded = relativeProgress;
185
- const encodingProgress = {
186
- framesEncoded,
187
- totalFrames: frameCount,
188
- doneIn: encodingStop ? encodingStop - start : null,
189
- timeToInvoke: null,
190
- };
191
306
  (0, io_1.lambdaWriteFile)({
192
307
  bucketName: params.bucketName,
193
308
  key: (0, constants_1.encodingProgressKey)(params.renderId),
194
- body: JSON.stringify(encodingProgress),
309
+ body: String(Math.round(framesEncoded / constants_1.ENCODING_PROGRESS_STEP_SIZE)),
195
310
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
196
311
  privacy: 'private',
197
312
  expectedBucketOwner: options.expectedBucketOwner,
313
+ downloadBehavior: null,
314
+ customCredentials: null,
198
315
  }).catch((err) => {
199
316
  (0, write_lambda_error_1.writeLambdaError)({
200
317
  bucketName: params.bucketName,
@@ -216,21 +333,61 @@ const innerLaunchHandler = async (params, options) => {
216
333
  });
217
334
  });
218
335
  };
219
- const { outfile, cleanupChunksProm, encodingStart } = await (0, concat_videos_1.concatVideosS3)({
336
+ const onErrors = async (errors) => {
337
+ var _a;
338
+ console.log('Found Errors', errors);
339
+ if (params.webhook) {
340
+ console.log('Sending webhook with errors');
341
+ await (0, invoke_webhook_1.invokeWebhook)({
342
+ url: params.webhook.url,
343
+ secret: (_a = params.webhook.secret) !== null && _a !== void 0 ? _a : null,
344
+ payload: {
345
+ type: 'error',
346
+ renderId: params.renderId,
347
+ expectedBucketOwner: options.expectedBucketOwner,
348
+ bucketName: params.bucketName,
349
+ errors: errors.slice(0, 5).map((e) => ({
350
+ message: e.message,
351
+ name: e.name,
352
+ stack: e.stack,
353
+ })),
354
+ },
355
+ });
356
+ }
357
+ else {
358
+ console.log('No webhook specified');
359
+ }
360
+ throw new Error('Stopping Lambda function because error occurred: ' + errors[0].stack);
361
+ };
362
+ const fps = comp.fps / params.everyNthFrame;
363
+ const outdir = (0, path_1.join)(renderer_1.RenderInternals.tmpDir(constants_1.CONCAT_FOLDER_TOKEN), 'bucket');
364
+ if ((0, fs_1.existsSync)(outdir)) {
365
+ (fs_1.rmSync !== null && fs_1.rmSync !== void 0 ? fs_1.rmSync : fs_1.rmdirSync)(outdir, {
366
+ recursive: true,
367
+ });
368
+ }
369
+ (0, fs_1.mkdirSync)(outdir);
370
+ const files = await (0, concat_videos_1.getAllFilesS3)({
220
371
  bucket: params.bucketName,
221
372
  expectedFiles: chunkCount,
222
- onProgress,
223
- numberOfFrames: frameCount,
373
+ outdir,
224
374
  renderId: params.renderId,
225
375
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
226
- codec: params.codec,
227
376
  expectedBucketOwner: options.expectedBucketOwner,
228
- fps: comp.fps,
377
+ onErrors,
229
378
  });
230
- if (!encodingStop) {
231
- encodingStop = Date.now();
232
- }
233
- const { key, renderBucketName } = (0, expected_out_name_1.getExpectedOutName)(renderMetadata, params.bucketName);
379
+ const encodingStart = Date.now();
380
+ const { outfile, cleanupChunksProm } = await (0, concat_videos_1.concatVideosS3)({
381
+ onProgress,
382
+ numberOfFrames: frameCount.length,
383
+ codec: params.codec,
384
+ fps,
385
+ numberOfGifLoops: params.numberOfGifLoops,
386
+ files,
387
+ outdir,
388
+ audioCodec: params.audioCodec,
389
+ });
390
+ const encodingStop = Date.now();
234
391
  const outputSize = fs_1.default.statSync(outfile);
235
392
  await (0, io_1.lambdaWriteFile)({
236
393
  bucketName: renderBucketName,
@@ -239,60 +396,24 @@ const innerLaunchHandler = async (params, options) => {
239
396
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
240
397
  privacy: params.privacy,
241
398
  expectedBucketOwner: options.expectedBucketOwner,
399
+ downloadBehavior: params.downloadBehavior,
400
+ customCredentials,
401
+ });
402
+ const contents = await (0, io_1.lambdaLs)({
403
+ bucketName: params.bucketName,
404
+ prefix: (0, constants_1.rendersPrefix)(params.renderId),
405
+ expectedBucketOwner: options.expectedBucketOwner,
406
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
242
407
  });
243
- let chunkProm = Promise.resolve();
244
- // TODO: Enable in a later release
245
- const enableChunkOptimization = false;
246
- if (enableChunkOptimization) {
247
- const chunkData = await (0, collect_data_1.collectChunkInformation)({
248
- bucketName: params.bucketName,
249
- renderId: params.renderId,
250
- region: (0, get_current_region_1.getCurrentRegionInFunction)(),
251
- expectedBucketOwner: options.expectedBucketOwner,
252
- });
253
- const optimizedProfile = (0, optimize_invocation_order_1.optimizeInvocationOrder)((0, optimize_profile_1.optimizeProfileRecursively)(chunkData, 400));
254
- const optimizedFrameRange = (0, get_frame_ranges_from_profile_1.getFrameRangesFromProfile)(optimizedProfile);
255
- chunkProm = (0, is_valid_profile_1.isValidOptimizationProfile)(optimizedProfile)
256
- ? (0, s3_optimization_file_1.writeOptimization)({
257
- bucketName: params.bucketName,
258
- optimization: {
259
- ranges: optimizedFrameRange,
260
- oldTiming: (0, get_profile_duration_1.getProfileDuration)(chunkData),
261
- newTiming: (0, get_profile_duration_1.getProfileDuration)(optimizedProfile),
262
- createdFromRenderId: params.renderId,
263
- framesPerLambda,
264
- lambdaVersion: constants_1.CURRENT_VERSION,
265
- frameRange: realFrameRange,
266
- },
267
- expectedBucketOwner: options.expectedBucketOwner,
268
- compositionId: params.composition,
269
- siteId: (0, make_s3_url_1.getServeUrlHash)(params.serveUrl),
270
- region: (0, get_current_region_1.getCurrentRegionInFunction)(),
271
- })
272
- : Promise.resolve();
273
- }
274
- const [, contents] = await Promise.all([
275
- chunkProm,
276
- (0, io_1.lambdaLs)({
277
- bucketName: params.bucketName,
278
- prefix: (0, constants_1.rendersPrefix)(params.renderId),
279
- expectedBucketOwner: options.expectedBucketOwner,
280
- region: (0, get_current_region_1.getCurrentRegionInFunction)(),
281
- }),
282
- ]);
283
- const finalEncodingProgress = {
284
- framesEncoded: frameCount,
285
- totalFrames: frameCount,
286
- doneIn: encodingStop ? encodingStop - encodingStart : null,
287
- timeToInvoke: (0, get_lambdas_invoked_stats_1.getLambdasInvokedStats)(contents, params.renderId, renderMetadata.estimatedRenderLambdaInvokations, renderMetadata.startedDate).timeToInvokeLambdas,
288
- };
289
408
  const finalEncodingProgressProm = (0, io_1.lambdaWriteFile)({
290
409
  bucketName: params.bucketName,
291
410
  key: (0, constants_1.encodingProgressKey)(params.renderId),
292
- body: JSON.stringify(finalEncodingProgress),
411
+ body: String(Math.ceil(frameCount.length / constants_1.ENCODING_PROGRESS_STEP_SIZE)),
293
412
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
294
413
  privacy: 'private',
295
414
  expectedBucketOwner: options.expectedBucketOwner,
415
+ downloadBehavior: null,
416
+ customCredentials: null,
296
417
  });
297
418
  const errorExplanationsProm = (0, inspect_errors_1.inspectErrors)({
298
419
  contents,
@@ -305,13 +426,21 @@ const innerLaunchHandler = async (params, options) => {
305
426
  chunkCount,
306
427
  renderId: params.renderId,
307
428
  });
308
- const deletProm = (0, delete_chunks_1.cleanupFiles)({
429
+ const deletProm = verbose
430
+ ? Promise.resolve(0)
431
+ : (0, delete_chunks_1.cleanupFiles)({
432
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
433
+ bucket: params.bucketName,
434
+ contents,
435
+ jobs,
436
+ });
437
+ const cleanupSerializedInputPropsProm = (0, cleanup_serialized_input_props_1.cleanupSerializedInputProps)({
438
+ bucketName: params.bucketName,
309
439
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
310
- bucket: params.bucketName,
311
- contents,
312
- jobs,
440
+ serialized: params.inputProps,
313
441
  });
314
- const postRenderData = await (0, create_post_render_data_1.createPostRenderData)({
442
+ const outputUrl = (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, params.bucketName, customCredentials);
443
+ const postRenderData = (0, create_post_render_data_1.createPostRenderData)({
315
444
  expectedBucketOwner: options.expectedBucketOwner,
316
445
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
317
446
  renderId: params.renderId,
@@ -320,11 +449,11 @@ const innerLaunchHandler = async (params, options) => {
320
449
  contents,
321
450
  errorExplanations: await errorExplanationsProm,
322
451
  timeToEncode: encodingStop - encodingStart,
323
- timeToDelete: await deletProm,
452
+ timeToDelete: (await Promise.all([deletProm, cleanupSerializedInputPropsProm])).reduce((a, b) => a + b, 0),
324
453
  outputFile: {
325
454
  lastModified: Date.now(),
326
455
  size: outputSize.size,
327
- url: (0, get_output_url_from_metadata_1.getOutputUrlFromMetadata)(renderMetadata, params.bucketName),
456
+ url: outputUrl,
328
457
  },
329
458
  });
330
459
  await finalEncodingProgressProm;
@@ -335,9 +464,63 @@ const innerLaunchHandler = async (params, options) => {
335
464
  region: (0, get_current_region_1.getCurrentRegionInFunction)(),
336
465
  renderId: params.renderId,
337
466
  });
467
+ await (0, io_1.lambdaDeleteFile)({
468
+ bucketName: params.bucketName,
469
+ key: (0, constants_1.initalizedMetadataKey)(params.renderId),
470
+ region: (0, get_current_region_1.getCurrentRegionInFunction)(),
471
+ customCredentials: null,
472
+ });
473
+ renderer_1.RenderInternals.cleanDownloadMap(downloadMap);
338
474
  await Promise.all([cleanupChunksProm, fs_1.default.promises.rm(outfile)]);
475
+ clearTimeout(webhookDueToTimeout);
476
+ if (params.webhook && !webhookInvoked) {
477
+ try {
478
+ await (0, invoke_webhook_1.invokeWebhook)({
479
+ url: params.webhook.url,
480
+ secret: params.webhook.secret,
481
+ payload: {
482
+ type: 'success',
483
+ renderId: params.renderId,
484
+ expectedBucketOwner: options.expectedBucketOwner,
485
+ bucketName: params.bucketName,
486
+ outputUrl,
487
+ lambdaErrors: postRenderData.errors,
488
+ outputFile: postRenderData.outputFile,
489
+ timeToFinish: postRenderData.timeToFinish,
490
+ costs: postRenderData.cost,
491
+ },
492
+ });
493
+ webhookInvoked = true;
494
+ }
495
+ catch (err) {
496
+ if (process.env.NODE_ENV === 'test') {
497
+ throw err;
498
+ }
499
+ await (0, write_lambda_error_1.writeLambdaError)({
500
+ bucketName: params.bucketName,
501
+ errorInfo: {
502
+ type: 'webhook',
503
+ message: err.message,
504
+ name: err.name,
505
+ stack: err.stack,
506
+ tmpDir: null,
507
+ frame: 0,
508
+ chunk: 0,
509
+ isFatal: false,
510
+ attempt: 1,
511
+ willRetry: false,
512
+ totalAttempts: 1,
513
+ },
514
+ renderId: params.renderId,
515
+ expectedBucketOwner: options.expectedBucketOwner,
516
+ });
517
+ console.log('Failed to invoke webhook:');
518
+ console.log(err);
519
+ }
520
+ }
339
521
  };
340
522
  const launchHandler = async (params, options) => {
523
+ var _a, _b;
341
524
  if (params.type !== constants_1.LambdaRoutines.launch) {
342
525
  throw new Error('Expected launch type');
343
526
  }
@@ -345,6 +528,9 @@ const launchHandler = async (params, options) => {
345
528
  await innerLaunchHandler(params, options);
346
529
  }
347
530
  catch (err) {
531
+ if (process.env.NODE_ENV === 'test') {
532
+ throw err;
533
+ }
348
534
  console.log('Error occurred', err);
349
535
  await (0, write_lambda_error_1.writeLambdaError)({
350
536
  bucketName: params.bucketName,
@@ -364,6 +550,50 @@ const launchHandler = async (params, options) => {
364
550
  expectedBucketOwner: options.expectedBucketOwner,
365
551
  renderId: params.renderId,
366
552
  });
553
+ if ((_a = params.webhook) === null || _a === void 0 ? void 0 : _a.url) {
554
+ try {
555
+ await (0, invoke_webhook_1.invokeWebhook)({
556
+ url: params.webhook.url,
557
+ secret: (_b = params.webhook.secret) !== null && _b !== void 0 ? _b : null,
558
+ payload: {
559
+ type: 'error',
560
+ renderId: params.renderId,
561
+ expectedBucketOwner: options.expectedBucketOwner,
562
+ bucketName: params.bucketName,
563
+ errors: [err].map((e) => ({
564
+ message: e.message,
565
+ name: e.name,
566
+ stack: e.stack,
567
+ })),
568
+ },
569
+ });
570
+ }
571
+ catch (error) {
572
+ if (process.env.NODE_ENV === 'test') {
573
+ throw error;
574
+ }
575
+ await (0, write_lambda_error_1.writeLambdaError)({
576
+ bucketName: params.bucketName,
577
+ errorInfo: {
578
+ type: 'webhook',
579
+ message: err.message,
580
+ name: err.name,
581
+ stack: err.stack,
582
+ tmpDir: null,
583
+ frame: 0,
584
+ chunk: 0,
585
+ isFatal: false,
586
+ attempt: 1,
587
+ willRetry: false,
588
+ totalAttempts: 1,
589
+ },
590
+ renderId: params.renderId,
591
+ expectedBucketOwner: options.expectedBucketOwner,
592
+ });
593
+ console.log('Failed to invoke webhook:');
594
+ console.log(error);
595
+ }
596
+ }
367
597
  }
368
598
  };
369
599
  exports.launchHandler = launchHandler;
@@ -1,7 +1,7 @@
1
1
  import type { LambdaPayload, RenderProgress } from '../shared/constants';
2
2
  declare type Options = {
3
3
  expectedBucketOwner: string;
4
- timeoutInMiliseconds: number;
4
+ timeoutInMilliseconds: number;
5
5
  };
6
6
  export declare const progressHandler: (lambdaParams: LambdaPayload, options: Options) => Promise<RenderProgress>;
7
7
  export {};