From 1aa3b42427a0a17ea999546be719e23afca92594 Mon Sep 17 00:00:00 2001 From: juancarmore Date: Tue, 27 Aug 2024 16:20:46 +0200 Subject: [PATCH] Move openvidu-recording to openvidu-recording-node --- .../.env | 0 .../openvidu-recording-node/.gitignore | 85 +- .../openvidu-recording-node/LICENSE | 201 - .../openvidu-recording-node/README.md | 36 +- .../openvidu-recording-node/docker/Dockerfile | 13 - .../docker/create_image.sh | 8 - .../docker/entrypoint.sh | 3 - .../index.js | 0 .../openvidu-recording-node/openviducert.pem | 21 - .../openvidu-recording-node/openvidukey.pem | 27 - .../openvidu-recording-node/package-lock.json | 3581 ++++++++++++----- .../openvidu-recording-node/package.json | 40 +- .../openvidu-recording-node/public/app.js | 673 ++-- .../openvidu_globe_bg_transp_cropped.png | Bin 11746 -> 0 bytes .../openvidu_grey_bg_transp_cropped.png | Bin 39532 -> 0 bytes .../public/images/openvidu_logo.png | Bin .../openvidu_vert_white_bg_trans_cropped.png | Bin 22426 -> 0 bytes .../openvidu-recording-node/public/index.html | 209 +- .../openvidu-recording-node/public/style.css | 474 --- .../public/styles.css | 0 .../openvidu-recording-node/server.js | 200 - .../openvidu-recording/.gitignore | 129 - .../openvidu-recording/README.md | 30 - .../openvidu-recording/package-lock.json | 2543 ------------ .../openvidu-recording/package.json | 17 - .../openvidu-recording/public/app.js | 381 -- .../public/images/favicon.ico | Bin 5430 -> 0 bytes .../openvidu-recording/public/index.html | 104 - 28 files changed, 3102 insertions(+), 5673 deletions(-) rename advanced-features/{openvidu-recording => openvidu-recording-node}/.env (100%) delete mode 100644 advanced-features/openvidu-recording-node/LICENSE delete mode 100644 advanced-features/openvidu-recording-node/docker/Dockerfile delete mode 100644 advanced-features/openvidu-recording-node/docker/create_image.sh delete mode 100644 advanced-features/openvidu-recording-node/docker/entrypoint.sh rename advanced-features/{openvidu-recording => openvidu-recording-node}/index.js (100%) delete mode 100644 advanced-features/openvidu-recording-node/openviducert.pem delete mode 100644 advanced-features/openvidu-recording-node/openvidukey.pem delete mode 100644 advanced-features/openvidu-recording-node/public/images/openvidu_globe_bg_transp_cropped.png delete mode 100644 advanced-features/openvidu-recording-node/public/images/openvidu_grey_bg_transp_cropped.png rename advanced-features/{openvidu-recording => openvidu-recording-node}/public/images/openvidu_logo.png (100%) delete mode 100644 advanced-features/openvidu-recording-node/public/images/openvidu_vert_white_bg_trans_cropped.png delete mode 100644 advanced-features/openvidu-recording-node/public/style.css rename advanced-features/{openvidu-recording => openvidu-recording-node}/public/styles.css (100%) delete mode 100644 advanced-features/openvidu-recording-node/server.js delete mode 100644 advanced-features/openvidu-recording/.gitignore delete mode 100644 advanced-features/openvidu-recording/README.md delete mode 100644 advanced-features/openvidu-recording/package-lock.json delete mode 100644 advanced-features/openvidu-recording/package.json delete mode 100644 advanced-features/openvidu-recording/public/app.js delete mode 100644 advanced-features/openvidu-recording/public/images/favicon.ico delete mode 100644 advanced-features/openvidu-recording/public/index.html diff --git a/advanced-features/openvidu-recording/.env b/advanced-features/openvidu-recording-node/.env similarity index 100% rename from advanced-features/openvidu-recording/.env rename to advanced-features/openvidu-recording-node/.env diff --git a/advanced-features/openvidu-recording-node/.gitignore b/advanced-features/openvidu-recording-node/.gitignore index c85f3efc..fa6a20f5 100644 --- a/advanced-features/openvidu-recording-node/.gitignore +++ b/advanced-features/openvidu-recording-node/.gitignore @@ -4,6 +4,11 @@ logs npm-debug.log* yarn-debug.log* yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json # Runtime data pids @@ -16,11 +21,12 @@ lib-cov # Coverage directory used by tools like istanbul coverage +*.lcov # nyc test coverage .nyc_output -# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt # Bower dependency directory (https://bower.io/) @@ -29,15 +35,18 @@ bower_components # node-waf configuration .lock-wscript -# Compiled binary addons (http://nodejs.org/api/addons.html) +# Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ jspm_packages/ -# Typescript v1 declaration files -typings/ +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo # Optional npm cache directory .npm @@ -45,6 +54,15 @@ typings/ # Optional eslint cache .eslintcache +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + # Optional REPL history .node_repl_history @@ -54,11 +72,58 @@ typings/ # Yarn Integrity file .yarn-integrity -# dotenv environment variables file -.env +# dotenv environment variable files +.env.development.local +.env.test.local +.env.production.local +.env.local -.vscode/ -*.mp4 -*.mov -*.ogg +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* \ No newline at end of file diff --git a/advanced-features/openvidu-recording-node/LICENSE b/advanced-features/openvidu-recording-node/LICENSE deleted file mode 100644 index 8dada3ed..00000000 --- a/advanced-features/openvidu-recording-node/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/advanced-features/openvidu-recording-node/README.md b/advanced-features/openvidu-recording-node/README.md index 3c3dc21f..88262159 100644 --- a/advanced-features/openvidu-recording-node/README.md +++ b/advanced-features/openvidu-recording-node/README.md @@ -1,14 +1,30 @@ -[![License badge](https://img.shields.io/badge/license-Apache2-orange.svg)](http://www.apache.org/licenses/LICENSE-2.0) -[![OpenVidu Tests](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml/badge.svg)](https://github.com/OpenVidu/openvidu/actions/workflows/openvidu-ce-test.yml) -[![Documentation Status](https://readthedocs.org/projects/openvidu/badge/?version=stable)](https://docs.openvidu.io/en/stable/?badge=stable) -[![Docker badge](https://img.shields.io/docker/pulls/openvidu/openvidu-server-kms.svg)](https://hub.docker.com/r/openvidu/openvidu-server-kms) -[![Support badge](https://img.shields.io/badge/support-sof-yellowgreen.svg)](https://openvidu.discourse.group/) +# OpenVidu Recording -[![][OpenViduLogo]](http://openvidu.io) +Simple video-call application with recording capabilities. It includes a backend built with Node.js with Express and a frontend built with plain HTML, CSS and JavaScript. -openvidu-recording-node -=== +For further information, check the [tutorial documentation](https://livekit-tutorials.openvidu.io/tutorials/advanced-tutorials/node/). -Visit [docs.openvidu.io/en/stable/tutorials/openvidu-recording-node/](http://docs.openvidu.io/en/stable/tutorials/openvidu-recording-node/) +## Prerequisites -[OpenViduLogo]: https://secure.gravatar.com/avatar/5daba1d43042f2e4e85849733c8e5702?s=120 +- [Node](https://nodejs.org/en/download) + +## Run + +1. Download repository + +```bash +git clone https://github.com/OpenVidu/openvidu-livekit-tutorials.git +cd openvidu-livekit-tutorials/advanced-features/openvidu-recording +``` + +2. Install dependencies + +```bash +npm install +``` + +3. Run the application + +```bash +npm start +``` diff --git a/advanced-features/openvidu-recording-node/docker/Dockerfile b/advanced-features/openvidu-recording-node/docker/Dockerfile deleted file mode 100644 index 613bf336..00000000 --- a/advanced-features/openvidu-recording-node/docker/Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM node:16-alpine3.16 - -# Copy openvidu-recording-node -COPY . /opt/openvidu-recording-node - -# Install openvidu-recording-node dependencies -RUN npm --prefix /opt/openvidu-recording-node install - -WORKDIR /opt/openvidu-recording-node - -COPY docker/entrypoint.sh . - -ENTRYPOINT [ "./entrypoint.sh" ] \ No newline at end of file diff --git a/advanced-features/openvidu-recording-node/docker/create_image.sh b/advanced-features/openvidu-recording-node/docker/create_image.sh deleted file mode 100644 index c203bd6b..00000000 --- a/advanced-features/openvidu-recording-node/docker/create_image.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -if [ $# -eq 0 ]; then - echo "No version argument provided. Usage: \"./create_image.sh \"" - exit 1 -fi - -pushd ../ -docker build --pull --no-cache --rm=true -f docker/Dockerfile -t "$1" . diff --git a/advanced-features/openvidu-recording-node/docker/entrypoint.sh b/advanced-features/openvidu-recording-node/docker/entrypoint.sh deleted file mode 100644 index b7163954..00000000 --- a/advanced-features/openvidu-recording-node/docker/entrypoint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -exec node server.js "$*" \ No newline at end of file diff --git a/advanced-features/openvidu-recording/index.js b/advanced-features/openvidu-recording-node/index.js similarity index 100% rename from advanced-features/openvidu-recording/index.js rename to advanced-features/openvidu-recording-node/index.js diff --git a/advanced-features/openvidu-recording-node/openviducert.pem b/advanced-features/openvidu-recording-node/openviducert.pem deleted file mode 100644 index 545ccee2..00000000 --- a/advanced-features/openvidu-recording-node/openviducert.pem +++ /dev/null @@ -1,21 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDgzCCAmugAwIBAgIJALDBPXTrlAhlMA0GCSqGSIb3DQEBCwUAMFgxCzAJBgNV -BAYTAkVTMRMwEQYDVQQIDApTb21lLVN0YXRlMREwDwYDVQQKDAhPcGVuVmlkdTEh -MB8GCSqGSIb3DQEJARYSb3BlbnZpZHVAZ21haWwuY29tMB4XDTE3MDUzMDE1MjQx -N1oXDTI3MDUyODE1MjQxN1owWDELMAkGA1UEBhMCRVMxEzARBgNVBAgMClNvbWUt -U3RhdGUxETAPBgNVBAoMCE9wZW5WaWR1MSEwHwYJKoZIhvcNAQkBFhJvcGVudmlk -dUBnbWFpbC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDbK/i -LN80IBnGUbzA4AFl4KQEX6RCreythnfOSnIcQSTP+KjesZMFgsGV0LteDxeCJ+kq -4YoS+CW7ojvOEz3xjCgo4tFdevz8ZoeO0RBQIbARbPako4OXC6vWs6LHwCR0aDWo -9HfS1Uusb8g77csRPRlNA3DGR8dcRTiEBdfHS6Jh/7V7XiDlaxPXj+iIY8PyCqOf -gv4clDt17R+dendDsgYxbmZaodrppNocMQIyUaDIwI4DZOa8nQYk9uuUhkiAFAQB -O642bx6NI0qDu5KgtMmbaS6s+rMnrL8eeZOicqff6XoC6tk6GE8Fo4iYkxp2gAiT -sigaSwpNRWhupISVAgMBAAGjUDBOMB0GA1UdDgQWBBTi3sXqpf42vUNehFU6y4Pn -PTJFRDAfBgNVHSMEGDAWgBTi3sXqpf42vUNehFU6y4PnPTJFRDAMBgNVHRMEBTAD -AQH/MA0GCSqGSIb3DQEBCwUAA4IBAQBfl0C7XAbPdJzCjCsboMTzfC2B4uwspbST -MbUGnmNkTwzeOOsrLQmlCznKGprYV9vGR0MwBzYw2swWCzg/2MLN8swW7NF9gMkK -K61AANxT0qZV/aZhdM7W//pHJoQYsBsQT7cuTrL/VB/niD81uMA/mSWyXIn8KDIy -CPY6jiZ4qiIJnQWhWm1Cazv6O7wjDisvB1cCJhDvBv42KkFwtigt5MQnBEGOI2LD -iKCkXfj33E5B6n0sEel68WgYi6rx2tsR9lzAjCRF+jgNd7FfeUi999m7ykgEACR5 -OYRqkVcIXz30r9RxQyFqZLNzyO9oaVZpex8ZbWwEzNXG2ccddnMJ ------END CERTIFICATE----- diff --git a/advanced-features/openvidu-recording-node/openvidukey.pem b/advanced-features/openvidu-recording-node/openvidukey.pem deleted file mode 100644 index 9b47696d..00000000 --- a/advanced-features/openvidu-recording-node/openvidukey.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEowIBAAKCAQEAw2yv4izfNCAZxlG8wOABZeCkBF+kQq3srYZ3zkpyHEEkz/io -3rGTBYLBldC7Xg8XgifpKuGKEvglu6I7zhM98YwoKOLRXXr8/GaHjtEQUCGwEWz2 -pKODlwur1rOix8AkdGg1qPR30tVLrG/IO+3LET0ZTQNwxkfHXEU4hAXXx0uiYf+1 -e14g5WsT14/oiGPD8gqjn4L+HJQ7de0fnXp3Q7IGMW5mWqHa6aTaHDECMlGgyMCO -A2TmvJ0GJPbrlIZIgBQEATuuNm8ejSNKg7uSoLTJm2kurPqzJ6y/HnmTonKn3+l6 -AurZOhhPBaOImJMadoAIk7IoGksKTUVobqSElQIDAQABAoIBAGr/2HFjFjbpGJOw -b0O/oqRQUh2e7EYiCoOcK37E3iPAO1KvmG6OFayfwjSwG9bNNpbqGU2EPeBTA/3v -PwV/HZxinB5+yhl/3IKp9LDqoR7uwwNXgNf2O3d5SXX91zO9bXhbEn5WlEDYzl00 -uxKtCVF//ZlgN+AoruxDbkVDGbkhKHGzvqOW+BWwbYHPOttQ9TQx2ss5+DekpDFV -/FuvXGOcSSV/N+WbDwsqUiM8ovkcflEgQjZYlAY4Ro2U2buf3fKEmy1jxSznNp30 -QA4WyYypyS8Hz6S/F4nsjtS3ufCurrWBv4vt2qB+8tH//07NUacjQWZdvEAtaJ+G -IyJgsOUCgYEA38b2SQiw74fwoK6so2XdpCzOObLQBOT1aeZQjt3v8XZ0MPzwWJZm -VkMBmolcEw24xA3jHhOQYafAGjRdaKxlRbJyGJqwENfAs7hO5JSLLWWXsorJQcb7 -1OVTFPt7NZopx2Kw7kGGuj9884w57cSl9lsuMptqk8W7pbTo5opOfl8CgYEA35CR -x23kaFDh8+zKUuSdIrkUJ66cazgOfF0FYKiDewd1sGEdZT+gq7Wo8Hi8cp9q+Kuq -MkGrTzu21yMi2fo7RKoSOtV4RQViu6PuoYR/KvRq4F4abHEAivAG4xhPQife84IB -NkDQXaE9EXTP7DXPwj4HV8CnC9LC2qPFU7GVeYsCgYBWPK6c5qSJKrIouif9sDwC -EOJIighwWmvZK9DPvefB/gw49MEK4qr9g0US8Oxyy07w/wkPhiqV97eoYZW9yPIe -Me6WXMaNNxgkKlr86+HW1NfpDmMQ3kYefWHPLDsHJSoElJvqtYXeMKlOkjOg1a+/ -iNP83Lftyr3N1jIK5jHpsQKBgE1+clm7qOnT547C7JrxLdrEZs0ehI/R3YuUPvHz -V6gEvPHHqAXZmVsL3CSG5WOiCNVrw9Ip2zTa0RUf08vVJkg1353PMyJRrJi4SVZp -dB8ym/1sASLHxNVkQC7l1UtsQKcN0Fe6/b8GzgFICW6qdHqzP55WZFD/3JUnIZZS -PyrjAoGBAMfuE0Nrw9Fq7f8+U/SsqiW9djJp4R34EF5n8qHkotfRoAbGktCGxLoF -QMbB9X0ibRMpxEKPHj+V0FXu9zUKFuqoriRc3alQYLNzJEdKeQQ/AN5xjG3ilM6D -/FunImbvSdJLjR9Ue6vlFdOquHevBCFDiHOJPQJ/y4qyZR5Avluw ------END RSA PRIVATE KEY----- diff --git a/advanced-features/openvidu-recording-node/package-lock.json b/advanced-features/openvidu-recording-node/package-lock.json index 4fa4fd98..acf3868e 100644 --- a/advanced-features/openvidu-recording-node/package-lock.json +++ b/advanced-features/openvidu-recording-node/package-lock.json @@ -1,1050 +1,2543 @@ { - "name": "openvidu-recording-node", - "version": "2.27.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "openvidu-recording-node", - "version": "2.27.0", - "license": "Apache-2.0", - "dependencies": { - "body-parser": "1.20.0", - "cors": "2.8.5", - "dotenv": "16.0.1", - "express": "4.18.1", - "livekit-server-sdk": "1.2.2" - } - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" - }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" - }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" - }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", - "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" - } - }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" - }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" - }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" - }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" - }, - "node_modules/@protobufjs/utf8": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" - }, - "node_modules/@types/node": { - "version": "20.8.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.10.tgz", - "integrity": "sha512-TlgT8JntpcbmKUFzjhsyhGfP2fsiz1Mv56im6enJ905xG1DAYesxJaeSbGqQmAw8OWPdhyJGhGSQGKRNJ45u9w==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dotenv": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.1.tgz", - "integrity": "sha512-1K6hR6wtk2FviQ4kEiSjFiH5rpzEVi8WW0x96aztHVMhEspNpc4DVOUTEHtEva5VThQ8IaBX1Pe4gSzpVVUsKQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", - "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", - "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/livekit-server-sdk": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-1.2.2.tgz", - "integrity": "sha512-0yRLPxDRuF7BoFwh5DieQlgwcyvkonA2li+xrSmNDi7SFmuSqXwpnnqyvK0DtlNBw2YHOvs2Tf71rAhQkQbADg==", - "dependencies": { - "axios": "^1.3.6", - "camelcase-keys": "^7.0.0", - "jsonwebtoken": "^9.0.0", - "protobufjs": "^7.2.3" - } - }, - "node_modules/livekit-server-sdk/node_modules/axios": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.0.tgz", - "integrity": "sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" - }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/protobufjs": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.5.tgz", - "integrity": "sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==", - "hasInstallScript": true, - "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" + "name": "openvidu-recording", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "openvidu-recording", + "version": "1.0.0", + "dependencies": { + "@aws-sdk/client-s3": "3.635.0", + "cors": "2.8.5", + "dotenv": "16.4.5", + "express": "4.19.2", + "livekit-server-sdk": "2.6.1" + } }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } }, - { - "type": "consulting", - "url": "https://feross.org/support" + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.635.0.tgz", + "integrity": "sha512-4RP+DJZWqUka1MW2aSEzTzntY3GrDzS26D8dHZvbt2I0x+dSmlnmXiJkCxLjmti2SDVYAGL9gX6e7mLS7W55jA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.635.0", + "@aws-sdk/client-sts": "3.635.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.635.0", + "@aws-sdk/middleware-bucket-endpoint": "3.620.0", + "@aws-sdk/middleware-expect-continue": "3.620.0", + "@aws-sdk/middleware-flexible-checksums": "3.620.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-location-constraint": "3.609.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/middleware-ssec": "3.609.0", + "@aws-sdk/middleware-user-agent": "3.632.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/signature-v4-multi-region": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.632.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@aws-sdk/xml-builder": "3.609.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/eventstream-serde-browser": "^3.0.6", + "@smithy/eventstream-serde-config-resolver": "^3.0.3", + "@smithy/eventstream-serde-node": "^3.0.5", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-blob-browser": "^3.1.2", + "@smithy/hash-node": "^3.0.3", + "@smithy/hash-stream-node": "^3.1.2", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/md5-js": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "@smithy/util-waiter": "^3.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.635.0.tgz", + "integrity": "sha512-/Hl69+JpFUo9JNVmh2gSvMgYkE4xjd+1okiRoPBbQqjI7YBP2JWCUDP8IoEkNq3wj0vNTq0OWfn6RpZycIkAXQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.632.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.632.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.635.0.tgz", + "integrity": "sha512-RIwDlhzAFttB1vbpznewnPqz7h1H/2UhQLwB38yfZBwYQOxyxVfLV5j5VoUUX3jY4i4qH9wiHc7b02qeAOZY6g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.632.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.632.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.635.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.635.0.tgz", + "integrity": "sha512-Al2ytE69+cbA44qHlelqhzWwbURikfF13Zkal9utIG5Q6T2c7r8p6sePN92n8l/x1v0FhJ5VTxKak+cPTE0CZQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.635.0", + "@aws-sdk/core": "3.635.0", + "@aws-sdk/credential-provider-node": "3.635.0", + "@aws-sdk/middleware-host-header": "3.620.0", + "@aws-sdk/middleware-logger": "3.609.0", + "@aws-sdk/middleware-recursion-detection": "3.620.0", + "@aws-sdk/middleware-user-agent": "3.632.0", + "@aws-sdk/region-config-resolver": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.632.0", + "@aws-sdk/util-user-agent-browser": "3.609.0", + "@aws-sdk/util-user-agent-node": "3.614.0", + "@smithy/config-resolver": "^3.0.5", + "@smithy/core": "^2.4.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/hash-node": "^3.0.3", + "@smithy/invalid-dependency": "^3.0.3", + "@smithy/middleware-content-length": "^3.0.5", + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.15", + "@smithy/util-defaults-mode-node": "^3.0.15", + "@smithy/util-endpoints": "^2.0.5", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", + "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", + "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", + "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.635.0.tgz", + "integrity": "sha512-+OqcNhhOFFY08YHLjO9/Y1n37RKAO7LADnsJ7VTXca7IfvYh27BVBn+FdlqnyEb1MQ5ArHTY4pq3pKRIg6RW4Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.635.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.635.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.635.0.tgz", + "integrity": "sha512-bmd23mnb94S6AxmWPgqJTnvT9ONKlTx7EPafE1RNO+vUl6mHih4iyqX6ZPaRcSfaPx4U1R7H1RM8cSnafXgaBg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.620.1", + "@aws-sdk/credential-provider-http": "3.635.0", + "@aws-sdk/credential-provider-ini": "3.635.0", + "@aws-sdk/credential-provider-process": "3.620.1", + "@aws-sdk/credential-provider-sso": "3.635.0", + "@aws-sdk/credential-provider-web-identity": "3.621.0", + "@aws-sdk/types": "3.609.0", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.620.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", + "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.635.0.tgz", + "integrity": "sha512-hO/fKyvUaGpK9zyvCnmJz70EputvGWDr2UTOn/RzvcR6UB4yXoFf0QcCMubEsE3v67EsAv6PadgOeJ0vz6IazA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.635.0", + "@aws-sdk/token-providers": "3.614.0", + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.621.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", + "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.621.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", + "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", + "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", + "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-sdk/types": "3.609.0", + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", + "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", + "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", + "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.620.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", + "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", + "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-arn-parser": "3.568.0", + "@smithy/core": "^2.4.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-stream": "^3.1.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", + "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.632.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz", + "integrity": "sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@aws-sdk/util-endpoints": "3.632.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", + "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.635.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", + "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.635.0", + "@aws-sdk/types": "3.609.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/signature-v4": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", + "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.614.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", + "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", + "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.632.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz", + "integrity": "sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "@smithy/util-endpoints": "^2.0.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", + "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.614.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", + "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.609.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.609.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", + "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", + "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@livekit/protocol": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/@livekit/protocol/-/protocol-1.20.0.tgz", + "integrity": "sha512-2RJQwzBa+MfUoy0zBWuyj8S2MTBxeTgREeG0r/1bNmkAFiBhsdgr87gIvblyqJxffUxJpALMu1Ee0M1XHX+9Ug==", + "license": "Apache-2.0", + "dependencies": { + "@bufbuild/protobuf": "^1.7.2" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", + "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", + "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", + "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", + "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", + "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-retry": "^3.0.15", + "@smithy/middleware-serde": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", + "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", + "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", + "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", + "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", + "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^3.0.5", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", + "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^3.1.2", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", + "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", + "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^3.0.0", + "@smithy/chunked-blob-reader-native": "^3.0.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", + "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", + "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", + "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", + "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", + "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", + "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.3", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/url-parser": "^3.0.3", + "@smithy/util-middleware": "^3.0.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", + "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/protocol-http": "^4.1.0", + "@smithy/service-error-classification": "^3.0.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-retry": "^3.0.3", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", + "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", + "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", + "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/shared-ini-file-loader": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", + "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/protocol-http": "^4.1.0", + "@smithy/querystring-builder": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", + "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", + "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", + "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", + "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", + "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", + "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", + "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.3", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", + "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.0", + "@smithy/middleware-stack": "^3.0.3", + "@smithy/protocol-http": "^4.1.0", + "@smithy/types": "^3.3.0", + "@smithy/util-stream": "^3.1.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", + "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", + "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", + "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.15", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", + "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.5", + "@smithy/credential-provider-imds": "^3.2.0", + "@smithy/node-config-provider": "^3.1.4", + "@smithy/property-provider": "^3.1.3", + "@smithy/smithy-client": "^3.2.0", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", + "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.4", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", + "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", + "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.3", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", + "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.4", + "@smithy/node-http-handler": "^3.1.4", + "@smithy/types": "^3.3.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", + "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.1", + "@smithy/types": "^3.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", + "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-9.1.3.tgz", + "integrity": "sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==", + "license": "MIT", + "dependencies": { + "camelcase": "^8.0.0", + "map-obj": "5.0.0", + "quick-lru": "^6.1.1", + "type-fest": "^4.3.2" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/jose": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.7.0.tgz", + "integrity": "sha512-3P9qfTYDVnNn642LCAqIKbTGb9a1TBxZ9ti5zEVEr48aDdflgRjhspWFb6WM4PzAfFbGMJYC4+803v8riCRAKw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/livekit-server-sdk": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-2.6.1.tgz", + "integrity": "sha512-j/8TOlahIyWnycNkuSzTv6q+win4JTbDGNH48iMsZDMnJBks9hhC9UwAO4ES42sAorIAxGkrH58hxt4KdTkZaQ==", + "license": "Apache-2.0", + "dependencies": { + "@livekit/protocol": "^1.19.0", + "camelcase-keys": "^9.0.0", + "jose": "^5.1.2" + }, + "engines": { + "node": ">=19" + } + }, + "node_modules/map-obj": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.0.tgz", + "integrity": "sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quick-lru": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", + "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "4.25.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", + "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } - } } diff --git a/advanced-features/openvidu-recording-node/package.json b/advanced-features/openvidu-recording-node/package.json index 4266a686..1d48a6c7 100644 --- a/advanced-features/openvidu-recording-node/package.json +++ b/advanced-features/openvidu-recording-node/package.json @@ -1,27 +1,17 @@ { - "name": "openvidu-recording-node", - "version": "2.27.0", - "description": "", - "main": "server.js", - "scripts": { - "start": "node server.js", - "test": "ng test" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/OpenVidu/openvidu-tutorials.git" - }, - "author": "openvidu@gmail.com", - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/OpenVidu/openvidu-tutorials/issues" - }, - "homepage": "https://github.com/OpenVidu/openvidu-tutorials#readme", - "dependencies": { - "body-parser": "1.20.0", - "cors": "2.8.5", - "dotenv": "16.0.1", - "express": "4.18.1", - "livekit-server-sdk": "1.2.2" - } + "name": "openvidu-recording", + "version": "1.0.0", + "description": "Simple video-call application with recording capabilities", + "main": "index.js", + "type": "module", + "scripts": { + "start": "node index.js" + }, + "dependencies": { + "@aws-sdk/client-s3": "3.635.0", + "cors": "2.8.5", + "dotenv": "16.4.5", + "express": "4.19.2", + "livekit-server-sdk": "2.6.1" + } } diff --git a/advanced-features/openvidu-recording-node/public/app.js b/advanced-features/openvidu-recording-node/public/app.js index ce00514f..53ac8256 100644 --- a/advanced-features/openvidu-recording-node/public/app.js +++ b/advanced-features/openvidu-recording-node/public/app.js @@ -1,348 +1,381 @@ -var LivekitClient = window.LivekitClient; +// When running OpenVidu locally, leave this variable empty +// For other deployment type, configure it with correct URL depending on your deployment +var LIVEKIT_URL = ""; +configureLiveKitUrl(); + +const LivekitClient = window.LivekitClient; var room; -var myRoomName; -var token; -var nickname; -var numVideos = 0; -var localVideoPublication; -var localAudioPublication; - -/* OPENVIDU METHODS */ - -function joinRoom() { - // --- 0) Change the button --- - - document.getElementById('join-btn').disabled = true; - document.getElementById('join-btn').innerHTML = 'Joining...'; - const myParticipantName = `Participant${Math.floor(Math.random() * 100)}`; - const myRoomName = $('#roomName').val(); - - room = new LivekitClient.Room(); - - room.on( - LivekitClient.RoomEvent.TrackSubscribed, - (track, publication, participant) => { - const element = track.attach(); - element.id = track.sid; - document.getElementById('video-container').appendChild(element); - if (track.kind === 'video') { - var audioTrackId; - var videoTrackId; - participant.getTracks().forEach((track) => { - if (track.kind === 'audio') { - audioTrackId = track.trackInfo.sid; - } else if (track.kind === 'video') { - videoTrackId = track.trackInfo.sid; - } - }); - addIndividualRecordingButton(element.id, videoTrackId, audioTrackId); - updateNumVideos(1); - } - } - ); - - // On every new Track destroyed... - room.on( - LivekitClient.RoomEvent.TrackUnsubscribed, - (track, publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - if (track.kind === 'video') { - // removeUserData(participant); - updateNumVideos(-1); - } - } - ); - - room.on(LivekitClient.RoomEvent.RecordingStatusChanged, (isRecording) => { - console.log('Recording status changed: ' + status); - if (!isRecording) { - listRecordings(); - } - }); - - getToken(myRoomName, myParticipantName).then(async (token) => { - const livekitUrl = getLivekitUrlFromMetadata(token); - - try { - await room.connect(livekitUrl, token); - - var participantName = $('#user').val(); - $('#room-title').text(myRoomName); - $('#join').hide(); - $('#room').show(); - - const [audioPublication, videoPublication] = await Promise.all([ - room.localParticipant.setMicrophoneEnabled(true), - room.localParticipant.setCameraEnabled(true), - ]); - localVideoPublication = videoPublication; - localAudioPublication = audioPublication; - - console.log('Connected to room ' + myRoomName); - const element = videoPublication.track.attach(); - element.id = videoPublication.track.sid; - document.getElementById('video-container').appendChild(element); - addIndividualRecordingButton( - element.id, - videoPublication.track.sid, - audioPublication.track.sid - ); - updateNumVideos(1); - } catch (error) { - console.warn( - 'There was an error connecting to the room:', - error.code, - error.message - ); - enableBtn(); - } - - return false; - }); +function configureLiveKitUrl() { + // If LIVEKIT_URL is not configured, use default value from OpenVidu Local deployment + if (!LIVEKIT_URL) { + if (window.location.hostname === "localhost") { + LIVEKIT_URL = "ws://localhost:7880/"; + } else { + LIVEKIT_URL = "wss://" + window.location.hostname + ":7443/"; + } + } } -function leaveRoom() { - room.disconnect(); - room = null; +async function joinRoom() { + // Disable 'Join' button + document.getElementById("join-button").disabled = true; + document.getElementById("join-button").innerText = "Joining..."; - $('#video-container').empty(); - numVideos = 0; + // Initialize a new Room object + room = new LivekitClient.Room(); - $('#join').show(); - $('#room').hide(); + // Specify the actions when events take place in the room + // On every new Track received... + room.on(LivekitClient.RoomEvent.TrackSubscribed, (track, _publication, participant) => { + addTrack(track, participant.identity); + }); - enableBtn(); + // On every new Track destroyed... + room.on(LivekitClient.RoomEvent.TrackUnsubscribed, (track, _publication, participant) => { + track.detach(); + document.getElementById(track.sid)?.remove(); + + if (track.kind === "video") { + removeVideoContainer(participant.identity); + } + }); + + room.on(LivekitClient.RoomEvent.RecordingStatusChanged, async (isRecording) => { + await updateRecordingInfo(isRecording); + }); + + try { + // Get the room name and participant name from the form + const roomName = document.getElementById("room-name").value; + const userName = document.getElementById("participant-name").value; + + // Get a token from your application server with the room name and participant name + const token = await getToken(roomName, userName); + + // Connect to the room with the LiveKit URL and the token + await room.connect(LIVEKIT_URL, token); + + // Hide the 'Join room' page and show the 'Room' page + document.getElementById("room-title").innerText = roomName; + document.getElementById("join").hidden = true; + document.getElementById("room").hidden = false; + + // Publish your camera and microphone + await room.localParticipant.enableCameraAndMicrophone(); + const localVideoTrack = this.room.localParticipant.videoTrackPublications.values().next().value.track; + addTrack(localVideoTrack, userName, true); + } catch (error) { + console.log("There was an error connecting to the room:", error.message); + await leaveRoom(); + } } -/* OPENVIDU METHODS */ +function addTrack(track, participantIdentity, local = false) { + const element = track.attach(); + element.id = track.sid; -function enableBtn() { - document.getElementById('join-btn').disabled = false; - document.getElementById('join-btn').innerHTML = 'Join!'; + /* If the track is a video track, we create a container and append the video element to it + with the participant's identity */ + if (track.kind === "video") { + const videoContainer = createVideoContainer(participantIdentity, local); + videoContainer.append(element); + appendParticipantData(videoContainer, participantIdentity + (local ? " (You)" : "")); + } else { + document.getElementById("layout-container").append(element); + } } -/* APPLICATION REST METHODS */ +async function leaveRoom() { + // Leave the room by calling 'disconnect' method over the Room object + await room.disconnect(); -function getToken(roomName, participantName) { - return new Promise((resolve, reject) => { - // Video-call chosen by the user - httpRequest( - 'POST', - 'token', - { roomName, participantName }, - 'Error generating token', - (response) => resolve(response.token) - ); - }); + // Remove all HTML elements inside the layout container + removeAllLayoutElements(); + + // Back to 'Join room' page + document.getElementById("join").hidden = false; + document.getElementById("room").hidden = true; + + // Enable 'Join' button + document.getElementById("join-button").disabled = false; + document.getElementById("join-button").innerText = "Join!"; } -async function httpRequest(method, url, body, errorMsg, successCallback) { - try { - const response = await fetch(url, { - method, - headers: { - 'Content-Type': 'application/json', - }, - body: method === 'GET' ? undefined : JSON.stringify(body), - }); - - if (response.ok) { - const data = await response.json(); - successCallback(data); - } else { - console.warn(errorMsg); - console.warn('Error: ' + response.statusText); - } - } catch (error) { - console.error(error); - } -} - -function startComposedRecording() { - var hasAudio = $('#has-audio-checkbox').prop('checked'); - var hasVideo = $('#has-video-checkbox').prop('checked'); - - httpRequest( - 'POST', - 'recordings/start', - { - roomName: room.roomInfo.name, - outputMode: 'COMPOSED', - videoOnly: hasVideo && !hasAudio, - audioOnly: hasAudio && !hasVideo, - }, - 'Start recording WRONG', - (res) => { - console.log(res); - document.getElementById('forceRecordingId').value = res.id; - checkBtnsRecordings(); - $('#textarea-http').text(JSON.stringify(res, null, '\t')); - } - ); -} - -function startIndividualRecording(videoTrackId, audioTrackId) { - return new Promise((resolve, reject) => { - httpRequest( - 'POST', - 'recordings/start', - { - roomName: room.roomInfo.name, - outputMode: 'INDIVIDUAL', - audioTrackId, - videoTrackId, - }, - 'Start recording WRONG', - (res) => { - console.log(res); - $('#textarea-http').text(JSON.stringify(res.info, null, '\t')); - resolve(res); - } - ); - }); -} - -function stopRecording(id) { - var forceRecordingId = id ? id : $('#forceRecordingId').val(); - httpRequest( - 'POST', - 'recordings/stop', - { - recordingId: forceRecordingId, - }, - 'Stop recording WRONG', - (res) => { - console.log(res); - $('#forceRecordingId').val(''); - $('#textarea-http').text(JSON.stringify(res.info, null, '\t')); - } - ); -} - -function listRecordings() { - httpRequest('GET', 'recordings/list', {}, 'List recordings WRONG', (res) => { - console.log(res); - $('#recording-list').empty(); - if (res.recordings && res.recordings.length > 0) { - res.recordings.forEach((recording) => { - var li = document.createElement('li'); - var a = document.createElement('a'); - a.href = recording.path; - a.target = '_blank'; - a.appendChild(document.createTextNode(recording.name)); - li.appendChild(a); - $('#recording-list').append(li); - }); - $('#delete-recordings-btn').prop('disabled', res.recordings.length === 0); - } - }); -} - -function deleteRecordings() { - httpRequest('DELETE', 'recordings', {}, 'Delete recordings WRONG', (res) => { - console.log(res); - $('#recording-list').empty(); - $('#delete-recordings-btn').prop('disabled', true); - $('#textarea-http').text(JSON.stringify(res, null, '\t')); - }); -} - -/* APPLICATION REST METHODS */ - -/* APPLICATION BROWSER METHODS */ - -events = ''; - -window.onbeforeunload = function () { - // Gracefully leave room - if (room) { - removeUser(); - leaveRoom(); - } +window.onbeforeunload = () => { + room?.disconnect(); }; -function getLivekitUrlFromMetadata(token) { - if (!token) throw new Error('Trying to get metadata from an empty token'); - try { - const base64Url = token.split('.')[1]; - const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/'); - const jsonPayload = decodeURIComponent( - window - .atob(base64) - .split('') - .map((c) => { - return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join('') - ); +window.onload = generateFormValues; - const payload = JSON.parse(jsonPayload); - if (!payload?.metadata) throw new Error('Token does not contain metadata'); - const metadata = JSON.parse(payload.metadata); - return metadata.livekitUrl; - } catch (error) { - throw new Error('Error decoding and parsing token: ' + error); - } +function generateFormValues() { + document.getElementById("room-name").value = "Test Room"; + document.getElementById("participant-name").value = "Participant" + Math.floor(Math.random() * 100); } -function updateNumVideos(i) { - numVideos += i; - $('video').removeClass(); - switch (numVideos) { - case 1: - $('video').addClass('two'); - break; - case 2: - $('video').addClass('two'); - break; - case 3: - $('video').addClass('three'); - break; - case 4: - $('video').addClass('four'); - break; - } +function createVideoContainer(participantIdentity, local = false) { + const videoContainer = document.createElement("div"); + videoContainer.id = `camera-${participantIdentity}`; + videoContainer.className = "video-container"; + const layoutContainer = document.getElementById("layout-container"); + + if (local) { + layoutContainer.prepend(videoContainer); + } else { + layoutContainer.append(videoContainer); + } + + return videoContainer; } -function checkBtnsRecordings() { - if (document.getElementById('forceRecordingId').value === '') { - document.getElementById('buttonStopRecording').disabled = true; - } else { - document.getElementById('buttonStopRecording').disabled = false; - } +function appendParticipantData(videoContainer, participantIdentity) { + const dataElement = document.createElement("div"); + dataElement.className = "participant-data"; + dataElement.innerHTML = `

