diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index 5fb7262..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1,10 +0,0 @@ -# Dependencies -node_modules/ - -# macOS -.DS_Store - -# VitePress' dev server cache -docs/.vitepress/cache -# VitePress' production build -docs/.vitepress/dist diff --git a/docs/.prettierrc.json b/docs/.prettierrc.json deleted file mode 100644 index 8af31cd..0000000 --- a/docs/.prettierrc.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "tabWidth": 4, - "proseWrap": "always" -} diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index b531784..0000000 --- a/docs/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# Docs - -Help and documentation for Ente's products. - -You can find the live version of these at -**[help.ente.io](https://help.ente.io)**. - -## Quick edits - -You can edit these files directly on GitHub and open a pull request. -[help.ente.io](https://help.ente.io) will automatically get updated with your -changes in a few minutes after your pull request is merged. - -## Running locally - -The above workflow is great since it doesn't require you to setup anything on -your local machine. But if you plan on contributing frequently, you might find -it easier to run things locally. - -Clone this repository - -```sh -git clone https://github.com/ente-io/ente -``` - -Change to this directory - -```sh -cd ente/docs -``` - -Install dependencies - -```sh -yarn install -``` - -Then start a local server - -```sh -yarn dev -``` - -For an editor, VSCode is a good choice. Also install the Prettier extension for -VSCode, and set VSCode to format on save. This way the editor will automatically -format and wrap the text using the project's standard, so you can just focus on -the content. You can also format without VSCode by using the `yarn pretty` -command. - -## Have fun! - -If you're unsure about how to do something, just look around in the other files -and copy paste whatever seems to match the look of what you're trying to do. And -remember, writing docs should not be a chore, have fun! diff --git a/docs/docs/.vitepress/config.ts b/docs/docs/.vitepress/config.ts deleted file mode 100644 index a2df3c2..0000000 --- a/docs/docs/.vitepress/config.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { defineConfig } from "vitepress"; -import { sidebar } from "./sidebar"; - -// https://vitepress.dev/reference/site-config -export default defineConfig({ - title: "Ente Help", - description: "Documentation and help for Ente's products", - head: [["link", { rel: "icon", type: "image/png", href: "/favicon.png" }]], - cleanUrls: true, - ignoreDeadLinks: "localhostLinks", - vite: { - build: { - rollupOptions: { - external: ['client-museum-s3.png'] // Added to handle static asset import - } - } - }, - themeConfig: { - // We use the default theme (with some CSS color overrides). This - // themeConfig block can be used to further customize the default theme. - // - // https://vitepress.dev/reference/default-theme-config - logo: "/logo.png", - externalLinkIcon: true, - editLink: { - pattern: - "https://github.com/ente-io/ente/edit/main/docs/docs/:path", - }, - search: { - provider: "local", - options: { - detailedView: true, - }, - }, - sidebar: sidebar, - socialLinks: [ - { icon: "github", link: "https://github.com/ente-io/ente/" }, - { icon: "twitter", link: "https://twitter.com/enteio" }, - { icon: "discord", link: "https://discord.gg/z2YVKkycX3" }, - ], - }, -}); diff --git a/docs/docs/.vitepress/sidebar.ts b/docs/docs/.vitepress/sidebar.ts deleted file mode 100644 index 40123e4..0000000 --- a/docs/docs/.vitepress/sidebar.ts +++ /dev/null @@ -1,334 +0,0 @@ -// When adding new pages, they need to be manually inserted into their -// appropriate place here. - -export const sidebar = [ - { - text: "Photos", - items: [ - { text: "Introduction", link: "/photos/" }, - { - text: "Features", - collapsed: true, - items: [ - { text: "Albums", link: "/photos/features/albums" }, - { text: "Archiving", link: "/photos/features/archive" }, - { - text: "Background sync", - link: "/photos/features/background", - }, - { text: "Backup", link: "/photos/features/backup" }, - { text: "Cast", link: "/photos/features/cast/" }, - { - text: "Collaboration", - link: "/photos/features/collaborate", - }, - { - text: "Collecting photos", - link: "/photos/features/collect", - }, - { - text: "Deduplicate", - link: "/photos/features/deduplicate", - }, - { - text: "Family plans", - link: "/photos/features/family-plans", - }, - { - text: "Free up space", - link: "/photos/features/free-up-space/", - }, - { text: "Hidden photos", link: "/photos/features/hide" }, - { - text: "Legacy", - link: "/photos/features/legacy/", - }, - { - text: "Location tags", - link: "/photos/features/location-tags", - }, - { - text: "Machine learning", - link: "/photos/features/machine-learning", - }, - { text: "Map", link: "/photos/features/map" }, - { - text: "Passkeys", - link: "/photos/features/passkeys", - }, - { - text: "Public link", - link: "/photos/features/public-link", - }, - { text: "Quick link", link: "/photos/features/quick-link" }, - { - text: "Referral program", - link: "/photos/features/referral-program/", - }, - { text: "Sharing", link: "/photos/features/share" }, - { text: "Trash", link: "/photos/features/trash" }, - { - text: "Uncategorized", - link: "/photos/features/uncategorized", - }, - { - text: "Watch folders", - link: "/photos/features/watch-folders", - }, - ], - }, - { - text: "Migration", - collapsed: true, - items: [ - { - text: "Introduction", - link: "/photos/migration/", - }, - - { - text: "From Google Photos", - link: "/photos/migration/from-google-photos/", - }, - { - text: "From Apple Photos", - link: "/photos/migration/from-apple-photos/", - }, - { - text: "From Amazon Photos", - link: "/photos/migration/from-amazon-photos", - }, - { - text: "From your hard disk", - link: "/photos/migration/from-local-hard-disk", - }, - { - text: "Exporting your data", - link: "/photos/migration/export/", - }, - ], - }, - { - text: "FAQ", - collapsed: true, - items: [ - { text: "General", link: "/photos/faq/general" }, - { text: "Installation", link: "/photos/faq/installing" }, - { - text: "Export", - link: "/photos/faq/export", - }, - { - text: "Metadata", - link: "/photos/faq/metadata", - }, - { - text: "Security and privacy", - link: "/photos/faq/security-and-privacy", - }, - { - text: "Subscription and plans", - link: "/photos/faq/subscription", - }, - { - text: "Hide vs archive", - link: "/photos/faq/hidden-and-archive", - }, - { - text: "Face recognition", - link: "/photos/faq/face-recognition", - }, - { - text: "Video streaming", - link: "/photos/faq/video-streaming", - }, - ], - }, - { - text: "Troubleshooting", - collapsed: true, - items: [ - { - text: "Desktop install", - link: "/photos/troubleshooting/desktop-install/", - }, - { - text: "Files not uploading", - link: "/photos/troubleshooting/files-not-uploading", - }, - { - text: "Missing thumbnails", - link: "/photos/troubleshooting/thumbnails", - }, - { - text: "Large uploads", - link: "/photos/troubleshooting/large-uploads", - }, - { - text: "Network drives", - link: "/photos/troubleshooting/nas", - }, - { - text: "Sharing debug logs", - link: "/photos/troubleshooting/sharing-logs", - }, - ], - }, - ], - }, - { - text: "Auth", - items: [ - { text: "Introduction", link: "/auth/" }, - { - text: "FAQ", - collapsed: true, - items: [ - { text: "General", link: "/auth/faq/" }, - { text: "Installation", link: "/auth/faq/installing" }, - { - text: "Enteception", - link: "/auth/faq/enteception/", - }, - { - text: "Privacy disclosure", - link: "/auth/faq/privacy-disclosure/", - }, - ], - }, - { - text: "Migration", - collapsed: true, - items: [ - { text: "Introduction", link: "/auth/migration-guides/" }, - { - text: "From Authy", - link: "/auth/migration-guides/authy/", - }, - { - text: "From Steam", - link: "/auth/migration-guides/steam/", - }, - { - text: "From others", - link: "/auth/migration-guides/import", - }, - { - text: "Exporting your data", - link: "/auth/migration-guides/export", - }, - ], - }, - { - text: "Troubleshooting", - items: [ - { - text: "Windows login", - link: "/auth/troubleshooting/windows-login", - }, - ], - }, - ], - }, - { - text: "Self hosting", - collapsed: true, - items: [ - { text: "Getting started", link: "/self-hosting/" }, - { - text: "System requirements", - link: "/self-hosting/guides/system-requirements", - }, - { - text: "Guides", - items: [ - { text: "Introduction", link: "/self-hosting/guides/" }, - { - text: "Connect to custom server", - link: "/self-hosting/guides/custom-server/", - }, - { - text: "Hosting the web app", - link: "/self-hosting/guides/web-app", - }, - { - text: "Configuring S3", - link: "/self-hosting/guides/configuring-s3", - }, - { - text: "Hosting Ente with external S3 (Community)", - link: "/self-hosting/guides/external-s3", - }, - { - text: "DB migration", - link: "/self-hosting/guides/db-migration", - }, - { - text: "Hosting Ente without Docker", - link: "/self-hosting/guides/standalone-ente", - }, - { - text: "Ente via Tailscale (Community)", - link: "/self-hosting/guides/Tailscale.md", - }, - { - text: "Configure CLI for Self Hosted Instance", - link: "/self-hosting/guides/selfhost-cli", - }, - { - text: "Administering your server", - link: "/self-hosting/guides/admin", - }, - - { - text: "Mobile build", - link: "/self-hosting/guides/mobile-build", - }, - ], - }, - { - text: "FAQ", - items: [ - { text: "General", link: "/self-hosting/faq/" }, - { - text: "Verification code", - link: "/self-hosting/faq/otp", - }, - { - text: "Shared albums", - link: "/self-hosting/faq/sharing", - }, - { - text: "Backups", - link: "/self-hosting/faq/backup", - }, - ], - }, - { - text: "Troubleshooting", - items: [ - { - text: "Uploads", - link: "/self-hosting/troubleshooting/uploads", - }, - { - text: "Yarn", - link: "/self-hosting/troubleshooting/yarn", - }, - { - text: "Ente CLI Secrets", - link: "/self-hosting/troubleshooting/keyring", - }, - ], - }, - ], - }, - { - text: "About", - link: "/about/", - }, - { - text: "Contribute", - link: "/about/contribute", - }, -]; diff --git a/docs/docs/.vitepress/theme/custom.css b/docs/docs/.vitepress/theme/custom.css deleted file mode 100644 index 41132ee..0000000 --- a/docs/docs/.vitepress/theme/custom.css +++ /dev/null @@ -1,19 +0,0 @@ -:root { - --ente-theme-color: #1db954; - --ente-theme-color-alt: #00b33c; - - --vp-theme-color: var(--ente-theme-color); - --vp-c-brand: var(--ente-theme-color); - --vp-c-brand-1: var(--ente-theme-color); - --vp-c-brand-2: var(--ente-theme-color-alt); - --vp-home-hero-name-color: var(--ente-theme-color); - --vp-c-brand-light: var(--ente-theme-color); - --vp-button-brand-border: var(--ente-theme-color); - --vp-button-brand-bg: var(--ente-theme-color); - --vp-button-brand-text: #191919; - --vp-button-brand-hover-border: var(--ente-theme-color-alt); - --vp-button-brand-hover-bg: #191919; - --vp-button-brand-hover-text: #e5e5e5; - --vp-local-search-highlight-bg: var(--ente-theme-color); - --docsearch-hit-active-color: #191919; -} diff --git a/docs/docs/.vitepress/theme/index.js b/docs/docs/.vitepress/theme/index.js deleted file mode 100644 index c495bc1..0000000 --- a/docs/docs/.vitepress/theme/index.js +++ /dev/null @@ -1,4 +0,0 @@ -import DefaultTheme from "vitepress/theme"; -import "./custom.css"; - -export default DefaultTheme; diff --git a/docs/docs/about/contribute.md b/docs/docs/about/contribute.md deleted file mode 100644 index 3addd2e..0000000 --- a/docs/docs/about/contribute.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Contribute -description: Details about how to contribute to Ente's docs ---- - -# Contributing - -To contribute to these docs, you can use the "Edit this page" button at the -bottom of each page. This will allow you to directly edit the markdown file that -is used to generate this documentation and open a quick pull request directly -from GitHub's UI. - -If you're more comfortable in contributing with your text editor, see the -`docs/` folder of our GitHub repository, -[github.com/ente-io/ente](https://github.com/ente-io/ente). diff --git a/docs/docs/about/ducky.png b/docs/docs/about/ducky.png deleted file mode 100644 index 9912529..0000000 Binary files a/docs/docs/about/ducky.png and /dev/null differ diff --git a/docs/docs/about/index.md b/docs/docs/about/index.md deleted file mode 100644 index 18455f6..0000000 --- a/docs/docs/about/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: About Ente -description: > - An overview of Ente: the company, and the people behind it, and the products - that we make. ---- - -# About - -Ente is a end-to-end encrypted platform for privately, reliably, and securely -storing your data on the cloud. On top of this platform, Ente offers two -products: - -- **Ente Photos** - An alternative to Google Photos and Apple Photos - -- **Ente Auth** - A free 2FA alternative to Authy - -Both these apps are available for all desktop (Linux, Mac, Windows) and mobile -(Android, iOS and F-Droid) platforms. They also work directly in your web -browser without you needing to install anything. - -More products are in the pipeline. - -## History - -Ente was the founded by Vishnu Mohandas (he's also Ente's CEO) in response to -privacy concerns with major tech companies. The underlying motivation was the -understanding that big tech had no incentive to fix their act, but with -end-to-end encrypted cross platform apps, there was a way for people to take -back control over their own data without sacrificing on features. - -### What does Ente mean? - -In Malayalam, Vishnu's native language, "ente" means "mine". Thus "Ente Photos" -has the literal meaning "my photos". - -This was a good name, but still Vishnu looked around for better ones. But one -day, he discovered that "ente" means "duck" in German. This unexpected -connection sealed the deal. We should ask him why he likes ducks so much, but -apparently he does, so this dual meaning ("mine" / "duck") led him to finalize -the name, and also led to the adoption of "Ducky", Ente's mascot: - -
- -![Ente's mascot, Ducky](ducky.png){width=200px} - -
- -For the full origin story of Ducky you can check out -[this blog post](https://ente.io/blog/ducky/). - -### How do I pronounce Ente? - -en-_tay_. Like cafe. - -## Get in touch - -If you have a support query that is not answered by these docs, please reach out -to our Customer Support by sending an email to support@ente.io - -To stay up to date with new product launches, and behind the scenes details of -how we're building Ente, you can read our [blog](https://ente.io/blog) (or -subscribe to it via [RSS](https://ente.io/blog/rss.xml)) - -To suggest new features and/or offer your perspective on how we should design -planned and upcoming features, use our -[GitHub discussions](https://github.com/ente-io/ente/discussions) - -Or if you'd just like to hang out, join our -[Discord](https://discord.gg/z2YVKkycX3), follow us on -[Twitter](https://twitter.com/enteio) or give us a shout out on -[Mastodon](https://mstdn.social/@ente) diff --git a/docs/docs/auth/faq/enteception/index.md b/docs/docs/auth/faq/enteception/index.md deleted file mode 100644 index 1155986..0000000 --- a/docs/docs/auth/faq/enteception/index.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Enteception -description: Using Ente Auth to store 2FA for your Ente account ---- - -# Enteception - -Your 2FA codes are in Ente Auth, but if you enable 2FA for your Ente account -itself, where should the 2FA for your Ente account be stored? - -There are multiple answers, none of which are better or worse, they just depend -on your situation and risk tolerance. - -If you are using the same account for both Ente Photos and Ente Auth and have -enabled 2FA from the Ente Photos app, we recommend that you ensure you store -your recovery key in a safe place (writing it down on a paper is a good idea). -This key can be used to bypass Ente 2FA in case you are locked out. - -Another option is to use a separate account for Ente Auth. - -Also, taking exporting the encrypted backup is also another good way to reduce -the risk (you can easily import the encrypted backup without signing in). - -Finally, we have on our roadmap some features like adding support for -emergency/legacy-contacts, passkeys, and hardware security keys. Beyond other -benefits, all of these would further reduce the risk of users getting locked out -of their accounts. - -## Email verification for Ente Auth - -There is a related ouroboros scenario where if email verification is enabled in -the Ente Auth app _and_ the 2FA for your email provider is stored in Ente Auth, -then you might need a code from your email to log into Ente Auth, but to log -into your email you needed the Auth code. - -To prevent people from accidentally locking themselves out this way, email -verification is disabled by default in the auth app. We also try to show a -warning when you try to enable email verification in the auth app: - -
- -![Warning shown when enabling 2FA in Ente Auth](warning.png){width=400px} - -
- -The solution here are the same as the Ente-in-Ente case. - -## TL;DR; - -Ideally, you should **note down your recovery key in a safe place (may be on a -paper)**, using which you will be able to by-pass the two factor. diff --git a/docs/docs/auth/faq/enteception/warning.png b/docs/docs/auth/faq/enteception/warning.png deleted file mode 100644 index c3dba29..0000000 Binary files a/docs/docs/auth/faq/enteception/warning.png and /dev/null differ diff --git a/docs/docs/auth/faq/index.md b/docs/docs/auth/faq/index.md deleted file mode 100644 index 5e63190..0000000 --- a/docs/docs/auth/faq/index.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: FAQ - Auth -description: Frequently asked questions about Ente Auth ---- - -# Frequently Asked Questions - -### How secure is Ente Auth? - -All codes you backup via Ente is stored with end-to-end encryption. This means -only you can access your codes. Our apps are open source and our cryptography -has been externally audited. - -### How can I delete or edit codes? - -You can delete or edit a code by long pressing (or right clicking on desktop) on -that item. - -### How can I support this project? - -You can support the development of this project by subscribing to our Photos app -at [ente.io](https://ente.io). - -### How can I enable FaceID lock in Ente Auth? - -You can enable FaceID lock under Settings → Security → Lockscreen. - -### How secure is the lock screen provided by Ente Auth? - -Auth's lock screen acts as a barrier to prevent an attacker from accessing the -contents of the app. It does not introduce a layer of cryptographic security. - -### Why do the desktop and mobile apps display different codes? - -Please verify that the time on both your mobile and desktop is the same. - -The codes depend on time. If the time is the same on both your browser and -mobile, the codes you see will be the same. - -Usually, this discrepancy occurs because the time in your browser might be -incorrect. In particular, multiple users have reported that Firefox provides -incorrect time when certain privacy settings are enabled. - -### Can I access my codes on web? - -You can access your codes on the web at [auth.ente.io](https://auth.ente.io). - -### Does Ente Auth require an account? - -No, Ente Auth does not require an account. You can choose to use the app without -backups if you prefer. - -### Can I use Ente Auth on multiple devices and sync them? - -Yes, you can download Ente Auth on multiple devices and sync the codes with -end-to-end encryption. - -### What information about my codes is stored on Ente server? - -Due to E2EE, the server doesn't know anything about your codes. Everything is -encrypted, including the tags, type, account, issuer, notes, pinned or trash -status, etc. - -### What does it mean when I receive a message saying that my current device isn't powerful enough to verify my password? - -This means that the parameters that were used to derive your master-key on your -original device, are incompatible with your current device (likely because it's -less powerful). - -If you recover your account using your current device and reset the password, a -new key will be generated with different parameters. This new key will be -equally strong and compatible with both devices. diff --git a/docs/docs/auth/faq/installing.md b/docs/docs/auth/faq/installing.md deleted file mode 100644 index 5e1089f..0000000 --- a/docs/docs/auth/faq/installing.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Installing Ente Auth -description: Steps to install Ente Auth ---- - -# Android - -Our Android apps are distributed over the following channels. - -### PlayStore - -You can install Auth directly from -[PlayStore](https://play.google.com/store/apps/details?id=io.ente.auth). - -### F-Droid - -Reproducible builds for Auth are available on -[F-Droid](https://f-droid.org/packages/io.ente.auth/). - -> [!NOTE] -> -> Releases over F-Droid are generally slower since they run their own build -> servers. You can donate to F-Droid [here](https://f-droid.org/en/donate). - -### GitHub - -Latest releases are built straight from the source and made available over -[GitHub](https://github.com/ente-io/ente/releases?q=tag%3Aauth-v4). - -These builds will notify you whenever a new release is available and will help -you stay updated. - -### Obtainium - -You can setup [Obtainium](https://github.com/ImranR98/Obtainium) to track our -GitHub releases by -[clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.auth.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Auth%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-auth*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) -to add it instantly. - -Alternatively, you can follow these steps: - -1. Click **Add App** to open a new app config screen -2. Enter `https://github.com/ente-io/ente` in the **App Source URL** field -3. Enable the **Retain release order** from API toggle -4. Scroll down to the **Filter APKs by Regular Expression** field and enter - `ente-auth*` -5. Enable the **Attempt to filter APKs by CPU architecture** if possible toggle -6. Select any applicable app category labels you may have setup -7. Enable the **Try inferring app ID from source code** toggle -8. Scroll back to the top and click **Add** to complete the setup - -
- ---- - -
- -# iOS - -You can install Ente Auth on Apple devices from -[AppStore](https://apps.apple.com/us/app/ente-auth/id6444121398). - -
- ---- - -
- -# Desktop - -You can grab the latest version of Ente Auth for Mac, Windows and Linux from -[GitHub](https://github.com/ente-io/ente/releases?q=tag%3Aauth-v4). - -
- ---- - -
- -# Web - -Latest versions of our web app are available at -[auth.ente.io](https://auth.ente.io). - -
- ---- - -
- -# CLI - -Ente's CLI is distributed directly over -[GitHub](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0). diff --git a/docs/docs/auth/faq/privacy-disclosure/appstore-privacy-disclosure.png b/docs/docs/auth/faq/privacy-disclosure/appstore-privacy-disclosure.png deleted file mode 100644 index 0676266..0000000 Binary files a/docs/docs/auth/faq/privacy-disclosure/appstore-privacy-disclosure.png and /dev/null differ diff --git a/docs/docs/auth/faq/privacy-disclosure/index.md b/docs/docs/auth/faq/privacy-disclosure/index.md deleted file mode 100644 index 7ed0bc0..0000000 --- a/docs/docs/auth/faq/privacy-disclosure/index.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Apple's app privacy disclosure -description: Breakdown of the app privacy disclosure submitted to AppStore ---- - -# Apple's app privacy disclosure - -Here is a breakdown of the types of data that are being collected as per -AppStore's privacy disclosure. - -
- -![Privacy disclosure submitted to -AppStore](appstore-privacy-disclosure.png){width=620px} - -
- -## Data Linked to You - -> [!NOTE] -> -> Only if you choose to create an account to backup your codes are the following -> details collected. - -### Contact Info - -This is your email address, used for account creation and communication. - -### User Content - -This are your 2FA secrets, end-to-end encrypted with a key that only you have -access to. - -### Identifiers - -This is your user ID generated by our server during sign up. - -## Data Not Linked to You - -> [!NOTE] -> -> Only if you opt-in to **Crash reporting** are the following details collected. - -### Diagnostics - -These are anonymized error reports and other diagnostics data that make it -easier for us to detect and fix any issues. - ---- - -## Summary - -Ente Auth collects no data by default. - -For more details, please refer to our -[full privacy policy](https://ente.io/privacy). diff --git a/docs/docs/auth/index.md b/docs/docs/auth/index.md deleted file mode 100644 index 8800c54..0000000 --- a/docs/docs/auth/index.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Ente Auth -description: User guide for Ente Auth ---- - -# Ente Auth - -Ente Auth is a free, cross-platform, end-to-end encrypted authenticator app. You -can use it to safely store your 2FA codes (second-factor authentication codes). diff --git a/docs/docs/auth/migration-guides/authy/index.md b/docs/docs/auth/migration-guides/authy/index.md deleted file mode 100644 index 30b8c55..0000000 --- a/docs/docs/auth/migration-guides/authy/index.md +++ /dev/null @@ -1,237 +0,0 @@ ---- -title: Migrating from Authy -description: Guide for importing your existing Authy 2FA tokens into Ente Auth ---- - -# Migrating from Authy - -A guide written by Green, an ente.io lover - -> [!WARNING] -> -> Authy has dropped all support for its desktop apps. It is no longer possible -> to export data from Authy using methods 1 and 2. You will either need a rooted -> android phone or you will need to reconfigure 2FA for each of your accounts. - ---- - -Migrating from Authy can be tiring, as you cannot export your 2FA codes through -the app, meaning that you would have to reconfigure 2FA for all of your accounts -for your new 2FA authenticator. However, easier ways exist to export your codes -out of Authy. This guide will cover two of the most used methods for migrating -from Authy to Ente Authenticator. - -> [!CAUTION] -> -> Under any circumstances, do **NOT** share any JSON and TXT files generated -> using this guide, as they contain your **unencrypted** TOTP secrets! -> -> Also, there is **NO GUARANTEE** that these methods will export ALL of your -> codes. Make sure that all your accounts have been imported successfully before -> deleting any codes from your Authy account! - ---- - -## Method 1: Use Neeraj's export tool - -**Who should use this?** General users who want to save time by skipping the -hard (and rather technical) parts of the process.

- -One way to export is to -[use this tool by Neeraj](https://github.com/ua741/authy-export/releases/tag/v0.0.4) -to simplify the process and skip directly to importing to Ente Authenticator. - -To export from Authy, download the tool for your specific OS, then type the -following in your terminal: - -``` -./ -``` - -Assuming the filename of the binary remains unmodified and the working directory -of the terminal is the location of the binary, you should type this for MacOS: - -> [!NOTE] -> -> On Apple Silicon devices, Rosetta 2 may be required to run the binary. - -``` -./authy-export-darwin-amd64 authy_codes.txt -``` - -For Linux: - -``` -./authy-export-linux-amd64 authy_codes.txt -``` - -For Windows: - -``` -./authy-export-windows-amd64.exe authy_codes.txt -``` - -This will generate a text file called `authy_codes.txt`, which contains your -Authy codes in Ente's plaintext export format. You can now import this to Ente -Authenticator! - -## Method 2: Use gboudreau's GitHub guide - -**Who should use this?** Power users who have spare time on their hands and -prefer a more "known and established" solution to exporting Authy codes.

- -A user on GitHub (gboudreau) wrote a guide to export codes from Authy (morpheus -on Discord found this and showed it to us), so we are going to be using that for -the migration. - -To export your data, please follow -[this guide](https://gist.github.com/gboudreau/94bb0c11a6209c82418d01a59d958c93). - -This will create a JSON file called `authy-to-bitwarden-export.json`, which -contains your Authy codes in Bitwarden's export format. You can now import this -to Ente Authenticator! - -### Method 2.1: If the export worked, but the import didn't - -> [!NOTE] -> -> This is intended only for users who successfully exported their codes using -> the guide in method 2, but could not import it to Ente Authenticator for -> whatever reason. If the import was successful, or you haven't tried to import -> the codes yet, ignore this section. -> -> If the export itself failed, try using -> [**method 1**](#method-1-use-neeraj-s-export-tool) instead. - -Usually, you should be able to import Bitwarden exports directly into Ente -Authenticator. In case this didn't work for whatever reason, I've written a -program in Python that converts the JSON file into a TXT file that Ente -Authenticator can use, so you can try importing using plain text import instead. - -You can download my program -[here](https://github.com/gweeeen/ducky/blob/main/duckys_other_stuff/authy_to_ente.py), -or you can copy the program below: - -```py -import json -import os - -totp = [] - -accounts = json.load(open('authy-to-bitwarden-export.json','r',encoding='utf-8')) - -for account in accounts['items']: - totp.append(account['login']['totp']+'\n') - -writer = open('auth_codes.txt','w+',encoding='utf-8') -writer.writelines(totp) -writer.close() - -print('Saved to ' + os.getcwd() + '/auth_codes.txt') -``` - -To convert the file with this program, you will need to install -[Python](https://www.python.org/downloads/) on your computer. - -Before you run the program, make sure that both the Python program and the JSON -file are in the same directory, otherwise this will not work! - -To run the Python program, open it in your IDE and run the program, or open your -terminal and type `python3 authy_to_ente.py` (MacOS/Linux, or any other OS that -uses bash) or `py -3 authy_to_ente.py` (Windows). Once you run it, a new TXT -file called `auth_codes.txt` will be generated. You can now import your data to -Ente Authenticator! - ---- - -You should now have a TXT file (method 1, method 2.1) or a JSON file (method 2) -that countains your TOTP secrets, which can now be imported into Ente -Authenticator. To import your codes, please follow one of the steps below, -depending on which method you used to export your codes. - -## Method 3 - -**Who should use this?** Power users who have spare time on their hands and who -have a rooted android phone running android 6 or newer that passes Play -Integrity. - -This way of exporting your data will require a rooted phone. - -### Exporting codes using Android OTP Extractor - -This uses the tool -[Android OTP Extractor](https://github.com/puddly/android-otp-extractor) from -[puddly](https://github.com/puddly) on GitHub - -1. Install python 3 and adb to your computer you can download binaries for it - from [Google](https://developer.android.com/tools/releases/platform-tools) -2. Add adb to your path. 2.1. On windows search for "Edit the system environment - variables" 2.2. Click "Environment Variables" 2.3. At the top in "User - variables" click the "path" variable and then click "Edit" 2.4. Click "New" - and type the path to where you extracted the Platform Tools -3. Enable USB debugging on the Android Phone 3.1. Open settings 3.2. Open "About - phone" (Might say tablet depending on what device you use) (skip steps 3.2 - and 3.3 if you already have developer options enabled) 3.3. Tap "Build - Number" 7 or more times 3.4. Go to the main settings page 3.5. Open "System - Settings" 3.6. Open "Developer options" 3.7. Enable "USB Debugging" 3.8. On - your computer verify the phone is connected by running `adb devices` (You may - need to tap "Allow" on the device to allow the computer to access it) -4. Install Android OTP Extractor using pip - ``` - pip install git+https://github.com/puddly/android-otp-extractor - ``` -5. Install Authy from the playstore and login to your account -6. Run the command below to export the TOTP to QRCodes and URLS - ``` - python -m android_otp_extractor --prepend-issuer --include authy - ``` - -### Exporting codes using Aegis Authenticator - -This uses the tool [Aegis Authenticator](https://getaegis.app/) from -[beemdevelopment](https://github.com/beemdevelopment). - -1. Install Authy and login on your rooted phone. -2. Install Aegis Authenticator from the - [Google Play Store](https://play.google.com/store/apps/details?id=com.beemdevelopment.aegis). -3. In the app, click the three dots in the top right corner and click "Import & - Export". -4. Click "Import from another app" and choose Authy. -5. The app will ask for root permissions, then automatically import your codes - from Authy. -6. Then export the codes from Aegis Authenticator to `json` or `txt` using the - "Export to file" option in the "Import & Export" menu. - -## Importing to Ente Authenticator (Method 1, method 2.1) - -1. Copy the TXT file to one of your devices with Ente Authenticator. -2. Log in to your account (if you haven't already), or press "Use without - backups". -3. Open the navigation menu (hamburger button on the top left), then press - "Data", then press "Import codes". -4. Select the "Plain text" option. -5. Select the TXT file that was made earlier. - -## Importing to Ente Authenticator (Method 2) - -1. Copy the JSON file to one of your devices with Ente Authenticator. -2. Log in to your account (if you haven't already), or press "Use without - backups". -3. Open the navigation menu (hamburger button on the top left), then press - "Data", then press "Import codes". -4. Select the "Bitwarden" option. -5. Select the JSON file that was made earlier. - -If this didn't work, refer to -[**method 2.1**](#method-2-1-if-the-export-worked-but-the-import-didn-t).

- -## Importing to Ente Authenticator (Method 3) - -1. Open Ente Authenticator on your phone -2. Log in to your account (if you haven't already), or press "Use without - backups". -3. Click the add button in the bottom right of the app. -4. Select "Scan a QR code" and scan the code from the browser. - -Now that your secrets are safely stored, I recommend you delete the unencrypted -JSON and TXT files that were made during the migration process for security. diff --git a/docs/docs/auth/migration-guides/export.md b/docs/docs/auth/migration-guides/export.md deleted file mode 100644 index e3d922d..0000000 --- a/docs/docs/auth/migration-guides/export.md +++ /dev/null @@ -1,91 +0,0 @@ ---- -title: Exporting your data from Ente Auth -description: Guide for exporting your 2FA codes out from Ente Auth ---- - -# Exporting your data out of Ente Auth - -## Auth Encrypted Export format - -### Overview - -When we export the auth codes, the data is encrypted using a key derived from -the user's password. This document describes the JSON structure used to organize -exported data, including versioning and key derivation parameters. - -### Export JSON Sample - -```json -{ - "version": 1, - "kdfParams": { - "memLimit": 4096, - "opsLimit": 3, - "salt": "example_salt" - }, - "encryptedData": "encrypted_data_here", - "encryptionNonce": "nonce_here" -} -``` - -The main object used to represent the export data. It contains the following -key-value pairs: - -- `version`: The version of the export format. -- `kdfParams`: Key derivation function parameters. -- `encryptedData"`: The encrypted authentication data. -- `encryptionNonce`: The nonce used for encryption. - -#### Version - -Export version is used to identify the format of the export data. - -##### Ver: 1 - -- KDF Algorithm: `ARGON2ID` -- Decrypted data format: `otpauth://totp/...`, separated by a new line. -- Encryption Algo: `XChaCha20-Poly1305` - -##### Key Derivation Function Params (KDF) - -This section contains the parameters that were using during KDF operation: - -- `memLimit`: Memory limit for the algorithm. -- `opsLimit`: Operations limit for the algorithm. -- `salt`: The salt used in the derivation process. - -##### Encrypted Data - -As mentioned above, the auth data is encrypted using a key that's derived by -using user provided password & kdf params. For encryption, we are using -`XChaCha20-Poly1305` algorithm. - -## Automated backups - -You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#readme) -to automatically backup your Auth codes. - -To export your data, add an account using `ente account add` command. In the -first step, specify `auth` as the app name. At a later point, CLI will also ask -you specify the path where it should write the exported codes. - -You can change the export directory using following command - -``` -ente account update --app auth --email --dir -``` - -## How to use the exported data - -- **Ente Authenticator app**: You can directly import the codes in the Ente - Authenticator app. - - > Settings -> Data -> Import Codes -> Ente Encrypted export. - -- **Decrypt using Ente CLI** : Download the latest version of - [Ente CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0), and run - the following command - -``` - ./ente auth decrypt -``` diff --git a/docs/docs/auth/migration-guides/import.md b/docs/docs/auth/migration-guides/import.md deleted file mode 100644 index 8445f47..0000000 --- a/docs/docs/auth/migration-guides/import.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Migrating from other providers -description: - Guide for importing your existing 2FA tokens into Ente Auth from other - providers ---- - -# Migrating from other providers - ---- - -Ente Auth natively supports imports from many 2FA providers. In addition to the -providers specifically listed in the documentation, the supported providers are: - -- 2FAS Authenticator -- Aegis Authenticator -- Bitwarden -- Google Authenticator -- Raivo OTP -- LastPass - -Details as to how codes may be imported from these providers may be found within -the app. - -> [!NOTE] -> -> Please note that this list may be out of sync, please see the app for the -> latest set of supported providers. - -Ente Auth also supports imports from Auth's own encrypted exports and plain text -files. Plain text files must be in the following format: - -`otpauth://totp/provider.com:you@email.com?secret=YOUR_SECRET` - -The codes can be separated by a comma or a new line. - -So if your provider is not specifically listed, you might be still able to -import from them by first converting the data from your old provider into these -plaintext files and then importing those into Ente. diff --git a/docs/docs/auth/migration-guides/index.md b/docs/docs/auth/migration-guides/index.md deleted file mode 100644 index 24833a2..0000000 --- a/docs/docs/auth/migration-guides/index.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: Migrating to Ente Auth -description: - Guides for migrating your existing 2FA tokens into or out of Ente Auth ---- - -# Migrating to/from Ente Auth - -- [Migrating from Authy](authy/) -- [Importing codes from Steam](steam/) -- [Migrating from other apps](import) -- [Exporting your data out of Ente Auth](export) diff --git a/docs/docs/auth/migration-guides/steam/index.md b/docs/docs/auth/migration-guides/steam/index.md deleted file mode 100644 index 650382b..0000000 --- a/docs/docs/auth/migration-guides/steam/index.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Migrating from Steam Authenticator -description: Guide for importing from Steam Authenticator to Ente Auth ---- - -# Migrating from Steam Authenticator - -> [!WARNING] -> -> Steam Authenticator code is only supported after auth-v3.0.3, check the app's -> version number before migration. - -One way to migrate is to [use this tool by dyc3][releases] to simplify the -process and skip directly to generating a qr code to Ente Authenticator. - -## Download/Install steamguard-cli - -### Windows - -1. Download `steamguard.exe` from the [releases page][releases]. -2. Place `steamguard.exe` in a folder of your choice. For this example, we will - use `%USERPROFILE%\Desktop`. -3. Open Powershell or Command Prompt. The prompt should be at `%USERPROFILE%` - (eg. `C:\Users\`). -4. Use `cd` to change directory into the folder where you placed - `steamguard.exe`. For this example, it would be `cd Desktop`. -5. You should now be able to run `steamguard.exe` by typing - `.\steamguard.exe --help` and pressing enter. - -### Linux - -#### Ubuntu/Debian - -1. Download the `.deb` from the [releases page][releases]. -2. Open a terminal and run this to install it: - -```bash -sudo dpkg -i ./steamguard-cli__amd64.deb -``` - -#### Other Linux - -1. Download `steamguard` from the [releases page][releases] -2. Make it executable, and move `steamguard` to `/usr/local/bin` or any other - directory in your `$PATH`. - -```bash -chmod +x ./steamguard -sudo mv ./steamguard /usr/local/bin -``` - -3. You should now be able to run `steamguard` by typing `steamguard --help` and - pressing enter. - -## Login to Steam account - -Set up a new account with steamguard-cli - -```bash -steamguard setup # set up a new account with steamguard-cli -``` - -## Generate & importing QR codes - -steamguard-cli can then generate a QR code for your 2FA secret. - -```bash -steamguard qr # print QR code for the first account in your maFiles -steamguard -u qr # print QR code for a specific account -``` - -Open Ente Auth, press the '+' button, select `Scan a QR code`, and scan the qr -code. - -You should now have your steam code inside Ente Auth - -[releases]: https://github.com/dyc3/steamguard-cli/releases/latest diff --git a/docs/docs/auth/troubleshooting/windows-login.md b/docs/docs/auth/troubleshooting/windows-login.md deleted file mode 100644 index 7459874..0000000 --- a/docs/docs/auth/troubleshooting/windows-login.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Unable to login on Windows Desktop -description: - Troubleshooting when you are not able to login or register on Ente Auth app - on Windows ---- - -# Windows Login Error - -### HandshakeException: Handshake error in client - -This error usually happens when the Trusted Root certificates on your Windows -machine are outdated. - -To update the Trusted Root Certificates on Windows, you can use the `certutil` -command. Here are the steps to do so: - -1. **Open Command Prompt as Administrator**: - - - Press `Windows + X` and select `Command Prompt (Admin)` or - `Windows PowerShell (Admin)`. - -2. **Run the following command to update the root certificates**: - - ```bash - certutil -generateSSTFromWU roots.sst - ``` - - This command will generate a file named `roots.sst` that contains the latest - root certificates from Windows Update. - -3. **Install the new root certificates**: - - ```bash - certutil -addstore -f ROOT roots.sst - ``` - - This command will add the certificates from the `roots.sst` file to the - Trusted Root Certification Authorities store. - -4. **Clean up**: After the installation, you can delete the `roots.sst` file if - you no longer need it: - ```bash - del roots.sst - ``` - -Make sure to restart your application after updating the certificates to ensure -the changes take effect. - -If the above steps don't resolve the issue, please follow -[this guide](https://woshub.com/updating-trusted-root-certificates-in-windows-10/#h2_3) -to update your trusted root certicates, and try again. diff --git a/docs/docs/de/auth/index.md b/docs/docs/de/auth/index.md deleted file mode 100644 index 1948a91..0000000 --- a/docs/docs/de/auth/index.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Ente Auth -description: Ente Auth-Benutzerhandbuch ---- - -# Ente Auth - -Ente Authenticator ist eine kostenlose, plattformübergreifende, -Ende-zu-Ende-verschlüsselte Authenticator-App für jedermann. Wir sind froh, dass -du hier bist! - -**Please note that this German translation is currently just a placeholder.** -Know German? [Help us fill this in!](/about/contribute). diff --git a/docs/docs/index.md b/docs/docs/index.md deleted file mode 100644 index af5fd2c..0000000 --- a/docs/docs/index.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Home ---- - -# Welcome! - -This site contains documentation and help for Ente Photos and Ente Auth. It -describes various features, and also offers various troubleshooting suggestions. - -Use the **sidebar** menu to navigate to information about the product (Photos or -Auth) you'd like to know more about. Or use the **search** at the top to try and -jump directly to page that might contain the information you need. - -To know more about Ente, see [about](/about/) or visit our website -[ente.io](https://ente.io). diff --git a/docs/docs/photos/faq/export.md b/docs/docs/photos/faq/export.md deleted file mode 100644 index 12e2030..0000000 --- a/docs/docs/photos/faq/export.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -title: Export FAQ -description: Frequently asked questions about keeping extra backups of your data ---- - -# Export - -## How can I backup my data in a local drive outside Ente? - -Yes! You can use our CLI tool or our desktop app to set up exports of your data -to your local drive. This way, you can use Ente in your day to day use, but will -have an additional guarantee that a copy of your original photos and videos are -always available in normal directories and files. - -- You can use [Ente's CLI](https://github.com/ente-io/ente/tree/main/cli#export) - to export your data in a cron job to a location of your choice. The exports - are incremental, and will also gracefully handle interruptions. - -- Similarly, you can use Ente's [desktop app](https://ente.io/download/desktop) - to export your data to a folder of your choice. The desktop app also supports - "continuous" exports, where it will automatically export new items in the - background without you needing to run any other cron jobs. See - [migration/export](/photos/migration/export/) for more details. - -## Does the exported data preserve folder structure? - -Yes. When you export your data for local backup, it will maintain the exact -album structure how you have set up within Ente. - -## Does the exported data preserve metadata? - -Yes, the metadata is written out to a separate JSON file during export. Note -that the original is not modified. For more details, see the -[description of the exported metadata](/photos/faq/metadata#export). - -## Can I do a 2-way sync? - -A two way sync is not currently supported. Attempting to export data to the same -folder that is also being watched by the Ente app will result in undefined -behaviour (e.g. duplicate files, export stalling etc). - -## Why is my export size larger than my backed-up size in Ente? - -One possible reason could be that you have files that are in multiple different -albums. Whenever a file is backed-up to Ente in multiple albums it will still -count only once towards the total storage in Ente. However, during export that -file will be downloaded multiple times to the different folders corresponding to -said albums, causing the total export size to be larger. diff --git a/docs/docs/photos/faq/face-recognition.md b/docs/docs/photos/faq/face-recognition.md deleted file mode 100644 index 24c9650..0000000 --- a/docs/docs/photos/faq/face-recognition.md +++ /dev/null @@ -1,88 +0,0 @@ ---- -title: Face recognition -description: - Frequently asked questions about Ente's face recognition ---- - -# Face recognition - -## Can I merge or de-merge persons recognized by the app? - -Yes! The general mechanism for doing this is to assign the same name to both -persons. - -### Mobile - -First, make sure one of the two person groupings is assigned a name through the -`Add a name` banner. Then for the second grouping, use the same banner but now -instead of typing the name again, tap on the already given name that should now -be listed. - -De-merging a certain grouping can be done by going to the person, pressing -`Review suggestions` and then the top right `History icon`. Now press on the -`minus icon` beside the group you want to de-merge. - -### Desktop - -Similarly, on desktop you can use the "Add a name" button to merge people by -selecting an existing person, and use the "Review suggestions" sheet to de-merge -previously merged persons (click the top right history icon on the suggestion -sheet to see the previous merges, and if necessary, undo them). - -## How can I remove an incorrectly grouped face from a person? - -On our mobile app, open up the person from the People section, click on the -three dots to open up overflow menu, and click on Edit. Now you will be -presented with the list of all photos that were merged to create this person. - -You can click on the merged photos and select the photos you think are -incorrectly grouped (by long-pressing on them) and select "Remove" from the -action bar that pops up to remove any incorrect faces. - -## How do I change the cover for a recognized person? - -### Mobile - -Inside the person group, long-press the image you want to use as cover. Then -press `Use as cover`. - -### Desktop - -Desktop currently does not support picking a cover. It will default to the most -recent image. - -## Can I tell the app to ignore certain recognized person? - -Yes! You can tell the app not to show certain persons. - -### Mobile - -First, make sure the person is not named. If you already gave a name, then first -press `Remove person label` in the top right menu. Now inside the unnamed -grouping, press `Ignore person` from the top right menu. - -To undo this action, go to a **photo containing the person**. Go to the **file -info** section of the photo and press on the **face thumbnail of the ignored -person**. This will take you to the grouping of this person. Here you can press -`Show person` to undo ignoring the person. - -### Desktop - -Similarly, on desktop, you use the "Ignore" option from the top right menu to -ignore a particular face group (If you already give them a name, "Reset person" -first). And to undo this action, open that person (via the file info of a photo -containing that person), and select "Show person". - -## How well does the app handle photos of babies? - -The face recognition model we use (or any face recognition model for that -matter) is known to struggle with pictures of babies and toddlers. While we -can't prevent all cases where this goes wrong, we've added a option to help you -correct the model in such cases. - -If you find a mixed grouping of several different babies, you can use the -`mixed grouping` option in the top right menu of said grouping. Activating this -option will make the model re-evaluate the grouping with stricter settings, -hopefully separating the different babies in different new groupings. - -Please note this functionality is currently only available on mobile. diff --git a/docs/docs/photos/faq/general.md b/docs/docs/photos/faq/general.md deleted file mode 100644 index a4b12cd..0000000 --- a/docs/docs/photos/faq/general.md +++ /dev/null @@ -1,130 +0,0 @@ ---- -title: General FAQ -description: An assortment of frequently asked questions about Ente Photos ---- - -# General FAQ - -## How can I earn free storage? - -Use our [referral program](/photos/features/referral-program/). - -## What file formats does Ente support? - -Ente supports all files that have a mime type of `image/*` or `video/*` -regardless of their specific format. - -However, we only have limited support for RAW currently. We are working towards -adding full support, and you can watch this -[thread](https://github.com/ente-io/ente/discussions/625) for updates. - -If you find an issue with ente's ability to parse a certain file type, please -write to [support@ente.io](mailto:support@ente.io) with details of the -unsupported file format and we will do our best to help you out. - -## Is there a file size limit? - -Yes, we currently do not support files larger than 4 GB. - -If this constraint is a concern for you, please write to -[support@ente.io](mailto:support@ente.io) with your use case and we will do our -best to help you. - -## Does Ente support videos? - -Ente supports backing up and downloading of videos in their original format and -quality. - -But some of these formats cannot be streamed on the web browser and you will be -prompted to download them. - -## Why does Ente consume lesser storage than other providers? - -Most storage providers compute your storage quota in GigaBytes (GBs) by dividing -your total bytes uploaded by `1000 x 1000 x 1000`. - -Ente on the other hand, computes your storage quota in GibiBytes (GiBs) by -dividing your total bytes uploaded by `1024 x 1024 x 1024`. - -We decided to leave out the **i** from **GiBs** to reduce noise on our -interfaces. - -## Why should I trust Ente for long-term data-storage? - -Unlike large companies, we have a focused mission, to build a safe space where -you can easily archive your personal memories. - -This is the only thing we want to do, and with our pricing model, we can -profitably do it. - -We preserve your data end-to-end encrypted, and our open source apps have been -[externally audited](https://ente.io/blog/cryptography-audit/). - -Also, we have spent great deal of engineering effort into designing reliable -data replication and graceful disaster recovery plans. This is also done -transparently - we have documented the specifics of our replication and -reliability [here](https://ente.io/reliability). - -In short, we love what we do, we have no reasons to be distracted, and we are as -reliable as any one can be. - -If you would like to fund the development of this project, please consider -[subscribing](https://ente.io/download). - -## How do I pronounce ente? - -It's like cafe 😊. kaf-_ay_. en-_tay_. - -## Does Ente apply compression to uploaded photos? - -Ente does not apply compression to uploaded photos. The file size of your photos -in Ente will be similar to the original file sizes you have. - -## Can I add photos from a shared album to albums that I created in Ente? - -On Ente's mobile apps, you can add photos from an album that's shared with you, -into one of your own albums. This will create a copy of the item that you fully -own, and will count against your storage quota. - -## How do I ensure that the Ente desktop app stays up to date on my system? - -Ente desktop includes an auto-update feature, ensuring that whenever updates are -deployed, the app will automatically download and install them. You don't need -to manually update the software. - -## Can I sync a folder containing multiple subfolders, each representing an album? - -Yes, when you drag and drop the folder onto the desktop app, the app will detect -the multiple folders and prompt you to choose whether you want to create a -single album or separate albums for each folder. - -## How do I identify which files experienced upload issues within the desktop app? - -Check the sections within the upload progress bar for "Failed Uploads," "Ignored -Uploads," and "Unsuccessful Uploads." - -## How do I keep NAS and Ente photos synced? - -Please try using our CLI to pull data into your NAS -https://github.com/ente-io/ente/tree/main/cli#readme. - -## Is there a way to view all albums on the map view? - -Currently, the Ente mobile app allows you to see a map view of all the albums by -clicking on "Your map" under "Locations" on the search screen. - -## How to reset my password if I lost it? - -On the login page, enter your email and click on Forgot Password. Then, enter your recovery key and create a new password. - - # iOS Album Backup and Organization in Ente - - ### How does Ente handle photos that are part of multiple iOS albums? -When you select multiple albums for backup, Ente prioritizes uploading each photo to the album with the fewest photos. This means a photo will only be uploaded once, even if it exists in multiple albums on your device. If you create new albums on your device after the initial backup, those photos may not appear in the corresponding Ente album if they were already uploaded to a different album. - - -### Why don’t all photos from a new iOS album appear in the corresponding Ente album? -If you create a new album on your device after the initial backup, the photos in that album may have already been uploaded to another album in Ente. To fix this, go to the "On Device" album in Ente, select all photos, and manually add them to the corresponding album in Ente. - -### What happens if I reorganize my photos in the iOS Photos app after backing up? -Reorganizing photos in the iOS Photos app (e.g., moving photos to new albums) won’t automatically reflect in Ente. You’ll need to manually add those photos to the corresponding albums in Ente to maintain consistency. diff --git a/docs/docs/photos/faq/hidden-and-archive.md b/docs/docs/photos/faq/hidden-and-archive.md deleted file mode 100644 index d9106da..0000000 --- a/docs/docs/photos/faq/hidden-and-archive.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -title: Can I hide photos in ente? -description: Two related ways of hiding or archiving in Ente Photos ---- - -# Can I hide photos in ente? - -Yes, you can hide specific photos and videos in Ente using the "Hide" action. -Open the photo, expand the overflow menu and select Hide (the action with the -eye icon). - -Hidden items do not appear anywhere in Ente except within the special "Hidden" -category. Ente will ask for the device biometric (FaceID / TouchID) or passcode -to view the contents of the Hidden category. - -You can reach the Hidden category from the bottom of the albums screen. - -Keep in mind that hidden items will still show up in the "On device" albums -within Ente as long as they are present in your native gallery. But once you -remove them from your device, they'll stop showing up here. - -For more details, see [features/hide](/photos/features/hide). - -### Archive - -There is also a related feature called "Archive". While hidden items do not -appear anywhere, archived items do not appear in your timeline but can otherwise -be seen within the album and search results. - -This is useful when you're not trying to hide certain photos per se, but just do -not want some of them (say, some old screenshots) to clutter your home timeline. - -For more details, see [features/archive](/photos/features/archive). diff --git a/docs/docs/photos/faq/installing.md b/docs/docs/photos/faq/installing.md deleted file mode 100644 index 07c42bb..0000000 --- a/docs/docs/photos/faq/installing.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Installing Ente Photos -description: Steps to install Ente Photos ---- - -# Android - -Our Android apps are distributed over the following channels. - -### PlayStore - -You can install Ente directly from -[PlayStore](https://play.google.com/store/apps/details?id=io.ente.photos). - -### F-Droid - -Reproducible builds for Ente are available on -[F-Droid](https://f-droid.org/packages/io.ente.photos.fdroid/). - -> [!NOTE] -> -> Releases over F-Droid are generally slower since they run their own build -> servers. You can donate to F-Droid [here](https://f-droid.org/en/donate). - -### GitHub - -Latest releases are built straight from the source and made available over -[GitHub](https://github.com/ente-io/ente/releases?q=tag%253Aphotos-v0). - -These builds will notify you whenever a new release is available and will help -you stay updated. - -### Obtainium - -You can setup [Obtainium](https://github.com/ImranR98/Obtainium) to track our -GitHub releases by -[clicking this link](https://apps.obtainium.imranr.dev/redirect?r=obtainium://app/%7B%22id%22%3A%22io.ente.photos.independent%22%2C%22url%22%3A%22https%3A%2F%2Fgithub.com%2Fente-io%2Fente%22%2C%22author%22%3A%22ente-io%22%2C%22name%22%3A%22Ente%20Photos%22%2C%22preferredApkIndex%22%3A0%2C%22additionalSettings%22%3A%22%7B%5C%22includePrereleases%5C%22%3Afalse%2C%5C%22fallbackToOlderReleases%5C%22%3Atrue%2C%5C%22filterReleaseTitlesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22filterReleaseNotesByRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22verifyLatestTag%5C%22%3Afalse%2C%5C%22dontSortReleasesList%5C%22%3Atrue%2C%5C%22useLatestAssetDateAsReleaseDate%5C%22%3Afalse%2C%5C%22releaseTitleAsVersion%5C%22%3Afalse%2C%5C%22trackOnly%5C%22%3Afalse%2C%5C%22versionExtractionRegEx%5C%22%3A%5C%22%5C%22%2C%5C%22matchGroupToUse%5C%22%3A%5C%22%5C%22%2C%5C%22versionDetection%5C%22%3Atrue%2C%5C%22releaseDateAsVersion%5C%22%3Afalse%2C%5C%22useVersionCodeAsOSVersion%5C%22%3Afalse%2C%5C%22apkFilterRegEx%5C%22%3A%5C%22ente-photos*%5C%22%2C%5C%22invertAPKFilter%5C%22%3Afalse%2C%5C%22autoApkFilterByArch%5C%22%3Atrue%2C%5C%22appName%5C%22%3A%5C%22%5C%22%2C%5C%22shizukuPretendToBeGooglePlay%5C%22%3Afalse%2C%5C%22allowInsecure%5C%22%3Afalse%2C%5C%22exemptFromBackgroundUpdates%5C%22%3Afalse%2C%5C%22skipUpdateNotifications%5C%22%3Afalse%2C%5C%22about%5C%22%3A%5C%22%5C%22%7D%22%2C%22overrideSource%22%3Anull%7D) -to add it instantly. - -Alternatively, you can follow these steps: - -1. Click **Add App** to open a new app config screen -2. Enter `https://github.com/ente-io/ente` in the **App Source URL** field -3. Enable the **Retain release order** from API toggle -4. Scroll down to the **Filter APKs by Regular Expression** field and enter - `ente-photos*` -5. Enable the **Attempt to filter APKs by CPU architecture** if possible toggle -6. Select any applicable app category labels you may have setup -7. Enable the **Try inferring app ID from source code** toggle -8. Scroll back to the top and click **Add** to complete the setup - -
- ---- - -
- -# iOS - -You can install Ente on Apple devices from -[AppStore](https://apps.apple.com/app/id1542026904). - -
- ---- - -
- -# Desktop - -You can grab the latest version of Ente for Mac, Windows and Linux from -[ente.io/download/desktop](https://ente.io/download/desktop). - -
- ---- - -
- -# Web - -Latest versions of our web app are available at -[web.ente.io](https://web.ente.io). - -
- ---- - -
- -# CLI - -Ente's CLI is distributed directly over -[GitHub](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0). diff --git a/docs/docs/photos/faq/metadata.md b/docs/docs/photos/faq/metadata.md deleted file mode 100644 index 03cf10d..0000000 --- a/docs/docs/photos/faq/metadata.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Metadata -description: Handling of metadata in Ente Photos ---- - -# Metadata - -This document describes Ente's handling of metadata - -## Import - -Ente will import the date for your photos from three places: - -1. Exif -2. Metadata JSON -3. File name - -### Exif - -Normally, Ente app tries to read the date of the photo from the Exif and other -metadata (e.g. XMP, IPTC) embedded in the file. - -> [!TIP] -> -> You can see all of the Exif metadata embedded within a photo by using the -> "View all Exif data" option in the info panel for the photo in Ente. - -### Importing from Google takeout - -In case of photos exported from Google Photos, the metadata is not embedded -within the file itself, but is instead present in a separate sidecar ".json" -file. Ente knows how to read these files, and in such cases can pick up the -metadata from them. - -When you export your data using a Google takeout, Google provides you both your -photos and their associated metadata JSON files. However, for incomprehensible -reasons, they split the JSON and photo across zip files. That is, in some cases -if you have a file named `flower.jpeg`, which has an associated metadata JSON -file named `flower.json`, Google will put the `.jpeg` and the `.json` in -separate takeout zips, and Ente will be unable to correlate them. - -To avoid such issues, **we [recommend](/photos/migration/from-google-photos/) -unzipping all of your Google takeout zips into a single folder, and then -importing that folder into Ente**. This way, we will be able to always correctly -map, for example, `flower.jpeg` and `flower.json` and show the same date for -`flower.jpeg` that you would've seen within Google Photos. - -### File name - -In case the photo does not have a date in the Exif data (and it is not a Google -takeout), for example, for screenshots or Whatsapp forwards, Ente will still try -and deduce the correct date for the file from the name of the file. - -> [!NOTE] -> -> This process works great most of the time, but it is inherently based on -> heuristics and is not exact. - -If we are unable to decipher the creation time from these 3 sources, we will set -the upload time as the photo's creation time. - -## Modifications - -Ente supports modifications to the following metadata: -- File name -- Date & time -- Location - -The first two options are available on both mobile and desktop, while the -ability to update location is only available within our mobile apps. - -### Bulk modifications - -You can bulk-edit creation time of photos from our desktop app, by -multi-selecting items and selecting the "Fix time" option from the action bar. - -You can bulk-edit location coordinates of photos from our mobile app, by -multi-selecting items and selecting the "Edit location" option from the action -bar. - -## Export - -Ente guarantees that you will get back the _exact_ same original photos and -videos that you imported. The modifications (e.g. date changes) you make within -Ente will be written into a separate metadata JSON file during export so as to -not modify the original. - -As an example: suppose you have `flower.png`. When you export your library, you -will end up with: - -``` -flower.png -metadata/flower.png.json -``` - -Ente writes this JSON in the same format as Google Takeout so that if a tool -supports Google Takeout import, it should be able to read the JSON written by -Ente too. - -> One small difference is that, to avoid clutter, Ente puts the JSON in the -> `metadata/` subfolder, while Google puts it next to the file.
-> ->
Ente itself will read it from either place. - -Here is a sample of how the JSON would look: - -```json -{ - "description": "This will be imported as the caption", - "creationTime": { - "timestamp": "1613532136", - "formatted": "17 Feb 2021, 03:22:16 UTC" - }, - "modificationTime": { - "timestamp": "1640225957", - "formatted": "23 Dec 2021, 02:19:17 UTC" - }, - "geoData": { - "latitude": 12.004170700000001, - "longitude": 79.8013945 - } -} -``` - -`photoTakenTime` will be considered as an alias for `creationTime`, and -`geoDataExif` will be considered as a fallback for `geoData`. - -### File creation time. - -The photo's data will be preserved verbatim, however when it is written out to -disk on a new machine a new file gets created. This file will not have the same -file system creation time as the file that was uploaded. - -1. "Creation time" is not a universal concept, e.g. Linux does not support it. - From the man page of [fstat](https://linux.die.net/man/2/fstat), we can see - that this information is just not recorded by the file system on Linux. - -2. The isn't a way to set it even on Windows and macOS for files downloaded from - the browser, or for files saved from the mobile apps. - -We have considered modifying our desktop and CLI clients to write back the -photo's creation time into the creation time of the filesytem file during -export. But it is not clear if this would be less or more confusing. There are -two main downsides: - -1. It will be inconsistent. This behaviour would only happen on Windows and - macOS, and only when using the desktop or CLI, not for other Ente clients. - Learning from our experience of modifying DateTimeOriginal, we feel - consistency is important. - -2. It will require workarounds. e.g. for the desktop app, Node.js doesn't - natively support modifying the creation time (for similar reasons as - described above), and we will have to include binary packages like - [utimes](https://github.com/baileyherbert/utimes). - -We will also note that Ente is a photos app, not a file system backup app. The -customers for whom the creation time of the file on disk is paramount might be -better served by file backup apps, not a photos app. - -All this said though, nothing is set in stone. If enough customers deem it -important, we will prioritize adding support for the workaround. diff --git a/docs/docs/photos/faq/security-and-privacy.md b/docs/docs/photos/faq/security-and-privacy.md deleted file mode 100644 index 6f40ab0..0000000 --- a/docs/docs/photos/faq/security-and-privacy.md +++ /dev/null @@ -1,137 +0,0 @@ ---- -title: Security and Privacy FAQ -description: - Comprehensive information about security and privacy measures in Ente Photos ---- - -# Security and Privacy FAQ - -Welcome to Ente Photos' Security and Privacy FAQ. This document provides -detailed information about our security practices, privacy measures, and how we -protect your data. We are committed to maintaining the highest standards of data -protection and transparency. - -## Data Encryption and Storage - -### Can Ente see my photos and videos? - -No. Your files are encrypted on your device before being uploaded to our -servers. The encryption keys are derived from your password using advanced key -derivation functions. Since only you know your password, only you can decrypt -your files. For technical details, please see our -[architecture document](https://ente.io/architecture). - -### How is my data encrypted? - -We use the following encryption algorithms: - -- Encryption: `XChaCha20` and `XSalsa20` -- Authentication: Poly1305 message authentication code (MAC) -- Key derivation: Argon2id with high memory and computation parameters - -These algorithms are implemented using -[libsodium](https://libsodium.gitbook.io/doc/), a externally audited -cryptographic library. Our [architecture document](https://ente.io/architecture) -provides full technical specifications. - -### Where is my data stored? - -Your encrypted data is stored redundantly across multiple providers in the EU: - -- Amsterdam, Netherlands -- Paris, France -- Frankfurt, Germany - -We use a combination of object storage and distributed databases to ensure high -availability and durability. Our -[reliability document](https://ente.io/reliability) provides in-depth -information about our storage infrastructure and data replication strategies. - -In short, we store 3 copies of your data, across 3 different providers, in 3 -different countries. One of them is in an underground fall-out shelter in Paris. - -### How does Ente's encryption compare to industry standards? - -Our encryption model goes beyond industry standards. While many services use -server-side encryption, we implement end-to-end encryption. This means that even -in the unlikely event of a server breach, your data remains protected. - -## Account Security - -### What happens if I forget my password? {#account-recovery} - -If you are logged into Ente on any of your existing devices, you can use that -device to reset your password and use your new password to log in. - -If you are logged out of Ente on all your devices, you can reset your password -using your recovery key that was provided to you during account creation. - -If you are logged out of Ente on all your devices and you have lost both your -password and recovery key, we cannot recover your account or data due to our -end-to-end encrypted architecture. - -If you wish to delete your account in such scenarios, please reach out to -support@ente.io and we will help you out. - -### Can I change my password? - -Yes, you can change your password at any time from our apps. Our architecture -allows password changes without re-encrypting your entire library. - -The privacy of your account is a function of the strength of your password, -please choose a strong one. - -### Do you support two-factor authentication (2FA)? - -Yes, we recommend enabling 2FA for an additional layer of security. We support: - -- Time-based One-Time Passwords (TOTP) -- WebAuthn/FIDO2 for hardware security keys - -You can set up 2FA in the settings of our mobile or desktop apps. - -## Sharing and Collaboration - -### How does sharing work? - -The information required to decrypt an album is encrypted with the recipient's -public key such that only they can decrypt them. - -You can read more about this [here](https://ente.io/architecture#sharing). - -In case of sharable links, the key to decrypt the album is appended by the -client as a [fragment to the URL](https://en.wikipedia.org/wiki/URI_fragment), -and is never sent to our servers. - -Please note that only users on the paid plan are allowed to share albums. The -receiver just needs a free Ente account. - -## Security Audits - -## Has the Ente Photos app been audited by a credible source? - -Yes, Ente Photos has undergone a thorough security audit conducted by Cure53, in -collaboration with Symbolic Software. Cure53 is a prominent German cybersecurity -firm, while Symbolic Software specializes in applied cryptography. Please find -the full report here: https://ente.io/blog/cryptography-audit/ - -## Account Management - -### How can I delete my account? - -You can delete your account at any time by using the "Delete account" option in -the settings. For security reasons, we request you to delete your account on -your own instead of contacting support to ask them to delete your account. - -Note that both Ente Photos and Ente Auth data will be deleted when you delete -your account (irrespective of which app you delete it from) since both photos -and auth use the same underlying account. - -To know details of how your data is deleted, including when you delete your -account, please see https://ente.io/blog/how-ente-deletes-data/. - -## Additional Support - -For any security or privacy questions not covered here, please contact our team -at security@ente.io. We're committed to addressing your concerns and -continuously improving our security measures. diff --git a/docs/docs/photos/faq/subscription.md b/docs/docs/photos/faq/subscription.md deleted file mode 100644 index aa79912..0000000 --- a/docs/docs/photos/faq/subscription.md +++ /dev/null @@ -1,194 +0,0 @@ ---- -title: Subscription FAQ -description: Frequently asked questions about Ente Photos subscription and plans ---- - -# Subscription and plans - -See our [website](https://ente.io#pricing) for the list of supported plans and -pricing. - -## Does Ente have Family Plans? - -Yes we do! Please check out our announcement post -[here](https://ente.io/blog/family-plans). - -In brief, - -- Your family members can use storage space from your plan without paying extra. - -- Ask them to sign up for Ente, and then just add them to your existing plan - using the "Manage family" option within your Subscription settings. - -- Each member gets their own private space, and cannot see each other's files - unless they're shared. - -- You can invite 5 family members. So including yourself, it will be 6 people - who can share a single subscription, paying only once. - -Note that family plans are meant as a way to share storage. For sharing photos, -you can create [shared albums and links](/photos/features/share). - -## Does Ente offer discounts to students? - -Yes we do! - -We believe that privacy should be made accessible to everyone. In this spirit, -we offer **30% off** our subscription plans to students. - -To apply for this discount, please verify your enrollment status in a school / -college / university by writing to [students@ente.io](mailto:students@ente.io) -from the email address assigned to you by your institute. - -In case you do not have access to such an email address, please send us proof -(such as your institute's identity card) that verifies your identity as a -student. - -Please note that these discounts are valid for a year, after which you may -reapply to reclaim the discount. - -## What payment methods does Ente support? - -On Web, Desktop and Android, Stripe helps us process payments from all major -prepaid and credit card providers. - -On iOS, we (have to) use the billing platforms provided by the app store. - -Apart from these, we also support PayPal and crypto currencies (more details -below). - -## Can I pay with PayPal? - -We support **annual** subscriptions over PayPal. - -Please drop an email to paypal@ente.io from your registered email address, -mentioning the [storage plan](https://ente.io#pricing) of your choice and we -will send you an invoice with a link to complete the payment. - -Once the payment is completed, your account will be upgraded to the chosen plan. - -## Does Ente accept crypto payments? - -We accept the following crypto currencies: - -- Bitcoin -- Ethereum -- Dogecoin - -To purchase a subscription with any of the above mentioned currencies, please -write to crypto@ente.io from your registered email address, citing the -[storage plan](https://ente.io#pricing) of your choice. - -In case you have any further questions or need support, please reach out to -[support@ente.io](mailto:support@ente.io), and we'll be happy to help! - -> Please note that Ente does not provide anonymity. What we provide is privacy, -> since your data is end-to-end encrypted. -> [Information](https://ente.io/privacy/#3-what-information-do-we-collect) we -> have about you might make your identity deducible. We are accepting crypto as -> a way to make Ente more accessible, not to provide anonymity. - -## Does Ente store my card details? - -Ente does not store any of your sensitive payment related information. - -We use [Stripe](https://stripe.com) to handle our card payments, and all of your -payment information is sent directly to Stripe's PCI DSS validated servers. - -Stripe has been audited by a PCI-certified auditor and is certified to -[PCI Service Provider Level 1](https://www.visa.com/splisting/searchGrsp.do?companyNameCriteria=stripe). -This is the most stringent level of certification available in the payments -industry. - -All of this said, if you would still like to pay without sharing your card -details, you can pay using PayPal. - -## What happens if I exceed my storage limit? - -Ente will stop backing up your files and you will receive an email alerting you -of the same. - -Your backed up files will remain accessible for as long as you have an active -subscription. - -## What happens when my subscription expires? - -30 days after your subscription expires, all of your uploaded data will be -cleared from our servers. - -You will receive an email prompting you to take out all of your backed up data -before this happens. - -## What happens when I upgrade my plan? - -Your new plan will go into effect immediately, and you only have to pay the -difference. We will adjust your remaining pro-rated balance on the old plan when -invoicing you for the new plan. - -For example, if you are half way through the year on the 50 GB yearly plan, and -upgrade to the 200 GB yearly plan, then - -- The new 200 GB yearly plan will go into effect immediately. - -- But we will reduce the charges for the first year by subtracting the remaining - half year balance of the 50 GB yearly plan that you'd already paid. - -The same applies to monthly plans. - -## What happens when I downgrade my plan? - -Your new plan will go into effect immediately. Any extra amount you have paid -will be credited to your account. This credit will be discounted from your -future invoices. - -For example, if you are half way through the year on the 200 GB yearly plan, and -downgrade to the 50 GB yearly plan, then - -- The new 50 GB yearly plan will go into effect immediately. - -- We will calculate a credit by subtracting half the price of the 50 GB plan - from half the price of the 200 GB plan. This will be credited to your account. - -- This credited amount will be discounted from your next invoice, which will be - due in half a year. - -The same applies to monthly plans. - -If you prefer to have this credit refunded to your original payment method, -please contact support@ente.io, and we'll assist you. - -## How can I update my payment method? - -You can view and manage your payment method by clicking on the green -subscription card within the Ente app, and selecting the "Manage payment method" -button. - -You will be able to see all of your previous invoices, with details regarding -their payment status. In case of failed payments, you will also have an option -to retry those charges. - -## How can I cancel my subscription? - -You can cancel your subscription by clicking on the green subscription card -within the Ente app, and selecting the "Cancel subscription" button. - -## Is there an x GB plan? - -We have experimented quite a bit and have found it hard to design a single -structure that fits all needs. Some customers wish for many options, some even -wish to go to an extreme of dynamic per GB pricing. Other customers wish to keep -everything simple, some even wish for a single unlimited plan. - -To keep things fair, our plans don't increase linearly, and the tiers are such -that cover the most requested patterns. - -In addition, we also offer [family plans](/photos/features/family-plans) so that -you can gain more value out of a single subscription. - -## Is there a forever-free plan? - -Yes, we offer 5 GB of storage for free. - -## What are the limitations of the free plan? - -You cannot share albums, or setup a family while you are on a free plan. diff --git a/docs/docs/photos/faq/video-streaming.md b/docs/docs/photos/faq/video-streaming.md deleted file mode 100644 index 59a3490..0000000 --- a/docs/docs/photos/faq/video-streaming.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -title: Video streaming FAQ -description: - Frequently asked questions about Ente's video streaming feature ---- - -# Video streaming - -> [!NOTE] -> -> Video streaming is available in beta on mobile apps starting v0.9.98. - -### How to enable video streaming? - -- Open Settings -> General -> Advanced -- Switch on the toggle for `Video streaming` - -### What happens when I enable video streaming? - -Enabling video streaming will start processing videos captured in the last 30 -days, generating streams for each. Both local and remote videos will be -processed, so this may consume bandwidth for downloading of remote files and -uploading of the generated streams. - -### How can I view video streams? - -Settings -> Backup > Backup status will show details regarding the processing -status for videos. Processed videos will have a green play button next to them. -You can open these videos by tapping on them. - -Processed videos will show a `Play stream` button, clicking which will load and -play the stream. - -Clicking on the `Info` icon within the original video will show details about -the generated stream. - -### What is a stream? - -Stream is an encrypted HLS file with an `.m3u8` playlist that helps play a video -with support for seeking **without** downloading the full file. - -Currently it converts videos into `720p` with `2mbps` bitrate in `H.264` format. -The generated stream is single blob (encrypted with AES) while the playlist file -(`.m3u8`) is another blob (encrypted using XChaCha20). - -We cannot read the contents, duration or the number of chunks within the -generated stream. - -### Will streams consume space in my storage? - -While this feature is in beta, we will not count the storage consumed by your -streams against your storage quota. This may change in the future. If it does, -we will provide an option to opt-in to one of the following: -1. Original videos only -2. Compressed streams only -3. Both - -### Something doesn't seem right, what to do? - -As video streaming is still in beta, some things might not work correctly. -Please create a thread within the `#feedback` channel on -[Discord](https://discord.com/channels/948937918347608085/1121126215995113552) -or reach out to [support@ente.io](mailto:support@ente.io). diff --git a/docs/docs/photos/features/albums.md b/docs/docs/photos/features/albums.md deleted file mode 100644 index 61ff94a..0000000 --- a/docs/docs/photos/features/albums.md +++ /dev/null @@ -1,131 +0,0 @@ ---- -title: Albums -description: Using albums in Ente Photos ---- - -# Albums - -## Preserving folder structure - -When you upload photos and videos into Ente using the desktop app - whether by -dragging and dropping a folder or zip file (or selecting it in the "Upload" -selector), or by setting up a [folder watch](/photos/features/watch-folders) - -the app will provide you various options. - -### Uploading files or a folder without nesting - -If you are trying to just upload some files, then the app will provide you a -selector where you can choose to (a) uploads all the files to an existing Ente -album, or (b) create a new album. - -Similarly, if you upload a folder without any nested folders, than the app will -ask if you want to upload them to an existing Ente album, or create a new album. - -The app will also try to intelligently determine the name of the new album. - -### Uploading a nested folder - -If the folder you're trying to upload has nesting and you select the option to -create a new album, you will see two options - **A single album** and **Separate -albums**. - -- **Single album** will create a new Ente album with the same name as the - folder's name, and will then sync all the changes in the folder (and any - nested folders) to this single album. - -- **Separate albums** will create separate albums for each nested folder of the - selected folder, and will then sync the changes in each nested folder - separately. - -- For example, suppose you have a folder name `Photos` on your computer, and - inside that folder you have two nested folders named `New Year` and `Summer`. - In the single album mode, the app will create an Ente album named "Photos" and - put all the files from both `New Year` and `Summer` there. In the separate - album mode, the app will create two Ente albums, "New Year" and "Summer", each - only containing the respective files. - -- In separate album mode, only nested folders that have at least one file will - result in the creation of a new album – empty folders (or folders that only - contain other folders) will be ignored. - -- In separate album mode, only the leafmost folder name is considered. For - example, both `A/B/C/D/x.png` and `1/2/3/D/y.png` will get uploaded into the - same Ente album named "D". - -> [!NOTE] -> -> Ente albums cannot be nested currently. That is, in the **separate album** -> mode described above, Ente will create a separate album for each nested -> folder, but these Ente albums themselves will not be nested. - -## Rename album - -Personalize your albums by giving them a meaningful name. - -### How to rename an album on your mobile? - -- Open the album -- Tap the three dots button in the top right corner of the screen -- Tap _Rename album_, then type in a new name -- Tap on _Rename_ button - -### How to rename an album on your web / desktop? - -- Open the album -- Click on the overflow menu in the top right corner -- Click the _Rename album_ button -- Type in a new name -- Click on _Rename_ or press enter - -## Set album cover - -Select any photo you want to use as the cover for your album. - -### How to set an album cover on mobile? - -- Open the album you want to change -- Tap the three dots button in the top right corner -- From the menu options, select _Set cover_ -- A new screen will appear, propmpting you to select the cover photo -- Browse through your photos and tap on the image you want to set as the album - cover -- Then tap on _Use selected photo_ - -## View your photos on a map - -Explore your memories based on their location. - -### How to explore the album's photos in map view? - -- Open the album -- Tap on the three dots button in the top right corner -- Select _Map_ -- This will show all photos of the album in a map view - -## Sort albums - -Maintain order in your albums by arranging them from the newest to the oldest. - -### How to change the sort order on mobile? - -- Open the album -- Tap on the three dots button in the top right corner -- Select _Sort by_ -- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest - -### How to change the sort order on web / desktop? - -- Open the album -- Click on the three dots button in the top right corner -- Click _Sort by_ -- Tap on the _Newest first_ for the latest, Or _Oldest first_ for the oldest - -## Pin albums - -Keep your favorite album at the top by pinning them for quick access. - -### How to pin/unpin an album on mobile? - -- Open the album -- Tap on the three dots button in the top right corner -- Tap on _Pin album_ / _Unpin album_ diff --git a/docs/docs/photos/features/archive.md b/docs/docs/photos/features/archive.md deleted file mode 100644 index eef7605..0000000 --- a/docs/docs/photos/features/archive.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Archive -description: | - Archiving photos and albums in Ente Photos to remove them from your home - timeline ---- - -# Archive - -You can remove a photo (owned by you) or an album from your **home timeline** by -archiving it. Archived photos won't be included in the memories section on the -mobile app. - -- All photos within a archived album will be removed from home timeline, even - when some of the photos are also present in a non-archived album. -- You can archive albums that are owned by you or shared with you. -- Search results will include archived photos. If you want to hide photos from - search result, use [Hide](./hide) feature. - -## How to - -### Archive Album - -- Open the album -- Click on the overflow menu -- Click on Archive album - -### Archive Photo - -- Long press to select the photo -- Select Archive option from the bottom menu. - -### View Archived Photos and Albums - -#### Mobile - -- Go to Albums tab -- Scroll down to bottom -- Click on Archive button. - -#### Web / Desktop - -- Click on the topleft hamburger menu -- Click on Archive - -### Metadata Privacy - -Both Ente and the person with whom you are sharing an album or photo have no -information about whether you have: - -- Archived a photo -- Archived an album -- Archived a shared album diff --git a/docs/docs/photos/features/background.md b/docs/docs/photos/features/background.md deleted file mode 100644 index ffed413..0000000 --- a/docs/docs/photos/features/background.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: Background sync -description: Ente Photos supports automatic background sync and backup ---- - -# Background sync - -Ente Photos supports seamless background sync so that you don't need to open the -app to backup your photos. It will sync in the background and automatically -backup the albums that you have selected for syncing. - -Day to day sync will work automatically. However, there are some platform -specific considerations that apply, more on these below: - -### iOS - -On iOS, if you have a very large number of photos and videos, then you might -need to keep Ente running in the foreground for the first backup to happen -(since we get only a limited amount of background execution time). To help with -this, under "Settings > Backup" there is an option to disable the automatic -device screen lock. But once your initial backup has completed, subsequent -backups will work fine in the background and don't need disabling the screen -lock. - -On iOS, Ente will not backup videos in the background (since videos are usually -much larger and need more time to upload than what we get). However, they will -get backed up the next time the Ente app is opened. - -Note that the Ente app will not be able to backup in the background if you force -kill the app. - -> If you're curious, the way this works is, our servers "tickle" your device -> every once in a while by sending a silent push notification, which wakes up -> our app and gives it 30 seconds to execute a background sync. However, if you -> have killed the app from recents, iOS will not deliver the push to the app, -> breaking the background sync. - -### Android - -On some Android versions, newly downloaded apps activate a mode called "Optimize -battery usage" which prevents them from running in the background. So you will -need to disable this "Optimize battery usage" mode in the system settings for -Ente if you wish for Ente to automatically back up your photos in the -background. - -On Android versions 15 and later, if an app is in private space and the private -space is locked, Android doesn’t allow the app to run any background processes. -As a result, background sync will not work. - -### Desktop - -In addition to our mobile apps, the background sync also works on our desktop -app, though the [way that works](watch-folders) is a bit different. - ---- - -## Troubleshooting - -- On iOS, make sure that you're not killing the Ente app. -- On Android, make sure that "Optimize battery usage" is not turned on in system - settings for the Ente app. diff --git a/docs/docs/photos/features/backup.md b/docs/docs/photos/features/backup.md deleted file mode 100644 index a537252..0000000 --- a/docs/docs/photos/features/backup.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Backup -description: Details about how backup works in Ente Photos ---- - -# Backup - -Ente will automatically backup any albums in your native photos app that you -select for backup. - -Ente will run in the background, and any new photos added to these albums (or -any photos in these albums that were modified) will be automatically synced to -ente. - -You can choose which albums should be backed up when you sign up for Ente. If -you change your mind later, or if you create a new album in your native photos -app that you also want to backup, please use "Settings > Backup > Backed up -folders" to modify your choices. - -If a file is deleted on your native photos app, it will still show up in Ente. -This is because on both iOS and Android, apps are not allowed to automatically -delete user's photos without a manual confirmation. diff --git a/docs/docs/photos/features/cast/index.md b/docs/docs/photos/features/cast/index.md deleted file mode 100644 index 8a19090..0000000 --- a/docs/docs/photos/features/cast/index.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Cast -description: - Casting your photos on to a large screen or a TV or a Chromecast device ---- - -# Cast - -With Ente Cast, you can play a slideshow of your favourite albums on your Google -Chromecast TVs or any other internet-connected large screen devices. - -## Get Started - -1. Open Ente on the web or on your mobile device. -2. Select the album you want to play on your large screen device. -3. Click "Play album on TV" in the album menu. - - On the web, you can find this option in the three dots menu on the right - hand side. - -
- -![Album options menu](web-play-album-on-tv.webp){width=300px} - -
- -4. Choose how you want to pair your device with your large screen device. - -
- - ![Pairing options](web-pairing-options.webp){width=300px} - -
- - On Google Chrome and other Chromium browsers, you will see a button labeled - "Auto Pair". This option will prompt you to select a Chromecast supported - device on your local network. Note: this option requires connecting to - Google servers to load necessary dependencies. This option does not transmit - any sensitive data through Google servers, such as your photos. Once your - Chromecast device is connected, you're all set. - - On all browsers, you'll see the option to "Pair with PIN". This option works - with all devices, Chromecast-enabled or not. You'll be required to load up - [cast.ente.io](https://cast.ente.io) on your large screen device. - -5. Enter the PIN displayed on your large screen device into the input field on - your mobile or web device. - - On your large screen device, you'll see the following screen. - -
- -![Pairing screen](tv-pairing-screen.png) - -
- -6. Once you enter the correct PIN, you will see a screen on your TV with a green - checkmark confirming the connection. Your photos will start showing up in a - bit. diff --git a/docs/docs/photos/features/cast/tv-pairing-screen.png b/docs/docs/photos/features/cast/tv-pairing-screen.png deleted file mode 100644 index aec1a20..0000000 Binary files a/docs/docs/photos/features/cast/tv-pairing-screen.png and /dev/null differ diff --git a/docs/docs/photos/features/cast/web-pairing-options.webp b/docs/docs/photos/features/cast/web-pairing-options.webp deleted file mode 100644 index 586b887..0000000 Binary files a/docs/docs/photos/features/cast/web-pairing-options.webp and /dev/null differ diff --git a/docs/docs/photos/features/cast/web-play-album-on-tv.webp b/docs/docs/photos/features/cast/web-play-album-on-tv.webp deleted file mode 100644 index 26c9191..0000000 Binary files a/docs/docs/photos/features/cast/web-play-album-on-tv.webp and /dev/null differ diff --git a/docs/docs/photos/features/collaborate.md b/docs/docs/photos/features/collaborate.md deleted file mode 100644 index 1d62a37..0000000 --- a/docs/docs/photos/features/collaborate.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Collaboration -description: Collaborate with other people using shared albums and public links ---- - -# Collaborate - -Ente allows you to collaborate with people in 2 ways: - -- Collaborative albums - -- Collaborative links - -## Collaborative albums - -Collaborative albums allow multiple Ente users to add photos to the same shared -album. Storage is only counted once, irrespective of the number of collaborators -and viewers. - -- The owner of the album is the person who created it. - -- The owner can add collaborators and viewers by their email. The owner can also - change permissions of participants at any time, and remove them. - -- Collaborators can add photos (and videos) to the shared album. - -- The storage of the photo is counted towards the owner of the photo - the - person who uploaded it. Since the uploader usually has the photo in their - account anyway, effectively this means that the photo can be added to a - collaborative album without paying anything extra. - -- The owner of the photo can remove it from the album (or delete it). - -- The owner of the album can remove all photos from the album (they can only - delete the photos they own). - -- When a collaborator is removed from a shared album (or when they leave the - album), any photos they'd uploaded will also be removed. - -Currently collaborative albums can only be used from the mobile app. A -collaborator will see them in view only mode in the web and desktop apps; we're -actively working on adding support for them on web and desktop too. - -## Collaborative links - -Collaborative links allow you to collaborate with people who might not have an -Ente account or the Ente apps. - -- You can create a public link, and anyone with access to the link will be able - to view the shared photos using just their web browser (no login required). - -- You can enable the "Allow adding photos" option on a public link to allow - people to also add photos the same way (from their web browser, no login - required). - -Such collaborative links are also sometimes called "collect links", since they -allow you to collect photos from people without them needing Ente accounts. A -common use case for this is collecting event and trip photos from a big circle -of people. - -The storage for the photos added to a collaborative link are counted towards the -album owner. The owner can also remove these photos at any time. diff --git a/docs/docs/photos/features/collect.md b/docs/docs/photos/features/collect.md deleted file mode 100644 index c13b942..0000000 --- a/docs/docs/photos/features/collect.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: Collect -description: Collecting photos from others using Ente Photos ---- - -# Collect photos - -Collecting memories from events is now a breeze! - -- Whether it's a birthday party, vacation trip or wedding, easily share your - album using a unique, secure, end-to-end encrypted link. -- Introduce the 'collect photos' feature to your friends and family who can - contribute without an Ente account. -- This allows them to effortlessly add, view, and download photos from the link - without an Ente account. -- Also preserves metadata and photo quality. - -## How to collect photos on mobile? - -- Open the album you want to share with -- Tap on the Share album icon in the top right corner of the screen -- Select _Collect photos_ -- Tap _Copy link_ -- The link will get copied to your clipboard. Now, feel free to share it - -## How to Collect photos on web / desktop? - -- Open the album -- Click on the share album icon -- Select _Collect photos_ -- Click on _Copy link_ -- The link will get copied to your clipboard. Share it effortlessly with others! diff --git a/docs/docs/photos/features/deduplicate.md b/docs/docs/photos/features/deduplicate.md deleted file mode 100644 index c1b55e4..0000000 --- a/docs/docs/photos/features/deduplicate.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: Deduplicate -description: Removing duplicates photos using Ente Photos ---- - -# Deduplicate - -Ente performs two different duplicate detections: one during uploads, and one -that can be manually run afterwards to remove duplicates across albums. - -## During uploads - -Ente will automatically deduplicate and ignore duplicate files during uploads. - -When uploading, Ente will ignore exact duplicate files. This allows you to -resume interrupted uploads, or drag and drop the same folder, or reinstall the -app, and expect Ente to automatically skip duplicates and only add new files. - -The duplicate detection works slightly different on each platform, to cater to -the platform's nuances. - -#### Mobile - -- On iOS, a hash will be used to detect exact duplicates. If the duplicate is - being uploaded to an album where a photo with the same hash already exists, - then the duplicate will be skipped. If it is being uploaded to a different - album, then a symlink will be created (so no actual data will need to be - uploaded, just a symlink will be created to the existing file). - -- On Android also, a hash check is used. But unlike iOS, the native Android - filesystem behaviour is to keep physical copies if the same photo is in - different albums. So Ente does the same: duplicates to same album will be - skipped, duplicates when going to separate albums will create copies. - -#### Web and desktop - -On laptops (i.e. when using the Ente web or desktop app), in addition to a hash -check, the file name is also used. The assumption is that the user wishes to -keep two copies if they have the same file but with different names. - -Thus a file will be considered a duplicate and skipped during upload if a file -with the same name and hash already exists in the album. - -And if you're trying to upload it to a different album (i.e. the same file with -the same name already exists in a different album), then a symlink to the -existing file will be created. This is similar to what happens when you do "Add -to album", and the actual files are not re-uploaded. - -## Manual deduplication - -Ente also provides a tool for manual de-duplication in _Settings → Backup → -Remove duplicates_. This is useful if you have an existing library with -duplicates across different albums, but wish to keep only one copy. - -## Adding to Ente album creates symlinks - -Note that once a file is in Ente, adding it to another Ente album will create a -symlink, so that you can add it to as many albums as you wish but storage will -only be counted once. diff --git a/docs/docs/photos/features/family-plans.md b/docs/docs/photos/features/family-plans.md deleted file mode 100644 index 080c336..0000000 --- a/docs/docs/photos/features/family-plans.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Family plans -description: - Share your Ente Photos plan with your family members with no extra cost ---- - -# Family plans - -Paid subscribers of Ente can share the storage with their family, **at no -additional cost** as you have already paid for the storage. - -In brief, - -- Your family members can use storage space from your plan without paying extra. - -- Ask them to sign up for Ente, and then just add them to your existing plan - using the "Manage family" option within your Subscription settings. - -- Each member gets their own private space, and cannot see each other's files - unless they're shared. - -- You can invite 5 family members. So including yourself, it will be 6 people - who can share a single subscription, paying only once. - -## Storage Limits - -If you're an admin of a family, you will be able to set storage limits for the -members in your family plan. - -In brief, - -- For example, once you set a limit of 10GB for a member, their Storage - quota for uploading photos will be limited to 10GB. - -- Once the invited member accepts the Family invite, you will be able to see - an edit icon in the Members List. Click on it to setup a family limit. - -- If the admin has set a limit for any user, that limit value will be prefilled - in the input box. - -- Incase, if you want to remove any storage limit from a members account, you - can click on the "Remove Limit" and they can upload photos without any limit. - -## FAQ - -- **Can you assign a storage quota for each individual member in the family - plan?** - - Unfortunately, at this moment, assigning a storage quota for each individual - member in the family plan is not supported. For updates on this feature - request, please follow - [this thread](https://github.com/ente-io/ente/discussions/857). diff --git a/docs/docs/photos/features/free-up-space/free-up-space.png b/docs/docs/photos/features/free-up-space/free-up-space.png deleted file mode 100644 index 60fdf85..0000000 Binary files a/docs/docs/photos/features/free-up-space/free-up-space.png and /dev/null differ diff --git a/docs/docs/photos/features/free-up-space/index.md b/docs/docs/photos/features/free-up-space/index.md deleted file mode 100644 index 77064d0..0000000 --- a/docs/docs/photos/features/free-up-space/index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Free up space -description: Freeing up your phone's storage space when using Ente Photos ---- - -# Free up your phone's storage space - -Within the app's settings page, you have an option to free up space by deleting -all backed up photos and videos from your phone's internal storage. - -
- -![Free up space screen](free-up-space.png){width=400px} - -
- -> Note: You might have to clear the device's trash to realize this cleared -> space. diff --git a/docs/docs/photos/features/hide.md b/docs/docs/photos/features/hide.md deleted file mode 100644 index efb34c6..0000000 --- a/docs/docs/photos/features/hide.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Hiding photos and albums -description: Hide photos and albums in Ente Photos ---- - -# Hiding photos and albums - -You can further protect extra sensitive photos or albums by hiding them. Hidden -photos or albums will **only be viewable** after an extra layer of -authentication inside the app. Hiding differs from [Archiving](./archive.md) in -that the hidden photos won't be surfaced anywhere in the app without explicit -authentication, whereas archiving only removes them from the home timeline and -memories sections. - -- Hidden photos and albums will be removed from home timelines, memories, albums - tab, search results, and any other visable place in the app. - -- Hidden photos will be removed from all regular albums. If you want to unhide - again you will have to specify the album to move it to. - -- You cannot hide photos or albums shared with you. You can archive shared - albums instead. - -## How to - -### Hide album - -- Open the album -- Click on the overflow menu -- Click on _Hide album_ - -### Hide photo - -- Select the photo -- Click on _Hide_ option from the select menu - -### View hidden photos and albums - -#### Mobile - -- Go to Albums tab -- Scroll down to bottom -- Click on _Hidden_ button -- Authenticate in app - -#### Web / Desktop - -- Click on the topleft hamburger menu -- Click on _Hidden_ -- Authenticate in app - -### Unhide album - -- Open the hidden album -- Click on the overflow menu -- Click on _Unhide album_ - -### Unhide photo - -- Select the hidden photo -- Click on _Unhide_ option from the select menu -- Click on the album the photo should be restored to - -## Metadata Privacy - -Ente has no information about whether you have hidden a photo or album. diff --git a/docs/docs/photos/features/legacy/accept_trusted_contact_invite.png b/docs/docs/photos/features/legacy/accept_trusted_contact_invite.png deleted file mode 100644 index e52479b..0000000 Binary files a/docs/docs/photos/features/legacy/accept_trusted_contact_invite.png and /dev/null differ diff --git a/docs/docs/photos/features/legacy/add_trusted_contact.png b/docs/docs/photos/features/legacy/add_trusted_contact.png deleted file mode 100644 index 0d9a84e..0000000 Binary files a/docs/docs/photos/features/legacy/add_trusted_contact.png and /dev/null differ diff --git a/docs/docs/photos/features/legacy/index.md b/docs/docs/photos/features/legacy/index.md deleted file mode 100644 index 837061b..0000000 --- a/docs/docs/photos/features/legacy/index.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Legacy -description: Using Legacy to pass on your memories to loved ones ---- - -# Legacy - -Legacy allows trusted contacts to recover your account in your absence. The main -usecase here is to pass on your memories after your death. It can also be useful -for other cases - for e.g., when you forget your password and recovery key. - -Trusted Contacts can initiate a recovery, and if not blocked in 30 days, would -be able to change the password to your account and thereby access your memories. - -## Adding a trusted contact - -You can add a trusted contact for your account using the mobile app for Ente -Photos. Go to Settings -> Account -> Legacy, and click on "Add Trusted Contact". - -You would be asked to enter the email address of the trusted contact you want to -add or choose from a list of contacts on Ente. Please note that the trusted -contact must be an Ente user. - -
- -![Add Trusted Contact](add_trusted_contact.png){width=300px} - -
- -The trusted contact must accept your request. They can do so by going to -Settings -> Account -> Legacy in the Ente Photos mobile app, and clicking on -your email address within the Legacy accounts sections. Ente would also send an -email notification to the trusted contact to nudge them to accept the invite. - -
- -![Accept Trusted Contact Invite](accept_trusted_contact_invite.png){width=300px} - -
- -## Recovering an account as a trusted contact - -As a trusted contact, you can recover an account by going to Settings -> Account --> Legacy in the Ente photos app, tapping on the email address of the account -within the Legacy account sections. - -
- -![Initiate Account Recovery](initiate_account_recovery.png){width=300px} - -
- -Once the recovery is initiated, the account owner would get 30 days to block the -recovery. After 30 days, you can go the same page in the app, where you will be -prompted to change the password of the account. Once you change the password, -you would be able to access the recovered account with the new password. - -## Blocking account recovery by a trusted contact - -After a trusted contact initiates a recover, you, as the account owner, would -get 30 days to block the recovery. To do this, you must go to Settings -> -Account -> Legacy, where you will see a message that recovery of the account has -been initiated. Tapping on that will allow you to block the recovery. - -## Removing a trusted contact - -You can remove a trusted contact by going to Settings -> Account -> Legacy, -tapping on the trusted contact you want to remove, and choosing "Remove" in the -popup. diff --git a/docs/docs/photos/features/legacy/initiate_account_recovery.png b/docs/docs/photos/features/legacy/initiate_account_recovery.png deleted file mode 100644 index 4547217..0000000 Binary files a/docs/docs/photos/features/legacy/initiate_account_recovery.png and /dev/null differ diff --git a/docs/docs/photos/features/location-tags.md b/docs/docs/photos/features/location-tags.md deleted file mode 100644 index a103a2c..0000000 --- a/docs/docs/photos/features/location-tags.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Location tags -description: Search and organize your photos by location in Ente Photos ---- - -# Location Tags - -_Search and organize your photos by their location_ - -Location Tags allow you to search and organize your photos based on their -geographical location. Instead of sending your queries to our servers, we've -implemented a privacy-friendly solution that runs searches locally on your -device. - -## How to use Location Tags - -### Method 1: Adding Location Tags from a Photo - -1. Open a photo -2. Click on _Info_ -3. Select _Add Location_" -4. Enter the location name and define a radius - -### Method 2: Adding Location Tags from the Search Tab - -1. Go to the search tab -2. Click on _Add new_ at the end of the location tags section -3. Select a photo as the center point for the location tag -4. Enter the location name and define a radius - -## Tips - -- The app will automatically cluster photos falling within a radius under a - specified location. - -- Location Tags provide a seamless way to filter photos without compromising - your privacy. - -- Location tags are stored end-to-end encrypted, ensuring the security of your - data. - -- Enjoy a more organized photo library by tagging important places like home, - office, and vacation spots. diff --git a/docs/docs/photos/features/machine-learning.md b/docs/docs/photos/features/machine-learning.md deleted file mode 100644 index 215c1d9..0000000 --- a/docs/docs/photos/features/machine-learning.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Machine learning -description: - Ente supports on-device machine learning for face and natural language - search ---- - -# Machine learning - -Ente supports on-device machine learning. This allows you to use the latest -advances in AI in a privacy preserving manner. - -- You can search for your photos by the **Faces** of the people in them. Ente - will show you all the faces in a photo, and will also try to group similar - faces together to create clusters of people so that you can give them names, - and quickly find all photos with a given person in them. - -- You can search for your photos by typing natural language descriptions of - them. For example, you can search for "night", "by the seaside", or "the red - motorcycle next to a fountain". Within the app, this ability is referred to as - **Magic search**. - -You can enable face recognition and magic search in the app's preferences on -either the mobile app or the desktop app. - -On mobile, this is available under `General > Advanced > Machine learning`. - -On desktop, this is available under `Preferences > Machine learning`. - ---- - -The app needs to download your original photos to index them. This is faster -over WiFi. Indexing is also faster on your computer as compared to your mobile -device. - -> [!TIP] -> -> If you have a large library on Ente, we recommend enabling this feature on the -> desktop app first, because it can index your existing photos faster. Once your -> existing photos have been indexed, then you can use either. The mobile app is -> fast enough to index new photos as they are being backed up. -> -> Also, it is beneficial to enable machine learning before importing your -> photos, as this allows the Ente app to index your files as they are getting -> uploaded instead of needing to download them again. - -The indexes are synced across all your devices automatically using the same -end-to-end encrypted security that we use for syncing your photos. - -Note that the desktop app does not currently support modifying the face -groupings, that is only supported by the mobile app. - -For more information on how to use Machine Learning for face recognition please -check out [the FAQ](../faq/face-recognition). diff --git a/docs/docs/photos/features/map.md b/docs/docs/photos/features/map.md deleted file mode 100644 index cd1fa60..0000000 --- a/docs/docs/photos/features/map.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Maps -description: View and explore your photos on a map within Ente Photos ---- - -# Map - -_View and explore your photos on the map_ - -## How can I view photos on the map on mobile? - -- Find the search icon located at the bottom right corner of your screen. -- Tap on the globe icon (Your map) withing the location -- Enter the map view and start exploring your photos from around the world. - -## How to enable map on your mobile app? - -- Tap the three horizontal lines located at the top left corner of your home - screen or swipe left on the home screen. -- Select _General_ settings. -- Enter the _Advanced_ settings. -- Use the toggle switch to turn the map feature on or off. - -## How to view Album photos on the map? - -- Open the album containing the photos you want to view -- Tap on the three horizontal lines located in the top right corner of the - screen. -- Select _Map_ from the options. -- View and explore your photos on the map. - -## How to enable map on desktop? - -- Click on the three horizontal lines located in the top left corner of the app. -- Navigate to _Preferences_ from the menu. -- Select _Advanced_ in the preferences menu. -- Click on _Map_ to access map settings. -- Toggle the map settings on and off based on your preferences. diff --git a/docs/docs/photos/features/passkeys.md b/docs/docs/photos/features/passkeys.md deleted file mode 100644 index fcbfc5b..0000000 --- a/docs/docs/photos/features/passkeys.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Passkeys -description: Using passkeys as a second factor for your Ente account ---- - -# Passkeys - -Passkeys are a new authentication mechanism that uses strong cryptography built -into devices, like Windows Hello or Apple's Touch ID. **You can use passkeys as -a second factor to secure your Ente account.** - -> [!TIP] -> -> Passkeys are the colloquial term for a WebAuthn (Web Authentication) -> credentials. -> -> - More details about why and how are in the Passkeys announcement -> [blog post](https://ente.io/blog/introducing-passkeys-on-ente/). -> - And to know more technical details about how our passkey verification works, -> you can see this -> [technical note in our source code](https://github.com/ente-io/ente/blob/main/web/docs/webauthn-passkeys.md). - -## Passkeys and TOTP - -Ente already supports TOTP codes (in fact, we built an -[entire app](https://ente.io/auth/) to store them...). Passkeys serve as an -alternative 2FA (second factor) mechanism. - -If you add a passkey to your Ente account, it will be used instead of any -existing 2FA codes that you have configured (if any). - -## Enabling and disabling passkeys - -Passkeys get enabled if you add one (or more) passkeys to your account. -Conversely, passkeys get disabled if you remove all your existing passkeys. - -To add and remove passkeys, use the _Passkey_ option in the settings menu. This -will open up _accounts.ente.io_, where you can manage your passkeys. - -## Login with passkeys - -If passkeys are enabled, then _accounts.ente.io_ will automatically open when -you log into your Ente account on a new device. Here you can follow the -instructions given by the browser to verify your passkey. - -> These instructions different for each browser and device, but generally they -> will ask you to use the same mechanism that you used when you created the -> passkey to verify it (scanning a QR code, using your fingerprint, pressing the -> key on your Yubikey or other security key hardware etc). - -## Recovery - -If you are unable to login with your passkey (e.g. if you have misplaced the -hardware key that you used to store your passkey), then you can **recover your -account by using your Ente recovery key**. - -During login, press cancel on the browser dialog to verify your passkey, and -then select the "Recover two-factor" option in the error message that gets -shown. This will take you to a place where you can enter your Ente recovery key -and login into your account. Now you can go to the _Passkey_ page to delete the -lost passkey and/or add a new one. - -If you have lost access to both your passkey and recovery key, please reach out -to [support@ente.io](mailto:support@ente.io) for help. diff --git a/docs/docs/photos/features/public-link.md b/docs/docs/photos/features/public-link.md deleted file mode 100644 index fd26adb..0000000 --- a/docs/docs/photos/features/public-link.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Public link -description: - Share photos with your friends and family without them needing to install - Ente Photos ---- - -# Public link - -Ente lets you share your photos via links, that can be accessed by anyone, -without an app or account. - -The contents within these links are also end-to-end encrypted. - -> Implementation details have been documented -> [here](https://ente.io/blog/building-shareable-links/). - -You can also use these links to collect photos from your friends after a party -or event. Everything they add also remains end-to-end encrypted. - -In addition to this, links support the following features: - -- Link expiry (so the links go poof after a duration you define) -- Device limits (in case you don't want someone to forwarding your link) -- Password lock (to add an additional level of protection to your photos) -- Prevent downloads (while we can't prevent screenshots, we can disable the - option to download your original photos) diff --git a/docs/docs/photos/features/quick-link.md b/docs/docs/photos/features/quick-link.md deleted file mode 100644 index d491099..0000000 --- a/docs/docs/photos/features/quick-link.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Quick link -description: Share photos with your friends and family without creating albums ---- - -# Quick link - -Quick links allows you to select single or multiple photos and create a link -that you can then share. You don't need to create an album first. - -> Behind the scene, Ente creates a special album and put all the selected files -> in that special album. - -- You can view all quick links created by you in the sharing tab, under Quick - links section. - -- Quick links can be converted to regular album. - -- Removing a link will not delete the photos that are present in that link. - -- Similar to a [public-link](./public-link), you can set link expiry, passwords - or device limits. diff --git a/docs/docs/photos/features/referral-program/free-storage.png b/docs/docs/photos/features/referral-program/free-storage.png deleted file mode 100644 index 90d3ab8..0000000 Binary files a/docs/docs/photos/features/referral-program/free-storage.png and /dev/null differ diff --git a/docs/docs/photos/features/referral-program/index.md b/docs/docs/photos/features/referral-program/index.md deleted file mode 100644 index d6f10b3..0000000 --- a/docs/docs/photos/features/referral-program/index.md +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: Referral program -description: Earn free storage by referring Ente Photos to your friends ---- - -# Referral program - -You can refer your friends to earn free storage on Ente. - -For each friend you refer, who upgrades to a paid plan, we will credit **10 GB** -of free storage. The referred customer will also receive an additional **10 GB** -with their paid subscription. - -That is, if you refer a friend, once your friend upgrades to a paid plan, both -you and your friend receive an additional 10 GB of storage. - -You can find your referral code under _Settings → General → Referrals_. - -
- -![Claim free storage screen](free-storage.png){width=400px} - -
- -### How much storage can I earn? - -The amount of free storage you can earn is capped to your current plan. This -means, you can at max double your storage. For example, if you're on a -100 GB plan, you can earn another 100 GB (by referring 10 friends), taking your -total available storage to 200 GB. - -You can keep track of your earned storage and referral details on _Claim free -storage_ screen. - -If you refer more paid customers than is allowed by your current plan, the extra -storage earned will be reserved and will become usable once you upgrade your -plan. - -### For how long do I have access to this storage? - -Earned storage will be accessible as long as your subscription is active, -provided there has been no abuse. - -In case our systems detect abuse, we may notify you and take back credited -storage. Low quality referrals (who don't renew their plans) or creation of fake -accounts, etc. could result in this. - -### How can my friends apply my referral code? - -Referral codes can be applied within _Settings → General → Referrals → Apply -Code_. - -
- -![Apply referral code screen](referral-code-application.png){width=400px} - -
- ---- - -More questions? Drop a mail to [referrals@ente.io](mailto:referrals@ente.io), -and we'll get back to you! diff --git a/docs/docs/photos/features/referral-program/referral-code-application.png b/docs/docs/photos/features/referral-program/referral-code-application.png deleted file mode 100644 index 27686e9..0000000 Binary files a/docs/docs/photos/features/referral-program/referral-code-application.png and /dev/null differ diff --git a/docs/docs/photos/features/share.md b/docs/docs/photos/features/share.md deleted file mode 100644 index 19716f0..0000000 --- a/docs/docs/photos/features/share.md +++ /dev/null @@ -1,100 +0,0 @@ ---- -title: Share -description: Securely share photos and videos stored in Ente Photos ---- - -# Sharing - -Ente supports end-to-end encrypted sharing of your photos and videos. - -This allows you to share your photos and videos with only the people you want, -without them being visible to anybody else. The files remain encrypted at all -times, and only the people you have shared with get the decryption keys. - -- If the person you want to share with is already on Ente, you can share an - album with them by entering their email address. - -- If they are not already on Ente, you can send them an invite and then share - with them after they've signed up. - -- Alternatively, you can create public links to share albums with people who are - not on Ente. - -With public links, the files are still end-to-end encrypted, so the sharing is -still secure. Note that the decryption keys are part of the public link so keep -in mind that anybody with the link will be able to share it with others. - -Both shared albums and public links allow [collaboration](collaborate). - -## Links - -You can create links to your albums by opening an album and clicking on the -Share icon. They are publicly accessible by anyone who you share the link with. -They don't need an app or account. - -These links can be password protected, or set to expire after a while. - -You can read more about the features supported by Links -[here](https://ente.io/blog/powerful-links/). - -## Albums - -If your loved ones are already on Ente, you can share an album with their -registered email address. - -If they are your partner, you can share your `Camera` folder on Android, or -`Recents` on iOS. Whenever you click new photos, they will automatically be -accessible on your partner's device. - -## Collaboration - -You can allow other Ente users to add photos to your album. This is a great way -for you to build an album together with someone. You can control access to the -same album - someone can be added as a `Collaborator`, while someone else as a -`Viewer`. - -If you wish to collect photos from folks who are not Ente, you can do so with -our Links. Simply tick the box that says "Allow uploads", and anyone who has -access to the link will be able to add photos to your album. - -## Organization - -You can favorite items that have been shared with you, and organize them into -your own albums. - -When you perform these operations, Ente will create a hard copy of these items, -that you fully own. This means, these copied items will count against your -storage space. - -We understand there are use cases where this approach will consume extra space -(for eg. if you are organizing photos of a family member). We chose hard copies -as a first version to avoid complexities regarding the ownership of shared -items, in case the original owner were to delete it from their own library. - -We plan to tackle these complexities in the future, by copying a reference to -the item that was shared, instead of the actual file, so that your storage will -only get consumed if the original owner deletes it from their library. If this -sounds useful to you, please participate in -[this discussion](https://github.com/ente-io/ente/discussions/790). - -## Technical details - -More details, including technical aspect about how the sharing features were -implemented, are in various blog posts announcing these features. - -- [Collaborative albums](https://ente.io/blog/collaborative-albums) - -- [Collect photos from people not on ente](https://ente.io/blog/collect-photos) - -- [Shareable links for albums](https://ente.io/blog/shareable-links), - [and their underlying technical implementation](https://ente.io/blog/building-shareable-links). - Since then, we have also added the ability to password protect public links, - and configure a duration after which the link will automatically expire. - -We are now working on the other requested features around sharing, including -comments and reactions. - -## Limitations - -Sharing is only available to paid customers. This limitation safeguards against -potential platform abuse. diff --git a/docs/docs/photos/features/trash.md b/docs/docs/photos/features/trash.md deleted file mode 100644 index 84a6852..0000000 --- a/docs/docs/photos/features/trash.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Trash -description: Deleting items and trash ---- - -# Trash - -Whenever you delete an item from Ente, it is moved to Trash. These items will be -automatically deleted from Trash after 30 days. You can manaully select photos -to permanently delete or completely empty the trash if you wish. - -Items in trash are included in your used storage calculation. - -## Recovery - -If you have deleted items accidentally, you can recover them from Trash by -selecting these items, and clicking the "Restore" button on the action bar that -pops up. diff --git a/docs/docs/photos/features/uncategorized.md b/docs/docs/photos/features/uncategorized.md deleted file mode 100644 index 1ab2407..0000000 --- a/docs/docs/photos/features/uncategorized.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Uncategorized -description: Uncategorized items in Ente Photos ---- - -# Uncategorized - -_Uncategorized_ is a special album type where photos are automatically added -under the following circumstances: - -- When you remove a photo from the last album, it is relocated to - _Uncategorized_ section. - -- During album deletion, if you choose to keep photos but delete the album, all - photos exclusive to the current album are moved to the _Uncategorized_ - section. - -Note: This does not include photos uploaded by others. - -### Cleaning up Uncategorized items - -In the mobile app, you can click on the overflow menu and click _Clean -Uncategorized_ option. All files that are also present in another album, that is -owned by the user, will be removed from the _Uncategorized_ section. diff --git a/docs/docs/photos/features/watch-folders.md b/docs/docs/photos/features/watch-folders.md deleted file mode 100644 index 7dea25e..0000000 --- a/docs/docs/photos/features/watch-folders.md +++ /dev/null @@ -1,56 +0,0 @@ ---- -title: Watch folder -description: - Automatic syncing of selected folders using the Ente Photos desktop app ---- - -# Watch folders - -The Ente desktop app allows you to "watch" a folder on your computer for any -changes, creating a one-way background sync from folders on your computer to -Ente albums. This is intended to automate your photo management and backup. - -By using the "Watch folders" option in the sidebar, you can tell the desktop app -which are the folders that you want to watch for changes. The app will then -automatically upload new files added to these folders to the corresponding ente -album (it will also upload them initially). And if a file is deleted locally, -then the corresponding Ente file will also be automatically moved to -uncategorized. - -Paired with the option to run Ente automatically when your computer starts, this -allows you to automate backups to ente's cloud. - -### Steps - -1. Press the **Watch folders** button in the sidebar. This will open up a dialog - where you can add and remove watched folders. - -2. To start watching a folder, press the **Add folder** button and select the - folder on your system that you want to watch for any changes. You can also - drag and drop the folder here. - -3. If the folder has nesting, you will see two options - **A single album** and - **Separate albums**. This work similarly to the - [options you see when you drag and drop a folder with nested folders](/photos/features/albums#preserving-folder-structure). - -4. After choosing any of the above options, the folder will be initially synced - to Ente's cloud and monitored for any changes. You can now close the dialog - and the sync will continue in background. - -5. When the app is syncing in the background it'll show a small progress status - in the bottom right. You can expand it to see more details if needed. - -6. You can stop watching any folder by clicking on the three dots next to the - watch folder entry, and then selecting **Stop watching**. - -> Note: In case you start a new upload while an existing sync is in progress, -> the sync will be paused then and resumed when your upload is done. - -Some more details about the feature are in our -[blog post](http://ente.io/blog/watch-folders) announcing it. - -## 2-way sync - -Note that a two way sync is not currently supported. Attempting to export data -to the same folder that is also being watched by the Ente app will result in -undefined behaviour (e.g. duplicate files, export stalling etc). diff --git a/docs/docs/photos/index.md b/docs/docs/photos/index.md deleted file mode 100644 index 0249c0d..0000000 --- a/docs/docs/photos/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Ente Photos -description: User guide for Ente Photos ---- - -# Ente Photos - -Ente Photos is an end-to-end encrypted alternative to Google Photos and Apple -Photos. You can use it to safely and securely store your photos on the cloud. - -While security and privacy form the bedrock of Ente Photos, it is not at the -cost of usability. The user interface is simple, and we are continuously working -to make it even simpler. - -The goal is a product that can be used by people with all sorts of technical -ability and background. - -These help docs are divided into four sections. Choose the relevant page from -the sidebar menu, or use the search at the top. diff --git a/docs/docs/photos/migration/export/continuous-sync.webp b/docs/docs/photos/migration/export/continuous-sync.webp deleted file mode 100644 index f5b1346..0000000 Binary files a/docs/docs/photos/migration/export/continuous-sync.webp and /dev/null differ diff --git a/docs/docs/photos/migration/export/export-1.png b/docs/docs/photos/migration/export/export-1.png deleted file mode 100644 index 49f03b2..0000000 Binary files a/docs/docs/photos/migration/export/export-1.png and /dev/null differ diff --git a/docs/docs/photos/migration/export/export-2.png b/docs/docs/photos/migration/export/export-2.png deleted file mode 100644 index f181a24..0000000 Binary files a/docs/docs/photos/migration/export/export-2.png and /dev/null differ diff --git a/docs/docs/photos/migration/export/export-3.png b/docs/docs/photos/migration/export/export-3.png deleted file mode 100644 index 3df2a56..0000000 Binary files a/docs/docs/photos/migration/export/export-3.png and /dev/null differ diff --git a/docs/docs/photos/migration/export/export-4.png b/docs/docs/photos/migration/export/export-4.png deleted file mode 100644 index e8abcf0..0000000 Binary files a/docs/docs/photos/migration/export/export-4.png and /dev/null differ diff --git a/docs/docs/photos/migration/export/export-5.png b/docs/docs/photos/migration/export/export-5.png deleted file mode 100644 index aa939e5..0000000 Binary files a/docs/docs/photos/migration/export/export-5.png and /dev/null differ diff --git a/docs/docs/photos/migration/export/index.md b/docs/docs/photos/migration/export/index.md deleted file mode 100644 index 39d1498..0000000 --- a/docs/docs/photos/migration/export/index.md +++ /dev/null @@ -1,70 +0,0 @@ ---- -title: Exporting your data from Ente Photos -description: Guide for exporting your photos out from Ente Photos ---- - -# Exporting your data out of Ente Photos - -Please follow the following simple steps to keep a local copy of the photos and -videos you have uploaded to Ente. - -1. Sign in to [our desktop app](https://ente.io/download/desktop), if you - haven't done so already. - - ![Ente - Sign in to export data](sign-in.png) - -2. Open the side bar, and select the option to **Export Data**. - - ![Ente - Export data](export-1.png) - -3. Choose the destination folder by clicking on three dots icon. - -
- -![Ente - Select destination folder and start](export-2.png){width=400px} - -
- -4. Select the folder and then click on **Start** - -
- -![Ente - Export in progress](export-3.png){width=400px} - -
- -5. Wait for the export to complete. - -
- -![Ente - Rexport](export-4.png){width=400px} - -
- -6. In case your download gets interrupted, Ente will resume from where it left - off. Simply select **Export Data** again and click on **Resync**. - -
- -![Ente - Rexport](export-5.png){width=400px} - -
- -### Sync continuously - -You can switch on the toggle to **Sync continuously** to eliminate manual -exports each time new photos are added to Ente. This feature automatically -detects new files and runs exports accordingly. It also ensures that exported -data reflects the latest album states with new files, moves, and deletions. - -![Ente - Continuous sync](continuous-sync.webp) - ---- - -If you run into any issues during your data export, please reach out to -[support@ente.io](mailto:support@ente.io) and we will be happy to help you! - -Note that we also provide a -[CLI tool](https://github.com/ente-io/ente/tree/main/cli#export) to export your -data. You can find more information about the export in the -[export FAQ](/photos/faq/export). diff --git a/docs/docs/photos/migration/export/sign-in.png b/docs/docs/photos/migration/export/sign-in.png deleted file mode 100644 index 4a9fa4a..0000000 Binary files a/docs/docs/photos/migration/export/sign-in.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-amazon-photos.md b/docs/docs/photos/migration/from-amazon-photos.md deleted file mode 100644 index 1852345..0000000 --- a/docs/docs/photos/migration/from-amazon-photos.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: Import from Amazon Photos -description: Migrating your existing photos from Amazon Photos to Ente Photos ---- - -# Import from Amazon Photos - -Amazon Photos does not provide a way to export all of your photos and videos, or -even albums with a single click. - -According to their -[help desk article](https://www.amazon.com/gp/help/customer/display.html?nodeId=GVCELKY5JW77VE7W), -you have to select and download photos individually. - -Once you've done that, simply drag and drop this folder into -[our desktop app](https://ente.io/download/desktop), and Ente will take care of -the rest. - -> Note: In case your uploads get interrupted, just drag and drop the folder into -> the same album again, and we will ignore already backed up files and upload -> just the rest. - -If you run into any issues during this migration, please reach out to -[support@ente.io](mailto:support@ente.io) and we will be happy to help you! diff --git a/docs/docs/photos/migration/from-apple-photos/export.png b/docs/docs/photos/migration/from-apple-photos/export.png deleted file mode 100644 index aa0ba14..0000000 Binary files a/docs/docs/photos/migration/from-apple-photos/export.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-apple-photos/index.md b/docs/docs/photos/migration/from-apple-photos/index.md deleted file mode 100644 index 96ba686..0000000 --- a/docs/docs/photos/migration/from-apple-photos/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Import from Apple Photos -description: Migrating your existing photos from Apple Photos to Ente Photos ---- - -# Import from Apple Photos - -## Mobile - -If you are using Apple Photos on your phone, then the most seamless way is to -install the Ente app on your mobile device. The Ente app will directly read from -your iCloud library and import. - -> [!TIP] -> -> For large libraries, this process may take a bit of time, so you can speed it -> up by keeping the app running in the foreground while the initial import is in -> progress (Note: this is only needed during the initial import, subsequently -> the app will automatically backup photos in the background as you take them). - -## Desktop - -Alternatively, or if you prefer to use the desktop app, then you can use the -following steps: - -#### 1. Export your data from the Apple Photos app. - -Select the files you want to export (`Command + A` to select them all), and -click on `File` > `Export` > `Export Unmodified Originals`. - -![Apple Photos - Export](export.png) - -In the dialog that pops up, select File Name as `Sequential` and provide any -prefix you'd like. This is to make sure that we combine the photo and video -portions of your Live Photos correctly. - -![Apple Photos - Sequential file names](sequential.png) - -Finally, choose an export directory and confirm by clicking `Export Originals`. -You will receive a notification from the app once your export is complete. - -#### 2. Import into Ente - -Now simply drag and drop the downloaded folders into -[our desktop app](https://ente.io/download/desktop) and grab a cup of coffee (or -a good night's sleep, depending on the size of your library) while we handle the -rest. - -> Note: In case your uploads get interrupted, just drag and drop the folders -> into the same albums again, and we will ignore already backed up files and -> upload just the rest. - -If you run into any issues during this migration, please reach out to -[support@ente.io](mailto:support@ente.io) and we will be happy to help you! diff --git a/docs/docs/photos/migration/from-apple-photos/sequential.png b/docs/docs/photos/migration/from-apple-photos/sequential.png deleted file mode 100644 index 92f29d4..0000000 Binary files a/docs/docs/photos/migration/from-apple-photos/sequential.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-photos-1.png b/docs/docs/photos/migration/from-google-photos/google-photos-1.png deleted file mode 100644 index 932c772..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-photos-1.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-photos-2.png b/docs/docs/photos/migration/from-google-photos/google-photos-2.png deleted file mode 100644 index a72fd62..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-photos-2.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-photos-3.png b/docs/docs/photos/migration/from-google-photos/google-photos-3.png deleted file mode 100644 index e600ce8..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-photos-3.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-photos-4.png b/docs/docs/photos/migration/from-google-photos/google-photos-4.png deleted file mode 100644 index f3cf570..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-photos-4.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-photos-5.png b/docs/docs/photos/migration/from-google-photos/google-photos-5.png deleted file mode 100644 index 48bf259..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-photos-5.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/google-takeout.png b/docs/docs/photos/migration/from-google-photos/google-takeout.png deleted file mode 100644 index 4cc580b..0000000 Binary files a/docs/docs/photos/migration/from-google-photos/google-takeout.png and /dev/null differ diff --git a/docs/docs/photos/migration/from-google-photos/index.md b/docs/docs/photos/migration/from-google-photos/index.md deleted file mode 100644 index 128c809..0000000 --- a/docs/docs/photos/migration/from-google-photos/index.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Import from Google Photos -description: Migrating your existing photos from Google Photos to Ente Photos ---- - -# Import from Google Photos - -Follow the following steps to recover your data from Google Photos and preserve -it with Ente. - -### Steps - -1. Open [takeout.google.com](https://takeout.google.com). - -2. Click on "Deselect All" (since by default all Google services are selected). - - ![Google Takeout - Create a new export](google-photos-1.png) - -3. Scroll down to find Google Photos in the list and select it by clicking the - check box next to it. - - ![Google Takeout - Select Google Photos](google-photos-2.png) - -4. Click on the button that says "All photo albums included". - -5. Select the albums you want to export. - - ![Google Takeout - Select albums](google-photos-3.png) - -6. Scroll down and click on "Next Step". - - ![Google Takeout - Next](google-photos-4.png) - -7. Select "Frequency" and "File size" depending on the amount of storage on your - system and click on "Create export". Make sure you select ZIP as the format. - - ![Google Takeout - Frequency and file size](google-photos-5.png) - -8. Wait for Google to send you your data. - -9. Open [our desktop app](https://ente.io/download/desktop), click on "Upload", - select "Google takeout" and pick the ZIP file you just downloaded. If you - were provided with multiple ZIP files, please extract **all** the ZIP files - into one folder and select that folder instead. - -> While the app supports uploading multiple ZIPs too, we recommend unzipping -> them all into a single folder and uploading that folder instead so that your -> photo dates are imported properly -> ([details](/photos/faq/metadata#importing-from-google-takeout)). -> ->
-> -> Note that you can still preserve your albums even when uploading a single -> folder - select the create new album option and the app will ask you if you -> want to put each leaf folder into a separate album -> ([details](/photos/features/albums#uploading-a-nested-folder)). - -![Importing Google Takeout into Ente](google-takeout.png){width=400px} - -10. Wait for the uploads to complete as Ente parses the metadata generated by - Google, and preserves them along with the corresponding files, end-to-end - encrypted! - ---- - -In case your uploads get interrupted, just drag and drop the file again and we -will ignore already backed up files and upload just the rest. - -If you run into any issues during this migration, please reach out to -[support@ente.io](mailto:support@ente.io) and we will be happy to help you! - -> [!TIP] -> -> In case you wish to use face recognition and other advanced search features -> provided by Ente, we recommend that you enable -> [machine learning](/photos/features/machine-learning) before importing your -> photos so that the Ente app can directly index files as they are getting -> uploaded. diff --git a/docs/docs/photos/migration/from-local-hard-disk.md b/docs/docs/photos/migration/from-local-hard-disk.md deleted file mode 100644 index 91971ba..0000000 --- a/docs/docs/photos/migration/from-local-hard-disk.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Import from local hard disk -description: - Migrating to Ente Photos by importing data from your local hard disk ---- - -# Import photos from your local hard disk - -Simply drag and drop the folders you want to preserve into -[our desktop app](https://ente.io/download/desktop) and grab a cup of coffee (or -a good night's sleep depending on the size of your library), while we will take -care of the rest. - -> Note: in case your uploads get interrupted, just drag and drop the folders -> into the same albums again, and we will ignore already backed up files and -> upload just the rest. - -If you run into any issues during uploads, please reach out to -[support@ente.io](mailto:support@ente.io) and we will be happy to help you! diff --git a/docs/docs/photos/migration/index.md b/docs/docs/photos/migration/index.md deleted file mode 100644 index b37bfd2..0000000 --- a/docs/docs/photos/migration/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: Migrating -description: - Guides for migrating your existing photos into Ente Photos and exporting - your data out of Ente Photos ---- - -# Migrating to/from Ente Photos - -- [Import from Google Photos](from-google-photos/) -- [Import from Apple Photos](from-apple-photos/) -- [Import from Amazon Photos](from-amazon-photos) -- [Import from local hard disk](from-local-hard-disk) -- [Export out of Ente Photos](export/) diff --git a/docs/docs/photos/troubleshooting/desktop-install/index.md b/docs/docs/photos/troubleshooting/desktop-install/index.md deleted file mode 100644 index 19ff875..0000000 --- a/docs/docs/photos/troubleshooting/desktop-install/index.md +++ /dev/null @@ -1,101 +0,0 @@ ---- -title: Desktop installation -description: Troubleshooting issues when installing the Ente Photos desktop app ---- - -# Desktop app installation - -The latest version of the Ente Photos desktop app can be downloaded from -[ente.io/download](https://ente.io/download). If you're having trouble, please -see if any of the following cases apply. - -- [Windows](#windows) -- [Linux](#linux) - -## Windows - -If the app stops with an "A JavaScript error occurred in the main process - The -specified module could not be found" error on your Windows machine when you -start it, then you might need to install the VC++ runtime from Microsoft. - -This is what the error looks like: - -
- -![Error when VC++ runtime is not installed](windows-vc.png){width=500px} - -
- -You can install the Microsoft VC++ redistributable runtime from here:
-https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170#latest-microsoft-visual-c-redistributable-version - -## Linux - -### AppImage desktop integration - -AppImages are not fully standalone, and they require additional steps to enable -full "desktop integration": - -- Showing the app icon, -- Surfacing the app in the list of installed apps, -- Handling redirection after passkey verification. - -All the ways of enabling AppImage desktop integration are mentioned in -[AppImage documentation](https://docs.appimage.org/user-guide/run-appimages.html#integrating-appimages-into-the-desktop). - -For example, you can download the -[appimaged](https://github.com/probonopd/go-appimage/releases) AppImage, run it, -and then download the Ente Photos AppImage into your `~/Downloads` folder. -_appimaged_ will then pick it up automatically. - -### AppImages on ARM64 - -If you're on an ARM64 machine running Linux, and the AppImages doesn't do -anything when you run it, you will need to run the following command on your -machine: - -```sh -sudo ln -s /usr/lib/aarch64-linux-gnu/libz.so{.1,} -``` - -It is possible that the exact path might be different on your machine. Briefly, -what we need to do is create `libz.so` as an alias for `libz.so.1`. For more -details, see the following upstream issues: - -- libz.so cannot open shared object file on ARM64 - - [AppImage/AppImageKit/issues/1092](https://github.com/AppImage/AppImageKit/issues/1092) - -- libz.so: cannot open shared object file with Ubuntu arm64 - - [electron-userland/electron-builder/issues/7835](https://github.com/electron-userland/electron-builder/issues/7835) - -### AppImage says it requires FUSE - -See -[docs.appimage.org](https://docs.appimage.org/user-guide/troubleshooting/fuse.html#the-appimage-tells-me-it-needs-fuse-to-run). - -tl;dr; for example, on Ubuntu, - -```sh -sudo apt install libfuse2 -``` - -### Linux SUID error - -On some Linux distributions, if you run the AppImage from the CLI, it might fail -with the following error: - -> The SUID sandbox helper binary was found, but is not configured correctly. - -This happens when you try to run the AppImage from the command line. If you -instead double click on the AppImage in your Files browser, then it should start -properly. - -If you do want to run it from the command line, you can do so by passing the -`--no-sandbox` flag when executing the AppImage. e.g. - -```sh -./ente.AppImage --no-sandbox -``` - -For more details, see this upstream issue on -[electron](https://github.com/electron/electron/issues/17972). diff --git a/docs/docs/photos/troubleshooting/desktop-install/windows-vc.png b/docs/docs/photos/troubleshooting/desktop-install/windows-vc.png deleted file mode 100644 index 852c037..0000000 Binary files a/docs/docs/photos/troubleshooting/desktop-install/windows-vc.png and /dev/null differ diff --git a/docs/docs/photos/troubleshooting/files-not-uploading.md b/docs/docs/photos/troubleshooting/files-not-uploading.md deleted file mode 100644 index b56afe5..0000000 --- a/docs/docs/photos/troubleshooting/files-not-uploading.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Files not uploading -description: - Troubleshooting when files are not uploading from your Ente Photos app ---- - -# Files not uploading - -## Network Issue - -If you are using VPN, please try disabling the VPN or switching your provider. - -## Web / Desktop - -### Disable "Faster uploads" - -We use a Cloudflare proxy to speed up uploads -([blog post](https://ente.io/blog/tech/making-uploads-faster/)). However, in -some network configurations (depending on the ISP) this might prevent uploads -from going through, so if you're having trouble with uploads please try after -disabling the "Faster uploads" setting in _Preferences > Advanced_. - -### Certain file types are not uploading - -The desktop/web app tries to detect if a particular file is video or image. If -the detection fails, then the app skips the upload. Please contact our -[support](mailto:support@ente.io) if you find that a valid file did not get -detected and uploaded. diff --git a/docs/docs/photos/troubleshooting/large-uploads.md b/docs/docs/photos/troubleshooting/large-uploads.md deleted file mode 100644 index deb66e4..0000000 --- a/docs/docs/photos/troubleshooting/large-uploads.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: Large uploads -description: Ente Photos and large (multi TB) uploads ---- - -# Large uploads - -Some customers have reported an issue where their desktop app seems to get stuck -when they are trying to do the initial upload of multi-TB libraries. - -A telltale sign of this is that app would seem to freeze during the upload, and -then restart again from the same state. If you were to look in the logs, you -would notice messages around the "renderer process crashing". - -When this happens, you'll notice in the logs that it crashes when trying to -upload some specific large video, or a set of specific large videos. - -As a workaround, you can **put these videos in a separate folder, complete the -rest of your upload, and then later upload this folder**. - -Another alternative is to drag and drop the folder you are trying to upload into -the app instead of adding a folder watch or uploading a zip. This works better -because during a drag and drop, the app has direct access to the files via -browser APIs instead of going via the file system. - -Note that the app will detect and skip over already uploaded items into an -album, so dragging and dropping the same folder again to upload to the same -album is fine. - -> The underlying reason for this crash seeems to be the -> [4GB RAM usage limit for Electron apps](https://www.electronjs.org/blog/v8-memory-cage). -> We try to upload large videos by streaming them instead of reading them all in -> at once, but in some cases, even the streaming them seems to exceed the 4GB -> limit. We're trying to understand when this happens a bit more precisely, and -> if required, reimplement our uploads in a different way to avoid these. diff --git a/docs/docs/photos/troubleshooting/nas.md b/docs/docs/photos/troubleshooting/nas.md deleted file mode 100644 index 262d4c7..0000000 --- a/docs/docs/photos/troubleshooting/nas.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: Avoiding NAS -description: Ente Photos and NAS (network drives) ---- - -# Network drives - -The Ente Photos desktop app currently does not support NAS (network drives). - -The app will actually work, and in some cases it will work fine too, but in -practice we have found that network storage products sometimes have flaky file -system emulation that causes bad performance during uploads, or when trying to -directly stream chunks of Google Takeout zips that are stored on network drives. - -In particular, the folder watch functionality suffers a lot since the app needs -access to file system events to detect changes to the users files so that they -can be uploaded whenever there are changes. - -Since are high chances of the user having a subpar experience, we request -customers to avoid using the desktop app directly with network attached storage -and instead temporarily copy the files to their local storage for uploads, and -avoid watching folders that live on a network drive. diff --git a/docs/docs/photos/troubleshooting/sharing-logs.md b/docs/docs/photos/troubleshooting/sharing-logs.md deleted file mode 100644 index 4e2eb2d..0000000 --- a/docs/docs/photos/troubleshooting/sharing-logs.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: Sharing logs with support -description: How to report bugs and share the logs from your Ente Photos app ---- - -# Sharing debug logs - -In some cases when you report an issue, our customer support might request you -to share debug logs from your app to help our developers find the issue. - -Note that the debug logs contain potentially sensitive information like the file -names, so please feel free to not share them if you have any hesitation or want -to keep these private. We will try to diagnose the issue even without the logs, -the logs just make the process a bit faster and easier. - -## Mobile - -- Open settings (tap on the three horizontal lines button). -- Tap on _Support_ from the settings. -- Select for the option to _Report a Bug_. -- Tap on _Report a bug_. - -## Desktop and Web - -- Open settings (click on the three horizontal lines button located at the top - left corner of the screen). -- Click on the _Help_ option towards the bottom of settings. -- Click on _View logs_. This will show you the location of the logs on your - system (desktop), or download them from the browser onto your computer (web). -- Go back to settings. -- Click on _Support_. This will open your email client where you can attach the - logs in the email and describe the issue. - -## Desktop - -On the desktop app, you can also directly view the logs on your computer at the -following locations: - -- macOS: `~/Library/Logs/ente/ente.log` -- Linux: `~/.config/ente/logs/ente.log` -- Windows: `%USERPROFILE%\AppData\Roaming\ente\logs\ente.log` - -## Send email manually - -If _Report a bug_ or _Support_ doesn't automatically open your email client, you -can also directly send a mail to support@ente.io. diff --git a/docs/docs/photos/troubleshooting/thumbnails.md b/docs/docs/photos/troubleshooting/thumbnails.md deleted file mode 100644 index 8bf1e5c..0000000 --- a/docs/docs/photos/troubleshooting/thumbnails.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Missing thumbnails -description: - Troubleshooting when thumbnails are not being generated when uploading - images in Ente Photos ---- - -# Missing or improper thumbnails - -Firefox (including its other forks like Librewolf) prevents the app from -generating thumbnails if the "block canvas fingerprinting" setting in Firefox is -enabled (i.e. **`privacy.resistFingerprinting`** is set to true in -`about:config`). The app needs the canvas to generate thumbnails, and that -Firefox feature blocks access to the canvas. Ideally, Firefox should be -prompting for a permission, but some users have reported that sometime it -silently blocks access, and turning off that setting works. - -Similar issues may arise if you are using an **extension** that blocks access to -the canvas, or some other browser that has similar restrictions. - -In all these cases, you need to allow Ente access to the canvas for the -thumbnail to be generated properly. - -Note that once the thumbnails are missing or have been incorrectly generated, -they cannot be viewed on any of the other clients (the thumbnails are only -generated once, during upload, so viewing it in a different place does not -change the already generated thumbnail). - -There is currently no functionality to regenerate thumbnails in the above cases. -You will need to upload the affected files again. - -Ente skips over files that have already been uploaded, so you can drag and drop -the original folder or zip again after removing the files without thumbnails, -and it'll only upload the files that are necessary. diff --git a/docs/docs/public/client-museum-s3.png b/docs/docs/public/client-museum-s3.png deleted file mode 100644 index dd22ec1..0000000 Binary files a/docs/docs/public/client-museum-s3.png and /dev/null differ diff --git a/docs/docs/public/favicon.png b/docs/docs/public/favicon.png deleted file mode 100644 index 334abda..0000000 Binary files a/docs/docs/public/favicon.png and /dev/null differ diff --git a/docs/docs/public/logo.png b/docs/docs/public/logo.png deleted file mode 100644 index 8a84dfb..0000000 Binary files a/docs/docs/public/logo.png and /dev/null differ diff --git a/docs/docs/public/replication.png b/docs/docs/public/replication.png deleted file mode 100644 index 19fbc1c..0000000 Binary files a/docs/docs/public/replication.png and /dev/null differ diff --git a/docs/docs/self-hosting/faq/backup.md b/docs/docs/self-hosting/faq/backup.md deleted file mode 100644 index 455468b..0000000 --- a/docs/docs/self-hosting/faq/backup.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Backups -description: General introduction to backing up your self hosted Ente instance ---- - -# Backing up your Ente instance - -> [!WARNING] -> -> This is not meant to be a comprehensive and bullet proof guide. There are many -> moving parts, and small mistakes might make your backups unusable. -> -> Please treat this only as a general introduction. And remember to test your -> restores. - -At the minimum, a functional Ente backend needs three things: - -1. Museum (the API server) -2. Postgres (the database) -3. Object storage (any S3-compatible object storage) - -When thinking about backups, this translates into backing up the relevant state -from each of these: - -1. For museum, you'd want to backup your `museum.yaml`, `credentials.yaml` or - any other custom configuration that you created. In particular, you should - backup the - [secrets that are specific to your instance](https://github.com/ente-io/ente/blob/74377a93d8e20e969d9a2531f32f577b5f0ef090/server/configurations/local.yaml#L188) - (`key.encryption`, `key.hash` and `jwt.secret`). - -2. For postgres, the entire data volume needs to be backed up. - -3. For object storage, the entire data volume needs to be backed up. - -A common oversight is taking a lot of care for backing up the object storage, -even going as far as enabling replication and backing up the the multiple object -storage volumes, but not applying the same care to the database backup. - -While the actual encrypted photos are indeed stored in the object storage, -**this encrypted data will not be usable without the database** since the -database contains information like a file specific encryption key. - -Viewed differently, to decrypt your data you need three pieces of information: - -1. The encrypted file data itself (which comes from the object storage backup). - -2. The ([encrypted](https://ente.io/architecture/)) file and collection specific - encryption keys (which come from the database backup). - -3. The master key (which comes from your password). - ---- - -If you're starting out with self hosting, our recommendation is to start by -keeping a plaintext backup of your photos. -[You can use the CLI or the desktop app to automate this](/photos/faq/export). - -Once you get more comfortable with the various parts, you can try backing up -your instance. As a reference, -[this document outlines how Ente itself treats backups](https://ente.io/reliability). - -If you stop doing plaintext backups and instead rely on your instance backup, -ensure that you do the full restore process also to verify you can get back your -data. As the industry saying goes, a backup without a restore is no backup at -all. diff --git a/docs/docs/self-hosting/faq/index.md b/docs/docs/self-hosting/faq/index.md deleted file mode 100644 index eedd1fb..0000000 --- a/docs/docs/self-hosting/faq/index.md +++ /dev/null @@ -1,47 +0,0 @@ ---- -title: FAQ - Self hosting -description: Frequently asked questions about self hosting Ente ---- - -# Frequently Asked Questions - -### Do Ente Photos and Ente Auth share the same backend? - -Yes. The apps share the same backend, the same database and the same object -storage namespace. The same user account works for both of them. - -### Can I just self host Ente Auth? - -Yes, if you wish, you can self-host the server and use it only for the 2FA auth -app. The starter Docker compose will work fine for either Photos or Auth (or -both!). - -> You currently don't need to configure the S3 object storage (e.g. minio -> containers) if you're only using your self hosted Ente instance for auth. - -### Can I use the server with _X_ as the object storage? - -Yes. As long as whatever X you're using provides an S3 compatible API, you can -use it as the underlying object storage. For example, the starter self-hosting -Docker compose file we offer uses MinIO, and on our production deployments we -use Backblaze/Wasabi/Scaleway. But that's not the full list - as long as the -service you intend to use has a S3 compatible API, it can be used. - -### How do I increase storage space for users on my self hosted instance? - -See the [guide for administering your server](/self-hosting/guides/admin). In -particular, you can use the `ente admin update-subscription` CLI command to -increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -of accounts on your instance. - -### How can I become an admin on my self hosted instance? - -The first user you create on your instance is treated as an admin. - -If you want, you can modify this behaviour by providing an explicit list of -admins in the [configuration](/self-hosting/guides/admin#becoming-an-admin). - -### Can I disable registration of new accounts on my self hosted instance? - -Yes. See `internal.disable-registration` in local.yaml. diff --git a/docs/docs/self-hosting/faq/otp.md b/docs/docs/self-hosting/faq/otp.md deleted file mode 100644 index 1811690..0000000 --- a/docs/docs/self-hosting/faq/otp.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Verification code -description: Getting the OTP for a self hosted Ente ---- - -# Verification code - -The self-hosted Ente by default does not send out emails, so you can pick the -verification code by: - -- Getting it from the server logs, or - -- Reading it from the DB (otts table) - -You can also set pre-defined hardcoded OTTs for certain users when running -locally by creating a `museum.yaml` and adding the `internal.hardcoded-ott` -configuration setting to it. See -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server source code for details about how to define this. - -> [!NOTE] -> -> If you're not able to get the OTP with the above methods, make sure that you -> are actually connecting to your self hosted instance and not to Ente's -> production servers. e.g. you can use the network requests tab in the browser -> console to verify that the API requests are going to your server instead of -> `api.ente.io`. diff --git a/docs/docs/self-hosting/faq/sharing.md b/docs/docs/self-hosting/faq/sharing.md deleted file mode 100644 index 2eb5578..0000000 --- a/docs/docs/self-hosting/faq/sharing.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Album sharing -description: Getting album sharing to work using an self-hosted Ente ---- - -# Is public sharing available for self-hosted instances? - -Yes. - -You'll need to run two instances of the web app, one is regular web app, but -another one is the same code but running on a different origin (i.e. on a -different hostname or different port). - -Then, you need to tell the regular web app to use your second instance to -service public links. You can do this by setting the -`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` to point to your second instance when running -or building the regular web app. - -For more details, see -[.env](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env) and -[.env.development](https://github.com/ente-io/ente/blob/main/web/apps/photos/.env.development). - -As a concrete example, assuming we have a Ente server running on -`localhost:8080`, we can start two instances of the web app, passing them -`NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT` that points to the origin -("scheme://host[:port]") of the second "albums" instance. - -The first one, the normal web app - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \ - NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \ - yarn dev:photos -``` - -The second one, the same code but acting as the "albums" app (the only -difference is the port it is running on): - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 \ - NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=http://localhost:3002 \ - yarn dev:albums -``` - -If you also want to change the prefix (the origin) in the generated public -links, to use your custom albums endpoint in the generated public link instead -of albums.ente.io, set `apps.public-albums` property in museum's configuration - -For example, when running using the starter docker compose file, you can do this -by creating a `museum.yaml` and defining the following configuration there: - -```yaml -apps: - public-albums: http://localhost:3002 -``` - -(For more details, see -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server's source code). - -## Dockerfile example - -Here is an example of a Dockerfile by @Dylanger on our community Discord. This -runs a standalone self-hosted version of the public albums app in production -mode. - -```Dockerfile -FROM node:20-alpine as builder - -WORKDIR /app -COPY . . - -ARG NEXT_PUBLIC_ENTE_ENDPOINT=https://your.ente.example.org -ARG NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your.albums.example.org - -RUN yarn install && yarn build - -FROM node:20-alpine - -WORKDIR /app -COPY --from=builder /app/apps/photos/out . - -RUN npm install -g serve - -ENV PORT=3000 -EXPOSE ${PORT} - -CMD serve -s . -l tcp://0.0.0.0:${PORT} -``` - -Note that this only runs the public albums app, but the same principle can be -used to run both the normal Ente photos app and the public albums app. There is -a slightly more involved example showing how to do this also provided by in a -community contributed guide about -[configuring external S3](/self-hosting/guides/external-s3). - -You will also want to tell museum about your custom shared albums endpoint so -that it uses that instead of the default URL when creating share links. You can -configure that in museum's `config.yaml`: - -``` -apps: - public-albums: https://your.albums.example.org -``` diff --git a/docs/docs/self-hosting/guides/Tailscale.md b/docs/docs/self-hosting/guides/Tailscale.md deleted file mode 100644 index 1f0a759..0000000 --- a/docs/docs/self-hosting/guides/Tailscale.md +++ /dev/null @@ -1,286 +0,0 @@ ---- -title: Self Hosting with Tailscale (Community) -description: Guides for self-hosting Ente Photos and/or Ente Auth with Tailscale ---- -# Guide - -This guide aims to achieve self-hosting Ente photos or Ente-Auth with tailscale (TSDPROXY) without exposing any port OR if someone is behind CGNAT and cannot open any port on the internet but want to run their own selfhosted service for themselves, friends and family only. - -Before getting start keep the following NOTE in mind. - -> [!NOTE] -> If someone is behind double or triple CGNAT; must install tailscale system wide by running `curl -fsSL https://tailscale.com/install.sh | sh` in your linux terminal and `sudo tailscale up` otherwise dns resolver will fail and uploading will not work. This is not necessary for those who are not behing CGNAT. -> This guide also work on docker rootless and normal. - -> [!CAUTION] -Remember that current docker update 28.0.0 has some bug and cannot connect to external network. Make sure to install docker-ce 27.5.0, docker-ce-rootless-extras 27.5.0 and docker-ce-cli 27.5.0. Hopefully docker 28.1.0 will resolve this issue in next week. Refrence links are [Moby Github Repo Issues 49511](https://github.com/moby/moby/issues/49511) and [Moby Github Repo Issues 49519](https://github.com/moby/moby/issues/49519) - -> [!IMPORTANT] -> For Docker rootless, the user must have local permissions for all directories required by the Ente-photos self-hosted server. This can be achieved by running `sudo chown -R 1000:1000 /home/ubuntu/docker/ente`. In the Linux terminal, you can check the UID with `id -u` or simply `id`. The first user typically has UID 1000. -> To allow listening and pinging on any port without root privileges, create a file called `/etc/sysctl.d/99-rootless.conf` with the following content: -> ``` -> net.ipv4.ip_unprivileged_port_start=0 -> net.ipv4.ping_group_range = 0 2147483647 -> ``` -> than run `sudo sysctl --system`. -> Create `~/.config/systemd/user/docker.service.d/override.conf` with the following content: -> ``` -> [Service] -> Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_NET=slirp4netns" -> Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_PORT_DRIVER=slirp4netns" -> ``` -> and Restart the docker daemon -> `systemctl --user restart docker` -> Instead of `--volume /var/run/docker.sock:/var/run/docker.sock` in TSDPROXY compose.yaml, use `--volume $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock` - -## GETTING START WITH SETUP ## -First of all create a directory `sudo mkdir -p /home/ubuntu/docker/tsdproxy/config` than `cd docker/tsdproxy` and create compose.yaml file by running `sudo nano compose.yaml`. Populate it with the following: -``` -services: - tsdproxy: - image: almeidapaulopt/tsdproxy - container_name: tsdproxy - restart: unless-stopped - environment: - TZ: Asia/Singapur # change me - volumes: - - $XDG_RUNTIME_DIR/docker.sock:/var/run/docker.sock # for docker rootless otherwise /var/run/docker.sock:/var/run/docker.sock - - tsdproxy_data:/data - - /home/lee/docker/tsdproxy/config:/config - networks: - - proxy - labels: # giving the labels here will create tsdproxy instance in tailscale admin counsle and GUI can be accessable through tailscale if device is connected - - tsdproxy.enable=true - - tsdproxy.name=tsdproxy - - tsdproxy.ephemeral=false # this is optional but useful - -volumes: - tsdproxy_data: - name: tsdproxy_data - -networks: - proxy: - name: proxy -``` -Now login into your tailscale account admin counsle > settings > keys > Generate authkey. Give any description and must select resuable, because the key get purged if not selected after rebooting machine. It is advisable to create **Tags** in **ACLs settings** `tag: tsdproxy` `tag: ente` `tag: minio` as well. This will create a tag nodes with no key expirory. One is safe to reboot restart docker or machine. -> Copy the generated authkey as it is shown only once. -Make tsdproxy.yaml file in `cd docker/tsdproxy/config` by running `sudo nano tsdproxy.yaml` and pupolate it with the following contant: -``` -defaultproxyprovider: default -docker: - local: - host: unix:///var/run/docker.sock - defaultproxyprovider: default -files: {} -tailscale: - providers: - default: - authkey: "" - authkeyfile: "/config/authkey" - controlurl: https://controlplane.tailscale.com - datadir: /data/ -http: - hostname: 0.0.0.0 - port: 8080 -log: - level: info - json: false -proxyaccesslog: true -``` -In the same directory run `sudo nano authkey` and paste the authkey just copied earlier from tailscale admin counsel. -> Here Tailscale (TSDPROXY) setup is complet in all respect. Just run `docker compose up -d`. Check your tailscale amdin counsel and you will see tsdproxy node up and running. Make sure that **HTTPS** is enabled in tailscale DNS settings. -> You can visit the TSDPROXY web GUI by https://tsdproxy.xyz.ts.net. (xyz is change value for everyone) - -## ente Part ## -First make the following necessary files/directories: -``` -sudo mkdir -p /home/ubuntu/docker/ente/custom-logs -sudo mkdir -p /home/ubuntu/docker/ente/data -sudo mkdir -p /home/ubuntu/docker/ente/minio-data -sudo mkdir -p /home/ubuntu/docker/ente/postgres-data -sudo mkdir -p /home/ubuntu/docker/ente/scripts/compose -``` -Than give user permission for each of the above directory. `sudo chown -R 1000:1000 /home/ubuntu/docker/ente/custom-logs` etc etc. Make sure not to skip `/home/ubuntu/docker/tsdproxy/config` - -`cd docker/ente/script/compose` and run `sudo nano credentials.yaml` than populate it with the following: -``` -db: - host: postgres - port: 5432 - name: ente_db - user: pguser # change me - password: pgpass #change me - -s3: - are_local_buckets: true - b2-eu-cen: - key: test # change me - secret: testtest # change me - endpoint: https://minio.xyz.ts.net - region: eu-central-2 - bucket: b2-eu-cen - wasabi-eu-central-2-v3: - key: test # change me - secret: testtest # change me - endpoint: localhost:3200 - region: eu-central-2 - bucket: wasabi-eu-central-2-v3 - compliance: false - scw-eu-fr-v3: - key: test # change me - secret: testtest # change me - endpoint: localhost:3200 - region: eu-central-2 - bucket: scw-eu-fr-v3 -``` - -In the same directory run `sudo nano minio-provision.sh` and populate it with the following contant: -``` -#!/bin/sh - -# Script used to prepare the minio instance that runs as part of the development -# Docker compose cluster. - -while ! mc config host add h0 http://minio:3200 test testtest #(change me) -do - echo "waiting for minio..." - sleep 0.5 -done - -cd /data - -mc mb -p b2-eu-cen -mc mb -p wasabi-eu-central-2-v3 -mc mb -p scw-eu-fr-v3 -``` - -Now `cd docker/ente` and run `sudo nano docker-compose.yaml` and populate it with the following: -``` -services: - museum: - image: ghcr.io/ente-io/server - ports: - - 9080:8080 # 9080 because tsdproxy is running on 8080:8080 - # - 2112:2112 # Prometheus metrics - depends_on: - postgres: - condition: service_healthy - environment: - # Pass-in the config to connect to the DB and MinIO - ENTE_CREDENTIALS_FILE: /credentials.yaml - # ENTE_CLI_SECRETS_PATH: /cli-data/secret.txt - # ENTE_CLI_CONFIG_PATH: /cli-data/ - volumes: - - /home/ubuntu/docker/ente/custom-logs:/var/logs - - /home/ubuntu/docker/ente/museum.yaml:/museum.yaml:ro - - /home/ubuntu/docker/ente/scripts/compose/credentials.yaml:/credentials.yaml:ro - #- /home/ubuntu/docker/ente/cli-data:/cli-data - #- /home/ubuntu/docker/ente/exports/ente-photos:/exports - - /home/ubuntu/docker/ente/data:/data:ro - networks: - - ente - - proxy - labels: - tsdproxy.enable: "true" - tsdproxy.name: "ente" - -# # Resolve "localhost:3200" in the museum container to the minio container. - socat: - image: alpine/socat - network_mode: service:museum - depends_on: - - museum - command: "TCP-LISTEN:3200,fork,reuseaddr TCP:minio:3200" - - postgres: - image: postgres:15 - ports: - - 5432:5432 - environment: - POSTGRES_USER: pguser # change me - POSTGRES_PASSWORD: pgpass # change me - POSTGRES_DB: ente_db - # Wait for postgres to be accept connections before starting museum. - healthcheck: - test: - [ - "CMD", - "pg_isready", - "-q", - "-d", - "ente_db", - "-U", - "pguser" # change it accouding to the POSTGRES_USER: pguser - ] - start_period: 40s - start_interval: 1s - volumes: - - /home/ubuntu/docker/ente/postgres-data:/var/lib/postgresql/data - networks: - - ente - - minio: - image: minio/minio - # Use different ports than the minio defaults to avoid conflicting - # with the ports used by Prometheus. - ports: - - 3200:3200 # API - - 3201:3201 # Console - environment: - MINIO_ROOT_USER: test # change me - MINIO_ROOT_PASSWORD: testtest # change me - MINIO_SERVER_URL: https://minio.xyz.ts.net - command: server /data --address ":3200" --console-address ":3201" - volumes: - - /home/ubuntu/docker/ente/minio-data:/data - networks: - - ente - - proxy - labels: - tsdproxy.enable: "true" - tsdproxy.name: "minio" - - minio-provision: - image: minio/mc - depends_on: - - minio - volumes: - - /home/ubuntu/docker/ente/scripts/compose/minio-provision.sh:/provision.sh:ro - - /home/ubuntu/docker/ente/minio-data:/data - networks: - - ente - entrypoint: sh /provision.sh - - -networks: - ente: - name: ente - - proxy: - external: true -``` - -> Thats it. Run `docker compose up -d`. Wait till every container become healthy. Open web browser. Make sure tailscale is installed on the machine. Visit https://ente.xyz.ts.net/ping. It will pong. All good if you see it. First time it will take minute or two to get SSL cert. Downnload Desktop or mobile app. Tap 7 time on the screen, which will prompt developer mode. Add https://ente.xyz.ts.net. Add new user. When asked for OTP. Just go to linux terminal and run `docker logs ente-museum-1`. Search for userauth. Feed the six digit and Done. - -> For getting 100TB (limitless) storage. Just Install ente-cli for windows. Extract it and add folder. Name it **export**. Add config.yaml file along and populate it with the following: -``` -endpoint: - api: "https://ente.xyz.ts.net" - accounts: "http://localhost:3001" - -log: false -``` -Right-Click in the directory where you have extracted ente-cli. Select `open in terminal`. Run -``` -.\ente.exe account bob # change bob to yours -``` -Hit Enter twice. -For export directory, just write export. As already created **export** folder earlier. -**Write email. The one which is already used befor when creating ente account in ente desktop app.** -Type the same Password used before for the account.Run -``` -.\ente.ext account list -``` -This will list all account details. Copy Acount ID. -> Navigate to museum.yaml file. `cd docker/ente`. Run `sudo nano museum.yaml` and add the account ID under Admins. Delete any previous entries. -Restart ente-museum-1 container from linux terminal. Run `docker restart ente-museum-1`. All well, now you will have 100TB storage. Repeat if for any other accounts you want to give unlimited storage access. diff --git a/docs/docs/self-hosting/guides/admin.md b/docs/docs/self-hosting/guides/admin.md deleted file mode 100644 index 75048f2..0000000 --- a/docs/docs/self-hosting/guides/admin.md +++ /dev/null @@ -1,83 +0,0 @@ ---- -title: Server admin -description: Administering your custom self-hosted Ente instance using the CLI ---- - -# Administering your custom server - -You can use -[Ente's CLI](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) to -administer your self hosted server. - -First we need to get your CLI to connect to your custom server. Define a -config.yaml and put it either in the same directory as CLI or path defined in -env variable `ENTE_CLI_CONFIG_PATH` - -```yaml -endpoint: - api: "http://localhost:8080" -``` - -Now you should be able to -[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md), -and subsequently increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -using the CLI. - -> [!NOTE] -> -> The CLI command to add an account does not create Ente accounts. It only adds -> existing accounts to the list of (existing) accounts that the CLI can use. - -## Becoming an admin - -By default, the first user (and only the first user) created on the system is -considered as an admin. - -This facility is provided as a convenience for people who are getting started -with self hosting. For more serious deployments, we recommend creating an -explicit whitelist of admins. - -> [!NOTE] -> -> The first user is only treated as the admin if the list of admins in the -> configuration is empty. -> -> Also, if at some point you delete the first user, then you will need to define -> a whitelist to make some other user as the admin if you wish (since the first -> account has been deleted). - -To whitelist the user IDs that can perform admin actions on the server, use the -following steps: - -- Create a `museum.yaml` in the directory where you're starting museum from. For - example, if you're running using `docker compose up`, then this file should be - in the same directory as `compose.yaml` (generally, `server/museum.yaml`). - - > Docker might've created an empty `museum.yaml` _directory_ on your machine - > previously. If so, delete that empty directory and create a new file named - > `museum.yaml`. - -- In this `museum.yaml` we can add overrides over the default configuration. - -For whitelisting the admin userIDs we need to define an `internal.admins`. See -the "internal" section in -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml) -in the server source code for details about how to define this. - -Here is an example. Suppose we wanted to whitelist a user with ID -`1580559962386440`, we can create the following `museum.yaml` - -```yaml -internal: - admins: - - 1580559962386440 -``` - -You can use -[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md) -command to find the user id of any account. - -## Backups - -See this [FAQ](/self-hosting/faq/backup). diff --git a/docs/docs/self-hosting/guides/configuring-s3.md b/docs/docs/self-hosting/guides/configuring-s3.md deleted file mode 100644 index 45076c9..0000000 --- a/docs/docs/self-hosting/guides/configuring-s3.md +++ /dev/null @@ -1,165 +0,0 @@ ---- -title: Configuring S3 buckets -description: - Configure S3 endpoints to fix upload errors or use your self hosted ente - from outside localhost ---- - -# Components of the Architecture - -![Client, Museum, S3](/client-museum-s3.png) - -There are three components involved in uploading: - -1. The client (e.g. the web app or the mobile app) -2. Ente's server (museum) -3. The S3-compatible object storage (e.g. minio in the default starter) - -For the uploads to work, all three of them need to be able to reach each other. -This is because the client uploads directly to the object storage. The -interaction goes something like this: - -1. Client wants to upload, it asks museum where it should upload to. -2. Museum creates pre-signed URLs for the S3 bucket that was configured. -3. Client directly uploads to the S3 buckets these URLs. - -The upshot of this is that _both_ the client and museum should be able to reach -your S3 bucket. - -## Configuring S3 - -The URL for the S3 bucket is configured in -[scripts/compose/credentials.yaml](https://github.com/ente-io/ente/blob/main/server/scripts/compose/credentials.yaml#L10). -You can edit this file directly when testing, though it is just simpler and more -robust to create a `museum.yaml` (in the same folder as the Docker compose file) -and put your custom configuration there (in your case, you can put an entire -`s3` config object in your `museum.yaml`). - -> [!TIP] -> For more details about these configuration objects, see the documentation for -> the `s3` object in -> [configurations/local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml). - -By default, you only need to configure the endpoint for the first bucket. - -The docker compose file is shipped with MinIO as the Self Hosted S3 Compatible Storage. -By default, MinIO server is served on `localhost:3200` and the MinIO UI on -`localhost:3201`. -For example, in a localhost network situation, the way this -connection works is, Museum (`1`) and MinIO (`2`) run on the same docker network and -the web app (`3`) which will also be hosted on the localhost. This enables all the -three components of the setup being able to communicate with each other seamlessly. - -The same principle applies if you're deploying to your custom domain. - -## Replication - -![Replication](/replication.png) -

Community contributed diagram of Ente's Replication Process

- -> [!IMPORTANT] -> As of now, Replication works only if all the 3 storage type -> needs are fulfilled (1 Hot, 1 Cold and 1 Glacier Storage). -> -> [Reference](https://github.com/ente-io/ente/discussions/3167#discussioncomment-10585970) - -If you're wondering why there are 3 buckets on MinIO UI - that's because our -production instance uses these to perform [replication](https://ente.io/reliability/). - -If you're also wondering about why the bucket names are specifically what they are, -it's because that is exactly what we are using on our production instance. -We use `b2-eu-cen` as hot, `wasabi-eu-central-2-v3` as cold (also the secondary hot) -and `scw-eu-fr-v3` as glacier storage. As of now, all of this is hardcoded. -Hence, the same hardcoded configuration is applied when you self host Ente. - -In a Self hosted Ente Instance replication is turned off by default. -When replication is turned off, only the first bucket (`b2-eu-cen`) is used, -and the other two are ignored. Only the names here are specifically fixed, but -in the configuration body you can put any other keys. It does not have any relation -with `b2`, `wasabi` or even `scaleway`. - -Use the `s3.hot_storage.primary` option if you'd like to set one of the other -predefined buckets as the primary bucket. - -## SSL Configuration - -> [!NOTE] -> -> If you need to configure SSL, for example if you're running over the internet, -> you'll need to turn off `s3.are_local_buckets` (which disables SSL in the -> default starter compose template). -> - -Disabling `s3.are_local_buckets` also switches to the subdomain style URLs for -the buckets. However, not all S3 providers support these, in particular, minio -does not work with these in default configuration. So in such cases you'll -also need to then enable `s3.use_path_style_urls`. - -## Summary - -Set the S3 bucket `endpoint` in `credentials.yaml` to a `yourserverip:3200` or -some such IP/hostname that accessible from both where you are running the Ente -clients (e.g. the mobile app) and also from within the Docker compose cluster. - -#### Example - -An example `museum.yaml` when you're trying to connect to museum running on your -computer from your phone on the same WiFi network: - -```yaml -s3: - are_local_buckets: true - b2-eu-cen: - key: test - secret: testtest - endpoint: http://:3200 - region: eu-central-2 - bucket: b2-eu-cen -``` - -## FAE (Frequently Answered Errors) - -Here are some Frequently Answered Errors from the Community Chat with the reasoning -for a particular error and its potential fix. - -In most situations, the problem turns out to be some minute mistakes or misconfigurations -on the users end and that turns out to be the bottleneck of the whole problem. -Please make sure to `reverse_proxy` Museum to a domain as well as check your S3 -Credentials and whole config for any minor mis-configurations. - -It is also suggested that the user setups Bucket CORS on MinIO or any external -S3 Bucket they are connecting to. To setup Bucket CORS, help yourself by upload -[this](https://help.ente.io/self-hosting/guides/external-s3#_5-fix-potential-cors-issue-with-your-bucket). - -### 403 Forbidden - -If museum (`2`) is able to make a network connection to your S3 bucket (`3`) but -uploads are still failing, it could be a credentials or permissions issue. A -telltale sign of this is that in the museum logs you can see `403 Forbidden` -errors about it not able to find the size of a file even though the -corresponding object exists in the S3 bucket. - -To fix these, you should ensure the following: - -1. The bucket CORS rules do not allow museum to access these objects. - - For uploading files from the browser, you will need to currently set - allowedOrigins to "\*", and allow the "X-Auth-Token", "X-Client-Package" - headers configuration too. - [Here is an example of a working configuration](https://github.com/ente-io/ente/discussions/1764#discussioncomment-9478204). - -2. The credentials are not being picked up (you might be setting the correct - creds, but not in the place where museum picks them from). - -### Mismatch in File Size - -The "Mismatch in File Size" error mostly occurs in a situation where the client (`1`) -is re-uploading a file which is already in the bucket with a different File Size. The -reason for re-upload could be anything including Network issue, sudden killing of app -before the upload is complete and etc. - -This is also one of Museums (`2`) Validation Checks for the size of file being -re-uploaded from the client to the size of the file which is already -uploaded to the S3 Bucket. - -In most case, it is very unlikely that this error could be a cause of some mistake in -the configuration or Browser/Bucket CORS. diff --git a/docs/docs/self-hosting/guides/custom-server/custom-server.png b/docs/docs/self-hosting/guides/custom-server/custom-server.png deleted file mode 100644 index 5e4e83f..0000000 Binary files a/docs/docs/self-hosting/guides/custom-server/custom-server.png and /dev/null differ diff --git a/docs/docs/self-hosting/guides/custom-server/index.md b/docs/docs/self-hosting/guides/custom-server/index.md deleted file mode 100644 index 42577e7..0000000 --- a/docs/docs/self-hosting/guides/custom-server/index.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -title: Custom server -description: Using a custom self-hosted server with Ente client apps and CLI ---- - -# Connecting to a custom server - -You can modify various Ente client apps and CLI to connect to a self hosted -custom server endpoint. - -## Mobile - -The pre-built Ente apps from GitHub / App Store / Play Store / F-Droid can be -easily configured to use a custom server. - -You can tap 7 times on the onboarding screen to bring up a page where you can -configure the endpoint the app should be connecting to. - -![Setting a custom server on the onboarding screen](custom-server.png) - -## Desktop and web - -Same as the mobile app, you can tap 7 times on the onboarding screen to -configure the endpoint the app should connect to. - -
- -![Setting a custom server on the onboarding screen on desktop or self-hosted web -apps](web-dev-settings.png){width=400px} - -
- -This works on both the desktop app and web app (if you deploy on your own). - -To make it easier to identify when a custom server is being used, app will -thereafter show the endpoint in use (if not Ente's production server) at the -bottom of the login prompt: - -![Custom server indicator on the onboarding screen](web-custom-endpoint-indicator.png) - -Similarly, it'll be shown at other screens during the login flow. After login, -you can also see it at the bottom of the sidebar. - -Note that the custom server configured this way is cleared when you reset the -state during logout. In particular, the app also does a reset when you press the -change email button during the login flow. - -### Building from source - -Alternatively (e.g. if you don't wish to configure this setting and just want to -change the endpoint the client connects to by default), you can build the app -from source and use the `NEXT_PUBLIC_ENTE_ENDPOINT` environment variable to tell -it which server to connect to. For example: - -```sh -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos -``` - -For more details, see -[hosting the web app](https://help.ente.io/self-hosting/guides/web-app). - -## CLI - -> [!NOTE] -> -> You can download the CLI from -> [here](https://github.com/ente-io/ente/releases?q=tag%3Acli-v0) - -Define a config.yaml and put it either in the same directory as where you run -the CLI from ("current working directory"), or in the path defined in env -variable `ENTE_CLI_CONFIG_PATH`: - -```yaml -endpoint: - api: "http://localhost:8080" -``` - -(Another -[example](https://github.com/ente-io/ente/blob/main/cli/config.yaml.example)) diff --git a/docs/docs/self-hosting/guides/custom-server/web-custom-endpoint-indicator.png b/docs/docs/self-hosting/guides/custom-server/web-custom-endpoint-indicator.png deleted file mode 100644 index 29f0055..0000000 Binary files a/docs/docs/self-hosting/guides/custom-server/web-custom-endpoint-indicator.png and /dev/null differ diff --git a/docs/docs/self-hosting/guides/custom-server/web-dev-settings.png b/docs/docs/self-hosting/guides/custom-server/web-dev-settings.png deleted file mode 100644 index f2f1e17..0000000 Binary files a/docs/docs/self-hosting/guides/custom-server/web-dev-settings.png and /dev/null differ diff --git a/docs/docs/self-hosting/guides/db-migration.md b/docs/docs/self-hosting/guides/db-migration.md deleted file mode 100644 index 60818ca..0000000 --- a/docs/docs/self-hosting/guides/db-migration.md +++ /dev/null @@ -1,158 +0,0 @@ ---- -title: DB Migration -description: - Migrating your self hosted Postgres 12 database to newer Postgres versions ---- - -# Migrating Postgres 12 to 15 - -The old sample docker compose file used Postgres 12, which is now nearing end of -life, so we've updated it to Postgres 15. Postgres major versions changes -require a migration step. This document mentions some approaches you can use. - -> [!TIP] -> -> Ente itself does not use any specific Postgres 12 or Postgres 15 features, and -> will talk to either happily. It should also work with newer Postgres versions, -> but let us know if you run into any problems and we'll update this page. - -### Taking a backup - -`docker compose exec` allows us to run a command against a running container. We -can use it to run the `pg_dumpall` command on the postgres container to create a -plaintext backup. - -Assuming your cluster is already running, and you are in the `ente/server` -directory, you can run the following (this command uses the default credentials, -you'll need to change these to match your setup): - -```sh -docker compose exec postgres env PGPASSWORD=pgpass PGUSER=pguser PG_DB=ente_db pg_dumpall >pg12.backup.sql -``` - -This will produce a `pg12.backup.sql` in your current directory. You can open it -in a text editor (it can be huge!) to verify that it looks correct. - -We won't be needing this file, this backup is recommended just in case something -goes amiss with the actual migration. - -> If you need to restore from this plaintext backup, you could subsequently run -> something like: -> -> ```sh -> docker compose up postgres -> cat pg12.backup.sql | docker compose exec -T postgres env PGPASSWORD=pgpass psql -U pguser -d ente_db -> ``` - -## The migration - -At the high level, the steps are - -1. Stop your cluster. - -2. Start just the postgres container after changing the image to - `pgautoupgrade/pgautoupgrade:15-bookworm`. - -3. Once the in-place migration completes, stop the container, and change the - image to `postgres:15`. - -#### 1. Stop the cluster - -Stop your running Ente cluster. - -```sh -docker compose down -``` - -#### 2. Run `pgautoupgrade` - -Modify your `compose.yaml`, changing the image for the "postgres" container from -"postgres:12" to "pgautoupgrade/pgautoupgrade:15-bookworm" - -```diff -diff a/server/compose.yaml b/server/compose.yaml - - postgres: -- image: postgres:12 -+ image: pgautoupgrade/pgautoupgrade:15-bookworm - ports: -``` - -[pgautoupgrade](https://github.com/pgautoupgrade/docker-pgautoupgrade) is a -community docker image that performs an in-place migration. - -After making the change, run only the `postgres` container in the cluster - -```sh -docker compose up postgres -``` - -The container will start and peform an in-place migration. Once it is done, it -will start postgres normally. You should see something like this is the logs - -``` -postgres-1 | Automatic upgrade process finished with no errors reported -... -postgres-1 | ... starting PostgreSQL 15... -``` - -At this point, you can stop the container (`CTRL-C`). - -#### 3. Finish by changing image - -Modify `compose.yaml` again, changing the image to "postgres:15". - -```diff -diff a/server/compose.yaml b/server/compose.yaml - - postgres: -- image: pgautoupgrade/pgautoupgrade:15-bookworm -+ image: postgres:15 - ports: -``` - -And cleanup the temporary containers by - -```sh -docker compose down --remove-orphans -``` - -Migration is now complete. You can start your Ente cluster normally. - -```sh -docker compose up -``` - -## Migration elsewhere - -The above instructions are for Postgres running inside docker, as the sample -docker compose file does. There are myriad other ways to run Postgres, and the -migration sequence then will depend on your exact setup. - -Two common approaches are - -1. Backup and restore, the `pg_dumpall` + `psql` import sequence described in - [Taking a backup](#taking-a-backup) above. - -2. In place migrations using `pg_upgrade`, which is what the - [pgautoupgrade](#the-migration) migration above does under the hood. - -The first method, backup and restore, is low tech and will work similarly in -most setups. The second method is more efficient, but requires a bit more -careful preparation. - -As another example, here is how one can migrate 12 to 15 when running Postgres -on macOS, installed using Homebrew. - -1. Stop your postgres. Make sure there are no more commands shown by - `ps aux | grep '[p]ostgres'`. - -2. Install postgres15. - -3. Migrate data using `pg_upgrade`: - - ```sh - /opt/homebrew/Cellar/postgresql@15/15.8/bin/pg_upgrade -b /opt/homebrew/Cellar/postgresql@12/12.18_1/bin -B /opt/homebrew/Cellar/postgresql@15/15.8/bin/ -d /opt/homebrew/var/postgresql@12 -D /opt/homebrew/var/postgresql@15 - ``` - -4. Start postgres 15 and verify version using `SELECT VERSION()`. diff --git a/docs/docs/self-hosting/guides/external-s3.md b/docs/docs/self-hosting/guides/external-s3.md deleted file mode 100644 index 26ece82..0000000 --- a/docs/docs/self-hosting/guides/external-s3.md +++ /dev/null @@ -1,317 +0,0 @@ ---- -title: External S3 buckets -description: - Self hosting Ente's server and photos web app when using an external S3 - bucket ---- - -# Hosting server and web app using external S3 - -> [!NOTE] -> -> This is a community contributed guide, and some of these steps might be out of -> sync with the upstream documentation. If something is not working correctly, -> please also see the latest -> [READMEs](https://github.com/ente-io/ente/blob/main/server/README.md) in the -> repository and/or other guides in [self-hosting](/self-hosting/). - -This guide is for self hosting the server and the web application of Ente Photos -using docker compose and an external S3 bucket. So we assume that you already -have the keys and secrets for the S3 bucket. The plan is as follows: - -1. Create a `compose.yaml` file -2. Set up the `.credentials.env` file -3. Run `docker-compose up` -4. Create an account and increase storage quota -5. Fix potential CORS issue with your bucket - -## 1. Create a `compose.yaml` file - -After cloning the main repository with - -```bash -git clone https://github.com/ente-io/ente.git -# Or git clone git@github.com:ente-io/ente.git -cd ente -``` - -Create a `compose.yaml` file at the root of the project with the following -content (there is nothing to change here): - -```yaml -services: - museum: - build: - context: server - args: - GIT_COMMIT: local - ports: - - 8080:8080 # API - - 2112:2112 # Prometheus metrics - depends_on: - postgres: - condition: service_healthy - - # Wait for museum to ping pong before starting the webapp. - healthcheck: - test: [ - "CMD", - "echo", - "1", # I don't know what to put here - ] - environment: - # no need to touch these - ENTE_DB_HOST: postgres - ENTE_DB_PORT: 5432 - ENTE_DB_NAME: ente_db - ENTE_DB_USER: pguser - ENTE_DB_PASSWORD: pgpass - env_file: - - ./.credentials.env - volumes: - - custom-logs:/var/logs - - museum.yaml:/museum.yaml:ro - networks: - - internal - - web: - build: - context: web - ports: - - 8081:80 - - 8082:80 - depends_on: - museum: - condition: service_healthy - env_file: - - ./.credentials.env - - postgres: - image: postgres:12 - ports: - - 5432:5432 - environment: - POSTGRES_USER: pguser - POSTGRES_PASSWORD: pgpass - POSTGRES_DB: ente_db - # Wait for postgres to be accept connections before starting museum. - healthcheck: - test: ["CMD", "pg_isready", "-q", "-d", "ente_db", "-U", "pguser"] - interval: 1s - timeout: 5s - retries: 20 - volumes: - - postgres-data:/var/lib/postgresql/data - networks: - - internal -volumes: - custom-logs: - postgres-data: -networks: - internal: -``` - -It maybe be added in the future, but if it does not exist, create a `Dockerfile` -in the `web` directory with the following content: - -```Dockerfile -# syntax=docker/dockerfile:1 -FROM node:21-bookworm-slim as ente-builder -WORKDIR /app -RUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/* -COPY . . -RUN yarn install -ENV NEXT_PUBLIC_ENTE_ENDPOINT=DOCKER_RUNTIME_REPLACE_ENDPOINT -ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=DOCKER_RUNTIME_REPLACE_ALBUMS_ENDPOINT -RUN yarn build - - -FROM nginx:1.25-alpine-slim -COPY --from=ente-builder /app/apps/photos/out /usr/share/nginx/html -COPY < - -```sh -# run `go run tools/gen-random-keys/main.go` in the server directory to generate the keys -ENTE_KEY_ENCRYPTION= -ENTE_KEY_HASH= -ENTE_JWT_SECRET= - -# if you deploy it on a server under a domain, you need to set the correct value of the following variables -# it can be changed later - -# The backend server URL (Museum) to be used by the webapp -ENDPOINT=http://localhost:8080 -# The URL of the public albums webapp (also need to be updated in museum.yml so the correct links are generated) -ALBUMS_ENDPOINT=http://localhost:8082 -``` - -Create the `museum.yaml` with additional configuration, this will be mounted -(read-only) into the container: - -```yaml -s3: - are_local_buckets: false - # For some self-hosted S3 deployments you (e.g. Minio) you might need to disable bucket subdomains - use_path_style_urls: true - # The key must be named like so - b2-eu-cen: - key: $YOUR_S3_KEY - secret: $YOUR_S3_SECRET - endpoint: $YOUR_S3_ENDPOINT - region: $YOUR_S3_REGION - bucket: $YOUR_S3_BUCKET_NAME -# The same value as the one specified in ALBUMS_ENDPOINT -apps: - public-albums: http://localhost:8082 -``` - -## 3. Run `docker-compose up` - -Run `docker-compose up` at the root of the project (add `-d` to run it in the -background). - -## 4. Create an account and increase storage quota - -Open `http://localhost:8080` or whatever Endpoint you mentioned for the web app -and create an account. If your SMTP related configurations are all set and -right, you will receive an email with your OTT in it. There are two work arounds -to retrieve the OTP, checkout -[this document](https://help.ente.io/self-hosting/faq/otp) for getting your -OTT's.. - -If you successfully log in, select any plan and increase the storage quota with -the following command: - -```bash -docker compose exec -i postgres psql -U pguser -d ente_db -c "INSERT INTO storage_bonus (bonus_id, user_id, storage, type, valid_till) VALUES ('self-hosted-myself', (SELECT user_id FROM users), 1099511627776, 'ADD_ON_SUPPORT', 0)" -``` - -After few reloads, you should see 1 To of quota. - -## 5. Fix potential CORS issue with your bucket - -### For AWS S3 - -If you cannot upload a photo due to a CORS issue, you need to fix the CORS -configuration of your bucket. - -Create a `cors.json` file with the following content: - -```json -{ - "CORSRules": [ - { - "AllowedOrigins": ["*"], - "AllowedHeaders": ["*"], - "AllowedMethods": ["GET", "HEAD", "POST", "PUT", "DELETE"], - "MaxAgeSeconds": 3000, - "ExposeHeaders": ["Etag"] - } - ] -} -``` - -You may want to change the `AllowedOrigins` to a more restrictive value. - -If you are using AWS for S3, you can execute the below command to get rid of -CORS. Make sure to enter the right path for the `cors.json` file. - -```bash -aws s3api put-bucket-cors --bucket YOUR_S3_BUCKET --cors-configuration /path/to/cors.json -``` - -### For Self-hosted Minio Instance - -> Important: MinIO does not take JSON CORS file as the input, instead you will -> have to build a CORS.xml file or just convert the above `cors.json` to XML. - -A minor requirement here is the tool `mc` for managing buckets via command line -interface. Checkout the `mc set alias` document to configure alias for your -instance and bucket. After this you will be prompted for your AccessKey and -Secret, which is your username and password, go ahead and enter that. - -```sh -mc cors set // set "cors_allowed_origin=*" -``` - -You can create also `.csv` file and dump the list of origins you would like to -allow and replace the `*` with `path` to the CSV file. - -Now, uploads should be working fine. - -## Related - -Some other users have also shared their setups. - -- [Using Traefik](https://github.com/ente-io/ente/pull/3663) - -- [Building custom images from source (Linux)](https://github.com/ente-io/ente/discussions/3778) diff --git a/docs/docs/self-hosting/guides/index.md b/docs/docs/self-hosting/guides/index.md deleted file mode 100644 index 22b2810..0000000 --- a/docs/docs/self-hosting/guides/index.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Self Hosting -description: Guides for self hosting Ente Photos and/or Ente Auth ---- - -# Guides - -If you've figured out how to do something, help others out by adding -walkthroughs, tutorials and other FAQ pages in this directory. - -See the sidebar for existing guides. In particular: - -- If you're just looking to get started, see - [configure custom server](custom-server/). - -- For various admin related tasks, e.g. increasing the storage quota on your - self hosted instance, see [administering your custom server](admin). - -- For configuring your S3 buckets to get the object storage to work from your - mobile device or for fixing an upload errors, see - [configuring S3](configuring-s3). There is also a longer - [community contributed guide](external-s3) for a more self hosted setup of - both the server and web app using external S3 buckets for object storage. diff --git a/docs/docs/self-hosting/guides/mobile-build.md b/docs/docs/self-hosting/guides/mobile-build.md deleted file mode 100644 index c36903a..0000000 --- a/docs/docs/self-hosting/guides/mobile-build.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Building mobile apps -description: - Connecting to your custom self-hosted server when building the Ente mobile - apps from source ---- - -# Mobile: Build and connect to self-hosted server - -The up to date instructions to build the mobile apps are in the -[Ente Photos](https://github.com/ente-io/ente/tree/main/mobile#readme) and -[Ente Auth](https://github.com/ente-io/ente/tree/main/auth#readme) READMEs. When -building or running, you can use the - -```sh ---dart-define=endpoint=http://localhost:8080 -``` - -parameter to get these builds to connect to your custom self-hosted server. - -As a short summary, you can install Flutter and build the Photos app this way: - -```sh -cd ente/mobile -git submodule update --init --recursive -flutter pub get -# Android -flutter run --dart-define=endpoint=http://localhost:8080 --flavor independent --debug -t lib/main.dart -# iOS -flutter run --dart-define=endpoint=http://localhost:8080 -``` - -Or for the auth app: - -```sh -cd ente/auth -git submodule update --init --recursive -flutter pub get -flutter run --dart-define=endpoint=http://localhost:8080 -# Android -flutter run --dart-define=endpoint=http://localhost:8080 --flavor independent --debug -t lib/main.dart -# iOS -flutter run --dart-define=endpoint=http://localhost:8080 -``` - -## How to build non-debug builds - -For building APK, -[setup your keystore](https://docs.flutter.dev/deployment/android#create-an-upload-keystore) -and run - -```sh -flutter build apk --release --flavor independent -t lib/main.dart -``` diff --git a/docs/docs/self-hosting/guides/selfhost-cli.md b/docs/docs/self-hosting/guides/selfhost-cli.md deleted file mode 100644 index 9e5d312..0000000 --- a/docs/docs/self-hosting/guides/selfhost-cli.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: CLI for Self Hosted Instance -description: Guide to configuring Ente CLI for Self Hosted Instance ---- - -## Self Hosting - -If you are self-hosting the server, you can still configure CLI to export data & -perform basic admin actions. - -To do this, first configure the CLI to point to your server. Define a -config.yaml and put it either in the same directory as CLI binary or path -defined in env variable `ENTE_CLI_CONFIG_DIR` - -```yaml -endpoint: - api: "http://localhost:8080" -``` - -You should be able to -[add an account](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_add.md), -and subsequently increase the -[storage and account validity](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_admin_update-subscription.md) -using the CLI. - -For the admin actions, you first need to whitelist admin users. You can create -`server/museum.yaml`, and whitelist add the admin userID `internal.admins`. See -[local.yaml](https://github.com/ente-io/ente/blob/main/server/configurations/local.yaml#L211C1-L232C1) -in the server source code for details about how to define this. - -You can use -[account list](https://github.com/ente-io/ente/blob/main/cli/docs/generated/ente_account_list.md) -command to find the user id of any account. - -```yaml -internal: - admins: - # - 1580559962386440 -``` diff --git a/docs/docs/self-hosting/guides/standalone-ente.md b/docs/docs/self-hosting/guides/standalone-ente.md deleted file mode 100644 index af1b317..0000000 --- a/docs/docs/self-hosting/guides/standalone-ente.md +++ /dev/null @@ -1,116 +0,0 @@ ---- -title: Installing Ente Standalone (without Docker) -description: Installing and setting up Ente standalone without docker. ---- - -# Installing and Deploying Ente Standalone (without Docker) - -## Running Museum (Ente's server) without Docker - -First, start by installing all the dependencies to get your machine ready for -development. - -```sh -# For MacOS -brew tap homebrew/core -brew update -brew install go - -# For Ubuntu based distros -sudo apt update && sudo apt upgrade -sudo apt install golang-go -``` - -Alternatively, you can also download the latest binaries from -['All Release'](https://go.dev/dl/) page from the official website. - -```sh -brew install postgres@15 -# Link the postgres keg -brew link postgresql@15 - -brew install libsodium - -# For Ubuntu based distros -sudo apt install postgresql -sudo apt install libsodium23 libsodium-dev -``` - -The package `libsodium23` might be installed already in some cases. - -Installing pkg-config - -```sh -brew install pkg-config - -# For Ubuntu based distros -sudo apt install pkg-config -``` - -## Starting Postgres - -### With pg_ctl - -```sh -pg_ctl -D /usr/local/var/postgres -l logfile start -``` - -Dependeing on the Operating System type the path for postgres binary or -configuration file might be different, please check if the command keeps failing -for you. - -Ideally, if you are on a Linux system with systemd as the init. You can also -start postgres as a systemd service. After Installation execute the following -commands: - -```sh -sudo systemctl enable postgresql -sudo systemctl daemon-reload && sudo systemctl start postgresql -``` - -### Create user - -```sh -createuser -s postgres -``` - -## Start Museum - -Start by cloning ente to your system. - -```sh -git clone https://github.com/ente-io/ente -``` - -```sh -export ENTE_DB_USER=postgres -cd ente/server -go run cmd/museum/main.go -``` - -You can also add the export line to your shell's RC file, to avoid exporting the -environment variable every time. - -For live reloads, install [air](https://github.com/air-verse/air#installation). -Then you can just call air after declaring the required environment variables. -For example, - -```sh -ENTE_DB_USER=postgres -air -``` - -## Museum as a background service - -Please check the below links if you want to run Museum as a service, both of -them are battle tested. - -1. [How to run museum as a systemd service](https://gist.github.com/mngshm/a0edb097c91d1dc45aeed755af310323) -2. [Museum.service](https://github.com/ente-io/ente/blob/23e678889189157ecc389c258267685934b83631/server/scripts/deploy/museum.service#L4) - -Once you are done with setting and running Museum, all you are left to do is run -the web app and reverse_proxy it with a webserver. You can check the following -resources for Deploying your web app. - -1. [Hosting the Web App](https://help.ente.io/self-hosting/guides/web-app). -2. [Running Ente Web app as a systemd Service](https://gist.github.com/mngshm/72e32bd483c2129621ed0d74412492fd) diff --git a/docs/docs/self-hosting/guides/system-requirements.md b/docs/docs/self-hosting/guides/system-requirements.md deleted file mode 100644 index 55eb9e9..0000000 --- a/docs/docs/self-hosting/guides/system-requirements.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -title: System requirements -description: System requirements for running Ente's server ---- - -# System requirements - -There aren't any "minimum" system requirements as such, the server process is -very light weight - it's just a single go binary, and it doesn't do any server -side ML, so I feel it should be able to run on anything reasonable. - -We've used the server quite easily on small cloud instances, old laptops etc. A -community member also reported being able to run the server on -[very low-end embedded devices](https://github.com/ente-io/ente/discussions/594). diff --git a/docs/docs/self-hosting/guides/web-app.md b/docs/docs/self-hosting/guides/web-app.md deleted file mode 100644 index fba0e34..0000000 --- a/docs/docs/self-hosting/guides/web-app.md +++ /dev/null @@ -1,264 +0,0 @@ ---- -title: Hosting the web apps -description: - Building and hosting Ente's web apps, connecting it to your self-hosted - server ---- - -# Web app - -The getting started instructions mention using `yarn dev` (which is an alias of -`yarn dev:photos`) to serve your web app. - ->[!IMPORTANT] -> Please note that Ente's Web App supports the Yarn version 1.22.xx or 1.22.22 specifically. -> Make sure to install the right version or modify your yarn installation to meet the requirements. -> The user might end up into unknown version and dependency related errors if yarn -> is on different version. - -```sh -cd ente/web -yarn install -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev:photos -``` - -This is fine for trying the web app and verifying that your self-hosted server -is working as expected etc. But if you would like to use the web app for a -longer term, then it is recommended to follow the Docker approach. - -## With Docker/Docker Compose (Recommended) - -> [!IMPORTANT] -> -> This docker image is still in testing stage and it might show up with some -> unknown variables in different scenarios. But this image has been tested on a -> production Ente site. -> -> Recurring changes might be made by the team or from community if more -> improvements can be made so that we are able to build a full-fledged docker -> image. - -```dockerfile -FROM node:20-bookworm-slim as builder - -WORKDIR ./ente - -COPY . . -COPY apps/ . - -# Will help default to yarn versoin 1.22.22 -RUN corepack enable - -# Endpoint for Ente Server -ENV NEXT_PUBLIC_ENTE_ENDPOINT=https://your-ente-endpoint.com -ENV NEXT_PUBLIC_ENTE_ALBUMS_ENDPOINT=https://your-albums-endpoint.com - -RUN yarn cache clean -RUN yarn install --network-timeout 1000000000 -RUN yarn build:photos && yarn build:accounts && yarn build:auth && yarn build:cast - -FROM node:20-bookworm-slim - -WORKDIR /app - -COPY --from=builder /ente/apps/photos/out /app/photos -COPY --from=builder /ente/apps/accounts/out /app/accounts -COPY --from=builder /ente/apps/auth/out /app/auth -COPY --from=builder /ente/apps/cast/out /app/cast - -RUN npm install -g serve - -ENV PHOTOS=3000 -EXPOSE ${PHOTOS} - -ENV ACCOUNTS=3001 -EXPOSE ${ACCOUNTS} - -ENV AUTH=3002 -EXPOSE ${AUTH} - -ENV CAST=3003 -EXPOSE ${CAST} - -# The albums app does not have navigable pages on it, but the -# port will be exposed in-order to self up the albums endpoint -# `apps.public-albums` in museum.yaml configuration file. -ENV ALBUMS=3004 -EXPOSE ${ALBUMS} - -CMD ["sh", "-c", "serve /app/photos -l tcp://0.0.0.0:${PHOTOS} & serve /app/accounts -l tcp://0.0.0.0:${ACCOUNTS} & serve /app/auth -l tcp://0.0.0.0:${AUTH} & serve /app/cast -l tcp://0.0.0.0:${CAST}"] -``` - -The above is a multi-stage Dockerfile which creates a production ready static -output of the 4 apps (Photos, Accounts, Auth and Cast) and serves the static -content with Caddy. - -Looking at 2 different node base-images doing different tasks in the same -Dockerfile would not make sense, but the Dockerfile is divided into two just to -improve the build efficiency as building this Dockerfile will arguably take more -time. - -Lets build a Docker image from the above Dockerfile. Copy and paste the above -Dockerfile contents in the root of your web directory which is inside -`ente/web`. Execute the below command to create an image from this Dockerfile. - -```sh -# Build the image -docker build -t : --no-cache --progress plain . -``` - -You can always edit the Dockerfile and remove the steps for apps which you do -not intend to install on your system (like auth or cast) and opt out of those. - -Regarding Albums App, please take a note that they are not web pages with -navigable pages, if accessed on the web-browser they will simply redirect to -ente.web.io. - -## compose.yaml - -Moving ahead, we need to paste the below contents into the compose.yaml inside -`ente/server/compose.yaml` under the services section. - -```yaml -ente-web: - image: # name of the image you used while building - ports: - - 3000:3000 - - 3001:3001 - - 3002:3002 - - 3003:3003 - - 3004:3004 - environment: - - NODE_ENV=development - restart: always -``` - -Now, we're good to go. All we are left to do now is start the containers. - -```sh -docker compose up -d # --build - -# Accessing the logs -docker compose logs -``` - -## Without Docker / Docker compose - -One way to run all the apps together without Docker is by using -[PM2](https://pm2.keymetrics.io/) in this setup. The configuration and usage is -very simple and just needs one configuration file for it. You can run the apps -both in dev server mode as well as static files. - -The below configuration will run the apps in dev server mode. - - - -### Install PM2 - -```sh -npm install pm2@latest -``` - -Copy the below contents to a file called `ecosystem.config.js` inside the -`ente/web` directory. - -```js -module.exports = { - apps: [ - { - name: "photos", - script: "yarn workspace photos next dev", - env: { - NODE_ENV: "development", - PORT: "3000" - } - }, - { - name: "accounts", - script: "yarn workspace accounts next dev", - env: { - NODE_ENV: "development", - PORT: "3001" - } - }, - { - name: "auth", - script: "yarn workspace auth next dev", - env: { - NODE_ENV: "development", - PORT: "3002" - } - }, - { - name: "cast", - script: "yarn workspace cast next dev", - env: { - NODE_ENV: "development", - PORT: "3003" - } - } - ] -}; - -``` - -Finally, start pm2. - -```sh -pm2 start - -# for logs -pm2 logs all -``` - -## Configure App Endpoints - -> [!NOTE] -> Previously, this was dependent on the env variables `NEXT_ENTE_PUBLIC_ACCOUNTS_ENDPOINT` -> and etc. Please check the below documentation to update your setup configurations - -You can configure the web endpoints for the other apps including Accounts, Albums -Family and Cast in your `museum.yaml` configuration file. Checkout -[`local.yaml`](https://github.com/ente-io/ente/blob/543411254b2bb55bd00a0e515dcafa12d12d3b35/server/configurations/local.yaml#L76-L89) -to configure the endpoints. Make sure to setup up your DNS Records accordingly to the -similar URL's you set up in `museum.yaml`. - -Next part is to configure the web server. - -# Web server configuration - -The last step ahead is configuring reverse_proxy for the ports on which the apps -are being served (you will have to make changes, if you have cusotmized the -ports). The web server of choice in this guide is -[Caddy](https://caddyserver.com) because with caddy you don't have to manually -configure/setup SSL ceritifcates as caddy will take care of that. - -```sh -photos.yourdomain.com { - reverse_proxy http://localhost:3001 - # for logging - log { - level error - } -} - -auth.yourdomain.com { - reverse_proxy http://localhost:3002 -} -# and so on ... -``` - -Next, start the caddy server :). - -```sh -# If caddy service is not enabled -sudo systemctl enable caddy - -sudo systemctl daemon-reload -sudo systemctl start caddy -``` - -## Contributing - -Please start a discussion on the Github Repo if you have any suggestions for the -Dockerfile, You can also share your setups on Github Discussions. diff --git a/docs/docs/self-hosting/index.md b/docs/docs/self-hosting/index.md deleted file mode 100644 index c192829..0000000 --- a/docs/docs/self-hosting/index.md +++ /dev/null @@ -1,86 +0,0 @@ ---- -title: Self Hosting -description: Getting started self hosting Ente Photos and/or Ente Auth ---- - -# Self Hosting - -The entire source code for Ente is open source, including the servers. This is -the same code we use for our own cloud service. - -> [!TIP] -> -> To get some context, you might find our -> [blog post](https://ente.io/blog/open-sourcing-our-server/) announcing the -> open sourcing of our server useful. - -## Getting started - -#### Installing Docker - -Refer to -[How to install Docker from the APT repository](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository) -for detailed instructions. - -#### Start the server - -```sh -git clone https://github.com/ente-io/ente -cd ente/server -docker compose up --build -``` - -> [!TIP] -> -> You can also use a pre-built Docker image from `ghcr.io/ente-io/server` -> ([More info](https://github.com/ente-io/ente/blob/main/server/docs/docker.md)) - -Install the necessary dependencies for running the web client - -```sh -# installing npm and yarn - -sudo apt update -sudo apt install nodejs npm -sudo npm install -g yarn // to install yarn globally -``` - -Then in a separate terminal, you can run (e.g) the web client - -```sh -cd ente/web -yarn install -NEXT_PUBLIC_ENTE_ENDPOINT=http://localhost:8080 yarn dev -``` - -That's about it. If you open http://localhost:3000, you will be able to create -an account on a Ente Photos web app running on your machine, and this web app -will be connecting to the server running on your local machine at -`localhost:8080`. - -For the mobile apps, you don't even need to build, and can install normal Ente -apps and configure them to use your -[custom self-hosted server](guides/custom-server/). - -> If you want to build the mobile apps from source, see the instructions -> [here](guides/mobile-build). - -## Next steps - -- More details about the server are in its - [README](https://github.com/ente-io/ente/tree/main/server#readme) - -- More details about running the server (with or without Docker) are in - [RUNNING](https://github.com/ente-io/ente/blob/main/server/RUNNING.md) - -- If you have questions around self-hosting that are not answered in any of the - existing documentation, you can ask in our - [GitHub Discussions](https://github.com/ente-io/ente/discussions). **Please - remember to search first if the query has been already asked and answered.** - -## Contributing! - -One particular way in which you can help is by adding new [guides](guides/) on -this help site. The documentation is written in Markdown and adding new pages is -[easy](https://github.com/ente-io/ente/tree/main/docs#readme). Editing existing -pages is even easier: at the bottom of each page is an _Edit this page_ link. diff --git a/docs/docs/self-hosting/troubleshooting/keyring.md b/docs/docs/self-hosting/troubleshooting/keyring.md deleted file mode 100644 index 399595b..0000000 --- a/docs/docs/self-hosting/troubleshooting/keyring.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Ente CLI Secrets -description: A quick hotfix for keyring errors while running Ente CLI. ---- - -# Ente CLI Secrets - -Ente CLI makes use of keyring for storing sensitive information like your -passwords. And running the cli straight out of the box might give you some -errors related to keyrings in some case. - -Follow the below steps to run Ente CLI and also avoid keyrings errors. - -Run: - -```sh -# export the secrets path - -export ENTE_CLI_SECRETS_PATH=./ - -./ente-cli -``` - -You can also add the above line to your shell's rc file, to prevent the need to -export manually every time. - -Then one of the following: - -1. If the file doesn't exist, Ente CLI will create it and fill it with a random - 32 character encryption key. -2. If you do create the file, please fill it with a cryptographically generated - 32 byte string. - -And you are good to go. - -## Ref - -- [Ente CLI Secrets Path](https://www.reddit.com/r/selfhosted/comments/1gc09il/comment/lu2hox2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button) -- [Keyrings](https://man7.org/linux/man-pages/man7/keyrings.7.html) diff --git a/docs/docs/self-hosting/troubleshooting/uploads.md b/docs/docs/self-hosting/troubleshooting/uploads.md deleted file mode 100644 index 435a5e9..0000000 --- a/docs/docs/self-hosting/troubleshooting/uploads.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Uploads failing -description: Fixing upload errors when trying to self host Ente ---- - -# Uploads failing - -If uploads to your minio are failing, you need to ensure that you've configured -the S3 bucket `endpoint` in `credentials.yaml` (or `museum.yaml`) to, say, -`yourserverip:3200`. This can be any host or port, it just need to be a value -that is reachable from both your client and from museum. - -For more details, see [configuring-s3](/self-hosting/guides/configuring-s3). diff --git a/docs/docs/self-hosting/troubleshooting/yarn.md b/docs/docs/self-hosting/troubleshooting/yarn.md deleted file mode 100644 index a1905af..0000000 --- a/docs/docs/self-hosting/troubleshooting/yarn.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Yarn errors -description: Fixing yarn install errors when trying to self host Ente ---- - -# Yarn - -If your `yarn install` is failing, make sure you are using Yarn Classic - -- https://classic.yarnpkg.com/lang/en/docs/install - -For more details, see the -[getting started instructions](https://github.com/ente-io/ente/blob/main/web/docs/new.md). diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index bd7635b..0000000 --- a/docs/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "type": "module", - "private": true, - "scripts": { - "dev": "vitepress dev docs", - "build": "vitepress build docs", - "preview": "vitepress preview docs", - "pretty": "prettier --write ." - }, - "devDependencies": { - "prettier": "^3.3.4", - "vitepress": "^1.5.0" - }, - "packageManager": "yarn@1.22.22" -} diff --git a/docs/yarn.lock b/docs/yarn.lock deleted file mode 100644 index d03ac81..0000000 --- a/docs/yarn.lock +++ /dev/null @@ -1,1160 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@algolia/autocomplete-core@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz#2c410baa94a47c5c5f56ed712bb4a00ebe24088b" - integrity sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q== - dependencies: - "@algolia/autocomplete-plugin-algolia-insights" "1.17.7" - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-plugin-algolia-insights@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz#7d2b105f84e7dd8f0370aa4c4ab3b704e6760d82" - integrity sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A== - dependencies: - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-preset-algolia@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz#c9badc0d73d62db5bf565d839d94ec0034680ae9" - integrity sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA== - dependencies: - "@algolia/autocomplete-shared" "1.17.7" - -"@algolia/autocomplete-shared@1.17.7": - version "1.17.7" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz#105e84ad9d1a31d3fb86ba20dc890eefe1a313a0" - integrity sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg== - -"@algolia/client-abtesting@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-abtesting/-/client-abtesting-5.18.0.tgz#1bc368444d08b6e48ce56f1d5c935bfb9f658a98" - integrity sha512-DLIrAukjsSrdMNNDx1ZTks72o4RH/1kOn8Wx5zZm8nnqFexG+JzY4SANnCNEjnFQPJTTvC+KpgiNW/CP2lumng== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/client-analytics@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-5.18.0.tgz#de0dc80011fdbaa9853adbdb836e0a80f08f53df" - integrity sha512-0VpGG2uQW+h2aejxbG8VbnMCQ9ary9/ot7OASXi6OjE0SRkYQ/+pkW+q09+IScif3pmsVVYggmlMPtAsmYWHng== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/client-common@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-5.18.0.tgz#8de3991b25ff3c9bbf5ef06c19f6a4a4fa64f328" - integrity sha512-X1WMSC+1ve2qlMsemyTF5bIjwipOT+m99Ng1Tyl36ZjQKTa54oajBKE0BrmM8LD8jGdtukAgkUhFoYOaRbMcmQ== - -"@algolia/client-insights@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-insights/-/client-insights-5.18.0.tgz#2c6f158e57265fd0888f5b84fe7302d6d659c0ff" - integrity sha512-FAJRNANUOSs/FgYOJ/Njqp+YTe4TMz2GkeZtfsw1TMiA5mVNRS/nnMpxas9771aJz7KTEWvK9GwqPs0K6RMYWg== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/client-personalization@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-5.18.0.tgz#26128f6a1aef523ae32f29ef9afd18fd2f159b98" - integrity sha512-I2dc94Oiwic3SEbrRp8kvTZtYpJjGtg5y5XnqubgnA15AgX59YIY8frKsFG8SOH1n2rIhUClcuDkxYQNXJLg+w== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/client-query-suggestions@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-query-suggestions/-/client-query-suggestions-5.18.0.tgz#9911560aa2dd26984a6d3f9803f14aecc2f1d10e" - integrity sha512-x6XKIQgKFTgK/bMasXhghoEjHhmgoP61pFPb9+TaUJ32aKOGc65b12usiGJ9A84yS73UDkXS452NjyP50Knh/g== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/client-search@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-5.18.0.tgz#26a3b55b6783cf7eaa8c28b48b891ed245c7e708" - integrity sha512-qI3LcFsVgtvpsBGR7aNSJYxhsR+Zl46+958ODzg8aCxIcdxiK7QEVLMJMZAR57jGqW0Lg/vrjtuLFDMfSE53qA== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/ingestion@1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@algolia/ingestion/-/ingestion-1.18.0.tgz#023e2fda366655b0e8f2cdddd98666412815429d" - integrity sha512-bGvJg7HnGGm+XWYMDruZXWgMDPVt4yCbBqq8DM6EoaMBK71SYC4WMfIdJaw+ABqttjBhe6aKNRkWf/bbvYOGyw== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/monitoring@1.18.0": - version "1.18.0" - resolved "https://registry.yarnpkg.com/@algolia/monitoring/-/monitoring-1.18.0.tgz#e94a4c436be0d8c1e9d19c69aeff8e67d0237736" - integrity sha512-lBssglINIeGIR+8KyzH05NAgAmn1BCrm5D2T6pMtr/8kbTHvvrm1Zvcltc5dKUQEFyyx3J5+MhNc7kfi8LdjVw== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/recommend@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/recommend/-/recommend-5.18.0.tgz#bd07d3057dd2030718c6707a4fe247b871f1834d" - integrity sha512-uSnkm0cdAuFwdMp4pGT5vHVQ84T6AYpTZ3I0b3k/M3wg4zXDhl3aCiY8NzokEyRLezz/kHLEEcgb/tTTobOYVw== - dependencies: - "@algolia/client-common" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -"@algolia/requester-browser-xhr@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.18.0.tgz#6e7e56bb687904a01c91988393f5c1969944ee3d" - integrity sha512-1XFjW0C3pV0dS/9zXbV44cKI+QM4ZIz9cpatXpsjRlq6SUCpLID3DZHsXyE6sTb8IhyPaUjk78GEJT8/3hviqg== - dependencies: - "@algolia/client-common" "5.18.0" - -"@algolia/requester-fetch@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-fetch/-/requester-fetch-5.18.0.tgz#fcccc76bd7d16fb54c56d15baa6b5f657b17ca71" - integrity sha512-0uodeNdAHz1YbzJh6C5xeQ4T6x5WGiUxUq3GOaT/R4njh5t78dq+Rb187elr7KtnjUmETVVuCvmEYaThfTHzNg== - dependencies: - "@algolia/client-common" "5.18.0" - -"@algolia/requester-node-http@5.18.0": - version "5.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-5.18.0.tgz#c5b16de53d83276067583e7b2f56b09eac938435" - integrity sha512-tZCqDrqJ2YE2I5ukCQrYN8oiF6u3JIdCxrtKq+eniuLkjkO78TKRnXrVcKZTmfFJyyDK8q47SfDcHzAA3nHi6w== - dependencies: - "@algolia/client-common" "5.18.0" - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/parser@^7.25.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.3.tgz#8c51c5db6ddf08134af1ddbacf16aaab48bac234" - integrity sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA== - dependencies: - "@babel/types" "^7.26.3" - -"@babel/types@^7.26.3": - version "7.26.3" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.3.tgz#37e79830f04c2b5687acc77db97fbc75fb81f3c0" - integrity sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@docsearch/css@3.8.2", "@docsearch/css@^3.6.2": - version "3.8.2" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.8.2.tgz#7973ceb6892c30f154ba254cd05c562257a44977" - integrity sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ== - -"@docsearch/js@^3.6.2": - version "3.8.2" - resolved "https://registry.yarnpkg.com/@docsearch/js/-/js-3.8.2.tgz#bdcfc9837700eb38453b88e211ab5cc5a3813cc6" - integrity sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ== - dependencies: - "@docsearch/react" "3.8.2" - preact "^10.0.0" - -"@docsearch/react@3.8.2": - version "3.8.2" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.8.2.tgz#7b11d39b61c976c0aa9fbde66e6b73b30f3acd42" - integrity sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg== - dependencies: - "@algolia/autocomplete-core" "1.17.7" - "@algolia/autocomplete-preset-algolia" "1.17.7" - "@docsearch/css" "3.8.2" - algoliasearch "^5.14.2" - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@iconify-json/simple-icons@^1.2.10": - version "1.2.17" - resolved "https://registry.yarnpkg.com/@iconify-json/simple-icons/-/simple-icons-1.2.17.tgz#ad0c61b84ac98eef2b7bb485e89a58fbea37d164" - integrity sha512-1vXbM6a6HV2rwXxu8ptD2OYhqrqX0ZZRepOg7nIjkvKlKq90Iici4X++A8h36bEVlV2wGjqx8uVYB0pwnPZVSw== - dependencies: - "@iconify/types" "*" - -"@iconify/types@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@iconify/types/-/types-2.0.0.tgz#ab0e9ea681d6c8a1214f30cd741fe3a20cc57f57" - integrity sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg== - -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@rollup/rollup-android-arm-eabi@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.29.1.tgz#9bd38df6a29afb7f0336d988bc8112af0c8816c0" - integrity sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw== - -"@rollup/rollup-android-arm64@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.29.1.tgz#bd1a98390e15b76eeef907175a37c5f0f9e4d214" - integrity sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew== - -"@rollup/rollup-darwin-arm64@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.29.1.tgz#bc6fa8a2cc77b5f367424e5e994e3537524e6879" - integrity sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw== - -"@rollup/rollup-darwin-x64@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.29.1.tgz#76059c91f06b17406347b127df10f065283b2e61" - integrity sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng== - -"@rollup/rollup-freebsd-arm64@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.29.1.tgz#83178315c0be4b4c8c1fd835e1952d2dc1eb4e6e" - integrity sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw== - -"@rollup/rollup-freebsd-x64@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.29.1.tgz#1ef24fa0576bf7899a0a0a649156606dbd7a0d46" - integrity sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w== - -"@rollup/rollup-linux-arm-gnueabihf@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.29.1.tgz#443a6f5681bf4611caae42988994a6d8ee676216" - integrity sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A== - -"@rollup/rollup-linux-arm-musleabihf@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.29.1.tgz#9738b27184102228637a683e5f35b22ea352394f" - integrity sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ== - -"@rollup/rollup-linux-arm64-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.29.1.tgz#b5e9d5e30ff36a19bedd29c715ba18a1889ff269" - integrity sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA== - -"@rollup/rollup-linux-arm64-musl@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.29.1.tgz#1d8f68f0829b57f746ec03432ad046f1af014a98" - integrity sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA== - -"@rollup/rollup-linux-loongarch64-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.29.1.tgz#07027feb883408e74a3002c8e50caaedd288ae38" - integrity sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.29.1.tgz#544ce1b0847a9c1240425e86f33daceac7ec4e12" - integrity sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w== - -"@rollup/rollup-linux-riscv64-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.29.1.tgz#64be13d51852ec1e2dfbd25d997ed5f42f35ea6d" - integrity sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ== - -"@rollup/rollup-linux-s390x-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.29.1.tgz#31f51e1e05c6264552d03875d9e2e673f0fd86e3" - integrity sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g== - -"@rollup/rollup-linux-x64-gnu@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.29.1.tgz#f4c95b26f4ad69ebdb64b42f0ae4da2a0f617958" - integrity sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ== - -"@rollup/rollup-linux-x64-musl@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.29.1.tgz#ab7be89192f72beb9ea6e2386186fefde4f69d82" - integrity sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA== - -"@rollup/rollup-win32-arm64-msvc@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.29.1.tgz#7f12efb8240b238346951559998802722944421e" - integrity sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig== - -"@rollup/rollup-win32-ia32-msvc@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.29.1.tgz#353d14d6eee943004d129796e4feddd3aa260921" - integrity sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng== - -"@rollup/rollup-win32-x64-msvc@4.29.1": - version "4.29.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.29.1.tgz#c82f04a09ba481e13857d6f2516e072aaa51b7f4" - integrity sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg== - -"@shikijs/core@1.24.4", "@shikijs/core@^1.22.2": - version "1.24.4" - resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.24.4.tgz#de1c454a4e2dbcfaee2dde51d3fac6041e6171f7" - integrity sha512-jjLsld+xEEGYlxAXDyGwWsKJ1sw5Pc1pnp4ai2ORpjx2UX08YYTC0NNqQYO1PaghYaR+PvgMOGuvzw2he9sk0Q== - dependencies: - "@shikijs/engine-javascript" "1.24.4" - "@shikijs/engine-oniguruma" "1.24.4" - "@shikijs/types" "1.24.4" - "@shikijs/vscode-textmate" "^9.3.1" - "@types/hast" "^3.0.4" - hast-util-to-html "^9.0.4" - -"@shikijs/engine-javascript@1.24.4": - version "1.24.4" - resolved "https://registry.yarnpkg.com/@shikijs/engine-javascript/-/engine-javascript-1.24.4.tgz#8fd1bf1bcb37d14f19412bb0791d1566d6c762c8" - integrity sha512-TClaQOLvo9WEMJv6GoUsykQ6QdynuKszuORFWCke8qvi6PeLm7FcD9+7y45UenysxEWYpDL5KJaVXTngTE+2BA== - dependencies: - "@shikijs/types" "1.24.4" - "@shikijs/vscode-textmate" "^9.3.1" - oniguruma-to-es "0.8.1" - -"@shikijs/engine-oniguruma@1.24.4": - version "1.24.4" - resolved "https://registry.yarnpkg.com/@shikijs/engine-oniguruma/-/engine-oniguruma-1.24.4.tgz#6adc430ddf247eeed155d8a41883e36160f302cf" - integrity sha512-Do2ry6flp2HWdvpj2XOwwa0ljZBRy15HKZITzPcNIBOGSeprnA8gOooA/bLsSPuy8aJBa+Q/r34dMmC3KNL/zw== - dependencies: - "@shikijs/types" "1.24.4" - "@shikijs/vscode-textmate" "^9.3.1" - -"@shikijs/transformers@^1.22.2": - version "1.24.4" - resolved "https://registry.yarnpkg.com/@shikijs/transformers/-/transformers-1.24.4.tgz#e9e43cd3fdef98fbd983dd1e22f62fdf64749b6d" - integrity sha512-0jq5p9WLB7ToM/O7RWfxuIwirTJbIQsUR06jxdG3h3CEuO5m7ik8GnDsxwHhyIEfgJSZczSnVUZWFrNKy5It6g== - dependencies: - shiki "1.24.4" - -"@shikijs/types@1.24.4", "@shikijs/types@^1.22.2": - version "1.24.4" - resolved "https://registry.yarnpkg.com/@shikijs/types/-/types-1.24.4.tgz#06ec8975732b68508f8423b01a5649eef8d9cea3" - integrity sha512-0r0XU7Eaow0PuDxuWC1bVqmWCgm3XqizIaT7SM42K03vc69LGooT0U8ccSR44xP/hGlNx4FKhtYpV+BU6aaKAA== - dependencies: - "@shikijs/vscode-textmate" "^9.3.1" - "@types/hast" "^3.0.4" - -"@shikijs/vscode-textmate@^9.3.1": - version "9.3.1" - resolved "https://registry.yarnpkg.com/@shikijs/vscode-textmate/-/vscode-textmate-9.3.1.tgz#afda31f8f42cab70a26f3603f52eae3f1c35d2f7" - integrity sha512-79QfK1393x9Ho60QFyLti+QfdJzRQCVLFb97kOIV7Eo9vQU/roINgk7m24uv0a7AUvN//RDH36FLjjK48v0s9g== - -"@types/estree@1.0.6": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@types/hast@^3.0.0", "@types/hast@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-3.0.4.tgz#1d6b39993b82cea6ad783945b0508c25903e15aa" - integrity sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ== - dependencies: - "@types/unist" "*" - -"@types/linkify-it@^5": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" - integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== - -"@types/markdown-it@^14.1.2": - version "14.1.2" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" - integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== - dependencies: - "@types/linkify-it" "^5" - "@types/mdurl" "^2" - -"@types/mdast@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-4.0.4.tgz#7ccf72edd2f1aa7dd3437e180c64373585804dd6" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== - dependencies: - "@types/unist" "*" - -"@types/mdurl@^2": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" - integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== - -"@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-3.0.3.tgz#acaab0f919ce69cce629c2d4ed2eb4adc1b6c20c" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== - -"@types/web-bluetooth@^0.0.20": - version "0.0.20" - resolved "https://registry.yarnpkg.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz#f066abfcd1cbe66267cdbbf0de010d8a41b41597" - integrity sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow== - -"@ungap/structured-clone@^1.0.0": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.1.tgz#28fa185f67daaf7b7a1a8c1d445132c5d979f8bd" - integrity sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA== - -"@vitejs/plugin-vue@^5.1.4": - version "5.2.1" - resolved "https://registry.yarnpkg.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133" - integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ== - -"@vue/compiler-core@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" - integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.13" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" - integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== - dependencies: - "@vue/compiler-core" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/compiler-sfc@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" - integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/compiler-core" "3.5.13" - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" - estree-walker "^2.0.2" - magic-string "^0.30.11" - postcss "^8.4.48" - source-map-js "^1.2.0" - -"@vue/compiler-ssr@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" - integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== - dependencies: - "@vue/compiler-dom" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/devtools-api@^7.5.4": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-7.6.8.tgz#8cd39eb9846d81eccbffe41c1f1ca33ad195d691" - integrity sha512-ma6dY/sZR36zALVsV1W7eC57c6IJPXsy8SNgZn1PLVWU4z4dPn5TIBmnF4stmdJ4sQcixqKaQ8pwjbMPzEZwiA== - dependencies: - "@vue/devtools-kit" "^7.6.8" - -"@vue/devtools-kit@^7.6.8": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@vue/devtools-kit/-/devtools-kit-7.6.8.tgz#c9e98470f327d93d8d6cec8aa34cf071a1ad949b" - integrity sha512-JhJ8M3sPU+v0P2iZBF2DkdmR9L0dnT5RXJabJqX6o8KtFs3tebdvfoXV2Dm3BFuqeECuMJIfF1aCzSt+WQ4wrw== - dependencies: - "@vue/devtools-shared" "^7.6.8" - birpc "^0.2.19" - hookable "^5.5.3" - mitt "^3.0.1" - perfect-debounce "^1.0.0" - speakingurl "^14.0.1" - superjson "^2.2.1" - -"@vue/devtools-shared@^7.6.8": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@vue/devtools-shared/-/devtools-shared-7.6.8.tgz#ddff5e3678353a286c733df5b26d058479d521f1" - integrity sha512-9MBPO5Z3X1nYGFqTJyohl6Gmf/J7UNN1oicHdyzBVZP4jnhZ4c20MgtaHDIzWmHDHCMYVS5bwKxT3jxh7gOOKA== - dependencies: - rfdc "^1.4.1" - -"@vue/reactivity@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f" - integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== - dependencies: - "@vue/shared" "3.5.13" - -"@vue/runtime-core@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455" - integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== - dependencies: - "@vue/reactivity" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/runtime-dom@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215" - integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== - dependencies: - "@vue/reactivity" "3.5.13" - "@vue/runtime-core" "3.5.13" - "@vue/shared" "3.5.13" - csstype "^3.1.3" - -"@vue/server-renderer@3.5.13": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7" - integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== - dependencies: - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/shared@3.5.13", "@vue/shared@^3.5.12": - version "3.5.13" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" - integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== - -"@vueuse/core@11.3.0", "@vueuse/core@^11.1.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/core/-/core-11.3.0.tgz#bb0bd1f0edd5435d20694dbe51091cf548653a4d" - integrity sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA== - dependencies: - "@types/web-bluetooth" "^0.0.20" - "@vueuse/metadata" "11.3.0" - "@vueuse/shared" "11.3.0" - vue-demi ">=0.14.10" - -"@vueuse/integrations@^11.1.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/integrations/-/integrations-11.3.0.tgz#2df4468ca3e2f8182ebe2cf7f5b9d768dc7baeb1" - integrity sha512-5fzRl0apQWrDezmobchoiGTkGw238VWESxZHazfhP3RM7pDSiyXy18QbfYkILoYNTd23HPAfQTJpkUc5QbkwTw== - dependencies: - "@vueuse/core" "11.3.0" - "@vueuse/shared" "11.3.0" - vue-demi ">=0.14.10" - -"@vueuse/metadata@11.3.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/metadata/-/metadata-11.3.0.tgz#be7ac12e3016c0353a3667b372a73aeeee59194e" - integrity sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g== - -"@vueuse/shared@11.3.0": - version "11.3.0" - resolved "https://registry.yarnpkg.com/@vueuse/shared/-/shared-11.3.0.tgz#086a4f35bf5bcec5655a03b80eae582605a4b21d" - integrity sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA== - dependencies: - vue-demi ">=0.14.10" - -algoliasearch@^5.14.2: - version "5.18.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-5.18.0.tgz#2023232151f2ee9a580ea84d4a36676871979ce4" - integrity sha512-/tfpK2A4FpS0o+S78o3YSdlqXr0MavJIDlFK3XZrlXLy7vaRXJvW5jYg3v5e/wCaF8y0IpMjkYLhoV6QqfpOgw== - dependencies: - "@algolia/client-abtesting" "5.18.0" - "@algolia/client-analytics" "5.18.0" - "@algolia/client-common" "5.18.0" - "@algolia/client-insights" "5.18.0" - "@algolia/client-personalization" "5.18.0" - "@algolia/client-query-suggestions" "5.18.0" - "@algolia/client-search" "5.18.0" - "@algolia/ingestion" "1.18.0" - "@algolia/monitoring" "1.18.0" - "@algolia/recommend" "5.18.0" - "@algolia/requester-browser-xhr" "5.18.0" - "@algolia/requester-fetch" "5.18.0" - "@algolia/requester-node-http" "5.18.0" - -birpc@^0.2.19: - version "0.2.19" - resolved "https://registry.yarnpkg.com/birpc/-/birpc-0.2.19.tgz#cdd183a4a70ba103127d49765b4a71349da5a0ca" - integrity sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ== - -ccount@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-2.0.1.tgz#17a3bf82302e0870d6da43a01311a8bc02a3ecf5" - integrity sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== - -character-entities-html4@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-2.1.0.tgz#1f1adb940c971a4b22ba39ddca6b618dc6e56b2b" - integrity sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA== - -character-entities-legacy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz#76bc83a90738901d7bc223a9e93759fdd560125b" - integrity sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ== - -comma-separated-tokens@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz#4e89c9458acb61bc8fef19f4529973b2392839ee" - integrity sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg== - -copy-anything@^3.0.2: - version "3.0.5" - resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-3.0.5.tgz#2d92dce8c498f790fa7ad16b01a1ae5a45b020a0" - integrity sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w== - dependencies: - is-what "^4.1.8" - -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -dequal@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" - integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== - -devlop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/devlop/-/devlop-1.1.0.tgz#4db7c2ca4dc6e0e834c30be70c94bbc976dc7018" - integrity sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA== - dependencies: - dequal "^2.0.0" - -emoji-regex-xs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz#e8af22e5d9dbd7f7f22d280af3d19d2aab5b0724" - integrity sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg== - -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -focus-trap@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/focus-trap/-/focus-trap-7.6.2.tgz#a501988821ca23d0150a7229eb7a20a3695bdf0e" - integrity sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w== - dependencies: - tabbable "^6.2.0" - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -hast-util-to-html@^9.0.4: - version "9.0.4" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz#d689c118c875aab1def692c58603e34335a0f5c5" - integrity sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA== - dependencies: - "@types/hast" "^3.0.0" - "@types/unist" "^3.0.0" - ccount "^2.0.0" - comma-separated-tokens "^2.0.0" - hast-util-whitespace "^3.0.0" - html-void-elements "^3.0.0" - mdast-util-to-hast "^13.0.0" - property-information "^6.0.0" - space-separated-tokens "^2.0.0" - stringify-entities "^4.0.0" - zwitch "^2.0.4" - -hast-util-whitespace@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz#7778ed9d3c92dd9e8c5c8f648a49c21fc51cb621" - integrity sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw== - dependencies: - "@types/hast" "^3.0.0" - -hookable@^5.5.3: - version "5.5.3" - resolved "https://registry.yarnpkg.com/hookable/-/hookable-5.5.3.tgz#6cfc358984a1ef991e2518cb9ed4a778bbd3215d" - integrity sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ== - -html-void-elements@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-3.0.0.tgz#fc9dbd84af9e747249034d4d62602def6517f1d7" - integrity sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg== - -is-what@^4.1.8: - version "4.1.16" - resolved "https://registry.yarnpkg.com/is-what/-/is-what-4.1.16.tgz#1ad860a19da8b4895ad5495da3182ce2acdd7a6f" - integrity sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A== - -magic-string@^0.30.11: - version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -mark.js@8.11.1: - version "8.11.1" - resolved "https://registry.yarnpkg.com/mark.js/-/mark.js-8.11.1.tgz#180f1f9ebef8b0e638e4166ad52db879beb2ffc5" - integrity sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ== - -mdast-util-to-hast@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz#5ca58e5b921cc0a3ded1bc02eed79a4fe4fe41f4" - integrity sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA== - dependencies: - "@types/hast" "^3.0.0" - "@types/mdast" "^4.0.0" - "@ungap/structured-clone" "^1.0.0" - devlop "^1.0.0" - micromark-util-sanitize-uri "^2.0.0" - trim-lines "^3.0.0" - unist-util-position "^5.0.0" - unist-util-visit "^5.0.0" - vfile "^6.0.0" - -micromark-util-character@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-2.1.1.tgz#2f987831a40d4c510ac261e89852c4e9703ccda6" - integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== - dependencies: - micromark-util-symbol "^2.0.0" - micromark-util-types "^2.0.0" - -micromark-util-encode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz#0d51d1c095551cfaac368326963cf55f15f540b8" - integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== - -micromark-util-sanitize-uri@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz#ab89789b818a58752b73d6b55238621b7faa8fd7" - integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== - dependencies: - micromark-util-character "^2.0.0" - micromark-util-encode "^2.0.0" - micromark-util-symbol "^2.0.0" - -micromark-util-symbol@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz#e5da494e8eb2b071a0d08fb34f6cefec6c0a19b8" - integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== - -micromark-util-types@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-2.0.1.tgz#a3edfda3022c6c6b55bfb049ef5b75d70af50709" - integrity sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ== - -minisearch@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/minisearch/-/minisearch-7.1.1.tgz#901d0367f078233cdc7a10be7264e09c6248cf5f" - integrity sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw== - -mitt@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1" - integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -oniguruma-to-es@0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/oniguruma-to-es/-/oniguruma-to-es-0.8.1.tgz#a18767531ce562c0bfafa357a8cca0003c05323c" - integrity sha512-dekySTEvCxCj0IgKcA2uUCO/e4ArsqpucDPcX26w9ajx+DvMWLc5eZeJaRQkd7oC/+rwif5gnT900tA34uN9Zw== - dependencies: - emoji-regex-xs "^1.0.0" - regex "^5.0.2" - regex-recursion "^5.0.0" - -perfect-debounce@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz#9c2e8bc30b169cc984a58b7d5b28049839591d2a" - integrity sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -postcss@^8.4.43, postcss@^8.4.48: - version "8.4.49" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.49.tgz#4ea479048ab059ab3ae61d082190fabfd994fe19" - integrity sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA== - dependencies: - nanoid "^3.3.7" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -preact@^10.0.0: - version "10.19.6" - resolved "https://registry.yarnpkg.com/preact/-/preact-10.19.6.tgz#66007b67aad4d11899f583df1b0116d94a89b8f5" - integrity sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw== - -prettier@^3.3.4: - version "3.4.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.4.2.tgz#a5ce1fb522a588bf2b78ca44c6e6fe5aa5a2b13f" - integrity sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ== - -property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-6.5.0.tgz#6212fbb52ba757e92ef4fb9d657563b933b7ffec" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -regex-recursion@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/regex-recursion/-/regex-recursion-5.1.1.tgz#5a73772d18adbf00f57ad097bf54171b39d78f8b" - integrity sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w== - dependencies: - regex "^5.1.1" - regex-utilities "^2.3.0" - -regex-utilities@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/regex-utilities/-/regex-utilities-2.3.0.tgz#87163512a15dce2908cf079c8960d5158ff43280" - integrity sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng== - -regex@^5.0.2, regex@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/regex/-/regex-5.1.1.tgz#cf798903f24d6fe6e531050a36686e082b29bd03" - integrity sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw== - dependencies: - regex-utilities "^2.3.0" - -rfdc@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" - integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== - -rollup@^4.20.0: - version "4.29.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.29.1.tgz#a9aaaece817e5f778489e5bf82e379cc8a5c05bc" - integrity sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.29.1" - "@rollup/rollup-android-arm64" "4.29.1" - "@rollup/rollup-darwin-arm64" "4.29.1" - "@rollup/rollup-darwin-x64" "4.29.1" - "@rollup/rollup-freebsd-arm64" "4.29.1" - "@rollup/rollup-freebsd-x64" "4.29.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.29.1" - "@rollup/rollup-linux-arm-musleabihf" "4.29.1" - "@rollup/rollup-linux-arm64-gnu" "4.29.1" - "@rollup/rollup-linux-arm64-musl" "4.29.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.29.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.29.1" - "@rollup/rollup-linux-riscv64-gnu" "4.29.1" - "@rollup/rollup-linux-s390x-gnu" "4.29.1" - "@rollup/rollup-linux-x64-gnu" "4.29.1" - "@rollup/rollup-linux-x64-musl" "4.29.1" - "@rollup/rollup-win32-arm64-msvc" "4.29.1" - "@rollup/rollup-win32-ia32-msvc" "4.29.1" - "@rollup/rollup-win32-x64-msvc" "4.29.1" - fsevents "~2.3.2" - -shiki@1.24.4, shiki@^1.22.2: - version "1.24.4" - resolved "https://registry.yarnpkg.com/shiki/-/shiki-1.24.4.tgz#fc468ded0cfd51d7d9fbcf7606467a4dc020307c" - integrity sha512-aVGSFAOAr1v26Hh/+GBIsRVDWJ583XYV7CuNURKRWh9gpGv4OdbisZGq96B9arMYTZhTQkmRF5BrShOSTvNqhw== - dependencies: - "@shikijs/core" "1.24.4" - "@shikijs/engine-javascript" "1.24.4" - "@shikijs/engine-oniguruma" "1.24.4" - "@shikijs/types" "1.24.4" - "@shikijs/vscode-textmate" "^9.3.1" - "@types/hast" "^3.0.4" - -source-map-js@^1.2.0, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -space-separated-tokens@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz#1ecd9d2350a3844572c3f4a312bceb018348859f" - integrity sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q== - -speakingurl@^14.0.1: - version "14.0.1" - resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" - integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== - -stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-4.0.4.tgz#b3b79ef5f277cc4ac73caeb0236c5ba939b3a4f3" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== - dependencies: - character-entities-html4 "^2.0.0" - character-entities-legacy "^3.0.0" - -superjson@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/superjson/-/superjson-2.2.2.tgz#9d52bf0bf6b5751a3c3472f1292e714782ba3173" - integrity sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q== - dependencies: - copy-anything "^3.0.2" - -tabbable@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-6.2.0.tgz#732fb62bc0175cfcec257330be187dcfba1f3b97" - integrity sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew== - -trim-lines@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-3.0.1.tgz#d802e332a07df861c48802c04321017b1bd87338" - integrity sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg== - -unist-util-is@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-6.0.0.tgz#b775956486aff107a9ded971d996c173374be424" - integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-position@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-5.0.0.tgz#678f20ab5ca1207a97d7ea8a388373c9cf896be4" - integrity sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-stringify-position@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz#449c6e21a880e0855bf5aabadeb3a740314abac2" - integrity sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ== - dependencies: - "@types/unist" "^3.0.0" - -unist-util-visit-parents@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz#4d5f85755c3b8f0dc69e21eca5d6d82d22162815" - integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - -unist-util-visit@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-5.0.0.tgz#a7de1f31f72ffd3519ea71814cccf5fd6a9217d6" - integrity sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg== - dependencies: - "@types/unist" "^3.0.0" - unist-util-is "^6.0.0" - unist-util-visit-parents "^6.0.0" - -vfile-message@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-4.0.2.tgz#c883c9f677c72c166362fd635f21fc165a7d1181" - integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== - dependencies: - "@types/unist" "^3.0.0" - unist-util-stringify-position "^4.0.0" - -vfile@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-6.0.3.tgz#3652ab1c496531852bf55a6bac57af981ebc38ab" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== - dependencies: - "@types/unist" "^3.0.0" - vfile-message "^4.0.0" - -vite@^5.4.10: - version "5.4.11" - resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.11.tgz#3b415cd4aed781a356c1de5a9ebafb837715f6e5" - integrity sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vitepress@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/vitepress/-/vitepress-1.5.0.tgz#61870b27dc9a580e46cea92989f64cdcb550dc23" - integrity sha512-q4Q/G2zjvynvizdB3/bupdYkCJe2umSAMv9Ju4d92E6/NXJ59z70xB0q5p/4lpRyAwflDsbwy1mLV9Q5+nlB+g== - dependencies: - "@docsearch/css" "^3.6.2" - "@docsearch/js" "^3.6.2" - "@iconify-json/simple-icons" "^1.2.10" - "@shikijs/core" "^1.22.2" - "@shikijs/transformers" "^1.22.2" - "@shikijs/types" "^1.22.2" - "@types/markdown-it" "^14.1.2" - "@vitejs/plugin-vue" "^5.1.4" - "@vue/devtools-api" "^7.5.4" - "@vue/shared" "^3.5.12" - "@vueuse/core" "^11.1.0" - "@vueuse/integrations" "^11.1.0" - focus-trap "^7.6.0" - mark.js "8.11.1" - minisearch "^7.1.0" - shiki "^1.22.2" - vite "^5.4.10" - vue "^3.5.12" - -vue-demi@>=0.14.10: - version "0.14.10" - resolved "https://registry.yarnpkg.com/vue-demi/-/vue-demi-0.14.10.tgz#afc78de3d6f9e11bf78c55e8510ee12814522f04" - integrity sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg== - -vue@^3.5.12: - version "3.5.13" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" - integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== - dependencies: - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-sfc" "3.5.13" - "@vue/runtime-dom" "3.5.13" - "@vue/server-renderer" "3.5.13" - "@vue/shared" "3.5.13" - -zwitch@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-2.0.4.tgz#c827d4b0acb76fc3e685a4c6ec2902d51070e9d7" - integrity sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==