diff --git a/package.json b/package.json index 96e043e..f42c4e5 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "vitest": "^1.2.1" }, "dependencies": { + "firebase": "^10.12.3", "solid-js": "^1.8.11" }, "packageManager": "pnpm@9.1.4+sha512.9df9cf27c91715646c7d675d1c9c8e41f6fce88246f1318c1aa6a1ed1aeb3c4f032fcdf4ba63cc69c4fe6d634279176b5358727d8f2cc1e65b65f43ce2f8bfb0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7e9b05b..de83d96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + firebase: + specifier: ^10.12.3 + version: 10.12.3 solid-js: specifier: ^1.8.11 version: 1.8.11 @@ -447,6 +450,208 @@ packages: cpu: [x64] os: [win32] + '@fastify/busboy@2.1.1': + resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} + engines: {node: '>=14'} + + '@firebase/analytics-compat@0.2.11': + resolution: {integrity: sha512-wmXxJ49pEY7H549Pa4CDPOTzkPJnfG2Yolptg72ntTgSrbKVq+Eg9cAQY6Z5Kn9ATSQRX5oGXKlNfEk5DJBvvA==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/analytics-types@0.8.2': + resolution: {integrity: sha512-EnzNNLh+9/sJsimsA/FGqzakmrAUKLeJvjRHlg8df1f97NLUlFidk9600y0ZgWOp3CAxn6Hjtk+08tixlUOWyw==} + + '@firebase/analytics@0.10.5': + resolution: {integrity: sha512-d0X2ksTOKHMf5zFAMKFZWXa8hSbgohsG507xFsGhF4Uet2b8uEUL/YLrEth67jXEbGEi1UQZX4AaGBxKNiDzjw==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-check-compat@0.3.12': + resolution: {integrity: sha512-p/5w3pMih3JVT6u7g04KXgSZr6HDsQXyeWZkIe0+r71dPOlcKyUooe9/feTc8BWpjha3rUOkqQ7+JXZObwvYoQ==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/app-check-interop-types@0.3.2': + resolution: {integrity: sha512-LMs47Vinv2HBMZi49C09dJxp0QT5LwDzFaVGf/+ITHe3BlIhUiLNttkATSXplc89A2lAaeTqjgqVkiRfUGyQiQ==} + + '@firebase/app-check-types@0.5.2': + resolution: {integrity: sha512-FSOEzTzL5bLUbD2co3Zut46iyPWML6xc4x+78TeaXMSuJap5QObfb+rVvZJtla3asN4RwU7elaQaduP+HFizDA==} + + '@firebase/app-check@0.8.5': + resolution: {integrity: sha512-WyIckkVYAfnzsPIw6EAt/qBUANkUAVl6irF0xuJ1R9ISNyUT1h7dPAwvs/g3rsx0fpBWaHRAH0IFiN6zO6yLqQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/app-compat@0.2.36': + resolution: {integrity: sha512-qsf+pllpgy1IGe2f5vfenOHSX8Cs58sVR5L6h/zBlNy9Yo54B2jy61KxLpSOgyRZb18IlnLLGjo7VtGU1CHvHA==} + + '@firebase/app-types@0.9.2': + resolution: {integrity: sha512-oMEZ1TDlBz479lmABwWsWjzHwheQKiAgnuKxE0pz0IXCVx7/rtlkx1fQ6GfgK24WCrxDKMplZrT50Kh04iMbXQ==} + + '@firebase/app@0.10.6': + resolution: {integrity: sha512-/r8Ikp7TOrIIdp7v2adD2kg9SqIXMGOoJXJB1HsX7LjpjWdsoy1fMkP0HlI7GQqqRxDueHNhETx5Zn5E8HyVAQ==} + + '@firebase/auth-compat@0.5.10': + resolution: {integrity: sha512-epDhgNIXmhl9DPuTW9Ec5NDJJKMFIdXBXiQI9O0xNHveow/ETtBCY86srzF7iCacqsd30CcpLwwXlhk8Y19Olg==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/auth-interop-types@0.2.3': + resolution: {integrity: sha512-Fc9wuJGgxoxQeavybiuwgyi+0rssr76b+nHpj+eGhXFYAdudMWyfBHvFL/I5fEHniUM/UQdFzi9VXJK2iZF7FQ==} + + '@firebase/auth-types@0.12.2': + resolution: {integrity: sha512-qsEBaRMoGvHO10unlDJhaKSuPn4pyoTtlQuP1ghZfzB6rNQPuhp/N/DcFZxm9i4v0SogjCbf9reWupwIvfmH6w==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/auth@1.7.5': + resolution: {integrity: sha512-DMFR1OA/f1/voeuFbSORg9AP36pMgOoSb/DRgiDalLmIJsDTlQNMCu+givjMP4s/XL85+tBk2MerYnK/AscJjw==} + peerDependencies: + '@firebase/app': 0.x + '@react-native-async-storage/async-storage': ^1.18.1 + peerDependenciesMeta: + '@react-native-async-storage/async-storage': + optional: true + + '@firebase/component@0.6.8': + resolution: {integrity: sha512-LcNvxGLLGjBwB0dJUsBGCej2fqAepWyBubs4jt1Tiuns7QLbXHuyObZ4aMeBjZjWx4m8g1LoVI9QFpSaq/k4/g==} + + '@firebase/database-compat@1.0.6': + resolution: {integrity: sha512-1OGA0sLY47mkXjhICCrUTXEYFnSSXoiXWm1SHsN62b+Lzs5aKA3aWTjTUmYIoK93kDAMPkYpulSv8jcbH4Hwew==} + + '@firebase/database-types@1.0.4': + resolution: {integrity: sha512-mz9ZzbH6euFXbcBo+enuJ36I5dR5w+enJHHjy9Y5ThCdKUseqfDjW3vCp1YxE9zygFCSjJJ/z1cQ+zodvUcwPQ==} + + '@firebase/database@1.0.6': + resolution: {integrity: sha512-nrexUEG/fpVlHtWKkyfhTC3834kZ1WS7voNyqbBsBCqHXQOvznN5Z0L3nxBqdXSJyltNAf4ndFlQqm5gZiEczQ==} + + '@firebase/firestore-compat@0.3.33': + resolution: {integrity: sha512-i42a2l31N95CwYEB7zmfK0FS1mrO6pwOLwxavCrwu1BCFrVVVQhUheTPIda/iGguK/2Nog0RaIR1bo7QkZEz3g==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/firestore-types@3.0.2': + resolution: {integrity: sha512-wp1A+t5rI2Qc/2q7r2ZpjUXkRVPtGMd6zCLsiWurjsQpqPgFin3AhNibKcIzoF2rnToNa/XYtyWXuifjOOwDgg==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/firestore@4.6.4': + resolution: {integrity: sha512-vk2MoH5HxYEhiNg1l+yBXq1Fkhue/11bFg4HdlTv6BJHcTnnAj2a+/afPpatcW4MOdYA3Tv+d5nGzWbbOC1SHw==} + engines: {node: '>=10.10.0'} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/functions-compat@0.3.12': + resolution: {integrity: sha512-r3XUb5VlITWpML46JymfJPkK6I9j4SNlO7qWIXUc0TUmkv0oAfVoiIt1F83/NuMZXaGr4YWA/794nVSy4GV8tw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/functions-types@0.6.2': + resolution: {integrity: sha512-0KiJ9lZ28nS2iJJvimpY4nNccV21rkQyor5Iheu/nq8aKXJqtJdeSlZDspjPSBBiHRzo7/GMUttegnsEITqR+w==} + + '@firebase/functions@0.11.6': + resolution: {integrity: sha512-GPfIBPtpwQvsC7SQbgaUjLTdja0CsNwMoKSgrzA1FGGRk4NX6qO7VQU6XCwBiAFWbpbQex6QWkSMsCzLx1uibQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/installations-compat@0.2.8': + resolution: {integrity: sha512-pI2q8JFHB7yIq/szmhzGSWXtOvtzl6tCUmyykv5C8vvfOVJUH6mP4M4iwjbK8S1JotKd/K70+JWyYlxgQ0Kpyw==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/installations-types@0.5.2': + resolution: {integrity: sha512-que84TqGRZJpJKHBlF2pkvc1YcXrtEDOVGiDjovP/a3s6W4nlbohGXEsBJo0JCeeg/UG9A+DEZVDUV9GpklUzA==} + peerDependencies: + '@firebase/app-types': 0.x + + '@firebase/installations@0.6.8': + resolution: {integrity: sha512-57V374qdb2+wT5v7+ntpLXBjZkO6WRgmAUbVkRfFTM/4t980p0FesbqTAcOIiM8U866UeuuuF8lYH70D3jM/jQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/logger@0.4.2': + resolution: {integrity: sha512-Q1VuA5M1Gjqrwom6I6NUU4lQXdo9IAQieXlujeHZWvRt1b7qQ0KwBaNAjgxG27jgF9/mUwsNmO8ptBCGVYhB0A==} + + '@firebase/messaging-compat@0.2.10': + resolution: {integrity: sha512-FXQm7rcowkDm8kFLduHV35IRYCRo+Ng0PIp/t1+EBuEbyplaKkGjZ932pE+owf/XR+G/60ku2QRBptRGLXZydg==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/messaging-interop-types@0.2.2': + resolution: {integrity: sha512-l68HXbuD2PPzDUOFb3aG+nZj5KA3INcPwlocwLZOzPp9rFM9yeuI9YLl6DQfguTX5eAGxO0doTR+rDLDvQb5tA==} + + '@firebase/messaging@0.12.10': + resolution: {integrity: sha512-fGbxJPKpl2DIKNJGhbk4mYPcM+qE2gl91r6xPoiol/mN88F5Ym6UeRdMVZah+pijh9WxM55alTYwXuW40r1Y2Q==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/performance-compat@0.2.8': + resolution: {integrity: sha512-o7TFClRVJd3VIBoY7KZQqtCeW0PC6v9uBzM6Lfw3Nc9D7hM6OonqecYvh7NwJ6R14k+xM27frLS4BcCvFHKw2A==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/performance-types@0.2.2': + resolution: {integrity: sha512-gVq0/lAClVH5STrIdKnHnCo2UcPLjJlDUoEB/tB4KM+hAeHUxWKnpT0nemUPvxZ5nbdY/pybeyMe8Cs29gEcHA==} + + '@firebase/performance@0.6.8': + resolution: {integrity: sha512-F+alziiIZ6Yn8FG47mxwljq+4XkgkT2uJIFRlkyViUQRLzrogaUJW6u/+6ZrePXnouKlKIwzqos3PVJraPEcCA==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/remote-config-compat@0.2.8': + resolution: {integrity: sha512-UxSFOp6dzFj2AHB8Bq/BYtbq5iFyizKx4Rd6WxAdaKYM8cnPMeK+l2v+Oogtjae+AeyHRI+MfL2acsfVe5cd2A==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/remote-config-types@0.3.2': + resolution: {integrity: sha512-0BC4+Ud7y2aPTyhXJTMTFfrGGLqdYXrUB9sJVAB8NiqJswDTc4/2qrE/yfUbnQJhbSi6ZaTTBKyG3n1nplssaA==} + + '@firebase/remote-config@0.4.8': + resolution: {integrity: sha512-AMLqe6wfIRnjc6FkCWOSUjhc1fSTEf8o+cv1NolFvbiJ/tU+TqN4pI7pT+MIKQzNiq5fxLehkOx+xtAQBxPJKQ==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/storage-compat@0.3.9': + resolution: {integrity: sha512-WWgAp5bTW961oIsCc9+98m4MIVKpEqztAlIngfHfwO/x3DYoBPRl/awMRG3CAXyVxG+7B7oHC5IsnqM+vTwx2A==} + peerDependencies: + '@firebase/app-compat': 0.x + + '@firebase/storage-types@0.8.2': + resolution: {integrity: sha512-0vWu99rdey0g53lA7IShoA2Lol1jfnPovzLDUBuon65K7uKG9G+L5uO05brD9pMw+l4HRFw23ah3GwTGpEav6g==} + peerDependencies: + '@firebase/app-types': 0.x + '@firebase/util': 1.x + + '@firebase/storage@0.12.6': + resolution: {integrity: sha512-Zgb9WuehJxzhj7pGXUvkAEaH+3HvLjD9xSZ9nepuXf5f8378xME7oGJtREr/RnepdDA5YW0XIxe0QQBNHpe1nw==} + peerDependencies: + '@firebase/app': 0.x + + '@firebase/util@1.9.7': + resolution: {integrity: sha512-fBVNH/8bRbYjqlbIhZ+lBtdAAS4WqZumx03K06/u7fJSpz1TGjEMm1ImvKD47w+xaFKIP2ori6z8BrbakRfjJA==} + + '@firebase/vertexai-preview@0.0.3': + resolution: {integrity: sha512-KVtUWLp+ScgiwkDKAvNkVucAyhLVQp6C6lhnVEuIg4mWhWcS3oerjAeVhZT4uNofKwWxRsOaB2Yec7DMTXlQPQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@firebase/app': 0.x + '@firebase/app-types': 0.x + + '@firebase/webchannel-wrapper@1.0.1': + resolution: {integrity: sha512-jmEnr/pk0yVkA7mIlHNnxCi+wWzOFUg0WyIotgkKAb2u1J7fAeDBcVNSTjTihbAYNusCLQdW5s9IJ5qwnEufcQ==} + + '@grpc/grpc-js@1.9.15': + resolution: {integrity: sha512-nqE7Hc0AzI+euzUwDAy0aY5hCp10r734gMGRdU+qOPX0XSceI2ULrcXB5U2xSc5VkWwalCj4M7GzCAygZl2KoQ==} + engines: {node: ^8.13.0 || >=10.10.0} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -507,6 +712,36 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + '@rollup/rollup-android-arm-eabi@4.9.5': resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==} cpu: [arm] @@ -905,6 +1140,10 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} @@ -1064,10 +1303,17 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + firebase@10.12.3: + resolution: {integrity: sha512-dO2cQ8eP6RnM2wcGzbxnoljjjMBf1suUrHYFftjSpbPn/8bEx959cwTRDHqBx3MwSzNsg6zZV/wiWydJPhUKgw==} + for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -1100,6 +1346,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -1169,6 +1419,9 @@ packages: html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} @@ -1185,6 +1438,9 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + idb@7.1.1: + resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} + indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} @@ -1358,9 +1614,15 @@ packages: resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} engines: {node: '>=14'} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + loupe@2.3.6: resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} deprecated: Please upgrade to 2.3.7 which fixes GHSA-4q6p-r6v2-jvc5 @@ -1588,6 +1850,10 @@ packages: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + protobufjs@7.3.2: + resolution: {integrity: sha512-RXyHaACeqXeqAKGLDl68rQKbmObRsTIn4TYVUUug1KfS47YWCo5MacGITEryugIgZqORCvJWEk4l449POg5Txg==} + engines: {node: '>=12.0.0'} + psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} @@ -1629,6 +1895,10 @@ packages: resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} engines: {node: '>= 0.4'} + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -1655,6 +1925,9 @@ packages: run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -1829,6 +2102,9 @@ packages: ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + tslib@2.6.3: + resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -1841,6 +2117,10 @@ packages: ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + undici@5.28.4: + resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} + engines: {node: '>=14.0'} + universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -1946,6 +2226,14 @@ packages: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} @@ -2005,6 +2293,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -2013,6 +2305,14 @@ packages: engines: {node: '>= 14'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} @@ -2372,6 +2672,333 @@ snapshots: '@esbuild/win32-x64@0.19.11': optional: true + '@fastify/busboy@2.1.1': {} + + '@firebase/analytics-compat@0.2.11(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/analytics': 0.10.5(@firebase/app@0.10.6) + '@firebase/analytics-types': 0.8.2 + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/analytics-types@0.8.2': {} + + '@firebase/analytics@0.10.5(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/app-check-compat@0.3.12(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-check': 0.8.5(@firebase/app@0.10.6) + '@firebase/app-check-types': 0.5.2 + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/app-check-interop-types@0.3.2': {} + + '@firebase/app-check-types@0.5.2': {} + + '@firebase/app-check@0.8.5(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/app-compat@0.2.36': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/app-types@0.9.2': {} + + '@firebase/app@0.10.6': + dependencies: + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + idb: 7.1.1 + tslib: 2.6.3 + + '@firebase/auth-compat@0.5.10(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/auth': 1.7.5(@firebase/app@0.10.6) + '@firebase/auth-types': 0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7) + '@firebase/component': 0.6.8 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + undici: 5.28.4 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + - '@react-native-async-storage/async-storage' + + '@firebase/auth-interop-types@0.2.3': {} + + '@firebase/auth-types@0.12.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.9.7 + + '@firebase/auth@1.7.5(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + undici: 5.28.4 + + '@firebase/component@0.6.8': + dependencies: + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/database-compat@1.0.6': + dependencies: + '@firebase/component': 0.6.8 + '@firebase/database': 1.0.6 + '@firebase/database-types': 1.0.4 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/database-types@1.0.4': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.9.7 + + '@firebase/database@1.0.6': + dependencies: + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/auth-interop-types': 0.2.3 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + faye-websocket: 0.11.4 + tslib: 2.6.3 + + '@firebase/firestore-compat@0.3.33(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/firestore': 4.6.4(@firebase/app@0.10.6) + '@firebase/firestore-types': 3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7) + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + + '@firebase/firestore-types@3.0.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.9.7 + + '@firebase/firestore@4.6.4(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + '@firebase/webchannel-wrapper': 1.0.1 + '@grpc/grpc-js': 1.9.15 + '@grpc/proto-loader': 0.7.13 + tslib: 2.6.3 + undici: 5.28.4 + + '@firebase/functions-compat@0.3.12(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/functions': 0.11.6(@firebase/app@0.10.6) + '@firebase/functions-types': 0.6.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/functions-types@0.6.2': {} + + '@firebase/functions@0.11.6(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/auth-interop-types': 0.2.3 + '@firebase/component': 0.6.8 + '@firebase/messaging-interop-types': 0.2.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + undici: 5.28.4 + + '@firebase/installations-compat@0.2.8(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/installations-types': 0.5.2(@firebase/app-types@0.9.2) + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + + '@firebase/installations-types@0.5.2(@firebase/app-types@0.9.2)': + dependencies: + '@firebase/app-types': 0.9.2 + + '@firebase/installations@0.6.8(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/util': 1.9.7 + idb: 7.1.1 + tslib: 2.6.3 + + '@firebase/logger@0.4.2': + dependencies: + tslib: 2.6.3 + + '@firebase/messaging-compat@0.2.10(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/messaging': 0.12.10(@firebase/app@0.10.6) + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/messaging-interop-types@0.2.2': {} + + '@firebase/messaging@0.12.10(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/messaging-interop-types': 0.2.2 + '@firebase/util': 1.9.7 + idb: 7.1.1 + tslib: 2.6.3 + + '@firebase/performance-compat@0.2.8(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/performance': 0.6.8(@firebase/app@0.10.6) + '@firebase/performance-types': 0.2.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/performance-types@0.2.2': {} + + '@firebase/performance@0.6.8(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/remote-config-compat@0.2.8(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/remote-config': 0.4.8(@firebase/app@0.10.6) + '@firebase/remote-config-types': 0.3.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + + '@firebase/remote-config-types@0.3.2': {} + + '@firebase/remote-config@0.4.8(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/storage-compat@0.3.9(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app-compat': 0.2.36 + '@firebase/component': 0.6.8 + '@firebase/storage': 0.12.6(@firebase/app@0.10.6) + '@firebase/storage-types': 0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7) + '@firebase/util': 1.9.7 + tslib: 2.6.3 + transitivePeerDependencies: + - '@firebase/app' + - '@firebase/app-types' + + '@firebase/storage-types@0.8.2(@firebase/app-types@0.9.2)(@firebase/util@1.9.7)': + dependencies: + '@firebase/app-types': 0.9.2 + '@firebase/util': 1.9.7 + + '@firebase/storage@0.12.6(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/component': 0.6.8 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + undici: 5.28.4 + + '@firebase/util@1.9.7': + dependencies: + tslib: 2.6.3 + + '@firebase/vertexai-preview@0.0.3(@firebase/app-types@0.9.2)(@firebase/app@0.10.6)': + dependencies: + '@firebase/app': 0.10.6 + '@firebase/app-check-interop-types': 0.3.2 + '@firebase/app-types': 0.9.2 + '@firebase/component': 0.6.8 + '@firebase/logger': 0.4.2 + '@firebase/util': 1.9.7 + tslib: 2.6.3 + + '@firebase/webchannel-wrapper@1.0.1': {} + + '@grpc/grpc-js@1.9.15': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@types/node': 20.3.1 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.2.3 + protobufjs: 7.3.2 + yargs: 17.7.2 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -2438,6 +3065,29 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + '@rollup/rollup-android-arm-eabi@4.9.5': optional: true @@ -2868,6 +3518,12 @@ snapshots: ci-info@3.8.0: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + color-convert@1.9.3: dependencies: color-name: 1.1.3 @@ -3057,10 +3713,46 @@ snapshots: dependencies: reusify: 1.0.4 + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 + firebase@10.12.3: + dependencies: + '@firebase/analytics': 0.10.5(@firebase/app@0.10.6) + '@firebase/analytics-compat': 0.2.11(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/app': 0.10.6 + '@firebase/app-check': 0.8.5(@firebase/app@0.10.6) + '@firebase/app-check-compat': 0.3.12(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/app-compat': 0.2.36 + '@firebase/app-types': 0.9.2 + '@firebase/auth': 1.7.5(@firebase/app@0.10.6) + '@firebase/auth-compat': 0.5.10(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6) + '@firebase/database': 1.0.6 + '@firebase/database-compat': 1.0.6 + '@firebase/firestore': 4.6.4(@firebase/app@0.10.6) + '@firebase/firestore-compat': 0.3.33(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6) + '@firebase/functions': 0.11.6(@firebase/app@0.10.6) + '@firebase/functions-compat': 0.3.12(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/installations': 0.6.8(@firebase/app@0.10.6) + '@firebase/installations-compat': 0.2.8(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6) + '@firebase/messaging': 0.12.10(@firebase/app@0.10.6) + '@firebase/messaging-compat': 0.2.10(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/performance': 0.6.8(@firebase/app@0.10.6) + '@firebase/performance-compat': 0.2.8(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/remote-config': 0.4.8(@firebase/app@0.10.6) + '@firebase/remote-config-compat': 0.2.8(@firebase/app-compat@0.2.36)(@firebase/app@0.10.6) + '@firebase/storage': 0.12.6(@firebase/app@0.10.6) + '@firebase/storage-compat': 0.3.9(@firebase/app-compat@0.2.36)(@firebase/app-types@0.9.2)(@firebase/app@0.10.6) + '@firebase/util': 1.9.7 + '@firebase/vertexai-preview': 0.0.3(@firebase/app-types@0.9.2)(@firebase/app@0.10.6) + transitivePeerDependencies: + - '@react-native-async-storage/async-storage' + for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -3089,6 +3781,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + get-func-name@2.0.2: {} get-intrinsic@1.2.0: @@ -3154,6 +3848,8 @@ snapshots: html-entities@2.3.3: {} + http-parser-js@0.5.8: {} + http-proxy-agent@7.0.0: dependencies: agent-base: 7.1.0 @@ -3174,6 +3870,8 @@ snapshots: dependencies: safer-buffer: 2.1.2 + idb@7.1.1: {} + indent-string@4.0.0: {} internal-slot@1.0.4: @@ -3368,8 +4066,12 @@ snapshots: mlly: 1.5.0 pkg-types: 1.0.3 + lodash.camelcase@4.3.0: {} + lodash@4.17.21: {} + long@5.2.3: {} + loupe@2.3.6: dependencies: get-func-name: 2.0.2 @@ -3570,6 +4272,21 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.2.0 + protobufjs@7.3.2: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.3.1 + long: 5.2.3 + psl@1.9.0: {} punycode@2.3.0: {} @@ -3605,6 +4322,8 @@ snapshots: define-properties: 1.1.4 functions-have-names: 1.2.3 + require-directory@2.1.1: {} + require-from-string@2.0.2: {} requires-port@1.0.0: {} @@ -3642,6 +4361,8 @@ snapshots: dependencies: queue-microtask: 1.2.3 + safe-buffer@5.2.1: {} + safer-buffer@2.1.2: {} saxes@6.0.0: @@ -3828,12 +4549,18 @@ snapshots: ts-interface-checker@0.1.13: {} + tslib@2.6.3: {} + type-detect@4.0.8: {} typescript@5.3.3: {} ufo@1.3.2: {} + undici@5.28.4: + dependencies: + '@fastify/busboy': 2.1.1 + universalify@0.2.0: {} update-browserslist-db@1.0.13(browserslist@4.22.2): @@ -3942,6 +4669,14 @@ snapshots: webidl-conversions@7.0.0: {} + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.8 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + whatwg-encoding@3.1.1: dependencies: iconv-lite: 0.6.3 @@ -4004,8 +4739,22 @@ snapshots: xmlchars@2.2.0: {} + y18n@5.0.8: {} + yallist@3.1.1: {} yaml@2.4.5: {} + yargs-parser@21.1.1: {} + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.1.2 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@1.0.0: {} diff --git a/src/app.tsx b/src/app.tsx new file mode 100644 index 0000000..9210d1d --- /dev/null +++ b/src/app.tsx @@ -0,0 +1,10 @@ +import { getFirebaseApp } from "./firebase/init"; +import { setEvent, initAnalytics } from "./firebase/analytics"; + +export const App = () => { + const app = getFirebaseApp(); + setEvent(initAnalytics(app), { + name: "init_app", + }); + return
Hello, World!
; +}; diff --git a/src/firebase/analytics.ts b/src/firebase/analytics.ts new file mode 100644 index 0000000..f660943 --- /dev/null +++ b/src/firebase/analytics.ts @@ -0,0 +1,91 @@ +import { getAnalytics, logEvent } from "firebase/analytics"; +import type { FirebaseApp } from "firebase/app"; +import type { + Analytics, + EventParams, + AnalyticsCallOptions, +} from "firebase/analytics"; + +export function initAnalytics(app: FirebaseApp) { + return getAnalytics(app); +} + +export function setEvent(analytics: Analytics, event: Event) { + // Log the event + logEvent(analytics, event.name, event.params, event.options); +} + +// Google Analytics 4 event parameters +// Ref > https://developers.google.com/analytics/devguides/collection/ga4/reference/events?hl=ja&client_type=gtag +// add_payment_info ユーザーが支払情報を送信したことを示す +// add_shipping_info ユーザーが配送情報を送信したことを示す +// add_to_cart カートに商品が追加されたことを示す +// add_to_wishlist ウィッシュリストに商品が追加されたことを示す +// begin_checkout ユーザーが購入手続きを開始したことを示す +// earn_virtual_currency ユーザーが仮想通貨を獲得したことを示す +// generate_lead ユーザーがリードを生成したことを示す +// join_group ユーザーがグループに参加したことを示す +// level_end ユーザーがレベルを終了したことを示す +// level_start ユーザーがレベルを開始したことを示す +// level_up ユーザーがレベルアップしたことを示す +// login ユーザーがログインしたことを示す +// post_score ユーザーがスコアを投稿したことを示す +// purchase ユーザーが購入したことを示す +// refund 購入が返金されたことを示す +// remove_from_cart カートから商品が削除されたこを示す +// search ユーザーが検索を実行したことを示す +// select_content ユーザーがコンテンツを選択したことを示す +// select_item ユーザーがアイテムを選択したことを示す +// select_promotion ユーザーがプロモーションを選択したことを示す +// share ユーザーがコンテンツを共有したことを示す +// sign_up ユーザーがサインアップしたことを示す +// spend_virtual_currency ユーザーが仮想通貨を使ったことを示す +// tutorial_begin ユーザーがチュートリアルを開始したことを示す +// tutorial_complete ユーザーがチュートリアルを完了したことを示す +// unlock_achievement ユーザーが実績を解除したことを示す +// view_cart ユーザーがカートを表示したことを示す +// view_item ユーザーがアイテムを表示したことを示す +// view_item_list ユーザーがアイテムリストを表示したことを示す +// view_promotion ユーザーがプロモーションを表示したことを示す + +type Event = { + name: AnalyticsEvents; + params?: { + // ref > https://developers.google.com/analytics/devguides/collection/ga4/reference/events?hl=ja&client_type=gtag + affiliation?: EventParams["affiliation"]; + checkout_option?: EventParams["checkout_option"]; + checkout_step?: EventParams["checkout_step"]; + content_type?: EventParams["content_type"]; + coupon?: EventParams["coupon"]; + currency?: EventParams["currency"]; + description?: EventParams["description"]; + event_category?: EventParams["event_category"]; + event_label?: EventParams["event_label"]; + fatal?: EventParams["fatal"]; + firebase_screen_class?: EventParams["firebase_screen_class"]; + firebase_screen?: EventParams["firebase_screen"]; + item_id?: EventParams["item_id"]; + item_list_id?: EventParams["item_list_id"]; + item_list_name?: EventParams["item_list_name"]; + items?: EventParams["items"]; + method?: EventParams["method"]; + number?: EventParams["number"]; + page_location?: EventParams["page_location"]; + page_path?: EventParams["page_path"]; + page_title?: EventParams["page_title"]; + payment_type?: EventParams["payment_type"]; + promotion_id?: EventParams["promotion_id"]; + promotion_name?: EventParams["promotion_name"]; + promotions?: EventParams["promotions"]; + screen_name?: EventParams["screen_name"]; + search_term?: EventParams["search_term"]; + shipping_tier?: EventParams["shipping_tier"]; + shipping?: EventParams["shipping"]; + tax?: EventParams["tax"]; + transaction_id?: EventParams["transaction_id"]; + value?: EventParams["value"]; + }; + options?: AnalyticsCallOptions; +}; + +export type AnalyticsEvents = "init_app"; diff --git a/src/firebase/init.ts b/src/firebase/init.ts new file mode 100644 index 0000000..04d1bfe --- /dev/null +++ b/src/firebase/init.ts @@ -0,0 +1,29 @@ +import { initializeApp, getApps, getApp } from "firebase/app"; +import type { FirebaseOptions, FirebaseApp } from "firebase/app"; +import { e } from "vitest/dist/reporters-rzC174PQ"; + +// Please replace the following with your own Firebase project configuration +const config: FirebaseOptions = { + apiKey: "AIzaSyCufXqBISlE69lDtlBXLpMOhgea6iQiD98", + authDomain: "autonmy-bootcamp.firebaseapp.com", + databaseURL: + "https://autonmy-bootcamp-default-rtdb.asia-southeast1.firebasedatabase.app", + projectId: "autonmy-bootcamp", + storageBucket: "autonmy-bootcamp.appspot.com", + messagingSenderId: "615325021990", + appId: "1:615325021990:web:d1171349f06a5c89f673e7", + measurementId: "G-H9MYV5GXX8", +}; + +// 初期化された FirebaseApp インスタンスを返す +// すでに初期化されている場合はそれを返す +export function getFirebaseApp(): FirebaseApp { + // send the configuration to initializeApp + if (import.meta.env.VITE_ENVIRONMENT === "development") { + console.log("Firebase configuration", config); + } + if (getApps().length === 0) { + return initializeApp(config); + } + return getApp(); +} diff --git a/src/index.tsx b/src/index.tsx index ccd02e1..94527c0 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,7 +1,5 @@ import { render } from "solid-js/web"; - -import { TodoList } from "./todo-list"; - +import { App } from "./app"; import "./index.css"; const root = document.getElementById("root"); @@ -12,4 +10,8 @@ if (import.meta.env.DEV && !(root instanceof HTMLElement)) { ); } -render(() => , root!); +if (!root) { + throw new Error("Root element not found."); +} + +render(() => , root);