${participantIdentity}

`; + videoContainer.prepend(dataElement); } -function addIndividualRecordingButton(elementId, videoTrackId, audioTrackId) { - const div = document.createElement('div'); - - var button = document.createElement('button'); - // button.id = elementId + '-button'; - button.className = 'recording-track-button btn btn-sm'; - - button.innerHTML = 'Record Track'; - button.style = 'position: absolute; left: 0; z-index: 1000;'; - - button.onclick = async () => { - if (button.innerHTML === 'Record Track') { - button.innerHTML = 'Stop Recording'; - button.className = 'recording-track-button btn btn-sm btn-danger'; - var res = await startIndividualRecording(videoTrackId, audioTrackId); - button.id = res.info.egressId; - } else { - button.innerHTML = 'Record Track'; - button.className = 'recording-track-button btn btn-sm'; - stopRecording(button.id); - } - }; - div.appendChild(button); - var element = document.getElementById(elementId); - element.parentNode.insertBefore(div, element.nextSibling); +function removeVideoContainer(participantIdentity) { + const videoContainer = document.getElementById(`camera-${participantIdentity}`); + videoContainer?.remove(); } -function clearHttpTextarea() { - $('#textarea-http').text(''); +function removeAllLayoutElements() { + const layoutElements = document.getElementById("layout-container").children; + Array.from(layoutElements).forEach((element) => { + element.remove(); + }); } -/* APPLICATION BROWSER METHODS */ +/** + * -------------------------------------------- + * GETTING A TOKEN FROM YOUR APPLICATION SERVER + * -------------------------------------------- + * The method below request the creation of a token to + * your application server. This prevents the need to expose + * your LiveKit API key and secret to the client side. + * + * In this sample code, there is no user control at all. Anybody could + * access your application server endpoints. In a real production + * environment, your application server must identify the user to allow + * access to the endpoints. + */ +async function getToken(roomName, participantName) { + const response = await fetch("/token", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + roomName, + participantName + }) + }); + + if (!response.ok) { + const error = await response.json(); + throw new Error(`Failed to get token: ${error.errorMessage}`); + } + + const token = await response.json(); + return token.token; +} + +async function openRecordingsDialog() { + const recordingsDialog = document.getElementById("recordings-dialog"); + recordingsDialog.showModal(); + await updateRecordingInfo(room.isRecording); +} + +function closeRecordingsDialog() { + const recordingsDialog = document.getElementById("recordings-dialog"); + recordingsDialog.close(); +} + +document.addEventListener("DOMContentLoaded", () => { + document.getElementById("recordings-dialog").addEventListener("close", () => { + const recordingVideo = document.getElementById("recording-video"); + + if (recordingVideo) { + recordingVideo.remove(); + } + }); +}); + +async function updateRecordingInfo(isRecording) { + const recordingButton = document.getElementById("recording-button"); + const recordingText = document.getElementById("recording-text"); + + if (isRecording) { + recordingButton.disabled = false; + recordingButton.innerText = "Stop Recording"; + recordingButton.className = "btn btn-danger"; + recordingText.hidden = false; + } else { + recordingButton.disabled = false; + recordingButton.innerText = "Start Recording"; + recordingButton.className = "btn btn-primary"; + recordingText.hidden = true; + } + + await listRecordings(); +} + +async function manageRecording() { + const recordingButton = document.getElementById("recording-button"); + + if (recordingButton.innerText === "Start Recording") { + recordingButton.disabled = true; + recordingButton.innerText = "Starting..."; + await startRecording(); + } else { + recordingButton.disabled = true; + recordingButton.innerText = "Stopping..."; + await stopRecording(); + } +} + +async function startRecording() { + const response = await fetch("/recordings/start", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + roomName: room.name + }) + }); + + if (!response.ok) { + const error = await response.json(); + console.error(error.errorMessage); + return; + } +} + +async function stopRecording() { + const response = await fetch("/recordings/stop", { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify({ + roomName: room.name + }) + }); + + if (!response.ok) { + const error = await response.json(); + console.error(error.errorMessage); + return; + } +} + +async function deleteRecording(recordingName) { + const response = await fetch(`/recordings/${recordingName}`, { + method: "DELETE" + }); + + if (!response.ok) { + const error = await response.json(); + console.error(error.errorMessage); + return; + } + + await listRecordings(); +} + +async function listRecordings() { + const response = await fetch(`/recordings?roomName=${room.name}`); + + if (!response.ok) { + const error = await response.json(); + console.error(error.errorMessage); + return; + } + + const body = await response.json(); + const recordings = body.recordings; + + showRecordingList(recordings); +} + +function showRecordingList(recordings) { + const recordingsList = document.getElementById("recording-list"); + + if (recordings.length === 0) { + recordingsList.innerHTML = "There are no recordings available"; + } else { + recordingsList.innerHTML = ""; + } + + recordings.forEach((recording) => { + const recordingName = recording.name; + const recordingDuration = secondsToHms(recording.duration); + const recordingSize = formatBytes(recording.size); + const recordingDate = new Date(recording.startedAt).toLocaleString(); + + const recordingContainer = document.createElement("div"); + recordingContainer.className = "recording-container"; + recordingContainer.id = recordingName; + + recordingContainer.innerHTML = ` + +
+

