diff --git a/.gitignore b/.gitignore index 6bdb869f67..59a5f83524 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ vite.config.*.mjs apps/renderer/dev-dist tsconfig.tsbuildinfo + +ios +android diff --git a/apps/renderer/src/App.tsx b/apps/renderer/src/App.tsx index 51b4e9edcb..d0d84d5426 100644 --- a/apps/renderer/src/App.tsx +++ b/apps/renderer/src/App.tsx @@ -1,8 +1,13 @@ +import type { URLOpenListenerEvent } from "@capacitor/app" +import { App as CapacitorApp } from "@capacitor/app" +import { CapacitorHttp } from "@capacitor/core" import { isMobile } from "@follow/components/hooks/useMobile.js" import { IN_ELECTRON } from "@follow/shared/constants" +import { env } from "@follow/shared/env" import { cn, getOS } from "@follow/utils/utils" import { useEffect } from "react" import { Outlet } from "react-router" +import { toast } from "sonner" import { queryClient } from "~/lib/query-client" @@ -32,6 +37,29 @@ function App() { return cleanup }, []) + useEffect(() => { + CapacitorApp.addListener("appUrlOpen", async (event: URLOpenListenerEvent) => { + const authUrl = new URL(event.url) + const token = authUrl.searchParams.get("token") + if (token) { + try { + await CapacitorHttp.get({ + url: `${env.VITE_API_URL}/auth/session`, + headers: { + Cookie: `authjs.session-token=${token}`, + }, + }) + } catch (e) { + toast.error(`Login failed ${e}`) + } + } + }) + + return () => { + CapacitorApp.removeAllListeners() + } + }, []) + const windowsElectron = IN_ELECTRON && getOS() === "Windows" return ( diff --git a/apps/renderer/src/modules/user/LoginButton.tsx b/apps/renderer/src/modules/user/LoginButton.tsx index fffe17c0ef..a4ca18a2a1 100644 --- a/apps/renderer/src/modules/user/LoginButton.tsx +++ b/apps/renderer/src/modules/user/LoginButton.tsx @@ -1,5 +1,7 @@ +import { Capacitor } from "@capacitor/core" import { UserArrowLeftIcon } from "@follow/components/icons/user.jsx" import { ActionButton } from "@follow/components/ui/button/index.js" +import { env } from "@follow/shared/env" import type { FC } from "react" import { useTranslation } from "react-i18next" @@ -36,5 +38,9 @@ export const LoginButton: FC = (props) => { ) - return method === "modal" ? Content : {Content} + return method === "modal" ? ( + Content + ) : ( + {Content} + ) } diff --git a/capacitor.config.ts b/capacitor.config.ts new file mode 100644 index 0000000000..f1a21c72c0 --- /dev/null +++ b/capacitor.config.ts @@ -0,0 +1,31 @@ +import type { CapacitorConfig } from "@capacitor/cli" + +// CFBundleURLTypes +// +// +// CFBundleURLName +// com.example.app +// CFBundleURLSchemes +// +// follow +// +// +// +// WKAppBoundDomains +// +// app.follow.is +// api.follow.is +// + +const config: CapacitorConfig = { + appId: "com.example.app", + appName: "Follow", + webDir: "out/web", + plugins: { + CapacitorHttp: { + enabled: true, + }, + }, +} + +export default config diff --git a/package.json b/package.json index 16a9259876..942670c5f9 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,15 @@ "typecheck": "turbo typecheck", "update:main-hash": "tsx plugins/vite/generate-main-hash.ts" }, + "dependencies": { + "@capacitor/android": "^6.2.0", + "@capacitor/app": "^6.0.2", + "@capacitor/core": "^6.2.0", + "@capacitor/ios": "^6.2.0" + }, "devDependencies": { "@babel/generator": "7.26.2", + "@capacitor/cli": "^6.2.0", "@clack/prompts": "0.8.2", "@egoist/tailwindcss-icons": "1.8.1", "@electron-forge/cli": "7.6.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6f17e5087d..93476bf901 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,10 +43,26 @@ patchedDependencies: importers: .: + dependencies: + '@capacitor/android': + specifier: ^6.2.0 + version: 6.2.0(@capacitor/core@6.2.0) + '@capacitor/app': + specifier: ^6.0.2 + version: 6.0.2(@capacitor/core@6.2.0) + '@capacitor/core': + specifier: ^6.2.0 + version: 6.2.0 + '@capacitor/ios': + specifier: ^6.2.0 + version: 6.2.0(@capacitor/core@6.2.0) devDependencies: '@babel/generator': specifier: 7.26.2 version: 7.26.2 + '@capacitor/cli': + specifier: ^6.2.0 + version: 6.2.0 '@clack/prompts': specifier: 0.8.2 version: 0.8.2 @@ -1729,6 +1745,29 @@ packages: '@canvas/image-data@1.0.0': resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==} + '@capacitor/android@6.2.0': + resolution: {integrity: sha512-3YIDPylV0Q2adEQ/H568p496QdYG0jK/XGMdx7OGSqdBZen92ciAsYdyhLtyl91UVsN1lBhDi5H6j3T2KS6aJg==} + peerDependencies: + '@capacitor/core': ^6.2.0 + + '@capacitor/app@6.0.2': + resolution: {integrity: sha512-SiGTGgslK4TbWJVImCUL1odul7/YFkVfkYtAYS9AAEzQpxBECBeRnuN3FFBcfZ9eiN1XxFBFchhiwpxtx/c7yQ==} + peerDependencies: + '@capacitor/core': ^6.0.0 + + '@capacitor/cli@6.2.0': + resolution: {integrity: sha512-EWcXG39mZh35zrHhOqzN1ILeSyMRyEqWVtQDXqMGjCXYRH6b6p5TvyvLDN8ZNy26tbhI3i79gfrgirt+mNwuuw==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@capacitor/core@6.2.0': + resolution: {integrity: sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==} + + '@capacitor/ios@6.2.0': + resolution: {integrity: sha512-gisvZBIrKT1siiumgpLPY63HmJe69Ed/dOmfQQ+U1MIJmOR5gWGWvfO7QSj/FMatVZS4Xt/8jCoUgzDD1U6kSw==} + peerDependencies: + '@capacitor/core': ^6.2.0 + '@cfcs/core@0.0.6': resolution: {integrity: sha512-FxfJMwoLB8MEMConeXUCqtMGqxdtePQxRBOiGip9ULcYYam3WfCgoY6xdnMaSkYvRvmosp5iuG+TiPofm65+Pw==} @@ -2859,6 +2898,46 @@ packages: react: '>=17.0.0' react-dom: '>=17.0.0' + '@ionic/cli-framework-output@2.2.8': + resolution: {integrity: sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==} + engines: {node: '>=16.0.0'} + + '@ionic/utils-array@2.1.5': + resolution: {integrity: sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-fs@3.1.6': + resolution: {integrity: sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-fs@3.1.7': + resolution: {integrity: sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==} + engines: {node: '>=16.0.0'} + + '@ionic/utils-object@2.1.5': + resolution: {integrity: sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-process@2.1.10': + resolution: {integrity: sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-stream@3.1.5': + resolution: {integrity: sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-subprocess@2.1.11': + resolution: {integrity: sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-terminal@2.3.3': + resolution: {integrity: sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==} + engines: {node: '>=10.3.0'} + + '@ionic/utils-terminal@2.3.5': + resolution: {integrity: sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==} + engines: {node: '>=16.0.0'} + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -4395,6 +4474,9 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/fs-extra@8.1.5': + resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} + '@types/fs-extra@9.0.13': resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} @@ -4479,6 +4561,9 @@ packages: '@types/shimmer@1.2.0': resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + '@types/slice-ansi@4.0.0': + resolution: {integrity: sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==} + '@types/tar@6.1.13': resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} @@ -4974,6 +5059,10 @@ packages: before-after-hook@2.2.3: resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==} + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -5018,6 +5107,10 @@ packages: bplist-creator@0.0.8: resolution: {integrity: sha512-Za9JKzD6fjLC16oX2wsXfc+qBEhJBJB1YPInoAQpMLhDuj5aVOv1baGeIQSq1Fr3OCqzvsoQcSBSwGId/Ja2PA==} + bplist-parser@0.3.2: + resolution: {integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==} + engines: {node: '>= 5.10.0'} + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} @@ -5781,6 +5874,10 @@ packages: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} @@ -6105,6 +6202,10 @@ packages: engines: {node: '>= 12.20.55'} hasBin: true + elementtree@0.1.7: + resolution: {integrity: sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==} + engines: {node: '>= 0.4.0'} + elliptic@6.5.7: resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} @@ -7399,6 +7500,10 @@ packages: ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} @@ -7479,6 +7584,11 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -7637,6 +7747,10 @@ packages: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + isbinaryfile@4.0.10: resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} engines: {node: '>= 8.0.0'} @@ -7795,6 +7909,10 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + kleur@4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -8457,6 +8575,11 @@ packages: napi-build-utils@1.0.2: resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==} + native-run@2.0.1: + resolution: {integrity: sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==} + engines: {node: '>=16.0.0'} + hasBin: true + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -8637,6 +8760,10 @@ packages: oniguruma-to-es@0.4.1: resolution: {integrity: sha512-rNcEohFz095QKGRovP/yqPIKc+nP+Sjs4YTHMv33nMePGKrq/r2eu9Yh4646M5XluGJsUnmwoXuiXE69KDs+fQ==} + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -9288,6 +9415,10 @@ packages: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} engines: {node: '>=10'} + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -9781,6 +9912,11 @@ packages: deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rimraf@4.4.1: + resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==} + engines: {node: '>=14'} + hasBin: true + rimraf@5.0.10: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true @@ -9841,6 +9977,9 @@ packages: resolution: {integrity: sha512-e0e+qQyeFwEszujN7SpWpRtZgww7Nh8lSO3bUn2spHZ5JpqEl3zJ3P14/JlWruxEwdgREs35ZnavrPrWaRVFDg==} engines: {node: '>=16'} + sax@1.1.4: + resolution: {integrity: sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==} + sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} @@ -9996,6 +10135,10 @@ packages: resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} engines: {node: '>=8'} + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -10346,6 +10489,9 @@ packages: thread-stream@3.1.0: resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -10761,6 +10907,10 @@ packages: webpack-sources: optional: true + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + unused-filename@4.0.1: resolution: {integrity: sha512-ZX6U1J04K1FoSUeoX1OicAhw4d0aro2qo+L8RhJkiGTNtBNkd/Fi1Wxoc9HzcVu6HfOzm0si/N15JjxFmD1z6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -11150,6 +11300,14 @@ packages: utf-8-validate: optional: true + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + xmlbuilder@15.1.1: resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} engines: {node: '>=8.0'} @@ -11963,6 +12121,44 @@ snapshots: '@canvas/image-data@1.0.0': {} + '@capacitor/android@6.2.0(@capacitor/core@6.2.0)': + dependencies: + '@capacitor/core': 6.2.0 + + '@capacitor/app@6.0.2(@capacitor/core@6.2.0)': + dependencies: + '@capacitor/core': 6.2.0 + + '@capacitor/cli@6.2.0': + dependencies: + '@ionic/cli-framework-output': 2.2.8 + '@ionic/utils-fs': 3.1.7 + '@ionic/utils-subprocess': 2.1.11 + '@ionic/utils-terminal': 2.3.5 + commander: 9.5.0 + debug: 4.3.7 + env-paths: 2.2.1 + kleur: 4.1.5 + native-run: 2.0.1 + open: 8.4.2 + plist: 3.1.0 + prompts: 2.4.2 + rimraf: 4.4.1 + semver: 7.6.3 + tar: 6.2.1 + tslib: 2.8.1 + xml2js: 0.5.0 + transitivePeerDependencies: + - supports-color + + '@capacitor/core@6.2.0': + dependencies: + tslib: 2.8.1 + + '@capacitor/ios@6.2.0(@capacitor/core@6.2.0)': + dependencies: + '@capacitor/core': 6.2.0 + '@cfcs/core@0.0.6': dependencies: '@egjs/component': 3.0.5 @@ -13373,6 +13569,105 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@ionic/cli-framework-output@2.2.8': + dependencies: + '@ionic/utils-terminal': 2.3.5 + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-array@2.1.5': + dependencies: + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-fs@3.1.6': + dependencies: + '@types/fs-extra': 8.1.5 + debug: 4.3.7 + fs-extra: 9.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-fs@3.1.7': + dependencies: + '@types/fs-extra': 8.1.5 + debug: 4.3.7 + fs-extra: 9.1.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-object@2.1.5': + dependencies: + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-process@2.1.10': + dependencies: + '@ionic/utils-object': 2.1.5 + '@ionic/utils-terminal': 2.3.3 + debug: 4.3.7 + signal-exit: 3.0.7 + tree-kill: 1.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-stream@3.1.5': + dependencies: + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-subprocess@2.1.11': + dependencies: + '@ionic/utils-array': 2.1.5 + '@ionic/utils-fs': 3.1.6 + '@ionic/utils-process': 2.1.10 + '@ionic/utils-stream': 3.1.5 + '@ionic/utils-terminal': 2.3.3 + cross-spawn: 7.0.6 + debug: 4.3.7 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-terminal@2.3.3': + dependencies: + '@types/slice-ansi': 4.0.0 + debug: 4.3.7 + signal-exit: 3.0.7 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tslib: 2.8.1 + untildify: 4.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - supports-color + + '@ionic/utils-terminal@2.3.5': + dependencies: + '@types/slice-ansi': 4.0.0 + debug: 4.3.7 + signal-exit: 3.0.7 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tslib: 2.8.1 + untildify: 4.0.0 + wrap-ansi: 7.0.0 + transitivePeerDependencies: + - supports-color + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -15152,6 +15447,10 @@ snapshots: '@types/estree@1.0.6': {} + '@types/fs-extra@8.1.5': + dependencies: + '@types/node': 22.10.0 + '@types/fs-extra@9.0.13': dependencies: '@types/node': 22.10.0 @@ -15246,6 +15545,8 @@ snapshots: '@types/shimmer@1.2.0': {} + '@types/slice-ansi@4.0.0': {} + '@types/tar@6.1.13': dependencies: '@types/node': 22.10.0 @@ -15813,8 +16114,7 @@ snapshots: '@babel/parser': 7.26.2 pathe: 1.1.2 - astral-regex@2.0.0: - optional: true + astral-regex@2.0.0: {} async-es@3.2.6: {} @@ -15932,6 +16232,8 @@ snapshots: before-after-hook@2.2.3: {} + big-integer@1.6.52: {} + binary-extensions@2.3.0: {} bindings@1.5.0: @@ -15975,6 +16277,10 @@ snapshots: stream-buffers: 2.2.0 optional: true + bplist-parser@0.3.2: + dependencies: + big-integer: 1.6.52 + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 @@ -16893,6 +17199,8 @@ snapshots: es-errors: 1.3.0 gopd: 1.0.1 + define-lazy-prop@2.0.0: {} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 @@ -17208,6 +17516,10 @@ snapshots: transitivePeerDependencies: - supports-color + elementtree@0.1.7: + dependencies: + sax: 1.1.4 + elliptic@6.5.7: dependencies: bn.js: 4.12.0 @@ -18970,6 +19282,8 @@ snapshots: ini@1.3.8: {} + ini@4.1.3: {} + inline-style-parser@0.2.4: {} internal-slot@1.0.7: @@ -19046,6 +19360,8 @@ snapshots: is-decimal@2.0.1: {} + is-docker@2.2.1: {} + is-extglob@2.1.1: {} is-finalizationregistry@1.1.0: @@ -19171,6 +19487,10 @@ snapshots: is-windows@1.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + isbinaryfile@4.0.10: {} isbinaryfile@5.0.4: {} @@ -19325,6 +19645,8 @@ snapshots: dependencies: json-buffer: 3.0.1 + kleur@3.0.3: {} + kleur@4.1.5: {} kolorist@1.8.0: {} @@ -20212,6 +20534,22 @@ snapshots: napi-build-utils@1.0.2: {} + native-run@2.0.1: + dependencies: + '@ionic/utils-fs': 3.1.7 + '@ionic/utils-terminal': 2.3.5 + bplist-parser: 0.3.2 + debug: 4.3.7 + elementtree: 0.1.7 + ini: 4.1.3 + plist: 3.1.0 + split2: 4.2.0 + through2: 4.0.2 + tslib: 2.8.1 + yauzl: 2.10.0 + transitivePeerDependencies: + - supports-color + natural-compare@1.4.0: {} nbump@2.0.7(conventional-commits-filter@5.0.0): @@ -20399,6 +20737,12 @@ snapshots: regex: 5.0.2 regex-recursion: 4.2.1 + open@8.4.2: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -20993,6 +21337,11 @@ snapshots: err-code: 2.0.3 retry: 0.12.0 + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -21566,6 +21915,10 @@ snapshots: dependencies: glob: 7.2.3 + rimraf@4.4.1: + dependencies: + glob: 9.3.5 + rimraf@5.0.10: dependencies: glob: 10.4.5 @@ -21665,6 +22018,8 @@ snapshots: postcss-value-parser: 4.2.0 yoga-wasm-web: 0.3.3 + sax@1.1.4: {} + sax@1.4.1: {} scheduler@0.23.2: @@ -21838,6 +22193,12 @@ snapshots: is-fullwidth-code-point: 3.0.0 optional: true + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 @@ -22267,6 +22628,10 @@ snapshots: dependencies: real-require: 0.2.0 + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + through@2.3.8: {} time-span@4.0.0: @@ -22700,6 +23065,8 @@ snapshots: optionalDependencies: webpack-sources: 3.2.3 + untildify@4.0.0: {} + unused-filename@4.0.1: dependencies: escape-string-regexp: 5.0.0 @@ -23174,6 +23541,13 @@ snapshots: bufferutil: 4.0.8 utf-8-validate: 6.0.4 + xml2js@0.5.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + xmlbuilder@15.1.1: {} xss@1.0.15: