From faa79c9aa2968813e5dbb2868f3c86a866a5e981 Mon Sep 17 00:00:00 2001 From: Matias Date: Wed, 3 Jul 2024 20:50:21 -0300 Subject: [PATCH 001/129] feat(first implmentation): - Add `ProposalCardContent` component at `ProposalCard` to handle dynammic views, data and styles - Render `ProposalCardContent` based on editView state --- apps/web/components/ProposalCard.tsx | 242 ++++++++++++++++----------- apps/web/components/Proposals.tsx | 2 +- 2 files changed, 142 insertions(+), 102 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index e78fd7261..5ceecb060 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useEffect } from "react"; -import { Badge } from "./Badge"; -import { Button } from "./Button"; +import { Badge, Button, Card, Statistic } from "@/components"; import Link from "next/link"; import { usePathname } from "next/navigation"; import { ProposalInputItem, ProposalTypeVoter } from "./Proposals"; @@ -23,6 +22,8 @@ import { usePubSubContext } from "@/contexts/pubsub.context"; import { chainDataMap } from "@/configs/chainServer"; import { LightCVStrategy, poolTypes } from "@/types"; import { getProposals } from "@/actions/getProposals"; +import { DisplayNumber } from "./DisplayNumber"; +import { InformationCircleIcon } from "@heroicons/react/24/outline"; type ProposalCard = { proposalData: NonNullable>>[0]; @@ -57,7 +58,8 @@ export function ProposalCard({ inputHandler, triggerRenderProposals, }: ProposalCard) { - const { title, id, proposalNumber, proposalStatus } = proposalData; + const { title, id, proposalNumber, proposalStatus, requestedAmount } = + proposalData; const pathname = usePathname(); const { publish } = usePubSubContext(); @@ -128,110 +130,148 @@ export function ProposalCard({ triggerRenderProposals(); }, [distributeTxConfirmationHash]); - return ( -
-
-
-

{title}

- ID {proposalNumber} -
- -
- - {/* Button to test distribute */} - {!isEditView && poolTypes[proposalData.type] == "funding" && ( - - )} - <> - - - - -
-
- {isEditView && ( -
-
-
- inputHandler(i, Number(e.target.value))} - /> -
- {[...Array(21)].map((_, i) => ( - - | - - ))} +
+

{title}

+
ID {proposalNumber}
-
-

- {Number( - (inputData?.value * 100) / memberActivatedPoints, - ).toFixed(2)} - % -

-
-
-
- {inputData?.value < stakedFilter?.value ? ( -

- Removing to - - {calcPoolWeightUsed( - calculatePercentage( - inputData?.value ?? 0, - memberActivatedPoints, - ), - )} - - % of pool weight -

- ) : ( -

- Assigning - - {calcPoolWeightUsed( - calculatePercentage( - inputData?.value ?? 0, - memberActivatedPoints, - ), +

+ + {!isAllocationMode && ( + <> + } + count={formatUnits(requestedAmount, 18)} + > + {stakedFilter?.value > 0 ? ( +
+
Your allocation
+
+ {" "} + {calcPoolWeightUsed( + calculatePercentage( + inputData?.value ?? 0, + memberActivatedPoints, + ), + )}{" "} + % +
+
+ {" "} + {Number( + (inputData?.value * 100) / memberActivatedPoints, + ).toFixed(2)}{" "} + % of you gorvernance weight +
+
+ ) : ( +

+ You have not allocate pool weight yet +

)} - - % of pool weight -

- )} + + )} +
+ + {isEditView && ( +
+
+
+ inputHandler(i, Number(e.target.value))} + /> +
+ {[...Array(21)].map((_, i) => ( + + | + + ))} +
+
+
+

+ {Number( + (inputData?.value * 100) / memberActivatedPoints, + ).toFixed(2)} + % +

+
+
+ {/*
+ {inputData?.value < stakedFilter?.value ? ( +

+ Removing to + + {calcPoolWeightUsed( + calculatePercentage( + inputData?.value ?? 0, + memberActivatedPoints, + ), + )} + + % of pool weight +

+ ) : ( +

+ Assigning + + {calcPoolWeightUsed( + calculatePercentage( + inputData?.value ?? 0, + memberActivatedPoints, + ), + )} + + % of pool weight +

+ )} +
*/} +
+ )}
+ + ); + }; + + return ( + <> + {isEditView ? ( + + ) : ( + + + )} -
+ ); } + +//
+//
diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 51057bdd7..53ab540d7 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -430,7 +430,7 @@ export function Proposals({
-
+
{proposals?.map((proposalData, i) => ( From e7b735226ea4226b9dcf1c8357237c3c8d78ccba Mon Sep 17 00:00:00 2001 From: Matias Date: Thu, 4 Jul 2024 14:44:56 -0300 Subject: [PATCH 002/129] feat(Proposal component): add new layout and structure to handle pool allocation weight - create `UserAllocationStats` to manage user voting power allocation - add minor changes to `ProposalContent` --- apps/web/components/ProposalCard.tsx | 4 +- apps/web/components/Proposals.tsx | 88 ++++++++++++++++++++-------- 2 files changed, 67 insertions(+), 25 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 5ceecb060..96bf7926b 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -142,7 +142,7 @@ export function ProposalCard({ >

{title}

@@ -150,7 +150,7 @@ export function ProposalCard({
{!isAllocationMode && ( diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 53ab540d7..98b2c13fe 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -368,6 +368,27 @@ export function Proposals({ } }; + const stats = [ + { + id: 1, + name: "Your pool weight", + stat: memberPoolWeight, + className: "bg-primary-soft text-primary-content", + }, + { + id: 2, + name: "Pool weight allocated", + stat: calcPoolWeightUsed(memberSupportedProposalsPct), + className: "bg-primary-soft text-primary-content", + }, + { + id: 3, + name: "Total weight allocated", + stat: memberSupportedProposalsPct, + className: "bg-primary-content text-primary-soft border-primary-content", + }, + ]; + return ( <> Proposals {proposals ? ( proposals.length === 0 ? ( -

+

No submitted proposals to support

) : ( @@ -405,29 +426,12 @@ export function Proposals({ )}
- {editView && ( - <> -
-
-

- {calcPoolWeightUsed(memberSupportedProposalsPct)} % -

-

Pool weight used

-
-
-

= 100 && "text-warning"}`} - > - {memberSupportedProposalsPct} % -

-

- Of your governance weight is supporting proposals -

-
-
- - )} + {editView && ( + <> + + + )}
@@ -492,3 +496,41 @@ export function Proposals({ ); } + +export default function UserAllocationStats({ stats }: { stats: any[] }) { + return ( +
+

+ Pool weight stats +

+ +
+ {stats.map((stat) => ( +
+
+
+ {stat.stat} % +
+ +

{stat.name}

+
+
+

+ {stat.stat} % +

+
+
+ ))} +
+
+ ); +} From 06365a17073bc8cfd3294ec9bba154fcd5bc648c Mon Sep 17 00:00:00 2001 From: Matias Date: Thu, 4 Jul 2024 18:23:29 -0300 Subject: [PATCH 003/129] feat: apply new grid layout to `ProposalCard` and `Proposals` components --- apps/web/components/ProposalCard.tsx | 162 +++++++++------------------ apps/web/components/Proposals.tsx | 6 +- 2 files changed, 54 insertions(+), 114 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 96bf7926b..406ac155d 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -24,6 +24,7 @@ import { LightCVStrategy, poolTypes } from "@/types"; import { getProposals } from "@/actions/getProposals"; import { DisplayNumber } from "./DisplayNumber"; import { InformationCircleIcon } from "@heroicons/react/24/outline"; +import { capitalize } from "@/utils/text"; type ProposalCard = { proposalData: NonNullable>>[0]; @@ -138,118 +139,63 @@ export function ProposalCard({ return ( <>
-
-
-
-

{title}

-
ID {proposalNumber}
-
-
-
- - {!isAllocationMode && ( - <> - } - count={formatUnits(requestedAmount, 18)} - > - {stakedFilter?.value > 0 ? ( -
-
Your allocation
-
- {" "} - {calcPoolWeightUsed( - calculatePercentage( - inputData?.value ?? 0, - memberActivatedPoints, - ), - )}{" "} - % -
-
- {" "} - {Number( - (inputData?.value * 100) / memberActivatedPoints, - ).toFixed(2)}{" "} - % of you gorvernance weight -
-
- ) : ( -

- You have not allocate pool weight yet -

- )} - - )} -
+
+

{capitalize(title)}

+
ID {proposalNumber}
+ + + {!isAllocationMode && ( + <> +
+ } + count={formatUnits(requestedAmount, 18)} + > +
+
mini CVChart
+ + )} + {isEditView && ( -
-
-
- inputHandler(i, Number(e.target.value))} - /> -
- {[...Array(21)].map((_, i) => ( - - | - - ))} +
+
+
+
+ inputHandler(i, Number(e.target.value))} + /> +
+ {[...Array(21)].map((_, i) => ( + + | + + ))} +
+
+
+

+ {Number( + (inputData?.value * 100) / memberActivatedPoints, + ).toFixed(2)} + % +

-
-
-

- {Number( - (inputData?.value * 100) / memberActivatedPoints, - ).toFixed(2)} - % -

- {/*
- {inputData?.value < stakedFilter?.value ? ( -

- Removing to - - {calcPoolWeightUsed( - calculatePercentage( - inputData?.value ?? 0, - memberActivatedPoints, - ), - )} - - % of pool weight -

- ) : ( -

- Assigning - - {calcPoolWeightUsed( - calculatePercentage( - inputData?.value ?? 0, - memberActivatedPoints, - ), - )} - - % of pool weight -

- )} -
*/}
)}
@@ -269,9 +215,3 @@ export function ProposalCard({ ); } - -//
-//
diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 98b2c13fe..140866974 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -377,13 +377,13 @@ export function Proposals({ }, { id: 2, - name: "Pool weight allocated", + name: "Pool weight allocation", stat: calcPoolWeightUsed(memberSupportedProposalsPct), className: "bg-primary-soft text-primary-content", }, { id: 3, - name: "Total weight allocated", + name: "Total weight allocation", stat: memberSupportedProposalsPct, className: "bg-primary-content text-primary-soft border-primary-content", }, @@ -509,7 +509,7 @@ export default function UserAllocationStats({ stats }: { stats: any[] }) {
Date: Thu, 4 Jul 2024 20:30:26 -0300 Subject: [PATCH 004/129] Add the following: - Rename variable and prop `editView` to `allocationView` - Refine styling and optimize JSX for `ProposalCard` and `Proposals` - Remove toast when user reaches 100% allocation - Style mini circle chart to show 100% allocation percentage - Dynamic message if user is adding or has added allocation vs has not added any - Cleanup --- apps/web/components/ProposalCard.tsx | 38 +++-- apps/web/components/Proposals.tsx | 198 +++++++++++++-------------- 2 files changed, 118 insertions(+), 118 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 406ac155d..179a62342 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -31,7 +31,7 @@ type ProposalCard = { inputData: ProposalInputItem; stakedFilter: ProposalInputItem; i: number; - isEditView: boolean; + isAllocationView: boolean; tooltipMessage: string; memberActivatedPoints: number; memberPoolWeight: number; @@ -48,7 +48,7 @@ export function ProposalCard({ inputData, stakedFilter, i, - isEditView, + isAllocationView, tooltipMessage, memberActivatedPoints, memberPoolWeight, @@ -131,6 +131,10 @@ export function ProposalCard({ triggerRenderProposals(); }, [distributeTxConfirmationHash]); + const inputValue = Number( + (inputData?.value * 100) / memberActivatedPoints, + ).toFixed(2); + const ProposalCardContent = ({ isAllocationMode, }: { @@ -145,12 +149,10 @@ export function ProposalCard({

{capitalize(title)}

ID {proposalNumber}
- - {!isAllocationMode && ( <>
@@ -163,8 +165,7 @@ export function ProposalCard({
mini CVChart
)} - - {isEditView && ( + {isAllocationView && (
@@ -174,11 +175,11 @@ export function ProposalCard({ min={0} max={memberActivatedPoints} value={inputData?.value ?? 0} - className={`range range-md min-w-[460px] cursor-pointer bg-neutral-soft [--range-shdw:#65AD18]`} + className={`range range-md min-w-[460px] cursor-pointer bg-neutral-soft [--range-shdw:var(--color-green-500)]`} step={memberActivatedPoints / 100} onChange={(e) => inputHandler(i, Number(e.target.value))} /> -
+
{[...Array(21)].map((_, i) => ( | @@ -187,12 +188,19 @@ export function ProposalCard({
-

- {Number( - (inputData?.value * 100) / memberActivatedPoints, - ).toFixed(2)} - % -

+ {Number(inputValue) > 0 ? ( + <> +

+ Total allocated{" "} + + {inputValue}{" "} + + % +

+ + ) : ( +

No allocation

+ )}
@@ -205,7 +213,7 @@ export function ProposalCard({ return ( <> - {isEditView ? ( + {isAllocationView ? ( ) : ( diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 140866974..9d26e36b1 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -65,7 +65,7 @@ export function Proposals({ createProposalUrl: string; proposalType: number; }) { - const [editView, setEditView] = useState(false); + const [allocationView, setAllocationView] = useState(false); const [inputAllocatedTokens, setInputAllocatedTokens] = useState(0); const [inputs, setInputs] = useState([]); const [proposals, setProposals] = useState< @@ -216,7 +216,7 @@ export function Proposals({ useEffect(() => { if (isMemberActived === undefined) return; - if (isMemberActived !== true) setEditView(false); + if (isMemberActived !== true) setAllocationView(false); }, [isMemberActived]); const { @@ -297,15 +297,10 @@ export function Proposals({ const inputHandler = (i: number, value: number) => { const currentPoints = calculateTotalTokens(i); const maxAllowableValue = memberActivatedPoints - currentPoints; - const toastId = "error-toast"; + // If the sum exceeds the memberActivatedPoints, adjust the value to the maximum allowable value if (currentPoints + value > memberActivatedPoints) { value = maxAllowableValue; - if (!toast.isActive(toastId)) { - toast.error("Can't exceed 100% in total support!", { - toastId, - }); - } console.log("can't exceed 100% points"); } @@ -368,24 +363,26 @@ export function Proposals({ } }; + const poolWeightClassName = `bg-primary-soft text-primary-content ${calcPoolWeightUsed(memberSupportedProposalsPct) == memberPoolWeight && "bg-secondary-soft text-secondary-content"}`; + const stats = [ { id: 1, - name: "Your pool weight", + name: "Pool Weight", stat: memberPoolWeight, - className: "bg-primary-soft text-primary-content", + className: poolWeightClassName, }, { id: 2, - name: "Pool weight allocation", + name: "Allocated Pool Weight", stat: calcPoolWeightUsed(memberSupportedProposalsPct), - className: "bg-primary-soft text-primary-content", + className: poolWeightClassName, }, { id: 3, - name: "Total weight allocation", + name: "Total Allocation Percentage", stat: memberSupportedProposalsPct, - className: "bg-primary-content text-primary-soft border-primary-content", + className: `bg-primary-content text-primary-soft border-primary-content ${memberSupportedProposalsPct >= 100 && "bg-secondary-content text-secondary-soft border-secondary-content "}`, }, ]; @@ -398,100 +395,97 @@ export function Proposals({ communityAddress={communityAddress} memberTokensInCommunity={memberTokensInCommunity} /> -
-
-
-
-

Proposals

- {proposals ? ( - proposals.length === 0 ? ( -

- No submitted proposals to support -

- ) : ( - !editView && ( - - ) - ) +
+
+
+

Proposals

+ {proposals ? ( + proposals.length === 0 ? ( +

No submitted proposals to support

) : ( - - )} -
+ !allocationView && ( + + ) + ) + ) : ( + + )}
- {editView && ( + {allocationView && ( <> )}
-
-
- {proposals?.map((proposalData, i) => ( - - - - ))} -
-
- {editView && ( - <> - - - - )} -
+
+ {proposals?.map((proposalData, i) => ( + + + + ))}
-
-

Do you have a great idea?

-
-

Share it with the community and get support !

- + {allocationView && ( +
+ <> + + +
-
+ )} + + {!allocationView && ( + <> +
+

Do you have a great idea?

+
+

Share it with the community and get support!

+ +
+
+ + )}
); @@ -499,17 +493,15 @@ export function Proposals({ export default function UserAllocationStats({ stats }: { stats: any[] }) { return ( -
-

- Pool weight stats -

+
+

Your Allocation Overview

{stats.map((stat) => (
Date: Thu, 4 Jul 2024 21:27:02 -0300 Subject: [PATCH 005/129] feat: install identicon library, add `Hashicon` to `ProposalCard`, small fix to `Statistic` --- apps/web/components/ProposalCard.tsx | 20 ++++++++--- apps/web/components/Statistic.tsx | 9 ++--- apps/web/package.json | 3 +- pnpm-lock.yaml | 51 +++++++++++++++++++++++----- 4 files changed, 61 insertions(+), 22 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 179a62342..ce999e189 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -25,6 +25,7 @@ import { getProposals } from "@/actions/getProposals"; import { DisplayNumber } from "./DisplayNumber"; import { InformationCircleIcon } from "@heroicons/react/24/outline"; import { capitalize } from "@/utils/text"; +import { Hashicon } from "@emeraldpay/hashicon-react"; type ProposalCard = { proposalData: NonNullable>>[0]; @@ -135,6 +136,11 @@ export function ProposalCard({ (inputData?.value * 100) / memberActivatedPoints, ).toFixed(2); + // something that you want to represent visually. For example ID of an object on the screen. + const value = "9dddff8f-be81-4c27-80c8-099327865f3f"; + + // Same icon with 80px in size + const ProposalCardContent = ({ isAllocationMode, }: { @@ -145,9 +151,14 @@ export function ProposalCard({
-
-

{capitalize(title)}

-
ID {proposalNumber}
+
+ +
+

{capitalize(title)}

+
ID {proposalNumber}
+
} + label={"requested amount"} count={formatUnits(requestedAmount, 18)} >
diff --git a/apps/web/components/Statistic.tsx b/apps/web/components/Statistic.tsx index 38a746d03..49d5a2ad1 100644 --- a/apps/web/components/Statistic.tsx +++ b/apps/web/components/Statistic.tsx @@ -16,15 +16,10 @@ export const Statistic = ({ children, }: IdentifierProps) => { const iconClassNames = "h-6 w-6"; - const defaultIcon = ; return ( -
- {icon ? ( -
{icon}
- ) : ( -
{defaultIcon}
- )} +
+ {icon &&
{icon}
} {label && (

{capitalize(label)}: {count} diff --git a/apps/web/package.json b/apps/web/package.json index d2468c53e..6ba4a25c3 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -11,6 +11,7 @@ }, "dependencies": { "@allo-team/allo-v2-sdk": "^1.0.34", + "@emeraldpay/hashicon-react": "^0.5.2", "@graphprotocol/client-urql": "^2.0.0", "@headlessui/react": "^1.7.17", "@heroicons/react": "^2.1.1", @@ -72,4 +73,4 @@ "tsconfig": "workspace:*", "typescript": "5.2" } -} \ No newline at end of file +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 614ef7d23..30d061a76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,6 +66,9 @@ importers: '@allo-team/allo-v2-sdk': specifier: ^1.0.34 version: 1.0.76(@typechain/ethers-v6@0.5.1)(ethers@6.13.1)(typechain@8.3.2)(typescript@5.2.2) + '@emeraldpay/hashicon-react': + specifier: ^0.5.2 + version: 0.5.2 '@graphprotocol/client-urql': specifier: ^2.0.0 version: 2.0.3(@graphql-mesh/runtime@0.99.8)(@graphql-tools/utils@10.2.2)(@urql/core@5.0.4)(graphql@16.8.2)(wonka@6.3.4) @@ -257,7 +260,7 @@ importers: version: 8.10.0(eslint@8.57.0) eslint-config-turbo: specifier: latest - version: 2.0.4(eslint@8.57.0) + version: 2.0.6(eslint@8.57.0) eslint-plugin-html: specifier: ^7.1.0 version: 7.1.0 @@ -1879,6 +1882,22 @@ packages: dependencies: '@jridgewell/trace-mapping': 0.3.9 + /@emeraldpay/hashicon-react@0.5.2: + resolution: {integrity: sha512-XCoYKpq8QQOniiSZf5ouzdvXbKfG6q4ICHRqCO/GNofiF0Ra+LR/7+tomHlXVcLPBS9sDAoZQQw/Sr24KRAbJg==} + engines: {node: '>=8'} + dependencies: + '@emeraldpay/hashicon': 0.5.2 + react: 16.14.0 + dev: false + + /@emeraldpay/hashicon@0.5.2: + resolution: {integrity: sha512-MNsjV+Vik+ofOYmGPcdAQW4CoSSrTE2Iq2xYNS8PxV84QrgOLTsC/pV6EWb1N/dTY9ndMV/RAAzGh6cmrZf4zA==} + engines: {node: '>=8'} + dependencies: + '@stablelib/blake2s': 1.0.1 + js-sha3: 0.8.0 + dev: false + /@emotion/hash@0.9.1: resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} dev: false @@ -4983,6 +5002,14 @@ packages: dependencies: '@stablelib/int': 1.0.1 + /@stablelib/blake2s@1.0.1: + resolution: {integrity: sha512-Nnp7ULL65b4zEOkf3IdfL74xHhZXMCg7HBjBYO666a0o+DIY6GDEhUCqH6dws8nsSZgZO+V5+s2VyYKKGdFMZw==} + dependencies: + '@stablelib/binary': 1.0.1 + '@stablelib/hash': 1.0.1 + '@stablelib/wipe': 1.0.1 + dev: false + /@stablelib/bytes@1.0.1: resolution: {integrity: sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==} @@ -8975,13 +9002,13 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-turbo@2.0.4(eslint@8.57.0): - resolution: {integrity: sha512-zGvU+bxoNWVvSl0prGItrnH9FgeNzKEAjRmv8ruqql1psI37T8IoLF/XeOzT3CzzYzJxuI3wW1yb2agDFYQdHQ==} + /eslint-config-turbo@2.0.6(eslint@8.57.0): + resolution: {integrity: sha512-PkRjFnZUZWPcrYT4Xoi5OWOUtnn6xVGh88I6TsayiH4AQZuLs/MDmzfJRK+PiWIrI7Q7sbsVEQP+nUyyRE3uAw==} peerDependencies: eslint: '>6.6.0' dependencies: eslint: 8.57.0 - eslint-plugin-turbo: 2.0.4(eslint@8.57.0) + eslint-plugin-turbo: 2.0.6(eslint@8.57.0) dev: true /eslint-import-resolver-node@0.3.9: @@ -9165,8 +9192,8 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-turbo@2.0.4(eslint@8.57.0): - resolution: {integrity: sha512-Ozn//vTXJeqIEvEkThM2vuuldMckPqAne7vg/S3GxF+BBY516cjdp7+dYpCU5Q0083hVm638c8542ubccNE+8w==} + /eslint-plugin-turbo@2.0.6(eslint@8.57.0): + resolution: {integrity: sha512-yGnpMvyBxI09ZrF5bGpaniBz57MiExTCsRnNxP+JnbMFD+xU3jG3ukRzehVol8LYNdC/G7E4HoH+x7OEpoSGAQ==} peerDependencies: eslint: '>6.6.0' dependencies: @@ -9497,7 +9524,6 @@ packages: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 dev: false - bundledDependencies: false /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} @@ -13489,7 +13515,6 @@ packages: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true /protobufjs@6.11.4: resolution: {integrity: sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==} @@ -13649,7 +13674,6 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -13733,6 +13757,15 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /react@16.14.0: + resolution: {integrity: sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==} + engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + prop-types: 15.8.1 + dev: false + /react@18.2.0: resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} engines: {node: '>=0.10.0'} From 044dc7a1fd6c4ce5d13eab4551f8758dbb02d2a2 Mon Sep 17 00:00:00 2001 From: Matias Date: Fri, 5 Jul 2024 14:44:52 -0300 Subject: [PATCH 006/129] feat: add identicon to proposalid page + minor changes to proposal card --- .../pool/[poolId]/proposals/[proposalId]/page.tsx | 13 ++++--------- apps/web/components/ProposalCard.tsx | 13 ++++--------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/pool/[poolId]/proposals/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/pool/[poolId]/proposals/[proposalId]/page.tsx index 429a12729..0fc1f946c 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/pool/[poolId]/proposals/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/pool/[poolId]/proposals/[proposalId]/page.tsx @@ -18,6 +18,7 @@ import useSubgraphQueryByChain from "@/hooks/useSubgraphQueryByChain"; import { useState, useEffect, useMemo } from "react"; import { useContractRead, useContractWrite } from "wagmi"; import LoadingSpinner from "@/components/LoadingSpinner"; +import { Hashicon } from "@emeraldpay/hashicon-react"; export const dynamic = "force-dynamic"; @@ -244,16 +245,10 @@ export default function Proposal({ return (

-
- {`proposal +
+
-
+

diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index ce999e189..341890bea 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -60,7 +60,7 @@ export function ProposalCard({ inputHandler, triggerRenderProposals, }: ProposalCard) { - const { title, id, proposalNumber, proposalStatus, requestedAmount } = + const { title, id, proposalNumber, proposalStatus, requestedAmount, type } = proposalData; const pathname = usePathname(); @@ -136,11 +136,6 @@ export function ProposalCard({ (inputData?.value * 100) / memberActivatedPoints, ).toFixed(2); - // something that you want to represent visually. For example ID of an object on the screen. - const value = "9dddff8f-be81-4c27-80c8-099327865f3f"; - - // Same icon with 80px in size - const ProposalCardContent = ({ isAllocationMode, }: { @@ -149,10 +144,10 @@ export function ProposalCard({ return ( <>
@@ -172,7 +167,7 @@ export function ProposalCard({ count={formatUnits(requestedAmount, 18)} >
-
mini CVChart
+
mini CVChart
)} {isAllocationView && ( From e081002b8a8f946e57607e298ef1942100d33255 Mon Sep 17 00:00:00 2001 From: Matias Date: Mon, 8 Jul 2024 18:48:04 -0300 Subject: [PATCH 007/129] feat: WIP CV standar chart, new styles and more interactions --- .../pool/[poolId]/[proposalId]/page.tsx | 6 +- apps/web/components/Charts/ChartWrapper.tsx | 2 +- .../components/Charts/ConvictionBarChart.tsx | 182 ++++++----- pkg/subgraph/subgraph.yaml | 297 +++++++++--------- 4 files changed, 254 insertions(+), 233 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx index 218b7cf24..d0e6099fc 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx @@ -8,7 +8,7 @@ import { getProposalDataDocument, getProposalDataQuery, } from "#/subgraph/.graphclient"; -import { calculatePercentageBigInt } from "@/utils/numbers"; +import { calculatePercentageBigInt } from "@/utils/numbers"; import Image from "next/image"; import { getIpfsMetadata } from "@/utils/ipfsUtils"; import { UserIcon, InformationCircleIcon } from "@heroicons/react/24/outline"; @@ -16,7 +16,7 @@ import { proposalStatus, poolTypes } from "@/types"; import { proposalImg } from "@/assets"; import useSubgraphQueryByChain from "@/hooks/useSubgraphQueryByChain"; import { useState, useEffect } from "react"; -import { useContractRead, } from "wagmi"; +import { useContractRead } from "wagmi"; import LoadingSpinner from "@/components/LoadingSpinner"; export const dynamic = "force-dynamic"; @@ -281,7 +281,7 @@ export default function Proposal({ Proposal passed and executed successfully
) : ( -
+
-
+
{children}
- - - + > */} + {/*
*/} + + + + {/*
*/} + {/* */} ); }; diff --git a/pkg/subgraph/subgraph.yaml b/pkg/subgraph/subgraph.yaml index 92a3b2d88..b7200d31c 100644 --- a/pkg/subgraph/subgraph.yaml +++ b/pkg/subgraph/subgraph.yaml @@ -1,149 +1,148 @@ -specVersion: 0.0.5 -features: - - nonFatalErrors -schema: - file: ./src/schema.graphql -dataSources: - - kind: ethereum/contract - name: RegistryFactory - network: arbitrum-sepolia - context: - chainId: - type: Int - data: 421614 - source: - address: "0x197a3115f932df5aee2a4b5732e8586a00ccf243" - abi: RegistryFactory - startBlock: 46157748 - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - RegistryFactory - - RegistryCommunity - abis: - - name: RegistryFactory - file: ../contracts/out/RegistryFactory.sol/RegistryFactory.json - - name: RegistryCommunity - file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json - eventHandlers: - - event: CommunityCreated(address) - handler: handleCommunityCreated - - event: CommunityValiditySet(address,bool) - handler: handleCommunityValiditySet - - event: ProtocolFeeSet(address,uint256) - handler: handleProtocolFeeSet - - file: ./src/mappings/registry-factory.ts - -templates: - - kind: ethereum/contract - name: RegistryCommunity - network: arbitrum-sepolia - source: - abi: RegistryCommunity - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - RegistryCommunity - - ERC20 - - CVStrategy - - TokenGarden - - Member - abis: - - name: RegistryCommunity - file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json - - name: ERC20 - file: ../contracts/out/ERC20.sol/ERC20.json - - name: CVStrategy - file: ../contracts/out/CVStrategy.sol/CVStrategy.json - - name: RegistryFactory - file: ../contracts/out/RegistryFactory.sol/RegistryFactory.json - - eventHandlers: - - event: RegistryInitialized(bytes32,string,(uint256,string)) - handler: handleInitialized - - event: MemberRegistered(address,uint256) - handler: handleMemberRegistered - - event: MemberUnregistered(address,uint256) - handler: handleMemberUnregistered - - event: PoolCreated(uint256,address,address,address,(uint256,string)) - handler: handlePoolCreated - - event: MemberKicked(address,address,uint256) - handler: handleMemberKicked - # - event: CommunityFeeUpdated(uint256) - # handler: handleCommunityFeeUpdated - # - event: ProtocolFeeUpdated(uint256) - # handler: handleProtocolFeeUpdated - - event: StrategyAdded(address) - handler: handleStrategyAdded - - event: StrategyRemoved(address) - handler: handleStrategyRemoved - - event: MemberActivatedStrategy(address,address,uint256) - handler: handleMemberActivatedStrategy - - event: MemberDeactivatedStrategy(address,address) - handler: handleMemberDeactivatedStrategy - - event: MemberPowerDecreased(address,uint256) - handler: handleMemberPowerDecreased - - event: MemberPowerIncreased(address,uint256) - handler: handleMemberPowerIncreased - # - event: BasisStakedAmountSet(uint256) - # handler: handleBasisStakedAmountSet - # - event: CouncilSafeSet(address) - # handler: handleCouncilSafeSet - # - event: CouncilSafeChangeStarted(address,address) - # handler: handleCouncilSafeChangeStarted - # - event: AlloSet(address) - # handler: handleAlloSet - file: ./src/mappings/registry-community.ts - - - kind: ethereum/contract - name: CVStrategy - network: arbitrum-sepolia - source: - abi: CVStrategy - mapping: - kind: ethereum/events - apiVersion: 0.0.7 - language: wasm/assemblyscript - entities: - - CVStrategy - - CVStrategyConfig - - CVProposal - - Allo - abis: - - name: CVStrategy - file: ../contracts/out/CVStrategy.sol/CVStrategy.json - - name: RegistryCommunity - file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json - - name: Allo - file: ../contracts/out/Allo.sol/Allo.json - eventHandlers: - - event: InitializedCV(uint256,(address,uint256,uint256,uint256,uint256,uint8,uint8,(uint256))) - handler: handleInitialized - - event: ProposalCreated(uint256,uint256) - handler: handleProposalCreated - - event: PoolAmountIncreased(uint256) - handler: handlePoolAmountIncreased - - event: SupportAdded(address,uint256,uint256,uint256,uint256) - handler: handleSupportAdded - - event: Distributed(uint256,address,uint256) - handler: handleDistributed - - event: PowerIncreased(address,uint256,uint256) - handler: handlePowerIncreased - - event: PowerDecreased(address,uint256,uint256) - handler: handlePowerDecreased - - event: PointsDeactivated(address) - handler: handlePointsDeactivated - - event: DecayUpdated(uint256) - handler: handleDecayUpdated - - event: MaxRatioUpdated(uint256) - handler: handleMaxRatioUpdated - - event: WeightUpdated(uint256) - handler: handleWeightUpdated - - file: ./src/mappings/cv-strategy.ts - +specVersion: 0.0.5 +features: + - nonFatalErrors +schema: + file: ./src/schema.graphql +dataSources: + - kind: ethereum/contract + name: RegistryFactory + network: localhost + context: + chainId: + type: Int + data: 1337 + source: + address: "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707" + abi: RegistryFactory + startBlock: 0 + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - RegistryFactory + - RegistryCommunity + abis: + - name: RegistryFactory + file: ../contracts/out/RegistryFactory.sol/RegistryFactory.json + - name: RegistryCommunity + file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json + eventHandlers: + - event: CommunityCreated(address) + handler: handleCommunityCreated + - event: CommunityValiditySet(address,bool) + handler: handleCommunityValiditySet + - event: ProtocolFeeSet(address,uint256) + handler: handleProtocolFeeSet + file: ./src/mappings/registry-factory.ts + +templates: + - kind: ethereum/contract + name: RegistryCommunity + network: localhost + source: + abi: RegistryCommunity + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - RegistryCommunity + - ERC20 + - CVStrategy + - TokenGarden + - Member + abis: + - name: RegistryCommunity + file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json + - name: ERC20 + file: ../contracts/out/ERC20.sol/ERC20.json + - name: CVStrategy + file: ../contracts/out/CVStrategy.sol/CVStrategy.json + - name: RegistryFactory + file: ../contracts/out/RegistryFactory.sol/RegistryFactory.json + + eventHandlers: + - event: RegistryInitialized(bytes32,string,(uint256,string)) + handler: handleInitialized + - event: MemberRegistered(address,uint256) + handler: handleMemberRegistered + - event: MemberUnregistered(address,uint256) + handler: handleMemberUnregistered + - event: PoolCreated(uint256,address,address,address,(uint256,string)) + handler: handlePoolCreated + - event: MemberKicked(address,address,uint256) + handler: handleMemberKicked + # - event: CommunityFeeUpdated(uint256) + # handler: handleCommunityFeeUpdated + # - event: ProtocolFeeUpdated(uint256) + # handler: handleProtocolFeeUpdated + - event: StrategyAdded(address) + handler: handleStrategyAdded + - event: StrategyRemoved(address) + handler: handleStrategyRemoved + - event: MemberActivatedStrategy(address,address,uint256) + handler: handleMemberActivatedStrategy + - event: MemberDeactivatedStrategy(address,address) + handler: handleMemberDeactivatedStrategy + - event: MemberPowerDecreased(address,uint256) + handler: handleMemberPowerDecreased + - event: MemberPowerIncreased(address,uint256) + handler: handleMemberPowerIncreased + # - event: BasisStakedAmountSet(uint256) + # handler: handleBasisStakedAmountSet + # - event: CouncilSafeSet(address) + # handler: handleCouncilSafeSet + # - event: CouncilSafeChangeStarted(address,address) + # handler: handleCouncilSafeChangeStarted + # - event: AlloSet(address) + # handler: handleAlloSet + file: ./src/mappings/registry-community.ts + + - kind: ethereum/contract + name: CVStrategy + network: localhost + source: + abi: CVStrategy + mapping: + kind: ethereum/events + apiVersion: 0.0.7 + language: wasm/assemblyscript + entities: + - CVStrategy + - CVStrategyConfig + - CVProposal + - Allo + abis: + - name: CVStrategy + file: ../contracts/out/CVStrategy.sol/CVStrategy.json + - name: RegistryCommunity + file: ../contracts/out/RegistryCommunity.sol/RegistryCommunity.json + - name: Allo + file: ../contracts/out/Allo.sol/Allo.json + eventHandlers: + - event: InitializedCV(uint256,(address,uint256,uint256,uint256,uint256,uint8,uint8,(uint256))) + handler: handleInitialized + - event: ProposalCreated(uint256,uint256) + handler: handleProposalCreated + - event: PoolAmountIncreased(uint256) + handler: handlePoolAmountIncreased + - event: SupportAdded(address,uint256,uint256,uint256,uint256) + handler: handleSupportAdded + - event: Distributed(uint256,address,uint256) + handler: handleDistributed + - event: PowerIncreased(address,uint256,uint256) + handler: handlePowerIncreased + - event: PowerDecreased(address,uint256,uint256) + handler: handlePowerDecreased + - event: PointsDeactivated(address) + handler: handlePointsDeactivated + - event: DecayUpdated(uint256) + handler: handleDecayUpdated + - event: MaxRatioUpdated(uint256) + handler: handleMaxRatioUpdated + - event: WeightUpdated(uint256) + handler: handleWeightUpdated + + file: ./src/mappings/cv-strategy.ts + \ No newline at end of file From 908b3d6a080647e24a5093b62d58e2101b68b5ab Mon Sep 17 00:00:00 2001 From: Mati <94074651+Mati0x@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:55:17 -0300 Subject: [PATCH 008/129] Update apps/web/components/ProposalCard.tsx Co-authored-by: Corantin --- apps/web/components/ProposalCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 341890bea..436f2d402 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -157,7 +157,7 @@ export function ProposalCard({
{!isAllocationMode && ( <> From cdf609050699b697e4adccca56d3c59613df6a20 Mon Sep 17 00:00:00 2001 From: Mati <94074651+Mati0x@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:55:29 -0300 Subject: [PATCH 009/129] Update apps/web/components/ProposalCard.tsx Co-authored-by: Corantin --- apps/web/components/ProposalCard.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index 436f2d402..e70bbc582 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -163,7 +163,7 @@ export function ProposalCard({ <>
From 6c29dcc69402fd7df9eb43fbfb9269bbc1ba762a Mon Sep 17 00:00:00 2001 From: Mati <94074651+Mati0x@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:56:11 -0300 Subject: [PATCH 010/129] Update apps/web/components/Proposals.tsx Co-authored-by: Corantin --- apps/web/components/Proposals.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 9d26e36b1..b032df19d 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -215,7 +215,7 @@ export function Proposals({ }, [proposals, address, stakedFilters]); useEffect(() => { - if (isMemberActived === undefined) return; + if (isMemberActived == null) return; if (isMemberActived !== true) setAllocationView(false); }, [isMemberActived]); From 3a6386fadcb20ee2e60b9654de034134e1bad345 Mon Sep 17 00:00:00 2001 From: Mati <94074651+Mati0x@users.noreply.github.com> Date: Tue, 9 Jul 2024 12:56:29 -0300 Subject: [PATCH 011/129] Update apps/web/components/Proposals.tsx Co-authored-by: Corantin --- apps/web/components/Proposals.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index b032df19d..9cd7ef3b3 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -216,7 +216,7 @@ export function Proposals({ useEffect(() => { if (isMemberActived == null) return; - if (isMemberActived !== true) setAllocationView(false); + if (!isMemberActived) setAllocationView(false); }, [isMemberActived]); const { From db8b205bf9552d3d630eb480f7f032e66f8b7ef9 Mon Sep 17 00:00:00 2001 From: Corantin Date: Tue, 9 Jul 2024 13:10:07 -0400 Subject: [PATCH 012/129] Sentry --- apps/web/app/global-error.tsx | 27 + apps/web/env.example | 2 + apps/web/next.config.js | 43 + apps/web/package.json | 1 + apps/web/sentry.client.config.ts | 29 + apps/web/sentry.conf.ts | 11 + apps/web/sentry.edge.config.ts | 9 + apps/web/sentry.server.config.ts | 8 + apps/web/src/instrumentation.ts | 9 + pnpm-lock.yaml | 1339 ++++++++++++++++++++++++++++-- 10 files changed, 1422 insertions(+), 56 deletions(-) create mode 100644 apps/web/app/global-error.tsx create mode 100644 apps/web/sentry.client.config.ts create mode 100644 apps/web/sentry.conf.ts create mode 100644 apps/web/sentry.edge.config.ts create mode 100644 apps/web/sentry.server.config.ts create mode 100644 apps/web/src/instrumentation.ts diff --git a/apps/web/app/global-error.tsx b/apps/web/app/global-error.tsx new file mode 100644 index 000000000..5649f9b00 --- /dev/null +++ b/apps/web/app/global-error.tsx @@ -0,0 +1,27 @@ +"use client"; + +import * as Sentry from "@sentry/nextjs"; +import NextError from "next/error"; +import { useEffect } from "react"; + +export default function GloblError({ + error, +}: { + error: Error & { digest?: string }; +}) { + useEffect(() => { + Sentry.captureException(error); + }, [error]); + + return ( + + + {/* `NextError` is the default Next.js error page component. Its type + definition requires a `statusCode` prop. However, since the App Router + does not expose status codes for errors, we simply pass 0 to render a + generic error message. */} + + + + ); +} diff --git a/apps/web/env.example b/apps/web/env.example index bf7647d15..7737bb02d 100644 --- a/apps/web/env.example +++ b/apps/web/env.example @@ -14,4 +14,6 @@ RPC_URL_LOCAL=http://127.0.0.1:8545 PINATA_JWT= NEXT_ABLY_API_KEY= +NEXT_PUBLIC_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE=1 +NEXT_PUBLIC_SENTRY_REPLAYS_SESSION_SAMPLE_RATE=1 diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 54b6e82b3..43238df4f 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -27,3 +27,46 @@ module.exports = { }, productionBrowserSourceMaps: true, }; + + +// Injected content via Sentry wizard below + +const { withSentryConfig } = require("@sentry/nextjs"); + +module.exports = withSentryConfig( + module.exports, + { + // For all available options, see: + // https://github.com/getsentry/sentry-webpack-plugin#options + + org: "gardens", + project: "gardens-app", + + // Only print logs for uploading source maps in CI + silent: !process.env.CI, + + // For all available options, see: + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + + // Upload a larger set of source maps for prettier stack traces (increases build time) + widenClientFileUpload: true, + + // Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. + // This can increase your server load as well as your hosting bill. + // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- + // side errors will fail. + tunnelRoute: "/monitoring", + + // Hides source maps from generated client bundles + hideSourceMaps: true, + + // Automatically tree-shake Sentry logger statements to reduce bundle size + disableLogger: true, + + // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.) + // See the following for more information: + // https://docs.sentry.io/product/crons/ + // https://vercel.com/docs/cron-jobs + automaticVercelMonitors: true, + } +); diff --git a/apps/web/package.json b/apps/web/package.json index d2468c53e..643241d0f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -16,6 +16,7 @@ "@heroicons/react": "^2.1.1", "@pinata/sdk": "^2.1.0", "@rainbow-me/rainbowkit": "^1.3.3", + "@sentry/nextjs": "^8", "@tanstack/react-query": "^5.17.19", "@thirdweb-dev/chain-icons": "^1.0.5", "@urql/next": "^1.1.0", diff --git a/apps/web/sentry.client.config.ts b/apps/web/sentry.client.config.ts new file mode 100644 index 000000000..7c9221114 --- /dev/null +++ b/apps/web/sentry.client.config.ts @@ -0,0 +1,29 @@ +// This file configures the initialization of Sentry on the client. +// The config you add here will be used whenever a users loads a page in their browser. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; +import { SENTRY_CORE_CONFIG } from "./sentry.conf"; + +Sentry.init({ + ...SENTRY_CORE_CONFIG, + + replaysOnErrorSampleRate: +( + process.env.NEXT_PUBLIC_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE ?? "1" + ), + + // This sets the sample rate to be 10%. You may want this to be 100% while + // in development and sample at a lower rate in production + replaysSessionSampleRate: +( + process.env.NEXT_PUBLIC_SENTRY_REPLAYS_SESSION_SAMPLE_RATE ?? "0.1" + ), + + // You can remove this option if you're not planning to use the Sentry Session Replay feature: + integrations: [ + Sentry.replayIntegration({ + // Additional Replay configuration goes in here, for example: + maskAllText: true, + blockAllMedia: true, + }), + ], +}); diff --git a/apps/web/sentry.conf.ts b/apps/web/sentry.conf.ts new file mode 100644 index 000000000..fb413b5fe --- /dev/null +++ b/apps/web/sentry.conf.ts @@ -0,0 +1,11 @@ +export const SENTRY_CORE_CONFIG = { + dsn: "https://4220ecb16c770fe0dfb4495d5e6001ed@o4507572657913856.ingest.us.sentry.io/4507572660404224", + + // Adjust this value in production, or use tracesSampler for greater control + tracesSampleRate: 1, + + // Setting this option to true will print useful information to the console while you're setting up Sentry. + debug: false, + + // spotlight: process.env.NODE_ENV === "development", +}; diff --git a/apps/web/sentry.edge.config.ts b/apps/web/sentry.edge.config.ts new file mode 100644 index 000000000..32f01b89a --- /dev/null +++ b/apps/web/sentry.edge.config.ts @@ -0,0 +1,9 @@ +// This file configures the initialization of Sentry for edge features (middleware, edge routes, and so on). +// The config you add here will be used whenever one of the edge features is loaded. +// Note that this config is unrelated to the Vercel Edge Runtime and is also required when running locally. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; +import { SENTRY_CORE_CONFIG } from "./sentry.conf"; + +Sentry.init(SENTRY_CORE_CONFIG); diff --git a/apps/web/sentry.server.config.ts b/apps/web/sentry.server.config.ts new file mode 100644 index 000000000..b0afe4e9e --- /dev/null +++ b/apps/web/sentry.server.config.ts @@ -0,0 +1,8 @@ +// This file configures the initialization of Sentry on the server. +// The config you add here will be used whenever the server handles a request. +// https://docs.sentry.io/platforms/javascript/guides/nextjs/ + +import * as Sentry from "@sentry/nextjs"; +import { SENTRY_CORE_CONFIG } from "./sentry.conf"; + +Sentry.init(SENTRY_CORE_CONFIG); diff --git a/apps/web/src/instrumentation.ts b/apps/web/src/instrumentation.ts new file mode 100644 index 000000000..6a02852d9 --- /dev/null +++ b/apps/web/src/instrumentation.ts @@ -0,0 +1,9 @@ +export async function register() { + if (process.env.NEXT_RUNTIME === 'nodejs') { + await import('../sentry.server.config'); + } + + if (process.env.NEXT_RUNTIME === 'edge') { + await import('../sentry.edge.config'); + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 614ef7d23..f6602a903 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -25,7 +25,7 @@ importers: dependencies: next: specifier: 14.0.3 - version: 14.0.3(@babel/core@7.24.7)(react-dom@18.2.0)(react@18.2.0) + version: 14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: specifier: 18.2.0 version: 18.2.0 @@ -81,6 +81,9 @@ importers: '@rainbow-me/rainbowkit': specifier: ^1.3.3 version: 1.3.7(@types/react@18.3.3)(react-dom@18.2.0)(react@18.2.0)(viem@1.21.4)(wagmi@1.4.13) + '@sentry/nextjs': + specifier: ^8 + version: 8.16.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(next@14.0.3)(react@18.2.0)(webpack@5.92.1) '@tanstack/react-query': specifier: ^5.17.19 version: 5.45.1(react@18.2.0) @@ -222,7 +225,7 @@ importers: version: 4.6.2(eslint@8.57.0) next: specifier: 14.0.3 - version: 14.0.3(@babel/core@7.24.7)(react-dom@18.2.0)(react@18.2.0) + version: 14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) postcss: specifier: ^8.4.32 version: 8.4.38 @@ -1927,7 +1930,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm64@0.18.20: @@ -1945,7 +1947,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-arm@0.18.20: @@ -1963,7 +1964,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true optional: true /@esbuild/android-x64@0.18.20: @@ -1981,7 +1981,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-arm64@0.18.20: @@ -1999,7 +1998,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true optional: true /@esbuild/darwin-x64@0.18.20: @@ -2017,7 +2015,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-arm64@0.18.20: @@ -2035,7 +2032,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true optional: true /@esbuild/freebsd-x64@0.18.20: @@ -2053,7 +2049,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm64@0.18.20: @@ -2071,7 +2066,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-arm@0.18.20: @@ -2089,7 +2083,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ia32@0.18.20: @@ -2107,7 +2100,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-loong64@0.18.20: @@ -2125,7 +2117,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-mips64el@0.18.20: @@ -2143,7 +2134,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-ppc64@0.18.20: @@ -2161,7 +2151,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-riscv64@0.18.20: @@ -2179,7 +2168,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-s390x@0.18.20: @@ -2197,7 +2185,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true optional: true /@esbuild/linux-x64@0.18.20: @@ -2215,7 +2202,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true optional: true /@esbuild/netbsd-x64@0.18.20: @@ -2233,7 +2219,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true optional: true /@esbuild/openbsd-x64@0.18.20: @@ -2251,7 +2236,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true optional: true /@esbuild/sunos-x64@0.18.20: @@ -2269,7 +2253,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-arm64@0.18.20: @@ -2287,7 +2270,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-ia32@0.18.20: @@ -2305,7 +2287,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true optional: true /@esbuild/win32-x64@0.18.20: @@ -3917,7 +3898,6 @@ packages: strip-ansi-cjs: /strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} @@ -3966,6 +3946,13 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} @@ -4560,6 +4547,339 @@ packages: - typescript dev: false + /@opentelemetry/api-logs@0.52.1: + resolution: {integrity: sha512-qnSqB2DQ9TPP96dl8cDubDvrUyWc0/sK81xHTK8eSUspzDM3bsewX903qclQFvVhgStjRWdC5bLb3kQqMkfV5A==} + engines: {node: '>=14'} + dependencies: + '@opentelemetry/api': 1.9.0 + dev: false + + /@opentelemetry/api@1.9.0: + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + /@opentelemetry/context-async-hooks@1.25.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-UW/ge9zjvAEmRWVapOP0qyCvPulWU6cQxGxDbWEFfGOj1VBBZAuOqTo3X6yWmDTD3Xe15ysCZChHncr2xFMIfQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + dev: false + + /@opentelemetry/core@1.25.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-GeT/l6rBYWVQ4XArluLVB6WWQ8flHbdb6r2FCHC3smtdOAbrJBIv35tpV/yp9bmYUJf+xmZpu9DRTIeJVhFbEQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + + /@opentelemetry/instrumentation-connect@0.37.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-SeQktDIH5rNzjiEiazWiJAIXkmnLOnNV7wwHpahrqE0Ph+Z3heqMfxRtoMtbdJSIYLfcNZYO51AjxZ00IXufdw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@types/connect': 3.4.36 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-express@0.40.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-+RKMvVe2zw3kIXRup9c1jFu3T4d0fs5aKy015TpiMyoCKX1UMu3Z0lfgYtuyiSTANvg5hZnDbWmQmqSPj9VTvg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-fastify@0.37.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-WRjwzNZgupSzbEYvo9s+QuHJRqZJjVdNxSEpGBwWK8RKLlHGwGVAu0gcc2gPamJWUJsGqPGvahAPWM18ZkWj6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-graphql@0.41.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-R/gXeljgIhaRDKquVkKYT5QHPnFouM8ooyePZEP0kqyaVAedtR1V7NfAUJbxfTG5fBQa5wdmLjvu63+tzRXZCA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-hapi@0.39.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-ik2nA9Yj2s2ay+aNY+tJsKCsEx6Tsc2g/MK0iWBW5tibwrWKTy1pdVt5sB3kd5Gkimqj23UV5+FH2JFcQLeKug==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-http@0.52.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-dG/aevWhaP+7OLv4BQQSEKMJv8GyeOp3Wxl31NHqE8xo9/fYMfEljiZphUHIfyg4gnZ9swMyWjfOQs5GUQe54Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + semver: 7.6.2 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-ioredis@0.41.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-rxiLloU8VyeJGm5j2fZS8ShVdB82n7VNP8wTwfUQqDwRfHCnkzGr+buKoxuhGD91gtwJ91RHkjHA1Eg6RqsUTg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-koa@0.41.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-mbPnDt7ELvpM2S0vixYUsde7122lgegLOJQxx8iJQbB8YHal/xnTh9v7IfArSVzIDo+E+080hxZyUZD4boOWkw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@types/koa': 2.14.0 + '@types/koa__router': 12.0.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongodb@0.45.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-xnZP9+ayeB1JJyNE9cIiwhOJTzNEsRhXVdLgfzmrs48Chhhk026mQdM5CITfyXSCfN73FGAIB8d91+pflJEfWQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-metrics': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mongoose@0.39.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-J1r66A7zJklPPhMtrFOO7/Ud2p0Pv5u8+r23Cd1JUH6fYPmftNJVsLp2urAt6PHK4jVqpP/YegN8wzjJ2mZNPQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql2@0.39.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-Iypuq2z6TCfriAXCIZjRq8GTFCKhQv5SpXbmI+e60rYdXw8NHtMH4NXcGF0eKTuoCsC59IYSTUvDQYDKReaszA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-mysql@0.39.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-8snHPh83rhrDf31v9Kq0Nf+ts8hdr7NguuszRqZomZBHgE0+UyXZSkXHAAFZoBPPRMGyM68uaFE5hVtFl+wOcA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@types/mysql': 2.15.22 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-nestjs-core@0.38.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-M381Df1dM8aqihZz2yK+ugvMFK5vlHG/835dc67Sx2hH4pQEQYDA2PpFPTgc9AYYOydQaj7ClFQunESimjXDgg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-pg@0.42.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-sjgcM8CswYy8zxHgXv4RAZ09DlYhQ+9TdlourUs63Df/ek5RrB1ZbjznqW7PB6c3TyJJmX6AVtPTjAsROovEjA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.4 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation-redis-4@0.40.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-0ieQYJb6yl35kXA75LQUPhHtGjtQU9L85KlWa7d4ohBbk/iQKZ3X3CFl5jC5vNMq/GGPB3+w3IxNvALlHtrp7A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/instrumentation@0.43.0(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-S1uHE+sxaepgp+t8lvIDuRgyjJWisAb733198kwQTUc9ZtYQ2V2gmyCtR1x21ePGVLoMiX/NWY7WA290hwkjJQ==} + engines: {node: '>=14'} + requiresBuild: true + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.4.2 + require-in-the-middle: 7.3.0 + semver: 7.6.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /@opentelemetry/instrumentation@0.52.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-uXJbYU/5/MBHjMp1FqrILLRuiJCs3Ofk0MeRDk8g1S1gD47U8X3JnSwcMO1rtRo1x1a7zKaQHaoYu49p/4eSKw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.52.1 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.9.0 + require-in-the-middle: 7.3.0 + semver: 7.6.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@opentelemetry/redis-common@0.36.2: + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/resources@1.25.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-pkZT+iFYIZsVn6+GzM0kSX+u3MSLCY9md+lIJOoKl/P+gJFfxJte/60Usdp8Ce4rOs8GduUpSPNe1ddGyDT1sQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + + /@opentelemetry/sdk-metrics@1.25.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-9Mb7q5ioFL4E4dDrc4wC/A3NTHDat44v4I3p2pLPSxRvqUbDIQyMVr9uK+EU69+HWhlET1VaSrRzwdckWqY15Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + lodash.merge: 4.6.2 + dev: false + + /@opentelemetry/sdk-trace-base@1.25.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + dev: false + + /@opentelemetry/semantic-conventions@1.25.1: + resolution: {integrity: sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ==} + engines: {node: '>=14'} + dev: false + + /@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0): + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + dev: false + /@parcel/watcher-android-arm64@2.4.1: resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} engines: {node: '>= 10.0.0'} @@ -4729,7 +5049,6 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} requiresBuild: true - dev: true optional: true /@pkgr/core@0.1.1: @@ -4737,6 +5056,16 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true + /@prisma/instrumentation@5.16.1: + resolution: {integrity: sha512-4m5gRFWnQb8s/yTyGbMZkL7A5uJgqOWcWJxapwcAD0T0kh5sGPEVSQl/zTQvE9aduXhFAxOtC3gO+R8Hb5xO1Q==} + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + dev: false + /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} dev: false @@ -4811,6 +5140,39 @@ packages: resolution: {integrity: sha512-zGzFsgtZ44mgL4Xef2gOy1hrRVdrs9mcxCOOKZrIPsmbZW14yTkaF591GXxpQvjXiHtgZ/iA9qLyWH6oSReIxQ==} dev: false + /@rollup/plugin-commonjs@26.0.1(rollup@3.29.4): + resolution: {integrity: sha512-UnsKoZK6/aGIH6AdkptXhNvhaqftcjq3zZdT+LY5Ftms6JR06nADcDsYp5hTU9E2lbJUEOhdlY5J4DNTneM+jQ==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 10.4.1 + is-reference: 1.2.1 + magic-string: 0.30.10 + rollup: 3.29.4 + dev: false + + /@rollup/pluginutils@5.1.0(rollup@3.29.4): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 3.29.4 + dev: false + /@rushstack/eslint-patch@1.10.3: resolution: {integrity: sha512-qC/xYId4NMebE6w/V33Fh9gWxLgURiNYgVNObbJl2LZv0GUUItCcCqC5axQSwRaAgaxl2mELq1rMzlswaQ0Zxg==} dev: true @@ -4896,6 +5258,165 @@ packages: '@noble/hashes': 1.4.0 '@scure/base': 1.1.7 + /@sentry-internal/browser-utils@8.16.0: + resolution: {integrity: sha512-40lzNy5F6dUFCN85AGThBxHPQLSwoNhZM2hWqhAR5rZ3Yed0uBaKlm4aNJCeeUB9l4kd0sH0In+i9Nqu6TGKrw==} + engines: {node: '>=14.18'} + dependencies: + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry-internal/feedback@8.16.0: + resolution: {integrity: sha512-BmRazZKl6iiVSg6eybUNOI1ve4eZqYpJYjkX48Jedn+7iZg7z12MNYl6IWPFBcN+sg+clf4wiKDr/SYS0yNemQ==} + engines: {node: '>=14.18'} + dependencies: + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry-internal/replay-canvas@8.16.0: + resolution: {integrity: sha512-Bjh6pCDLZIPAPU2dNvJfI7BQV16rsRtYcylJgkGamjf8IcaBu7r/Whsvt1q34xO29xc0ISlp+0xG+YAdN1690Q==} + engines: {node: '>=14.18'} + dependencies: + '@sentry-internal/replay': 8.16.0 + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry-internal/replay@8.16.0: + resolution: {integrity: sha512-JT/wmYU2JPtl8Ldl9oml/25Yz6C5wG+SpylDeUx4mPh728E/iI9vesIc2652J/0xots/DZXe4K6K5nYjdFtEcQ==} + engines: {node: '>=14.18'} + dependencies: + '@sentry-internal/browser-utils': 8.16.0 + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry/babel-plugin-component-annotate@2.20.1: + resolution: {integrity: sha512-4mhEwYTK00bIb5Y9UWIELVUfru587Vaeg0DQGswv4aIRHIiMKLyNqCEejaaybQ/fNChIZOKmvyqXk430YVd7Qg==} + engines: {node: '>= 14'} + dev: false + + /@sentry/browser@8.16.0: + resolution: {integrity: sha512-8Fxmk2aFWRixi2IKixiJR10Du34yb13HYr2iRw1haPKb5ZKa6CFA+XAnSzwpPZxO0RSHuPQR06YNkXaQ8fRAQQ==} + engines: {node: '>=14.18'} + dependencies: + '@sentry-internal/browser-utils': 8.16.0 + '@sentry-internal/feedback': 8.16.0 + '@sentry-internal/replay': 8.16.0 + '@sentry-internal/replay-canvas': 8.16.0 + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry/bundler-plugin-core@2.20.1: + resolution: {integrity: sha512-6ipbmGzHekxeRCbp7eoefr6bdd/lW4cNA9eNnrmd9+PicubweGaZZbH2NjhFHsaxzgOezwipDHjrTaap2kTHgw==} + engines: {node: '>= 14'} + dependencies: + '@babel/core': 7.24.7 + '@sentry/babel-plugin-component-annotate': 2.20.1 + '@sentry/cli': 2.32.1 + dotenv: 16.4.5 + find-up: 5.0.0 + glob: 9.3.5 + magic-string: 0.30.8 + unplugin: 1.0.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + + /@sentry/cli-darwin@2.32.1: + resolution: {integrity: sha512-z/lEwANTYPCzbWTZ2+eeeNYxRLllC8knd0h+vtAKlhmGw/fyc/N39cznIFyFu+dLJ6tTdjOWOeikHtKuS/7onw==} + engines: {node: '>=10'} + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-linux-arm64@2.32.1: + resolution: {integrity: sha512-hsGqHYuecUl1Yhq4MhiRejfh1gNlmhyNPcQEoO/DDRBnGnJyEAdiDpKXJcc2e/lT9k40B55Ob2CP1SeY040T2w==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux, freebsd] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-linux-arm@2.32.1: + resolution: {integrity: sha512-m0lHkn+o4YKBq8KptGZvpT64FAwSl9mYvHZO9/ChnEGIJ/WyJwiN1X1r9JHVaW4iT5lD0Y5FAyq3JLkk0m0XHg==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux, freebsd] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-linux-i686@2.32.1: + resolution: {integrity: sha512-SuMLN1/ceFd3Q/B0DVyh5igjetTAF423txiABAHASenEev0lG0vZkRDXFclfgDtDUKRPmOXW7VDMirM3yZWQHQ==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [linux, freebsd] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-linux-x64@2.32.1: + resolution: {integrity: sha512-x4FGd6xgvFddz8V/dh6jii4wy9qjWyvYLBTz8Fhi9rIP+b8wQ3oxwHIdzntareetZP7C1ggx+hZheiYocNYVwA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux, freebsd] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-win32-i686@2.32.1: + resolution: {integrity: sha512-i6aZma9mFzR+hqMY5VliQZEX6ypP/zUjPK0VtIMYWs5cC6PsQLRmuoeJmy3Z7d4nlh0CdK5NPC813Ej6RY6/vg==} + engines: {node: '>=10'} + cpu: [x86, ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli-win32-x64@2.32.1: + resolution: {integrity: sha512-B58w/lRHLb4MUSjJNfMMw2cQykfimDCMLMmeK+1EiT2RmSeNQliwhhBxYcKk82a8kszH6zg3wT2vCea7LyPUyA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@sentry/cli@2.32.1: + resolution: {integrity: sha512-MWkbkzZfnlE7s2pPbg4VozRSAeMlIObfZlTIou9ye6XnPt6ZmmxCLOuOgSKMv4sXg6aeqKNzMNiadThxCWyvPg==} + engines: {node: '>= 10'} + hasBin: true + requiresBuild: true + dependencies: + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0 + progress: 2.0.3 + proxy-from-env: 1.1.0 + which: 2.0.2 + optionalDependencies: + '@sentry/cli-darwin': 2.32.1 + '@sentry/cli-linux-arm': 2.32.1 + '@sentry/cli-linux-arm64': 2.32.1 + '@sentry/cli-linux-i686': 2.32.1 + '@sentry/cli-linux-x64': 2.32.1 + '@sentry/cli-win32-i686': 2.32.1 + '@sentry/cli-win32-x64': 2.32.1 + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@sentry/core@5.30.0: resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} engines: {node: '>=6'} @@ -4907,6 +5428,14 @@ packages: tslib: 1.14.1 dev: false + /@sentry/core@8.16.0: + resolution: {integrity: sha512-l9mQgm5OqnykvZMh6PmJ/9ygW4qLyEFop+pQH/uM5zQCZQvEa7rvAd9QXKHdbVKq1CxJa/nJiByc8wPWxsftGQ==} + engines: {node: '>=14.18'} + dependencies: + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + /@sentry/hub@5.30.0: resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} engines: {node: '>=6'} @@ -4925,6 +5454,43 @@ packages: tslib: 1.14.1 dev: false + /@sentry/nextjs@8.16.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(next@14.0.3)(react@18.2.0)(webpack@5.92.1): + resolution: {integrity: sha512-8BVbKujCWxSHr9ZVQESE/5jX1N9GT6qcMOUuRM0afokrrQg1aVfmg5mfhuIZvB3YbOH2ZGPyaqPhfNJuB/KwHg==} + engines: {node: '>=14.18'} + peerDependencies: + next: ^13.2.0 || ^14.0 || ^15.0.0-rc.0 + webpack: '>= 5.0.0' + peerDependenciesMeta: + webpack: + optional: true + dependencies: + '@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@rollup/plugin-commonjs': 26.0.1(rollup@3.29.4) + '@sentry/core': 8.16.0 + '@sentry/node': 8.16.0 + '@sentry/opentelemetry': 8.16.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(@opentelemetry/semantic-conventions@1.25.1) + '@sentry/react': 8.16.0(react@18.2.0) + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + '@sentry/vercel-edge': 8.16.0 + '@sentry/webpack-plugin': 2.20.1(webpack@5.92.1) + chalk: 3.0.0 + next: 14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) + resolve: 1.22.8 + rollup: 3.29.4 + stacktrace-parser: 0.1.10 + webpack: 5.92.1(esbuild@0.16.17) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/core' + - '@opentelemetry/instrumentation' + - '@opentelemetry/sdk-trace-base' + - encoding + - react + - supports-color + dev: false + /@sentry/node@5.30.0: resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} engines: {node: '>=6'} @@ -4942,6 +5508,77 @@ packages: - supports-color dev: false + /@sentry/node@8.16.0: + resolution: {integrity: sha512-MIc09ECfTcJ5Vqo0QUJ9MUVSQZU6IDqIzPj2QsRDnRVU5QnghNgZcK7raovNz8vByFEWoFuMwPpKabf1pN4pWA==} + engines: {node: '>=14.18'} + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.37.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.40.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fastify': 0.37.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.41.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.45.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.39.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-nestjs-core': 0.38.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.42.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.40.0(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@prisma/instrumentation': 5.16.1 + '@sentry/core': 8.16.0 + '@sentry/opentelemetry': 8.16.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(@opentelemetry/semantic-conventions@1.25.1) + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + optionalDependencies: + opentelemetry-instrumentation-fetch-node: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@sentry/opentelemetry@8.16.0(@opentelemetry/api@1.9.0)(@opentelemetry/core@1.25.1)(@opentelemetry/instrumentation@0.52.1)(@opentelemetry/sdk-trace-base@1.25.1)(@opentelemetry/semantic-conventions@1.25.1): + resolution: {integrity: sha512-x5yXEpv6flmNMcghTdgKd7zktWqnjG0H2g90j+XAetvsLxVGzmQkwn4XR4YDoL5qFJ08DxcWdXs4B5oplOtsVA==} + engines: {node: '>=14.18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/core': ^1.25.1 + '@opentelemetry/instrumentation': ^0.52.1 + '@opentelemetry/sdk-trace-base': ^1.25.1 + '@opentelemetry/semantic-conventions': ^1.25.1 + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.52.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.25.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry/react@8.16.0(react@18.2.0): + resolution: {integrity: sha512-5q2CMz+nJxTVXrNC82MpIFYvg4D2Fcdwp3LccESDln3IazetvTHJpEefjfeIGHus4spCfXilgGMsnnbyTZlbWg==} + engines: {node: '>=14.18'} + peerDependencies: + react: ^16.14.0 || 17.x || 18.x || 19.x + dependencies: + '@sentry/browser': 8.16.0 + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + dev: false + /@sentry/tracing@5.30.0: resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} engines: {node: '>=6'} @@ -4958,6 +5595,11 @@ packages: engines: {node: '>=6'} dev: false + /@sentry/types@8.16.0: + resolution: {integrity: sha512-cIRsn7gWGVaWHgCniBWA0N8PNwzDYibhjyjPRTMxUjuZCT37i7zxByKKmd9u4TpRIJ64MyirNyM0O6T0A26fpg==} + engines: {node: '>=14.18'} + dev: false + /@sentry/utils@5.30.0: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} @@ -4966,6 +5608,37 @@ packages: tslib: 1.14.1 dev: false + /@sentry/utils@8.16.0: + resolution: {integrity: sha512-tltCf2DVzz5TiYjxu/Rxbc9Qmm04893MFshV97jOTBcQeO2AAZBEl5rAoTCv1P08y7Yg+KiVwCx9Zj2x5U80/g==} + engines: {node: '>=14.18'} + dependencies: + '@sentry/types': 8.16.0 + dev: false + + /@sentry/vercel-edge@8.16.0: + resolution: {integrity: sha512-dvv3gMd/Hwwq5WTIdlP0V6i6G4MFV0Q2kvVAcFn6BOh8/kQmpYfgxGZfNg+9L02EKg7fW0tEbPCYBsMF9JkbmA==} + engines: {node: '>=14.18'} + dependencies: + '@sentry/core': 8.16.0 + '@sentry/types': 8.16.0 + '@sentry/utils': 8.16.0 + dev: false + + /@sentry/webpack-plugin@2.20.1(webpack@5.92.1): + resolution: {integrity: sha512-U6LzoE09Ndt0OCWROoRaZqqIHGxyMRdKpBhbqoBqyyfVwXN/zGW3I/cWZ1e8rreiKFj+2+c7+X0kOS+NGMTUrg==} + engines: {node: '>= 14'} + peerDependencies: + webpack: '>=4.40.0' + dependencies: + '@sentry/bundler-plugin-core': 2.20.1 + unplugin: 1.0.1 + uuid: 9.0.1 + webpack: 5.92.1(esbuild@0.16.17) + transitivePeerDependencies: + - encoding + - supports-color + dev: false + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -5271,6 +5944,12 @@ packages: typechain: 8.3.2(typescript@5.2.2) dev: false + /@types/accepts@1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + dependencies: + '@types/node': 17.0.45 + dev: false + /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} dev: true @@ -5287,6 +5966,13 @@ packages: '@types/node': 17.0.45 dev: false + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 17.0.45 + dev: false + /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: @@ -5318,27 +6004,90 @@ packages: '@types/node': 20.14.4 dev: false + /@types/connect@3.4.36: + resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==} + dependencies: + '@types/node': 17.0.45 + dev: false + /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: '@types/node': 20.14.4 dev: false + /@types/content-disposition@0.5.8: + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + dev: false + + /@types/cookies@0.9.0: + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + dependencies: + '@types/connect': 3.4.38 + '@types/express': 4.17.21 + '@types/keygrip': 1.0.6 + '@types/node': 17.0.45 + dev: false + /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: '@types/ms': 0.7.34 + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + dependencies: + '@types/eslint': 8.56.10 + '@types/estree': 1.0.5 + dev: false + + /@types/eslint@8.56.10: + resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: false + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: false + + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + dependencies: + '@types/node': 17.0.45 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: false + + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.15 + '@types/serve-static': 1.15.7 + dev: false + /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: '@types/node': 20.14.4 dev: false + /@types/http-assert@1.5.5: + resolution: {integrity: sha512-4+tE/lwdAahgZT1g30Jkdm9PzFRde0xwxBNUyRsCitRvCQB90iuA2uJYdUnhnANRcqGXaWOGY4FEoxeElNAK2g==} + dev: false + /@types/http-cache-semantics@4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} dev: false + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false + /@types/istanbul-lib-coverage@2.0.6: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true @@ -5364,18 +6113,46 @@ packages: /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true + /@types/keygrip@1.0.6: + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + dev: false + /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 17.0.45 dev: false + /@types/koa-compose@3.2.8: + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + dependencies: + '@types/koa': 2.14.0 + dev: false + + /@types/koa@2.14.0: + resolution: {integrity: sha512-DTDUyznHGNHAl+wd1n0z1jxNajduyTh8R53xoewuerdBzGo6Ogj6F2299BFtrexJw4NtgjsI5SMPCmV9gZwGXA==} + dependencies: + '@types/accepts': 1.3.7 + '@types/content-disposition': 0.5.8 + '@types/cookies': 0.9.0 + '@types/http-assert': 1.5.5 + '@types/http-errors': 2.0.4 + '@types/keygrip': 1.0.6 + '@types/koa-compose': 3.2.8 + '@types/node': 17.0.45 + dev: false + + /@types/koa__router@12.0.3: + resolution: {integrity: sha512-5YUJVv6NwM1z7m6FuYpKfNLTZ932Z6EF6xy2BbtpJSyn13DKNQEkXVffFVSnJHxvwwWh2SAeumpjAYUELqgjyw==} + dependencies: + '@types/koa': 2.14.0 + dev: false + /@types/lodash-es@4.17.12: resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} dependencies: @@ -5394,6 +6171,10 @@ packages: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: false + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false + /@types/minimatch@3.0.5: resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} dev: false @@ -5401,6 +6182,12 @@ packages: /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + /@types/mysql@2.15.22: + resolution: {integrity: sha512-wK1pzsJVVAjYCSZWQoWHziQZbNggXFDUEIGf54g4ZM/ERuP86uGdWeKZWMYlqTPMZfHJJvLPyogXGvCOg87yLQ==} + dependencies: + '@types/node': 17.0.45 + dev: false + /@types/node@10.17.60: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: false @@ -5429,10 +6216,24 @@ packages: resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: false - /@types/pbkdf2@3.1.2: - resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + /@types/pbkdf2@3.1.2: + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + dependencies: + '@types/node': 17.0.45 + dev: false + + /@types/pg-pool@2.0.4: + resolution: {integrity: sha512-qZAvkv1K3QbmHHFYSNRYPkRjOWRLBYrL4B9c+wG0GSVGBw0NtJwPcgx/DSddeDJvRGMHCEQ4VMEVfuJ/0gZ3XQ==} + dependencies: + '@types/pg': 8.6.1 + dev: false + + /@types/pg@8.6.1: + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} dependencies: '@types/node': 17.0.45 + pg-protocol: 1.6.1 + pg-types: 2.2.0 dev: false /@types/prettier@2.7.3: @@ -5446,6 +6247,10 @@ packages: resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} dev: false + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false + /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} dependencies: @@ -5474,6 +6279,25 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 17.0.45 + dev: false + + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 17.0.45 + '@types/send': 0.17.4 + dev: false + + /@types/shimmer@1.2.0: + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + dev: false + /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} dev: true @@ -5747,7 +6571,7 @@ packages: react: '>=18.0.0' urql: ^4.0.0 dependencies: - next: 14.0.3(@babel/core@7.24.7)(react-dom@18.2.0)(react@18.2.0) + next: 14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 urql: 4.1.0(@urql/core@5.0.4)(react@18.2.0) dev: false @@ -6423,6 +7247,112 @@ packages: '@walletconnect/window-getters': 1.0.1 tslib: 1.14.1 + /@webassemblyjs/ast@1.12.1: + resolution: {integrity: sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + dev: false + + /@webassemblyjs/floating-point-hex-parser@1.11.6: + resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==} + dev: false + + /@webassemblyjs/helper-api-error@1.11.6: + resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==} + dev: false + + /@webassemblyjs/helper-buffer@1.12.1: + resolution: {integrity: sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==} + dev: false + + /@webassemblyjs/helper-numbers@1.11.6: + resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.6 + '@webassemblyjs/helper-api-error': 1.11.6 + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/helper-wasm-bytecode@1.11.6: + resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==} + dev: false + + /@webassemblyjs/helper-wasm-section@1.12.1: + resolution: {integrity: sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/wasm-gen': 1.12.1 + dev: false + + /@webassemblyjs/ieee754@1.11.6: + resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: false + + /@webassemblyjs/leb128@1.11.6: + resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==} + dependencies: + '@xtuc/long': 4.2.2 + dev: false + + /@webassemblyjs/utf8@1.11.6: + resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==} + dev: false + + /@webassemblyjs/wasm-edit@1.12.1: + resolution: {integrity: sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/helper-wasm-section': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-opt': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + '@webassemblyjs/wast-printer': 1.12.1 + dev: false + + /@webassemblyjs/wasm-gen@1.12.1: + resolution: {integrity: sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wasm-opt@1.12.1: + resolution: {integrity: sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-buffer': 1.12.1 + '@webassemblyjs/wasm-gen': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + dev: false + + /@webassemblyjs/wasm-parser@1.12.1: + resolution: {integrity: sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/helper-api-error': 1.11.6 + '@webassemblyjs/helper-wasm-bytecode': 1.11.6 + '@webassemblyjs/ieee754': 1.11.6 + '@webassemblyjs/leb128': 1.11.6 + '@webassemblyjs/utf8': 1.11.6 + dev: false + + /@webassemblyjs/wast-printer@1.12.1: + resolution: {integrity: sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==} + dependencies: + '@webassemblyjs/ast': 1.12.1 + '@xtuc/long': 4.2.2 + dev: false + /@whatwg-node/events@0.0.3: resolution: {integrity: sha512-IqnKIDWfXBJkvy/k6tzskWTc2NK3LcqHlb+KHGCrjOCH4jfQckRX0NAiIcC/vIqQkzLYw2r2CTSwAxcrtcD6lA==} dev: false @@ -6521,6 +7451,14 @@ packages: dev: true optional: true + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: false + + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: false + /JSONStream@1.3.2: resolution: {integrity: sha512-mn0KSip7N4e0UDPZHnqDsHECo5uGQrixQKnAskOM1BIB8hd7QKbd6il8IPRPudPHOeHiECoCFqhyMaRO9+nWyA==} hasBin: true @@ -6644,6 +7582,24 @@ packages: acorn-walk: 8.3.3 dev: true + /acorn-import-assertions@1.9.0(acorn@8.12.0): + resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} + requiresBuild: true + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.12.0 + dev: false + optional: true + + /acorn-import-attributes@1.9.5(acorn@8.12.0): + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.12.0 + dev: false + /acorn-jsx@5.3.2(acorn@7.4.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -6740,6 +7696,14 @@ packages: dependencies: ajv: 8.16.0 + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: false + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -6790,7 +7754,6 @@ packages: /ansi-regex@6.0.1: resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} engines: {node: '>=12'} - dev: true /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} @@ -6812,7 +7775,6 @@ packages: /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - dev: true /ansicolors@0.3.2: resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} @@ -7682,6 +8644,11 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + dev: false + /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: false @@ -7727,6 +8694,10 @@ packages: dependencies: consola: 3.2.3 + /cjs-module-lexer@1.3.1: + resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} + dev: false + /class-is@1.1.0: resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} dev: false @@ -7933,6 +8904,10 @@ packages: engines: {node: '>=4.0.0'} dev: true + /commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} @@ -8554,7 +9529,6 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true /echarts-for-react@3.0.2(echarts@5.5.0)(react@18.2.0): resolution: {integrity: sha512-DRwIiTzx8JfwPOVgGttDytBqdp5VzCSyMRIxubgU/g2n9y3VLUmF2FK7Icmg/sNVkv4+rktmrLN9w22U2yy3fA==} @@ -8630,7 +9604,6 @@ packages: /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true /encode-utf8@1.0.3: resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==} @@ -8645,6 +9618,14 @@ packages: dependencies: once: 1.4.0 + /enhanced-resolve@5.17.0: + resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: false + /enquirer@2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} @@ -8786,6 +9767,10 @@ packages: safe-array-concat: 1.1.2 dev: true + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + dev: false + /es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -8855,7 +9840,6 @@ packages: '@esbuild/win32-arm64': 0.16.17 '@esbuild/win32-ia32': 0.16.17 '@esbuild/win32-x64': 0.16.17 - dev: true /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} @@ -9180,7 +10164,6 @@ packages: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} @@ -9343,17 +10326,18 @@ packages: engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - dev: true /estraverse@4.3.0: resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} engines: {node: '>=4.0'} - dev: true /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: false /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} @@ -9843,7 +10827,6 @@ packages: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true /form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} @@ -10110,7 +11093,6 @@ packages: minimatch: 9.0.4 minipass: 7.1.2 path-scurry: 1.11.1 - dev: true /glob@7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -10528,8 +11510,6 @@ packages: requiresBuild: true dependencies: react-is: 16.13.1 - dev: true - optional: true /html-encoding-sniffer@3.0.0: resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} @@ -10713,6 +11693,26 @@ packages: engines: {node: '>=12.2'} dev: true + /import-in-the-middle@1.4.2: + resolution: {integrity: sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==} + requiresBuild: true + dependencies: + acorn: 8.12.0 + acorn-import-assertions: 1.9.0(acorn@8.12.0) + cjs-module-lexer: 1.3.1 + module-details-from-path: 1.0.3 + dev: false + optional: true + + /import-in-the-middle@1.9.0: + resolution: {integrity: sha512-Ng1SJINJDBzyUEkx9Mj32XD8G0TQCUb5TMoL9V91CTn6F3wYZLygLuhNFrv0cNMBZaeptnL1zecV6XrIdHJ+xQ==} + dependencies: + acorn: 8.12.0 + acorn-import-attributes: 1.9.5(acorn@8.12.0) + cjs-module-lexer: 1.3.1 + module-details-from-path: 1.0.3 + dev: false + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} @@ -10953,7 +11953,6 @@ packages: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.2 - dev: true /is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -11105,6 +12104,12 @@ packages: /is-property@1.0.2: resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: false + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -11371,7 +12376,6 @@ packages: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true /jake@10.9.1: resolution: {integrity: sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==} @@ -11458,6 +12462,15 @@ packages: picomatch: 2.3.1 dev: true + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 17.0.45 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: false + /jiti@1.21.6: resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true @@ -11747,6 +12760,11 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + dev: false + /local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -11980,6 +12998,19 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: false + /make-dir@3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -12164,7 +13195,6 @@ packages: engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - dev: true /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -12307,6 +13337,10 @@ packages: resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} dev: false + /module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + dev: false + /motion@10.16.2: resolution: {integrity: sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ==} dependencies: @@ -12483,6 +13517,10 @@ packages: dev: true optional: true + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: false + /next-themes@0.2.1(next@14.0.3)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} peerDependencies: @@ -12490,12 +13528,12 @@ packages: react: '*' react-dom: '*' dependencies: - next: 14.0.3(@babel/core@7.24.7)(react-dom@18.2.0)(react@18.2.0) + next: 14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0) react: 18.2.0 react-dom: 18.2.0(react@18.2.0) dev: false - /next@14.0.3(@babel/core@7.24.7)(react-dom@18.2.0)(react@18.2.0): + /next@14.0.3(@babel/core@7.24.7)(@opentelemetry/api@1.9.0)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==} engines: {node: '>=18.17.0'} hasBin: true @@ -12511,6 +13549,7 @@ packages: optional: true dependencies: '@next/env': 14.0.3 + '@opentelemetry/api': 1.9.0 '@swc/helpers': 0.5.2 busboy: 1.6.0 caniuse-lite: 1.0.30001636 @@ -12854,6 +13893,19 @@ packages: is-wsl: 2.2.0 dev: true + /opentelemetry-instrumentation-fetch-node@1.2.0: + resolution: {integrity: sha512-aiSt/4ubOTyb1N5C2ZbGrBvaJOXIZhZvpRPYuUVxQJe27wJZqf/o65iPrqgLcgfeOLaQ8cS2Q+762jrYvniTrA==} + engines: {node: '>18.0.0'} + requiresBuild: true + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.43.0(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.25.1 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + /optimism@0.18.0: resolution: {integrity: sha512-tGn8+REwLRNFnb9WmcY5IfpOqeX2kpaYJ1s6Ae3mn12AeydLkR3j+jSCmVQFoXqU8D41PAJ1RG1rCRNWmNZVmQ==} requiresBuild: true @@ -13144,6 +14196,26 @@ packages: sha.js: 2.4.11 dev: false + /pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + dev: false + + /pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} + dev: false + + /pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + dev: false + /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -13324,6 +14396,28 @@ packages: source-map-js: 1.2.0 dev: true + /postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + dev: false + + /postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + dependencies: + xtend: 4.0.2 + dev: false + /preact@10.22.0: resolution: {integrity: sha512-RRurnSjJPj4rp5K6XoP45Ui33ncb7e4H7WiOHVpjbkvqvA3U+N8Z6Qbo0AE6leGYBV66n8EhEaFixvIu3SkxFw==} @@ -13459,7 +14553,6 @@ packages: /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - dev: true /promise-retry@2.0.1: resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} @@ -13514,6 +14607,10 @@ packages: /proxy-compare@2.5.1: resolution: {integrity: sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA==} + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true @@ -13649,7 +14746,6 @@ packages: /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true /react-is@17.0.2: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} @@ -13930,6 +15026,17 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + /require-in-the-middle@7.3.0: + resolution: {integrity: sha512-nQFEv9gRw6SJAwWD2LrL0NmQvAcO7FBwJbwmr2ttPAacfy0xuiOjE5zt+zM4xDyuyvUaxBi/9gb2SoCyNEVJcw==} + engines: {node: '>=8.6.0'} + dependencies: + debug: 4.3.5 + module-details-from-path: 1.0.3 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + /require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} @@ -13963,7 +15070,6 @@ packages: is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true /resolve@2.0.0-next.5: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} @@ -14074,7 +15180,6 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.3 - dev: true /rrweb-cssom@0.6.0: resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} @@ -14130,6 +15235,15 @@ packages: dependencies: loose-envify: 1.4.0 + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: false @@ -14192,6 +15306,12 @@ packages: randombytes: 2.1.0 dev: false + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + dependencies: + randombytes: 2.1.0 + dev: false + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -14240,6 +15360,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + /shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + dev: false + /side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} @@ -14489,7 +15613,6 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true /string.prototype.matchall@4.0.11: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} @@ -14569,7 +15692,6 @@ packages: engines: {node: '>=12'} dependencies: ansi-regex: 6.0.1 - dev: true /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} @@ -14673,7 +15795,6 @@ packages: /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - dev: true /swap-case@2.0.2: resolution: {integrity: sha512-kc6S2YS/2yXbtkSMunBtKdah4VFETZ8Oh6ONSmSd9bRxhqTrtARUCBUiWXH3xVPpvR7tz2CSnkuXVE42EcGnMw==} @@ -14771,6 +15892,11 @@ packages: - ts-node dev: true + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false + /tar-fs@1.16.3: resolution: {integrity: sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==} dependencies: @@ -14804,6 +15930,42 @@ packages: mkdirp: 1.0.4 yallist: 4.0.0 + /terser-webpack-plugin@5.3.10(esbuild@0.16.17)(webpack@5.92.1): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + esbuild: 0.16.17 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.31.1 + webpack: 5.92.1(esbuild@0.16.17) + dev: false + + /terser@5.31.1: + resolution: {integrity: sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.12.0 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: false + /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -15385,6 +16547,15 @@ packages: engines: {node: '>= 0.8'} dev: false + /unplugin@1.0.1: + resolution: {integrity: sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==} + dependencies: + acorn: 8.12.0 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: false + /unstorage@1.10.2(idb-keyval@6.2.1): resolution: {integrity: sha512-cULBcwDqrS8UhlIysUJs2Dk0Mmt8h7B0E6mtR+relW9nZvsf/u4SkAYyNliPiPW7XtFNb5u3IUMkxGxFTTRTgQ==} peerDependencies: @@ -15860,6 +17031,14 @@ packages: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 + /watchpack@2.4.1: + resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + dev: false + /wcwidth@1.0.1: resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: @@ -15908,6 +17087,55 @@ packages: engines: {node: '>=12'} dev: true + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack-virtual-modules@0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: false + + /webpack@5.92.1(esbuild@0.16.17): + resolution: {integrity: sha512-JECQ7IwJb+7fgUFBlrJzbyu3GEuNBcdqr1LD7IbSzwkSmIevTm8PF+wej3Oxuz/JFBUZ6O1o43zsPkwm1C4TmA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.5 + '@webassemblyjs/ast': 1.12.1 + '@webassemblyjs/wasm-edit': 1.12.1 + '@webassemblyjs/wasm-parser': 1.12.1 + acorn: 8.12.0 + acorn-import-attributes: 1.9.5(acorn@8.12.0) + browserslist: 4.23.1 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.0 + es-module-lexer: 1.5.4 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 3.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.10(esbuild@0.16.17)(webpack@5.92.1) + watchpack: 2.4.1 + webpack-sources: 3.2.3 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: false + /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -16075,7 +17303,6 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} From 56730632d895ed1163f79257bf9387ad0889f29a Mon Sep 17 00:00:00 2001 From: Matias Date: Tue, 9 Jul 2024 14:44:06 -0300 Subject: [PATCH 013/129] fix(`ProposalCard` `Proposals`): - Add types for stats - Implement ternary operator for classnames - Add ID attribute for Hashicon component - Perform minor tweaks and adjustments --- apps/web/components/ProposalCard.tsx | 20 +++++++++---- apps/web/components/Proposals.tsx | 43 ++++++++++++++++------------ 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/apps/web/components/ProposalCard.tsx b/apps/web/components/ProposalCard.tsx index e70bbc582..b8ee76711 100644 --- a/apps/web/components/ProposalCard.tsx +++ b/apps/web/components/ProposalCard.tsx @@ -1,7 +1,6 @@ "use client"; import React, { useEffect } from "react"; import { Badge, Button, Card, Statistic } from "@/components"; -import Link from "next/link"; import { usePathname } from "next/navigation"; import { ProposalInputItem, ProposalTypeVoter } from "./Proposals"; import { Allo, CVStrategy } from "#/subgraph/.graphclient"; @@ -132,9 +131,17 @@ export function ProposalCard({ triggerRenderProposals(); }, [distributeTxConfirmationHash]); - const inputValue = Number( - (inputData?.value * 100) / memberActivatedPoints, - ).toFixed(2); + { + /* TODO: minor improve here: have this when loading the data? */ + } + if (!inputData) { + return
loading...
; + } + + const inputValue = calculatePercentage( + inputData.value, + memberActivatedPoints, + ); const ProposalCardContent = ({ isAllocationMode, @@ -149,7 +156,7 @@ export function ProposalCard({
- +

{capitalize(title)}

ID {proposalNumber}
@@ -162,6 +169,7 @@ export function ProposalCard({ {!isAllocationMode && ( <>
+ {/* TODO: minor improve here */} inputHandler(i, Number(e.target.value))} diff --git a/apps/web/components/Proposals.tsx b/apps/web/components/Proposals.tsx index 9cd7ef3b3..299559914 100644 --- a/apps/web/components/Proposals.tsx +++ b/apps/web/components/Proposals.tsx @@ -52,6 +52,13 @@ export type ProposalTypeVoter = CVProposal & { type: number; }; +interface Stats { + id: number; + name: string; + stat: number | string; + className: string; +} + export function Proposals({ strategy, alloInfo, @@ -363,9 +370,9 @@ export function Proposals({ } }; - const poolWeightClassName = `bg-primary-soft text-primary-content ${calcPoolWeightUsed(memberSupportedProposalsPct) == memberPoolWeight && "bg-secondary-soft text-secondary-content"}`; + const poolWeightClassName = `${calcPoolWeightUsed(memberSupportedProposalsPct) === memberPoolWeight ? "bg-secondary-soft text-secondary-content" : "bg-primary-soft text-primary-content "}`; - const stats = [ + const stats: Stats[] = [ { id: 1, name: "Pool Weight", @@ -382,7 +389,7 @@ export function Proposals({ id: 3, name: "Total Allocation Percentage", stat: memberSupportedProposalsPct, - className: `bg-primary-content text-primary-soft border-primary-content ${memberSupportedProposalsPct >= 100 && "bg-secondary-content text-secondary-soft border-secondary-content "}`, + className: `${memberSupportedProposalsPct >= 100 ? "bg-secondary-content text-secondary-soft border-secondary-content" : "bg-primary-content text-primary-soft border-primary-content"}`, }, ]; @@ -399,23 +406,21 @@ export function Proposals({

Proposals

- {proposals ? ( - proposals.length === 0 ? ( -

No submitted proposals to support

- ) : ( - !allocationView && ( - - ) - ) + {!proposals ? ( + + ) : proposals.length === 0 ? ( +

No submitted proposals to support

) : ( - + !allocationView && ( + + ) )}
{allocationView && ( From 870774e8f52187466140593942c7f18a89c34b41 Mon Sep 17 00:00:00 2001 From: Corantin Date: Tue, 9 Jul 2024 14:00:50 -0400 Subject: [PATCH 014/129] Fix sentry project and tubo --- apps/web/next.config.js | 56 +++++++++++++++------------------ apps/web/src/instrumentation.ts | 8 ++--- turbo.json | 5 ++- 3 files changed, 34 insertions(+), 35 deletions(-) diff --git a/apps/web/next.config.js b/apps/web/next.config.js index 43238df4f..1c2575307 100644 --- a/apps/web/next.config.js +++ b/apps/web/next.config.js @@ -28,45 +28,41 @@ module.exports = { productionBrowserSourceMaps: true, }; - // Injected content via Sentry wizard below const { withSentryConfig } = require("@sentry/nextjs"); -module.exports = withSentryConfig( - module.exports, - { - // For all available options, see: - // https://github.com/getsentry/sentry-webpack-plugin#options +module.exports = withSentryConfig(module.exports, { + // For all available options, see: + // https://github.com/getsentry/sentry-webpack-plugin#options - org: "gardens", - project: "gardens-app", + org: "gardens", + project: "gardens-app", - // Only print logs for uploading source maps in CI - silent: !process.env.CI, + // Only print logs for uploading source maps in CI + silent: !process.env.CI, - // For all available options, see: - // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ + // For all available options, see: + // https://docs.sentry.io/platforms/javascript/guides/nextjs/manual-setup/ - // Upload a larger set of source maps for prettier stack traces (increases build time) - widenClientFileUpload: true, + // Upload a larger set of source maps for prettier stack traces (increases build time) + widenClientFileUpload: true, - // Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. - // This can increase your server load as well as your hosting bill. - // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- - // side errors will fail. - tunnelRoute: "/monitoring", + // Route browser requests to Sentry through a Next.js rewrite to circumvent ad-blockers. + // This can increase your server load as well as your hosting bill. + // Note: Check that the configured route will not match with your Next.js middleware, otherwise reporting of client- + // side errors will fail. + tunnelRoute: "/monitoring", - // Hides source maps from generated client bundles - hideSourceMaps: true, + // Hides source maps from generated client bundles + hideSourceMaps: true, - // Automatically tree-shake Sentry logger statements to reduce bundle size - disableLogger: true, + // Automatically tree-shake Sentry logger statements to reduce bundle size + disableLogger: true, - // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.) - // See the following for more information: - // https://docs.sentry.io/product/crons/ - // https://vercel.com/docs/cron-jobs - automaticVercelMonitors: true, - } -); + // Enables automatic instrumentation of Vercel Cron Monitors. (Does not yet work with App Router route handlers.) + // See the following for more information: + // https://docs.sentry.io/product/crons/ + // https://vercel.com/docs/cron-jobs + automaticVercelMonitors: true, +}); diff --git a/apps/web/src/instrumentation.ts b/apps/web/src/instrumentation.ts index 6a02852d9..10aaacea3 100644 --- a/apps/web/src/instrumentation.ts +++ b/apps/web/src/instrumentation.ts @@ -1,9 +1,9 @@ export async function register() { - if (process.env.NEXT_RUNTIME === 'nodejs') { - await import('../sentry.server.config'); + if (process.env.NEXT_RUNTIME === "nodejs") { + await import("../sentry.server.config"); } - if (process.env.NEXT_RUNTIME === 'edge') { - await import('../sentry.edge.config'); + if (process.env.NEXT_RUNTIME === "edge") { + await import("../sentry.edge.config"); } } diff --git a/turbo.json b/turbo.json index 646ebb56a..a2c34f2b2 100644 --- a/turbo.json +++ b/turbo.json @@ -30,7 +30,10 @@ "NEXT_PUBLIC_SUBGRAPH_URL_ETH_SEP", "PINATA_JWT", "NODE_ENV", - "NEXT_ABLY_API_KEY" + "NEXT_ABLY_API_KEY", + "NEXT_RUNTIME", + "NEXT_PUBLIC_SENTRY_REPLAYS_ON_ERROR_SAMPLE_RATE", + "NEXT_PUBLIC_SENTRY_REPLAYS_SESSION_SAMPLE_RATE" ] }, "test": { From 8bc786ffe918a29d291a182f8775ce39aaced048 Mon Sep 17 00:00:00 2001 From: Matias Date: Tue, 9 Jul 2024 20:16:05 -0300 Subject: [PATCH 015/129] feat: overall charts improvemnts to handle compact and standard views with a single CVChart component --- .../pool/[poolId]/[proposalId]/page.tsx | 28 +++-- .../components/Charts/ConvictionBarChart.tsx | 103 ++++++++---------- 2 files changed, 64 insertions(+), 67 deletions(-) diff --git a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx index d0e6099fc..b034bbc77 100644 --- a/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx +++ b/apps/web/app/(app)/gardens/[chain]/[garden]/[community]/pool/[poolId]/[proposalId]/page.tsx @@ -281,14 +281,26 @@ export default function Proposal({ Proposal passed and executed successfully
) : ( -
- -
+ <> + {/* TODO: momentary for test purposes */} +
+ +
+
+ +
+ )}
diff --git a/apps/web/components/Charts/ConvictionBarChart.tsx b/apps/web/components/Charts/ConvictionBarChart.tsx index c1444789a..c0a94c7c7 100644 --- a/apps/web/components/Charts/ConvictionBarChart.tsx +++ b/apps/web/components/Charts/ConvictionBarChart.tsx @@ -9,17 +9,21 @@ type ScenarioMapping = { details: [{ message: string; growing: boolean | null }]; }; +type ConvictionBarChartProps = { + currentConvictionPct: number; + thresholdPct: number; + proposalSupportPct: number; + isSignalingType: boolean; + compact?: boolean; +}; + export const ConvictionBarChart = ({ currentConvictionPct, thresholdPct, proposalSupportPct, isSignalingType, -}: { - currentConvictionPct: number; - thresholdPct: number; - proposalSupportPct: number; - isSignalingType: boolean; -}) => { + compact, +}: ConvictionBarChartProps) => { console.log( "proposalSupportPct: " + proposalSupportPct, "currentConvictionPct: " + currentConvictionPct, @@ -169,30 +173,34 @@ export const ConvictionBarChart = ({ label: { position: "start", formatter: "{@score} %", - fontSize: 16, + fontSize: compact ? 10 : 16, }, }; - const markLineTh: MarkLineComponentOption = isSignalingType - ? {} - : { - ...markLine, - data: [ - { - // xAxis: thresholdPct, - xAxis: 8, - symbol: - "path://M3 3v1.5M3 21v-6m0 0 2.77-.693a9 9 0 0 1 6.208.682l.108.054a9 9 0 0 0 6.086.71l3.114-.732a48.524 48.524 0 0 1-.005-10.499l-3.11.732a9 9 0 0 1-6.085-.711l-.108-.054a9 9 0 0 0-6.208-.682L3 4.5M3 15V4.5", - symbolSize: [20, 20], - symbolOffset: [-9, 95], + const markLineTh: MarkLineComponentOption = + isSignalingType || compact + ? {} + : { + ...markLine, + data: [ + { + // xAxis: thresholdPct, + xAxis: 8, + symbol: + "path://M3 3v1.5M3 21v-6m0 0 2.77-.693a9 9 0 0 1 6.208.682l.108.054a9 9 0 0 0 6.086.71l3.114-.732a48.524 48.524 0 0 1-.005-10.499l-3.11.732a9 9 0 0 1-6.085-.711l-.108-.054a9 9 0 0 0-6.208-.682L3 4.5M3 15V4.5", + symbolSize: [16, 16], + symbolOffset: [-7, 46], + }, + ], + // label: { + // // distance: 0, + // }, + lineStyle: { + width: 1, + color: "#191919", }, - ], - lineStyle: { - width: 1, - color: "#191919", - }, - z: 50, - }; + z: 50, + }; const markLineCv: MarkLineComponentOption = // currentConvictionPct === 0 @@ -222,7 +230,7 @@ export const ConvictionBarChart = ({ // }, emphasis: emphasis, yAxis: { - data: ["cv"], + data: ["Proposal #1"], axisTick: { show: false }, axisLabel: { formatter: "", @@ -231,39 +239,16 @@ export const ConvictionBarChart = ({ show: false, }, }, + tooltip: { + trigger: compact ? "axis" : "none", + valueFormatter: (value) => value + "%", + borderWidth: 1, + borderColor: "#191919", + axisPointer: { + type: "shadow", + }, + }, - // legend: { - // itemGap: 35, - // selectedMode: false, - // textStyle: { - // fontSize: 13, - // }, - // data: [ - // { - // name: "Support", - // icon: "rect", - // }, - // { - // name: "Conviction", - // icon: "rect", - // }, - // { - // name: "Threshold", - // icon: "rect", - // itemStyle: { - // color: "none", - // borderType: "dashed", - // borderColor: "#191919", - // borderWidth: 2, - // }, - // }, - // ], - // }, - // toolbox: { - // feature: { - // saveAsImage: { show: true }, - // }, - // }, grid: { show: false, left: "5%", From 74aaea3e3b42927bd65e3350bfc5e37dc5fe116f Mon Sep 17 00:00:00 2001 From: Corantin Date: Wed, 10 Jul 2024 12:34:02 -0400 Subject: [PATCH 016/129] Addd ocnsole integration and graphql --- apps/web/sentry.client.config.ts | 2 ++ apps/web/sentry.conf.ts | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/apps/web/sentry.client.config.ts b/apps/web/sentry.client.config.ts index 7c9221114..03e86eba2 100644 --- a/apps/web/sentry.client.config.ts +++ b/apps/web/sentry.client.config.ts @@ -25,5 +25,7 @@ Sentry.init({ maskAllText: true, blockAllMedia: true, }), + Sentry.captureConsoleIntegration({ levels: ["error"] }), + Sentry.graphqlIntegration({}), ], }); diff --git a/apps/web/sentry.conf.ts b/apps/web/sentry.conf.ts index fb413b5fe..2823a5760 100644 --- a/apps/web/sentry.conf.ts +++ b/apps/web/sentry.conf.ts @@ -1,4 +1,6 @@ -export const SENTRY_CORE_CONFIG = { +import { EdgeOptions, BrowserOptions, NodeOptions } from "@sentry/nextjs"; + +export const SENTRY_CORE_CONFIG: EdgeOptions | BrowserOptions | NodeOptions = { dsn: "https://4220ecb16c770fe0dfb4495d5e6001ed@o4507572657913856.ingest.us.sentry.io/4507572660404224", // Adjust this value in production, or use tracesSampler for greater control From 22dc44e5e1bf31a30d01c55b837320ee964cb7fb Mon Sep 17 00:00:00 2001 From: Corantin Date: Wed, 10 Jul 2024 14:09:11 -0400 Subject: [PATCH 017/129] Add user feedback --- apps/web/components/TokenGardenFaucet.tsx | 2 +- apps/web/hooks/useSubgraphQuery.ts | 6 ------ apps/web/sentry.client.config.ts | 6 +++++- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/apps/web/components/TokenGardenFaucet.tsx b/apps/web/components/TokenGardenFaucet.tsx index e792e6933..415dba653 100644 --- a/apps/web/components/TokenGardenFaucet.tsx +++ b/apps/web/components/TokenGardenFaucet.tsx @@ -62,7 +62,7 @@ export default function TokenGardenFaucet({ token }: FaucetProps) { }; return connectedAccount ? ( -
+
-
+

diff --git a/apps/web/app/api/ably-auth/route.ts b/apps/web/app/api/ably-auth/route.ts index ed670dbcc..986fba9c4 100644 --- a/apps/web/app/api/ably-auth/route.ts +++ b/apps/web/app/api/ably-auth/route.ts @@ -1,8 +1,8 @@ -import { isProd } from "@/constants/contracts"; -import { CHANGE_EVENT_CHANNEL_NAME } from "@/globals"; import Ably from "ably"; import { NextResponse, NextRequest } from "next/server"; import { HTTP_CODES } from "../utils"; +import { CHANGE_EVENT_CHANNEL_NAME } from "@/globals"; +import { isProd } from "@/constants/contracts"; export async function POST(req: NextRequest, res: NextResponse) { // Used for linter that fails diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index a7a783caf..af067d930 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,9 +1,9 @@ import "@/styles/globals.css"; import React from "react"; import { Chakra_Petch, Inter } from "next/font/google"; -import Providers from "@/providers/Providers"; import { Metadata } from "next"; import { Bounce, ToastContainer } from "react-toastify"; +import Providers from "@/providers/Providers"; import "react-toastify/dist/ReactToastify.css"; diff --git a/apps/web/components/ActivatePoints.tsx b/apps/web/components/ActivatePoints.tsx index f4ddd9c3e..b87d5f52e 100644 --- a/apps/web/components/ActivatePoints.tsx +++ b/apps/web/components/ActivatePoints.tsx @@ -1,11 +1,11 @@ "use client"; import React, { useEffect } from "react"; -import { Button } from "./Button"; import { Address, useAccount } from "wagmi"; +import { useConnectModal } from "@rainbow-me/rainbowkit"; +import { Button } from "./Button"; import { cvStrategyABI } from "@/src/generated"; import useErrorDetails from "@/utils/getErrorName"; import { abiWithErrors } from "@/utils/abiWithErrors"; -import { useConnectModal } from "@rainbow-me/rainbowkit"; import { useTransactionNotification } from "@/hooks/useTransactionNotification"; import { useDisableButtons, ConditionObject } from "@/hooks/useDisableButtons"; import { usePubSubContext } from "@/contexts/pubsub.context"; diff --git a/apps/web/components/Badge.tsx b/apps/web/components/Badge.tsx index bad99e559..7f9460295 100644 --- a/apps/web/components/Badge.tsx +++ b/apps/web/components/Badge.tsx @@ -1,9 +1,9 @@ import React from "react"; -import { proposalStatus, poolTypes } from "@/types"; import { CurrencyDollarIcon, HandThumbUpIcon, } from "@heroicons/react/24/outline"; +import { proposalStatus, poolTypes } from "@/types"; import { capitalize } from "@/utils/text"; type BadgeProps = { diff --git a/apps/web/components/Breadcrumbs.tsx b/apps/web/components/Breadcrumbs.tsx index 7edecbb4d..6f1b24e48 100644 --- a/apps/web/components/Breadcrumbs.tsx +++ b/apps/web/components/Breadcrumbs.tsx @@ -34,10 +34,10 @@ export function Breadcrumbs() { ? truncateString(segment) : segment; - if (!!titles) { + if (titles) { // index correction as first 2 segments are /gardens/[chainId] const title = titles[index - 2]; - if (!!title) displayLabel = title; + if (title) {displayLabel = title;} } return { href, label: displayLabel }; }) @@ -51,11 +51,11 @@ export function Breadcrumbs() { })(); }, [path]); - if (!breadcrumbs.length) return <>; + if (!breadcrumbs.length) {return <>;} return ( <> -
+
    {breadcrumbs.map(({ href, label }, index) => ( diff --git a/apps/web/components/Button.tsx b/apps/web/components/Button.tsx index 9bc500743..5a70245ad 100644 --- a/apps/web/components/Button.tsx +++ b/apps/web/components/Button.tsx @@ -68,7 +68,7 @@ export function Button({ type = "button", }: ButtonProps) { const buttonContent = isLoading ? ( - + ) : ( children ); diff --git a/apps/web/components/Charts/ActivePointsChart.tsx b/apps/web/components/Charts/ActivePointsChart.tsx index ee80e84a0..483fe50a9 100644 --- a/apps/web/components/Charts/ActivePointsChart.tsx +++ b/apps/web/components/Charts/ActivePointsChart.tsx @@ -1,8 +1,8 @@ "use client"; import React, { useEffect, useMemo, useState } from "react"; +import type { EChartsOption } from "echarts"; import { ChartSetup } from "./ChartSetup"; import { ChartWrapper } from "./ChartWrapper"; -import type { EChartsOption } from "echarts"; type ActivePointsChartProps = { stakedPoints: number; diff --git a/apps/web/components/Charts/ConvictionBarChart.tsx b/apps/web/components/Charts/ConvictionBarChart.tsx index eb50ca257..49a1e6612 100644 --- a/apps/web/components/Charts/ConvictionBarChart.tsx +++ b/apps/web/components/Charts/ConvictionBarChart.tsx @@ -1,8 +1,8 @@ "use client"; import React from "react"; -import { ChartWrapper } from "./ChartWrapper"; import type { EChartsOption, MarkLineComponentOption } from "echarts"; import EChartsReact from "echarts-for-react"; +import { ChartWrapper } from "./ChartWrapper"; type ScenarioMapping = { condition: () => boolean; diff --git a/apps/web/components/Charts/PoolTokenPriceChart.tsx b/apps/web/components/Charts/PoolTokenPriceChart.tsx index 39f455320..f3d299ea4 100644 --- a/apps/web/components/Charts/PoolTokenPriceChart.tsx +++ b/apps/web/components/Charts/PoolTokenPriceChart.tsx @@ -1,7 +1,7 @@ import React from "react"; +import type { EChartsOption } from "echarts"; import { ChartSetup } from "./ChartSetup"; import { ChartWrapper } from "./ChartWrapper"; -import type { EChartsOption } from "echarts"; //Pool Token Price fluctuation over days ? weeks ? monthes ? //In this example is month with mock data diff --git a/apps/web/components/Charts/ProposalDistributionPointsChart.tsx b/apps/web/components/Charts/ProposalDistributionPointsChart.tsx index ab5836b83..b8fa0a50b 100644 --- a/apps/web/components/Charts/ProposalDistributionPointsChart.tsx +++ b/apps/web/components/Charts/ProposalDistributionPointsChart.tsx @@ -1,8 +1,8 @@ "use client"; import React, { useEffect, useMemo, useState } from "react"; +import type { EChartsOption } from "echarts"; import { ChartSetup } from "./ChartSetup"; import { ChartWrapper } from "./ChartWrapper"; -import type { EChartsOption } from "echarts"; export type Proposals = { name: string; diff --git a/apps/web/components/Charts/ProposalTotalStakedChart.tsx b/apps/web/components/Charts/ProposalTotalStakedChart.tsx index 10e6e8ecf..70f11f036 100644 --- a/apps/web/components/Charts/ProposalTotalStakedChart.tsx +++ b/apps/web/components/Charts/ProposalTotalStakedChart.tsx @@ -1,8 +1,8 @@ import React from "react"; -import { ChartSetup } from "./ChartSetup"; -import { ChartWrapper } from "./ChartWrapper"; import type { EChartsOption } from "echarts"; import EChartsReact from "echarts-for-react"; +import { ChartSetup } from "./ChartSetup"; +import { ChartWrapper } from "./ChartWrapper"; //Total Amount of points staked in each proposal within all Stakers / Members diff --git a/apps/web/components/CommunityCard.tsx b/apps/web/components/CommunityCard.tsx index f94194d2d..50ff95b87 100644 --- a/apps/web/components/CommunityCard.tsx +++ b/apps/web/components/CommunityCard.tsx @@ -1,11 +1,11 @@ "use client"; import React from "react"; -import { commImg } from "@/assets"; import Image from "next/image"; -import { Statistic } from "./Statistic"; -import { Card } from "./Card"; import { usePathname } from "next/navigation"; import { RectangleGroupIcon } from "@heroicons/react/24/outline"; +import { Statistic } from "./Statistic"; +import { Card } from "./Card"; +import { commImg } from "@/assets"; type CommunityCardProps = { name: string; diff --git a/apps/web/components/ConnectWalletButton.tsx b/apps/web/components/ConnectWalletButton.tsx index f2f773e56..a61f4da43 100644 --- a/apps/web/components/ConnectWalletButton.tsx +++ b/apps/web/components/ConnectWalletButton.tsx @@ -2,17 +2,17 @@ import React from "react"; import { useBalance, useSwitchNetwork } from "wagmi"; import { usePathname } from "next/navigation"; -import { ChainIcon } from "@/configs/chainServer"; import Image from "next/image"; -import { walletIcon } from "@/assets"; import { ConnectButton } from "@rainbow-me/rainbowkit"; import { useDisconnect, useConnect, useAccount } from "wagmi"; import cn from "classnames"; -import { Button } from "@/components"; import { Fragment } from "react"; -import { formatAddress } from "@/utils/formatAddress"; import { Menu, Transition } from "@headlessui/react"; import { ChevronUpIcon, PowerIcon } from "@heroicons/react/24/solid"; +import { formatAddress } from "@/utils/formatAddress"; +import { Button } from "@/components"; +import { walletIcon } from "@/assets"; +import { ChainIcon } from "@/configs/chainServer"; import useChainFromPath from "@/hooks/useChainFromPath"; export function ConnectWallet() { diff --git a/apps/web/components/DisplayNumber.tsx b/apps/web/components/DisplayNumber.tsx index 597eb5658..dd7bd4f0a 100644 --- a/apps/web/components/DisplayNumber.tsx +++ b/apps/web/components/DisplayNumber.tsx @@ -43,28 +43,28 @@ export const DisplayNumber = ({ setShowTooltip(true); if (str.slice(0, 2) === "0.") - return ( + {return ( str.slice(0, charsLength + prefixLength - 1) + "…" + str.slice(-charsLength) - ); + );} if (typeof number === "string") - return dn.format(dn.from(number), { + {return dn.format(dn.from(number), { compact: compact, digits: 2, - }); + });} return dn.format(number, { compact: compact, digits: 2 }); }; const handleCopy = async () => { - if (showTooltip === false) setShowTooltip(true); + if (showTooltip === false) {setShowTooltip(true);} try { await navigator.clipboard.writeText(fullNumberStr ?? ""); setIsCopied(true); setTimeout(() => { setIsCopied(false); - if (showTooltip === false) setShowTooltip(false); + if (showTooltip === false) {setShowTooltip(false);} }, 1500); } catch (err) { console.error("Failed to copy!", err); diff --git a/apps/web/components/EthAddress.tsx b/apps/web/components/EthAddress.tsx index 3bc1a1383..defff8893 100644 --- a/apps/web/components/EthAddress.tsx +++ b/apps/web/components/EthAddress.tsx @@ -1,8 +1,8 @@ "use client"; -import { Address } from "viem"; +import React from "react"; import { Addreth } from "addreth"; +import { Address } from "viem"; import LoadingSpinner from "./LoadingSpinner"; -import React from "react"; import { chainDataMap } from "@/configs/chainServer"; import useChainFromPath from "@/hooks/useChainFromPath"; @@ -38,27 +38,25 @@ export const EthAddress = ({ // popupShadow: "black", // }; - return address && chain ? ( - ({ - name: chainDataMap[chain.id].name, - url: `${chainDataMap[chain.id].explorer}${address}`, - accountUrl: `${chainDataMap[chain.id].explorer}${address}`, - })} - ens={!chain?.testnet} - /> - ) : ( - - ); + return address && chain ? + ({ + name: chainDataMap[chain.id].name, + url: `${chainDataMap[chain.id].explorer}${address}`, + accountUrl: `${chainDataMap[chain.id].explorer}${address}`, + })} + ens={!chain?.testnet} + /> + : ; }; diff --git a/apps/web/components/Forms/CommunityForm.tsx b/apps/web/components/Forms/CommunityForm.tsx index 372be5b5b..2030a649b 100644 --- a/apps/web/components/Forms/CommunityForm.tsx +++ b/apps/web/components/Forms/CommunityForm.tsx @@ -1,19 +1,19 @@ "use client"; import React, { useState } from "react"; import { useForm } from "react-hook-form"; -import { registryFactoryABI, safeABI } from "@/src/generated"; import { Address, Chain, createPublicClient, http, parseUnits } from "viem"; -import { abiWithErrors } from "@/utils/abiWithErrors"; -import { Button } from "@/components"; -import { ipfsJsonUpload } from "@/utils/ipfsUtils"; import { toast } from "react-toastify"; +import { usePathname, useRouter } from "next/navigation"; import FormPreview, { FormRow } from "./FormPreview"; import { FormInput } from "./FormInput"; import { FormCheckBox } from "./FormCheckBox"; import { FormSelect } from "./FormSelect"; -import { TokenGarden } from "#/subgraph/.graphclient"; import { Option } from "./FormSelect"; -import { usePathname, useRouter } from "next/navigation"; +import { registryFactoryABI, safeABI } from "@/src/generated"; +import { abiWithErrors } from "@/utils/abiWithErrors"; +import { Button } from "@/components"; +import { ipfsJsonUpload } from "@/utils/ipfsUtils"; +import { TokenGarden } from "#/subgraph/.graphclient"; import { getChain } from "@/configs/chainServer"; import { getContractsAddrByChain } from "@/constants/contracts"; import { usePubSubContext } from "@/contexts/pubsub.context"; @@ -142,7 +142,7 @@ export const CommunityForm = ({ }) .then((ipfsHash) => { console.log("https://ipfs.io/ipfs/" + ipfsHash); - if (previewData === undefined) throw new Error("No preview data"); + if (previewData === undefined) {throw new Error("No preview data");} const argsArray = contractWriteParsedData(ipfsHash); write?.({ args: [argsArray] }); }) @@ -229,7 +229,7 @@ export const CommunityForm = ({ }; const formatFormRows = () => { - if (!previewData) return []; + if (!previewData) {return [];} let formattedRows: FormRow[] = []; Object.entries(previewData).forEach(([key, value]) => { @@ -283,7 +283,7 @@ export const CommunityForm = ({ registerKey="title" type="text" placeholder="1hive" - > + />
+ />
+ />
+ />
@@ -364,7 +364,7 @@ export const CommunityForm = ({ errors={errors} registerKey="isKickMemberEnabled" type="checkbox" - > + />
+ />
{/* Upload image */} diff --git a/apps/web/components/Forms/FormInput.tsx b/apps/web/components/Forms/FormInput.tsx index 77687bef7..2095fc292 100644 --- a/apps/web/components/Forms/FormInput.tsx +++ b/apps/web/components/Forms/FormInput.tsx @@ -64,7 +64,7 @@ export function FormInput({ value={value} type={type} placeholder={placeholder} - className={`${className} hide-input-arrows input input-bordered ${!!errors[registerKey] ? "input-error" : "input-info"} w-full ${readOnly && fixedInputClassname}`} + className={`${className} hide-input-arrows input input-bordered ${errors[registerKey] ? "input-error" : "input-info"} w-full ${readOnly && fixedInputClassname}`} required={required} readOnly={readOnly} step={step} @@ -77,7 +77,7 @@ export function FormInput({ ) : (