${recordingName}

+

${recordingDuration} | ${recordingSize}

+

${recordingDate}

+
+
+ + +
+ `; + + recordingsList.append(recordingContainer); + }); +} + +function displayRecording(recordingName) { + const recordingContainer = document.getElementById("recording-video-container"); + let recordingVideo = document.getElementById("recording-video"); + + if (!recordingVideo) { + recordingVideo = document.createElement("video"); + recordingVideo.id = "recording-video"; + recordingVideo.width = 600; + recordingVideo.controls = true; + recordingVideo.autoplay = true; + recordingContainer.append(recordingVideo); + } + + recordingVideo.src = `/recordings/${recordingName}`; +} + +function secondsToHms(seconds) { + const h = Math.floor(seconds / 3600); + const m = Math.floor((seconds % 3600) / 60); + const s = Math.floor((seconds % 3600) % 60); + + const hDisplay = h > 0 ? h + "h " : ""; + const mDisplay = m > 0 ? m + "m " : ""; + const sDisplay = s + "s"; + return hDisplay + mDisplay + sDisplay; +} + +function formatBytes(bytes) { + if (bytes === 0) { + return "0Bytes"; + } + + const k = 1024; + const sizes = ["Bytes", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + const decimals = i < 2 ? 0 : 1; + + return (bytes / Math.pow(k, i)).toFixed(decimals) + sizes[i]; +} diff --git a/advanced-features/openvidu-recording-node/public/images/openvidu_globe_bg_transp_cropped.png b/advanced-features/openvidu-recording-node/public/images/openvidu_globe_bg_transp_cropped.png deleted file mode 100644 index e0309e62181608cf3543664ced79b6355779533b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11746 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 KVuQR*wOeuWT3;&BESMc5c{Qzs4Eae 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
6<-acu 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 NQp-@YMBO3!e*nzNs#O30 diff --git a/advanced-features/openvidu-recording-node/public/index.html b/advanced-features/openvidu-recording-node/public/index.html index 06a02c64..659565d4 100644 --- a/advanced-features/openvidu-recording-node/public/index.html +++ b/advanced-features/openvidu-recording-node/public/index.html @@ -1,121 +1,104 @@ - + + + + OpenVidu Recording + + + - - openvidu-recording-node + + + - - + + - - - - - - + + + + - - - - - + +
+

OpenVidu Recording

+ +
- +
+
+
+

Join a Video Room

+
+
+ + +
+
+ + +
+ +
+
+
- - -
-
-
- -
-
-

Join a video room

-
-

- - -

-

- -

-
-
-
-
- - -
- -
-
-
OpenVidu © 2023
- - - -
-
- - + +
+
+

Made with love by OpenVidu Team

+ + + +
+ diff --git a/advanced-features/openvidu-recording-node/public/style.css b/advanced-features/openvidu-recording-node/public/style.css deleted file mode 100644 index dfea514d..00000000 --- a/advanced-features/openvidu-recording-node/public/style.css +++ /dev/null @@ -1,474 +0,0 @@ -html { - position: relative; - min-height: 100%; -} - -body { - min-height: 100%; -} - -nav { - height: 50px; - width: 100%; - z-index: 1; - background-color: #4d4d4d !important; - border-color: #4d4d4d !important; - border-top-right-radius: 0 !important; - border-top-left-radius: 0 !important; -} - -.navbar-header { - width: 100%; -} - -.nav-icon { - padding: 5px 15px 5px 15px; - float: right; -} - -nav a { - color: #ccc !important; -} - -nav i.fa { - font-size: 40px; - color: #ccc; -} - -nav a:hover { - color: #a9a9a9 !important; -} - -nav i.fa:hover { - color: #a9a9a9; -} - -#main-container { - padding-bottom: 80px; - height: 100%; - margin-top: -70px; -} - -.vertical-center { - width: -webkit-fit-content; - width: fit-content; - margin: auto; -} - -.vertical-center#not-logged form { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center#not-logged table { - width: -moz-fit-content; - margin: auto; -} - -.vertical-center table { - margin-top: 3em !important; -} - -.horizontal-center { - margin: 0 auto; -} - -.form-control { - color: #0088aa; - font-weight: bold; -} - -.form-control:focus { - border-color: #0088aa; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(0, 136, 170, 0.6); -} - -input.btn { - font-weight: bold; -} - -.btn { - font-weight: bold !important; -} - -.btn-success { - background-color: #06d362 !important; - border-color: #06d362; -} - -.btn-success:hover { - background-color: #1abd61 !important; - border-color: #1abd61; -} - -.btn-info { - background-color: #0088aa !important; - border-color: #0088aa; -} - -.btn-info:hover { - background-color: #00708c !important; - border-color: #00708c; -} - -.btn-warning { - background-color: #ffcc00 !important; - border-color: #ffcc00; - color: #4d4d4d; -} - -.btn-warning:hover { - background-color: #eabb3a !important; - border-color: #eabb3a; - color: #4d4d4d; -} - -.btn-warning:active { - color: #4d4d4d; -} - -.btn-warning:focus { - color: #4d4d4d; -} - -.btn-warning:active:focus { - color: #4d4d4d; -} - -.footer { - position: absolute; - bottom: 0; - width: 100%; - height: 60px; - background-color: #4d4d4d; -} - -.footer .text-muted { - margin: 20px 0; - float: left; - color: #ccc; -} - -.openvidu-logo { - height: 35px; - float: right; - margin: 12px 0; - -webkit-transition: all 0.1s ease-in-out; - -moz-transition: all 0.1s ease-in-out; - -o-transition: all 0.1s ease-in-out; - transition: all 0.1s ease-in-out; -} - -.openvidu-logo:hover { - -webkit-filter: grayscale(0.5); - filter: grayscale(0.5); -} - -.demo-logo { - margin: 0; - height: 22px; - float: left; - padding-right: 8px; -} - -a:hover .demo-logo { - -webkit-filter: brightness(0.7); - filter: brightness(0.7); -} - -#join { - padding-top: 40px; -} - -#not-logged { - padding-top: 40px; -} - -#join-dialog h1 { - color: #4d4d4d; - font-weight: bold; - text-align: center; -} - -#join-dialog label { - color: #0088aa; -} - -#join-dialog input.btn { - margin-top: 15px; -} - -#join-dialog hr { - background: #4d4d4d; -} - -#img-div { - text-align: center; - padding-bottom: 3em; -} - -#img-div img { - height: 15%; -} - -#logged { - width: 100%; -} - -#join { - max-width: 700px; - margin: auto; - margin-top: 100px; -} - -#room-header { - margin-bottom: 20px; - height: 8%; - margin-top: 70px; -} - -#room-header form { - display: inline-block; -} - -#room-header input.btn { - float: right; - margin-top: 20px; - margin-left: 5px; -} - -#room-title { - display: inline-block; -} - -#room-header .form-control { - width: initial; - float: right; - margin: 18px 0px 0px 5px; -} - -#video-container { - width: 100%; - max-height: 42%; - display: block; - overflow: hidden; -} - -#video-container video.two { - max-width: 50%; -} - -#video-container video.three { - max-width: 33.33%; -} - -#video-container video.four { - max-width: 25%; -} - -#video-container div { - position: absolute; - display: inline-flex; - margin-left: calc(-50% + 15px); -} - -#video-container p { - display: inline-block; - background: #f8f8f8; - padding-left: 5px; - padding-right: 5px; - color: #777777; - font-weight: bold; - border-bottom-right-radius: 4px; -} - -#video-container p.userName { - float: right; - border-bottom-left-radius: 4px; - border-bottom-right-radius: 0px; - font-weight: lighter; - font-size: 12px; - background: #777777; - color: #f8f8f8; -} - -video { - width: auto; - height: auto; - max-height: 100%; - object-fit: scale-down; -} - -#room { - height: 100%; - padding-bottom: 80px; -} - -#room img { - width: 100%; - height: auto; - display: inline-block; - object-fit: contain; - vertical-align: baseline; -} - -#room #video-container img { - position: relative; - float: left; - width: 50%; - cursor: pointer; - object-fit: cover; - height: 180px; -} - -table i { - cursor: pointer; - margin-left: 1em; -} - -#tooltip-div { - text-align: left; -} - -#tooltip-div hr { - margin: 5px 0; -} - -#login-info { - text-align: right; -} - -#login-info form { - display: inline; -} - -#login-info div { - display: inline; - margin-right: 1em; -} - -#name-user { - font-weight: bold; -} - -#recording-btns { - display: inline-block; - padding-left: 15px; - padding-top: 20px; - width: 100%; - height: 40%; -} - -#recording-btns .btns { - margin-top: 10px; -} - -#recording-btns .btns .form-control { - width: initial; - display: inline; -} - -#recording-btns .btns form { - display: inline; - margin-left: 5px; -} - -#recording-btns textarea { - height: 100%; -} - -.textarea-container { - position: relative; - display: inline-block; - height: 74%; - margin-top: 20px; - resize: none; -} - -#textarea-http-container { - width: 59%; -} - -#recordings-list-container { - width: 39%; - overflow: auto; -} - -.textarea-container button { - position: absolute; - top: 1px; - right: 1px; - z-index: 1; -} - -.textarea-container span { - position: absolute; - bottom: 1px; - right: 1px; - padding: 3px; - border-bottom-right-radius: 4px; - z-index: 1; - color: #a5a5a5; - background-color: #ededee; - font-weight: 600; -} - -.textarea-container textarea { - height: 100%; - resize: none; -} - -.vertical-separator-bottom { - width: 2px; - height: 34px; - display: inline-block; - background-color: #cbcbcb; - margin: 0 8px 0 8px; - margin-bottom: -12px; -} - -.vertical-separator-top { - width: 2px; - height: 30px; - background-color: #cbcbcb; - margin: 20px 8px 0 15px; - float: right; -} - -/* xs ans md screen resolutions*/ - -@media screen and (max-width: 991px) { - #join { - padding-top: inherit; - } - - #not-logged { - padding-top: inherit; - } - - .container .navbar-header { - margin-right: 0 !important; - margin-left: 0 !important; - } - - .nav-icon { - padding: 9px 8px 9px 8px; - } - - nav i.fa { - font-size: 32px; - } - - .vertical-center { - padding-top: 10px; - } - - #img-div { - padding-bottom: 1em; - } - - #img-div img { - height: 10%; - } -} \ No newline at end of file diff --git a/advanced-features/openvidu-recording/public/styles.css b/advanced-features/openvidu-recording-node/public/styles.css similarity index 100% rename from advanced-features/openvidu-recording/public/styles.css rename to advanced-features/openvidu-recording-node/public/styles.css diff --git a/advanced-features/openvidu-recording-node/server.js b/advanced-features/openvidu-recording-node/server.js deleted file mode 100644 index 72649f84..00000000 --- a/advanced-features/openvidu-recording-node/server.js +++ /dev/null @@ -1,200 +0,0 @@ -/* CONFIGURATION */ -require('dotenv').config( - !!process.env.CONFIG ? { path: process.env.CONFIG } : {} -); -// For demo purposes we ignore self-signed certificate -process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0'; - -// Node imports -const express = require('express'); -const fs = require('fs'); -var path = require('path'); -const https = require('https'); -const bodyParser = require('body-parser'); -const AccessToken = require('livekit-server-sdk').AccessToken; -const EgressClient = require('livekit-server-sdk').EgressClient; -const cors = require('cors'); -const app = express(); - -// Environment variable: PORT where the node server is listening -const SERVER_PORT = process.env.SERVER_PORT || 5000; -// Environment variable: api key shared with our LiveKit deployment -const LIVEKIT_API_KEY = process.env.LIVEKIT_API_KEY || 'devkey'; -// Environment variable: api secret shared with our LiveKit deployment -const LIVEKIT_API_SECRET = process.env.LIVEKIT_API_SECRET || 'secret'; -// Environment variable: url of our LiveKit deployment -const LIVEKIT_URL = process.env.LIVEKIT_URL || 'ws://localhost:7880'; -// Environment variable: path where the recordings will be stored -const RECORDINGS_PATH = process.env.RECORDINGS_PATH || '/recordings'; - -// Listen (start app with node server.js) -const options = { - key: fs.readFileSync('openvidukey.pem'), - cert: fs.readFileSync('openviducert.pem'), -}; - -const livekitUrlHostname = LIVEKIT_URL.replace(/^ws:/, 'http:').replace( - /^wss:/, - 'https:' -); -const egressClient = new EgressClient( - livekitUrlHostname, - LIVEKIT_API_KEY, - LIVEKIT_API_SECRET -); - -// Enable CORS support -app.use( - cors({ - origin: '*', - }) -); - -// Set the static files location -app.use(express.static(__dirname + '/public')); -// Parse application/x-www-form-urlencoded -app.use( - bodyParser.urlencoded({ - extended: 'true', - }) -); -// Parse application/json -app.use(bodyParser.json()); - -// Parse application/vnd.api+json as json -app.use( - bodyParser.json({ - type: 'application/vnd.api+json', - }) -); - -https.createServer(options, app).listen(SERVER_PORT, () => { - console.log(`App listening on port ${SERVER_PORT}`); - console.log(`LIVEKIT API KEY: ${LIVEKIT_API_KEY}`); - console.log(`LIVEKIT API SECRET: ${LIVEKIT_API_SECRET}`); - console.log(`LIVEKIT URL: ${LIVEKIT_URL}`); - console.log(); - console.log('Access the app at https://localhost:' + SERVER_PORT); -}); - -/* Session API */ - -app.post('/token', (req, res) => { - const { roomName, participantName } = req.body; - - console.log( - `Getting a token for room '${roomName}' and participant '${participantName}'` - ); - - if (!roomName || !participantName) { - res - .status(400) - .json({ message: 'roomName and participantName are required' }); - return; - } - - const at = new AccessToken(LIVEKIT_API_KEY, LIVEKIT_API_SECRET, { - identity: participantName, - // add metadata to the token, which will be available in the participant's metadata - metadata: JSON.stringify({ livekitUrl: LIVEKIT_URL }), - }); - at.addGrant({ - roomJoin: true, - room: roomName, - }); - res.status(200).json({ token: at.toJwt() }); -}); - -/* Recording API */ - -// Start recording -app.post('/recordings/start', async function (req, res) { - const { - roomName, - outputMode, - videoOnly, - audioOnly, - audioTrackId, - videoTrackId, - } = req.body; - const output = { - fileType: 0, // file type chosen based on codecs - filepath: `/recordings/${roomName}-${new Date().getTime()}`, - disableManifest: true, - }; - console.log('Starting recording', roomName); - try { - let egressInfo; - if (outputMode === 'COMPOSED') { - console.log('Starting COMPOSED recording', roomName); - egressInfo = await egressClient.startRoomCompositeEgress( - roomName, - output, - { - layout: 'grid', - audioOnly, - videoOnly, - } - ); - } else if (outputMode === 'INDIVIDUAL') { - console.log('Starting INDIVIDUAL recording', roomName); - egressInfo = await egressClient.startTrackCompositeEgress( - roomName, - output, - { - audioTrackId, - videoTrackId, - } - ); - } else { - res.status(400).json({ message: 'outputMode is required' }); - return; - } - res.status(200).json({ message: 'recording started', info: egressInfo }); - } catch (error) { - console.log('Error starting recording', error); - res.status(200).json({ message: 'error starting recording' }); - } -}); - -// Stop recording -app.post('/recordings/stop', async function (req, res) { - const recordingId = req.body.recordingId; - try { - if (!recordingId) { - res.status(400).json({ message: 'recordingId is required' }); - return; - } - - console.log(`Stopping recording ${recordingId}`); - const egressInfo = await egressClient.stopEgress(recordingId); - res.status(200).json({ message: 'recording stopped', info: egressInfo }); - } catch (error) { - console.log('Error stopping recording', error); - res.status(200).json({ message: 'error stopping recording' }); - } -}); - -// List all recordings -app.get('/recordings/list', function (req, res) { - const recordings = []; - fs.readdirSync(RECORDINGS_PATH, { recursive: true }).forEach((value) => { - // copy file to public folder for development purposes - fs.copyFileSync(`${RECORDINGS_PATH}/${value}`, `public/${value}`); - const newRec = { name: value, path: `/${value}` }; - recordings.push(newRec); - }); - console.log(recordings); - res.status(200).json({ recordings }); -}); - -// Delete all recordings -app.delete('/recordings', function (req, res) { - fs.readdirSync(RECORDINGS_PATH, { recursive: true }).forEach((value) => { - fs.unlinkSync(`${RECORDINGS_PATH}/${value}`); - if (fs.existsSync(`public/${value}`)) { - fs.unlinkSync(`public/${value}`); - } - }); - res.status(200).json({ message: 'All recordings deleted' }); -}); diff --git a/advanced-features/openvidu-recording/.gitignore b/advanced-features/openvidu-recording/.gitignore deleted file mode 100644 index fa6a20f5..00000000 --- a/advanced-features/openvidu-recording/.gitignore +++ /dev/null @@ -1,129 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -lerna-debug.log* -.pnpm-debug.log* - -# Diagnostic reports (https://nodejs.org/api/report.html) -report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json - -# Runtime data -pids -*.pid -*.seed -*.pid.lock - -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - -# Compiled binary addons (https://nodejs.org/api/addons.html) -build/Release - -# Dependency directories -node_modules/ -jspm_packages/ - -# Snowpack dependency directory (https://snowpack.dev/) -web_modules/ - -# TypeScript cache -*.tsbuildinfo - -# Optional npm cache directory -.npm - -# Optional eslint cache -.eslintcache - -# Optional stylelint cache -.stylelintcache - -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - -# Optional REPL history -.node_repl_history - -# Output of 'npm pack' -*.tgz - -# Yarn Integrity file -.yarn-integrity - -# dotenv environment variable files -.env.development.local -.env.test.local -.env.production.local -.env.local - -# parcel-bundler cache (https://parceljs.org/) -.cache -.parcel-cache - -# Next.js build output -.next -out - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and not Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# vuepress v2.x temp and cache directory -.temp -.cache - -# Docusaurus cache and generated files -.docusaurus - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - -# Stores VSCode versions used for testing VSCode extensions -.vscode-test - -# yarn v2 -.yarn/cache -.yarn/unplugged -.yarn/build-state.yml -.yarn/install-state.gz -.pnp.* \ No newline at end of file diff --git a/advanced-features/openvidu-recording/README.md b/advanced-features/openvidu-recording/README.md deleted file mode 100644 index 88262159..00000000 --- a/advanced-features/openvidu-recording/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# OpenVidu Recording - -Simple video-call application with recording capabilities. It includes a backend built with Node.js with Express and a frontend built with plain HTML, CSS and JavaScript. - -For further information, check the [tutorial documentation](https://livekit-tutorials.openvidu.io/tutorials/advanced-tutorials/node/). - -## Prerequisites - -- [Node](https://nodejs.org/en/download) - -## Run - -1. Download repository - -```bash -git clone https://github.com/OpenVidu/openvidu-livekit-tutorials.git -cd openvidu-livekit-tutorials/advanced-features/openvidu-recording -``` - -2. Install dependencies - -```bash -npm install -``` - -3. Run the application - -```bash -npm start -``` diff --git a/advanced-features/openvidu-recording/package-lock.json b/advanced-features/openvidu-recording/package-lock.json deleted file mode 100644 index acf3868e..00000000 --- a/advanced-features/openvidu-recording/package-lock.json +++ /dev/null @@ -1,2543 +0,0 @@ -{ - "name": "openvidu-recording", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "openvidu-recording", - "version": "1.0.0", - "dependencies": { - "@aws-sdk/client-s3": "3.635.0", - "cors": "2.8.5", - "dotenv": "16.4.5", - "express": "4.19.2", - "livekit-server-sdk": "2.6.1" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", - "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/crc32c": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", - "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", - "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", - "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", - "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", - "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", - "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", - "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", - "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", - "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.635.0.tgz", - "integrity": "sha512-4RP+DJZWqUka1MW2aSEzTzntY3GrDzS26D8dHZvbt2I0x+dSmlnmXiJkCxLjmti2SDVYAGL9gX6e7mLS7W55jA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.635.0", - "@aws-sdk/client-sts": "3.635.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.635.0", - "@aws-sdk/middleware-bucket-endpoint": "3.620.0", - "@aws-sdk/middleware-expect-continue": "3.620.0", - "@aws-sdk/middleware-flexible-checksums": "3.620.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-location-constraint": "3.609.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/middleware-ssec": "3.609.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/signature-v4-multi-region": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@aws-sdk/xml-builder": "3.609.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/eventstream-serde-browser": "^3.0.6", - "@smithy/eventstream-serde-config-resolver": "^3.0.3", - "@smithy/eventstream-serde-node": "^3.0.5", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-blob-browser": "^3.1.2", - "@smithy/hash-node": "^3.0.3", - "@smithy/hash-stream-node": "^3.1.2", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/md5-js": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "@smithy/util-waiter": "^3.1.2", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.635.0.tgz", - "integrity": "sha512-/Hl69+JpFUo9JNVmh2gSvMgYkE4xjd+1okiRoPBbQqjI7YBP2JWCUDP8IoEkNq3wj0vNTq0OWfn6RpZycIkAXQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/client-sso-oidc": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.635.0.tgz", - "integrity": "sha512-RIwDlhzAFttB1vbpznewnPqz7h1H/2UhQLwB38yfZBwYQOxyxVfLV5j5VoUUX3jY4i4qH9wiHc7b02qeAOZY6g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.635.0" - } - }, - "node_modules/@aws-sdk/client-sts": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.635.0.tgz", - "integrity": "sha512-Al2ytE69+cbA44qHlelqhzWwbURikfF13Zkal9utIG5Q6T2c7r8p6sePN92n8l/x1v0FhJ5VTxKak+cPTE0CZQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/client-sso-oidc": "3.635.0", - "@aws-sdk/core": "3.635.0", - "@aws-sdk/credential-provider-node": "3.635.0", - "@aws-sdk/middleware-host-header": "3.620.0", - "@aws-sdk/middleware-logger": "3.609.0", - "@aws-sdk/middleware-recursion-detection": "3.620.0", - "@aws-sdk/middleware-user-agent": "3.632.0", - "@aws-sdk/region-config-resolver": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@aws-sdk/util-user-agent-browser": "3.609.0", - "@aws-sdk/util-user-agent-node": "3.614.0", - "@smithy/config-resolver": "^3.0.5", - "@smithy/core": "^2.4.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/hash-node": "^3.0.3", - "@smithy/invalid-dependency": "^3.0.3", - "@smithy/middleware-content-length": "^3.0.5", - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-body-length-node": "^3.0.0", - "@smithy/util-defaults-mode-browser": "^3.0.15", - "@smithy/util-defaults-mode-node": "^3.0.15", - "@smithy/util-endpoints": "^2.0.5", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.635.0.tgz", - "integrity": "sha512-i1x/E/sgA+liUE1XJ7rj1dhyXpAKO1UKFUcTTHXok2ARjWTvszHnSXMOsB77aPbmn0fUp1JTx2kHUAZ1LVt5Bg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "fast-xml-parser": "4.4.1", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.620.1.tgz", - "integrity": "sha512-ExuILJ2qLW5ZO+rgkNRj0xiAipKT16Rk77buvPP8csR7kkCflT/gXTyzRe/uzIiETTxM7tr8xuO9MP/DQXqkfg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.635.0.tgz", - "integrity": "sha512-iJyRgEjOCQlBMXqtwPLIKYc7Bsc6nqjrZybdMDenPDa+kmLg7xh8LxHsu9088e+2/wtLicE34FsJJIfzu3L82g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.635.0.tgz", - "integrity": "sha512-+OqcNhhOFFY08YHLjO9/Y1n37RKAO7LADnsJ7VTXca7IfvYh27BVBn+FdlqnyEb1MQ5ArHTY4pq3pKRIg6RW4Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.635.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.635.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.635.0.tgz", - "integrity": "sha512-bmd23mnb94S6AxmWPgqJTnvT9ONKlTx7EPafE1RNO+vUl6mHih4iyqX6ZPaRcSfaPx4U1R7H1RM8cSnafXgaBg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.620.1", - "@aws-sdk/credential-provider-http": "3.635.0", - "@aws-sdk/credential-provider-ini": "3.635.0", - "@aws-sdk/credential-provider-process": "3.620.1", - "@aws-sdk/credential-provider-sso": "3.635.0", - "@aws-sdk/credential-provider-web-identity": "3.621.0", - "@aws-sdk/types": "3.609.0", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.620.1", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.620.1.tgz", - "integrity": "sha512-hWqFMidqLAkaV9G460+1at6qa9vySbjQKKc04p59OT7lZ5cO5VH5S4aI05e+m4j364MBROjjk2ugNvfNf/8ILg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.635.0.tgz", - "integrity": "sha512-hO/fKyvUaGpK9zyvCnmJz70EputvGWDr2UTOn/RzvcR6UB4yXoFf0QcCMubEsE3v67EsAv6PadgOeJ0vz6IazA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/client-sso": "3.635.0", - "@aws-sdk/token-providers": "3.614.0", - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.621.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.621.0.tgz", - "integrity": "sha512-w7ASSyfNvcx7+bYGep3VBgC3K6vEdLmlpjT7nSIHxxQf+WSdvy+HynwJosrpZax0sK5q0D1Jpn/5q+r5lwwW6w==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sts": "^3.621.0" - } - }, - "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.620.0.tgz", - "integrity": "sha512-eGLL0W6L3HDb3OACyetZYOWpHJ+gLo0TehQKeQyy2G8vTYXqNTeqYhuI6up9HVjBzU9eQiULVQETmgQs7TFaRg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.620.0.tgz", - "integrity": "sha512-QXeRFMLfyQ31nAHLbiTLtk0oHzG9QLMaof5jIfqcUwnOkO8YnQdeqzakrg1Alpy/VQ7aqzIi8qypkBe2KXZz0A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.620.0.tgz", - "integrity": "sha512-ftz+NW7qka2sVuwnnO1IzBku5ccP+s5qZGeRTPgrKB7OzRW85gthvIo1vQR2w+OwHFk7WJbbhhWwbCbktnP4UA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-sdk/types": "3.609.0", - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.620.0.tgz", - "integrity": "sha512-VMtPEZwqYrII/oUkffYsNWY9PZ9xpNJpMgmyU0rlDQ25O1c0Hk3fJmZRe6pEkAJ0omD7kLrqGl1DUjQVxpd/Rg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.609.0.tgz", - "integrity": "sha512-xzsdoTkszGVqGVPjUmgoP7TORiByLueMHieI1fhQL888WPdqctwAx3ES6d/bA9Q/i8jnc6hs+Fjhy8UvBTkE9A==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-logger": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.609.0.tgz", - "integrity": "sha512-S62U2dy4jMDhDFDK5gZ4VxFdWzCtLzwbYyFZx2uvPYTECkepLUfzLic2BHg2Qvtu4QjX+oGE3P/7fwaGIsGNuQ==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.620.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.620.0.tgz", - "integrity": "sha512-nh91S7aGK3e/o1ck64sA/CyoFw+gAYj2BDOnoNa6ouyCrVJED96ZXWbhye/fz9SgmNUZR2g7GdVpiLpMKZoI5w==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.635.0.tgz", - "integrity": "sha512-RLdYJPEV4JL/7NBoFUs7VlP90X++5FlJdxHz0DzCjmiD3qCviKy+Cym3qg1gBgHwucs5XisuClxDrGokhAdTQw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-arn-parser": "3.568.0", - "@smithy/core": "^2.4.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-stream": "^3.1.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.609.0.tgz", - "integrity": "sha512-GZSD1s7+JswWOTamVap79QiDaIV7byJFssBW68GYjyRS5EBjNfwA/8s+6uE6g39R3ojyTbYOmvcANoZEhSULXg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.632.0.tgz", - "integrity": "sha512-yY/sFsHKwG9yzSf/DTclqWJaGPI2gPBJDCGBujSqTG1zlS7Ot4fqi91DZ6088BFWzbOorDzJFcAhAEFzc6LuQg==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@aws-sdk/util-endpoints": "3.632.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.614.0.tgz", - "integrity": "sha512-vDCeMXvic/LU0KFIUjpC3RiSTIkkvESsEfbVHiHH0YINfl8HnEqR5rj+L8+phsCeVg2+LmYwYxd5NRz4PHxt5g==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.635.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.635.0.tgz", - "integrity": "sha512-J6QY4/invOkpogCHjSaDON1hF03viPpOnsrzVuCvJMmclS/iG62R4EY0wq1alYll0YmSdmKlpJwHMWwGtqK63Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.635.0", - "@aws-sdk/types": "3.609.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/signature-v4": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.614.0.tgz", - "integrity": "sha512-okItqyY6L9IHdxqs+Z116y5/nda7rHxLvROxtAJdLavWTYDydxrZstImNgGWTeVdmc0xX2gJCI77UYUTQWnhRw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "@aws-sdk/client-sso-oidc": "^3.614.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.609.0.tgz", - "integrity": "sha512-+Tqnh9w0h2LcrUsdXyT1F8mNhXz+tVYBtP19LpeEGntmvHwa2XzvLUCWpoIAIVsHp5+HdB2X9Sn0KAtmbFXc2Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.568.0.tgz", - "integrity": "sha512-XUKJWWo+KOB7fbnPP0+g/o5Ulku/X53t7i/h+sPHr5xxYTJJ9CYnbToo95mzxe7xWvkLrsNtJ8L+MnNn9INs2w==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-endpoints": { - "version": "3.632.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.632.0.tgz", - "integrity": "sha512-LlYMU8pAbcEQphOpE6xaNLJ8kPGhklZZTVzZVpVW477NaaGgoGTMYNXTABYHcxeF5E2lLrxql9OmVpvr8GWN8Q==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "@smithy/util-endpoints": "^2.0.5", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.568.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", - "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.609.0.tgz", - "integrity": "sha512-fojPU+mNahzQ0YHYBsx0ZIhmMA96H+ZIZ665ObU9tl+SGdbLneVZVikGve+NmHTQwHzwkFsZYYnVKAkreJLAtA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.614.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.614.0.tgz", - "integrity": "sha512-15ElZT88peoHnq5TEoEtZwoXTXRxNrk60TZNdpl/TUBJ5oNJ9Dqb5Z4ryb8ofN6nm9aFf59GVAerFDz8iUoHBA==", - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "3.609.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "aws-crt": ">=1.0.0" - }, - "peerDependenciesMeta": { - "aws-crt": { - "optional": true - } - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.609.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.609.0.tgz", - "integrity": "sha512-l9XxNcA4HX98rwCC2/KoiWcmEiRfZe4G+mYwDbCFT87JIMj6GBhLDkAzr/W8KAaA2IDr8Vc6J8fZPgVulxxfMA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@bufbuild/protobuf": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-1.10.0.tgz", - "integrity": "sha512-QDdVFLoN93Zjg36NoQPZfsVH9tZew7wKDKyV5qRdj8ntT4wQCOradQjRaTdwMhWUYsgKsvCINKKm87FdEk96Ag==", - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/@livekit/protocol": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@livekit/protocol/-/protocol-1.20.0.tgz", - "integrity": "sha512-2RJQwzBa+MfUoy0zBWuyj8S2MTBxeTgREeG0r/1bNmkAFiBhsdgr87gIvblyqJxffUxJpALMu1Ee0M1XHX+9Ug==", - "license": "Apache-2.0", - "dependencies": { - "@bufbuild/protobuf": "^1.7.2" - } - }, - "node_modules/@smithy/abort-controller": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.1.tgz", - "integrity": "sha512-MBJBiidoe+0cTFhyxT8g+9g7CeVccLM0IOKKUMCNQ1CNMJ/eIfoo0RTfVrXOONEI1UCN1W+zkiHSbzUNE9dZtQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/chunked-blob-reader": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-3.0.0.tgz", - "integrity": "sha512-sbnURCwjF0gSToGlsBiAmd1lRCmSn72nu9axfJu5lIx6RUEgHu6GwTMbqCdhQSi0Pumcm5vFxsi9XWXb2mTaoA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/chunked-blob-reader-native": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-3.0.0.tgz", - "integrity": "sha512-VDkpCYW+peSuM4zJip5WDfqvg2Mo/e8yxOv3VF1m11y7B8KKMKVFtmZWDe36Fvk8rGuWrPZHHXZ7rR7uM5yWyg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/config-resolver": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.5.tgz", - "integrity": "sha512-SkW5LxfkSI1bUC74OtfBbdz+grQXYiPYolyu8VfpLIjEoN/sHVBlLeGXMQ1vX4ejkgfv6sxVbQJ32yF2cl1veA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-config-provider": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/core": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.0.tgz", - "integrity": "sha512-cHXq+FneIF/KJbt4q4pjN186+Jf4ZB0ZOqEaZMBhT79srEyGDDBV31NqBRBjazz8ppQ1bJbDJMY9ba5wKFV36w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-retry": "^3.0.15", - "@smithy/middleware-serde": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-body-length-browser": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.0.tgz", - "integrity": "sha512-0SCIzgd8LYZ9EJxUjLXBmEKSZR/P/w6l7Rz/pab9culE/RWuqelAKGJvn5qUOl8BgX8Yj5HWM50A5hiB/RzsgA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-codec": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-3.1.2.tgz", - "integrity": "sha512-0mBcu49JWt4MXhrhRAlxASNy0IjDRFU+aWNDRal9OtUJvJNiwDuyKMUONSOjLjSCeGwZaE0wOErdqULer8r7yw==", - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/eventstream-serde-browser": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-3.0.6.tgz", - "integrity": "sha512-2hM54UWQUOrki4BtsUI1WzmD13/SeaqT/AB3EUJKbcver/WgKNaiJ5y5F5XXuVe6UekffVzuUDrBZVAA3AWRpQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-3.0.3.tgz", - "integrity": "sha512-NVTYjOuYpGfrN/VbRQgn31x73KDLfCXCsFdad8DiIc3IcdxL+dYA9zEQPyOP7Fy2QL8CPy2WE4WCUD+ZsLNfaQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-node": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-3.0.5.tgz", - "integrity": "sha512-+upXvnHNyZP095s11jF5dhGw/Ihzqwl5G+/KtMnoQOpdfC3B5HYCcDVG9EmgkhJMXJlM64PyN5gjJl0uXFQehQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-serde-universal": "^3.0.5", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/eventstream-serde-universal": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-3.0.5.tgz", - "integrity": "sha512-5u/nXbyoh1s4QxrvNre9V6vfyoLWuiVvvd5TlZjGThIikc3G+uNiG9uOTCWweSRjv1asdDIWK7nOmN7le4RYHQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/eventstream-codec": "^3.1.2", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.4.tgz", - "integrity": "sha512-kBprh5Gs5h7ug4nBWZi1FZthdqSM+T7zMmsZxx0IBvWUn7dK3diz2SHn7Bs4dQGFDk8plDv375gzenDoNwrXjg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-blob-browser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-3.1.2.tgz", - "integrity": "sha512-hAbfqN2UbISltakCC2TP0kx4LqXBttEv2MqSPE98gVuDFMf05lU+TpC41QtqGP3Ff5A3GwZMPfKnEy0VmEUpmg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/chunked-blob-reader": "^3.0.0", - "@smithy/chunked-blob-reader-native": "^3.0.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/hash-node": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.3.tgz", - "integrity": "sha512-2ctBXpPMG+B3BtWSGNnKELJ7SH9e4TNefJS0cd2eSkOOROeBnnVBnAy9LtJ8tY4vUEoe55N4CNPxzbWvR39iBw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/hash-stream-node": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-3.1.2.tgz", - "integrity": "sha512-PBgDMeEdDzi6JxKwbfBtwQG9eT9cVwsf0dZzLXoJF4sHKHs5HEo/3lJWpn6jibfJwT34I1EBXpBnZE8AxAft6g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/invalid-dependency": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.3.tgz", - "integrity": "sha512-ID1eL/zpDULmHJbflb864k72/SNOZCADRc9i7Exq3RUNJw6raWUSlFEQ+3PX3EYs++bTxZB2dE9mEHTQLv61tw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", - "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/md5-js": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-3.0.3.tgz", - "integrity": "sha512-O/SAkGVwpWmelpj/8yDtsaVe6sINHLB1q8YE/+ZQbDxIw3SRLbTZuRaI10K12sVoENdnHqzPp5i3/H+BcZ3m3Q==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/middleware-content-length": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.5.tgz", - "integrity": "sha512-ILEzC2eyxx6ncej3zZSwMpB5RJ0zuqH7eMptxC4KN3f+v9bqT8ohssKbhNR78k/2tWW+KS5Spw+tbPF4Ejyqvw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-endpoint": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.0.tgz", - "integrity": "sha512-5y5aiKCEwg9TDPB4yFE7H6tYvGFf1OJHNczeY10/EFF8Ir8jZbNntQJxMWNfeQjC1mxPsaQ6mR9cvQbf+0YeMw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-serde": "^3.0.3", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/url-parser": "^3.0.3", - "@smithy/util-middleware": "^3.0.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-retry": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.15.tgz", - "integrity": "sha512-iTMedvNt1ApdvkaoE8aSDuwaoc+BhvHqttbA/FO4Ty+y/S5hW6Ci/CTScG7vam4RYJWZxdTElc3MEfHRVH6cgQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/protocol-http": "^4.1.0", - "@smithy/service-error-classification": "^3.0.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-retry": "^3.0.3", - "tslib": "^2.6.2", - "uuid": "^9.0.1" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-serde": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.3.tgz", - "integrity": "sha512-puUbyJQBcg9eSErFXjKNiGILJGtiqmuuNKEYNYfUD57fUl4i9+mfmThtQhvFXU0hCVG0iEJhvQUipUf+/SsFdA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/middleware-stack": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.3.tgz", - "integrity": "sha512-r4klY9nFudB0r9UdSMaGSyjyQK5adUyPnQN/ZM6M75phTxOdnc/AhpvGD1fQUvgmqjQEBGCwpnPbDm8pH5PapA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-config-provider": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.4.tgz", - "integrity": "sha512-YvnElQy8HR4vDcAjoy7Xkx9YT8xZP4cBXcbJSgm/kxmiQu08DwUwj8rkGnyoJTpfl/3xYHH+d8zE+eHqoDCSdQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/shared-ini-file-loader": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.1.4.tgz", - "integrity": "sha512-+UmxgixgOr/yLsUxcEKGH0fMNVteJFGkmRltYFHnBMlogyFdpzn2CwqWmxOrfJELhV34v0WSlaqG1UtE1uXlJg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/protocol-http": "^4.1.0", - "@smithy/querystring-builder": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/property-provider": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.3.tgz", - "integrity": "sha512-zahyOVR9Q4PEoguJ/NrFP4O7SMAfYO1HLhB18M+q+Z4KFd4V2obiMnlVoUFzFLSPeVt1POyNWneHHrZaTMoc/g==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/protocol-http": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.0.tgz", - "integrity": "sha512-dPVoHYQ2wcHooGXg3LQisa1hH0e4y0pAddPMeeUPipI1tEOqL6A4N0/G7abeq+K8wrwSgjk4C0wnD1XZpJm5aA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-builder": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.3.tgz", - "integrity": "sha512-vyWckeUeesFKzCDaRwWLUA1Xym9McaA6XpFfAK5qI9DKJ4M33ooQGqvM4J+LalH4u/Dq9nFiC8U6Qn1qi0+9zw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "@smithy/util-uri-escape": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/querystring-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.3.tgz", - "integrity": "sha512-zahM1lQv2YjmznnfQsWbYojFe55l0SLG/988brlLv1i8z3dubloLF+75ATRsqPBboUXsW6I9CPGE5rQgLfY0vQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/service-error-classification": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.3.tgz", - "integrity": "sha512-Jn39sSl8cim/VlkLsUhRFq/dKDnRUFlfRkvhOJaUbLBXUsLRLNf9WaxDv/z9BjuQ3A6k/qE8af1lsqcwm7+DaQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/shared-ini-file-loader": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.4.tgz", - "integrity": "sha512-qMxS4hBGB8FY2GQqshcRUy1K6k8aBWP5vwm8qKkCT3A9K2dawUwOIJfqh9Yste/Bl0J2lzosVyrXDj68kLcHXQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.0.tgz", - "integrity": "sha512-aRryp2XNZeRcOtuJoxjydO6QTaVhxx/vjaR+gx7ZjaFgrgPRyZ3HCTbfwqYj6ZWEBHkCSUfcaymKPURaByukag==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-middleware": "^3.0.3", - "@smithy/util-uri-escape": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/smithy-client": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.2.0.tgz", - "integrity": "sha512-pDbtxs8WOhJLJSeaF/eAbPgXg4VVYFlRcL/zoNYA5WbG3wBL06CHtBSg53ppkttDpAJ/hdiede+xApip1CwSLw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/middleware-endpoint": "^3.1.0", - "@smithy/middleware-stack": "^3.0.3", - "@smithy/protocol-http": "^4.1.0", - "@smithy/types": "^3.3.0", - "@smithy/util-stream": "^3.1.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.3.0.tgz", - "integrity": "sha512-IxvBBCTFDHbVoK7zIxqA1ZOdc4QfM5HM7rGleCuHi7L1wnKv5Pn69xXJQ9hgxH60ZVygH9/JG0jRgtUncE3QUA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/url-parser": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.3.tgz", - "integrity": "sha512-pw3VtZtX2rg+s6HMs6/+u9+hu6oY6U7IohGhVNnjbgKy86wcIsSZwgHrFR+t67Uyxvp4Xz3p3kGXXIpTNisq8A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/querystring-parser": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-base64": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", - "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-body-length-browser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", - "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@smithy/util-body-length-node": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", - "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", - "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-config-provider": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", - "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.15.tgz", - "integrity": "sha512-FZ4Psa3vjp8kOXcd3HJOiDPBCWtiilLl57r0cnNtq/Ga9RSDrM5ERL6xt+tO43+2af6Pn5Yp92x2n5vPuduNfg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.15.tgz", - "integrity": "sha512-KSyAAx2q6d0t6f/S4XB2+3+6aQacm3aLMhs9aLMqn18uYGUepbdssfogW5JQZpc6lXNBnp0tEnR5e9CEKmEd7A==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/config-resolver": "^3.0.5", - "@smithy/credential-provider-imds": "^3.2.0", - "@smithy/node-config-provider": "^3.1.4", - "@smithy/property-provider": "^3.1.3", - "@smithy/smithy-client": "^3.2.0", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@smithy/util-endpoints": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.0.5.tgz", - "integrity": "sha512-ReQP0BWihIE68OAblC/WQmDD40Gx+QY1Ez8mTdFMXpmjfxSyz2fVQu3A4zXRfQU9sZXtewk3GmhfOHswvX+eNg==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/node-config-provider": "^3.1.4", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-hex-encoding": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", - "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-middleware": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.3.tgz", - "integrity": "sha512-l+StyYYK/eO3DlVPbU+4Bi06Jjal+PFLSMmlWM1BEwyLxZ3aKkf1ROnoIakfaA7mC6uw3ny7JBkau4Yc+5zfWw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-retry": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.3.tgz", - "integrity": "sha512-AFw+hjpbtVApzpNDhbjNG5NA3kyoMs7vx0gsgmlJF4s+yz1Zlepde7J58zpIRIsdjc+emhpAITxA88qLkPF26w==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/service-error-classification": "^3.0.3", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-stream": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.3.tgz", - "integrity": "sha512-FIv/bRhIlAxC0U7xM1BCnF2aDRPq0UaelqBHkM2lsCp26mcBbgI0tCVTv+jGdsQLUmAMybua/bjDsSu8RQHbmw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/fetch-http-handler": "^3.2.4", - "@smithy/node-http-handler": "^3.1.4", - "@smithy/types": "^3.3.0", - "@smithy/util-base64": "^3.0.0", - "@smithy/util-buffer-from": "^3.0.0", - "@smithy/util-hex-encoding": "^3.0.0", - "@smithy/util-utf8": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-uri-escape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", - "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", - "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^3.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@smithy/util-waiter": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-3.1.2.tgz", - "integrity": "sha512-4pP0EV3iTsexDx+8PPGAKCQpd/6hsQBaQhqWzU4hqKPHN5epPsxKbvUTIiYIHTxaKt6/kEaqPBpu/ufvfbrRzw==", - "license": "Apache-2.0", - "dependencies": { - "@smithy/abort-controller": "^3.1.1", - "@smithy/types": "^3.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/bowser": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", - "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", - "integrity": "sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==", - "license": "MIT", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-9.1.3.tgz", - "integrity": "sha512-Rircqi9ch8AnZscQcsA1C47NFdaO3wukpmIRzYcDOrmvgt78hM/sj5pZhZNec2NM12uk5vTwRHZ4anGcrC4ZTg==", - "license": "MIT", - "dependencies": { - "camelcase": "^8.0.0", - "map-obj": "5.0.0", - "quick-lru": "^6.1.1", - "type-fest": "^4.3.2" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "license": "MIT", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", - "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - }, - { - "type": "paypal", - "url": "https://paypal.me/naturalintelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/jose": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.7.0.tgz", - "integrity": "sha512-3P9qfTYDVnNn642LCAqIKbTGb9a1TBxZ9ti5zEVEr48aDdflgRjhspWFb6WM4PzAfFbGMJYC4+803v8riCRAKw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/panva" - } - }, - "node_modules/livekit-server-sdk": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/livekit-server-sdk/-/livekit-server-sdk-2.6.1.tgz", - "integrity": "sha512-j/8TOlahIyWnycNkuSzTv6q+win4JTbDGNH48iMsZDMnJBks9hhC9UwAO4ES42sAorIAxGkrH58hxt4KdTkZaQ==", - "license": "Apache-2.0", - "dependencies": { - "@livekit/protocol": "^1.19.0", - "camelcase-keys": "^9.0.0", - "jose": "^5.1.2" - }, - "engines": { - "node": ">=19" - } - }, - "node_modules/map-obj": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-5.0.0.tgz", - "integrity": "sha512-2L3MIgJynYrZ3TYMriLDLWocz15okFakV6J12HXvMXDHui2x/zgChzg1u9mFFGbbGWE+GsLpQByt4POb9Or+uA==", - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "license": "MIT" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/quick-lru": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-6.1.2.tgz", - "integrity": "sha512-AAFUA5O1d83pIHEhJwWCq/RQcRukCkn/NSm2QsTEMle5f2hP0ChI2+3Xb051PZCkLryI/Ir1MVKviT2FIloaTQ==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/strnum": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", - "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", - "license": "MIT" - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "4.25.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.25.0.tgz", - "integrity": "sha512-bRkIGlXsnGBRBQRAY56UXBm//9qH4bmJfFvq83gSz41N282df+fjy8ofcEgc1sM8geNt5cl6mC2g9Fht1cs8Aw==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - } - } -} diff --git a/advanced-features/openvidu-recording/package.json b/advanced-features/openvidu-recording/package.json deleted file mode 100644 index 1d48a6c7..00000000 --- a/advanced-features/openvidu-recording/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "openvidu-recording", - "version": "1.0.0", - "description": "Simple video-call application with recording capabilities", - "main": "index.js", - "type": "module", - "scripts": { - "start": "node index.js" - }, - "dependencies": { - "@aws-sdk/client-s3": "3.635.0", - "cors": "2.8.5", - "dotenv": "16.4.5", - "express": "4.19.2", - "livekit-server-sdk": "2.6.1" - } -} diff --git a/advanced-features/openvidu-recording/public/app.js b/advanced-features/openvidu-recording/public/app.js deleted file mode 100644 index 53ac8256..00000000 --- a/advanced-features/openvidu-recording/public/app.js +++ /dev/null @@ -1,381 +0,0 @@ -// When running OpenVidu locally, leave this variable empty -// For other deployment type, configure it with correct URL depending on your deployment -var LIVEKIT_URL = ""; -configureLiveKitUrl(); - -const LivekitClient = window.LivekitClient; -var room; - -function configureLiveKitUrl() { - // If LIVEKIT_URL is not configured, use default value from OpenVidu Local deployment - if (!LIVEKIT_URL) { - if (window.location.hostname === "localhost") { - LIVEKIT_URL = "ws://localhost:7880/"; - } else { - LIVEKIT_URL = "wss://" + window.location.hostname + ":7443/"; - } - } -} - -async function joinRoom() { - // Disable 'Join' button - document.getElementById("join-button").disabled = true; - document.getElementById("join-button").innerText = "Joining..."; - - // Initialize a new Room object - room = new LivekitClient.Room(); - - // Specify the actions when events take place in the room - // On every new Track received... - room.on(LivekitClient.RoomEvent.TrackSubscribed, (track, _publication, participant) => { - addTrack(track, participant.identity); - }); - - // On every new Track destroyed... - room.on(LivekitClient.RoomEvent.TrackUnsubscribed, (track, _publication, participant) => { - track.detach(); - document.getElementById(track.sid)?.remove(); - - if (track.kind === "video") { - removeVideoContainer(participant.identity); - } - }); - - room.on(LivekitClient.RoomEvent.RecordingStatusChanged, async (isRecording) => { - await updateRecordingInfo(isRecording); - }); - - try { - // Get the room name and participant name from the form - const roomName = document.getElementById("room-name").value; - const userName = document.getElementById("participant-name").value; - - // Get a token from your application server with the room name and participant name - const token = await getToken(roomName, userName); - - // Connect to the room with the LiveKit URL and the token - await room.connect(LIVEKIT_URL, token); - - // Hide the 'Join room' page and show the 'Room' page - document.getElementById("room-title").innerText = roomName; - document.getElementById("join").hidden = true; - document.getElementById("room").hidden = false; - - // Publish your camera and microphone - await room.localParticipant.enableCameraAndMicrophone(); - const localVideoTrack = this.room.localParticipant.videoTrackPublications.values().next().value.track; - addTrack(localVideoTrack, userName, true); - } catch (error) { - console.log("There was an error connecting to the room:", error.message); - await leaveRoom(); - } -} - -function addTrack(track, participantIdentity, local = false) { - const element = track.attach(); - element.id = track.sid; - - /* If the track is a video track, we create a container and append the video element to it - with the participant's identity */ - if (track.kind === "video") { - const videoContainer = createVideoContainer(participantIdentity, local); - videoContainer.append(element); - appendParticipantData(videoContainer, participantIdentity + (local ? " (You)" : "")); - } else { - document.getElementById("layout-container").append(element); - } -} - -async function leaveRoom() { - // Leave the room by calling 'disconnect' method over the Room object - await room.disconnect(); - - // Remove all HTML elements inside the layout container - removeAllLayoutElements(); - - // Back to 'Join room' page - document.getElementById("join").hidden = false; - document.getElementById("room").hidden = true; - - // Enable 'Join' button - document.getElementById("join-button").disabled = false; - document.getElementById("join-button").innerText = "Join!"; -} - -window.onbeforeunload = () => { - room?.disconnect(); -}; - -window.onload = generateFormValues; - -function generateFormValues() { - document.getElementById("room-name").value = "Test Room"; - document.getElementById("participant-name").value = "Participant" + Math.floor(Math.random() * 100); -} - -function createVideoContainer(participantIdentity, local = false) { - const videoContainer = document.createElement("div"); - videoContainer.id = `camera-${participantIdentity}`; - videoContainer.className = "video-container"; - const layoutContainer = document.getElementById("layout-container"); - - if (local) { - layoutContainer.prepend(videoContainer); - } else { - layoutContainer.append(videoContainer); - } - - return videoContainer; -} - -function appendParticipantData(videoContainer, participantIdentity) { - const dataElement = document.createElement("div"); - dataElement.className = "participant-data"; - dataElement.innerHTML = `

