From 547817936772399d4e9d71b132ba07f39e4dab6b Mon Sep 17 00:00:00 2001 From: Chris <182387676+whoopsi-daisy@users.noreply.github.com> Date: Thu, 9 Oct 2025 21:22:51 +0200 Subject: [PATCH 01/22] Get it on Github button Button to replace text string "Or download the APKs here on GitHub for Android --- assets/Download_on_Github_.png | Bin 0 -> 9757 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/Download_on_Github_.png diff --git a/assets/Download_on_Github_.png b/assets/Download_on_Github_.png new file mode 100644 index 0000000000000000000000000000000000000000..0782922121fe8eec76c6be3634962f8c667401d2 GIT binary patch literal 9757 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 Date: Thu, 9 Oct 2025 21:51:02 +0200 Subject: [PATCH 02/22] docs: improve README.md - Rename Jellyseer to Seerr - Remove dots from feature list - Add download button linking to GitHub - Refine phrasing in Contributing section - Correct grammar and spelling errors --- README.md | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 6b10ae0a..e16dcd73 100644 --- a/README.md +++ b/README.md @@ -23,20 +23,20 @@ ## 🌟 Features - πŸš€ **Skip Intro / Credits Support** -- πŸ–ΌοΈ **Trickplay images**: The new golden standard for chapter previews when seeking. -- πŸ“₯ **Download media** (Experimental): Save your media locally and watch it offline. -- πŸ“‘ **Chromecast** (Experimental): Cast your media to any Chromecast-enabled device. -- πŸ“‘ **Settings management** (Experimental): Manage app settings for all your users with a JF plugin. -- πŸ€– **Jellyseerr integration**: Request media directly in the app. -- πŸ‘οΈ **Sessions View:** View all active sessions currently streaming on your server. +- πŸ–ΌοΈ **Trickplay images**: The new golden standard for chapter previews when seeking +- πŸ“₯ **Download media** (Experimental): Save your media locally and watch it offline +- πŸ“‘ **Chromecast** (Experimental): Cast your media to any Chromecast-enabled device +- πŸ“‘ **Settings management** (Experimental): Manage app settings for all your users with a JF plugin +- πŸ€– **Seerr (former Jellyseerr) integration**: Request media directly in the app +- πŸ‘οΈ **Sessions View:** View all active sessions currently streaming on your server ## πŸ§ͺ Experimental Features -Streamyfin includes some exciting experimental features like media downloading and Chromecast support. These features are still in development, and your patience and feedback are much appreciated as we work to improve them. +Streamyfin offers exciting experimental features such as media downloading and Chromecast support. These features are under active development, and your feedback and patience help us make them even better. ### πŸ“₯ Downloading -Downloading works by using ffmpeg to convert an HLS stream into a video file on the device. This means that you can download and view any file you can stream! The file is converted by Jellyfin on the server in real time as it is downloaded. This means a **bit longer download times** but supports any file that your server can transcode. +Downloading works by using ffmpeg to convert an HLS stream into a video file on your device. This allows you to download and watch any content that you can stream. The file is converted by Jellyfin on the server in real time during the download. This may result in slightly longer download times, but it ensures compatibility with any file your server can transcode. ### πŸŽ₯ Chromecast @@ -46,7 +46,7 @@ Chromecast support is still in development, and we're working on improving it. C The Jellyfin Plugin for Streamyfin is a plugin you install into Jellyfin that holds all settings for the client Streamyfin. This allows you to synchronize settings across all your users, like for example: -- Auto log in to Jellyseerr without the user having to do anything +- Auto log in to Seerr without the user having to do anything - Choose the default languages - Set download method and search provider - Customize home screen @@ -64,15 +64,14 @@ The Jellyfin Plugin for Streamyfin is a plugin you install into Jellyfin that ho Check out our [Roadmap](https://github.com/users/fredrikburmester/projects/5) To see what we're working on next, we are always open to feedback and suggestions. Please let us know if you have any ideas or feature requests. -## πŸ“₯ Get it now +## πŸ“₯ Download Streamyfin
Get Streamyfin on App Store - Get the beta on Google Play + Get Streamyfin on Google Play Store + Get Streamyfin on Github
-Or download the APKs [here on GitHub](https://github.com/streamyfin/streamyfin/releases) for Android. - ### πŸ§ͺ Beta testing To access the Streamyfin beta, you need to subscribe to the Member tier (or higher) on [Patreon](https://www.patreon.com/streamyfin). This will give you immediate access to the ⁠πŸ§ͺ-public-beta channel on Discord and I'll know that you have subscribed. This is where I post APKs and IPAs. This won't give automatic access to the TestFlight, however, so you need to send me a DM with the email you use for Apple so that I can manually add you. @@ -88,7 +87,7 @@ To access the Streamyfin beta, you need to subscribe to the Member tier (or high ## πŸ™Œ Contributing -We welcome any help to make Streamyfin better. If you'd like to contribute, please fork the repository and submit a pull request. For major changes, it's best to open an issue first to discuss your ideas. +We appreciate all contributions that help make Streamyfin better. To get started, fork the repository and submit a pull request. For significant changes or new features, open an issue first to discuss your ideas and ensure alignment with the project. ### πŸ‘¨β€πŸ’» Development info @@ -124,7 +123,7 @@ Join our Discord: [![](https://dcbadge.limes.pink/api/server/https://discord.gg/ Need support or have questions: -- GitHub Issues: Report bugs or request features here. +- GitHub Issues: Report bugs or request features [here](https://github.com/streamyfin/streamyfin/issues) - Email: [developer@streamyfin.app](mailto:developer@streamyfin.app) ## ❓ FAQ @@ -144,7 +143,7 @@ We would like to thank the Jellyfin team for their great software and awesome su Special shoutout to the JF official clients for being an inspiration to ours. -### πŸ† Core Developers +## πŸ† Core Developers Thanks to the following contributors for their significant contributions: @@ -235,8 +234,8 @@ I'd also like to thank the following people and projects for their contributions - [Reiverr](https://github.com/aleksilassila/reiverr) for great help with understanding the Jellyfin API. - [Jellyfin TS SDK](https://github.com/jellyfin/jellyfin-sdk-typescript) for the TypeScript SDK. -- [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) for enabling API integration with their project. -- The Jellyfin devs for always being helpful in the Discord. +- [Seerr](https://github.com/seerr-team/seerr) for enabling API integration with their project. +- The Jellyfin developers for always being helpful on Discord. ## ⭐ Star History From 3eae2f3fde28d7a364f4a0f3c708c7c81c1971a4 Mon Sep 17 00:00:00 2001 From: Chris <182387676+whoopsi-daisy@users.noreply.github.com> Date: Sun, 12 Oct 2025 19:26:22 +0200 Subject: [PATCH 03/22] docs: improve README.md Improve structure and consistency, fix grammar and spelling issues, reorder content for clarity, add GitHub download button, update Discord badge to a more suitable version, and include various other improvements --- README.md | 140 +++++++++++++++++++++++++++--------------------------- 1 file changed, 71 insertions(+), 69 deletions(-) diff --git a/README.md b/README.md index e16dcd73..550f5649 100644 --- a/README.md +++ b/README.md @@ -5,30 +5,30 @@ Streamyfin

-**Streamyfin is a simple, user-friendly Jellyfin video streaming client built with Expo. Designed as an alternative to other Jellyfin clients, it aims to offer a smooth and reliable streaming experience. We hope you'll find it a valuable addition to your media streaming toolbox.** +**Streamyfin is a user-friendly Jellyfin video streaming client built with Expo. Designed as an alternative to other Jellyfin clients, it aims to offer a smooth and reliable streaming experience. We hope you'll find it a valuable addition to your media streaming toolbox.** ---

- +   - +   - +   - +

## 🌟 Features -- πŸš€ **Skip Intro / Credits Support** +- πŸš€ **Skip Intro / Credits Support**: Lets you quickly skip intros and credits during playback - πŸ–ΌοΈ **Trickplay images**: The new golden standard for chapter previews when seeking -- πŸ“₯ **Download media** (Experimental): Save your media locally and watch it offline -- πŸ“‘ **Chromecast** (Experimental): Cast your media to any Chromecast-enabled device -- πŸ“‘ **Settings management** (Experimental): Manage app settings for all your users with a JF plugin -- πŸ€– **Seerr (former Jellyseerr) integration**: Request media directly in the app -- πŸ‘οΈ **Sessions View:** View all active sessions currently streaming on your server +- πŸ“₯ **Download media**: Save your media locally and watch it offline +- βš™οΈ **Settings management**: Manage app configurations for all users through our plugin +- πŸ€– **Seerr (formerly Jellyseerr) integration**: Request media directly in the app +- πŸ‘οΈ **Sessions view:** View all active sessions currently streaming on your server +- πŸ“‘ **Chromecast**: Cast your media to any Chromecast-enabled device ## πŸ§ͺ Experimental Features @@ -36,31 +36,31 @@ Streamyfin offers exciting experimental features such as media downloading and C ### πŸ“₯ Downloading -Downloading works by using ffmpeg to convert an HLS stream into a video file on your device. This allows you to download and watch any content that you can stream. The file is converted by Jellyfin on the server in real time during the download. This may result in slightly longer download times, but it ensures compatibility with any file your server can transcode. - -### πŸŽ₯ Chromecast - -Chromecast support is still in development, and we're working on improving it. Currently, it supports casting videos, but we're working on adding support for subtitles and other features. +Downloading works by using FFmpeg to convert an HLS stream into a video file on your device. This lets you download and watch any content that you can stream. The conversion is handled in real time by Jellyfin on the server during the download. While this may take a bit longer, it ensures compatibility with any file your server can transcode. ### 🧩 Streamyfin Plugin The Jellyfin Plugin for Streamyfin is a plugin you install into Jellyfin that holds all settings for the client Streamyfin. This allows you to synchronize settings across all your users, like for example: -- Auto log in to Seerr without the user having to do anything -- Choose the default languages -- Set download method and search provider -- Customize home screen -- And much more... +- Automatic Seerr login with no user input required +- Set your preferred default languages +- Configure download method and search provider +- Personalize your home screen +- And much more [Streamyfin Plugin](https://github.com/streamyfin/jellyfin-plugin-streamyfin) +### πŸ“‘ Chromecast + +Chromecast support is currently under development. Video casting is already available, and we're actively working on adding subtitle support and additional features. + ### πŸ” Jellysearch -[Jellysearch](https://gitlab.com/DomiStyle/jellysearch) now works with Streamyfin! +[Jellysearch](https://gitlab.com/DomiStyle/jellysearch) works with Streamyfin > A fast full-text search proxy for Jellyfin. Integrates seamlessly with most Jellyfin clients. -## πŸ›£οΈ Roadmap for V1 +## πŸ›£οΈ Roadmap Check out our [Roadmap](https://github.com/users/fredrikburmester/projects/5) To see what we're working on next, we are always open to feedback and suggestions. Please let us know if you have any ideas or feature requests. @@ -72,78 +72,60 @@ Check out our [Roadmap](https://github.com/users/fredrikburmester/projects/5) To Get Streamyfin on Github -### πŸ§ͺ Beta testing +### πŸ§ͺ Beta Testing -To access the Streamyfin beta, you need to subscribe to the Member tier (or higher) on [Patreon](https://www.patreon.com/streamyfin). This will give you immediate access to the ⁠πŸ§ͺ-public-beta channel on Discord and I'll know that you have subscribed. This is where I post APKs and IPAs. This won't give automatic access to the TestFlight, however, so you need to send me a DM with the email you use for Apple so that I can manually add you. +To access the Streamyfin beta, you need to subscribe to the Member tier (or higher) on [Patreon](https://www.patreon.com/streamyfin). This grants you immediate access to the ⁠πŸ§ͺ-beta-releases channel on Discord and lets me know you’ve subscribed. This is where I share APKs and IPAs. It does not provide automatic TestFlight access, so please send me a DM (Cagemaster) with the email you use for Apple so we can add you manually. -**Note**: Everyone who is actively contributing to the source code of Streamyfin will have automatic access to the betas. +**Note**: Anyone actively contributing to Streamyfin’s source code will receive automatic access to beta releases. ## πŸš€ Getting Started -### Prerequisites +### βš™οΈ Prerequisites -- Ensure you have an active Jellyfin server. -- Make sure your device is connected to the same network as your Jellyfin server. +- Confirm your Jellyfin server is running +- Verify your device is on the same network as the Jellyfin server ## πŸ™Œ Contributing -We appreciate all contributions that help make Streamyfin better. To get started, fork the repository and submit a pull request. For significant changes or new features, open an issue first to discuss your ideas and ensure alignment with the project. +We welcome contributions that improve Streamyfin. Start by forking the repository and submitting a pull request. For major changes or new features, please open an issue first to discuss your ideas and ensure alignment with the project. -### πŸ‘¨β€πŸ’» Development info +### πŸ‘¨β€πŸ’» Development Info 1. Use node `>20` 2. Install dependencies `bun i && bun run submodule-reload` 3. Make sure you have xcode and/or android studio installed. (follow the guides for expo: https://docs.expo.dev/workflow/android-studio-emulator/) 4. Install BiomeJS extension in VSCode/Your IDE (https://biomejs.dev/) 4. run `npm run prebuild` -5. Create an expo dev build by running `npm run ios` or `npm run android`. This will open a simulator on your computer and run the app. +5. Create an expo dev build by running `npm run ios` or `npm run android`. This will open a simulator on your computer and run the app For the TV version suffix the npm commands with `:tv`. `npm run prebuild:tv` `npm run ios:tv or npm run android:tv` -## πŸ“„ License +## πŸ‘‹ Get in Touch with Us -Streamyfin is licensed under the Mozilla Public License 2.0 (MPL-2.0). -This means you are free to use, modify, and distribute this software. The MPL-2.0 is a copyleft license that allows for more flexibility in combining the software with proprietary code. -Key points of the MPL-2.0: +Feel free to join our Discord server: [![Join our Discord](https://dcbadge.limes.pink/api/server/https://discord.gg/BuGG9ZNhaE?style=flat-square)](https://discord.gg/BuGG9ZNhaE) -- You can use the software for any purpose -- You can modify the software and distribute modified versions -- You must include the original copyright and license notices -- You must disclose your source code for any modifications to the covered files -- Larger works may combine MPL code with code under other licenses -- MPL-licensed components must remain under the MPL, but the larger work can be under a different license -- For the full text of the license, please see the LICENSE file in this repository +Need support or have any questions: -## 🌐 Connect with Us +- GitHub Issues: Report bugs or request features [here](https://github.com/streamyfin/streamyfin/issues) +- Email: Reach out at [developer@streamyfin.app](mailto:developer@streamyfin.app) +- Discord: Join our server at -Join our Discord: [![](https://dcbadge.limes.pink/api/server/https://discord.gg/BuGG9ZNhaE)](https://discord.gg/BuGG9ZNhaE) - -Need support or have questions: - -- GitHub Issues: Report bugs or request features [here](https://github.com/streamyfin/streamyfin/issues) -- Email: [developer@streamyfin.app](mailto:developer@streamyfin.app) ## ❓ FAQ -1. Q: Why can't I see my libraries in Streamyfin? - A: Make sure your server is running one of the latest versions and that you have at least one library that isn't audio only. -2. Q: Why can't I see my music library? - A: We don't currently support music and are unlikely to support music in the near future. +1. Q: Why can't I see my libraries in Streamyfin? + A: Make sure your server is running one of the latest versions and that you have at least one library that isn't audio only +2. Q: Why can't I see my music library? + A: We don't currently support music and are unlikely to support music in the near future ## πŸ“ Credits -Streamyfin is developed by [Fredrik Burmester](https://github.com/fredrikburmester) and is not affiliated with Jellyfin. The app is built with Expo, React Native, and other open-source libraries. +Streamyfin is developed by [Fredrik Burmester](https://github.com/fredrikburmester) and is not affiliated with Jellyfin. The app is built using Expo, React Native, and other open-source libraries. -## ✨ Acknowledgements - -We would like to thank the Jellyfin team for their great software and awesome support on discord. - -Special shoutout to the JF official clients for being an inspiration to ours. - -## πŸ† Core Developers +## πŸŽ–οΈ Core Developers Thanks to the following contributors for their significant contributions: @@ -228,21 +210,41 @@ Thanks to the following contributors for their significant contributions: -And all other developers who have contributed to Streamyfin, thank you for your contributions. +## ✨ Acknowledgements -I'd also like to thank the following people and projects for their contributions to Streamyfin: +We would like to thank the Jellyfin team for their excellent software and support on Discord. + +Special thanks to the official Jellyfin clients, which have served as an inspiration for Streamyfin. + +We also thank all other developers who have contributed to Streamyfin, your efforts are greatly appreciated. + +A special mention to the following people and projects for their contributions: + +- [Reiverr](https://github.com/aleksilassila/reiverr) for invaluable help with understanding the Jellyfin API +- [Jellyfin TS SDK](https://github.com/jellyfin/jellyfin-sdk-typescript) for providing the TypeScript SDK +- [Seerr](https://github.com/seerr-team/seerr) for enabling API integration with their project -- [Reiverr](https://github.com/aleksilassila/reiverr) for great help with understanding the Jellyfin API. -- [Jellyfin TS SDK](https://github.com/jellyfin/jellyfin-sdk-typescript) for the TypeScript SDK. -- [Seerr](https://github.com/seerr-team/seerr) for enabling API integration with their project. -- The Jellyfin developers for always being helpful on Discord. ## ⭐ Star History [![Star History Chart](https://api.star-history.com/svg?repos=streamyfin/streamyfin&type=Date)](https://star-history.com/#streamyfin/streamyfin&Date) +## πŸ“„ License + +Streamyfin is licensed under the Mozilla Public License 2.0 (MPL-2.0). +This means you are free to use, modify, and distribute this software. The MPL-2.0 is a copyleft license that allows for more flexibility in combining the software with proprietary code. +Key points of the MPL-2.0: + +- You can use the software for any purpose +- You can modify the software and distribute modified versions +- You must include the original copyright and license notices +- You must disclose your source code for any modifications to the covered files +- Larger works may combine MPL code with code under other licenses +- MPL-licensed components must remain under the MPL, but the larger work can be under a different license +- For the full text of the license, please see the LICENSE file in this repository + ## ⚠️ Disclaimer -Streamyfin does not promote, support, or condone piracy in any form. The app is intended solely for streaming media that you personally own and control. It does not provide or include any media content. Any discussions or support requests related to piracy are strictly prohibited across all our channels. +Streamyfin does not promote, support, or condone piracy in any form. The app is intended solely for streaming media that you personally own and control. It does not provide or include any media content. Any discussions, support requests, or references to piracy, as well as any tools, software, or websites related to piracy, are strictly prohibited across all our channels. ## 🀝 Sponsorship VPS hosting generously provided by [Hexabyte](https://hexabyte.se/en/vps/?currency=eur) and [SweHosting](https://swehosting.se/en/#tj%C3%A4nster) From 6576a588840c6a03f5785eb8143a0a237bebc270 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:03:29 +0200 Subject: [PATCH 04/22] chore(deps): Update github/codeql-action action to v4.30.8 (#1127) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index 68274a26..591f4805 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -31,13 +31,13 @@ jobs: fetch-depth: 0 - name: 🏁 Initialize CodeQL - uses: github/codeql-action/init@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7 + uses: github/codeql-action/init@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 with: languages: ${{ matrix.language }} queries: +security-extended,security-and-quality - name: πŸ› οΈ Autobuild - uses: github/codeql-action/autobuild@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7 + uses: github/codeql-action/autobuild@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 - name: πŸ§ͺ Perform CodeQL Analysis - uses: github/codeql-action/analyze@e296a935590eb16afc0c0108289f68c87e2a89a5 # v4.30.7 + uses: github/codeql-action/analyze@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 From 264439858d58a8b81f3903cf263b8487381c7833 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:04:25 +0200 Subject: [PATCH 05/22] chore(deps): Update dependency @biomejs/biome to v2.2.6 (#1124) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- biome.json | 2 +- bun.lock | 20 ++++++++++---------- package.json | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/biome.json b/biome.json index 767b5bed..b0a2b95f 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.5/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.6/schema.json", "files": { "includes": [ "**/*", diff --git a/bun.lock b/bun.lock index 0c9a1277..4819d452 100644 --- a/bun.lock +++ b/bun.lock @@ -83,7 +83,7 @@ }, "devDependencies": { "@babel/core": "7.28.4", - "@biomejs/biome": "2.2.5", + "@biomejs/biome": "2.2.6", "@react-native-community/cli": "20.0.2", "@react-native-tvos/config-tv": "0.1.4", "@types/jest": "30.0.0", @@ -293,23 +293,23 @@ "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], - "@biomejs/biome": ["@biomejs/biome@2.2.5", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.5", "@biomejs/cli-darwin-x64": "2.2.5", "@biomejs/cli-linux-arm64": "2.2.5", "@biomejs/cli-linux-arm64-musl": "2.2.5", "@biomejs/cli-linux-x64": "2.2.5", "@biomejs/cli-linux-x64-musl": "2.2.5", "@biomejs/cli-win32-arm64": "2.2.5", "@biomejs/cli-win32-x64": "2.2.5" }, "bin": { "biome": "bin/biome" } }, "sha512-zcIi+163Rc3HtyHbEO7CjeHq8DjQRs40HsGbW6vx2WI0tg8mYQOPouhvHSyEnCBAorfYNnKdR64/IxO7xQ5faw=="], + "@biomejs/biome": ["@biomejs/biome@2.2.6", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.6", "@biomejs/cli-darwin-x64": "2.2.6", "@biomejs/cli-linux-arm64": "2.2.6", "@biomejs/cli-linux-arm64-musl": "2.2.6", "@biomejs/cli-linux-x64": "2.2.6", "@biomejs/cli-linux-x64-musl": "2.2.6", "@biomejs/cli-win32-arm64": "2.2.6", "@biomejs/cli-win32-x64": "2.2.6" }, "bin": { "biome": "bin/biome" } }, "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw=="], - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-MYT+nZ38wEIWVcL5xLyOhYQQ7nlWD0b/4mgATW2c8dvq7R4OQjt/XGXFkXrmtWmQofaIM14L7V8qIz/M+bx5QQ=="], + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.2.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA=="], - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-FLIEl73fv0R7dI10EnEiZLw+IMz3mWLnF95ASDI0kbx6DDLJjWxE5JxxBfmG+udz1hIDd3fr5wsuP7nwuTRdAg=="], + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.2.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ=="], - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-5DjiiDfHqGgR2MS9D+AZ8kOfrzTGqLKywn8hoXpXXlJXIECGQ32t+gt/uiS2XyGBM2XQhR6ztUvbjZWeccFMoQ=="], + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g=="], - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Ov2wgAFwqDvQiESnu7b9ufD1faRa+40uwrohgBopeY84El2TnBDoMNXx6iuQdreoFGjwW8vH6k68G21EpNERw=="], + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.2.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ=="], - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-fq9meKm1AEXeAWan3uCg6XSP5ObA6F/Ovm89TwaMiy1DNIwdgxPkNwxlXJX8iM6oRbFysYeGnT0OG8diCWb9ew=="], + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA=="], - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.5", "", { "os": "linux", "cpu": "x64" }, "sha512-AVqLCDb/6K7aPNIcxHaTQj01sl1m989CJIQFQEaiQkGr2EQwyOpaATJ473h+nXDUuAcREhccfRpe/tu+0wu0eQ=="], + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.2.6", "", { "os": "linux", "cpu": "x64" }, "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog=="], - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-xaOIad4wBambwJa6mdp1FigYSIF9i7PCqRbvBqtIi9y29QtPVQ13sDGtUnsRoe6SjL10auMzQ6YAe+B3RpZXVg=="], + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.2.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw=="], - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.5", "", { "os": "win32", "cpu": "x64" }, "sha512-F/jhuXCssPFAuciMhHKk00xnCAxJRS/pUzVfXYmOMUp//XW7mO6QeCjsjvnm8L4AO/dG2VOB0O+fJPiJ2uXtIw=="], + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.2.6", "", { "os": "win32", "cpu": "x64" }, "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ=="], "@bottom-tabs/react-navigation": ["@bottom-tabs/react-navigation@0.11.2", "", { "dependencies": { "color": "^5.0.0" }, "peerDependencies": { "@react-navigation/native": ">=7", "react": "*", "react-native": "*", "react-native-bottom-tabs": "*" } }, "sha512-xjRZZe3GZ/bIADBkJSe+qjRC/pQKcTEhZgtoGb4lyINq1NPzhKXhlZHwZLzNJng/Q/+F4RD3M7bQ6oCgSHV2WA=="], diff --git a/package.json b/package.json index 95039cc7..ca4c75b4 100644 --- a/package.json +++ b/package.json @@ -101,7 +101,7 @@ }, "devDependencies": { "@babel/core": "7.28.4", - "@biomejs/biome": "2.2.5", + "@biomejs/biome": "2.2.6", "@react-native-community/cli": "20.0.2", "@react-native-tvos/config-tv": "0.1.4", "@types/jest": "30.0.0", From bf4a1f9462a85707fd1f17ff70e984122e1309ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:04:40 +0200 Subject: [PATCH 06/22] chore(deps): Update actions/dependency-review-action action to v4.8.1 (#1123) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/linting.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index ec3ab9aa..01ec3cda 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -57,7 +57,7 @@ jobs: fetch-depth: 0 - name: Dependency Review - uses: actions/dependency-review-action@56339e523c0409420f6c2c9a2f4292bbb3c07dd3 # v4.8.0 + uses: actions/dependency-review-action@40c09b7dc99638e5ddb0bfd91c1673effc064d8a # v4.8.1 with: fail-on-severity: high base-ref: ${{ github.event.pull_request.base.sha || 'develop' }} From 13b29bdee0a5d13d36d7e70b430a10c7a3cbcd41 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:06:53 +0200 Subject: [PATCH 07/22] chore(deps): Update dependency lint-staged to v16.2.4 (#1126) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index 4819d452..d606e948 100644 --- a/bun.lock +++ b/bun.lock @@ -94,7 +94,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.9", "husky": "9.1.7", - "lint-staged": "16.2.3", + "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", "typescript": "5.8.3", }, @@ -1333,7 +1333,7 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@16.2.3", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.4", "micromatch": "^4.0.8", "nano-spawn": "^1.0.3", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-1OnJEESB9zZqsp61XHH2fvpS1es3hRCxMplF/AJUDa8Ho8VrscYDIuxGrj3m8KPXbcWZ8fT9XTMUhEQmOVKpKw=="], + "lint-staged": ["lint-staged@16.2.4", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.4", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-Pkyr/wd90oAyXk98i/2KwfkIhoYQUMtss769FIT9hFM5ogYZwrk+GRE46yKXSg2ZGhcJ1p38Gf5gmI5Ohjg2yg=="], "listr2": ["listr2@9.0.4", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ=="], @@ -1425,7 +1425,7 @@ "mz": ["mz@2.7.0", "", { "dependencies": { "any-promise": "^1.0.0", "object-assign": "^4.0.1", "thenify-all": "^1.0.0" } }, "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q=="], - "nano-spawn": ["nano-spawn@1.0.3", "", {}, "sha512-jtpsQDetTnvS2Ts1fiRdci5rx0VYws5jGyC+4IYOTnIQ/wwdf6JdomlHBwqC3bJYOvaKu0C2GSZ1A60anrYpaA=="], + "nano-spawn": ["nano-spawn@2.0.0", "", {}, "sha512-tacvGzUY5o2D8CBh2rrwxyNojUsZNU2zjNTzKQrkgGJQTbGAfArVWXSKMBokBeeg6C7OLRGUEyoFlYbfeWQIqw=="], "nanoid": ["nanoid@3.3.11", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="], diff --git a/package.json b/package.json index ca4c75b4..4cee2566 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.9", "husky": "9.1.7", - "lint-staged": "16.2.3", + "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", "typescript": "5.8.3" }, From 16046a4a157672acd058453175c753c0febb2795 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:07:31 +0200 Subject: [PATCH 08/22] chore(deps): Update dependency expo-doctor to v1.17.10 (#1125) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index d606e948..b5754933 100644 --- a/bun.lock +++ b/bun.lock @@ -92,7 +92,7 @@ "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", "expo-dev-client": "5.2.4", - "expo-doctor": "1.17.9", + "expo-doctor": "1.17.10", "husky": "9.1.7", "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", @@ -1011,7 +1011,7 @@ "expo-device": ["expo-device@7.1.4", "", { "dependencies": { "ua-parser-js": "^0.7.33" }, "peerDependencies": { "expo": "*" } }, "sha512-HS04IiE1Fy0FRjBLurr9e5A6yj3kbmQB+2jCZvbSGpsjBnCLdSk/LCii4f5VFhPIBWJLyYuN5QqJyEAw6BcS4Q=="], - "expo-doctor": ["expo-doctor@1.17.9", "", { "bin": { "expo-doctor": "build/index.js" } }, "sha512-3KAVyzztSa3pXXV9/QjQ75x+GS42SDTuVFRgAqf+ehFxcHosy3TW6i+5mnLoYbFp7WTZfq+W96Xlkb3N5Fe8ow=="], + "expo-doctor": ["expo-doctor@1.17.10", "", { "bin": { "expo-doctor": "build/index.js" } }, "sha512-knjNkyhH5JPHWvpUr08UfyfI9RT1M0zm4kj/b1q/+w92EnmKy/rZR8eUABPaPAkqGMwnTpxovvSgI7hEUMNzhA=="], "expo-file-system": ["expo-file-system@18.1.11", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ=="], diff --git a/package.json b/package.json index 4cee2566..cd2b5f25 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", "expo-dev-client": "5.2.4", - "expo-doctor": "1.17.9", + "expo-doctor": "1.17.10", "husky": "9.1.7", "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", From fcb8e83845c7b58b9cfa4d705ac17fdf08397cd1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:08:14 +0200 Subject: [PATCH 09/22] chore(deps): Update actions/setup-node action to v6 (#1128) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/linting.yml | 2 +- .github/workflows/update-issue-form.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linting.yml b/.github/workflows/linting.yml index 01ec3cda..532f68e5 100644 --- a/.github/workflows/linting.yml +++ b/.github/workflows/linting.yml @@ -107,7 +107,7 @@ jobs: fetch-depth: 0 - name: "🟒 Setup Node.js" - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '24.x' diff --git a/.github/workflows/update-issue-form.yml b/.github/workflows/update-issue-form.yml index 34680b2e..dc76a074 100644 --- a/.github/workflows/update-issue-form.yml +++ b/.github/workflows/update-issue-form.yml @@ -21,7 +21,7 @@ jobs: uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: "🟒 Setup Node.js" - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5.0.0 + uses: actions/setup-node@2028fbc5c25fe9cf00d9f06a71cc4710d4507903 # v6.0.0 with: node-version: '24.x' cache: 'npm' From 37364b235f873f1ae667cd13580674854a1c117b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 19 Oct 2025 22:41:49 +0200 Subject: [PATCH 10/22] chore(deps): Update github/codeql-action action to v4.30.9 (#1138) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index 591f4805..d3d6bb83 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -31,13 +31,13 @@ jobs: fetch-depth: 0 - name: 🏁 Initialize CodeQL - uses: github/codeql-action/init@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 + uses: github/codeql-action/init@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 with: languages: ${{ matrix.language }} queries: +security-extended,security-and-quality - name: πŸ› οΈ Autobuild - uses: github/codeql-action/autobuild@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 + uses: github/codeql-action/autobuild@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 - name: πŸ§ͺ Perform CodeQL Analysis - uses: github/codeql-action/analyze@f443b600d91635bebf5b0d9ebc620189c0d6fba5 # v4.30.8 + uses: github/codeql-action/analyze@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 From dbcf5759da6b1e7180978f9cc1a765eba323fea9 Mon Sep 17 00:00:00 2001 From: Uruk Date: Sun, 19 Oct 2025 22:45:10 +0200 Subject: [PATCH 11/22] docs: remove markdown link formatting from commit guide Simplifies the Conventional Commits reference by converting it from markdown link syntax to plain text with URL, improving readability in the documentation file. --- .github/copilot-instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 1f63d5f3..2111dd2e 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -79,7 +79,7 @@ and provides seamless media streaming with offline capabilities and Chromecast s ## Commit Messages -Use [Conventional Commits](https://www.conventionalcommits.org/): +Use Conventional Commits (https://www.conventionalcommits.org/): Exemples: - `feat(player): add Chromecast support` - `fix(auth): handle expired JWT tokens` From 1e9fba6f85f5bd52acd0698e63a9098877b8b289 Mon Sep 17 00:00:00 2001 From: Chris <182387676+whoopsi-daisy@users.noreply.github.com> Date: Fri, 24 Oct 2025 09:55:07 +0200 Subject: [PATCH 12/22] docs: updating CONTRIBUTING.md Added AI assistance disclosure clause --- .github/CONTRIBUTING.md | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 56cfa83b..eeb88068 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,11 +1,13 @@ # Contributing to Streamyfin -Thank you for your interest in contributing to the Streamyfin mobile app project! This document provides guidelines to smoothly collaborate on the Streamyfin codebase and help improve the app for all users. +Thank you for your interest in contributing to the Streamyfin project. This document outlines the guidelines for effective collaboration across the Streamyfin codebase and aims to ensure a smooth, productive experience for all contributors. --- ## Table of Contents + +- [AI Assistance Disclosure](#ai-assistance-disclosure) - [Reporting Issues](#reporting-issues) - [Reporting Security Vulnerabilities](#reporting-security-vulnerabilities) - [Requesting Features & Enhancements](#requesting-features--enhancements) @@ -19,6 +21,25 @@ Thank you for your interest in contributing to the Streamyfin mobile app project --- +## AI Assistance Disclosure + +> [!IMPORTANT] +> If any AI tool was used while contributing to Seerr, it must be disclosed in the pull request. + +Note in your PR whether AI assistance was used and to what extent (for example, *docs only* or *code generation*). +If AI-generated text was used in PR responses, disclose that as well. +Simple tab-completion or short keyword suggestions do **not** require disclosure. + +### Examples + +> This PR was written primarily by Claude Code. +> I used Cursor to understand parts of the codebase, but the implementation is fully manual. + +Failing to disclose AI usage wastes maintainers time and makes it harder to judge review effort. +We welcome AI-assisted work, but contributors must understand and take full responsibility for the code they submit. + +Be respectful to maintainers and always disclose AI involvement. + ## Reporting Issues Streamyfin uses GitHub issues to track bugs and improvements. Before opening a new issue: @@ -46,11 +67,11 @@ When creating a new feature request: - Check if the idea or similar request exists. - Use reactions like πŸ‘ to support existing requests. -- Provide a clear explanation of the use case and benefits. - +- Clearly describe the use case and potential benefits. +- Include screenshots when relevant. --- -## Developing the Mobile App +## Developing Streamyfin ### Codebase Overview @@ -136,6 +157,8 @@ When opening a PR: - Provide a detailed description in the PR body, explaining what, why, and any impacts. - Include screenshots or recordings if UI changes are involved. - Ensure CI checks are green (lint, type-check, build). +- Confirm that the branch is **up to date with `main`** before submission. +- Mention if AI-generated code or content was used (see [AI Assistance Disclosure](#ai-assistance-disclosure)). - Do not include secrets, tokens, or production credentials. Redact sensitive data in logs and screenshots. - Keep PRs focused; avoid bundling unrelated changes together. @@ -159,4 +182,4 @@ PRs require review and approval by maintainers before merging.--- --- -Thank you for helping make Streamyfin a better app for everyone! +Thank you for contributing to make Streamyfin better for everyone! From 87d02078c86867cd16141396f2388ccc85a1c2d9 Mon Sep 17 00:00:00 2001 From: Chris <182387676+whoopsi-daisy@users.noreply.github.com> Date: Fri, 24 Oct 2025 10:01:36 +0200 Subject: [PATCH 13/22] docs: Add AI Assistance Disclosure Clause Update introduces a new section outlining requirements for contributors who use AI tools while working on the project. --- .github/CONTRIBUTING.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index eeb88068..82873512 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -24,21 +24,21 @@ Thank you for your interest in contributing to the Streamyfin project. This docu ## AI Assistance Disclosure > [!IMPORTANT] -> If any AI tool was used while contributing to Seerr, it must be disclosed in the pull request. +> If any AI tool was used while contributing to Streamyfin, it must be disclosed in the pull request. -Note in your PR whether AI assistance was used and to what extent (for example, *docs only* or *code generation*). -If AI-generated text was used in PR responses, disclose that as well. -Simple tab-completion or short keyword suggestions do **not** require disclosure. +State in your PR whether AI assistance was used and to what extent (for example, *docs only* or *code generation*). +If AI-generated text was used in PR discussions or responses, disclose that as well. +Minor autocomplete or keyword suggestions do not require disclosure. ### Examples > This PR was written primarily by Claude Code. -> I used Cursor to understand parts of the codebase, but the implementation is fully manual. +> I used Cursor to explore parts of the codebase, but the implementation is fully manual. -Failing to disclose AI usage wastes maintainers time and makes it harder to judge review effort. -We welcome AI-assisted work, but contributors must understand and take full responsibility for the code they submit. +Failing to disclose AI usage wastes maintainers’ time and complicates review efforts. +AI-assisted contributions are welcome, but contributors remain fully responsible for the code they submit. -Be respectful to maintainers and always disclose AI involvement. +Always disclose AI involvement to maintain transparency and respect for maintainers’ time. ## Reporting Issues From 1c4f54584f1fc458b0ab3b8f15995d2ca4ee5f84 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:41:52 +0200 Subject: [PATCH 14/22] chore(deps): Update dependency expo-doctor to v1.17.11 (#1143) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index b5754933..35418f8d 100644 --- a/bun.lock +++ b/bun.lock @@ -92,7 +92,7 @@ "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", "expo-dev-client": "5.2.4", - "expo-doctor": "1.17.10", + "expo-doctor": "1.17.11", "husky": "9.1.7", "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", @@ -1011,7 +1011,7 @@ "expo-device": ["expo-device@7.1.4", "", { "dependencies": { "ua-parser-js": "^0.7.33" }, "peerDependencies": { "expo": "*" } }, "sha512-HS04IiE1Fy0FRjBLurr9e5A6yj3kbmQB+2jCZvbSGpsjBnCLdSk/LCii4f5VFhPIBWJLyYuN5QqJyEAw6BcS4Q=="], - "expo-doctor": ["expo-doctor@1.17.10", "", { "bin": { "expo-doctor": "build/index.js" } }, "sha512-knjNkyhH5JPHWvpUr08UfyfI9RT1M0zm4kj/b1q/+w92EnmKy/rZR8eUABPaPAkqGMwnTpxovvSgI7hEUMNzhA=="], + "expo-doctor": ["expo-doctor@1.17.11", "", { "bin": { "expo-doctor": "build/index.js" } }, "sha512-4eYZPJm4op2aRQWvd6RA6dZt1mVQQe79n7iqqFi6P927K8w2ld8kZ2D7m/4ahjj9/HBW9NS98m4qGomKJFDuPg=="], "expo-file-system": ["expo-file-system@18.1.11", "", { "peerDependencies": { "expo": "*", "react-native": "*" } }, "sha512-HJw/m0nVOKeqeRjPjGdvm+zBi5/NxcdPf8M8P3G2JFvH5Z8vBWqVDic2O58jnT1OFEy0XXzoH9UqFu7cHg9DTQ=="], diff --git a/package.json b/package.json index cd2b5f25..83fbd9cc 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,7 @@ "@types/react-test-renderer": "19.1.0", "cross-env": "10.1.0", "expo-dev-client": "5.2.4", - "expo-doctor": "1.17.10", + "expo-doctor": "1.17.11", "husky": "9.1.7", "lint-staged": "16.2.4", "react-test-renderer": "19.1.1", From f19b33eff6eb09e7a2d772a7e2ecb0a461ba541d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:54:08 +0200 Subject: [PATCH 15/22] chore(deps): Update github/codeql-action action to v4.31.0 (#1146) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/ci-codeql.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index d3d6bb83..2e139ac1 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -31,13 +31,13 @@ jobs: fetch-depth: 0 - name: 🏁 Initialize CodeQL - uses: github/codeql-action/init@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 + uses: github/codeql-action/init@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v4.31.0 with: languages: ${{ matrix.language }} queries: +security-extended,security-and-quality - name: πŸ› οΈ Autobuild - uses: github/codeql-action/autobuild@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 + uses: github/codeql-action/autobuild@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v4.31.0 - name: πŸ§ͺ Perform CodeQL Analysis - uses: github/codeql-action/analyze@16140ae1a102900babc80a33c44059580f687047 # v4.30.9 + uses: github/codeql-action/analyze@4e94bd11f71e507f7f87df81788dff88d1dacbfb # v4.31.0 From 25cfcf073518d46062b8b11f2dd0df1ffabc6829 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:55:38 +0200 Subject: [PATCH 16/22] chore(deps): Update crowdin/github-action action to v2.12.0 (#1145) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/crowdin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/crowdin.yml b/.github/workflows/crowdin.yml index f0f42e8c..a49669ad 100644 --- a/.github/workflows/crowdin.yml +++ b/.github/workflows/crowdin.yml @@ -28,7 +28,7 @@ jobs: fetch-depth: 0 - name: 🌐 Sync Translations with Crowdin - uses: crowdin/github-action@0749939f635900a2521aa6aac7a3766642b2dc71 # v2.11.0 + uses: crowdin/github-action@08713f00a50548bfe39b37e8f44afb53e7a802d4 # v2.12.0 with: upload_sources: true upload_translations: true From c62c8ca07739e10b91caad4e05b4e06a878a51ef Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:56:07 +0200 Subject: [PATCH 17/22] chore(deps): Update dependency @babel/core to v7.28.5 (#1148) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 86 ++++++++++++++++++++++++++++++++++++++++++++++------ package.json | 2 +- 2 files changed, 77 insertions(+), 11 deletions(-) diff --git a/bun.lock b/bun.lock index 35418f8d..7218bff4 100644 --- a/bun.lock +++ b/bun.lock @@ -82,7 +82,7 @@ "zod": "^4.1.3", }, "devDependencies": { - "@babel/core": "7.28.4", + "@babel/core": "7.28.5", "@biomejs/biome": "2.2.6", "@react-native-community/cli": "20.0.2", "@react-native-tvos/config-tv": "0.1.4", @@ -111,9 +111,9 @@ "@babel/compat-data": ["@babel/compat-data@7.28.0", "", {}, "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw=="], - "@babel/core": ["@babel/core@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.4", "@babel/types": "^7.28.4", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA=="], + "@babel/core": ["@babel/core@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.4", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw=="], - "@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/generator": ["@babel/generator@7.28.5", "", { "dependencies": { "@babel/parser": "^7.28.5", "@babel/types": "^7.28.5", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ=="], "@babel/helper-annotate-as-pure": ["@babel/helper-annotate-as-pure@7.27.3", "", { "dependencies": { "@babel/types": "^7.27.3" } }, "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg=="], @@ -155,7 +155,7 @@ "@babel/highlight": ["@babel/highlight@7.25.9", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.25.9", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" } }, "sha512-llL88JShoCsth8fF8R4SJnIn+WLvR6ccFxu1H3FlMhDontdcmZWf2HgIZ7AIqV3Xcck1idlohrN4EUBQz6klbw=="], - "@babel/parser": ["@babel/parser@7.28.4", "", { "dependencies": { "@babel/types": "^7.28.4" }, "bin": "./bin/babel-parser.js" }, "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg=="], + "@babel/parser": ["@babel/parser@7.28.5", "", { "dependencies": { "@babel/types": "^7.28.5" }, "bin": "./bin/babel-parser.js" }, "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ=="], "@babel/plugin-proposal-decorators": ["@babel/plugin-proposal-decorators@7.28.0", "", { "dependencies": { "@babel/helper-create-class-features-plugin": "^7.27.1", "@babel/helper-plugin-utils": "^7.27.1", "@babel/plugin-syntax-decorators": "^7.27.1" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg=="], @@ -287,11 +287,11 @@ "@babel/template": ["@babel/template@7.27.2", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/parser": "^7.27.2", "@babel/types": "^7.27.1" } }, "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw=="], - "@babel/traverse": ["@babel/traverse@7.28.4", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.4", "@babel/template": "^7.27.2", "@babel/types": "^7.28.4", "debug": "^4.3.1" } }, "sha512-YEzuboP2qvQavAcjgQNVgsvHIDv6ZpwXvcvjmyySP2DIMuByS/6ioU5G9pYrWHM6T2YDfc7xga9iNzYOs12CFQ=="], + "@babel/traverse": ["@babel/traverse@7.28.5", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.5", "@babel/template": "^7.27.2", "@babel/types": "^7.28.5", "debug": "^4.3.1" } }, "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ=="], "@babel/traverse--for-generate-function-map": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], - "@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + "@babel/types": ["@babel/types@7.28.5", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA=="], "@biomejs/biome": ["@biomejs/biome@2.2.6", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.2.6", "@biomejs/cli-darwin-x64": "2.2.6", "@biomejs/cli-linux-arm64": "2.2.6", "@biomejs/cli-linux-arm64-musl": "2.2.6", "@biomejs/cli-linux-x64": "2.2.6", "@biomejs/cli-linux-x64-musl": "2.2.6", "@biomejs/cli-win32-arm64": "2.2.6", "@biomejs/cli-win32-x64": "2.2.6" }, "bin": { "biome": "bin/biome" } }, "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw=="], @@ -1993,10 +1993,6 @@ "zod": ["zod@4.1.3", "", {}, "sha512-1neef4bMce1hNTrxvHVKxWjKfGDn0oAli3Wy1Uwb7TRO1+wEwoZUZNP1NXIEESybOBiFnBOhI6a4m6tCLE8dog=="], - "@babel/generator/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], - - "@babel/generator/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], - "@babel/helper-annotate-as-pure/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], "@babel/helper-create-class-features-plugin/@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], @@ -2025,6 +2021,8 @@ "@babel/helper-wrap-function/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helpers/@babel/types": ["@babel/types@7.28.4", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q=="], + "@babel/highlight/chalk": ["chalk@2.4.2", "", { "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", "supports-color": "^5.3.0" } }, "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], @@ -2049,10 +2047,14 @@ "@babel/template/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/traverse--for-generate-function-map/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/traverse--for-generate-function-map/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/traverse--for-generate-function-map/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/types/@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + "@expo/cli/@expo/prebuild-config": ["@expo/prebuild-config@9.0.12", "", { "dependencies": { "@expo/config": "~11.0.13", "@expo/config-plugins": "~10.1.2", "@expo/config-types": "^53.0.5", "@expo/image-utils": "^0.7.6", "@expo/json-file": "^9.1.5", "@react-native/normalize-colors": "0.79.6", "debug": "^4.3.1", "resolve-from": "^5.0.0", "semver": "^7.6.0", "xml2js": "0.6.0" } }, "sha512-AKH5Scf+gEMgGxZZaimrJI2wlUJlRoqzDNn7/rkhZa5gUTnO4l6slKak2YdaH+nXlOWCNfAQWa76NnpQIfmv6Q=="], "@expo/cli/getenv": ["getenv@2.0.0", "", {}, "sha512-VilgtJj/ALgGY77fiLam5iD336eSWi96Q15JSAG1zi8NRBysm3LXKdGnHb4m5cuyxvOLQQKWpBZAT6ni4FI2iQ=="], @@ -2105,6 +2107,8 @@ "@expo/metro-config/@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + "@expo/metro-config/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@expo/metro-config/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@expo/metro-config/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2315,6 +2319,8 @@ "metro/@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + "metro/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "metro/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "metro/@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], @@ -2339,14 +2345,20 @@ "metro-transform-plugins/@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + "metro-transform-plugins/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "metro-transform-plugins/@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], "metro-transform-worker/@babel/core": ["@babel/core@7.28.3", "", { "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-compilation-targets": "^7.27.2", "@babel/helper-module-transforms": "^7.28.3", "@babel/helpers": "^7.28.3", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/traverse": "^7.28.3", "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", "semver": "^6.3.1" } }, "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ=="], + "metro-transform-worker/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "metro-transform-worker/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "metro-transform-worker/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "nativewind/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "nativewind/@babel/types": ["@babel/types@7.19.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } }, "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA=="], "nativewind/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], @@ -2433,28 +2445,42 @@ "xml2js/xmlbuilder": ["xmlbuilder@11.0.1", "", {}, "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="], + "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/helper-create-class-features-plugin/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-member-expression-to-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/helper-module-transforms/@babel/helper-module-imports/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helper-module-transforms/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-module-transforms/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/helper-module-transforms/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/helper-remap-async-to-generator/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helper-replace-supers/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-replace-supers/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/helper-replace-supers/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-skip-transparent-expression-wrappers/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + "@babel/helper-wrap-function/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/helper-wrap-function/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/highlight/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -2463,6 +2489,8 @@ "@babel/highlight/chalk/supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="], + "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/plugin-transform-async-generator-functions/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2471,18 +2499,26 @@ "@babel/plugin-transform-async-to-generator/@babel/helper-module-imports/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/plugin-transform-classes/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-classes/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/plugin-transform-classes/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/plugin-transform-destructuring/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-destructuring/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/plugin-transform-destructuring/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/plugin-transform-function-name/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-function-name/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/plugin-transform-function-name/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@babel/plugin-transform-object-rest-spread/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2533,6 +2569,8 @@ "@jest/fake-timers/jest-message-util/pretty-format": ["pretty-format@29.7.0", "", { "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", "react-is": "^18.0.0" } }, "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ=="], + "@jest/transform/@babel/core/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@jest/transform/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], "@jest/transform/@babel/core/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], @@ -2549,6 +2587,8 @@ "@react-native-community/cli-server-api/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "@react-native/babel-plugin-codegen/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@react-native/babel-plugin-codegen/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@react-native/babel-plugin-codegen/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2557,6 +2597,8 @@ "@react-native/babel-plugin-codegen/@react-native/codegen/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + "@react-native/babel-preset/@babel/core/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@react-native/babel-preset/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], "@react-native/babel-preset/@babel/core/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], @@ -2613,6 +2655,8 @@ "glob/minimatch/brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="], + "istanbul-lib-instrument/@babel/core/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "istanbul-lib-instrument/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], "istanbul-lib-instrument/@babel/core/@babel/traverse": ["@babel/traverse@7.28.3", "", { "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", "@babel/helper-globals": "^7.28.0", "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", "@babel/types": "^7.28.2", "debug": "^4.3.1" } }, "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ=="], @@ -2641,6 +2685,8 @@ "logkitty/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "metro-babel-transformer/@babel/core/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "metro-babel-transformer/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], "metro-babel-transformer/@babel/core/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], @@ -2657,6 +2703,8 @@ "metro-config/cosmiconfig/parse-json": ["parse-json@4.0.0", "", { "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" } }, "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw=="], + "metro-source-map/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "metro-source-map/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "metro-transform-plugins/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], @@ -2665,6 +2713,10 @@ "metro-transform-plugins/@babel/core/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "metro-transform-plugins/@babel/generator/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + + "metro-transform-plugins/@babel/generator/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "metro-transform-plugins/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "metro-transform-plugins/@babel/traverse/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2677,6 +2729,10 @@ "metro/hermes-parser/hermes-estree": ["hermes-estree@0.29.1", "", {}, "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ=="], + "nativewind/@babel/generator/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + + "nativewind/@babel/generator/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], + "node-vibrant/@types/node/undici-types": ["undici-types@5.26.5", "", {}, "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA=="], "react-native/pretty-format/@jest/schemas": ["@jest/schemas@29.6.3", "", { "dependencies": { "@sinclair/typebox": "^0.27.8" } }, "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA=="], @@ -2707,10 +2763,16 @@ "@babel/highlight/chalk/supports-color/has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="], + "@babel/plugin-transform-async-to-generator/@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-async-to-generator/@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + "@babel/plugin-transform-react-jsx/@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-react-jsx/@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], + "@babel/plugin-transform-runtime/@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@babel/plugin-transform-runtime/@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "@expo/cli/ora/chalk/ansi-styles": ["ansi-styles@3.2.1", "", { "dependencies": { "color-convert": "^1.9.0" } }, "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA=="], @@ -2745,6 +2807,8 @@ "@react-native-community/cli-server-api/pretty-format/@jest/schemas/@sinclair/typebox": ["@sinclair/typebox@0.27.8", "", {}, "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA=="], + "@react-native/babel-plugin-codegen/@react-native/codegen/@babel/core/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "@react-native/babel-plugin-codegen/@react-native/codegen/@babel/core/@babel/helpers": ["@babel/helpers@7.28.3", "", { "dependencies": { "@babel/template": "^7.27.2", "@babel/types": "^7.28.2" } }, "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw=="], "@react-native/babel-plugin-codegen/@react-native/codegen/@babel/core/@babel/types": ["@babel/types@7.28.2", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ=="], @@ -2767,6 +2831,8 @@ "ansi-fragments/slice-ansi/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "babel-preset-expo/@babel/helper-module-imports/@babel/traverse/@babel/generator": ["@babel/generator@7.28.3", "", { "dependencies": { "@babel/parser": "^7.28.3", "@babel/types": "^7.28.2", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" } }, "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw=="], + "babel-preset-expo/@babel/helper-module-imports/@babel/traverse/@babel/parser": ["@babel/parser@7.28.3", "", { "dependencies": { "@babel/types": "^7.28.2" }, "bin": "./bin/babel-parser.js" }, "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA=="], "cli-truncate/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.1.0", "", {}, "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA=="], diff --git a/package.json b/package.json index 83fbd9cc..c3ddfc3f 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,7 @@ "zod": "^4.1.3" }, "devDependencies": { - "@babel/core": "7.28.4", + "@babel/core": "7.28.5", "@biomejs/biome": "2.2.6", "@react-native-community/cli": "20.0.2", "@react-native-tvos/config-tv": "0.1.4", From 7e82d9c7b6e9141d0b8ab804010806196424c16f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:56:16 +0200 Subject: [PATCH 18/22] chore(deps): Update actions/upload-artifact action to v5 (#1147) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-apps.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-apps.yml b/.github/workflows/build-apps.yml index ad770414..552fb23d 100644 --- a/.github/workflows/build-apps.yml +++ b/.github/workflows/build-apps.yml @@ -76,7 +76,7 @@ jobs: run: echo "DATE_TAG=$(date +%d-%m-%Y_%H-%M-%S)" >> $GITHUB_ENV - name: πŸ“€ Upload APK artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: streamyfin-android-phone-apk-${{ env.DATE_TAG }} path: | @@ -147,7 +147,7 @@ jobs: run: echo "DATE_TAG=$(date +%d-%m-%Y_%H-%M-%S)" >> $GITHUB_ENV - name: πŸ“€ Upload APK artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: streamyfin-android-tv-apk-${{ env.DATE_TAG }} path: | @@ -210,7 +210,7 @@ jobs: run: echo "DATE_TAG=$(date +%d-%m-%Y_%H-%M-%S)" >> $GITHUB_ENV - name: πŸ“€ Upload IPA artifact - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 with: name: streamyfin-ios-phone-ipa-${{ env.DATE_TAG }} path: build-*.ipa From eaebb79f4c55a44991b281b2f8921fc0aa240182 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 12:56:28 +0200 Subject: [PATCH 19/22] chore(deps): Update dependency lint-staged to v16.2.5 (#1144) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bun.lock b/bun.lock index 7218bff4..a7758047 100644 --- a/bun.lock +++ b/bun.lock @@ -94,7 +94,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.11", "husky": "9.1.7", - "lint-staged": "16.2.4", + "lint-staged": "16.2.5", "react-test-renderer": "19.1.1", "typescript": "5.8.3", }, @@ -1333,7 +1333,7 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@16.2.4", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.4", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-Pkyr/wd90oAyXk98i/2KwfkIhoYQUMtss769FIT9hFM5ogYZwrk+GRE46yKXSg2ZGhcJ1p38Gf5gmI5Ohjg2yg=="], + "lint-staged": ["lint-staged@16.2.5", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.4", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-o36wH3OX0jRWqDw5dOa8a8x6GXTKaLM+LvhRaucZxez0IxA+KNDUCiyjBfNgsMNmchwSX6urLSL7wShcUqAang=="], "listr2": ["listr2@9.0.4", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ=="], diff --git a/package.json b/package.json index c3ddfc3f..fff28f91 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.11", "husky": "9.1.7", - "lint-staged": "16.2.4", + "lint-staged": "16.2.5", "react-test-renderer": "19.1.1", "typescript": "5.8.3" }, From f5c791cce4678d25bdb64af74836a3715aefe14d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 13:05:34 +0200 Subject: [PATCH 20/22] chore(deps): Update dependency lint-staged to v16.2.6 (#1149) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bun.lock | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bun.lock b/bun.lock index a7758047..592d8526 100644 --- a/bun.lock +++ b/bun.lock @@ -94,7 +94,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.11", "husky": "9.1.7", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "react-test-renderer": "19.1.1", "typescript": "5.8.3", }, @@ -1333,9 +1333,9 @@ "lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="], - "lint-staged": ["lint-staged@16.2.5", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.4", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-o36wH3OX0jRWqDw5dOa8a8x6GXTKaLM+LvhRaucZxez0IxA+KNDUCiyjBfNgsMNmchwSX6urLSL7wShcUqAang=="], + "lint-staged": ["lint-staged@16.2.6", "", { "dependencies": { "commander": "^14.0.1", "listr2": "^9.0.5", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", "pidtree": "^0.6.0", "string-argv": "^0.3.2", "yaml": "^2.8.1" }, "bin": { "lint-staged": "bin/lint-staged.js" } }, "sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw=="], - "listr2": ["listr2@9.0.4", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-1wd/kpAdKRLwv7/3OKC8zZ5U8e/fajCfWMxacUvB79S5nLrYGPtUI/8chMQhn3LQjsRVErTb9i1ECAwW0ZIHnQ=="], + "listr2": ["listr2@9.0.5", "", { "dependencies": { "cli-truncate": "^5.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", "log-update": "^6.1.0", "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" } }, "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g=="], "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="], diff --git a/package.json b/package.json index fff28f91..75467f63 100644 --- a/package.json +++ b/package.json @@ -112,7 +112,7 @@ "expo-dev-client": "5.2.4", "expo-doctor": "1.17.11", "husky": "9.1.7", - "lint-staged": "16.2.5", + "lint-staged": "16.2.6", "react-test-renderer": "19.1.1", "typescript": "5.8.3" }, From e117e98c8e7f921bedee71f7d888ef2a1d3930ae Mon Sep 17 00:00:00 2001 From: Chris <182387676+whoopsi-daisy@users.noreply.github.com> Date: Sat, 25 Oct 2025 15:40:59 +0200 Subject: [PATCH 21/22] docs: readme.md Added translations, updated prerequisites, fixed Discord links, and minor tweaks --- README.md | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 550f5649..90349db4 100644 --- a/README.md +++ b/README.md @@ -82,13 +82,23 @@ To access the Streamyfin beta, you need to subscribe to the Member tier (or high ### βš™οΈ Prerequisites -- Confirm your Jellyfin server is running -- Verify your device is on the same network as the Jellyfin server +- Your device is on the same network as the Jellyfin server (for local connections) +- Your Jellyfin server is up and running with remote access enabled if you plan to connect from outside your local network +- Your server version is up to date (older versions may cause compatibility issues) +- You have a valid Jellyfin user account with access to the media libraries you want to view +- If using features such as **downloads** or **Seerr integration**, confirm the required plugins are installed and configured on your Jellyfin server ## πŸ™Œ Contributing We welcome contributions that improve Streamyfin. Start by forking the repository and submitting a pull request. For major changes or new features, please open an issue first to discuss your ideas and ensure alignment with the project. +## 🌍 Translations + +[![Crowdin Translation Status](https://badges.crowdin.net/streamyfin/localized.svg)](https://crowdin.com/project/streamyfin) + +Streamyfin is available in multiple languages, and we’re always looking for contributors to help make the app accessible worldwide. +You can contribute translations directly on our [Crowdin project page](https://crowdin.com/project/streamyfin). + ### πŸ‘¨β€πŸ’» Development Info 1. Use node `>20` @@ -105,13 +115,11 @@ For the TV version suffix the npm commands with `:tv`. ## πŸ‘‹ Get in Touch with Us -Feel free to join our Discord server: [![Join our Discord](https://dcbadge.limes.pink/api/server/https://discord.gg/BuGG9ZNhaE?style=flat-square)](https://discord.gg/BuGG9ZNhaE) +Need assistance or have any questions? -Need support or have any questions: - -- GitHub Issues: Report bugs or request features [here](https://github.com/streamyfin/streamyfin/issues) -- Email: Reach out at [developer@streamyfin.app](mailto:developer@streamyfin.app) -- Discord: Join our server at +- **Discord:** [Join our server](https://discord.gg/BuGG9ZNhaE) +- **GitHub Issues:** [Report bugs or request features](https://github.com/streamyfin/streamyfin/issues) +- **Email:** [developer@streamyfin.app](mailto:developer@streamyfin.app) ## ❓ FAQ From 6c722e1fd9bfedc67073a191284ce0a5109643af Mon Sep 17 00:00:00 2001 From: Uruk Date: Sat, 25 Oct 2025 16:06:14 +0200 Subject: [PATCH 22/22] fix: remove trailing space from translation key Removes extraneous whitespace at the end of the "Enable Marlin Search" translation string to ensure consistent formatting across the localization file. --- translations/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/en.json b/translations/en.json index 1b9a9a96..15587c99 100644 --- a/translations/en.json +++ b/translations/en.json @@ -218,7 +218,7 @@ } }, "marlin_search": { - "enable_marlin_search": "Enable Marlin Search ", + "enable_marlin_search": "Enable Marlin Search", "url": "URL", "server_url_placeholder": "http(s)://domain.org:port", "marlin_search_hint": "Enter the URL for the Marlin server. The URL should include http or https and optionally the port.",