From 3a865eb7cfee58309fa0ea0019d88fafc25f7c07 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 13:26:53 +0300 Subject: [PATCH 01/14] Added bugsnag sourcemap uploader --- .idea/workspace.xml | 187 +++++++------- next.config.js | 12 + package.json | 3 +- src/app/client-providers.tsx | 42 ++-- src/app/providers.tsx | 9 +- src/features/bugsnag.tsx | 19 ++ yarn.lock | 466 ++++++++++++++++++++++++++++++++++- 7 files changed, 605 insertions(+), 133 deletions(-) create mode 100644 src/features/bugsnag.tsx diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7c463cc0e4..de57a1bbdf 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,12 +4,12 @@ - @@ -814,14 +814,15 @@ - - diff --git a/next.config.js b/next.config.js index 3198c35d3b..3f1e67d536 100644 --- a/next.config.js +++ b/next.config.js @@ -2,8 +2,11 @@ const path = require("path"); const withPWA = require("next-pwa")({ dest: "public" }); +const { BugsnagBuildReporterPlugin } = require("webpack-bugsnag-plugins"); +const appPackage = require("./package.json"); const config = { + productionBrowserSourceMaps: true, sassOptions: { includePaths: [path.join(__dirname, "src/styles")] }, @@ -16,6 +19,15 @@ const config = { } }); + if (process.env.NODE_ENV === "production") { + config.module.plugins.push( + new BugsnagBuildReporterPlugin({ + apiKey: "53c03fdd42cd699cb95f60abe77a5b19", + appVersion: appPackage.version + }) + ); + } + return config; }, images: { diff --git a/package.json b/package.json index e60f3a8c50..044f3cf4f3 100644 --- a/package.json +++ b/package.json @@ -113,6 +113,7 @@ "tailwindcss": "^3.3.0", "ts-jest": "^29.1.1", "ts-node": "^10.9.2", - "typescript": "^5" + "typescript": "^5", + "webpack-bugsnag-plugins": "^1.8.0" } } diff --git a/src/app/client-providers.tsx b/src/app/client-providers.tsx index 5b4beb7382..de79a4cbd8 100644 --- a/src/app/client-providers.tsx +++ b/src/app/client-providers.tsx @@ -12,35 +12,23 @@ import { Tracker } from "@/features/monitoring"; import { Announcements } from "@/features/announcement"; import { FloatingFAQ } from "@/features/faq"; import { EcencyConfigManager } from "@/config"; -import Bugsnag from "@bugsnag/js"; -import BugsnagPluginReact from "@bugsnag/plugin-react"; -import BugsnagPerformance from "@bugsnag/browser-performance"; export function ClientProviders(props: PropsWithChildren) { - Bugsnag.start({ - apiKey: "53c03fdd42cd699cb95f60abe77a5b19", - plugins: [new BugsnagPluginReact()] - }); - BugsnagPerformance.start({ apiKey: "53c03fdd42cd699cb95f60abe77a5b19" }); - const ErrorBoundary = Bugsnag.getPlugin("react")!.createErrorBoundary(React); - return ( - - - - - visionFeatures.userActivityTracking.enabled} - > - - - - {props.children} - - - - - - + + + + visionFeatures.userActivityTracking.enabled} + > + + + + {props.children} + + + + + ); } diff --git a/src/app/providers.tsx b/src/app/providers.tsx index 0a971c3b1f..f538784231 100644 --- a/src/app/providers.tsx +++ b/src/app/providers.tsx @@ -1,11 +1,14 @@ import { PropsWithChildren } from "react"; import { PushNotificationsProvider } from "@/features/push-notifications"; import { ClientProviders } from "@/app/client-providers"; +import { BugsnagErrorBoundary } from "@/features/bugsnag"; export default function Providers({ children }: PropsWithChildren) { return ( - - {children} - + + + {children} + + ); } diff --git a/src/features/bugsnag.tsx b/src/features/bugsnag.tsx new file mode 100644 index 0000000000..fb863dd761 --- /dev/null +++ b/src/features/bugsnag.tsx @@ -0,0 +1,19 @@ +import Bugsnag from "@bugsnag/js"; +import BugsnagPluginReact from "@bugsnag/plugin-react"; +import BugsnagPerformance from "@bugsnag/browser-performance"; +import React, { PropsWithChildren } from "react"; + +export function BugsnagErrorBoundary(props: PropsWithChildren) { + if (process.env.NODE_ENV !== "production") { + return <>{props.children}; + } + + Bugsnag.start({ + apiKey: "53c03fdd42cd699cb95f60abe77a5b19", + plugins: [new BugsnagPluginReact()] + }); + BugsnagPerformance.start({ apiKey: "53c03fdd42cd699cb95f60abe77a5b19" }); + const ErrorBoundary = Bugsnag.getPlugin("react")!.createErrorBoundary(React); + + return {props.children}; +} diff --git a/yarn.lock b/yarn.lock index 645a0b4921..6979d40438 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1091,6 +1091,19 @@ resolved "https://registry.yarnpkg.com/@bugsnag/safe-json-stringify/-/safe-json-stringify-6.0.0.tgz#22abdcd83e008c369902976730c34c150148a758" integrity sha512-htzFO1Zc57S8kgdRK9mLcPVTW1BY2ijfH7Dk2CeZmspTWKdKqSo1iwmqrq2WtRjFlo8aRZYgLX0wFrDXF/9DLA== +"@bugsnag/source-maps@^2.0.0": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@bugsnag/source-maps/-/source-maps-2.3.3.tgz#23ffb7f577a93b8b3284c6dcf76c5cbdcb0cc847" + integrity sha512-DCCXhiY1CdCy3Eo6SS/qHnBuyrXY0jyefsJBpXemwI5eXEAR0KrhnhxbGU7Ga/8ysssD1A22J5488BYH1t4pgQ== + dependencies: + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + concat-stream "^2.0.0" + consola "^2.15.0" + form-data "^3.0.0" + glob "^7.1.6" + read-pkg-up "^7.0.1" + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" @@ -2049,6 +2062,11 @@ resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + "@types/node@*": version "20.10.4" resolved "https://registry.yarnpkg.com/@types/node/-/node-20.10.4.tgz#b246fd84d55d5b1b71bf51f964bd514409347198" @@ -2063,6 +2081,11 @@ dependencies: undici-types "~5.26.4" +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + "@types/numeral@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@types/numeral/-/numeral-2.0.5.tgz#388e5c4ff4b0e1787f130753cbbe83d3ba770858" @@ -2431,6 +2454,16 @@ aria-query@5.3.0, aria-query@^5.0.0, aria-query@^5.3.0: dependencies: dequal "^2.0.3" +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -2522,6 +2555,11 @@ arraybuffer.prototype.slice@^1.0.2: is-array-buffer "^3.0.2" is-shared-array-buffer "^1.0.2" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" @@ -2819,6 +2857,19 @@ buffer-xor@^1.0.3: resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== +bugsnag-build-reporter@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bugsnag-build-reporter/-/bugsnag-build-reporter-2.0.0.tgz#da088c673655d544ccbd05c0d0d05c739e896753" + integrity sha512-jeiGdjEWLjKOKWDroMbYf/5wVSqk03uRxtidTBlORK8swpwnX4sMARQsE4xx8D5IkdqMIQkSHHflZ8uIGYL0rA== + dependencies: + chalk "^2.3.0" + concat-stream "^1.6.0" + find-nearest-file "^1.1.0" + meow "^6.1.1" + once "^1.4.0" + pino "^4.10.3" + run-parallel "^1.1.6" + builtin-modules@^3.1.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" @@ -2855,6 +2906,15 @@ camelcase-css@^2.0.1: resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2870,7 +2930,7 @@ caniuse-lite@^1.0.30001538, caniuse-lite@^1.0.30001565, caniuse-lite@^1.0.300015 resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001655.tgz" integrity sha512-jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg== -chalk@^2.4.2: +chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3027,6 +3087,26 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + commander@^2.20.0, commander@^2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -3052,6 +3132,31 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== +concat-stream@^1.6.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +concat-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" + integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.0.2" + typedarray "^0.0.6" + +consola@^2.15.0: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + convert-source-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" @@ -3081,6 +3186,11 @@ core-util-is@1.0.2: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -3259,7 +3369,15 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: dependencies: ms "2.1.2" -decamelize@^1.2.0: +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== @@ -3274,6 +3392,11 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -3949,6 +4072,11 @@ fast-glob@^3.2.9, fast-glob@^3.3.0, fast-glob@^3.3.1: merge2 "^1.3.0" micromatch "^4.0.4" +fast-json-parse@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" + integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3964,6 +4092,11 @@ fast-loops@^1.1.3: resolved "https://registry.yarnpkg.com/fast-loops/-/fast-loops-1.1.3.tgz#ce96adb86d07e7bf9b4822ab9c6fac9964981f75" integrity sha512-8EZzEP0eKkEEVX+drtd9mtuQ+/QrlfW/5MlwcwK5Nds6EkZ/tRzEexkzUY2mIssnAyVLT+TKHuRXmFNNXYUd6g== +fast-safe-stringify@^1.0.8, fast-safe-stringify@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-1.2.3.tgz#9fe22c37fb2f7f86f06b8f004377dbf8f1ee7bc1" + integrity sha512-QJYT/i0QYoiZBQ71ivxdyTqkwKkQ0oxACXHYxH2zYHJEgzi2LsbjgvtzTbLi1SZcF190Db2YP7I7eTsU2egOlw== + fast-shallow-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" @@ -4023,6 +4156,18 @@ find-cache-dir@^3.3.1: make-dir "^3.0.2" pkg-dir "^4.1.0" +find-nearest-file@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/find-nearest-file/-/find-nearest-file-1.1.0.tgz#e29441740329a2015f7655faecd7b85e02cad686" + integrity sha512-NMsS0ITOwpBPrHOyO7YUtDhaVEGUKS0kBJDVaWZPuCzO7JMW+uzFQQVts/gPyIV9ioyNWDb5LjhHWXVf1OnBDA== + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -4048,6 +4193,11 @@ flat-cache@^3.0.4: keyv "^4.5.3" rimraf "^3.0.2" +flatstr@^1.0.5: + version "1.0.12" + resolved "https://registry.yarnpkg.com/flatstr/-/flatstr-1.0.12.tgz#c2ba6a08173edbb6c9640e3055b95e287ceb5931" + integrity sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw== + flatted@^3.2.9: version "3.2.9" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" @@ -4065,6 +4215,15 @@ for-each@^0.3.3: dependencies: is-callable "^1.1.3" +form-data@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" + integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + form-data@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" @@ -4285,6 +4444,11 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -4398,6 +4562,11 @@ hoist-non-react-statics@^3.0.0, hoist-non-react-statics@^3.3.0, hoist-non-react- dependencies: react-is "^16.7.0" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + html-dom-parser@5.0.4: version "5.0.4" resolved "https://registry.yarnpkg.com/html-dom-parser/-/html-dom-parser-5.0.4.tgz#2941a762317d088e747db31c8cf290987ec30a55" @@ -4538,7 +4707,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4: +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4724,6 +4893,11 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + is-potential-custom-element-name@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" @@ -4805,6 +4979,11 @@ isarray@^2.0.5: resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + iserror@0.0.2, iserror@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/iserror/-/iserror-0.0.2.tgz#bd53451fe2f668b9f2402c1966787aaa2c7c0bf5" @@ -5439,6 +5618,11 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + kleur@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" @@ -5551,6 +5735,11 @@ lodash._stringtopath@~4.8.0: dependencies: lodash._basetostring "~4.12.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -5658,6 +5847,16 @@ makeerror@1.0.12: dependencies: tmpl "1.0.5" +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5682,6 +5881,23 @@ memoize-one@^5.1.1: resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.2.1.tgz#8337aa3c4335581839ec01c3d594090cebe8f00e" integrity sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q== +meow@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467" + integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "^4.0.2" + normalize-package-data "^2.5.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.13.1" + yargs-parser "^18.1.3" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -5758,6 +5974,15 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimist-options@^4.0.2: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -5876,6 +6101,16 @@ node-releases@^2.0.14: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -6061,7 +6296,7 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" -parse-json@^5.2.0: +parse-json@^5.0.0, parse-json@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== @@ -6153,6 +6388,25 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== +pino-std-serializers@^2.0.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz#40ead781c65a0ce7ecd9c1c33f409d31fe712315" + integrity sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg== + +pino@^4.10.3: + version "4.17.6" + resolved "https://registry.yarnpkg.com/pino/-/pino-4.17.6.tgz#8c237f3a29f4104f89321c25037deab6a7998fb4" + integrity sha512-LFDwmhyWLBnmwO/2UFbWu1jEGVDzaPupaVdx0XcZ3tIAx1EDEBauzxXf2S0UcFK7oe+X9MApjH0hx9U1XMgfCA== + dependencies: + chalk "^2.4.1" + fast-json-parse "^1.0.3" + fast-safe-stringify "^1.2.3" + flatstr "^1.0.5" + pino-std-serializers "^2.0.0" + pump "^3.0.0" + quick-format-unescaped "^1.1.2" + split2 "^2.2.0" + pirates@^4.0.1, pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" @@ -6265,6 +6519,11 @@ pretty-format@^29.0.0, pretty-format@^29.7.0: ansi-styles "^5.0.0" react-is "^18.0.0" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + process@^0.11.1: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -6361,6 +6620,18 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-format-unescaped@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-1.1.2.tgz#0ca581de3174becef25ac3c2e8956342381db698" + integrity sha512-lli1svZnGwCLiDydlAN2bmSiEeThfI5gnqWsv0cFRiRbzXsRuzoPldK+BY5TM/i+koLoZ8dmZA6uPEBGTpaZqw== + dependencies: + fast-safe-stringify "^1.0.8" + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + raf-schd@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" @@ -6596,7 +6867,39 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -readable-stream@^3.6.0: +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@^2.2.2, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.2, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -6620,6 +6923,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + redux@^4.0.0, redux@^4.0.4: version "4.2.1" resolved "https://registry.yarnpkg.com/redux/-/redux-4.2.1.tgz#c08f4306826c49b5e9dc901dee0452ea8fce6197" @@ -6756,7 +7064,7 @@ resolve.exports@^2.0.0: resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== -resolve@^1.1.7, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: +resolve@^1.1.7, resolve@^1.10.0, resolve@^1.14.2, resolve@^1.19.0, resolve@^1.20.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -6838,7 +7146,14 @@ rtl-css-js@^1.16.1: dependencies: "@babel/runtime" "^7.1.2" -run-parallel@^1.1.9: +run-parallel-limit@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + +run-parallel@^1.1.6, run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== @@ -6860,6 +7175,11 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-regex-test@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" @@ -6939,6 +7259,11 @@ secp256k1@^3.8.0: nan "^2.14.0" safe-buffer "^5.1.2" +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -7091,11 +7416,44 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.20" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz#e44ed19ed318dd1e5888f93325cee800f0f51b89" + integrity sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw== + speakingurl@^14.0.1: version "14.0.1" resolved "https://registry.yarnpkg.com/speakingurl/-/speakingurl-14.0.1.tgz#f37ec8ddc4ab98e9600c1c9ec324a8c48d772a53" integrity sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ== +split2@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -7208,6 +7566,13 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + stringify-object@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" @@ -7326,6 +7691,16 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + tailwindcss@^3.3.0: version "3.3.5" resolved "https://registry.yarnpkg.com/tailwindcss/-/tailwindcss-3.3.5.tgz#22a59e2fbe0ecb6660809d9cc5f3976b077be3b8" @@ -7433,6 +7808,14 @@ throttle-debounce@^3.0.1: resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-3.0.1.tgz#32f94d84dfa894f786c9a1f290e7a645b6a19abb" integrity sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg== +through2@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + tiny-invariant@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.2.0.tgz#a1141f86b672a9148c72e978a19a73b9b94a15a9" @@ -7494,6 +7877,11 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + ts-api-utils@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" @@ -7595,6 +7983,11 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + type-fest@^0.16.0: version "0.16.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860" @@ -7610,6 +8003,16 @@ type-fest@^0.21.3: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + typed-array-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" @@ -7649,11 +8052,26 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + typescript@^5: version "5.3.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.2.tgz#00d1c7c1c46928c5845c1ee8d0cc2791031d4c43" integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -7777,7 +8195,7 @@ use-sync-external-store@1.2.0: resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== -util-deprecate@^1.0.1, util-deprecate@^1.0.2: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== @@ -7808,6 +8226,14 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -7858,6 +8284,15 @@ webidl-conversions@^7.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== +webpack-bugsnag-plugins@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/webpack-bugsnag-plugins/-/webpack-bugsnag-plugins-1.8.0.tgz#463e0c68eba278d40439dc3db3ea766366373a8f" + integrity sha512-ELQGDqs3j4DWw2r5pejtdmFVSo7evamTSqnZhPWWdS0/ix0fWFRCHsDknZ5KkNjKDXN1a9Epgu6RFI7WxofQuw== + dependencies: + "@bugsnag/source-maps" "^2.0.0" + bugsnag-build-reporter "^2.0.0" + run-parallel-limit "^1.0.6" + webpack-sources@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" @@ -7970,6 +8405,14 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workbox-background-sync@6.6.1: version "6.6.1" resolved "https://registry.yarnpkg.com/workbox-background-sync/-/workbox-background-sync-6.6.1.tgz#08d603a33717ce663e718c30cc336f74909aff2f" @@ -8203,6 +8646,11 @@ xss@^1.0.9: commander "^2.20.3" cssfilter "0.0.10" +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + y18n@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" @@ -8228,7 +8676,7 @@ yaml@^2.3.4: resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.3.4.tgz#53fc1d514be80aabf386dc6001eb29bf3b7523b2" integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== -yargs-parser@^18.1.2: +yargs-parser@^18.1.2, yargs-parser@^18.1.3: version "18.1.3" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== From 2f565dca54a6a604f507083ea322442cc66beeae Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 13:44:50 +0300 Subject: [PATCH 02/14] Fixed populating active user data on client init --- .idea/workspace.xml | 26 ++++++++++++-------------- src/app/client-init.tsx | 16 ++++++++++------ src/features/bugsnag.tsx | 5 +++++ 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index de57a1bbdf..4db26f734e 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,11 +5,9 @@ - - - - + + diff --git a/src/app/client-init.tsx b/src/app/client-init.tsx index 88f59b23ba..859a0a4fbe 100644 --- a/src/app/client-init.tsx +++ b/src/app/client-init.tsx @@ -3,23 +3,27 @@ import useMount from "react-use/lib/useMount"; import * as ls from "@/utils/local-storage"; import Cookies from "js-cookie"; import { initI18next } from "@/features/i18n"; -import Bugsnag from "@bugsnag/js"; +import { getAccountFullQuery } from "@/api/queries"; +import { useEffect } from "react"; export function ClientInit() { + const activeUser = useGlobalStore((s) => s.activeUser); const setActiveUser = useGlobalStore((state) => state.setActiveUser); const updateActiveUser = useGlobalStore((state) => state.updateActiveUser); + const { data } = getAccountFullQuery(activeUser?.username).useClientQuery(); + useMount(() => { initI18next(); + }); + useEffect(() => { const activeUsername = ls.get("active_user") ?? Cookies.get("active_user"); - if (activeUsername) { + if (activeUsername && data) { setActiveUser(activeUsername); - updateActiveUser(); + updateActiveUser(data); } - - Bugsnag.setUser(activeUsername); - }); + }, [data]); return <>; } diff --git a/src/features/bugsnag.tsx b/src/features/bugsnag.tsx index fb863dd761..baa02ac71b 100644 --- a/src/features/bugsnag.tsx +++ b/src/features/bugsnag.tsx @@ -2,8 +2,11 @@ import Bugsnag from "@bugsnag/js"; import BugsnagPluginReact from "@bugsnag/plugin-react"; import BugsnagPerformance from "@bugsnag/browser-performance"; import React, { PropsWithChildren } from "react"; +import { useGlobalStore } from "@/core/global-store"; export function BugsnagErrorBoundary(props: PropsWithChildren) { + const activeUser = useGlobalStore((s) => s.activeUser); + if (process.env.NODE_ENV !== "production") { return <>{props.children}; } @@ -15,5 +18,7 @@ export function BugsnagErrorBoundary(props: PropsWithChildren) { BugsnagPerformance.start({ apiKey: "53c03fdd42cd699cb95f60abe77a5b19" }); const ErrorBoundary = Bugsnag.getPlugin("react")!.createErrorBoundary(React); + Bugsnag.setUser(activeUser?.username); + return {props.children}; } From de1e2365282a942b715ee630261196922a78da55 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 14:20:43 +0300 Subject: [PATCH 03/14] Improved voters dialog in proposals --- .idea/workspace.xml | 32 ++++++++-------- .../_components/proposal-votes/index.tsx | 37 ++++++++++++++++--- src/app/proposals/_page.tsx | 24 +++++++----- .../profile-preview-username.tsx | 2 +- src/features/ui/pagination/index.tsx | 3 +- 5 files changed, 65 insertions(+), 33 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4db26f734e..8cd59ccc2a 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,12 @@ - + - - + + + + @@ -795,7 +797,6 @@ - @@ -820,7 +821,8 @@ - diff --git a/src/app/proposals/_components/proposal-votes/index.tsx b/src/app/proposals/_components/proposal-votes/index.tsx index 4e93472e44..cc838b0a7f 100644 --- a/src/app/proposals/_components/proposal-votes/index.tsx +++ b/src/app/proposals/_components/proposal-votes/index.tsx @@ -15,6 +15,8 @@ import { getDynamicPropsQuery, getProposalVotesQuery } from "@/api/queries"; +import { Spinner } from "@ui/spinner"; +import { Pagination } from "@/features/ui"; type SortOption = "reputation" | "hp"; @@ -26,6 +28,7 @@ interface ProposalVotesProps { export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) { const [searchText, setSearchText] = useState(""); const [sort, setSort] = useState("hp"); + const [page, setPage] = useState(1); const { data: dynamicProps } = getDynamicPropsQuery().useClientQuery(); const { data: votes, isFetching } = getProposalVotesQuery( @@ -35,7 +38,8 @@ export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) { ).useClientQuery(); const usernames = useMemo(() => Array.from(new Set(votes?.map((x) => x.voter))), [votes]); - const { data: accounts } = getAccountsQuery(usernames).useClientQuery(); + const { data: accounts, isFetching: isFetchingAccounts } = + getAccountsQuery(usernames).useClientQuery(); const voters = useMemo( () => accounts @@ -59,7 +63,7 @@ export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) { totalHp }; }) - ?.filter( + .filter( (item) => !searchText || item.name.toLowerCase().includes(searchText.toLocaleLowerCase()) ) .sort((a, b) => { @@ -71,11 +75,20 @@ export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) { [accounts, dynamicProps, searchText, sort] ); + const paginatedVoters = useMemo(() => voters?.slice((page - 1) * 10, page * 10), [page, voters]); + return ( - {accounts?.length + " " + i18next.t("proposals.votes-dialog-title", { n: proposal.id })} + + {isFetchingAccounts || isFetching ? ( + + ) : ( + accounts?.length + )} + + {i18next.t("proposals.votes-dialog-title", { n: proposal.id })}
@@ -95,12 +108,12 @@ export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) {
- {isFetching && } + {isFetching && isFetchingAccounts && }
{(voters?.length ?? 0) > 0 ? ( - voters?.map((x, index) => { + paginatedVoters?.map((x, index) => { const strHp = numeral(x.hp).format("0.00,"); const strProxyHp = numeral(x.proxyHp).format("0.00,"); @@ -136,10 +149,22 @@ export function ProposalVotes({ proposal, onHide }: ProposalVotesProps) { }) ) : (
- {isFetching ? i18next.t("proposals.searching") : i18next.t("proposals.no-results")} + {isFetching || isFetchingAccounts + ? i18next.t("proposals.searching") + : i18next.t("proposals.no-results")}
)}
+ {voters && voters.length > 10 && ( +
+ +
+ )}
diff --git a/src/app/proposals/_page.tsx b/src/app/proposals/_page.tsx index 553532da34..7a048f0539 100644 --- a/src/app/proposals/_page.tsx +++ b/src/app/proposals/_page.tsx @@ -8,11 +8,11 @@ import { Feedback, LinearProgress, Navbar, ScrollToTop, SearchBox, Theme } from import { Tsx } from "@/features/i18n/helper"; import i18next from "i18next"; import { ProposalListItem } from "@/app/proposals/_components"; -import { getAccountFullQuery, getDynamicPropsQuery, getProposalsQuery } from "@/api/queries"; +import { getAccountFullQuery, getProposalsQuery } from "@/api/queries"; import { parseAsset } from "@/utils"; import { Proposal } from "@/entities"; -import { useMount } from "react-use"; import { Button } from "@ui/button"; +import { AnimatePresence, motion } from "framer-motion"; setProxyBase(defaults.imageServer); @@ -94,10 +94,6 @@ export function ProposalsPage() { }; }, [dailyBudget, proposals]); - useMount(() => { - getDynamicPropsQuery().prefetch(); - }); - return ( <> @@ -163,9 +159,19 @@ export function ProposalsPage() { {isLoading && } {(sliced?.length ?? 0) > 0 && (
- {sliced?.map((p) => ( - - ))} + + {sliced?.map((p, i) => ( + + + + ))} +
)} {page * 5 < (filteredProposals?.length ?? 0) && ( diff --git a/src/features/shared/profile-popover/profile-preview/profile-preview-username.tsx b/src/features/shared/profile-popover/profile-preview/profile-preview-username.tsx index 478987ea50..8feb4463b9 100644 --- a/src/features/shared/profile-popover/profile-preview/profile-preview-username.tsx +++ b/src/features/shared/profile-popover/profile-preview/profile-preview-username.tsx @@ -17,7 +17,7 @@ export function ProfilePreviewUsername({ username }: Props) { getAccountFullQuery(username).useClientQuery(); const { data: relationsBetweenAccounts, isLoading: followsActiveUserLoading } = - useGetRelationshipBtwAccounts(username, activeUser!.username); + useGetRelationshipBtwAccounts(username, activeUser?.username); const followsActiveUser = useMemo( () => relationsBetweenAccounts?.follows ?? false, diff --git a/src/features/ui/pagination/index.tsx b/src/features/ui/pagination/index.tsx index af16796a4e..2c4f19d3ac 100644 --- a/src/features/ui/pagination/index.tsx +++ b/src/features/ui/pagination/index.tsx @@ -31,7 +31,7 @@ function PageButton( interface Props { dataLength: number; pageSize: number; - maxItems: number; + maxItems?: number; page?: number; onPageChange: (num: number) => void; className?: string; @@ -40,7 +40,6 @@ interface Props { export function Pagination({ dataLength, - maxItems, onPageChange, pageSize, className, From bdda777e6830ab2e811eb122ab11a475e1130e23 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 16:47:36 +0300 Subject: [PATCH 04/14] Fixed subscribe to community, improved create community button, got rid of unused subs store module --- .idea/workspace.xml | 152 +++++++++--------- src/api/mutations/index.ts | 1 + src/api/mutations/subscribe-to-community.ts | 53 ++++++ .../profile-communities/index.tsx | 26 +-- src/app/client-init.tsx | 11 +- .../_components/subscription-btn/index.tsx | 56 ++----- .../initialization/client-init.ts | 2 - .../initialization/initial-state.ts | 2 - .../initialization/server-init.ts | 1 - .../modules/subscriptions-module.ts | 18 --- 10 files changed, 170 insertions(+), 152 deletions(-) create mode 100644 src/api/mutations/subscribe-to-community.ts delete mode 100644 src/core/global-store/modules/subscriptions-module.ts diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 8cd59ccc2a..ee0b92564f 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,12 +4,17 @@
- + + - - - - + + + + + + + + - { + "keyToString": { + "Jest.Account Reputation.executor": "Run", + "Jest.Bookmark button.executor": "Run", + "Jest.BookmarkBtn.executor": "Run", + "Jest.BookmarkBtn.renders login required when no active user.executor": "Debug", + "Jest.BookmarksDialog.executor": "Run", + "Jest.BookmarksDialog.hides the modal when close button is clicked.executor": "Run", + "Jest.BoostDialog.executor": "Run", + "Jest.BoostDialog.finishes and calls onHide when finish button is clicked.executor": "Run", + "Jest.BoostDialog.handles signing process and transitions to step 3.executor": "Run", + "Jest.ClickAwayListener (1).executor": "Run", + "Jest.ClickAwayListener.executor": "Run", + "Jest.Comment Component.executor": "Run", + "Jest.Comment.executor": "Run", + "Jest.Comment.handles keyboard shortcuts.executor": "Run", + "Jest.Comment.renders with initial text and submit button.executor": "Run", + "Jest.Comment.submits comment when submit button is clicked.executor": "Run", + "Jest.Tests in utils/.executor": "Run", + "Jest.Vesting.executor": "Run", + "Node.js.scratch_39.js.executor": "Run", + "Node.js.scratch_40.js.executor": "Run", + "RunOnceActivity.OpenProjectViewOnStart": "true", + "RunOnceActivity.ShowReadmeOnStart": "true", + "WebServerToolWindowFactoryState": "false", + "code.cleanup.on.save": "true", + "dart.analysis.tool.window.visible": "false", + "git-widget-placeholder": "bugfix/review-issues-3", + "kotlin-language-version-configured": "true", + "last_opened_file_path": "/Users/ildartimerbaev/Work2/ecency-vision-nextjs/src/app", + "node.js.detected.package.eslint": "true", + "node.js.detected.package.standard": "true", + "node.js.detected.package.tslint": "true", + "node.js.selected.package.eslint": "(autodetect)", + "node.js.selected.package.standard": "", + "node.js.selected.package.tslint": "(autodetect)", + "nodejs.jest.jest_package": "/Users/ildartimerbaev/Work2/ecency-vision-nextjs/node_modules/jest", + "nodejs_interpreter_path": "/Users/ildartimerbaev/.nvm/versions/node/v18.17.1/bin/node", + "nodejs_package_manager_path": "npm", + "npm.build.executor": "Run", + "npm.dev.executor": "Run", + "npm.start.executor": "Run", + "npm.test.executor": "Run", + "prettierjs.PrettierConfiguration.Package": "/Users/ildartimerbaev/Work2/ecency-vision-nextjs/node_modules/prettier", + "project.structure.last.edited": "Project", + "project.structure.proportion": "0.0", + "project.structure.side.proportion": "0.0", + "rearrange.code.on.save": "true", + "settings.editor.selected.configurable": "actions.on.save", + "ts.external.directory.path": "/Users/ildartimerbaev/Work2/ecency-vision-nextjs/node_modules/typescript/lib", + "vue.rearranger.settings.migration": "true" }, - "keyToStringList": { - "com.intellij.ide.scratch.ScratchImplUtil$2/New Scratch File": [ - "TEXT", - "JavaScript" + "keyToStringList": { + "com.intellij.ide.scratch.ScratchImplUtil$2/New Scratch File": [ + "TEXT", + "JavaScript" ] } -}]]> +} @@ -797,7 +803,6 @@ - @@ -822,7 +827,8 @@ - diff --git a/src/api/mutations/index.ts b/src/api/mutations/index.ts index 5398cc3973..44947568b6 100644 --- a/src/api/mutations/index.ts +++ b/src/api/mutations/index.ts @@ -29,3 +29,4 @@ export * from "./upload-post-image"; export * from "./withdraw-routes"; export * from "./delegate-vesting-shares"; export * from "./claim-reward-balance"; +export * from "./subscribe-to-community"; diff --git a/src/api/mutations/subscribe-to-community.ts b/src/api/mutations/subscribe-to-community.ts new file mode 100644 index 0000000000..c4c8c74d03 --- /dev/null +++ b/src/api/mutations/subscribe-to-community.ts @@ -0,0 +1,53 @@ +import { useMutation, useQueryClient } from "@tanstack/react-query"; +import { Community, Subscription } from "@/entities"; +import { useGlobalStore } from "@/core/global-store"; +import { broadcastPostingJSON, formatError } from "@/api/operations"; +import { error } from "@/features/shared"; +import { QueryIdentifiers } from "@/core/react-query"; + +export function useSubscribeToCommunity(community: Community) { + const activeUser = useGlobalStore((s) => s.activeUser); + const queryClient = useQueryClient(); + + return useMutation({ + mutationKey: ["subscribeToCommunity", activeUser?.username, community?.name], + mutationFn: async ({ isSubscribe }: { isSubscribe: boolean }) => { + if (!activeUser) { + throw new Error("Can`t subscribe w/o active user"); + } + + if (isSubscribe) { + return [ + isSubscribe, + await broadcastPostingJSON(activeUser?.username, "community", [ + "subscribe", + { community: community.name } + ]) + ] as const; + } else { + return [ + isSubscribe, + await broadcastPostingJSON(activeUser?.username, "community", [ + "unsubscribe", + { community: community.name } + ]) + ] as const; + } + }, + onSuccess: ([isSubscribe]) => { + queryClient.setQueryData( + [QueryIdentifiers.SUBSCRIPTIONS, activeUser?.username], + (data) => { + if (!data) { + return data; + } + + return isSubscribe + ? [...data, [community.name, community.title, "guest", ""]] + : data.filter(([u]) => u !== community.name); + } + ); + }, + onError: (err) => error(...formatError(err)) + }); +} diff --git a/src/app/[...slugs]/_profile-components/profile-communities/index.tsx b/src/app/[...slugs]/_profile-components/profile-communities/index.tsx index b0b2b52a4d..6ba5084e20 100644 --- a/src/app/[...slugs]/_profile-components/profile-communities/index.tsx +++ b/src/app/[...slugs]/_profile-components/profile-communities/index.tsx @@ -11,6 +11,8 @@ import { CommunityListItem } from "@/app/communities/_components"; import { useCommunitiesCache } from "@/core/caches"; import { AnimatePresence, motion } from "framer-motion"; import { Badge } from "@ui/badge"; +import { Button } from "@ui/button"; +import { UilUser } from "@tooni/iconscout-unicons-react"; interface Props { account: Account; @@ -21,7 +23,7 @@ export function ProfileCommunities({ account }: Props) { const [sort, setSort] = useState<"asc" | "desc">("asc"); - const { data, isLoading } = useGetSubscriptionsQuery(account.name); + const { data, isFetching } = useGetSubscriptionsQuery(account.name); const communities = useCommunitiesCache(data?.map((item) => item[0]) ?? []); const showCreateLink = activeUser && activeUser.username === account.name; @@ -36,9 +38,9 @@ export function ProfileCommunities({ account }: Props) { ); return ( -
- {isLoading && } - {!isLoading && items?.length === 0 && ( +
+ {isFetching && } + {!isFetching && items?.length === 0 && ( <>

{i18next.t("profile.communities-title")}

{i18next.t("g.empty-list")}

@@ -64,6 +66,15 @@ export function ProfileCommunities({ account }: Props) { /> )}
+ {showCreateLink && ( +

+ + + +

+ )}
    @@ -90,13 +101,6 @@ export function ProfileCommunities({ account }: Props) { )}
- {showCreateLink && ( -

- - {i18next.t("profile.create-community")} - -

- )} )}
diff --git a/src/app/client-init.tsx b/src/app/client-init.tsx index 859a0a4fbe..b92d43a962 100644 --- a/src/app/client-init.tsx +++ b/src/app/client-init.tsx @@ -15,15 +15,18 @@ export function ClientInit() { useMount(() => { initI18next(); - }); - useEffect(() => { const activeUsername = ls.get("active_user") ?? Cookies.get("active_user"); - if (activeUsername && data) { + if (activeUsername) { setActiveUser(activeUsername); + } + }); + + useEffect(() => { + if (data) { updateActiveUser(data); } - }, [data]); + }, [data, updateActiveUser]); return <>; } diff --git a/src/app/communities/_components/subscription-btn/index.tsx b/src/app/communities/_components/subscription-btn/index.tsx index a8b44ed429..18ce7fb2cd 100644 --- a/src/app/communities/_components/subscription-btn/index.tsx +++ b/src/app/communities/_components/subscription-btn/index.tsx @@ -3,64 +3,38 @@ import React, { useMemo, useState } from "react"; import { Spinner } from "@ui/spinner"; import { Button, ButtonProps } from "@ui/button"; -import { Community, Subscription } from "@/entities"; -import { useGlobalStore } from "@/core/global-store"; +import { Community } from "@/entities"; import i18next from "i18next"; -import { formatError, subscribe, unSubscribe } from "@/api/operations"; -import { error, LoginRequired } from "@/features/shared"; +import { LoginRequired } from "@/features/shared"; +import { useGetSubscriptionsQuery } from "@/api/queries"; +import { useSubscribeToCommunity } from "@/api/mutations"; +import { useGlobalStore } from "@/core/global-store"; interface Props { community: Community; buttonProps?: ButtonProps; } export function SubscriptionBtn({ buttonProps, community }: Props) { - const activeUser = useGlobalStore((state) => state.activeUser); - const subscriptions = useGlobalStore((state) => state.subscriptions); - const updateSubscriptions = useGlobalStore((state) => state.updateSubscriptions); - + const activeUser = useGlobalStore((s) => s.activeUser); const [hover, setHover] = useState(false); - const [inProgress, setInProgress] = useState(false); + + const { data: subscriptions } = useGetSubscriptionsQuery(activeUser?.username); + const { mutateAsync: subscribe, isPending } = useSubscribeToCommunity(community); const subscribed = useMemo( - () => subscriptions.find((x) => x[0] === community.name) !== undefined, + () => subscriptions?.find((x) => x[0] === community.name) !== undefined, [subscriptions, community] ); - const subscribeAction = async () => { - setInProgress(true); - try { - await subscribe(activeUser!!.username, community.name); - const s: Subscription = [community.name, community.title, "guest", ""]; - updateSubscriptions([...subscriptions, s]); - } catch (e) { - error(...formatError(e)); - } finally { - setInProgress(false); - } - }; - - const unsubscribeAction = async () => { - setInProgress(true); - try { - await unSubscribe(activeUser?.username!, community.name); - const s: Subscription[] = subscriptions.filter((x) => x[0] !== community.name); - updateSubscriptions([...s]); - } catch (e) { - error(...formatError(e)); - } finally { - setInProgress(false); - } - }; - return ( <> {subscribed && ( )} - {!inProgress && !subscribed && ( + {!isPending && !subscribed && ( - diff --git a/src/core/global-store/initialization/client-init.ts b/src/core/global-store/initialization/client-init.ts index 223fc0c16b..05a79c62b3 100644 --- a/src/core/global-store/initialization/client-init.ts +++ b/src/core/global-store/initialization/client-init.ts @@ -4,7 +4,6 @@ import { create } from "zustand"; import { combine } from "zustand/middleware"; import { INITIAL_STATE } from "@/core/global-store/initialization/initial-state"; import { createUiActions } from "@/core/global-store/modules/ui-module"; -import { createSubscriptionsActions } from "@/core/global-store/modules/subscriptions-module"; import { createGlobalActions } from "@/core/global-store/modules/global-module"; import { createUsersActions } from "@/core/global-store/modules/users-module"; import { createAuthenticationActions } from "@/core/global-store/modules/authentication-module"; @@ -14,7 +13,6 @@ import { createNotificationsActions } from "@/core/global-store/modules/notifica export const useClientGlobalStore = create( combine(INITIAL_STATE, (set, getState, store) => ({ ...createUiActions(set, getState), - ...createSubscriptionsActions(set), ...createGlobalActions(set, getState), ...createUsersActions(), ...createAuthenticationActions(set, getState), diff --git a/src/core/global-store/initialization/initial-state.ts b/src/core/global-store/initialization/initial-state.ts index c5366b63c6..4cad145e6b 100644 --- a/src/core/global-store/initialization/initial-state.ts +++ b/src/core/global-store/initialization/initial-state.ts @@ -1,6 +1,5 @@ import { createGlobalState } from "@/core/global-store/modules/global-module"; import { createAuthenticationState } from "@/core/global-store/modules/authentication-module"; -import { createSubscriptionsState } from "@/core/global-store/modules/subscriptions-module"; import { createUiState } from "@/core/global-store/modules/ui-module"; import { createUsersState } from "@/core/global-store/modules/users-module"; import { createSigningKeyState } from "@/core/global-store/modules/signing-key-module"; @@ -10,7 +9,6 @@ import { createConfigState } from "@/core/global-store/modules/config-module"; export const INITIAL_STATE = { ...createGlobalState(), ...createAuthenticationState(), - ...createSubscriptionsState(), ...createUiState(), ...createUsersState(), ...createSigningKeyState(), diff --git a/src/core/global-store/initialization/server-init.ts b/src/core/global-store/initialization/server-init.ts index 80e5fc0464..270783377c 100644 --- a/src/core/global-store/initialization/server-init.ts +++ b/src/core/global-store/initialization/server-init.ts @@ -22,7 +22,6 @@ const getServerStore = () => createStore( combine(INITIAL_STATE, (set, getState, store) => ({ ...createUiActions(set, getState), - ...createSubscriptionsActions(set), ...createGlobalActions(set, getState), ...createUsersActions(), ...createAuthenticationActions(set, getState), diff --git a/src/core/global-store/modules/subscriptions-module.ts b/src/core/global-store/modules/subscriptions-module.ts deleted file mode 100644 index c21ca1a272..0000000000 --- a/src/core/global-store/modules/subscriptions-module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Subscription } from "@/entities"; - -export function createSubscriptionsState() { - return { - subscriptions: [] as Subscription[] - }; -} - -type State = ReturnType; - -export function createSubscriptionsActions(set: (state: Partial) => void) { - return { - updateSubscriptions: (subs: Subscription[]) => - set({ - subscriptions: [...subs] - }) - }; -} From 63548d577d95b82c4b8e70af50eb43c5c332b828 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 17:46:28 +0300 Subject: [PATCH 05/14] Fixed similar entries routing, improved similar entries layout and design --- .idea/workspace.xml | 38 +++++------ .../similar-entries/_index.scss | 19 ------ .../similar-entries/index.tsx | 65 ++++++++++--------- src/features/shared/entry-link/index.tsx | 6 +- 4 files changed, 53 insertions(+), 75 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index ee0b92564f..29ca866757 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,17 +4,11 @@
- - + - - - - - - - - + + + @@ -803,7 +797,6 @@ - @@ -828,7 +821,8 @@ - diff --git a/src/app/[...slugs]/_entry-components/similar-entries/_index.scss b/src/app/[...slugs]/_entry-components/similar-entries/_index.scss index ff875401d6..22aad11b3e 100644 --- a/src/app/[...slugs]/_entry-components/similar-entries/_index.scss +++ b/src/app/[...slugs]/_entry-components/similar-entries/_index.scss @@ -48,25 +48,6 @@ } } - .item-title { - display: block; - font-size: 16px; - font-weight: 500; - margin-bottom: 5px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - width: 100%; - - @include themify(day) { - @apply text-gray-steel; - } - - @include themify(night) { - @apply text-gray-pinkish; - } - } - .item-image { align-items: center; cursor: pointer; diff --git a/src/app/[...slugs]/_entry-components/similar-entries/index.tsx b/src/app/[...slugs]/_entry-components/similar-entries/index.tsx index c3ef395638..ef682828b1 100644 --- a/src/app/[...slugs]/_entry-components/similar-entries/index.tsx +++ b/src/app/[...slugs]/_entry-components/similar-entries/index.tsx @@ -8,10 +8,11 @@ import "./_index.scss"; import { Entry } from "@/entities"; import i18next from "i18next"; import { useGlobalStore } from "@/core/global-store"; -import { dateToFullRelative } from "@/utils"; -import { EntryLink } from "@/features/shared"; +import { dateToFullRelative, makeEntryPath } from "@/utils"; import Image from "next/image"; import { getSimilarEntriesQuery } from "@/api/queries/get-similar-entries-query"; +import { useRouter } from "next/navigation"; +import { motion } from "framer-motion"; setProxyBase(defaults.imageServer); @@ -22,6 +23,7 @@ interface Props { export function SimilarEntries({ entry }: Props) { const canUseWebp = useGlobalStore((s) => s.canUseWebp); + const router = useRouter(); const { data: entries } = getSimilarEntriesQuery(entry).useClientQuery(); return entries?.length === 3 ? ( @@ -30,35 +32,38 @@ export function SimilarEntries({ entry }: Props) {
{i18next.t("similar-entries.title")}
- {entries?.map((en, i) => { - const img = - catchPostImage(en.img_url, 600, 500, canUseWebp ? "webp" : "match") || - "/assets/noimage.svg"; - const imgSize = img == "/assets/noimage.svg" ? "75px" : "auto"; - const dateRelative = dateToFullRelative(en.created_at); - - return ( -
- - <> -
- {en.title} -
-
{en.title}
-
- {en.author} - {dateRelative} -
- -
+ {entries?.map((en, i) => ( + router.push(makeEntryPath(en.category, en.author, en.permlink))} + > + {en.title} +
{en.title}
+
+ {en.author} + {dateToFullRelative(en.created_at)}
- ); - })} +
+ ))}
) : ( diff --git a/src/features/shared/entry-link/index.tsx b/src/features/shared/entry-link/index.tsx index f8700f6b84..cb8330591d 100644 --- a/src/features/shared/entry-link/index.tsx +++ b/src/features/shared/entry-link/index.tsx @@ -1,6 +1,4 @@ -"use client"; - -import React, { PropsWithChildren, useMemo } from "react"; +import React, { PropsWithChildren } from "react"; import { Entry } from "@/entities"; import Link from "next/link"; @@ -19,7 +17,7 @@ interface Props { } export function EntryLink({ children, entry, target }: PropsWithChildren) { - const path = useMemo(() => makePath(entry.category, entry.author, entry.permlink), [entry]); + const path = makePath(entry.category, entry.author, entry.permlink); return ( From 1e30ec27f07db3afa92e6db4dd946f17add5346b Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:23:02 +0300 Subject: [PATCH 06/14] Animated notifications list, improved notifications layout, fixed notifications filtering --- .idea/workspace.xml | 37 +++-- .../notifications/notifications-query.ts | 3 +- src/core/react-query/index.ts | 2 +- src/features/shared/notifications/_index.scss | 66 +------- ...animated-notification-list-item-layout.tsx | 18 ++ .../notifications/notification-list-item.tsx | 154 +++++++++--------- .../notifications/notification-list.tsx | 13 +- .../notification-delegations-type.tsx | 14 +- .../notification-transfer-type.tsx | 4 +- 9 files changed, 142 insertions(+), 169 deletions(-) create mode 100644 src/features/shared/notifications/animated-notification-list-item-layout.tsx diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 29ca866757..04ab0aced7 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,11 +4,16 @@
- + + - - - + + + + + + + @@ -797,7 +802,6 @@ - @@ -822,7 +826,8 @@ - diff --git a/src/api/queries/notifications/notifications-query.ts b/src/api/queries/notifications/notifications-query.ts index 6f776b4709..bdea41cf80 100644 --- a/src/api/queries/notifications/notifications-query.ts +++ b/src/api/queries/notifications/notifications-query.ts @@ -14,7 +14,6 @@ export function useNotificationsQuery(filter: NotificationFilter | null) { initialData: { pages: [], pageParams: [] }, initialPageParam: "", getNextPageParam: (lastPage) => lastPage?.[lastPage.length - 1]?.timestamp ?? "", - refetchOnMount: true, - staleTime: 30000 + refetchOnMount: true }); } diff --git a/src/core/react-query/index.ts b/src/core/react-query/index.ts index 274b5e4bf6..3aa2d43ec3 100644 --- a/src/core/react-query/index.ts +++ b/src/core/react-query/index.ts @@ -68,7 +68,7 @@ export enum QueryIdentifiers { DISCOVER_CURATION = "discover-curation", CONTRIBUTORS = "contributors", GIFS = "GIFS", - NOTIFICATIONS = "NOTIFICATIONS", + NOTIFICATIONS = "notifications", PROPOSAL = "proposal", GET_FRIENDS = "get-friends", GET_SEARCH_FRIENDS = "get-search-friends", diff --git a/src/features/shared/notifications/_index.scss b/src/features/shared/notifications/_index.scss index a4143d5c6e..bee91855c5 100644 --- a/src/features/shared/notifications/_index.scss +++ b/src/features/shared/notifications/_index.scss @@ -151,28 +151,12 @@ } .group-title { - font-size: 16px; - font-weight: 500; - padding: 16px; + @apply text-sm p-4 font-semibold border-light-400 border-y text-gray-steel dark:border-blue-metallic dark:text-blue-powder; &:first-letter { text-transform: capitalize; } - @include themify(day) { - border-bottom: 1px solid; - border-top: 1px solid; - @apply border-light-400; - @apply text-gray-steel; - } - - @include themify(night) { - border-bottom: 1px solid; - border-top: 1px solid; - @apply border-blue-metallic; - @apply text-blue-powder; - } - &:first-child { border-top: 0; } @@ -198,17 +182,7 @@ } .item-inner { - display: flex; - @include clearfix(); - border-bottom-right-radius: 40px; - border-top-right-radius: 40px; - margin-right: 6px; - padding: 14px 10px; - - @media (min-width: $md-break) { - margin-right: 40px; - padding: 14px 40px 15px 30px; - } + @apply flex justify-between clear-both p-4; .item-control { align-items: center; @@ -216,11 +190,7 @@ float: left; height: 100%; padding-top: 15px; - width: 24px; - - @media (min-width: $md-break) { - width: 41px; - } + justify-content: flex-end; .mark-read { @apply bg-blue-dark-sky; @@ -247,30 +217,13 @@ float: left; width: calc(100% - 94px); - @include themify(day) { - @apply text-gray-charcoal; + @apply text-gray-charcoal dark:text-gray-pinkish; - a { - @apply text-gray-charcoal; - } - } - - @include themify(night) { - @apply text-gray-pinkish; - - a { - @apply text-gray-pinkish; - } - } - - .first-line, - .second-line { - padding-top: 9px; + a { + @apply text-gray-charcoal dark:text-gray-pinkish; } .first-line { - margin-bottom: 4px; - .source-name { cursor: pointer; font-weight: 700; @@ -296,16 +249,11 @@ white-space: nowrap; } - .transfer-amount { - font-weight: 500; - } - .second-line { .reply-body, .transfer-memo { border-left: 5px solid; - @apply border-gray-steel-light-030; - @apply text-gray-steel; + @apply border-gray-steel-light-030 text-gray-800; cursor: pointer; font-size: 13px; padding-left: 10px; diff --git a/src/features/shared/notifications/animated-notification-list-item-layout.tsx b/src/features/shared/notifications/animated-notification-list-item-layout.tsx new file mode 100644 index 0000000000..fd751efbe2 --- /dev/null +++ b/src/features/shared/notifications/animated-notification-list-item-layout.tsx @@ -0,0 +1,18 @@ +import { motion } from "framer-motion"; +import { PropsWithChildren } from "react"; + +export function AnimatedNotificationListItemLayout( + props: PropsWithChildren<{ key: string; index: number }> +) { + return ( + + {props.children} + + ); +} diff --git a/src/features/shared/notifications/notification-list-item.tsx b/src/features/shared/notifications/notification-list-item.tsx index 1d142beab6..0e4eadd63a 100644 --- a/src/features/shared/notifications/notification-list-item.tsx +++ b/src/features/shared/notifications/notification-list-item.tsx @@ -23,10 +23,6 @@ import useMount from "react-use/lib/useMount"; import { useInViewport } from "react-in-viewport"; import { FormControl } from "@ui/input"; -interface State { - isChecked: boolean; -} - interface Props { notification: ApiNotification; entry?: ApiNotification; @@ -105,9 +101,7 @@ export function NotificationListItem({ afterClick={afterClick} target={openLinksInNewTab ? "_blank" : undefined} > - - - + ); const sourceLink = ( @@ -116,7 +110,7 @@ export function NotificationListItem({ afterClick={afterClick} target={openLinksInNewTab ? "_blank" : undefined} > - {notification.source} + @{notification.source} ); @@ -135,6 +129,79 @@ export function NotificationListItem({
+
+
{sourceLinkMain}
+ + {(notification.type === "vote" || notification.type === "unvote") && ( + + )} + {notification.type === "reply" && ( + + )} + {notification.type === "mention" && ( + + )} + {notification.type === "favorites" && ( + + )} + {notification.type === "bookmarks" && ( + + )} + {(notification.type === "follow" || + notification.type === "unfollow" || + notification.type === "ignore") && ( + + )} + {notification.type === "reblog" && ( + + )} + {notification.type === "transfer" && ( + + )} + {notification.type === "delegations" && ( + + )} + {notification.type === "spin" && } + {notification.type === "inactive" && } + {notification.type === "referral" && } +
+ {isSelect ? (
{}} /> @@ -152,77 +219,6 @@ export function NotificationListItem({ )}
)} - -
{sourceLinkMain}
- - {(notification.type === "vote" || notification.type === "unvote") && ( - - )} - {notification.type === "reply" && ( - - )} - {notification.type === "mention" && ( - - )} - {notification.type === "favorites" && ( - - )} - {notification.type === "bookmarks" && ( - - )} - {(notification.type === "follow" || - notification.type === "unfollow" || - notification.type === "ignore") && ( - - )} - {notification.type === "reblog" && ( - - )} - {notification.type === "transfer" && ( - - )} - {notification.type === "delegations" && ( - - )} - {notification.type === "spin" && } - {notification.type === "inactive" && } - {notification.type === "referral" && }
); diff --git a/src/features/shared/notifications/notification-list.tsx b/src/features/shared/notifications/notification-list.tsx index 243d1ea14d..84de9ab9fd 100644 --- a/src/features/shared/notifications/notification-list.tsx +++ b/src/features/shared/notifications/notification-list.tsx @@ -5,6 +5,7 @@ import { NotificationFilter, NotificationViewType } from "@/enums"; import { NotificationListItem } from "@/features/shared/notifications/notification-list-item"; import i18next from "i18next"; import { date2key } from "@/features/shared/notifications/utils"; +import { AnimatedNotificationListItemLayout } from "@/features/shared/notifications/animated-notification-list-item-layout"; interface Props { filter: NotificationFilter | null; @@ -39,7 +40,7 @@ export function NotificationList({ {dataFlow.map((n, i) => ( {currentStatus === NotificationViewType.ALL && ( - <> + {n.gkf &&
{date2key(n.gk)}
} - +
)} {currentStatus === NotificationViewType.READ && n.read === 1 && ( - <> + {n.gkf &&
{date2key(n.gk)}
} - +
)} {currentStatus === NotificationViewType.UNREAD && n.read === 0 && ( - <> + {n.gkf &&
{date2key(n.gk)}
} - +
)}
))} diff --git a/src/features/shared/notifications/notification-types/notification-delegations-type.tsx b/src/features/shared/notifications/notification-types/notification-delegations-type.tsx index 06753a9f06..1029158590 100644 --- a/src/features/shared/notifications/notification-types/notification-delegations-type.tsx +++ b/src/features/shared/notifications/notification-types/notification-delegations-type.tsx @@ -2,7 +2,7 @@ import React, { ReactElement } from "react"; import { ApiDelegationsNotification } from "@/entities"; import i18next from "i18next"; import { formattedNumber, rcFormatter, vestsToHp } from "@/utils"; -import { getDynamicPropsQuery } from "@/api/queries"; +import { DEFAULT_DYNAMIC_PROPS, getDynamicPropsQuery } from "@/api/queries"; interface Props { sourceLink: ReactElement; @@ -20,9 +20,15 @@ export function NotificationDelegationsType({ sourceLink, notification }: Props) {i18next.t("notifications.delegations-str")}{" "} {notification.amount.includes("VESTS") - ? formattedNumber(vestsToHp(parseFloat(notification.amount), data!.hivePerMVests), { - suffix: "HP" - }) + ? formattedNumber( + vestsToHp( + parseFloat(notification.amount), + (data ?? DEFAULT_DYNAMIC_PROPS)?.hivePerMVests + ), + { + suffix: "HP" + } + ) : formattedNumber(rcFormatter(parseFloat(notification.amount)), { suffix: "RC" })} diff --git a/src/features/shared/notifications/notification-types/notification-transfer-type.tsx b/src/features/shared/notifications/notification-types/notification-transfer-type.tsx index f04311d3f7..a9934c952c 100644 --- a/src/features/shared/notifications/notification-types/notification-transfer-type.tsx +++ b/src/features/shared/notifications/notification-types/notification-transfer-type.tsx @@ -14,11 +14,11 @@ export function NotificationTransferType({ sourceLink, notification }: Props) { {sourceLink} {i18next.t("notifications.transfer-str")}{" "} - {notification.amount} + {notification.amount} {notification.memo && ( -
+
{notification.memo .substring(0, 120) From 80d79a20e8f3ba0a13adb093bc8ea575df7f09e5 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:33:18 +0300 Subject: [PATCH 07/14] Moved referrals, witnesses and proposals to dropdown. Fixed dropdown item dark theme --- .idea/workspace.xml | 37 +++++++--------- .../profile-card/index.tsx | 18 -------- .../profile-menu/index.tsx | 42 +++++++++++++++---- src/features/ui/dropdown/dropdown-item.tsx | 2 +- 4 files changed, 51 insertions(+), 48 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 04ab0aced7..b2307e7837 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,16 +4,11 @@ - @@ -827,7 +821,8 @@ - diff --git a/src/app/[...slugs]/_profile-components/profile-card/index.tsx b/src/app/[...slugs]/_profile-components/profile-card/index.tsx index 1c2574f7a8..08b907b176 100644 --- a/src/app/[...slugs]/_profile-components/profile-card/index.tsx +++ b/src/app/[...slugs]/_profile-components/profile-card/index.tsx @@ -20,7 +20,6 @@ import { useGlobalStore } from "@/core/global-store"; import { getCommunityCache } from "@/core/caches"; import { CommunityCardEditPic } from "@/app/[...slugs]/_components/community-card/community-card-edit-pic"; import { Followers, Following } from "../friends"; -import { EcencyConfigManager } from "@/config"; interface Props { account: Account; @@ -239,23 +238,6 @@ export const ProfileCard = ({ account, section }: Props) => { {!!community && } )} - {isMyProfile && ( - <> - visionFeatures.referrals.enabled} - > - - - - - - - - - - - - )}
{followersList && } diff --git a/src/app/[...slugs]/_profile-components/profile-menu/index.tsx b/src/app/[...slugs]/_profile-components/profile-menu/index.tsx index 7f7d8d2c34..0ba86e9b09 100644 --- a/src/app/[...slugs]/_profile-components/profile-menu/index.tsx +++ b/src/app/[...slugs]/_profile-components/profile-menu/index.tsx @@ -10,6 +10,7 @@ import { kebabMenuHorizontalSvg } from "@ui/svg"; import { Dropdown, DropdownItem, DropdownMenu, DropdownToggle } from "@ui/dropdown"; import { Button } from "@ui/button"; import { PageMenu, PageMenuItems, PageMenuLink, PageMenuMobileDropdown } from "@/features/ui"; +import { EcencyConfigManager } from "@/config"; interface Props { username: string; @@ -19,14 +20,39 @@ interface Props { export function ProfileMenu({ username, section }: Props) { const activeUser = useGlobalStore((s) => s.activeUser); - const kebabMenuItems = ["trail", "replies"] - .map((x) => ({ - label: i18next.t(`profile.section-${x}`), - href: `/@${username}/${x}`, - selected: section === x, - id: x - })) - .filter((item) => !item.selected); + const kebabMenuItems = [ + ...["trail", "replies"] + .map((x) => ({ + label: i18next.t(`profile.section-${x}`), + href: `/@${username}/${x}`, + selected: section === x, + id: x + })) + .filter((item) => !item.selected), + { + label: i18next.t("profile.witnesses"), + href: "/witnesses", + selected: false, + id: "witnesses" + }, + { + label: i18next.t("profile.proposals"), + href: "/proposals", + selected: false, + id: "proposals" + }, + ...EcencyConfigManager.composeConditionals( + EcencyConfigManager.withConditional( + (config) => config.visionFeatures.referrals.enabled, + () => ({ + label: i18next.t("profile.referrals"), + href: `/@${username}/referrals`, + selected: section === "referrals", + id: "referrals" + }) + ) + ) + ]; const menuItems = [ ...[ProfileFilter.blog, ProfileFilter.posts, ProfileFilter.comments].map((x) => { diff --git a/src/features/ui/dropdown/dropdown-item.tsx b/src/features/ui/dropdown/dropdown-item.tsx index 0338bf538d..144a97649d 100644 --- a/src/features/ui/dropdown/dropdown-item.tsx +++ b/src/features/ui/dropdown/dropdown-item.tsx @@ -26,7 +26,7 @@ export function DropdownItem(props: HTMLProps & Props) {
a]:text-dark-default dark:text-white hover:bg-blue-dark-sky-040 hover:text-blue-dark-sky dark:hover:bg-gray-900 rounded-tr-2xl rounded-br-2xl": + "min-w-[80%] cursor-pointer text-dark-default [&>a]:text-dark-default dark:text-white dark:[&>a]:text-white hover:bg-blue-dark-sky-040 hover:text-blue-dark-sky dark:hover:bg-gray-900 rounded-tr-2xl rounded-br-2xl": true, "px-4 py-2": !props.size || props.size === "medium", "px-2 py-1 text-sm": !props.size || props.size === "small", From f467871c0fc6a52c5de3c465f7aa6a69c051df7a Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:34:32 +0300 Subject: [PATCH 08/14] Fixed profile info icon --- .idea/workspace.xml | 31 +++++++++---------- .../profile-info/index.tsx | 4 +-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b2307e7837..84f2eecf18 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,11 +4,8 @@ - @@ -822,7 +818,8 @@ - diff --git a/src/app/[...slugs]/_profile-components/profile-info/index.tsx b/src/app/[...slugs]/_profile-components/profile-info/index.tsx index c2f60d3310..0f91848c16 100644 --- a/src/app/[...slugs]/_profile-components/profile-info/index.tsx +++ b/src/app/[...slugs]/_profile-components/profile-info/index.tsx @@ -10,7 +10,7 @@ import i18next from "i18next"; import { hiveSvg } from "@ui/svg"; import { StyledTooltip } from "@ui/tooltip"; import { Spinner } from "@ui/spinner"; -import { UilInfoCircle } from "@tooni/iconscout-unicons-react"; +import { UilInfo } from "@tooni/iconscout-unicons-react"; interface ContentProps { account: FullAccount; @@ -99,7 +99,7 @@ export function ProfileInfo({ account }: Props) { } > - {isLoaded ? : } + {isLoaded ? : } ); From 701989d2c6c88027b316a4d7a8660a9fdbfbe63a Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:36:22 +0300 Subject: [PATCH 09/14] Fixed unclaimed points initial state --- .idea/workspace.xml | 29 ++++++++++--------- .../wallet-ecency/index.tsx | 2 +- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 84f2eecf18..2ae3a9eb69 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,8 +4,9 @@ - - + + + @@ -794,7 +795,6 @@ - @@ -819,7 +819,8 @@ - diff --git a/src/app/[...slugs]/_profile-components/wallet-ecency/index.tsx b/src/app/[...slugs]/_profile-components/wallet-ecency/index.tsx index 523026d577..fb14e99d38 100644 --- a/src/app/[...slugs]/_profile-components/wallet-ecency/index.tsx +++ b/src/app/[...slugs]/_profile-components/wallet-ecency/index.tsx @@ -172,7 +172,7 @@ export const WalletEcency = ({ account }: Props) => {
{i18next.t("points.unclaimed-points")}
- {`${points?.uPoints}`} + {`${points?.uPoints ?? "0.000"}`} {isMyPage && ( From 7523660d2e3535d0f9a2f489066385ae0cf462e1 Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:39:20 +0300 Subject: [PATCH 10/14] Fixed sidebar dark theme --- .idea/workspace.xml | 29 ++++++++++--------- .../shared/navbar/navbar-main-sidebar.tsx | 4 +-- .../navbar/sidebar/navbar-side-main-menu.tsx | 4 +-- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 2ae3a9eb69..d993bba781 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,9 +4,10 @@ - @@ -820,7 +820,8 @@ - diff --git a/src/features/shared/navbar/navbar-main-sidebar.tsx b/src/features/shared/navbar/navbar-main-sidebar.tsx index 029d9071bf..0436e8b33c 100644 --- a/src/features/shared/navbar/navbar-main-sidebar.tsx +++ b/src/features/shared/navbar/navbar-main-sidebar.tsx @@ -61,7 +61,7 @@ export function NavbarMainSidebar({ show, setShow, setStepOne }: Props) {
-
+
{ @@ -112,7 +112,7 @@ export function NavbarMainSidebar({ show, setShow, setStepOne }: Props) { icon={} /> -
+
( ))} -
+
} /> -
+
{authMenu.map(({ label, onClick, icon }) => ( Date: Tue, 10 Sep 2024 19:42:05 +0300 Subject: [PATCH 11/14] Disable market swap form swapping if there isn't any balance value --- .idea/workspace.xml | 30 +++++++++---------- .../market/market-swap-form/index.tsx | 8 ++++- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index d993bba781..c8dba112cb 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,8 @@ - @@ -821,7 +818,8 @@ - diff --git a/src/features/market/market-swap-form/index.tsx b/src/features/market/market-swap-form/index.tsx index 439ea97c13..a5419f768b 100644 --- a/src/features/market/market-swap-form/index.tsx +++ b/src/features/market/market-swap-form/index.tsx @@ -266,7 +266,13 @@ export const MarketSwapForm = ({ padding = "p-4" }: Props) => { )} {step === MarketSwapFormStep.FORM ? ( -

+ )} {canEditTeam && ( -

- -

+ + + )}
)} From 7f23e1329a10d5216fa8d5d5b1e31db9029d0b8a Mon Sep 17 00:00:00 2001 From: "ildar.timerbaev" Date: Tue, 10 Sep 2024 19:54:20 +0300 Subject: [PATCH 14/14] Fixed build --- .idea/workspace.xml | 37 ++++++++++--------- next.config.js | 2 +- public/sw.js | 3 +- public/workbox-9b4d2a02.js | 1 + .../_components/community-cover/index.tsx | 2 +- .../initialization/server-init.ts | 2 - 6 files changed, 25 insertions(+), 22 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 3b5b028ff7..27cba97848 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,10 +4,13 @@ - @@ -821,7 +823,8 @@ - diff --git a/next.config.js b/next.config.js index 3f1e67d536..a289146e3b 100644 --- a/next.config.js +++ b/next.config.js @@ -20,7 +20,7 @@ const config = { }); if (process.env.NODE_ENV === "production") { - config.module.plugins.push( + config.plugins.push( new BugsnagBuildReporterPlugin({ apiKey: "53c03fdd42cd699cb95f60abe77a5b19", appVersion: appPackage.version diff --git a/public/sw.js b/public/sw.js index 7adf491c7d..baba578764 100644 --- a/public/sw.js +++ b/public/sw.js @@ -1 +1,2 @@ -if(!self.define){let e,s={};const a=(a,i)=>(a=new URL(a+".js",i).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(i,n)=>{const c=e||("document"in self?document.currentScript.src:"")||location.href;if(s[c])return;let t={};const r=e=>a(e,c),o={module:{uri:c},exports:t,require:r};s[c]=Promise.all(i.map((e=>o[e]||r(e)))).then((e=>(n(...e),t)))}}define(["./workbox-9b4d2a02"],(function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"0e4efa53010a1eb8a75ecd282e7f3aac"},{url:"/_next/static/chunks/1172-6fa635d4ba219142.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/13b76428-3a27edfd28c29f16.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/140-0ef6f4bce2ead6e5.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/20-fa165387485c2498.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/210-1ace67500e0574d9.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/2315-fe913af263aad2a1.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/2355-1bf5d25680f416aa.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/2536-a533303517ccb76b.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/2763-a1febe40f86a3509.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/2793-300c3afe2fbe36c0.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/3aba9d11-f088ea721efdb495.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/4218-68f36d262194bd0b.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/4351-3b599832ff5e4a8d.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/52271efe-1246535f067d990c.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/6107-989d876e8f5c37a7.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/62c88095-d6f38dd65f2fe347.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/6861-e253a325bb4cc6fd.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/7023-46269df5627bf76c.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/7177-815bcdf666b579f0.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/7497-063e406b01d9d51e.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/77befd7b-fe3783b26f236ca4.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/8210-1a6e04ca03a2dd5f.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/8470-f1afa765cb3360de.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/9390-2a3dc46a0308d7fa.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/964-87dd0cb2aa692199.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/9691.14c502a3524d7148.js",revision:"14c502a3524d7148"},{url:"/_next/static/chunks/9706-257cfb41f9cfc2c4.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/9950-5a130dd5358d6d99.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/aaea2bcf-0636c7544f3f93b2.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/%5B...slugs%5D/page-0d75a6d47bdfc16e.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/about/page-685487389ccac0a4.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/contributors/page-8fe6da2ebb35db05.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/faq/page-b4addf4bd458b632.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/guest-post/page-e21b77d0386f5402.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/privacy-policy/page-d54c19c49ce9abf2.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/terms-of-service/page-33accf6d37613c26.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/(staticPages)/whitepaper/page-840a50dd1067d892.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/_not-found/page-87a42e0a62a94f4f.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/auth/page-e6b0078a5e209d7e.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/chats/%5B...params%5D/page-98ec5a2b93f34b09.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/chats/page-5a3483e53930935a.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/communities/create-hs/page-d276c97411f15ddc.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/communities/create/page-75872cb239addd8e.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/communities/layout-699bddd7c1b057ff.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/communities/loading-c181245d6749a122.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/communities/page-0a672aa2111d7b86.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/contribute/page-f67368908b334781.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/decks/page-755450c26ff0e0e4.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/discover/layout-567fc94b563ff3e1.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/discover/loading-175daee3d466b725.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/discover/page-70d483b81e83df98.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/draft/%5Bid%5D/page-5b6e9a8b7844533a.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/layout-28d8c4b51a9311e7.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/market/advanced/page-f19d369bdcc1cc53.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/market/limit/page-589811b37df70d1d.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/market/page-42239778a9c6cc06.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/market/swap/page-5ccc784c671c0f04.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/not-found-a42b00872940301d.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/onboard-friend/%5B...slugs%5D/page-7357882ecf795f5b.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/page-e7f978be6e08e265.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/perks/page-20018ef11aee5801.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/proposals/%5Bid%5D/page-e449742826be472c.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/proposals/page-62873e4f89372343.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/purchase/page-5fd977fc1c77fed9.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/search/page-258a844f32905d8d.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/signup/page-f23b962f0180d107.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/submit/page-be4d74f0804cdda8.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/app/witnesses/page-dac81420b51dda91.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/c0e397d0-d86ae2426f017668.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/eeac573e-fe0a55ceeef5ebdf.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/fd9d1056-98dfef589c2ee860.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/framework-0af805db6f0c0b82.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/main-8926b8a01066d44e.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/main-app-f2463f3514d5e713.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/pages/_app-f870474a17b7f2fd.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js",revision:"79330112775102f91e1010318bae2bd3"},{url:"/_next/static/chunks/public/assets/notification.7cf94838874c04af.mp3",revision:"7cf94838874c04af"},{url:"/_next/static/chunks/webpack-06a1e20fc5da1d01.js",revision:"nMzM48WEAu1ZBoSpSnj-i"},{url:"/_next/static/css/0e316016ae6ca244.css",revision:"0e316016ae6ca244"},{url:"/_next/static/css/1d5d4ebc1cd30c53.css",revision:"1d5d4ebc1cd30c53"},{url:"/_next/static/css/299d776a4aa8641f.css",revision:"299d776a4aa8641f"},{url:"/_next/static/css/2ceade599589d2b8.css",revision:"2ceade599589d2b8"},{url:"/_next/static/css/4c219b8c84cc5e5a.css",revision:"4c219b8c84cc5e5a"},{url:"/_next/static/css/513be94db61781f1.css",revision:"513be94db61781f1"},{url:"/_next/static/css/551656fb847f38d0.css",revision:"551656fb847f38d0"},{url:"/_next/static/css/651733de5938119d.css",revision:"651733de5938119d"},{url:"/_next/static/css/75a5c09387da9bea.css",revision:"75a5c09387da9bea"},{url:"/_next/static/css/7909d0565a6899cf.css",revision:"7909d0565a6899cf"},{url:"/_next/static/css/80594a425fa78f01.css",revision:"80594a425fa78f01"},{url:"/_next/static/css/865f7ab4ef834569.css",revision:"865f7ab4ef834569"},{url:"/_next/static/css/97e918a903ab54c0.css",revision:"97e918a903ab54c0"},{url:"/_next/static/css/c69ae03a9f10c92f.css",revision:"c69ae03a9f10c92f"},{url:"/_next/static/css/ce623685369f6d01.css",revision:"ce623685369f6d01"},{url:"/_next/static/css/e62cdbc508f48afc.css",revision:"e62cdbc508f48afc"},{url:"/_next/static/css/ec4522ef7880f964.css",revision:"ec4522ef7880f964"},{url:"/_next/static/css/fe6943005e1bbbfe.css",revision:"fe6943005e1bbbfe"},{url:"/_next/static/media/arrow1-about.656281e6.png",revision:"656281e6"},{url:"/_next/static/media/arrow2-about.1b039bcc.png",revision:"1b039bcc"},{url:"/_next/static/media/arrow3-about.70f825ed.png",revision:"70f825ed"},{url:"/_next/static/media/back-clouds-down.4d526728.png",revision:"4d526728"},{url:"/_next/static/media/back-clouds-up.23f147d4.png",revision:"23f147d4"},{url:"/_next/static/media/cloud1-about.2cdc493a.png",revision:"2cdc493a"},{url:"/_next/static/media/cloud2-about.32fd33bd.png",revision:"32fd33bd"},{url:"/_next/static/media/fallback.d0906556.png",revision:"8713aeba6805ef460b16fa081edd1887"},{url:"/_next/static/media/index-bg.6a2f476b.png",revision:"6a2f476b"},{url:"/_next/static/media/logo-circle.9f6f8f1c.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/_next/static/media/noimage.7dc5d3ff.svg",revision:"68711d71516a091f18169b2882dc6035"},{url:"/_next/static/media/noimage.f7ce9bd0.png",revision:"f7ce9bd0"},{url:"/_next/static/media/thumbnail-play.348281a6.jpg",revision:"99d63c99267bf2e74e95d92bfb00a0ea"},{url:"/_next/static/nMzM48WEAu1ZBoSpSnj-i/_buildManifest.js",revision:"d2412658a613585afb7ea2608e1b5916"},{url:"/_next/static/nMzM48WEAu1ZBoSpSnj-i/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/assets/arrow1-about.png",revision:"4340c5b200d5d51631f944aad1ee2b5e"},{url:"/assets/arrow2-about.png",revision:"a73b3fcfc161b35e762e52e1810612f9"},{url:"/assets/arrow3-about.png",revision:"6c58e88a02000b98b2f500275e173068"},{url:"/assets/back-clouds-down.png",revision:"12a7304745da678d47a0072132c810c1"},{url:"/assets/back-clouds-up.png",revision:"e56f90fa70a1fe82aebb5f997b823f28"},{url:"/assets/bg-download-mob-dark.png",revision:"8c9a7504cdb60835ef0d39b0f448571d"},{url:"/assets/bg-download-mob-dark.webp",revision:"6a8c212f5d2cb66f259a4a8aa3af3311"},{url:"/assets/bg-download-mob-light.png",revision:"d92057b43d7e4217175d35b944141645"},{url:"/assets/bg-download-mob-light.webp",revision:"a225c5595468ab97f62a03246753cce6"},{url:"/assets/bg-download-tiny-dark.svg",revision:"4dfcf8aaeeb8a52d21bb3525d541ed5b"},{url:"/assets/bg-download-tiny.webp",revision:"a0a4bfab2ddbad09183baf2afe07a616"},{url:"/assets/bubble-center.png",revision:"5606f7307c513e99f36699e10f23ccf9"},{url:"/assets/bubble-center.webp",revision:"ef695adcbbd8936ed59f350682e61397"},{url:"/assets/bubble-left-bottom.png",revision:"df2d82a18a6135cf028abbf11781da69"},{url:"/assets/bubble-left-bottom.webp",revision:"ed0725bf3ac081532ad28a113a25bb0e"},{url:"/assets/bubble-left-top.png",revision:"5485d77a530a6f998e1e0c95cc58d223"},{url:"/assets/bubble-left-top.webp",revision:"cf1c941f7f1bde7958ebc663e7dd2f14"},{url:"/assets/bubble-right-bottom.png",revision:"c34007e9b2e094b58d0ad9f149efe7a6"},{url:"/assets/bubble-right-bottom.webp",revision:"c2189eac8ac13d5a006194e4171148b4"},{url:"/assets/bubble-right-top.png",revision:"6401d7510d2dda133da4f77b8e5857c3"},{url:"/assets/bubble-right-top.webp",revision:"06037b88ba36932c52d5484a2db3c735"},{url:"/assets/cloud1-about.png",revision:"d66dc0e33618136110dc0a851f98f4cc"},{url:"/assets/cloud1.png",revision:"28c7c7b997fb3662e2d21549b32b2972"},{url:"/assets/cloud2-about.png",revision:"8774eb6432d37ac1ecf7deaea117e1a5"},{url:"/assets/cloud2.png",revision:"a66f13dbef7a3324ab1d105991295e00"},{url:"/assets/cloud3.png",revision:"8889d6546ce489ca120d960479fc04d1"},{url:"/assets/coming-soon.png",revision:"ef24f5a15258aaa3846af7089935bf0a"},{url:"/assets/community-img.svg",revision:"3fd1e229d9517bb74c4e4903d9109ded"},{url:"/assets/cover-fallback-day.png",revision:"595641ae8f1d3b74ee12ee0b8878a520"},{url:"/assets/cover-fallback-night.png",revision:"bb6096d6a3e471fa7a8f869562d340db"},{url:"/assets/download-algae-dark.png",revision:"8c70504a94da6e93f4ac1b27046eb939"},{url:"/assets/download-algae-dark.webp",revision:"89a79f1000ca9995a6e14cfc60fd42a9"},{url:"/assets/download-algae.png",revision:"2490f946a17ba1abe4456f0f31d850a3"},{url:"/assets/download-algae.webp",revision:"1d97c2b64cfd934481e18c49ec8e8722"},{url:"/assets/download-dark-fishes.png",revision:"537442c023e388e9e33a93c821094381"},{url:"/assets/download-dark-fishes.webp",revision:"a36ea49d16f9c4b1e2833c2f6bbc618f"},{url:"/assets/dunsky.jpeg",revision:"6af464219667bd1b7a8b05a3a3133cf4"},{url:"/assets/dunsky.webp",revision:"abb98406fd78ae7cbf1ccf61e6b0a8f2"},{url:"/assets/ecency-faq.jpg",revision:"e2d5d30d0cb4a5fc5e470c56d62ede97"},{url:"/assets/ecency-faq.webp",revision:"42faa678c7ef5854f9ed0c999f6ef7eb"},{url:"/assets/fallback.png",revision:"8713aeba6805ef460b16fa081edd1887"},{url:"/assets/fish-1.png",revision:"4386e9af02b5f60f75caa040eced9a65"},{url:"/assets/fish-1.webp",revision:"8f0eb1179c74579084353e5df5b2a74f"},{url:"/assets/fish-2.png",revision:"92ce36fc40b95aeb3475d081bba0d798"},{url:"/assets/fish-2.webp",revision:"fe0c99a9f185d8b2e94bd249e625cf27"},{url:"/assets/fish-3.png",revision:"89c59580c072f1dbf52ac03068f040f3"},{url:"/assets/fish-3.webp",revision:"b9c3a3cc1cd0329d74ddb62d3a4e4b43"},{url:"/assets/fish-4.png",revision:"b91622c6328bbba13847519e0356db62"},{url:"/assets/fish-4.webp",revision:"a404c3ef59a9581554c06188ee262419"},{url:"/assets/fish-5.png",revision:"b271e3992390713707dc08f01691fb52"},{url:"/assets/fish-5.webp",revision:"abb4e590246f17bd00a21f7b414872d3"},{url:"/assets/fish-junior.png",revision:"78924f1ba81f1f59dd9a144be923edb1"},{url:"/assets/fish-junior.webp",revision:"bcae2a76d249cad55891d24e41e73b0c"},{url:"/assets/fish-senior.png",revision:"f3327a9c9d166c9da097fcfe88f38ed3"},{url:"/assets/fish-senior.webp",revision:"c70cf25bd04d52decb151396c900dcb3"},{url:"/assets/footer-discord.svg",revision:"04238f73e8da0be200731a4cc285d00e"},{url:"/assets/footer-main-fish.png",revision:"ba3d7c5371e84bdf30f6dee4d086a156"},{url:"/assets/footer-main-fish.webp",revision:"ac45436a3109caf9f94a2cd00f681783"},{url:"/assets/footer-telegram.svg",revision:"796b996dc8082544484feb13a97aa014"},{url:"/assets/footer-twitter.svg",revision:"c44b68c3cdee7732ce516bc250f6f27c"},{url:"/assets/footer-youtube.svg",revision:"6f91ba3c2f20618d27c15bff5352aba6"},{url:"/assets/github-cover.png",revision:"5eaca17c4b526f9b352a87a5a82dbfe4"},{url:"/assets/good-karma.jpeg",revision:"a7bb11629694bd7f9bd2b16bf058bb6b"},{url:"/assets/good-karma.webp",revision:"9a449b33cf032238499916c25584f58d"},{url:"/assets/hero-algae-dark.svg",revision:"eaa27188f9a588164e731b9f4a8f8295"},{url:"/assets/hero-algae-light.svg",revision:"4efcd71e3e8f8574446eeaa7a7517e33"},{url:"/assets/hero-fishes-dark.png",revision:"f8d8e17b68e2ff1490202f8503d24770"},{url:"/assets/hero-fishes.svg",revision:"a6307454b1e0fc4bcb6d402c33a63c7f"},{url:"/assets/hive-signer.svg",revision:"579ae88263a03ea7c8c4a9ec4e8b67f7"},{url:"/assets/icon-android-white.svg",revision:"f7df8d801059a45a14d1e90864157b1f"},{url:"/assets/icon-android.png",revision:"606b1396c3fffa5dc0f1d074695fab49"},{url:"/assets/icon-android.webp",revision:"c6bd14c9917803f8f69c4557be95ad9e"},{url:"/assets/icon-apple-white.svg",revision:"e4de9f34c14e50ed4fd12847091c16d2"},{url:"/assets/icon-apple.svg",revision:"a27b1b4829e566dca6d38f7c2e6d6ba5"},{url:"/assets/icon-windows-white.svg",revision:"4553dd690e4675fc4fb2132732b1c43b"},{url:"/assets/icon-windows.svg",revision:"80669c801739c850306618a2569b423c"},{url:"/assets/illustration-decentralization.png",revision:"0ad91ae4e70f22e8be87345e73144cb3"},{url:"/assets/illustration-decentralization.webp",revision:"ed3442432df26760623ec58c715fdf43"},{url:"/assets/illustration-earn-money.png",revision:"e2a7951254764e3dabac0697d089a3c2"},{url:"/assets/illustration-earn-money.webp",revision:"58605a59b4c1f6321ef90d5ef21eac24"},{url:"/assets/illustration-hero-day.png",revision:"ca7c9fd189caa73616664823e45b737d"},{url:"/assets/illustration-hero-day.webp",revision:"66c0bb6d0864af304a4e1801c967c526"},{url:"/assets/illustration-hero.png",revision:"9e2e1a46dc78fb0635c054fcf2d27b67"},{url:"/assets/illustration-hero.webp",revision:"75c6cdf85d150e6512fd2b3d0e20e332"},{url:"/assets/illustration-open-source.png",revision:"6f20524696843277aca578db00f29e14"},{url:"/assets/illustration-open-source.webp",revision:"79bf861b3c83c7de1ac96d8a35c4827d"},{url:"/assets/illustration-true-ownership.png",revision:"005b4f456f8d341de75c8c7cb25d750c"},{url:"/assets/illustration-true-ownership.webp",revision:"a2819f44d481e3203270877dc89cf87c"},{url:"/assets/index-bg.png",revision:"0931098d955341c1458c653ef42c5bec"},{url:"/assets/keychain.png",revision:"b4a1776481ec1bce0cdcb654126ee449"},{url:"/assets/left-fishes.png",revision:"c98d0bac15e561c7e4ce226541f5ab1e"},{url:"/assets/left-fishes.webp",revision:"7e5f5cee88eafa722b9b2eadbede120d"},{url:"/assets/like.png",revision:"af5f38b521e1c06eece664d5a3f24cdd"},{url:"/assets/logo-192x192.svg",revision:"09f9b1ec26a43fedaf3c527d9992ea3b"},{url:"/assets/logo-384x384.svg",revision:"c33b1a087528562650bdc7f9bb1889b3"},{url:"/assets/logo-512x512.svg",revision:"e0eb6d6416139753e199cf627599ac40"},{url:"/assets/logo-circle-santa.svg",revision:"a08e76920a86e2749d74345d86797cc5"},{url:"/assets/logo-circle.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/assets/logo-small-transparent.png",revision:"197b6e7934149c67237a38f145dfb860"},{url:"/assets/noimage.png",revision:"66290b70590324b996aa6c841a4f6bf1"},{url:"/assets/noimage.svg",revision:"68711d71516a091f18169b2882dc6035"},{url:"/assets/notification.mp3",revision:"594e6e429f66513a2bc759fce6c1abc7"},{url:"/assets/nsfw.png",revision:"2e103d3e107e2974025b441b5fde485a"},{url:"/assets/our-history.png",revision:"730ae7e9850b787ea78d6151391ca463"},{url:"/assets/our-history.webp",revision:"f781b93801170a83acde5cf23bf538f4"},{url:"/assets/our-team.png",revision:"dc4a40a5f543e793462caf5c19d89f2f"},{url:"/assets/our-team.webp",revision:"ca3d13a54a5ba9e7e7df7af748c3a23a"},{url:"/assets/our-vision.png",revision:"acb541b415884dfce4b061ad21ce1b06"},{url:"/assets/our-vision.webp",revision:"bfe56f6816dade138c59010d69a8f83f"},{url:"/assets/phone-dark-pc.png",revision:"ba94fb9341a0303a8f6068ade064b0cb"},{url:"/assets/phone-dark-pc.webp",revision:"beef47eb0f0d9e6708e172b2138c48ab"},{url:"/assets/phone-dark-tablet.png",revision:"2358c7d62d813d3422a5af8bebb2be2e"},{url:"/assets/phone-dark-tablet.webp",revision:"c42d66f8c5c1999a648e6bb6a1a81227"},{url:"/assets/phone-download-tiny.png",revision:"0247b2bb16c64d46e4d8a73f60f4d501"},{url:"/assets/phone-download-tiny.webp",revision:"7120bd905eb5e5acbc866bd42058ba4c"},{url:"/assets/phone-download.png",revision:"54650a95d8ce20a2e03b68f0d6389201"},{url:"/assets/phone-light-pc.png",revision:"7bbef75c3da1d2a8e742b484292e6379"},{url:"/assets/phone-light-pc.webp",revision:"4a5839bf3499ef6687f1a798c683d7a1"},{url:"/assets/phone-light-tablet.png",revision:"49724acf6a25fedcd914ce0125517b8a"},{url:"/assets/phone-light-tablet.webp",revision:"7f448063c46119c5a7f0880f01b1814d"},{url:"/assets/reward.png",revision:"0faea76d5486dc7f637486da769fdad8"},{url:"/assets/rewarding-and-freespeech.png",revision:"ca1fc97612079d93de24bfb3ab6e0ea9"},{url:"/assets/rewarding-and-freespeech.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/assets/signup.png",revision:"1ceacafe5770ed4f53829de572c9d219"},{url:"/assets/svg.tsx",revision:"2f1d7fbc25f8166e5b49e8997a803842"},{url:"/assets/talhasch.jpeg",revision:"9abb1df5ddbfd25e7fd72b0a4e202eff"},{url:"/assets/talhasch.webp",revision:"6e7e49e9ba1da71ecf46f0bb17c986c3"},{url:"/assets/thumbnail-play.jpg",revision:"99d63c99267bf2e74e95d92bfb00a0ea"},{url:"/assets/writer-thinking.png",revision:"03deb40c2a35de193e78c0e0d3d72a0e"},{url:"/assets/writer.png",revision:"00feab482a3f5309cce64ce9ca64041a"},{url:"/firebase-messaging-sw.js",revision:"db67bd2ec72e44b813ccabeb1ebb113f"},{url:"/manifest.json",revision:"3547aead3cd7bbd2b2ab3b7e23355d84"},{url:"/next.svg",revision:"8e061864f388b47f33a1c3780831193e"},{url:"/vercel.svg",revision:"61c6b19abff40ea7acd577be818f3976"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:i})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); +if(!self.define){let e,s={};const a=(a,c)=>(a=new URL(a+".js",c).href,s[a]||new Promise((s=>{if("document"in self){const e=document.createElement("script");e.src=a,e.onload=s,document.head.appendChild(e)}else e=a,importScripts(a),s()})).then((()=>{let e=s[a];if(!e)throw new Error(`Module ${a} didn’t register its module`);return e})));self.define=(c,i)=>{const n=e||("document"in self?document.currentScript.src:"")||location.href;if(s[n])return;let t={};const r=e=>a(e,n),f={module:{uri:n},exports:t,require:r};s[n]=Promise.all(c.map((e=>f[e]||r(e)))).then((e=>(i(...e),t)))}}define(["./workbox-9b4d2a02"],(function(e){"use strict";importScripts(),self.skipWaiting(),e.clientsClaim(),e.precacheAndRoute([{url:"/_next/app-build-manifest.json",revision:"a346f68378e80534ad364483e49db85c"},{url:"/_next/static/chunks/1172-80d5f9142347983b.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/1172-80d5f9142347983b.js.map",revision:"2b428ce62b15a1176f2483620ab67f12"},{url:"/_next/static/chunks/13b76428-d2acc36217b02113.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/13b76428-d2acc36217b02113.js.map",revision:"424759f7f868a2bedcda305f27c42f11"},{url:"/_next/static/chunks/1804-49bdfb9db74b9610.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/1804-49bdfb9db74b9610.js.map",revision:"172631f5b218523818ea9956aae5272e"},{url:"/_next/static/chunks/210-7ee249e5664dfe6f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/210-7ee249e5664dfe6f.js.map",revision:"e52451b6e2ce379c819929ffd9e82936"},{url:"/_next/static/chunks/2315-0ea54fbcb13ebb05.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/2315-0ea54fbcb13ebb05.js.map",revision:"3c3899c7d8233af0113b48af6885e043"},{url:"/_next/static/chunks/2355-cf155b38d4935411.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/2355-cf155b38d4935411.js.map",revision:"89d77e38f93e4ea56aaf21b6d445e326"},{url:"/_next/static/chunks/2763-252eb785ad44e22d.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/2763-252eb785ad44e22d.js.map",revision:"6403498301c85fe3abc006671ddb0176"},{url:"/_next/static/chunks/2793-a2594e8198c2e6ac.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/2793-a2594e8198c2e6ac.js.map",revision:"4b0797ab9b4f6828e54631f4e759d70c"},{url:"/_next/static/chunks/3305-e570d82a0e759a94.js.map",revision:"26345e8ae64e1ada059d63389f7a798c"},{url:"/_next/static/chunks/3aba9d11-c7f5d549a5dd3217.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/3aba9d11-c7f5d549a5dd3217.js.map",revision:"56243fab94d285d1b982e72945285c07"},{url:"/_next/static/chunks/4351-7a0bc789b8424095.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/4351-7a0bc789b8424095.js.map",revision:"c8a3c07988725949c17ef5d0f60d67c5"},{url:"/_next/static/chunks/4638-5ca7c3ac638600b8.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/4638-5ca7c3ac638600b8.js.map",revision:"c024a8696166b38c2c906c91e450131f"},{url:"/_next/static/chunks/52271efe-5a4d5b99719e484a.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/52271efe-5a4d5b99719e484a.js.map",revision:"13aaa643238da152922abfe2fa30d5dd"},{url:"/_next/static/chunks/606-1a739d6ef4f8f59d.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/606-1a739d6ef4f8f59d.js.map",revision:"e68886e6024c1589486346711624d663"},{url:"/_next/static/chunks/6107-e6adf7fd99f62650.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/62c88095-71836eac7be5e546.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/62c88095-71836eac7be5e546.js.map",revision:"5515ccc74548fe1034ed79e5f35a1654"},{url:"/_next/static/chunks/6861-ff1d94876427d3ad.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/6861-ff1d94876427d3ad.js.map",revision:"fa1270460e2259891a0c1c8858a36148"},{url:"/_next/static/chunks/6950-9f54275c3920c340.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/6950-9f54275c3920c340.js.map",revision:"24cd96003779b069ee1d7e7dbe92e3c4"},{url:"/_next/static/chunks/7023-fc5ba924867648c3.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/7023-fc5ba924867648c3.js.map",revision:"8ebed1309f30fee13fb069f8526c12d2"},{url:"/_next/static/chunks/7154-8d5948c0f288fb42.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/7154-8d5948c0f288fb42.js.map",revision:"71fc8b4e68b2dca51233c431c4de8207"},{url:"/_next/static/chunks/7177-3ed31a9d7a0c7c74.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/7177-3ed31a9d7a0c7c74.js.map",revision:"38caf0151bd72e6ddd1e25118ade30a1"},{url:"/_next/static/chunks/7497-67d21c80dca9e244.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/7497-67d21c80dca9e244.js.map",revision:"b8498567c85d5ea666f961ea577baec3"},{url:"/_next/static/chunks/7533-2c8eb1287fdf55f6.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/7533-2c8eb1287fdf55f6.js.map",revision:"eec599639fb39e4ffb03a5f20efbdd50"},{url:"/_next/static/chunks/77befd7b-aafb7c3d0a4b41f4.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/77befd7b-aafb7c3d0a4b41f4.js.map",revision:"1cc6fd0f767711a36667a53281371aa8"},{url:"/_next/static/chunks/8210-e7766482513ef9ad.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/8210-e7766482513ef9ad.js.map",revision:"8d5dbdd2bfc9fe2cb6d0da234bcde525"},{url:"/_next/static/chunks/8470-c14193bc41bcbdf6.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/8470-c14193bc41bcbdf6.js.map",revision:"46be0a401cfdc59559652f84f5afbe50"},{url:"/_next/static/chunks/964-34d8ce4a69af6ac5.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/964-34d8ce4a69af6ac5.js.map",revision:"c4787d6efc985e7c28da0c1361b67f08"},{url:"/_next/static/chunks/9691.97f1876daf59d7a9.js",revision:"97f1876daf59d7a9"},{url:"/_next/static/chunks/9691.97f1876daf59d7a9.js.map",revision:"932957534cf87a2b806245f65c3d507e"},{url:"/_next/static/chunks/9706-0bf8fe0da31dbea5.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/9706-0bf8fe0da31dbea5.js.map",revision:"4ed357445acd33c3afcb7d59452cedca"},{url:"/_next/static/chunks/9950-5b36c956d35cc9a8.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/9950-5b36c956d35cc9a8.js.map",revision:"091314da952d8a13345dfba1f25de050"},{url:"/_next/static/chunks/aaea2bcf-4a717eae8f750b29.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/aaea2bcf-4a717eae8f750b29.js.map",revision:"c3012e831bdff64d991aa787071e3f41"},{url:"/_next/static/chunks/app/%5B...slugs%5D/page-4ebe99d005d2a2ad.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/%5B...slugs%5D/page-4ebe99d005d2a2ad.js.map",revision:"ea4a868e6e8ec5187ba89c32b32c889a"},{url:"/_next/static/chunks/app/(staticPages)/about/page-585051be0d79c85a.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/about/page-585051be0d79c85a.js.map",revision:"89f5efbf8e9f542be04478c43d8388f5"},{url:"/_next/static/chunks/app/(staticPages)/contributors/page-f71b0adf0a0953c6.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/contributors/page-f71b0adf0a0953c6.js.map",revision:"dc7af4de02dd460b95df0418e652b250"},{url:"/_next/static/chunks/app/(staticPages)/faq/page-8265e3120e384bfb.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/faq/page-8265e3120e384bfb.js.map",revision:"a135f991d5b71e7dc0c5e09d3db0be63"},{url:"/_next/static/chunks/app/(staticPages)/guest-post/page-1bf078ffb82ba55f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/privacy-policy/page-dfd740419f13a499.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/terms-of-service/page-c7b8b48f24c5b63f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/(staticPages)/whitepaper/page-0df0961618d0c32f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/_not-found/page-51e682651f8f7a24.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/auth/page-3936e98727072605.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/auth/page-3936e98727072605.js.map",revision:"49bd0b86824aab76c37338d8cd342242"},{url:"/_next/static/chunks/app/chats/%5B...params%5D/page-487c76aee4df9ffe.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/chats/%5B...params%5D/page-487c76aee4df9ffe.js.map",revision:"0f51816167450eaa709d84684475e7d1"},{url:"/_next/static/chunks/app/chats/page-2b85d806cb0f69e9.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/chats/page-2b85d806cb0f69e9.js.map",revision:"80fb2ce6d80ad2498292dfb5770fc9e4"},{url:"/_next/static/chunks/app/communities/create-hs/page-54bf47981e8ddd99.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/communities/create-hs/page-54bf47981e8ddd99.js.map",revision:"8c2b4bafe4a69dde17566425b1e6c1af"},{url:"/_next/static/chunks/app/communities/create/page-bd3b27de11e14789.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/communities/create/page-bd3b27de11e14789.js.map",revision:"8351cbaf80c083830310c1656a1a83ba"},{url:"/_next/static/chunks/app/communities/layout-8c5359929c1b9c22.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/communities/loading-5d26251cf8407530.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/communities/loading-5d26251cf8407530.js.map",revision:"ef70bc22439918e716740636daa47ca0"},{url:"/_next/static/chunks/app/communities/page-f41fc71a8f414ca8.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/communities/page-f41fc71a8f414ca8.js.map",revision:"7c2c5b4e8b9b4c821d49a873dd363897"},{url:"/_next/static/chunks/app/contribute/page-8add6cd68ac2f11c.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/decks/page-53c16fc0e8d63c1f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/decks/page-53c16fc0e8d63c1f.js.map",revision:"ad63fe5b01af928ff9510f133693c7eb"},{url:"/_next/static/chunks/app/discover/layout-d8632fb2b0d412b6.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/discover/layout-d8632fb2b0d412b6.js.map",revision:"e2c16469ec471b49d260ec3b7b3c1d0b"},{url:"/_next/static/chunks/app/discover/loading-2f0854b3a7b785fd.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/discover/page-c40948a530023ba9.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/discover/page-c40948a530023ba9.js.map",revision:"86433f7617fd1562ba15ffda42dfd6c6"},{url:"/_next/static/chunks/app/draft/%5Bid%5D/page-4392946225c2f2b8.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/layout-6e07af58ec231e06.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/layout-6e07af58ec231e06.js.map",revision:"64ff56a83896d9655a3e97e9c0ae3fb9"},{url:"/_next/static/chunks/app/market/advanced/page-ac500817a14957bf.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/market/advanced/page-ac500817a14957bf.js.map",revision:"28cce82e2f2d69359a8d1df32fb39c22"},{url:"/_next/static/chunks/app/market/limit/page-b1f95f2cbc64cd6e.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/market/limit/page-b1f95f2cbc64cd6e.js.map",revision:"633ef8c7633da22f67307b50fafdccbb"},{url:"/_next/static/chunks/app/market/page-170e5f164f8fa36e.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/market/swap/page-4e73d373d6685591.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/market/swap/page-4e73d373d6685591.js.map",revision:"bff7967d57957b0b4295dacfaaeb42d8"},{url:"/_next/static/chunks/app/not-found-56a26fd293e4cbbf.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/onboard-friend/%5B...slugs%5D/page-89d2426cf9ad8064.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/onboard-friend/%5B...slugs%5D/page-89d2426cf9ad8064.js.map",revision:"acfe328650da39a2bec6cad9f24c3183"},{url:"/_next/static/chunks/app/page-42fdc10edcdf615b.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/page-42fdc10edcdf615b.js.map",revision:"d9a92988505ad88aa85ca7033cae9919"},{url:"/_next/static/chunks/app/perks/page-4918f1d3bfa307d0.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/perks/page-4918f1d3bfa307d0.js.map",revision:"79b61c6d4b7a847a0084ada7b9067762"},{url:"/_next/static/chunks/app/proposals/%5Bid%5D/page-427d50d9bc84089b.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/proposals/%5Bid%5D/page-427d50d9bc84089b.js.map",revision:"eab6cf3cbb50f70ad05e826f0e07c567"},{url:"/_next/static/chunks/app/proposals/page-1508734b9c8fb062.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/proposals/page-1508734b9c8fb062.js.map",revision:"180e7068c5c16670c8547fdc3170bda5"},{url:"/_next/static/chunks/app/purchase/page-11816dab2cc6c239.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/purchase/page-11816dab2cc6c239.js.map",revision:"1303455a840ab7f78247b76fe59dc7f9"},{url:"/_next/static/chunks/app/search/page-63a03d646c772183.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/search/page-63a03d646c772183.js.map",revision:"e4283598348c00961389595d86429a49"},{url:"/_next/static/chunks/app/signup/page-9d2c29f4180589ed.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/signup/page-9d2c29f4180589ed.js.map",revision:"2d873eda69a034061b7d6182a13f8dd3"},{url:"/_next/static/chunks/app/submit/page-d77c880c780a6643.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/witnesses/page-6803ba18cbd64d0e.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/app/witnesses/page-6803ba18cbd64d0e.js.map",revision:"794325fbdc21bc3273e8745e5568ad20"},{url:"/_next/static/chunks/c0e397d0-e22ccc2c99005a0b.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/c0e397d0-e22ccc2c99005a0b.js.map",revision:"4b961af0b7ac5942f08fe5903c7a9232"},{url:"/_next/static/chunks/eeac573e-dcbc301d499780df.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/eeac573e-dcbc301d499780df.js.map",revision:"4a7f946bf5c9184c0aae62288d6e1868"},{url:"/_next/static/chunks/fd9d1056-2e8e54d234f9f18f.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/fd9d1056-2e8e54d234f9f18f.js.map",revision:"5ea8a555c2e18ef1f7b4c00fdfff90b9"},{url:"/_next/static/chunks/framework-f504fcbdc24809ff.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/framework-f504fcbdc24809ff.js.map",revision:"078ac2b84925442ea692f4264154643d"},{url:"/_next/static/chunks/main-af68e7b04dbc4f0e.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/main-af68e7b04dbc4f0e.js.map",revision:"4711e7efc174a073ab6dd52e3f502f19"},{url:"/_next/static/chunks/main-app-72191aca4eebc7bc.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/main-app-72191aca4eebc7bc.js.map",revision:"8b58b04725cb026a37765ede1948a6fe"},{url:"/_next/static/chunks/pages/_app-1baacf817f80b683.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/pages/_app-1baacf817f80b683.js.map",revision:"fc64c45e7c1bf14874103f038ac951c6"},{url:"/_next/static/chunks/pages/_error-afda92248358346b.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/pages/_error-afda92248358346b.js.map",revision:"cc22ebfd7c4053d84f64c2e41843982e"},{url:"/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js",revision:"79330112775102f91e1010318bae2bd3"},{url:"/_next/static/chunks/public/assets/notification.7cf94838874c04af.mp3",revision:"7cf94838874c04af"},{url:"/_next/static/chunks/webpack-12c3ac3a4d96377e.js",revision:"qA9Dfn0jTqjyyXS7lcRlZ"},{url:"/_next/static/chunks/webpack-12c3ac3a4d96377e.js.map",revision:"c4fa058df7e871c936235023c3c56190"},{url:"/_next/static/css/0367e37f6e3fd8b5.css",revision:"0367e37f6e3fd8b5"},{url:"/_next/static/css/0367e37f6e3fd8b5.css.map",revision:"685704c3118ce786c692a89639088dc4"},{url:"/_next/static/css/0f0cb42ad369f189.css",revision:"0f0cb42ad369f189"},{url:"/_next/static/css/0f0cb42ad369f189.css.map",revision:"e348cab54670937c3cff082e74d94c80"},{url:"/_next/static/css/1cd4961f63a0f815.css",revision:"1cd4961f63a0f815"},{url:"/_next/static/css/1cd4961f63a0f815.css.map",revision:"34748e7b1778476cd1402fd613631956"},{url:"/_next/static/css/24b4c7b73561aab1.css",revision:"24b4c7b73561aab1"},{url:"/_next/static/css/24b4c7b73561aab1.css.map",revision:"bedd8154fb2f89303c9e9931e2552ee7"},{url:"/_next/static/css/314f3e8f4c7e1853.css",revision:"314f3e8f4c7e1853"},{url:"/_next/static/css/314f3e8f4c7e1853.css.map",revision:"f1957d70fd9d5360a64702577da2e592"},{url:"/_next/static/css/432e5ee1e7ae8de4.css",revision:"432e5ee1e7ae8de4"},{url:"/_next/static/css/432e5ee1e7ae8de4.css.map",revision:"df80e6a0c3981edc23c7e76fbd83f899"},{url:"/_next/static/css/58517c4333c805e1.css",revision:"58517c4333c805e1"},{url:"/_next/static/css/58517c4333c805e1.css.map",revision:"2667fcdefee5d76806b8bf7ca55fbc4c"},{url:"/_next/static/css/7323b2715eb37cb0.css",revision:"7323b2715eb37cb0"},{url:"/_next/static/css/7323b2715eb37cb0.css.map",revision:"d5d686dcdf16a9e9285e543f464580ff"},{url:"/_next/static/css/7b05caa48ae3756e.css",revision:"7b05caa48ae3756e"},{url:"/_next/static/css/7b05caa48ae3756e.css.map",revision:"0a3e94edfdb7e5f9797b6df970cd1892"},{url:"/_next/static/css/8dd1898b14cd062a.css",revision:"8dd1898b14cd062a"},{url:"/_next/static/css/8dd1898b14cd062a.css.map",revision:"57d0c3f1115a4846013f7649563da84f"},{url:"/_next/static/css/8e38c3b3d59335d1.css",revision:"8e38c3b3d59335d1"},{url:"/_next/static/css/8e38c3b3d59335d1.css.map",revision:"9df9871adbcf5b42d13e0514ce52fa71"},{url:"/_next/static/css/987144c8088097c9.css",revision:"987144c8088097c9"},{url:"/_next/static/css/987144c8088097c9.css.map",revision:"3b14adc2dbe95f3106a38430ee2562d5"},{url:"/_next/static/css/b2413520eb4669a5.css",revision:"b2413520eb4669a5"},{url:"/_next/static/css/b2413520eb4669a5.css.map",revision:"f8bf711535ca417ca6a41bdb82e1899d"},{url:"/_next/static/css/bad4927b0cd6fbf9.css",revision:"bad4927b0cd6fbf9"},{url:"/_next/static/css/bad4927b0cd6fbf9.css.map",revision:"2274583fb76a3907c5dc6ec75d995d99"},{url:"/_next/static/css/c626062d5417c69b.css",revision:"c626062d5417c69b"},{url:"/_next/static/css/c626062d5417c69b.css.map",revision:"919add4af7ef15c5c9aafeeacc32ac55"},{url:"/_next/static/css/cbb2bf692454686c.css",revision:"cbb2bf692454686c"},{url:"/_next/static/css/cbb2bf692454686c.css.map",revision:"70ef202e521a55cf3a73401a55861f7e"},{url:"/_next/static/css/d422263a0a03c70c.css",revision:"d422263a0a03c70c"},{url:"/_next/static/css/d422263a0a03c70c.css.map",revision:"d96e583d479afcce9db5b8640774d91b"},{url:"/_next/static/css/de44a315f01b5b27.css",revision:"de44a315f01b5b27"},{url:"/_next/static/css/de44a315f01b5b27.css.map",revision:"f87e6c7970ebf95c06d39ce079a19616"},{url:"/_next/static/media/arrow1-about.656281e6.png",revision:"656281e6"},{url:"/_next/static/media/arrow2-about.1b039bcc.png",revision:"1b039bcc"},{url:"/_next/static/media/arrow3-about.70f825ed.png",revision:"70f825ed"},{url:"/_next/static/media/back-clouds-down.4d526728.png",revision:"4d526728"},{url:"/_next/static/media/back-clouds-up.23f147d4.png",revision:"23f147d4"},{url:"/_next/static/media/cloud1-about.2cdc493a.png",revision:"2cdc493a"},{url:"/_next/static/media/cloud2-about.32fd33bd.png",revision:"32fd33bd"},{url:"/_next/static/media/fallback.d0906556.png",revision:"8713aeba6805ef460b16fa081edd1887"},{url:"/_next/static/media/index-bg.6a2f476b.png",revision:"6a2f476b"},{url:"/_next/static/media/logo-circle.9f6f8f1c.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/_next/static/media/noimage.7dc5d3ff.svg",revision:"68711d71516a091f18169b2882dc6035"},{url:"/_next/static/media/noimage.f7ce9bd0.png",revision:"f7ce9bd0"},{url:"/_next/static/media/thumbnail-play.348281a6.jpg",revision:"99d63c99267bf2e74e95d92bfb00a0ea"},{url:"/_next/static/qA9Dfn0jTqjyyXS7lcRlZ/_buildManifest.js",revision:"50e0e2eb6fd60572d559c7355937ad7a"},{url:"/_next/static/qA9Dfn0jTqjyyXS7lcRlZ/_ssgManifest.js",revision:"b6652df95db52feb4daf4eca35380933"},{url:"/assets/arrow1-about.png",revision:"4340c5b200d5d51631f944aad1ee2b5e"},{url:"/assets/arrow2-about.png",revision:"a73b3fcfc161b35e762e52e1810612f9"},{url:"/assets/arrow3-about.png",revision:"6c58e88a02000b98b2f500275e173068"},{url:"/assets/back-clouds-down.png",revision:"12a7304745da678d47a0072132c810c1"},{url:"/assets/back-clouds-up.png",revision:"e56f90fa70a1fe82aebb5f997b823f28"},{url:"/assets/bg-download-mob-dark.png",revision:"8c9a7504cdb60835ef0d39b0f448571d"},{url:"/assets/bg-download-mob-dark.webp",revision:"6a8c212f5d2cb66f259a4a8aa3af3311"},{url:"/assets/bg-download-mob-light.png",revision:"d92057b43d7e4217175d35b944141645"},{url:"/assets/bg-download-mob-light.webp",revision:"a225c5595468ab97f62a03246753cce6"},{url:"/assets/bg-download-tiny-dark.svg",revision:"4dfcf8aaeeb8a52d21bb3525d541ed5b"},{url:"/assets/bg-download-tiny.webp",revision:"a0a4bfab2ddbad09183baf2afe07a616"},{url:"/assets/bubble-center.png",revision:"5606f7307c513e99f36699e10f23ccf9"},{url:"/assets/bubble-center.webp",revision:"ef695adcbbd8936ed59f350682e61397"},{url:"/assets/bubble-left-bottom.png",revision:"df2d82a18a6135cf028abbf11781da69"},{url:"/assets/bubble-left-bottom.webp",revision:"ed0725bf3ac081532ad28a113a25bb0e"},{url:"/assets/bubble-left-top.png",revision:"5485d77a530a6f998e1e0c95cc58d223"},{url:"/assets/bubble-left-top.webp",revision:"cf1c941f7f1bde7958ebc663e7dd2f14"},{url:"/assets/bubble-right-bottom.png",revision:"c34007e9b2e094b58d0ad9f149efe7a6"},{url:"/assets/bubble-right-bottom.webp",revision:"c2189eac8ac13d5a006194e4171148b4"},{url:"/assets/bubble-right-top.png",revision:"6401d7510d2dda133da4f77b8e5857c3"},{url:"/assets/bubble-right-top.webp",revision:"06037b88ba36932c52d5484a2db3c735"},{url:"/assets/cloud1-about.png",revision:"d66dc0e33618136110dc0a851f98f4cc"},{url:"/assets/cloud1.png",revision:"28c7c7b997fb3662e2d21549b32b2972"},{url:"/assets/cloud2-about.png",revision:"8774eb6432d37ac1ecf7deaea117e1a5"},{url:"/assets/cloud2.png",revision:"a66f13dbef7a3324ab1d105991295e00"},{url:"/assets/cloud3.png",revision:"8889d6546ce489ca120d960479fc04d1"},{url:"/assets/coming-soon.png",revision:"ef24f5a15258aaa3846af7089935bf0a"},{url:"/assets/community-img.svg",revision:"3fd1e229d9517bb74c4e4903d9109ded"},{url:"/assets/cover-fallback-day.png",revision:"595641ae8f1d3b74ee12ee0b8878a520"},{url:"/assets/cover-fallback-night.png",revision:"bb6096d6a3e471fa7a8f869562d340db"},{url:"/assets/download-algae-dark.png",revision:"8c70504a94da6e93f4ac1b27046eb939"},{url:"/assets/download-algae-dark.webp",revision:"89a79f1000ca9995a6e14cfc60fd42a9"},{url:"/assets/download-algae.png",revision:"2490f946a17ba1abe4456f0f31d850a3"},{url:"/assets/download-algae.webp",revision:"1d97c2b64cfd934481e18c49ec8e8722"},{url:"/assets/download-dark-fishes.png",revision:"537442c023e388e9e33a93c821094381"},{url:"/assets/download-dark-fishes.webp",revision:"a36ea49d16f9c4b1e2833c2f6bbc618f"},{url:"/assets/dunsky.jpeg",revision:"6af464219667bd1b7a8b05a3a3133cf4"},{url:"/assets/dunsky.webp",revision:"abb98406fd78ae7cbf1ccf61e6b0a8f2"},{url:"/assets/ecency-faq.jpg",revision:"e2d5d30d0cb4a5fc5e470c56d62ede97"},{url:"/assets/ecency-faq.webp",revision:"42faa678c7ef5854f9ed0c999f6ef7eb"},{url:"/assets/fallback.png",revision:"8713aeba6805ef460b16fa081edd1887"},{url:"/assets/fish-1.png",revision:"4386e9af02b5f60f75caa040eced9a65"},{url:"/assets/fish-1.webp",revision:"8f0eb1179c74579084353e5df5b2a74f"},{url:"/assets/fish-2.png",revision:"92ce36fc40b95aeb3475d081bba0d798"},{url:"/assets/fish-2.webp",revision:"fe0c99a9f185d8b2e94bd249e625cf27"},{url:"/assets/fish-3.png",revision:"89c59580c072f1dbf52ac03068f040f3"},{url:"/assets/fish-3.webp",revision:"b9c3a3cc1cd0329d74ddb62d3a4e4b43"},{url:"/assets/fish-4.png",revision:"b91622c6328bbba13847519e0356db62"},{url:"/assets/fish-4.webp",revision:"a404c3ef59a9581554c06188ee262419"},{url:"/assets/fish-5.png",revision:"b271e3992390713707dc08f01691fb52"},{url:"/assets/fish-5.webp",revision:"abb4e590246f17bd00a21f7b414872d3"},{url:"/assets/fish-junior.png",revision:"78924f1ba81f1f59dd9a144be923edb1"},{url:"/assets/fish-junior.webp",revision:"bcae2a76d249cad55891d24e41e73b0c"},{url:"/assets/fish-senior.png",revision:"f3327a9c9d166c9da097fcfe88f38ed3"},{url:"/assets/fish-senior.webp",revision:"c70cf25bd04d52decb151396c900dcb3"},{url:"/assets/footer-discord.svg",revision:"04238f73e8da0be200731a4cc285d00e"},{url:"/assets/footer-main-fish.png",revision:"ba3d7c5371e84bdf30f6dee4d086a156"},{url:"/assets/footer-main-fish.webp",revision:"ac45436a3109caf9f94a2cd00f681783"},{url:"/assets/footer-telegram.svg",revision:"796b996dc8082544484feb13a97aa014"},{url:"/assets/footer-twitter.svg",revision:"c44b68c3cdee7732ce516bc250f6f27c"},{url:"/assets/footer-youtube.svg",revision:"6f91ba3c2f20618d27c15bff5352aba6"},{url:"/assets/github-cover.png",revision:"5eaca17c4b526f9b352a87a5a82dbfe4"},{url:"/assets/good-karma.jpeg",revision:"a7bb11629694bd7f9bd2b16bf058bb6b"},{url:"/assets/good-karma.webp",revision:"9a449b33cf032238499916c25584f58d"},{url:"/assets/hero-algae-dark.svg",revision:"eaa27188f9a588164e731b9f4a8f8295"},{url:"/assets/hero-algae-light.svg",revision:"4efcd71e3e8f8574446eeaa7a7517e33"},{url:"/assets/hero-fishes-dark.png",revision:"f8d8e17b68e2ff1490202f8503d24770"},{url:"/assets/hero-fishes.svg",revision:"a6307454b1e0fc4bcb6d402c33a63c7f"},{url:"/assets/hive-signer.svg",revision:"579ae88263a03ea7c8c4a9ec4e8b67f7"},{url:"/assets/icon-android-white.svg",revision:"f7df8d801059a45a14d1e90864157b1f"},{url:"/assets/icon-android.png",revision:"606b1396c3fffa5dc0f1d074695fab49"},{url:"/assets/icon-android.webp",revision:"c6bd14c9917803f8f69c4557be95ad9e"},{url:"/assets/icon-apple-white.svg",revision:"e4de9f34c14e50ed4fd12847091c16d2"},{url:"/assets/icon-apple.svg",revision:"a27b1b4829e566dca6d38f7c2e6d6ba5"},{url:"/assets/icon-windows-white.svg",revision:"4553dd690e4675fc4fb2132732b1c43b"},{url:"/assets/icon-windows.svg",revision:"80669c801739c850306618a2569b423c"},{url:"/assets/illustration-decentralization.png",revision:"0ad91ae4e70f22e8be87345e73144cb3"},{url:"/assets/illustration-decentralization.webp",revision:"ed3442432df26760623ec58c715fdf43"},{url:"/assets/illustration-earn-money.png",revision:"e2a7951254764e3dabac0697d089a3c2"},{url:"/assets/illustration-earn-money.webp",revision:"58605a59b4c1f6321ef90d5ef21eac24"},{url:"/assets/illustration-hero-day.png",revision:"ca7c9fd189caa73616664823e45b737d"},{url:"/assets/illustration-hero-day.webp",revision:"66c0bb6d0864af304a4e1801c967c526"},{url:"/assets/illustration-hero.png",revision:"9e2e1a46dc78fb0635c054fcf2d27b67"},{url:"/assets/illustration-hero.webp",revision:"75c6cdf85d150e6512fd2b3d0e20e332"},{url:"/assets/illustration-open-source.png",revision:"6f20524696843277aca578db00f29e14"},{url:"/assets/illustration-open-source.webp",revision:"79bf861b3c83c7de1ac96d8a35c4827d"},{url:"/assets/illustration-true-ownership.png",revision:"005b4f456f8d341de75c8c7cb25d750c"},{url:"/assets/illustration-true-ownership.webp",revision:"a2819f44d481e3203270877dc89cf87c"},{url:"/assets/index-bg.png",revision:"0931098d955341c1458c653ef42c5bec"},{url:"/assets/keychain.png",revision:"b4a1776481ec1bce0cdcb654126ee449"},{url:"/assets/left-fishes.png",revision:"c98d0bac15e561c7e4ce226541f5ab1e"},{url:"/assets/left-fishes.webp",revision:"7e5f5cee88eafa722b9b2eadbede120d"},{url:"/assets/like.png",revision:"af5f38b521e1c06eece664d5a3f24cdd"},{url:"/assets/logo-192x192.svg",revision:"09f9b1ec26a43fedaf3c527d9992ea3b"},{url:"/assets/logo-384x384.svg",revision:"c33b1a087528562650bdc7f9bb1889b3"},{url:"/assets/logo-512x512.svg",revision:"e0eb6d6416139753e199cf627599ac40"},{url:"/assets/logo-circle-santa.svg",revision:"a08e76920a86e2749d74345d86797cc5"},{url:"/assets/logo-circle.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/assets/logo-small-transparent.png",revision:"197b6e7934149c67237a38f145dfb860"},{url:"/assets/noimage.png",revision:"66290b70590324b996aa6c841a4f6bf1"},{url:"/assets/noimage.svg",revision:"68711d71516a091f18169b2882dc6035"},{url:"/assets/notification.mp3",revision:"594e6e429f66513a2bc759fce6c1abc7"},{url:"/assets/nsfw.png",revision:"2e103d3e107e2974025b441b5fde485a"},{url:"/assets/our-history.png",revision:"730ae7e9850b787ea78d6151391ca463"},{url:"/assets/our-history.webp",revision:"f781b93801170a83acde5cf23bf538f4"},{url:"/assets/our-team.png",revision:"dc4a40a5f543e793462caf5c19d89f2f"},{url:"/assets/our-team.webp",revision:"ca3d13a54a5ba9e7e7df7af748c3a23a"},{url:"/assets/our-vision.png",revision:"acb541b415884dfce4b061ad21ce1b06"},{url:"/assets/our-vision.webp",revision:"bfe56f6816dade138c59010d69a8f83f"},{url:"/assets/phone-dark-pc.png",revision:"ba94fb9341a0303a8f6068ade064b0cb"},{url:"/assets/phone-dark-pc.webp",revision:"beef47eb0f0d9e6708e172b2138c48ab"},{url:"/assets/phone-dark-tablet.png",revision:"2358c7d62d813d3422a5af8bebb2be2e"},{url:"/assets/phone-dark-tablet.webp",revision:"c42d66f8c5c1999a648e6bb6a1a81227"},{url:"/assets/phone-download-tiny.png",revision:"0247b2bb16c64d46e4d8a73f60f4d501"},{url:"/assets/phone-download-tiny.webp",revision:"7120bd905eb5e5acbc866bd42058ba4c"},{url:"/assets/phone-download.png",revision:"54650a95d8ce20a2e03b68f0d6389201"},{url:"/assets/phone-light-pc.png",revision:"7bbef75c3da1d2a8e742b484292e6379"},{url:"/assets/phone-light-pc.webp",revision:"4a5839bf3499ef6687f1a798c683d7a1"},{url:"/assets/phone-light-tablet.png",revision:"49724acf6a25fedcd914ce0125517b8a"},{url:"/assets/phone-light-tablet.webp",revision:"7f448063c46119c5a7f0880f01b1814d"},{url:"/assets/reward.png",revision:"0faea76d5486dc7f637486da769fdad8"},{url:"/assets/rewarding-and-freespeech.png",revision:"ca1fc97612079d93de24bfb3ab6e0ea9"},{url:"/assets/rewarding-and-freespeech.svg",revision:"2df6f251431f9f36e1815e5b90ce1f8a"},{url:"/assets/signup.png",revision:"1ceacafe5770ed4f53829de572c9d219"},{url:"/assets/svg.tsx",revision:"2f1d7fbc25f8166e5b49e8997a803842"},{url:"/assets/talhasch.jpeg",revision:"9abb1df5ddbfd25e7fd72b0a4e202eff"},{url:"/assets/talhasch.webp",revision:"6e7e49e9ba1da71ecf46f0bb17c986c3"},{url:"/assets/thumbnail-play.jpg",revision:"99d63c99267bf2e74e95d92bfb00a0ea"},{url:"/assets/writer-thinking.png",revision:"03deb40c2a35de193e78c0e0d3d72a0e"},{url:"/assets/writer.png",revision:"00feab482a3f5309cce64ce9ca64041a"},{url:"/firebase-messaging-sw.js",revision:"db67bd2ec72e44b813ccabeb1ebb113f"},{url:"/manifest.json",revision:"3547aead3cd7bbd2b2ab3b7e23355d84"},{url:"/next.svg",revision:"8e061864f388b47f33a1c3780831193e"},{url:"/vercel.svg",revision:"61c6b19abff40ea7acd577be818f3976"}],{ignoreURLParametersMatching:[]}),e.cleanupOutdatedCaches(),e.registerRoute("/",new e.NetworkFirst({cacheName:"start-url",plugins:[{cacheWillUpdate:async({request:e,response:s,event:a,state:c})=>s&&"opaqueredirect"===s.type?new Response(s.body,{status:200,statusText:"OK",headers:s.headers}):s}]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:gstatic)\.com\/.*/i,new e.CacheFirst({cacheName:"google-fonts-webfonts",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:31536e3})]}),"GET"),e.registerRoute(/^https:\/\/fonts\.(?:googleapis)\.com\/.*/i,new e.StaleWhileRevalidate({cacheName:"google-fonts-stylesheets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:eot|otf|ttc|ttf|woff|woff2|font.css)$/i,new e.StaleWhileRevalidate({cacheName:"static-font-assets",plugins:[new e.ExpirationPlugin({maxEntries:4,maxAgeSeconds:604800})]}),"GET"),e.registerRoute(/\.(?:jpg|jpeg|gif|png|svg|ico|webp)$/i,new e.StaleWhileRevalidate({cacheName:"static-image-assets",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/image\?url=.+$/i,new e.StaleWhileRevalidate({cacheName:"next-image",plugins:[new e.ExpirationPlugin({maxEntries:64,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp3|wav|ogg)$/i,new e.CacheFirst({cacheName:"static-audio-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:mp4)$/i,new e.CacheFirst({cacheName:"static-video-assets",plugins:[new e.RangeRequestsPlugin,new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:js)$/i,new e.StaleWhileRevalidate({cacheName:"static-js-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:css|less)$/i,new e.StaleWhileRevalidate({cacheName:"static-style-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\/_next\/data\/.+\/.+\.json$/i,new e.StaleWhileRevalidate({cacheName:"next-data",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute(/\.(?:json|xml|csv)$/i,new e.NetworkFirst({cacheName:"static-data-assets",plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;const s=e.pathname;return!s.startsWith("/api/auth/")&&!!s.startsWith("/api/")}),new e.NetworkFirst({cacheName:"apis",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:16,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>{if(!(self.origin===e.origin))return!1;return!e.pathname.startsWith("/api/")}),new e.NetworkFirst({cacheName:"others",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:86400})]}),"GET"),e.registerRoute((({url:e})=>!(self.origin===e.origin)),new e.NetworkFirst({cacheName:"cross-origin",networkTimeoutSeconds:10,plugins:[new e.ExpirationPlugin({maxEntries:32,maxAgeSeconds:3600})]}),"GET")})); +//# sourceMappingURL=sw.js.map diff --git a/public/workbox-9b4d2a02.js b/public/workbox-9b4d2a02.js index 0b5136fb32..5ec876592f 100644 --- a/public/workbox-9b4d2a02.js +++ b/public/workbox-9b4d2a02.js @@ -1 +1,2 @@ define(["exports"],(function(t){"use strict";try{self["workbox:core:6.6.0"]&&_()}catch(t){}const e=(t,...e)=>{let s=t;return e.length>0&&(s+=` :: ${JSON.stringify(e)}`),s};class s extends Error{constructor(t,s){super(e(t,s)),this.name=t,this.details=s}}try{self["workbox:routing:6.6.0"]&&_()}catch(t){}const n=t=>t&&"object"==typeof t?t:{handle:t};class r{constructor(t,e,s="GET"){this.handler=n(e),this.match=t,this.method=s}setCatchHandler(t){this.catchHandler=n(t)}}class i extends r{constructor(t,e,s){super((({url:e})=>{const s=t.exec(e.href);if(s&&(e.origin===location.origin||0===s.index))return s.slice(1)}),e,s)}}class a{constructor(){this.t=new Map,this.i=new Map}get routes(){return this.t}addFetchListener(){self.addEventListener("fetch",(t=>{const{request:e}=t,s=this.handleRequest({request:e,event:t});s&&t.respondWith(s)}))}addCacheListener(){self.addEventListener("message",(t=>{if(t.data&&"CACHE_URLS"===t.data.type){const{payload:e}=t.data,s=Promise.all(e.urlsToCache.map((e=>{"string"==typeof e&&(e=[e]);const s=new Request(...e);return this.handleRequest({request:s,event:t})})));t.waitUntil(s),t.ports&&t.ports[0]&&s.then((()=>t.ports[0].postMessage(!0)))}}))}handleRequest({request:t,event:e}){const s=new URL(t.url,location.href);if(!s.protocol.startsWith("http"))return;const n=s.origin===location.origin,{params:r,route:i}=this.findMatchingRoute({event:e,request:t,sameOrigin:n,url:s});let a=i&&i.handler;const o=t.method;if(!a&&this.i.has(o)&&(a=this.i.get(o)),!a)return;let c;try{c=a.handle({url:s,request:t,event:e,params:r})}catch(t){c=Promise.reject(t)}const h=i&&i.catchHandler;return c instanceof Promise&&(this.o||h)&&(c=c.catch((async n=>{if(h)try{return await h.handle({url:s,request:t,event:e,params:r})}catch(t){t instanceof Error&&(n=t)}if(this.o)return this.o.handle({url:s,request:t,event:e});throw n}))),c}findMatchingRoute({url:t,sameOrigin:e,request:s,event:n}){const r=this.t.get(s.method)||[];for(const i of r){let r;const a=i.match({url:t,sameOrigin:e,request:s,event:n});if(a)return r=a,(Array.isArray(r)&&0===r.length||a.constructor===Object&&0===Object.keys(a).length||"boolean"==typeof a)&&(r=void 0),{route:i,params:r}}return{}}setDefaultHandler(t,e="GET"){this.i.set(e,n(t))}setCatchHandler(t){this.o=n(t)}registerRoute(t){this.t.has(t.method)||this.t.set(t.method,[]),this.t.get(t.method).push(t)}unregisterRoute(t){if(!this.t.has(t.method))throw new s("unregister-route-but-not-found-with-method",{method:t.method});const e=this.t.get(t.method).indexOf(t);if(!(e>-1))throw new s("unregister-route-route-not-registered");this.t.get(t.method).splice(e,1)}}let o;const c=()=>(o||(o=new a,o.addFetchListener(),o.addCacheListener()),o);function h(t,e,n){let a;if("string"==typeof t){const s=new URL(t,location.href);a=new r((({url:t})=>t.href===s.href),e,n)}else if(t instanceof RegExp)a=new i(t,e,n);else if("function"==typeof t)a=new r(t,e,n);else{if(!(t instanceof r))throw new s("unsupported-route-type",{moduleName:"workbox-routing",funcName:"registerRoute",paramName:"capture"});a=t}return c().registerRoute(a),a}try{self["workbox:strategies:6.6.0"]&&_()}catch(t){}const u={cacheWillUpdate:async({response:t})=>200===t.status||0===t.status?t:null},l={googleAnalytics:"googleAnalytics",precache:"precache-v2",prefix:"workbox",runtime:"runtime",suffix:"undefined"!=typeof registration?registration.scope:""},f=t=>[l.prefix,t,l.suffix].filter((t=>t&&t.length>0)).join("-"),w=t=>t||f(l.precache),d=t=>t||f(l.runtime);function p(t,e){const s=new URL(t);for(const t of e)s.searchParams.delete(t);return s.href}class y{constructor(){this.promise=new Promise(((t,e)=>{this.resolve=t,this.reject=e}))}}const g=new Set;function m(t){return"string"==typeof t?new Request(t):t}class R{constructor(t,e){this.h={},Object.assign(this,e),this.event=e.event,this.u=t,this.l=new y,this.p=[],this.m=[...t.plugins],this.R=new Map;for(const t of this.m)this.R.set(t,{});this.event.waitUntil(this.l.promise)}async fetch(t){const{event:e}=this;let n=m(t);if("navigate"===n.mode&&e instanceof FetchEvent&&e.preloadResponse){const t=await e.preloadResponse;if(t)return t}const r=this.hasCallback("fetchDidFail")?n.clone():null;try{for(const t of this.iterateCallbacks("requestWillFetch"))n=await t({request:n.clone(),event:e})}catch(t){if(t instanceof Error)throw new s("plugin-error-request-will-fetch",{thrownErrorMessage:t.message})}const i=n.clone();try{let t;t=await fetch(n,"navigate"===n.mode?void 0:this.u.fetchOptions);for(const s of this.iterateCallbacks("fetchDidSucceed"))t=await s({event:e,request:i,response:t});return t}catch(t){throw r&&await this.runCallbacks("fetchDidFail",{error:t,event:e,originalRequest:r.clone(),request:i.clone()}),t}}async fetchAndCachePut(t){const e=await this.fetch(t),s=e.clone();return this.waitUntil(this.cachePut(t,s)),e}async cacheMatch(t){const e=m(t);let s;const{cacheName:n,matchOptions:r}=this.u,i=await this.getCacheKey(e,"read"),a=Object.assign(Object.assign({},r),{cacheName:n});s=await caches.match(i,a);for(const t of this.iterateCallbacks("cachedResponseWillBeUsed"))s=await t({cacheName:n,matchOptions:r,cachedResponse:s,request:i,event:this.event})||void 0;return s}async cachePut(t,e){const n=m(t);var r;await(r=0,new Promise((t=>setTimeout(t,r))));const i=await this.getCacheKey(n,"write");if(!e)throw new s("cache-put-with-no-response",{url:(a=i.url,new URL(String(a),location.href).href.replace(new RegExp(`^${location.origin}`),""))});var a;const o=await this.v(e);if(!o)return!1;const{cacheName:c,matchOptions:h}=this.u,u=await self.caches.open(c),l=this.hasCallback("cacheDidUpdate"),f=l?await async function(t,e,s,n){const r=p(e.url,s);if(e.url===r)return t.match(e,n);const i=Object.assign(Object.assign({},n),{ignoreSearch:!0}),a=await t.keys(e,i);for(const e of a)if(r===p(e.url,s))return t.match(e,n)}(u,i.clone(),["__WB_REVISION__"],h):null;try{await u.put(i,l?o.clone():o)}catch(t){if(t instanceof Error)throw"QuotaExceededError"===t.name&&await async function(){for(const t of g)await t()}(),t}for(const t of this.iterateCallbacks("cacheDidUpdate"))await t({cacheName:c,oldResponse:f,newResponse:o.clone(),request:i,event:this.event});return!0}async getCacheKey(t,e){const s=`${t.url} | ${e}`;if(!this.h[s]){let n=t;for(const t of this.iterateCallbacks("cacheKeyWillBeUsed"))n=m(await t({mode:e,request:n,event:this.event,params:this.params}));this.h[s]=n}return this.h[s]}hasCallback(t){for(const e of this.u.plugins)if(t in e)return!0;return!1}async runCallbacks(t,e){for(const s of this.iterateCallbacks(t))await s(e)}*iterateCallbacks(t){for(const e of this.u.plugins)if("function"==typeof e[t]){const s=this.R.get(e),n=n=>{const r=Object.assign(Object.assign({},n),{state:s});return e[t](r)};yield n}}waitUntil(t){return this.p.push(t),t}async doneWaiting(){let t;for(;t=this.p.shift();)await t}destroy(){this.l.resolve(null)}async v(t){let e=t,s=!1;for(const t of this.iterateCallbacks("cacheWillUpdate"))if(e=await t({request:this.request,response:e,event:this.event})||void 0,s=!0,!e)break;return s||e&&200!==e.status&&(e=void 0),e}}class v{constructor(t={}){this.cacheName=d(t.cacheName),this.plugins=t.plugins||[],this.fetchOptions=t.fetchOptions,this.matchOptions=t.matchOptions}handle(t){const[e]=this.handleAll(t);return e}handleAll(t){t instanceof FetchEvent&&(t={event:t,request:t.request});const e=t.event,s="string"==typeof t.request?new Request(t.request):t.request,n="params"in t?t.params:void 0,r=new R(this,{event:e,request:s,params:n}),i=this.q(r,s,e);return[i,this.D(i,r,s,e)]}async q(t,e,n){let r;await t.runCallbacks("handlerWillStart",{event:n,request:e});try{if(r=await this.U(e,t),!r||"error"===r.type)throw new s("no-response",{url:e.url})}catch(s){if(s instanceof Error)for(const i of t.iterateCallbacks("handlerDidError"))if(r=await i({error:s,event:n,request:e}),r)break;if(!r)throw s}for(const s of t.iterateCallbacks("handlerWillRespond"))r=await s({event:n,request:e,response:r});return r}async D(t,e,s,n){let r,i;try{r=await t}catch(i){}try{await e.runCallbacks("handlerDidRespond",{event:n,request:s,response:r}),await e.doneWaiting()}catch(t){t instanceof Error&&(i=t)}if(await e.runCallbacks("handlerDidComplete",{event:n,request:s,response:r,error:i}),e.destroy(),i)throw i}}function b(t){t.then((()=>{}))}function q(){return q=Object.assign?Object.assign.bind():function(t){for(var e=1;ee.some((e=>t instanceof e));let U,x;const L=new WeakMap,I=new WeakMap,C=new WeakMap,E=new WeakMap,N=new WeakMap;let O={get(t,e,s){if(t instanceof IDBTransaction){if("done"===e)return I.get(t);if("objectStoreNames"===e)return t.objectStoreNames||C.get(t);if("store"===e)return s.objectStoreNames[1]?void 0:s.objectStore(s.objectStoreNames[0])}return B(t[e])},set:(t,e,s)=>(t[e]=s,!0),has:(t,e)=>t instanceof IDBTransaction&&("done"===e||"store"===e)||e in t};function T(t){return t!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(x||(x=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply(P(this),e),B(L.get(this))}:function(...e){return B(t.apply(P(this),e))}:function(e,...s){const n=t.call(P(this),e,...s);return C.set(n,e.sort?e.sort():[e]),B(n)}}function k(t){return"function"==typeof t?T(t):(t instanceof IDBTransaction&&function(t){if(I.has(t))return;const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("complete",r),t.removeEventListener("error",i),t.removeEventListener("abort",i)},r=()=>{e(),n()},i=()=>{s(t.error||new DOMException("AbortError","AbortError")),n()};t.addEventListener("complete",r),t.addEventListener("error",i),t.addEventListener("abort",i)}));I.set(t,e)}(t),D(t,U||(U=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(t,O):t)}function B(t){if(t instanceof IDBRequest)return function(t){const e=new Promise(((e,s)=>{const n=()=>{t.removeEventListener("success",r),t.removeEventListener("error",i)},r=()=>{e(B(t.result)),n()},i=()=>{s(t.error),n()};t.addEventListener("success",r),t.addEventListener("error",i)}));return e.then((e=>{e instanceof IDBCursor&&L.set(e,t)})).catch((()=>{})),N.set(e,t),e}(t);if(E.has(t))return E.get(t);const e=k(t);return e!==t&&(E.set(t,e),N.set(e,t)),e}const P=t=>N.get(t);const M=["get","getKey","getAll","getAllKeys","count"],W=["put","add","delete","clear"],j=new Map;function S(t,e){if(!(t instanceof IDBDatabase)||e in t||"string"!=typeof e)return;if(j.get(e))return j.get(e);const s=e.replace(/FromIndex$/,""),n=e!==s,r=W.includes(s);if(!(s in(n?IDBIndex:IDBObjectStore).prototype)||!r&&!M.includes(s))return;const i=async function(t,...e){const i=this.transaction(t,r?"readwrite":"readonly");let a=i.store;return n&&(a=a.index(e.shift())),(await Promise.all([a[s](...e),r&&i.done]))[0]};return j.set(e,i),i}O=(t=>q({},t,{get:(e,s,n)=>S(e,s)||t.get(e,s,n),has:(e,s)=>!!S(e,s)||t.has(e,s)}))(O);try{self["workbox:expiration:6.6.0"]&&_()}catch(t){}const K="cache-entries",A=t=>{const e=new URL(t,location.href);return e.hash="",e.href};class F{constructor(t){this._=null,this.L=t}I(t){const e=t.createObjectStore(K,{keyPath:"id"});e.createIndex("cacheName","cacheName",{unique:!1}),e.createIndex("timestamp","timestamp",{unique:!1})}C(t){this.I(t),this.L&&function(t,{blocked:e}={}){const s=indexedDB.deleteDatabase(t);e&&s.addEventListener("blocked",(t=>e(t.oldVersion,t))),B(s).then((()=>{}))}(this.L)}async setTimestamp(t,e){const s={url:t=A(t),timestamp:e,cacheName:this.L,id:this.N(t)},n=(await this.getDb()).transaction(K,"readwrite",{durability:"relaxed"});await n.store.put(s),await n.done}async getTimestamp(t){const e=await this.getDb(),s=await e.get(K,this.N(t));return null==s?void 0:s.timestamp}async expireEntries(t,e){const s=await this.getDb();let n=await s.transaction(K).store.index("timestamp").openCursor(null,"prev");const r=[];let i=0;for(;n;){const s=n.value;s.cacheName===this.L&&(t&&s.timestamp=e?r.push(n.value):i++),n=await n.continue()}const a=[];for(const t of r)await s.delete(K,t.id),a.push(t.url);return a}N(t){return this.L+"|"+A(t)}async getDb(){return this._||(this._=await function(t,e,{blocked:s,upgrade:n,blocking:r,terminated:i}={}){const a=indexedDB.open(t,e),o=B(a);return n&&a.addEventListener("upgradeneeded",(t=>{n(B(a.result),t.oldVersion,t.newVersion,B(a.transaction),t)})),s&&a.addEventListener("blocked",(t=>s(t.oldVersion,t.newVersion,t))),o.then((t=>{i&&t.addEventListener("close",(()=>i())),r&&t.addEventListener("versionchange",(t=>r(t.oldVersion,t.newVersion,t)))})).catch((()=>{})),o}("workbox-expiration",1,{upgrade:this.C.bind(this)})),this._}}class H{constructor(t,e={}){this.O=!1,this.T=!1,this.k=e.maxEntries,this.B=e.maxAgeSeconds,this.P=e.matchOptions,this.L=t,this.M=new F(t)}async expireEntries(){if(this.O)return void(this.T=!0);this.O=!0;const t=this.B?Date.now()-1e3*this.B:0,e=await this.M.expireEntries(t,this.k),s=await self.caches.open(this.L);for(const t of e)await s.delete(t,this.P);this.O=!1,this.T&&(this.T=!1,b(this.expireEntries()))}async updateTimestamp(t){await this.M.setTimestamp(t,Date.now())}async isURLExpired(t){if(this.B){const e=await this.M.getTimestamp(t),s=Date.now()-1e3*this.B;return void 0===e||er||e&&e<0)throw new s("range-not-satisfiable",{size:r,end:n,start:e});let i,a;return void 0!==e&&void 0!==n?(i=e,a=n+1):void 0!==e&&void 0===n?(i=e,a=r):void 0!==n&&void 0===e&&(i=r-n,a=r),{start:i,end:a}}(i,r.start,r.end),o=i.slice(a.start,a.end),c=o.size,h=new Response(o,{status:206,statusText:"Partial Content",headers:e.headers});return h.headers.set("Content-Length",String(c)),h.headers.set("Content-Range",`bytes ${a.start}-${a.end-1}/${i.size}`),h}catch(t){return new Response("",{status:416,statusText:"Range Not Satisfiable"})}}function z(t,e){const s=e();return t.waitUntil(s),s}try{self["workbox:precaching:6.6.0"]&&_()}catch(t){}function G(t){if(!t)throw new s("add-to-cache-list-unexpected-type",{entry:t});if("string"==typeof t){const e=new URL(t,location.href);return{cacheKey:e.href,url:e.href}}const{revision:e,url:n}=t;if(!n)throw new s("add-to-cache-list-unexpected-type",{entry:t});if(!e){const t=new URL(n,location.href);return{cacheKey:t.href,url:t.href}}const r=new URL(n,location.href),i=new URL(n,location.href);return r.searchParams.set("__WB_REVISION__",e),{cacheKey:r.href,url:i.href}}class V{constructor(){this.updatedURLs=[],this.notUpdatedURLs=[],this.handlerWillStart=async({request:t,state:e})=>{e&&(e.originalRequest=t)},this.cachedResponseWillBeUsed=async({event:t,state:e,cachedResponse:s})=>{if("install"===t.type&&e&&e.originalRequest&&e.originalRequest instanceof Request){const t=e.originalRequest.url;s?this.notUpdatedURLs.push(t):this.updatedURLs.push(t)}return s}}}class J{constructor({precacheController:t}){this.cacheKeyWillBeUsed=async({request:t,params:e})=>{const s=(null==e?void 0:e.cacheKey)||this.W.getCacheKeyForURL(t.url);return s?new Request(s,{headers:t.headers}):t},this.W=t}}let Q,X;async function Y(t,e){let n=null;if(t.url){n=new URL(t.url).origin}if(n!==self.location.origin)throw new s("cross-origin-copy-response",{origin:n});const r=t.clone(),i={headers:new Headers(r.headers),status:r.status,statusText:r.statusText},a=e?e(i):i,o=function(){if(void 0===Q){const t=new Response("");if("body"in t)try{new Response(t.body),Q=!0}catch(t){Q=!1}Q=!1}return Q}()?r.body:await r.blob();return new Response(o,a)}class Z extends v{constructor(t={}){t.cacheName=w(t.cacheName),super(t),this.j=!1!==t.fallbackToNetwork,this.plugins.push(Z.copyRedirectedCacheableResponsesPlugin)}async U(t,e){const s=await e.cacheMatch(t);return s||(e.event&&"install"===e.event.type?await this.S(t,e):await this.K(t,e))}async K(t,e){let n;const r=e.params||{};if(!this.j)throw new s("missing-precache-entry",{cacheName:this.cacheName,url:t.url});{const s=r.integrity,i=t.integrity,a=!i||i===s;n=await e.fetch(new Request(t,{integrity:"no-cors"!==t.mode?i||s:void 0})),s&&a&&"no-cors"!==t.mode&&(this.A(),await e.cachePut(t,n.clone()))}return n}async S(t,e){this.A();const n=await e.fetch(t);if(!await e.cachePut(t,n.clone()))throw new s("bad-precaching-response",{url:t.url,status:n.status});return n}A(){let t=null,e=0;for(const[s,n]of this.plugins.entries())n!==Z.copyRedirectedCacheableResponsesPlugin&&(n===Z.defaultPrecacheCacheabilityPlugin&&(t=s),n.cacheWillUpdate&&e++);0===e?this.plugins.push(Z.defaultPrecacheCacheabilityPlugin):e>1&&null!==t&&this.plugins.splice(t,1)}}Z.defaultPrecacheCacheabilityPlugin={cacheWillUpdate:async({response:t})=>!t||t.status>=400?null:t},Z.copyRedirectedCacheableResponsesPlugin={cacheWillUpdate:async({response:t})=>t.redirected?await Y(t):t};class tt{constructor({cacheName:t,plugins:e=[],fallbackToNetwork:s=!0}={}){this.F=new Map,this.H=new Map,this.$=new Map,this.u=new Z({cacheName:w(t),plugins:[...e,new J({precacheController:this})],fallbackToNetwork:s}),this.install=this.install.bind(this),this.activate=this.activate.bind(this)}get strategy(){return this.u}precache(t){this.addToCacheList(t),this.G||(self.addEventListener("install",this.install),self.addEventListener("activate",this.activate),this.G=!0)}addToCacheList(t){const e=[];for(const n of t){"string"==typeof n?e.push(n):n&&void 0===n.revision&&e.push(n.url);const{cacheKey:t,url:r}=G(n),i="string"!=typeof n&&n.revision?"reload":"default";if(this.F.has(r)&&this.F.get(r)!==t)throw new s("add-to-cache-list-conflicting-entries",{firstEntry:this.F.get(r),secondEntry:t});if("string"!=typeof n&&n.integrity){if(this.$.has(t)&&this.$.get(t)!==n.integrity)throw new s("add-to-cache-list-conflicting-integrities",{url:r});this.$.set(t,n.integrity)}if(this.F.set(r,t),this.H.set(r,i),e.length>0){const t=`Workbox is precaching URLs without revision info: ${e.join(", ")}\nThis is generally NOT safe. Learn more at https://bit.ly/wb-precache`;console.warn(t)}}}install(t){return z(t,(async()=>{const e=new V;this.strategy.plugins.push(e);for(const[e,s]of this.F){const n=this.$.get(s),r=this.H.get(e),i=new Request(e,{integrity:n,cache:r,credentials:"same-origin"});await Promise.all(this.strategy.handleAll({params:{cacheKey:s},request:i,event:t}))}const{updatedURLs:s,notUpdatedURLs:n}=e;return{updatedURLs:s,notUpdatedURLs:n}}))}activate(t){return z(t,(async()=>{const t=await self.caches.open(this.strategy.cacheName),e=await t.keys(),s=new Set(this.F.values()),n=[];for(const r of e)s.has(r.url)||(await t.delete(r),n.push(r.url));return{deletedURLs:n}}))}getURLsToCacheKeys(){return this.F}getCachedURLs(){return[...this.F.keys()]}getCacheKeyForURL(t){const e=new URL(t,location.href);return this.F.get(e.href)}getIntegrityForCacheKey(t){return this.$.get(t)}async matchPrecache(t){const e=t instanceof Request?t.url:t,s=this.getCacheKeyForURL(e);if(s){return(await self.caches.open(this.strategy.cacheName)).match(s)}}createHandlerBoundToURL(t){const e=this.getCacheKeyForURL(t);if(!e)throw new s("non-precached-url",{url:t});return s=>(s.request=new Request(t),s.params=Object.assign({cacheKey:e},s.params),this.strategy.handle(s))}}const et=()=>(X||(X=new tt),X);class st extends r{constructor(t,e){super((({request:s})=>{const n=t.getURLsToCacheKeys();for(const r of function*(t,{ignoreURLParametersMatching:e=[/^utm_/,/^fbclid$/],directoryIndex:s="index.html",cleanURLs:n=!0,urlManipulation:r}={}){const i=new URL(t,location.href);i.hash="",yield i.href;const a=function(t,e=[]){for(const s of[...t.searchParams.keys()])e.some((t=>t.test(s)))&&t.searchParams.delete(s);return t}(i,e);if(yield a.href,s&&a.pathname.endsWith("/")){const t=new URL(a.href);t.pathname+=s,yield t.href}if(n){const t=new URL(a.href);t.pathname+=".html",yield t.href}if(r){const t=r({url:i});for(const e of t)yield e.href}}(s.url,e)){const e=n.get(r);if(e){return{cacheKey:e,integrity:t.getIntegrityForCacheKey(e)}}}}),t.strategy)}}t.CacheFirst=class extends v{async U(t,e){let n,r=await e.cacheMatch(t);if(!r)try{r=await e.fetchAndCachePut(t)}catch(t){t instanceof Error&&(n=t)}if(!r)throw new s("no-response",{url:t.url,error:n});return r}},t.ExpirationPlugin=class{constructor(t={}){this.cachedResponseWillBeUsed=async({event:t,request:e,cacheName:s,cachedResponse:n})=>{if(!n)return null;const r=this.V(n),i=this.J(s);b(i.expireEntries());const a=i.updateTimestamp(e.url);if(t)try{t.waitUntil(a)}catch(t){}return r?n:null},this.cacheDidUpdate=async({cacheName:t,request:e})=>{const s=this.J(t);await s.updateTimestamp(e.url),await s.expireEntries()},this.X=t,this.B=t.maxAgeSeconds,this.Y=new Map,t.purgeOnQuotaError&&function(t){g.add(t)}((()=>this.deleteCacheAndMetadata()))}J(t){if(t===d())throw new s("expire-custom-caches-only");let e=this.Y.get(t);return e||(e=new H(t,this.X),this.Y.set(t,e)),e}V(t){if(!this.B)return!0;const e=this.Z(t);if(null===e)return!0;return e>=Date.now()-1e3*this.B}Z(t){if(!t.headers.has("date"))return null;const e=t.headers.get("date"),s=new Date(e).getTime();return isNaN(s)?null:s}async deleteCacheAndMetadata(){for(const[t,e]of this.Y)await self.caches.delete(t),await e.delete();this.Y=new Map}},t.NetworkFirst=class extends v{constructor(t={}){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u),this.tt=t.networkTimeoutSeconds||0}async U(t,e){const n=[],r=[];let i;if(this.tt){const{id:s,promise:a}=this.et({request:t,logs:n,handler:e});i=s,r.push(a)}const a=this.st({timeoutId:i,request:t,logs:n,handler:e});r.push(a);const o=await e.waitUntil((async()=>await e.waitUntil(Promise.race(r))||await a)());if(!o)throw new s("no-response",{url:t.url});return o}et({request:t,logs:e,handler:s}){let n;return{promise:new Promise((e=>{n=setTimeout((async()=>{e(await s.cacheMatch(t))}),1e3*this.tt)})),id:n}}async st({timeoutId:t,request:e,logs:s,handler:n}){let r,i;try{i=await n.fetchAndCachePut(e)}catch(t){t instanceof Error&&(r=t)}return t&&clearTimeout(t),!r&&i||(i=await n.cacheMatch(e)),i}},t.RangeRequestsPlugin=class{constructor(){this.cachedResponseWillBeUsed=async({request:t,cachedResponse:e})=>e&&t.headers.has("range")?await $(t,e):e}},t.StaleWhileRevalidate=class extends v{constructor(t={}){super(t),this.plugins.some((t=>"cacheWillUpdate"in t))||this.plugins.unshift(u)}async U(t,e){const n=e.fetchAndCachePut(t).catch((()=>{}));e.waitUntil(n);let r,i=await e.cacheMatch(t);if(i);else try{i=await n}catch(t){t instanceof Error&&(r=t)}if(!i)throw new s("no-response",{url:t.url,error:r});return i}},t.cleanupOutdatedCaches=function(){self.addEventListener("activate",(t=>{const e=w();t.waitUntil((async(t,e="-precache-")=>{const s=(await self.caches.keys()).filter((s=>s.includes(e)&&s.includes(self.registration.scope)&&s!==t));return await Promise.all(s.map((t=>self.caches.delete(t)))),s})(e).then((t=>{})))}))},t.clientsClaim=function(){self.addEventListener("activate",(()=>self.clients.claim()))},t.precacheAndRoute=function(t,e){!function(t){et().precache(t)}(t),function(t){const e=et();h(new st(e,t))}(e)},t.registerRoute=h})); +//# sourceMappingURL=workbox-9b4d2a02.js.map diff --git a/src/app/[...slugs]/_components/community-cover/index.tsx b/src/app/[...slugs]/_components/community-cover/index.tsx index 264f93384c..f9d0d8bd28 100644 --- a/src/app/[...slugs]/_components/community-cover/index.tsx +++ b/src/app/[...slugs]/_components/community-cover/index.tsx @@ -49,7 +49,7 @@ export function CommunityCover({ community, account }: Props) { [community.num_authors] ); const canUpdateCoverImage = useMemo( - () => activeUser && !!users.find((x) => x.username === community.name), + () => activeUser && !!users.find((x: { username: string }) => x.username === community.name), [activeUser, users, community.name] ); diff --git a/src/core/global-store/initialization/server-init.ts b/src/core/global-store/initialization/server-init.ts index 270783377c..6922e53c73 100644 --- a/src/core/global-store/initialization/server-init.ts +++ b/src/core/global-store/initialization/server-init.ts @@ -2,7 +2,6 @@ import { createStore } from "zustand"; import { combine } from "zustand/middleware"; import { INITIAL_STATE } from "@/core/global-store/initialization/initial-state"; import { createUiActions } from "@/core/global-store/modules/ui-module"; -import { createSubscriptionsActions } from "@/core/global-store/modules/subscriptions-module"; import { createGlobalActions } from "@/core/global-store/modules/global-module"; import { createUsersActions } from "@/core/global-store/modules/users-module"; import { createAuthenticationActions } from "@/core/global-store/modules/authentication-module"; @@ -11,7 +10,6 @@ import { createNotificationsActions } from "@/core/global-store/modules/notifica type FINAL_STATE = typeof INITIAL_STATE & ReturnType & - ReturnType & ReturnType & ReturnType & ReturnType &