${participantIdentity}

`; - videoContainer.prepend(dataElement); -} - -function removeVideoContainer(participantIdentity) { - const videoContainer = document.getElementById(`camera-${participantIdentity}`); - videoContainer?.remove(); -} - -function removeAllLayoutElements() { - const layoutElements = document.getElementById("layout-container").children; - Array.from(layoutElements).forEach((element) => { - element.remove(); - }); -} - -/** - * -------------------------------------------- - * GETTING A TOKEN FROM YOUR APPLICATION SERVER - * -------------------------------------------- - * The method below request the creation of a token to - * your application server. This prevents the need to expose - * your LiveKit API key and secret to the client side. - * - * In this sample code, there is no user control at all. Anybody could - * access your application server endpoints. In a real production - * environment, your application server must identify the user to allow - * access to the endpoints. - */ -async function getToken(roomName, participantName) { - const response = await fetch("/token", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - roomName, - participantName - }) - }); - - if (!response.ok) { - const error = await response.json(); - throw new Error(`Failed to get token: ${error.errorMessage}`); - } - - const token = await response.json(); - return token.token; -} - -async function openRecordingsDialog() { - const recordingsDialog = document.getElementById("recordings-dialog"); - recordingsDialog.showModal(); - await updateRecordingInfo(room.isRecording); -} - -function closeRecordingsDialog() { - const recordingsDialog = document.getElementById("recordings-dialog"); - recordingsDialog.close(); -} - -document.addEventListener("DOMContentLoaded", () => { - document.getElementById("recordings-dialog").addEventListener("close", () => { - const recordingVideo = document.getElementById("recording-video"); - - if (recordingVideo) { - recordingVideo.remove(); - } - }); -}); - -async function updateRecordingInfo(isRecording) { - const recordingButton = document.getElementById("recording-button"); - const recordingText = document.getElementById("recording-text"); - - if (isRecording) { - recordingButton.disabled = false; - recordingButton.innerText = "Stop Recording"; - recordingButton.className = "btn btn-danger"; - recordingText.hidden = false; - } else { - recordingButton.disabled = false; - recordingButton.innerText = "Start Recording"; - recordingButton.className = "btn btn-primary"; - recordingText.hidden = true; - } - - await listRecordings(); -} - -async function manageRecording() { - const recordingButton = document.getElementById("recording-button"); - - if (recordingButton.innerText === "Start Recording") { - recordingButton.disabled = true; - recordingButton.innerText = "Starting..."; - await startRecording(); - } else { - recordingButton.disabled = true; - recordingButton.innerText = "Stopping..."; - await stopRecording(); - } -} - -async function startRecording() { - const response = await fetch("/recordings/start", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - roomName: room.name - }) - }); - - if (!response.ok) { - const error = await response.json(); - console.error(error.errorMessage); - return; - } -} - -async function stopRecording() { - const response = await fetch("/recordings/stop", { - method: "POST", - headers: { - "Content-Type": "application/json" - }, - body: JSON.stringify({ - roomName: room.name - }) - }); - - if (!response.ok) { - const error = await response.json(); - console.error(error.errorMessage); - return; - } -} - -async function deleteRecording(recordingName) { - const response = await fetch(`/recordings/${recordingName}`, { - method: "DELETE" - }); - - if (!response.ok) { - const error = await response.json(); - console.error(error.errorMessage); - return; - } - - await listRecordings(); -} - -async function listRecordings() { - const response = await fetch(`/recordings?roomName=${room.name}`); - - if (!response.ok) { - const error = await response.json(); - console.error(error.errorMessage); - return; - } - - const body = await response.json(); - const recordings = body.recordings; - - showRecordingList(recordings); -} - -function showRecordingList(recordings) { - const recordingsList = document.getElementById("recording-list"); - - if (recordings.length === 0) { - recordingsList.innerHTML = "There are no recordings available"; - } else { - recordingsList.innerHTML = ""; - } - - recordings.forEach((recording) => { - const recordingName = recording.name; - const recordingDuration = secondsToHms(recording.duration); - const recordingSize = formatBytes(recording.size); - const recordingDate = new Date(recording.startedAt).toLocaleString(); - - const recordingContainer = document.createElement("div"); - recordingContainer.className = "recording-container"; - recordingContainer.id = recordingName; - - recordingContainer.innerHTML = ` - -
-

