@remotion/lambda 4.0.0-audio.0 → 4.0.0-audio.11

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