feat: make video upload speed down to 5min for <500mb (#209)

* feat: make video upload down to 5min for <500mb

* update to 15 minutes timeout
This commit is contained in:
Rotimi Best
2024-03-16 17:35:23 +01:00
committed by GitHub
parent af909d1dd2
commit 62a32a6204
5 changed files with 295 additions and 25 deletions
+1 -2
View File
@@ -1,10 +1,9 @@
name: backend_deploy
name: Deploy Backend
on: workflow_dispatch
jobs:
deploy:
name: Deploy backend
runs-on: ubuntu-latest
concurrency: deploy-group # optional: ensure only one action runs at a time
steps:
+1
View File
@@ -20,6 +20,7 @@
"homepage": "https://github.com/rotimi-best/classroomio#readme",
"dependencies": {
"@aws-sdk/client-s3": "^3.388.0",
"@aws-sdk/lib-storage": "^3.535.0",
"@supabase/supabase-js": "^2.32.0",
"axios": "^1.4.0",
"body-parser": "^1.20.2",
+34 -10
View File
@@ -1,11 +1,12 @@
const express = require('express');
const FormData = require('form-data');
const axios = require('axios');
const { promisify } = require('util');
const fs = require('fs');
const unlinkAsync = promisify(fs.unlink);
const { Upload } = require('@aws-sdk/lib-storage');
const {
S3Client,
PutObjectCommand
@@ -42,6 +43,9 @@ const S3 = new S3Client({
// });
router.post('/', upload.single('videoFile'), async (req, res) => {
// Set timeout for this request to 15 minutes
req.setTimeout(900000);
const {
file,
query: { lessonId }
@@ -56,7 +60,10 @@ router.post('/', upload.single('videoFile'), async (req, res) => {
});
}
if (file?.size > 1000 * 1024 * 1024) {
// File upload limit is 500MB
const fileSizeInMegabytes = file?.size / (1024 * 1024);
if (fileSizeInMegabytes > 500) {
return res.status(400).json({
success: false,
type: 'FILE_TOO_LARGE',
@@ -66,19 +73,36 @@ router.post('/', upload.single('videoFile'), async (req, res) => {
const fileData = fs.readFileSync(file.path);
const fileName = `${genUniqueId()}-${file.originalname.split(' ').join('-')}`;
const params = {
Bucket: 'videos',
Key: fileName,
Body: fileData
};
const fileUrl = `https://pub-${CLOUDFLARE_PUBLIC_ACCOUNT_ID}.r2.dev/${fileName}`;
let metadata = {};
let metadata = {
sizeInMb: fileSizeInMegabytes
};
try {
console.log('Upload starting');
const s3UploadRes = await S3.send(new PutObjectCommand(params));
console.log('s3UploadRes', s3UploadRes);
console.time('upload');
const parallelUploads3 = new Upload({
client: S3,
queueSize: 5,
partSize: 1024 * 1024 * 20,
leavePartsOnError: false, // optional manually handle dropped parts
params: {
Bucket: 'videos',
Key: fileName,
Body: fileData
}
});
parallelUploads3.on('httpUploadProgress', (progress) => {
console.log(progress);
});
await parallelUploads3.done();
console.log('Upload to done');
console.timeEnd('upload');
unlinkAsync(file.path);
@@ -21,8 +21,9 @@
const uploadingTexts = [
'Sending your video to our server...',
'Breaking video into chunks',
'Compressing the video...',
'Generating a link to your video...',
'Generating transcription for your video...',
'Wrapping things up'
];
let uploadingLoadingText = uploadingTexts[0];
@@ -36,7 +37,10 @@
if (!fileInput) return;
const formData = new FormData();
formData.append('videoFile', fileInput.files[0]);
const videoFile = fileInput.files[0];
formData.append('videoFile', videoFile);
console.log({ size: videoFile?.size });
try {
const response = await axios({
@@ -97,7 +101,7 @@
console.log('uploadingLoadingText', next);
uploadingLoadingText = next;
}
}, 5000);
}, 30000);
} else if (timeoutkey) {
console.log('clearTimeout');
clearTimeout(timeoutkey);
@@ -112,11 +116,11 @@
<button
type="button"
on:click={() => (fileInput && !isLoading ? fileInput.click() : null)}
class="w-full h-full"
class="h-full w-full"
disabled={isLoading || !PUBLIC_SERVER_URL}
>
<form
class="h-full w-full flex flex-col items-center justify-center border border-primary-300 border-dashed rounded-xl"
class="border-primary-300 flex h-full w-full flex-col items-center justify-center rounded-xl border border-dashed"
on:submit|preventDefault={onUpload}
>
{#if isLoading}
@@ -129,7 +133,7 @@
<p class=" text-center text-sm font-normal">
Select file( Mp4, MOV, AVI) to upload to your lesson.
</p>
<p>(Max 80 MB)</p>
<p>(Max 500 MB)</p>
</span>
{/if}
<input
@@ -145,9 +149,9 @@
</form>
</button>
{:else if formRes?.type === 'FILE_TOO_LARGE'}
<div class="h-full w-full flex flex-col items-center justify-center rounded-xl">
<div class="flex h-full w-full flex-col items-center justify-center rounded-xl">
<img src="/video-upload-error.svg" alt="upload error" />
<span class="pt-3 pb-2">
<span class="pb-2 pt-3">
<h3 class="text-center text-base font-normal dark:text-white">
Oops 😬, couldn’t upload video
</h3>
@@ -158,9 +162,9 @@
<PrimaryButton label="Try another file" onClick={tryAgain} />
</div>
{:else if !formRes?.success}
<div class="h-full w-full flex flex-col items-center justify-center rounded-xl">
<div class="flex h-full w-full flex-col items-center justify-center rounded-xl">
<img src="/video-upload-error.svg" alt="upload error" />
<span class="pt-3 pb-2">
<span class="pb-2 pt-3">
<h3 class="text-center text-base font-normal dark:text-white">
Oops 😬, couldn’t upload video
</h3>
@@ -172,11 +176,11 @@
<PrimaryButton label="Please try again" onClick={tryAgain} />
</div>
{:else}
<div class="flex flex-col w-full h-full items-start justify-between">
<div class="h-auto w-full border rounded-md px-8 py-3">
<div class="flex h-full w-full flex-col items-start justify-between">
<div class="h-auto w-full rounded-md border px-8 py-3">
<div class="flex items-center justify-between">
<span class="flex items-center gap-2">
<div class="rounded-sm overflow-hidden">
<div class="overflow-hidden rounded-sm">
<video class="w-[200px]">
<source src={uploadedFileUrl} type="video/mp4" />
<!-- <source src="/path/to/video.webm" type="video/webm" /> -->
+242
View File
@@ -41,6 +41,9 @@ importers:
'@aws-sdk/client-s3':
specifier: ^3.388.0
version: 3.514.0
'@aws-sdk/lib-storage':
specifier: ^3.535.0
version: 3.535.0(@aws-sdk/[email protected])
'@supabase/supabase-js':
specifier: ^2.32.0
version: 2.39.6
@@ -1087,6 +1090,22 @@ packages:
- aws-crt
dev: false
/@aws-sdk/[email protected](@aws-sdk/[email protected]):
resolution: {integrity: sha512-JlamsgeokOPq3lRBH6yQBkjJQ/ak4sBCvZjs4yl2sGpzcOzq75x5qL9Ms1skY9nShPv+UeowzI7K9ia11rNDnw==}
engines: {node: '>=14.0.0'}
peerDependencies:
'@aws-sdk/client-s3': ^3.0.0
dependencies:
'@aws-sdk/client-s3': 3.514.0
'@smithy/abort-controller': 2.2.0
'@smithy/middleware-endpoint': 2.5.0
'@smithy/smithy-client': 2.5.0
buffer: 5.6.0
events: 3.3.0
stream-browserify: 3.0.0
tslib: 2.6.2
dev: false
/@aws-sdk/[email protected]:
resolution: {integrity: sha512-3o+AYU6JWUsPM49bWglCUOgNvySiHkbIma0J6F9a68e30vEDD0FUQtKzyHPZkF7iYDyesEl166gYjwVNAmASzw==}
engines: {node: '>=14.0.0'}
@@ -4403,6 +4422,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==}
dependencies:
@@ -4595,6 +4622,16 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==}
dependencies:
'@smithy/protocol-http': 3.3.0
'@smithy/querystring-builder': 2.2.0
'@smithy/types': 2.12.0
'@smithy/util-base64': 2.3.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-HX/7GIyPUT/HDWVYe2HYQu0iRnSYpF4uZVNhAhZsObPRawk5Mv0PbyluBgIFI2DDCCKgL/tloCYYwycff1GtQg==}
dependencies:
@@ -4679,6 +4716,13 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==}
engines: {node: '>=14.0.0'}
dependencies:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-YhWt9aKl+EMSNXyUTUo7I01WHf3HcCkPu/Hl2QmTNwrHT49eWaY7hptAMaERZuHFH0V5xHgPKgKZo2I93DFtgQ==}
dependencies:
@@ -4739,6 +4783,19 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-OBhI9ZEAG8Xen0xsFJwwNOt44WE2CWkfYIxTognC8x42Lfsdf0VN/wCMqpdkySMDio/vts10BiovAxQp0T0faA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/middleware-serde': 2.3.0
'@smithy/node-config-provider': 2.3.0
'@smithy/shared-ini-file-loader': 2.4.0
'@smithy/types': 2.12.0
'@smithy/url-parser': 2.2.0
'@smithy/util-middleware': 2.2.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==}
engines: {node: '>=14.0.0'}
@@ -4784,6 +4841,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==}
engines: {node: '>=14.0.0'}
@@ -4800,6 +4865,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==}
engines: {node: '>=14.0.0'}
@@ -4820,6 +4893,16 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/property-provider': 2.2.0
'@smithy/shared-ini-file-loader': 2.4.0
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==}
engines: {node: '>=14.0.0'}
@@ -4842,6 +4925,17 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/abort-controller': 2.2.0
'@smithy/protocol-http': 3.3.0
'@smithy/querystring-builder': 2.2.0
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==}
engines: {node: '>=14.0.0'}
@@ -4858,6 +4952,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-d2hhHj34mA2V86doiDfrsy2fNTnUOowGaf9hKb0hIPHqvcnShU4/OSc4Uf1FwHkAdYF3cFXTrj5VGUYbEuvMdw==}
engines: {node: '>=14.0.0'}
@@ -4882,6 +4984,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==}
engines: {node: '>=14.0.0'}
@@ -4900,6 +5010,15 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
'@smithy/util-uri-escape': 2.2.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==}
engines: {node: '>=14.0.0'}
@@ -4916,6 +5035,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==}
engines: {node: '>=14.0.0'}
@@ -4946,6 +5073,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==}
engines: {node: '>=14.0.0'}
@@ -4996,6 +5131,25 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-DDXWHWdimtS3y/Kw1Jo46KQ0ZYsDKcldFynQERUGBPDpkW1lXOTHy491ALHjwfiBQvzsVKVxl5+ocXNIgJuX4g==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/middleware-endpoint': 2.5.0
'@smithy/middleware-stack': 2.2.0
'@smithy/protocol-http': 3.3.0
'@smithy/types': 2.12.0
'@smithy/util-stream': 2.2.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==}
engines: {node: '>=14.0.0'}
dependencies:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==}
engines: {node: '>=14.0.0'}
@@ -5026,6 +5180,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==}
dependencies:
'@smithy/querystring-parser': 2.2.0
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==}
engines: {node: '>=14.0.0'}
@@ -5042,6 +5204,15 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/util-buffer-from': 2.2.0
'@smithy/util-utf8': 2.3.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==}
dependencies:
@@ -5084,6 +5255,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/is-array-buffer': 2.2.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==}
engines: {node: '>=14.0.0'}
@@ -5169,6 +5348,13 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==}
engines: {node: '>=14.0.0'}
dependencies:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==}
engines: {node: '>=14.0.0'}
@@ -5185,6 +5371,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==}
engines: {node: '>= 14.0.0'}
@@ -5231,6 +5425,20 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/fetch-http-handler': 2.5.0
'@smithy/node-http-handler': 2.5.0
'@smithy/types': 2.12.0
'@smithy/util-base64': 2.3.0
'@smithy/util-buffer-from': 2.2.0
'@smithy/util-hex-encoding': 2.2.0
'@smithy/util-utf8': 2.3.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==}
engines: {node: '>=14.0.0'}
@@ -5245,6 +5453,13 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==}
engines: {node: '>=14.0.0'}
dependencies:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==}
engines: {node: '>=14.0.0'}
@@ -5261,6 +5476,14 @@ packages:
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==}
engines: {node: '>=14.0.0'}
dependencies:
'@smithy/util-buffer-from': 2.2.0
tslib: 2.6.2
dev: false
/@smithy/[email protected]:
resolution: {integrity: sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA==}
engines: {node: '>=14.0.0'}
@@ -6961,6 +7184,13 @@ packages:
/[email protected]:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
/[email protected]:
resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==}
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
dev: false
/[email protected]:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
dependencies:
@@ -9133,6 +9363,11 @@ packages:
engines: {node: '>= 0.6'}
dev: false
/[email protected]:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
dev: false
/[email protected]:
resolution: {integrity: sha512-9jgfSCa3dmEme2ES3mPByGXfgZ87VbP97tng1G2nWwWx6bV2nYxm2AWCrbQjXToSe+yYlqaZNtxffR9IeQr95g==}
engines: {node: '>=14.18'}
@@ -14502,6 +14737,13 @@ packages:
internal-slot: 1.0.6
dev: true
/[email protected]:
resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
dependencies:
inherits: 2.0.4
readable-stream: 3.6.2
dev: false
/[email protected]:
resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==}
engines: {node: '>=0.8.0'}