${recordingName}

-

${recordingDuration} | ${recordingSize}

-

${recordingDate}

-
-
- - -
- `; - - recordingsList.append(recordingContainer); - }); -} - -function displayRecording(recordingName) { - const recordingContainer = document.getElementById("recording-video-container"); - let recordingVideo = document.getElementById("recording-video"); - - if (!recordingVideo) { - recordingVideo = document.createElement("video"); - recordingVideo.id = "recording-video"; - recordingVideo.width = 600; - recordingVideo.controls = true; - recordingVideo.autoplay = true; - recordingContainer.append(recordingVideo); - } - - recordingVideo.src = `/recordings/${recordingName}`; -} - -function secondsToHms(seconds) { - const h = Math.floor(seconds / 3600); - const m = Math.floor((seconds % 3600) / 60); - const s = Math.floor((seconds % 3600) % 60); - - const hDisplay = h > 0 ? h + "h " : ""; - const mDisplay = m > 0 ? m + "m " : ""; - const sDisplay = s + "s"; - return hDisplay + mDisplay + sDisplay; -} - -function formatBytes(bytes) { - if (bytes === 0) { - return "0Bytes"; - } - - const k = 1024; - const sizes = ["Bytes", "KB", "MB", "GB"]; - const i = Math.floor(Math.log(bytes) / Math.log(k)); - const decimals = i < 2 ? 0 : 1; - - return (bytes / Math.pow(k, i)).toFixed(decimals) + sizes[i]; -} diff --git a/advanced-features/openvidu-recording/public/images/favicon.ico b/advanced-features/openvidu-recording/public/images/favicon.ico deleted file mode 100644 index 0e2249ada68ec5cab2034721dc193285c27175b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5430 zcmc&&eN2^Q6o2ox;0z74F{f9TU#+!9X2#sY&6#cG+%jk7$GvdHRGeG+hii#qr9`BK zC}qeHvGgi7)2x{@AZJeQ2i$vM6vot;IU_|SM7+HB^gGY{zHsji5d!CRKhN_%yyy9y z=RD^*=iDnvI!P}LA1>iDPFi7n3LB+bNp^oNLalA8=H z`-6iYNhVd-0{wN8JM*q}0bsYHpWyM3&HpH+LU-f&>6Fv>650J0N)zjuDZSc6C3#&o z_*8vxN9x<4|6}uZ>X2_!&8_cgL&Ni8P1fJjXZ?H%g+e5UI_YNcD%N;b@b^{!L~|as zb>5(}El$d8mIy_@DizA(Ef{Umop0o%=3L z^zNk@HLHP)NK~()6z}r(9R;IG5d)tho~Gi=Phk!9{FF1`IJgHmKAUu|POBE<&`n0{ z`~Z38{s^(X>5?n*o?(vf0mpJ*5OLQf2{sP^oM*-XGXX8nWQp8_iLj5h--j)QuU!4l zcm1^+@nJ!H#Q|OZ7U$!lB*+;+9Dv+6c(yQ?ig?KRuwfJA2(}$O93#xR6=(vGv*`&y z~xQi3P znSt>+$PP%p-|K*(fL5#6->6em58#f9dwT`8?80~sWW3~-#d&2N8zSU^9Ld0NMuE9` zU0^h@05}9(1DKb=<5>W|Bh~^3^C#l|mcS33GlBq1_=8XjLYX?ZoD}Q18pHgh+Z66- ze$}R7*k=mX&IQf`8gEb?pMo3@gvTHA^LejSIn_MHHi(?nVsPI+KE`|0k$G@(@{ufk za@hw`GHPh@;V|Gi<mXv<+e z?JUxZx*lZ%pG7N>0j{Tk)4)w2h#25=kKmu+-A8Zu9~bq?9x%)HTCzBv z<}(v)1WdH7#zYzCO!UcqJ;5j8e$dXO7+miGTFj}u8oyGnCVO|&BL7&yuk%i zsKG{Z1cr3|jsG4FTb-HKRv4)`Ul+lTz4KX=g1b=NZ`i&g`KPG-4s~s=+cv*}R@5fY z^4bx!s75b1H9NxVI(!8m80m{I2Zui`V8NdClu`E>xo&(z{#z#~@8WCVA4-dTdicT8 z z^&i{7;OFL!i&WH<-o?MF$|U?hxcu7wWwjTU;e#OEk^iAfw|%th58DIf&uq~6m3`ll z+vv~sU(ws|L~J~V80GI655oUS{H_4L!-1#x4w~zmNelgx=yl(OK4W2E0;N`2gZaB-FQW#Z2Y(}YtARXVOz-?$ zhq`ST!m( zi)i-rQ~rkcXLa|*I`Mr#?Y$f-H}m%b?o0kRPC_@yT2a&0b85DL6Me7fyL#Eb=7)Yt z<+qnctna`%57RiqCFc1ItiTf3xEV5c5b-Y7nuT@a!Z~{y<30WkGz^lziwzJVMc>6e TedKQfJ#jzGxv-xC9?I}vocwV} diff --git a/advanced-features/openvidu-recording/public/index.html b/advanced-features/openvidu-recording/public/index.html deleted file mode 100644 index 659565d4..00000000 --- a/advanced-features/openvidu-recording/public/index.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - OpenVidu Recording - - - - - - - - - - - - - - - - - -
-

OpenVidu Recording

- -
- -
-
-
-

Join a Video Room

-
-
- - -
-
- - -
- -
-
-
- - -
- - - -