From 1a98c46ce88feb755971f4b4abe3ff8f23cf9cd9 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Thu, 2 Mar 2023 11:44:11 +0100 Subject: [PATCH 01/52] Update deps --- index.d.ts | 5 +++++ pnpm-lock.yaml | 1 - src/index.d.ts | 5 +++++ 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 index.d.ts create mode 100644 src/index.d.ts diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..11a9c71 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,5 @@ + +declare module '@kycdao/widget' { + import main = require('@kycdao/widget/index'); + export = main; +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63c86d3..f91cf6e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12233,7 +12233,6 @@ packages: /styled-components/5.3.8_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg==} engines: {node: '>=10'} - requiresBuild: true peerDependencies: react: '>= 16.8.0' react-dom: '>= 16.8.0' diff --git a/src/index.d.ts b/src/index.d.ts new file mode 100644 index 0000000..b23ad09 --- /dev/null +++ b/src/index.d.ts @@ -0,0 +1,5 @@ +export * from "./BootstrapKycDaoModal" +export * from "./App" +export * from "./widget" +export * from "./KycDaoClient" +export * from "./KycDaoIframeClient" From ec0a5e97b77153b966c2cd8479270779ae79fcb8 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Thu, 2 Mar 2023 11:45:51 +0100 Subject: [PATCH 02/52] WIP Start flow map --- src/KycDaoClient.ts | 7 +- src/components/stateContext/getNextStep.ts | 174 ++++++++++++++++++ src/components/stateContext/stateContext.ts | 6 + .../stateContext/stateContextTypes.ts | 13 +- src/pages/verifyAccount.tsx | 2 +- 5 files changed, 197 insertions(+), 5 deletions(-) create mode 100644 src/components/stateContext/getNextStep.ts diff --git a/src/KycDaoClient.ts b/src/KycDaoClient.ts index 4a0617e..b815d53 100644 --- a/src/KycDaoClient.ts +++ b/src/KycDaoClient.ts @@ -239,9 +239,10 @@ export class KycDaoClient implements KycDaoClientInterface { )}.` ) } else if (matches.length === 1) { - const match = matches[0] - const key = match[0] as keyof typeof knownNearQueryParams - const event = knownNearQueryParams[key] + const [match] = matches + const [key] = match + const event = + knownNearQueryParams[key as keyof typeof knownNearQueryParams] if (event.startsWith("Near")) { return true diff --git a/src/components/stateContext/getNextStep.ts b/src/components/stateContext/getNextStep.ts new file mode 100644 index 0000000..20a20c7 --- /dev/null +++ b/src/components/stateContext/getNextStep.ts @@ -0,0 +1,174 @@ +import { Data, StepID } from "./stateContextTypes" + +export type FlowStep = { + step: StepID + startSubFlow?: (data: Data) => Flow | undefined +} + +export type Flow = { + steps: { + step: StepID + startSubFlow?: (data: Data) => Flow | undefined + }[] +} + +export const ReturningUserFlow = { + steps: [ + { step: StepID.subscribedStartStep }, + { step: StepID.nftArtSelection }, + { step: StepID.finalStep }, + ], +} as Flow + +const VerificationFlow = { + steps: [{ step: StepID.taxResidenceStep }, { step: StepID.verificationStep }], +} as Flow + +export const EmailVerificationFlow = { + steps: [{ step: StepID.verifyAccountStep, ...VerificationFlow.steps }], +} as Flow + +export const NewSubscriberFlow = { + steps: [ + { step: StepID.AgreementStep }, + { + step: StepID.kycDAOMembershipStep, + startSubFlow: ({ isEmailConfirmed }) => { + if (!isEmailConfirmed) { + return EmailVerificationFlow + } + }, + }, + { step: StepID.nftArtSelection }, + { step: StepID.kycDAOMembershipStep }, + { step: StepID.finalStep }, + ], +} as Flow + +export const AlreadHaveNftFlow = { + steps: [{ step: StepID.finalStep }], +} as Flow + +export const MainFlow = { + steps: [ + { + step: StepID.loading, + startSubFlow: ({ alreadyHaveAnNftOnThisChain, returningUserFlow }) => { + if (alreadyHaveAnNftOnThisChain) { + return AlreadHaveNftFlow + } else if (returningUserFlow) { + return ReturningUserFlow + } else { + return NewSubscriberFlow + } + }, + }, + ], +} as Flow + +export type PageFlow = { steps: StepID[]; getSubFlow?: (data: Data) => Flow } + +export const VerifyMailSubFlow = [] +export const VerifySubFlow = [] + +function last(this: Array) { + return this.at(this.length - 1) +} + +/** + * Gets back the step + * @param data The current state + * @returns The new state, with the next step + */ +export function CalculateNextStep(data: Data): Data { + const { flowStack, stepIndices } = data + + if (flowStack.length === 0) { + return data + } + + const currentFlow = last.call(flowStack) as Flow | undefined + + /** + * If there is a flow running + */ + if (currentFlow) { + const currentStepIndex = last.call(stepIndices) as StepID | undefined + + /** + * If there is a current step + */ + if (currentStepIndex) { + const lastFlowStep = currentFlow.steps[currentStepIndex] + + /** + * If there are subflows, then we have to check if the app has to go to on a subflow + */ + if (lastFlowStep.startSubFlow) { + const nextSubflow: Flow | undefined = lastFlowStep.startSubFlow(data) + /** + * If it has to go on a subflow, then the first step of the subflow will be the next step. + * We push the current step index into the flow stack. If there is none, then go with the + * next step inside the flow + */ + if (nextSubflow) { + const [nextStep] = nextSubflow.steps + + flowStack.push(nextSubflow) + stepIndices.push(nextStep.step) + + return { + ...data, + currentPage: nextStep.step, + flowStack, + } + } + } + + /** If there are still steps in the flow, then continue with that one, if not, then + * pop the flow from the flowstack and continue with that one. If that was the last one, + * the flow is done. + */ + if (currentFlow && currentFlow.steps.length > currentStepIndex + 1) { + return { ...data, currentPage: currentStepIndex + 1 } + } else { + while (flowStack.length === 0) { + flowStack.pop() + const prevFlow = last.call(flowStack) as Flow | undefined + + /** + * If there is no previous flow, then the program is done + */ + if (!prevFlow) { + return data + } + + stepIndices.pop() + + const prevStepIndex = last.call(stepIndices) as StepID | undefined + + /** + * If there is no steps in the flow anymore, then it is done + */ + if (!prevStepIndex) { + continue + } + + if ( + prevFlow && + prevStepIndex && + prevFlow.steps.length > prevStepIndex + 1 + ) { + return { + ...data, + currentPage: prevStepIndex + 1, + flowStack, + stepIndices, + } + } + } + } + } + } + return data +} diff --git a/src/components/stateContext/stateContext.ts b/src/components/stateContext/stateContext.ts index c01f3e0..8b9cb19 100644 --- a/src/components/stateContext/stateContext.ts +++ b/src/components/stateContext/stateContext.ts @@ -1,5 +1,6 @@ import { createContext } from "react" import { Subject } from "rxjs" +import { CalculateNextStep } from "./getNextStep" import { Data, DataActionTypes, @@ -21,6 +22,9 @@ export const reducer = ( { payload, type }: DataChangeActions ): Data => { switch (type) { + case DataActionTypes.GoToNextStep: { + return CalculateNextStep(data) + } case DataActionTypes.SetNearMinted: { return { ...data, nearMinted: payload } } @@ -109,6 +113,8 @@ export const reducer = ( } export const DefaultData = { + flowStack: [], + stepIndices: [], returningUserFlow: false, isProcessSuccess: false, closeButtonState: "enabled", diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index 50d5a97..3d3d2bf 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -1,3 +1,5 @@ +import { Flow } from "./getNextStep" + export enum HeaderActionTypes { setNextButtonState, setPrevButtonState, @@ -35,6 +37,7 @@ export enum DataActionTypes { SetProcessSucess, SetAlreadyHaveAnNftOnThisChain, SetNearMinted, + GoToNextStep, } export enum StepID { @@ -58,13 +61,15 @@ export enum StepID { } export type Data = { + flowStack: Flow[] + stepIndices: StepID[] nftImageUrl?: string resetKey?: number imageId?: string chain?: string email: string taxResidency: string - currentPage: number + currentPage: StepID prevPage?: number nextPage?: number reversePaging?: boolean @@ -216,6 +221,11 @@ export type SetNearMinted = { payload: boolean } +export type GoToNextStep = { + type: DataActionTypes.GoToNextStep + payload: never +} + export type DataChangeActions = | HeaderButtonClickAction | SetHeaderButtonStateAction @@ -240,6 +250,7 @@ export type DataChangeActions = | SetProcessSucess | SetAlreadyHaveAnNftOnThisChain | SetNearMinted + | GoToNextStep export type ModalType = | "emailVerification" diff --git a/src/pages/verifyAccount.tsx b/src/pages/verifyAccount.tsx index 6ca16db..6d3fb64 100644 --- a/src/pages/verifyAccount.tsx +++ b/src/pages/verifyAccount.tsx @@ -153,7 +153,7 @@ const AccountProviders: AccountProivderProps[] = [ { icon: emptyIcon, id: "soon3", - label: "aren't you? 🥚👀", + label: "aren't you? 🥚", comingSoon: true, }, ] From 64cd341adeefedea44be3f7dc58dc78fa3760ae6 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 3 Mar 2023 03:22:14 +0100 Subject: [PATCH 03/52] Coninue working on it --- src/AppContainer.tsx | 27 +----- src/components/stateContext/getNextStep.ts | 86 ++++++++++++++----- src/components/stateContext/stateContext.ts | 16 +++- .../stateContext/stateContextTypes.ts | 18 +++- src/pages/agreementStep.tsx | 8 +- src/pages/emailDiscordVerificationStep.tsx | 8 +- src/pages/grantNameAndAddress.tsx | 11 +-- src/pages/grantSocialSecurityNumber.tsx | 16 ++-- src/pages/membershipCard.tsx | 20 ++--- src/pages/mintMembershipCard.tsx | 7 +- src/pages/nftArtSelection.tsx | 17 +--- src/pages/subscribedStartStep.tsx | 8 +- src/pages/taxResidence.tsx | 18 ++-- src/pages/verificationStep.tsx | 11 +-- src/pages/verifyAccount.tsx | 65 ++------------ 15 files changed, 139 insertions(+), 197 deletions(-) diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 0bbd0fb..2ef5ff3 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -106,14 +106,6 @@ const AppContainerRender: ForwardRefRenderFunction< const hasValidNft = await kycDao.kycDao.hasValidNft("KYC") if (hasValidNft && kycDao.redirectEvent !== "NearMint") { - dispatch({ - payload: { - current: StepID.finalStep, - prev: StepID.loading, - }, - type: DataActionTypes.changePage, - }) - dispatch({ payload: true, type: DataActionTypes.SetProcessSucess, @@ -124,13 +116,13 @@ const AppContainerRender: ForwardRefRenderFunction< type: DataActionTypes.SetAlreadyHaveAnNftOnThisChain, }) + dispatch({ type: DataActionTypes.GoToNextStep }) + return } await kycDao.kycDao.registerOrLogin() - let startPage = StepID.AgreementStep - if (kycDao.redirectEvent) { dispatch({ type: DataActionTypes.termsAcceptedChange, @@ -139,7 +131,6 @@ const AppContainerRender: ForwardRefRenderFunction< switch (kycDao.redirectEvent) { case "NearLogin": - startPage = StepID.AgreementStep break case "NearUserRejectedError": window.parent.postMessage( @@ -167,11 +158,8 @@ const AppContainerRender: ForwardRefRenderFunction< payload: kycDao.mintingResult?.imageUrl, }) } - startPage = StepID.finalStep } } else { - await kycDao.kycDao.registerOrLogin() - const { subscribed } = kycDao.kycDao if (subscribed) { @@ -180,17 +168,8 @@ const AppContainerRender: ForwardRefRenderFunction< type: DataActionTypes.SetReturnUserFlow, }) } - - startPage = subscribed - ? StepID.subscribedStartStep - : StepID.AgreementStep } - dispatch({ - payload: { current: startPage, prev: StepID.loading }, - type: DataActionTypes.changePage, - }) - if (!isModal) { dispatch({ type: DataActionTypes.SetHeaderButtonState, @@ -206,6 +185,8 @@ const AppContainerRender: ForwardRefRenderFunction< messageTargetOrigin ) } + + dispatch({ type: DataActionTypes.StartFlow }) })() } }, [ diff --git a/src/components/stateContext/getNextStep.ts b/src/components/stateContext/getNextStep.ts index 20a20c7..e99f484 100644 --- a/src/components/stateContext/getNextStep.ts +++ b/src/components/stateContext/getNextStep.ts @@ -12,6 +12,13 @@ export type Flow = { }[] } +export const GrantFlow = { + steps: [ + { step: StepID.grantSocialSecurityNumberStep }, + { step: StepID.grantNameAndAddressStep }, + ], +} as Flow + export const ReturningUserFlow = { steps: [ { step: StepID.subscribedStartStep }, @@ -21,11 +28,24 @@ export const ReturningUserFlow = { } as Flow const VerificationFlow = { - steps: [{ step: StepID.taxResidenceStep }, { step: StepID.verificationStep }], + steps: [ + { step: StepID.taxResidenceStep }, + { + step: StepID.verificationStep, + startSubFlow: ({ grantFlowEnabled }) => { + if (grantFlowEnabled) { + return GrantFlow + } + }, + }, + ], } as Flow export const EmailVerificationFlow = { - steps: [{ step: StepID.verifyAccountStep, ...VerificationFlow.steps }], + steps: [ + { step: StepID.verifyAccountStep }, + { step: StepID.emailDiscordVerificationStep }, + ], } as Flow export const NewSubscriberFlow = { @@ -33,10 +53,13 @@ export const NewSubscriberFlow = { { step: StepID.AgreementStep }, { step: StepID.kycDAOMembershipStep, - startSubFlow: ({ isEmailConfirmed }) => { + startSubFlow: ({ isEmailConfirmed, returningUserFlow }) => { if (!isEmailConfirmed) { return EmailVerificationFlow } + if (returningUserFlow) { + return VerificationFlow + } }, }, { step: StepID.nftArtSelection }, @@ -78,10 +101,12 @@ function last(this: Array) { /** * Gets back the step * @param data The current state + * @param direction The direction to go * @returns The new state, with the next step */ -export function CalculateNextStep(data: Data): Data { - const { flowStack, stepIndices } = data +export function CalculateStep(data: Data, direction: boolean): Data { + const { flowStack, stepIndices, currentPage: prevPage } = data + const offset = direction ? 1 : -1 if (flowStack.length === 0) { return data @@ -93,18 +118,18 @@ export function CalculateNextStep(data: Data): Data { * If there is a flow running */ if (currentFlow) { - const currentStepIndex = last.call(stepIndices) as StepID | undefined + const currentStepIndex = last.call(stepIndices) as number | undefined /** * If there is a current step */ - if (currentStepIndex) { + if (typeof currentStepIndex !== "undefined") { const lastFlowStep = currentFlow.steps[currentStepIndex] /** - * If there are subflows, then we have to check if the app has to go to on a subflow + * If there are subflows, then we have to check if the app has to go to on a subflow, only if we are going forward */ - if (lastFlowStep.startSubFlow) { + if (direction && lastFlowStep.startSubFlow) { const nextSubflow: Flow | undefined = lastFlowStep.startSubFlow(data) /** * If it has to go on a subflow, then the first step of the subflow will be the next step. @@ -115,24 +140,38 @@ export function CalculateNextStep(data: Data): Data { const [nextStep] = nextSubflow.steps flowStack.push(nextSubflow) - stepIndices.push(nextStep.step) + stepIndices.push(0) return { ...data, currentPage: nextStep.step, + prevPage, flowStack, } } } + let newIndex = currentStepIndex + offset + /** If there are still steps in the flow, then continue with that one, if not, then * pop the flow from the flowstack and continue with that one. If that was the last one, * the flow is done. */ - if (currentFlow && currentFlow.steps.length > currentStepIndex + 1) { - return { ...data, currentPage: currentStepIndex + 1 } + if (currentFlow && currentFlow.steps.length > newIndex && 0 <= newIndex) { + const stepIndices = [...data.stepIndices] + stepIndices[stepIndices.length - 1] = newIndex + + return { + ...data, + ...{ + prevPage: offset === 1 ? prevPage : undefined, + nextPage: offset === -1 ? prevPage : undefined, + }, + currentPage: currentFlow.steps[newIndex].step, + stepIndices, + } } else { - while (flowStack.length === 0) { + while (flowStack.length !== 0) { flowStack.pop() const prevFlow = last.call(flowStack) as Flow | undefined @@ -145,7 +184,7 @@ export function CalculateNextStep(data: Data): Data { stepIndices.pop() - const prevStepIndex = last.call(stepIndices) as StepID | undefined + const prevStepIndex = last.call(stepIndices) as number | undefined /** * If there is no steps in the flow anymore, then it is done @@ -154,14 +193,18 @@ export function CalculateNextStep(data: Data): Data { continue } - if ( - prevFlow && - prevStepIndex && - prevFlow.steps.length > prevStepIndex + 1 - ) { + newIndex = prevStepIndex + offset === -1 ? 0 : 1 + + if (prevFlow && prevStepIndex && prevFlow.steps.length > newIndex) { + stepIndices[stepIndices.length - 1] = newIndex + return { ...data, - currentPage: prevStepIndex + 1, + currentPage: prevFlow.steps[newIndex].step, + ...{ + prevPage: offset === 1 ? prevPage : undefined, + nextPage: offset === -1 ? prevPage : undefined, + }, flowStack, stepIndices, } @@ -172,3 +215,6 @@ export function CalculateNextStep(data: Data): Data { } return data } + +export const CalculateNextStep = (data: Data) => CalculateStep(data, true) +export const CalculatePrevStep = (data: Data) => CalculateStep(data, false) diff --git a/src/components/stateContext/stateContext.ts b/src/components/stateContext/stateContext.ts index 8b9cb19..de24851 100644 --- a/src/components/stateContext/stateContext.ts +++ b/src/components/stateContext/stateContext.ts @@ -1,6 +1,6 @@ import { createContext } from "react" import { Subject } from "rxjs" -import { CalculateNextStep } from "./getNextStep" +import { CalculateNextStep, CalculatePrevStep, MainFlow } from "./getNextStep" import { Data, DataActionTypes, @@ -25,6 +25,16 @@ export const reducer = ( case DataActionTypes.GoToNextStep: { return CalculateNextStep(data) } + case DataActionTypes.GoToPrevStep: { + return CalculatePrevStep(data) + } + case DataActionTypes.StartFlow: { + return CalculateNextStep({ + ...data, + flowStack: [MainFlow], + stepIndices: [0], + }) + } case DataActionTypes.SetNearMinted: { return { ...data, nearMinted: payload } } @@ -113,8 +123,8 @@ export const reducer = ( } export const DefaultData = { - flowStack: [], - stepIndices: [], + flowStack: [MainFlow], + stepIndices: [0], returningUserFlow: false, isProcessSuccess: false, closeButtonState: "enabled", diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index 3d3d2bf..61e1176 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -38,6 +38,8 @@ export enum DataActionTypes { SetAlreadyHaveAnNftOnThisChain, SetNearMinted, GoToNextStep, + StartFlow, + GoToPrevStep, } export enum StepID { @@ -62,7 +64,7 @@ export enum StepID { export type Data = { flowStack: Flow[] - stepIndices: StepID[] + stepIndices: number[] nftImageUrl?: string resetKey?: number imageId?: string @@ -223,7 +225,17 @@ export type SetNearMinted = { export type GoToNextStep = { type: DataActionTypes.GoToNextStep - payload: never + payload?: never +} + +export type StartFlow = { + type: DataActionTypes.StartFlow + payload?: never +} + +export type GoToPrevStep = { + type: DataActionTypes.GoToPrevStep + payload?: never } export type DataChangeActions = @@ -251,6 +263,8 @@ export type DataChangeActions = | SetAlreadyHaveAnNftOnThisChain | SetNearMinted | GoToNextStep + | StartFlow + | GoToPrevStep export type ModalType = | "emailVerification" diff --git a/src/pages/agreementStep.tsx b/src/pages/agreementStep.tsx index b082b2c..c538207 100644 --- a/src/pages/agreementStep.tsx +++ b/src/pages/agreementStep.tsx @@ -11,11 +11,9 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" -import useChangePage from "@Hooks/useChangePage" const Header: StepPart = () => (

@@ -60,13 +58,13 @@ export const AgreementStep: FC = ({ inactive = false, }) => { const { dispatch } = useContext(StateContext) - const redirect = useChangePage() const kycDaoContext = useKycDao() const onSubmit = useCallback(async () => { - redirect(StepID.kycDAOMembershipStep, StepID.AgreementStep) - }, [redirect]) + // redirect(StepID.kycDAOMembershipStep, StepID.AgreementStep) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [dispatch]) const onTransitionDone = useCallback(() => { if (!disabled && !inactive) { diff --git a/src/pages/emailDiscordVerificationStep.tsx b/src/pages/emailDiscordVerificationStep.tsx index f555631..b4d1b49 100644 --- a/src/pages/emailDiscordVerificationStep.tsx +++ b/src/pages/emailDiscordVerificationStep.tsx @@ -202,12 +202,8 @@ export const EmailDiscordVerificationStep: FC = ({ const onPrev = useCallback(() => { clearInterval(confirmationInterval.current) - redirect( - StepID.verifyAccountStep, - StepID.emailDiscordVerificationStep, - "prev" - ) - }, [redirect]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/grantNameAndAddress.tsx b/src/pages/grantNameAndAddress.tsx index f1c9bd7..f99d28c 100644 --- a/src/pages/grantNameAndAddress.tsx +++ b/src/pages/grantNameAndAddress.tsx @@ -118,15 +118,12 @@ export const GrantNameAndAddress: FC = ({ return } - redirect( - StepID.grantSocialSecurityNumberStep, - StepID.grantNameAndAddressStep - ) - }, [disabled, inactive, isStepValid, redirect]) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [disabled, inactive, isStepValid, dispatch]) const onPrev = useCallback(() => { - redirect(StepID.taxResidenceStep, StepID.grantNameAndAddressStep, "prev") - }, [redirect]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { dispatch({ diff --git a/src/pages/grantSocialSecurityNumber.tsx b/src/pages/grantSocialSecurityNumber.tsx index c5d3ac2..20f7ec7 100644 --- a/src/pages/grantSocialSecurityNumber.tsx +++ b/src/pages/grantSocialSecurityNumber.tsx @@ -10,7 +10,6 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" @@ -22,7 +21,6 @@ import React, { useCallback, useMemo, } from "react" -import useChangePage from "@Hooks/useChangePage" const Body: React.FC = () => { return ( @@ -46,7 +44,7 @@ export const GrantSocialSecurityNumber: FC = ({ dispatch, data: { grantFlow }, } = useContext(StateContext) - const redirect = useChangePage() + const [socialSecurityNumber, setSocialSecurityNumber] = useState< string | undefined >(grantFlow.socialSecurityNumber) @@ -77,16 +75,12 @@ export const GrantSocialSecurityNumber: FC = ({ return } - redirect(StepID.beginVerificationStep, StepID.grantSocialSecurityNumberStep) - }, [disabled, inactive, isStepValid, redirect]) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [disabled, inactive, isStepValid, dispatch]) const onPrev = useCallback(() => { - redirect( - StepID.grantNameAndAddressStep, - StepID.grantSocialSecurityNumberStep, - "prev" - ) - }, [redirect]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { dispatch({ diff --git a/src/pages/membershipCard.tsx b/src/pages/membershipCard.tsx index 44e1ac0..522f659 100644 --- a/src/pages/membershipCard.tsx +++ b/src/pages/membershipCard.tsx @@ -20,12 +20,10 @@ import { Policy, StateContext, Step, - StepID, StepPart, SubmitButton, Ul, } from "@Components/index" -import useChangePage from "@Hooks/useChangePage" import useErrorHandler from "@Hooks/errorHandler" const Footer: StepPart = ({ disabled, inactive, onEnter }) => ( @@ -175,22 +173,14 @@ export const KycDAOMembershipStep: FC = ({ disabled = false, inactive = false, }) => { - const { - dispatch, - data: { returningUserFlow }, - } = useContext(StateContext) - const redirect = useChangePage() + const { dispatch } = useContext(StateContext) const errorHandler = useErrorHandler() const kycDaoContext = useKycDao() const onPrev = useCallback(() => { - if (returningUserFlow) { - redirect(StepID.subscribedStartStep, StepID.kycDAOMembershipStep, "prev") - } else { - redirect(StepID.AgreementStep, StepID.kycDAOMembershipStep, "prev") - } - }, [redirect, returningUserFlow]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { if (!disabled && !inactive) { @@ -208,8 +198,8 @@ export const KycDAOMembershipStep: FC = ({ try { await kycDaoContext.kycDao.connectWallet(network) await kycDaoContext.kycDao.registerOrLogin() - redirect(StepID.verifyAccountStep, StepID.kycDAOMembershipStep) dispatch({ type: DataActionTypes.termsAcceptedChange, payload: true }) + dispatch({ type: DataActionTypes.GoToNextStep }) } catch (e) { // TODO: nicer error handling for unsupported network https://kycdao.atlassian.net/browse/KYC-505 let errorMsg = @@ -224,7 +214,7 @@ export const KycDAOMembershipStep: FC = ({ } } } - }, [dispatch, kycDaoContext, redirect, errorHandler]) + }, [dispatch, kycDaoContext, errorHandler]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/mintMembershipCard.tsx b/src/pages/mintMembershipCard.tsx index 4e307df..7465deb 100644 --- a/src/pages/mintMembershipCard.tsx +++ b/src/pages/mintMembershipCard.tsx @@ -16,11 +16,9 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" -import useChangePage from "@Hooks/useChangePage" import useErrorHandler from "@Hooks/errorHandler" const Body = () => { @@ -230,7 +228,6 @@ export const MintStep: FC = ({ data: { imageId }, } = useContext(StateContext) const kycDao = useKycDao() - const redirect = useChangePage() const [yearCount, setYearCount] = useState(1) @@ -305,8 +302,8 @@ export const MintStep: FC = ({ }, []) const onPrev = useCallback(() => { - redirect(StepID.nftArtSelection, StepID.mintStep, "prev") - }, [redirect]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/nftArtSelection.tsx b/src/pages/nftArtSelection.tsx index 81dfdc8..6d183b7 100644 --- a/src/pages/nftArtSelection.tsx +++ b/src/pages/nftArtSelection.tsx @@ -15,7 +15,6 @@ import { OnPrev, StateContext, Step, - StepID, StepPart, SubmitButton, tr2, @@ -127,13 +126,7 @@ export const NftSelection: FC = ({ errorHandler("fatal", error) } } else { - dispatch({ - type: DataActionTypes.changePage, - payload: { - current: StepID.mintStep, - prev: StepID.nftArtSelection, - }, - }) + dispatch({ type: DataActionTypes.GoToNextStep }) } } }, [ @@ -145,13 +138,7 @@ export const NftSelection: FC = ({ ]) const onPrev = useCallback(() => { - dispatch({ - type: DataActionTypes.changePage, - payload: { - current: StepID.subscribedStartStep, - next: StepID.nftArtSelection, - }, - }) + dispatch({ type: DataActionTypes.GoToPrevStep }) }, [dispatch]) useEffect(() => { diff --git a/src/pages/subscribedStartStep.tsx b/src/pages/subscribedStartStep.tsx index dfa7d5f..b9fed54 100644 --- a/src/pages/subscribedStartStep.tsx +++ b/src/pages/subscribedStartStep.tsx @@ -8,11 +8,9 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" -import useChangePage from "@Hooks/useChangePage" import { useKycDao } from "@Hooks/useKycDao" import { FC, useContext, useCallback, useEffect } from "react" import { PageProps } from "./pageProps" @@ -56,13 +54,13 @@ export const SubscribedStartStep: FC = ({ inactive = false, }) => { const { dispatch } = useContext(StateContext) - const redirect = useChangePage() const kycDaoContext = useKycDao() const onSubmit = useCallback(() => { - redirect(StepID.nftArtSelection, StepID.subscribedStartStep) - }, [redirect]) + // redirect(StepID.nftArtSelection, StepID.subscribedStartStep) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [dispatch]) const onTransitionDone = useCallback(() => { if (!disabled && !inactive) { diff --git a/src/pages/taxResidence.tsx b/src/pages/taxResidence.tsx index a63a82d..ac0d71b 100644 --- a/src/pages/taxResidence.tsx +++ b/src/pages/taxResidence.tsx @@ -12,7 +12,6 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" @@ -25,7 +24,6 @@ import { useEffect, useCallback, } from "react" -import useChangePage from "@Hooks/useChangePage" const Body = () => { return ( @@ -48,7 +46,7 @@ export const TaxResidenceStep: FC = ({ const [value, setValue] = useState() const { dispatch, - data: { taxResidency, grantFlowEnabled }, + data: { taxResidency }, } = useContext(StateContext) const submitDisabled = useMemo( () => !Countries.find((c) => c.name === value), @@ -56,7 +54,6 @@ export const TaxResidenceStep: FC = ({ ) const taxResidence = useRef(taxResidency) const inputValue = useRef(null) - const redirect = useChangePage() useEffect(() => { if (taxResidency) { @@ -93,21 +90,16 @@ export const TaxResidenceStep: FC = ({ type: DataActionTypes.taxResidenceChange, }) - if (grantFlowEnabled) { - // todo: check country is US - redirect(StepID.grantNameAndAddressStep, StepID.taxResidenceStep) - } else { - redirect(StepID.beginVerificationStep, StepID.taxResidenceStep) - } - }, [disabled, inactive, submitDisabled, dispatch, grantFlowEnabled, redirect]) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [disabled, inactive, submitDisabled, dispatch]) const onPrev = useCallback(() => { - redirect(StepID.verificationStep, StepID.taxResidenceStep, "prev") + dispatch({ type: DataActionTypes.GoToPrevStep }) dispatch({ payload: taxResidence.current, type: DataActionTypes.taxResidenceChange, }) - }, [dispatch, redirect]) + }, [dispatch]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/verificationStep.tsx b/src/pages/verificationStep.tsx index 04661b8..4cdfa0d 100644 --- a/src/pages/verificationStep.tsx +++ b/src/pages/verificationStep.tsx @@ -9,14 +9,12 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, Ul, } from "@Components/index" import { FC, useContext, useCallback, useEffect } from "react" import { PageProps } from "./pageProps" -import useChangePage from "@Hooks/useChangePage" const Footer: StepPart = ({ disabled, inactive, onEnter }) => ( = ({ inactive = false, }) => { const { dispatch } = useContext(StateContext) - const redirect = useChangePage() const onSubmit = useCallback(() => { - redirect(StepID.taxResidenceStep, StepID.verificationStep) - }, [redirect]) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [dispatch]) const onPrev = useCallback(() => { - redirect(StepID.verifyAccountStep, StepID.verificationStep, "prev") - }, [redirect]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/verifyAccount.tsx b/src/pages/verifyAccount.tsx index 6d3fb64..bdaac74 100644 --- a/src/pages/verifyAccount.tsx +++ b/src/pages/verifyAccount.tsx @@ -8,20 +8,16 @@ import { P, StateContext, Step, - StepID, StepPart, SubmitButton, } from "@Components/index" import { FC, useContext, useCallback, useEffect, useState } from "react" import { PageProps } from "./pageProps" -import useChangePage from "@Hooks/useChangePage" import styled, { css } from "styled-components/macro" import { Selector } from "./selector" -import { useVerified } from "@Hooks/useVerified" import veriLabs from "@Components/Icons/veriLabs" import emptyIcon from "@Components/Icons/emptyIcon" -import useErrorHandler from "@Hooks/errorHandler" const Footer: StepPart = ({ disabled, inactive, onEnter }) => ( = ({ animation, inactive = false, }) => { - const { - dispatch, - data: { returningUserFlow, isEmailConfirmed }, - } = useContext(StateContext) - const redirect = useChangePage() - const checkVerification = useVerified() - const errorHandler = useErrorHandler() + const { dispatch } = useContext(StateContext) const onSubmit = useCallback(() => { - if (returningUserFlow) { - redirect(StepID.nftArtSelection, StepID.verifyAccountStep) - } else { - try { - ;(async function () { - if (await checkVerification()) { - // If verified, then definitely accepted the terms - dispatch({ - payload: true, - type: DataActionTypes.termsAcceptedChange, - }) - redirect(StepID.nftArtSelection, StepID.verifyAccountStep) - } else { - if (isEmailConfirmed) { - dispatch({ - payload: true, - type: DataActionTypes.termsAcceptedChange, - }) - redirect(StepID.verificationStep, StepID.verifyAccountStep) - } else { - dispatch({ - payload: true, - type: DataActionTypes.termsAcceptedChange, - }) - redirect( - StepID.emailDiscordVerificationStep, - StepID.verifyAccountStep - ) - } - } - })() - } catch (error) { - errorHandler("fatal", error) - } - } - }, [ - redirect, - returningUserFlow, - checkVerification, - dispatch, - errorHandler, - isEmailConfirmed, - ]) + dispatch({ type: DataActionTypes.GoToNextStep }) + }, [dispatch]) const onPrev = useCallback(() => { - if (returningUserFlow) { - redirect(StepID.kycDAOMembershipStep, StepID.verifyAccountStep, "prev") - } else { - redirect(StepID.kycDAOMembershipStep, StepID.verifyAccountStep, "prev") - } - }, [redirect, returningUserFlow]) + dispatch({ type: DataActionTypes.GoToPrevStep }) + }, [dispatch]) const [provider, setProvider] = useState("verilabs") From 13af4c6dd666641c492b5b34e53db3d7e54cbdf8 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 3 Mar 2023 16:03:21 +0100 Subject: [PATCH 04/52] Error handling --- package.json | 18 +- pnpm-lock.yaml | 582 ++++++++++-------- src/AppContainer.tsx | 20 +- src/components/modal/genericErrorModal.tsx | 8 +- src/components/modal/mintingFailed.tsx | 6 +- src/components/stateContext/getNextStep.ts | 14 +- src/components/stateContext/stateContext.ts | 25 +- .../stateContext/stateContextTypes.ts | 27 +- src/hooks/errorHandler.ts | 20 +- src/pages/fatalErrorStep.tsx | 17 +- src/pages/grantNameAndAddress.tsx | 27 +- src/pages/nftArtSelection.tsx | 34 +- src/react-app-env.d.ts | 6 +- 13 files changed, 459 insertions(+), 345 deletions(-) diff --git a/package.json b/package.json index a543dfe..cf1e46f 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,6 @@ }, "dependencies": { "@kycdao/kycdao-sdk": "^0.6.10", - "styled-components": "^5.3.8", "buffer": "^6.0.3", "clsx": "^1.2.1", "near-api-js": "^1.1.0", @@ -71,7 +70,8 @@ "react-swipeable": "^7.0.0", "react-twitter-embed": "^4.0.4", "rxjs": "^7.8.0", - "stream": "^0.0.2" + "stream": "^0.0.2", + "styled-components": "^5.3.8" }, "dependenciesMeta": { "@toruslabs/eccrypto": { @@ -105,12 +105,13 @@ "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.21.0", + "@metamask/providers": "^10.2.1", "@playwright/test": "^1.31.2", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", "@types/jest": "^29.4.0", - "@types/node": "^18.14.6", + "@types/node": "^18.15.0", "@types/react": "^18.0.28", "@types/react-dom": "^18.0.11", "@types/styled-components": "^5.1.26", @@ -135,17 +136,17 @@ "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-rxjs": "^5.0.2", "husky": "^8.0.3", - "lint-staged": "^13.1.2", + "lint-staged": "^13.2.0", "npm-dts-webpack-plugin": "^1.3.12", "prettier": "^2.8.4", "react": "^18.2.0", "react-app-rewired": "^2.2.1", "react-dom": "^18.2.0", - "rimraf": "^4.3.1", + "rimraf": "^4.4.0", "styled-components": "^5.3.8", - "tsc-alias": "^1.8.2", + "tsc-alias": "^1.8.3", "typescript": "^4.9.5", - "webpack": "^5.75.0", + "webpack": "^5.76.0", "webpack-bundle-analyzer": "^4.8.0", "webpack-subresource-integrity": "5.2.0-rc.1" }, @@ -184,7 +185,8 @@ "jest-cli": "^29.4.3", "core-js": "^3.28.0", "bn.js": "^5.2.1", - "buffer": "^6.0.3" + "buffer": "^6.0.3", + "bs58": "^5.0.0" } } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f91cf6e..8c93e9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,6 +10,7 @@ overrides: core-js: ^3.28.0 bn.js: ^5.2.1 buffer: ^6.0.3 + bs58: ^5.0.0 specifiers: '@babel/cli': ^7.21.0 @@ -20,12 +21,13 @@ specifiers: '@babel/preset-react': ^7.18.6 '@babel/preset-typescript': ^7.21.0 '@kycdao/kycdao-sdk': ^0.6.10 + '@metamask/providers': ^10.2.1 '@playwright/test': ^1.31.2 '@testing-library/jest-dom': ^5.16.5 '@testing-library/react': ^14.0.0 '@testing-library/user-event': ^14.4.3 '@types/jest': ^29.4.0 - '@types/node': ^18.14.6 + '@types/node': ^18.15.0 '@types/react': ^18.0.28 '@types/react-dom': ^18.0.11 '@types/styled-components': ^5.1.26 @@ -52,7 +54,7 @@ specifiers: eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-rxjs: ^5.0.2 husky: ^8.0.3 - lint-staged: ^13.1.2 + lint-staged: ^13.2.0 near-api-js: ^1.1.0 npm-dts-webpack-plugin: ^1.3.12 persona: ^4.7.2 @@ -64,24 +66,24 @@ specifiers: react-scripts: ^5.0.1 react-swipeable: ^7.0.0 react-twitter-embed: ^4.0.4 - rimraf: ^4.3.1 + rimraf: ^4.4.0 rxjs: ^7.8.0 stream: ^0.0.2 styled-components: ^5.3.8 - tsc-alias: ^1.8.2 + tsc-alias: ^1.8.3 typescript: ^4.9.5 - webpack: ^5.75.0 + webpack: ^5.76.0 webpack-bundle-analyzer: ^4.8.0 webpack-subresource-integrity: 5.2.0-rc.1 dependencies: - '@kycdao/kycdao-sdk': 0.6.10_qdcwzzrvzgdiw4czd5hzyewndu + '@kycdao/kycdao-sdk': 0.6.10_ld2frdykwo3alsy32anduthxfu buffer: 6.0.3 clsx: 1.2.1 near-api-js: 1.1.0 persona: 4.7.2_lfoodr2hdmy7hzfgwjnbclkduy react-error-boundary: 3.1.4_react@18.2.0 - react-scripts: 5.0.1_4x7f6ytthid7edlgwcdcchmdwi + react-scripts: 5.0.1_yi257l7drdrtipkaqrzynkzaea react-swipeable: 7.0.0_react@18.2.0 react-twitter-embed: 4.0.4_biqbaboplfbrettd7655fr4n2y rxjs: 7.8.0 @@ -96,12 +98,13 @@ devDependencies: '@babel/preset-env': 7.20.2_@babel+core@7.21.0 '@babel/preset-react': 7.18.6_@babel+core@7.21.0 '@babel/preset-typescript': 7.21.0_@babel+core@7.21.0 + '@metamask/providers': 10.2.1 '@playwright/test': 1.31.2 '@testing-library/jest-dom': 5.16.5 '@testing-library/react': 14.0.0_biqbaboplfbrettd7655fr4n2y '@testing-library/user-event': 14.4.3 '@types/jest': 29.4.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 '@types/react': 18.0.28 '@types/react-dom': 18.0.11 '@types/styled-components': 5.1.26 @@ -126,18 +129,18 @@ devDependencies: eslint-plugin-react-hooks: 4.6.0_eslint@8.35.0 eslint-plugin-rxjs: 5.0.2_ycpbpc6yetojsgtrx3mwntkhsu husky: 8.0.3 - lint-staged: 13.1.2 + lint-staged: 13.2.0 npm-dts-webpack-plugin: 1.3.12 prettier: 2.8.4 react: 18.2.0 react-app-rewired: 2.2.1_react-scripts@5.0.1 react-dom: 18.2.0_react@18.2.0 - rimraf: 4.3.1 - tsc-alias: 1.8.2 + rimraf: 4.4.0 + tsc-alias: 1.8.3 typescript: 4.9.5 - webpack: 5.75.0 + webpack: 5.76.0 webpack-bundle-analyzer: 4.8.0 - webpack-subresource-integrity: 5.2.0-rc.1_webpack@5.75.0 + webpack-subresource-integrity: 5.2.0-rc.1_webpack@5.76.0 dependenciesMeta: '@toruslabs/eccrypto': @@ -1467,7 +1470,7 @@ packages: '@solana/web3.js': ^1.30.2 dependencies: '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 buffer: 6.0.3 eip1193-provider: 1.0.1 js-sha3: 0.8.0 @@ -1481,7 +1484,7 @@ packages: resolution: {integrity: sha512-iM1jFVzBMfk7iokgUVfA2xvGUegixklUISgMARa/VA2mFIjoi32t4xmD8PtWHht81fmg107aYhLnTV1cM7NkAg==} dependencies: '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 eventemitter3: 4.0.7 uuid: 8.3.2 transitivePeerDependencies: @@ -1751,7 +1754,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -1762,7 +1765,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -1782,14 +1785,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.10 jest-changed-files: 29.5.0 - jest-config: 29.5.0_@types+node@18.14.6 + jest-config: 29.5.0_@types+node@18.15.0 jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -1815,7 +1818,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 jest-mock: 29.5.0 /@jest/expect-utils/29.5.0: @@ -1839,7 +1842,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.0.2 - '@types/node': 18.14.6 + '@types/node': 18.15.0 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -1870,7 +1873,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.17 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -1988,7 +1991,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.14.6 + '@types/node': 18.15.0 '@types/yargs': 16.0.5 chalk: 4.1.2 @@ -1999,7 +2002,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.14.6 + '@types/node': 18.15.0 '@types/yargs': 17.0.22 chalk: 4.1.2 @@ -2010,19 +2013,19 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.14.6 + '@types/node': 18.15.0 '@types/yargs': 17.0.22 chalk: 4.1.2 - /@jnwng/walletconnect-solana/0.1.5_v5cjc37wex6j7e3ixxutdsz4ra: + /@jnwng/walletconnect-solana/0.1.5_ke5vuhyzsf2utstnga7sewbovq: resolution: {integrity: sha512-n8YLfF6NIVOqn+YeJEFRaZbbeNTGXL+VPBl+hqMpxLH+Fp+qgdm4CYH+ULH/OSszL2DBO1j+hB/XFDPiswCNeA==} peerDependencies: '@solana/web3.js': ^1.52.0 dependencies: '@solana/web3.js': 1.73.3 '@walletconnect/qrcode-modal': 1.8.0 - '@walletconnect/sign-client': 2.4.7_alpjt73dvgv6kni625hu7f2l4m - '@walletconnect/utils': 2.4.7_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/sign-client': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq + '@walletconnect/utils': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq bs58: 5.0.0 transitivePeerDependencies: - '@react-native-async-storage/async-storage' @@ -2154,7 +2157,7 @@ packages: - utf-8-validate dev: false - /@kycdao/kycdao-sdk/0.6.10_qdcwzzrvzgdiw4czd5hzyewndu: + /@kycdao/kycdao-sdk/0.6.10_ld2frdykwo3alsy32anduthxfu: resolution: {integrity: sha512-hPuSTEvuI+b8zTrDepJWj8Y2sXDCBlz2Q9jyQ09kjhBITL2rzNh7IqxV/Dp3O+3GbxG/te4R5ASJnx++YEC65Q==} peerDependencies: near-api-js: ^1 @@ -2165,7 +2168,7 @@ packages: dependencies: '@solana/buffer-layout': 4.0.1 '@solana/wallet-adapter-base': 0.9.22_@solana+web3.js@1.73.3 - '@solana/wallet-adapter-wallets': 0.19.15_vb2q2gyhvtdg2rksn224gmfrb4 + '@solana/wallet-adapter-wallets': 0.19.15_mv242ofvmeoo6zmvyicgfauofa '@solana/web3.js': 1.73.3 bn.js: 5.2.1 bs58: 5.0.0 @@ -2227,6 +2230,37 @@ packages: /@leichtgewicht/ip-codec/2.0.4: resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==} + /@metamask/object-multiplex/1.2.0: + resolution: {integrity: sha512-hksV602d3NWE2Q30Mf2Np1WfVKaGqfJRy9vpHAmelbaD0OkDt06/0KQkRR6UVYdMbTbkuEu8xN5JDUU80inGwQ==} + engines: {node: '>=12.0.0'} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + readable-stream: 2.3.8 + dev: true + + /@metamask/providers/10.2.1: + resolution: {integrity: sha512-p2TXw2a1Nb8czntDGfeIYQnk4LLVbd5vlcb3GY//lylYlKdSqp+uUTegCvxiFblRDOT68jsY8Ib1VEEzVUOolA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/object-multiplex': 1.2.0 + '@metamask/safe-event-emitter': 2.0.0 + '@types/chrome': 0.0.136 + detect-browser: 5.3.0 + eth-rpc-errors: 4.0.3 + extension-port-stream: 2.0.1 + fast-deep-equal: 2.0.1 + is-stream: 2.0.1 + json-rpc-engine: 6.1.0 + json-rpc-middleware-stream: 4.2.1 + pump: 3.0.0 + webextension-polyfill-ts: 0.25.0 + dev: true + + /@metamask/safe-event-emitter/2.0.0: + resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} + dev: true + /@ngraveio/bc-ur/1.1.6: resolution: {integrity: sha512-G+2XgjXde2IOcEQeCwR250aS43/Swi7gw0FuETgJy2c3HqF8f88SXDMsIGgJlZ8jXd0GeHR4aX0MfjXf523UZg==} dependencies: @@ -2307,13 +2341,13 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 playwright-core: 1.31.2 optionalDependencies: fsevents: 2.3.2 dev: true - /@pmmmwh/react-refresh-webpack-plugin/0.5.10_unmakpayn7vcxadrrsbqlrpehy: + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_ycskgacsltiwe6eygivlckbbui: resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} peerDependencies: @@ -2349,8 +2383,8 @@ packages: react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.4 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 + webpack: 5.76.0 + webpack-dev-server: 4.11.1_webpack@5.76.0 /@polka/url/1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} @@ -2363,7 +2397,7 @@ packages: '@solana/web3.js': ^1.5.0 dependencies: '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 eventemitter3: 4.0.7 dev: false @@ -2374,7 +2408,7 @@ packages: '@solana/web3.js': ^1.5.0 dependencies: '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 eventemitter3: 4.0.7 dev: false @@ -2580,7 +2614,7 @@ packages: dependencies: '@solana/wallet-adapter-base': 0.9.22_@solana+web3.js@1.73.3 '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 dev: false /@solana/wallet-adapter-coinbase/0.1.17_@solana+web3.js@1.73.3: @@ -2829,7 +2863,7 @@ packages: dependencies: '@solana/wallet-adapter-base': 0.9.22_@solana+web3.js@1.73.3 '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 dev: false /@solana/wallet-adapter-solflare/0.6.24_@solana+web3.js@1.73.3: @@ -2952,13 +2986,13 @@ packages: '@solana/web3.js': 1.73.3 dev: false - /@solana/wallet-adapter-walletconnect/0.1.14_v5cjc37wex6j7e3ixxutdsz4ra: + /@solana/wallet-adapter-walletconnect/0.1.14_ke5vuhyzsf2utstnga7sewbovq: resolution: {integrity: sha512-nz8BB1Gs9s2yLuAf1+wDyZoGxCAVi1XWpzVlXMRBD7oL7Bn3kx3SOohzgoOKQltTrye4PF4cl+KCStzY3zQfkg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 dependencies: - '@jnwng/walletconnect-solana': 0.1.5_v5cjc37wex6j7e3ixxutdsz4ra + '@jnwng/walletconnect-solana': 0.1.5_ke5vuhyzsf2utstnga7sewbovq '@solana/wallet-adapter-base': 0.9.22_@solana+web3.js@1.73.3 '@solana/web3.js': 1.73.3 transitivePeerDependencies: @@ -2972,7 +3006,7 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-wallets/0.19.15_vb2q2gyhvtdg2rksn224gmfrb4: + /@solana/wallet-adapter-wallets/0.19.15_mv242ofvmeoo6zmvyicgfauofa: resolution: {integrity: sha512-HakQwKor5f5dbKlRPCBMu3E0gALX2mt0fp44qIKrmLDH7J/UpTIuIDu0z5eidaABJCSVMBNuEC+0uS1UYUXS8w==} engines: {node: '>=16'} peerDependencies: @@ -3021,7 +3055,7 @@ packages: '@solana/wallet-adapter-torus': 0.11.27_@solana+web3.js@1.73.3 '@solana/wallet-adapter-trust': 0.1.12_@solana+web3.js@1.73.3 '@solana/wallet-adapter-unsafe-burner': 0.1.6_@solana+web3.js@1.73.3 - '@solana/wallet-adapter-walletconnect': 0.1.14_v5cjc37wex6j7e3ixxutdsz4ra + '@solana/wallet-adapter-walletconnect': 0.1.14_ke5vuhyzsf2utstnga7sewbovq '@solana/wallet-adapter-xdefi': 0.1.6_@solana+web3.js@1.73.3 '@solana/web3.js': 1.73.3 transitivePeerDependencies: @@ -3073,7 +3107,7 @@ packages: bigint-buffer: 1.1.5 bn.js: 5.2.1 borsh: 0.7.0 - bs58: 4.0.1 + bs58: 5.0.0 buffer: 6.0.3 fast-stable-stringify: 1.0.0 jayson: 3.7.0 @@ -3094,7 +3128,7 @@ packages: dependencies: '@project-serum/sol-wallet-adapter': 0.2.0_@solana+web3.js@1.73.3 '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 eventemitter3: 4.0.7 uuid: 8.3.2 dev: false @@ -3219,7 +3253,7 @@ packages: resolution: {integrity: sha512-8gZAfjkoFgwf5fLFzrVuE2MtxAc7Pc0loBgi0zfcb3ijOy/FEpm5RJKLruKOhcThS6CHrfFxDU80AsZe+msObw==} dependencies: '@solana/web3.js': 1.73.3 - bs58: 4.0.1 + bs58: 5.0.0 eventemitter3: 4.0.7 uuid: 8.3.2 transitivePeerDependencies: @@ -3376,8 +3410,8 @@ packages: transitivePeerDependencies: - supports-color - /@testing-library/dom/9.0.0: - resolution: {integrity: sha512-+/TLgKNFsYUshOY/zXsQOk+PlFQK+eyJ9T13IDVNJEi+M+Un7xlJK+FZKkbGSnf0+7E1G6PlDhkSYQ/GFiruBQ==} + /@testing-library/dom/9.0.1: + resolution: {integrity: sha512-fTOVsMY9QLFCCXRHG3Ese6cMH5qIWwSbgxZsgeF5TNsy81HKaZ4kgehnSF8FsR3OF+numlIV2YcU79MzbnhSig==} engines: {node: '>=14'} dependencies: '@babel/code-frame': 7.18.6 @@ -3413,7 +3447,7 @@ packages: react-dom: ^18.0.0 dependencies: '@babel/runtime': 7.21.0 - '@testing-library/dom': 9.0.0 + '@testing-library/dom': 9.0.1 '@types/react-dom': 18.0.11 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 @@ -3537,7 +3571,7 @@ packages: fast-safe-stringify: 2.1.1 once: 1.4.0 pump: 3.0.0 - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: false /@toruslabs/openlogin-jrpc/3.0.0: @@ -3552,7 +3586,7 @@ packages: fast-safe-stringify: 2.1.1 once: 1.4.0 pump: 3.0.0 - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: false /@toruslabs/openlogin-utils/2.13.0: @@ -3651,30 +3685,37 @@ packages: /@types/bn.js/5.1.1: resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 dev: false /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/bonjour/3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 + + /@types/chrome/0.0.136: + resolution: {integrity: sha512-XDEiRhLkMd+SB7Iw3ZUIj/fov3wLd4HyTdLltVszkgl1dBfc3Rb7oPMVZ2Mz2TLqnF7Ow+StbR8E7r9lqpb4DA==} + dependencies: + '@types/filesystem': 0.0.32 + '@types/har-format': 1.2.10 + dev: true /@types/connect-history-api-fallback/1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.33 - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/connect/3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/eslint-scope/3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} @@ -3697,7 +3738,7 @@ packages: /@types/express-serve-static-core/4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 @@ -3709,10 +3750,24 @@ packages: '@types/qs': 6.9.7 '@types/serve-static': 1.15.1 + /@types/filesystem/0.0.32: + resolution: {integrity: sha512-Yuf4jR5YYMR2DVgwuCiP11s0xuVRyPKmz8vo6HBY3CGdeMj8af93CFZX+T82+VD1+UqHOxTq31lO7MI7lepBtQ==} + dependencies: + '@types/filewriter': 0.0.29 + dev: true + + /@types/filewriter/0.0.29: + resolution: {integrity: sha512-BsPXH/irW0ht0Ji6iw/jJaK8Lj3FJemon2gvEqHKpCdDCeemHa+rI3WBGq5z7cDMZgoLjY40oninGxqk+8NzNQ==} + dev: true + /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 + + /@types/har-format/1.2.10: + resolution: {integrity: sha512-o0J30wqycjF5miWDKYKKzzOU1ZTLuA42HZ4HE7/zqTOc/jTLdQ5NhYWvsRQo45Nfi1KHoRdNhteSI4BAxTF1Pg==} + dev: true /@types/hoist-non-react-statics/3.3.1: resolution: {integrity: sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==} @@ -3727,7 +3782,7 @@ packages: /@types/http-proxy/1.17.10: resolution: {integrity: sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/istanbul-lib-coverage/2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} @@ -3762,8 +3817,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: false - /@types/node/18.14.6: - resolution: {integrity: sha512-93+VvleD3mXwlLI/xASjw0FzKcwzl3OdTCzm1LaRfqgS21gfFtK3zDXM5Op9TeeMsJVOaJ2VRDpT9q4Y3d0AvA==} + /@types/node/18.15.0: + resolution: {integrity: sha512-z6nr0TTEOBGkzLGmbypWOGnpSpSIBorEhC4L+4HeQ2iezKCi4f77kyslRwvHeNitymGQ+oFyIWGP96l/DPSV9w==} /@types/parse-json/4.0.0: resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} @@ -3771,7 +3826,7 @@ packages: /@types/pbkdf2/3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 dev: false /@types/prettier/2.7.2: @@ -3804,7 +3859,7 @@ packages: /@types/resolve/1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/retry/0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -3816,7 +3871,7 @@ packages: /@types/secp256k1/4.0.3: resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 dev: false /@types/semver/7.3.13: @@ -3831,12 +3886,12 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/sockjs/0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/stack-utils/2.0.1: resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} @@ -3865,13 +3920,13 @@ packages: /@types/ws/7.4.7: resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 dev: false /@types/ws/8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 /@types/yargs-parser/21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} @@ -4042,10 +4097,10 @@ packages: detect-browser: 5.2.0 dev: false - /@walletconnect/core/2.4.7_alpjt73dvgv6kni625hu7f2l4m: - resolution: {integrity: sha512-w92NrtziqrWs070HJICGh80Vp60PaXu06OjNvOnVZEorbTipCWx4xxgcC2NhsT4TCQ8r1FOut6ahLe1PILuRsg==} + /@walletconnect/core/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: + resolution: {integrity: sha512-OLyBNJyUfQNr1qlcCxqzu5bmNorOL6SqWOwA3LcxV+3+mbUk4fByFd8AJRzGFWf8kC3BRycLFivHh4QEeBNZ8Q==} dependencies: - '@walletconnect/heartbeat': 1.2.0_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/heartbeat': 1.2.0_lwgqdwokjtwlohdqtbb6s252kq '@walletconnect/jsonrpc-provider': 1.0.8 '@walletconnect/jsonrpc-utils': 1.0.6 '@walletconnect/jsonrpc-ws-connection': 1.0.9 @@ -4055,8 +4110,8 @@ packages: '@walletconnect/relay-auth': 1.0.4 '@walletconnect/safe-json': 1.0.1 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.4.7_alpjt73dvgv6kni625hu7f2l4m - '@walletconnect/utils': 2.4.7_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/types': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq + '@walletconnect/utils': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq events: 3.3.0 lodash.isequal: 4.5.0 pino: 7.11.0 @@ -4085,14 +4140,14 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/heartbeat/1.2.0_alpjt73dvgv6kni625hu7f2l4m: + /@walletconnect/heartbeat/1.2.0_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-0vbzTa/ARrpmMmOD+bQMxPvFYKtOLQZObgZakrYr0aODiMOO71CmPVNV2eAqXnw9rMmcP+z91OybLeIFlwTjjA==} dependencies: '@walletconnect/events': 1.0.1 '@walletconnect/time': 1.0.2 chai: 4.3.7 mocha: 10.2.0 - ts-node: 10.9.1_alpjt73dvgv6kni625hu7f2l4m + ts-node: 10.9.1_lwgqdwokjtwlohdqtbb6s252kq tslib: 1.14.1 transitivePeerDependencies: - '@swc/core' @@ -4204,18 +4259,18 @@ packages: tslib: 1.14.1 dev: false - /@walletconnect/sign-client/2.4.7_alpjt73dvgv6kni625hu7f2l4m: - resolution: {integrity: sha512-x5uxnHQkNSn0QNXUdPEfwy4o1Vyi2QIWkDGUh+pfSP4s2vN0+IJAcwqBqkPn+zJ1X7eKYLs+v0ih1eieciYMPA==} + /@walletconnect/sign-client/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: + resolution: {integrity: sha512-i10SjiqbU1bm4HAS2aboznYo+x7G4V5tbrFRFOQa0RZnSJ6SCWs14GlLa/m/lxQ4PEDZD+bUDlWhLBjiqdmIpA==} dependencies: - '@walletconnect/core': 2.4.7_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/core': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.0_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/heartbeat': 1.2.0_lwgqdwokjtwlohdqtbb6s252kq '@walletconnect/jsonrpc-provider': 1.0.8 '@walletconnect/jsonrpc-utils': 1.0.6 '@walletconnect/logger': 2.0.1 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.4.7_alpjt73dvgv6kni625hu7f2l4m - '@walletconnect/utils': 2.4.7_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/types': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq + '@walletconnect/utils': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq events: 3.3.0 pino: 7.11.0 transitivePeerDependencies: @@ -4240,11 +4295,11 @@ packages: deprecated: 'WalletConnect''s v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/' dev: false - /@walletconnect/types/2.4.7_alpjt73dvgv6kni625hu7f2l4m: - resolution: {integrity: sha512-1VaPdPJrE+UrEjAhK5bdxq2+MTo3DvUMmQeNUsp3vUGhocQXB9hJQQ1rYBknYYSyDu2rTksGCQ4nv3ZOqfxvHw==} + /@walletconnect/types/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: + resolution: {integrity: sha512-NuL+c/BHExK7hwF+JoJVy/LnNB8sNtoxvlpIa2Er5qeB8MJsWtwbmEJMS/bP6CbOTSpO0kOpXGzb1ht0LD2rkw==} dependencies: '@walletconnect/events': 1.0.1 - '@walletconnect/heartbeat': 1.2.0_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/heartbeat': 1.2.0_lwgqdwokjtwlohdqtbb6s252kq '@walletconnect/jsonrpc-types': 1.0.2 '@walletconnect/keyvaluestorage': 1.0.2 '@walletconnect/logger': 2.0.1 @@ -4258,8 +4313,8 @@ packages: - typescript dev: false - /@walletconnect/utils/2.4.7_alpjt73dvgv6kni625hu7f2l4m: - resolution: {integrity: sha512-t3kW0qLClnejTTKg3y/o/MmJb5ZDGfD13YT9Nw56Up3qq/pwVfTtWjt8vJOQWMIm0hZgjgESivcf6/wuu3/Oqw==} + /@walletconnect/utils/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: + resolution: {integrity: sha512-W/5Ly+p+6/RHsYzVUiuwxGK+J9BQEins0RRdPeO6tJjNPeR05SoJE564JSKRYxPkGf/9vB5wfOZ88IEzOIAYLw==} dependencies: '@stablelib/chacha20poly1305': 1.0.1 '@stablelib/hkdf': 1.0.1 @@ -4270,7 +4325,7 @@ packages: '@walletconnect/relay-api': 1.0.9 '@walletconnect/safe-json': 1.0.1 '@walletconnect/time': 1.0.2 - '@walletconnect/types': 2.4.7_alpjt73dvgv6kni625hu7f2l4m + '@walletconnect/types': 2.4.8_lwgqdwokjtwlohdqtbb6s252kq '@walletconnect/window-getters': 1.0.1 '@walletconnect/window-metadata': 1.0.1 detect-browser: 5.3.0 @@ -4298,7 +4353,7 @@ packages: /@walletconnect/window-metadata/1.0.0: resolution: {integrity: sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==} dependencies: - '@walletconnect/window-getters': 1.0.1 + '@walletconnect/window-getters': 1.0.0 dev: false /@walletconnect/window-metadata/1.0.1: @@ -4716,15 +4771,15 @@ packages: engines: {node: '>=8.0.0'} dev: false - /autoprefixer/10.4.13_postcss@8.4.21: - resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} + /autoprefixer/10.4.14_postcss@8.4.21: + resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001462 + caniuse-lite: 1.0.30001464 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -4787,7 +4842,7 @@ packages: transitivePeerDependencies: - supports-color - /babel-loader/8.3.0_qoaxtqicpzj5p3ubthw53xafqm: + /babel-loader/8.3.0_tkx7iv5lytdmlhrwm4n6r336ei: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -4799,7 +4854,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0 + webpack: 5.76.0 /babel-plugin-istanbul/6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} @@ -4985,12 +5040,6 @@ packages: /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /base-x/3.0.9: - resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} - dependencies: - safe-buffer: 5.2.1 - dev: false - /base-x/4.0.0: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} dev: false @@ -5101,7 +5150,7 @@ packages: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} dependencies: bn.js: 5.2.1 - bs58: 4.0.1 + bs58: 5.0.0 text-encoding-utf-8: 1.0.2 dev: false @@ -5179,7 +5228,7 @@ packages: elliptic: 6.5.4 inherits: 2.0.4 parse-asn1: 5.1.6 - readable-stream: 3.6.1 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: false @@ -5188,17 +5237,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001462 - electron-to-chromium: 1.4.324 + caniuse-lite: 1.0.30001464 + electron-to-chromium: 1.4.327 node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 - /bs58/4.0.1: - resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} - dependencies: - base-x: 3.0.9 - dev: false - /bs58/5.0.0: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} dependencies: @@ -5208,7 +5251,7 @@ packages: /bs58check/2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} dependencies: - bs58: 4.0.1 + bs58: 5.0.0 create-hash: 1.2.0 safe-buffer: 5.2.1 dev: false @@ -5319,12 +5362,12 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001462 + caniuse-lite: 1.0.30001464 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - /caniuse-lite/1.0.30001462: - resolution: {integrity: sha512-PDd20WuOBPiasZ7KbFnmQRyuLE7cFXW2PVd7dmALzbkUXEP46upAuCDm9eY9vho8fgNMGmbAX92QBZHzcnWIqw==} + /caniuse-lite/1.0.30001464: + resolution: {integrity: sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==} /capability/0.2.5: resolution: {integrity: sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg==} @@ -5378,6 +5421,11 @@ packages: ansi-styles: 4.3.0 supports-color: 7.2.0 + /chalk/5.2.0: + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: true + /char-regex/1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -5544,6 +5592,11 @@ packages: text-hex: 1.0.0 dev: true + /commander/10.0.0: + resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} + engines: {node: '>=14'} + dev: true + /commander/2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -5816,7 +5869,7 @@ packages: postcss: 8.4.21 postcss-selector-parser: 6.0.11 - /css-loader/6.7.3_webpack@5.75.0: + /css-loader/6.7.3_webpack@5.76.0: resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -5830,9 +5883,9 @@ packages: postcss-modules-values: 4.0.0_postcss@8.4.21 postcss-value-parser: 4.2.0 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.76.0 - /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + /css-minimizer-webpack-plugin/3.4.1_webpack@5.76.0: resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -5857,7 +5910,7 @@ packages: schema-utils: 4.0.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.75.0 + webpack: 5.76.0 /css-prefers-color-scheme/6.0.3_postcss@8.4.21: resolution: {integrity: sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==} @@ -6161,7 +6214,6 @@ packages: /detect-browser/5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} - dev: false /detect-file/1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} @@ -6342,7 +6394,7 @@ packages: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 - readable-stream: 3.6.1 + readable-stream: 3.6.2 stream-shift: 1.0.1 dev: false @@ -6370,8 +6422,8 @@ packages: dependencies: jake: 10.8.5 - /electron-to-chromium/1.4.324: - resolution: {integrity: sha512-m+eBs/kh3TXnCuqDF6aHLLRwLK2U471JAbZ1KYigf0TM96fZglxv0/ZFBvyIxnLKsIWUoDiVnHTA2mhYz1fqdA==} + /electron-to-chromium/1.4.327: + resolution: {integrity: sha512-DIk2H4g/3ZhjgiABJjVdQvUdMlSABOsjeCm6gmUzIdKxAuFrGiJ8QXMm3i09grZdDBMC/d8MELMrdwYRC0+YHg==} /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -6423,7 +6475,6 @@ packages: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 - dev: false /engine.io-client/6.4.0: resolution: {integrity: sha512-GyKPDyoEha+XZ7iEqam49vz6auPnNJ9ZBfy89f+rMMas8AuiMWOZ9PVzu8xb9ZC6rafUqiGHSCfu22ih66E+1g==} @@ -6780,7 +6831,7 @@ packages: '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i '@typescript-eslint/experimental-utils': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu eslint: 8.35.0 - jest: 29.5.0_@types+node@18.14.6 + jest: 29.5.0_@types+node@18.15.0 transitivePeerDependencies: - supports-color - typescript @@ -6933,7 +6984,7 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint-webpack-plugin/3.2.0_w3onncegnsazftodujhcsvvdoy: + /eslint-webpack-plugin/3.2.0_niean6z7q7c3aiu73pf7dprqsm: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -6946,7 +6997,7 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.0 /eslint/8.35.0: resolution: {integrity: sha512-BxAf1fVL7w+JLRQhWl2pzGeSiGqbWumV4WNvc9Rhp6tiCtm4oHnyPBSEtMGZwrQgudFQ+otqzWoPB7x+hxoWsw==} @@ -7044,7 +7095,6 @@ packages: resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} dependencies: fast-safe-stringify: 2.1.1 - dev: false /ethereum-cryptography/0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} @@ -7105,13 +7155,13 @@ packages: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - /execa/6.1.0: - resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /execa/7.0.0: + resolution: {integrity: sha512-tQbH0pH/8LHTnwTrsKWideqi6rFB/QNUawEwrn+WHyz7PX1Tuz2u7wfTvbaNBdP5JD5LVWxNo8/A8CHNZ3bV6g==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 - human-signals: 3.0.1 + human-signals: 4.3.0 is-stream: 3.0.0 merge-stream: 2.0.0 npm-run-path: 5.1.0 @@ -7183,11 +7233,22 @@ packages: transitivePeerDependencies: - supports-color + /extension-port-stream/2.0.1: + resolution: {integrity: sha512-ltrv4Dh/979I04+D4Te6TFygfRSOc5EBzzlHRldWMS8v73V80qWluxH88hqF0qyUsBXTb8NmzlmSipcre6a+rg==} + engines: {node: '>=12.0.0'} + dependencies: + webextension-polyfill-ts: 0.22.0 + dev: true + /eyes/0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} dev: false + /fast-deep-equal/2.0.1: + resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} + dev: true + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -7218,7 +7279,6 @@ packages: /fast-safe-stringify/2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: false /fast-stable-stringify/1.0.0: resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} @@ -7250,7 +7310,7 @@ packages: dependencies: flat-cache: 3.0.4 - /file-loader/6.2.0_webpack@5.75.0: + /file-loader/6.2.0_webpack@5.76.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -7258,7 +7318,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.75.0 + webpack: 5.76.0 /file-uri-to-path/1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} @@ -7384,7 +7444,7 @@ packages: dependencies: is-callable: 1.2.7 - /fork-ts-checker-webpack-plugin/6.5.3_d6mwqtvpzyptsbgadmdtsiamly: + /fork-ts-checker-webpack-plugin/6.5.3_3yr7rclcvllpl37mk7h3upl2ve: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -7413,7 +7473,7 @@ packages: semver: 7.3.8 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.75.0 + webpack: 5.76.0 /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} @@ -7719,7 +7779,7 @@ packages: engines: {node: '>=4'} dependencies: inherits: 2.0.4 - readable-stream: 3.6.1 + readable-stream: 3.6.2 safe-buffer: 5.2.1 dev: false @@ -7783,9 +7843,9 @@ packages: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.16.5 + terser: 5.16.6 - /html-webpack-plugin/5.5.0_webpack@5.75.0: + /html-webpack-plugin/5.5.0_webpack@5.76.0: resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -7796,7 +7856,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.76.0 /htmlparser2/6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} @@ -7874,9 +7934,9 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - /human-signals/3.0.1: - resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==} - engines: {node: '>=12.20.0'} + /human-signals/4.3.0: + resolution: {integrity: sha512-zyzVyMjpGBX2+6cDVZeFPCdtOtdsxOeseRhB9tkQ6xXmGUNrcnBzdEKPy3VPNYz+4gy1oukVOXcrJCunSyc6QQ==} + engines: {node: '>=14.18.0'} dev: true /humanize-ms/1.2.1: @@ -8330,7 +8390,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -8349,7 +8409,7 @@ packages: transitivePeerDependencies: - supports-color - /jest-cli/29.5.0_@types+node@18.14.6: + /jest-cli/29.5.0_@types+node@18.15.0: resolution: {integrity: sha512-L1KcP1l4HtfwdxXNFCL5bmUbLQiKrakMUriBEcc1Vfz6gx31ORKdreuWvmQVBit+1ss9NNR3yxjwfwzZNdQXJw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -8366,7 +8426,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.10 import-local: 3.1.0 - jest-config: 29.5.0_@types+node@18.14.6 + jest-config: 29.5.0_@types+node@18.15.0 jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -8376,7 +8436,7 @@ packages: - supports-color - ts-node - /jest-config/29.5.0_@types+node@18.14.6: + /jest-config/29.5.0_@types+node@18.15.0: resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -8391,7 +8451,7 @@ packages: '@babel/core': 7.21.0 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 babel-jest: 29.5.0_@babel+core@7.21.0 chalk: 4.1.2 ci-info: 3.8.0 @@ -8446,7 +8506,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -8464,7 +8524,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 18.14.6 + '@types/node': 18.15.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -8483,7 +8543,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 18.14.6 + '@types/node': 18.15.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.10 @@ -8544,7 +8604,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 jest-util: 29.5.0 /jest-pnp-resolver/1.2.3_jest-resolve@27.5.1: @@ -8628,7 +8688,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.10 @@ -8658,7 +8718,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 @@ -8680,7 +8740,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 graceful-fs: 4.2.10 /jest-snapshot/29.5.0: @@ -8718,7 +8778,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.10 @@ -8729,7 +8789,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.10 @@ -8740,7 +8800,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.10 @@ -8776,7 +8836,7 @@ packages: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 29.5.0_@types+node@18.14.6 + jest: 29.5.0_@types+node@18.15.0 jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -8789,7 +8849,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 18.14.6 + '@types/node': 18.15.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -8802,7 +8862,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 18.14.6 + '@types/node': 18.15.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -8813,7 +8873,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 merge-stream: 2.0.0 supports-color: 7.2.0 @@ -8821,7 +8881,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8829,7 +8889,7 @@ packages: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8837,12 +8897,12 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 18.14.6 + '@types/node': 18.15.0 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 - /jest/29.5.0_@types+node@18.14.6: + /jest/29.5.0_@types+node@18.15.0: resolution: {integrity: sha512-juMg3he2uru1QoXX078zTa7pO85QyB9xajZc6bU+d9yEGwrKX6+vGmJQ3UdVZsvTEUARIdObzH68QItim6OSSQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -8855,7 +8915,7 @@ packages: '@jest/core': 29.5.0 '@jest/types': 29.5.0 import-local: 3.1.0 - jest-cli: 29.5.0_@types+node@18.14.6 + jest-cli: 29.5.0_@types+node@18.15.0 transitivePeerDependencies: - '@types/node' - supports-color @@ -8904,6 +8964,22 @@ packages: /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /json-rpc-engine/6.1.0: + resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} + engines: {node: '>=10.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + eth-rpc-errors: 4.0.3 + dev: true + + /json-rpc-middleware-stream/4.2.1: + resolution: {integrity: sha512-6QKayke/8lg0nTjOpRCq4JCgRx7bVybldmloIfY21HSDV0GUevcV9i8DJNvuKTJx4KR9EDIf6HTStAnEovGUvA==} + engines: {node: '>=14.0.0'} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + readable-stream: 2.3.8 + dev: true + /json-rpc-random-id/1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} dev: false @@ -8979,7 +9055,7 @@ packages: dependencies: node-addon-api: 2.0.2 node-gyp-build: 4.6.0 - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: false /keyvaluestorage-interface/1.0.0: @@ -9026,11 +9102,6 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 - /lilconfig/2.0.6: - resolution: {integrity: sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==} - engines: {node: '>=10'} - dev: true - /lilconfig/2.1.0: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} @@ -9038,17 +9109,17 @@ packages: /lines-and-columns/1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - /lint-staged/13.1.2: - resolution: {integrity: sha512-K9b4FPbWkpnupvK3WXZLbgu9pchUJ6N7TtVZjbaPsoizkqFUDkUReUL25xdrCljJs7uLUF3tZ7nVPeo/6lp+6w==} + /lint-staged/13.2.0: + resolution: {integrity: sha512-GbyK5iWinax5Dfw5obm2g2ccUiZXNGtAS4mCbJ0Lv4rq6iEtfBSjOYdcbOtAIFtM114t0vdpViDDetjVTSd8Vw==} engines: {node: ^14.13.1 || >=16.0.0} hasBin: true dependencies: + chalk: 5.2.0 cli-truncate: 3.1.0 - colorette: 2.0.19 - commander: 9.5.0 + commander: 10.0.0 debug: 4.3.4 - execa: 6.1.0 - lilconfig: 2.0.6 + execa: 7.0.0 + lilconfig: 2.1.0 listr2: 5.0.7 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -9327,14 +9398,14 @@ packages: engines: {node: '>=4'} dev: true - /mini-css-extract-plugin/2.7.3_webpack@5.75.0: + /mini-css-extract-plugin/2.7.3_webpack@5.76.0: resolution: {integrity: sha512-CD9cXeKeXLcnMw8FZdtfrRrLaM7gwCl4nKuKn2YkY2Bw5wdlB8zU2cCzw+w2zS9RFvbrufTBkMCJACNPwqQA0w==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.0 /minimalistic-assert/1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} @@ -9498,7 +9569,7 @@ packages: dependencies: bn.js: 5.2.1 borsh: 0.7.0 - bs58: 4.0.1 + bs58: 5.0.0 depd: 2.0.0 error-polyfill: 0.1.3 http-errors: 1.8.1 @@ -10296,7 +10367,7 @@ packages: postcss: 8.4.21 yaml: 1.10.2 - /postcss-loader/6.2.1_6jdsrmfenkuhhw3gx4zvjlznce: + /postcss-loader/6.2.1_ynsp4hpcl6ftpkdbhj2ssg4tva: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -10307,7 +10378,7 @@ packages: klona: 2.0.6 postcss: 8.4.21 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.76.0 /postcss-logical/5.0.4_postcss@8.4.21: resolution: {integrity: sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==} @@ -10601,7 +10672,7 @@ packages: '@csstools/postcss-text-decoration-shorthand': 1.0.0_postcss@8.4.21 '@csstools/postcss-trigonometric-functions': 1.0.2_postcss@8.4.21 '@csstools/postcss-unset-value': 1.0.2_postcss@8.4.21 - autoprefixer: 10.4.13_postcss@8.4.21 + autoprefixer: 10.4.14_postcss@8.4.21 browserslist: 4.21.5 css-blank-pseudo: 3.0.3_postcss@8.4.21 css-has-pseudo: 3.0.4_postcss@8.4.21 @@ -10840,7 +10911,6 @@ packages: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: false /punycode/2.3.0: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} @@ -10963,11 +11033,11 @@ packages: peerDependencies: react-scripts: '>=2.1.3' dependencies: - react-scripts: 5.0.1_4x7f6ytthid7edlgwcdcchmdwi + react-scripts: 5.0.1_yi257l7drdrtipkaqrzynkzaea semver: 5.7.1 dev: true - /react-dev-utils/12.0.1_d6mwqtvpzyptsbgadmdtsiamly: + /react-dev-utils/12.0.1_3yr7rclcvllpl37mk7h3upl2ve: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -10986,7 +11056,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3_d6mwqtvpzyptsbgadmdtsiamly + fork-ts-checker-webpack-plugin: 6.5.3_3yr7rclcvllpl37mk7h3upl2ve global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -11002,7 +11072,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.75.0 + webpack: 5.76.0 transitivePeerDependencies: - eslint - supports-color @@ -11087,7 +11157,7 @@ packages: resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==} engines: {node: '>=0.10.0'} - /react-scripts/5.0.1_4x7f6ytthid7edlgwcdcchmdwi: + /react-scripts/5.0.1_yi257l7drdrtipkaqrzynkzaea: resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -11100,54 +11170,54 @@ packages: optional: true dependencies: '@babel/core': 7.21.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_unmakpayn7vcxadrrsbqlrpehy + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_ycskgacsltiwe6eygivlckbbui '@svgr/webpack': 6.5.1 babel-jest: 27.5.1_@babel+core@7.21.0 - babel-loader: 8.3.0_qoaxtqicpzj5p3ubthw53xafqm + babel-loader: 8.3.0_tkx7iv5lytdmlhrwm4n6r336ei babel-plugin-named-asset-import: 0.3.8_@babel+core@7.21.0 babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.5 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.3_webpack@5.75.0 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 + css-loader: 6.7.3_webpack@5.76.0 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.76.0 dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.35.0 eslint-config-react-app: 7.0.1_fcxoyfyehye2y63ilgntc7dzaq - eslint-webpack-plugin: 3.2.0_w3onncegnsazftodujhcsvvdoy - file-loader: 6.2.0_webpack@5.75.0 + eslint-webpack-plugin: 3.2.0_niean6z7q7c3aiu73pf7dprqsm + file-loader: 6.2.0_webpack@5.76.0 fs-extra: 10.1.0 - html-webpack-plugin: 5.5.0_webpack@5.75.0 + html-webpack-plugin: 5.5.0_webpack@5.76.0 identity-obj-proxy: 3.0.0 - jest: 29.5.0_@types+node@18.14.6 + jest: 29.5.0_@types+node@18.15.0 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0_jest@29.5.0 - mini-css-extract-plugin: 2.7.3_webpack@5.75.0 + mini-css-extract-plugin: 2.7.3_webpack@5.76.0 postcss: 8.4.21 postcss-flexbugs-fixes: 5.0.2_postcss@8.4.21 - postcss-loader: 6.2.1_6jdsrmfenkuhhw3gx4zvjlznce + postcss-loader: 6.2.1_ynsp4hpcl6ftpkdbhj2ssg4tva postcss-normalize: 10.0.1_jrpp4geoaqu5dz2gragkckznb4 postcss-preset-env: 7.8.3_postcss@8.4.21 prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_d6mwqtvpzyptsbgadmdtsiamly + react-dev-utils: 12.0.1_3yr7rclcvllpl37mk7h3upl2ve react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0_webpack@5.75.0 + sass-loader: 12.6.0_webpack@5.76.0 semver: 7.3.8 - source-map-loader: 3.0.2_webpack@5.75.0 - style-loader: 3.3.1_webpack@5.75.0 + source-map-loader: 3.0.2_webpack@5.76.0 + style-loader: 3.3.1_webpack@5.76.0 tailwindcss: 3.2.7 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + terser-webpack-plugin: 5.3.7_webpack@5.76.0 typescript: 4.9.5 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 - webpack-manifest-plugin: 4.1.1_webpack@5.75.0 - workbox-webpack-plugin: 6.5.4_webpack@5.75.0 + webpack: 5.76.0 + webpack-dev-server: 4.11.1_webpack@5.76.0 + webpack-manifest-plugin: 4.1.1_webpack@5.76.0 + workbox-webpack-plugin: 6.5.4_webpack@5.76.0 optionalDependencies: fsevents: 2.3.2 transitivePeerDependencies: @@ -11252,8 +11322,8 @@ packages: string_decoder: 1.1.1 util-deprecate: 1.0.2 - /readable-stream/3.6.1: - resolution: {integrity: sha512-+rQmrWMYGA90yenhTYsLWAsLsqVC8osOw6PKE1HDYiO0gdPeKe/xDHNzIAIn4C91YQ6oenEhfYqqc1883qHbjQ==} + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: inherits: 2.0.4 @@ -11468,8 +11538,8 @@ packages: dependencies: glob: 7.2.3 - /rimraf/4.3.1: - resolution: {integrity: sha512-GfHJHBzFQra23IxDzIdBqhOWfbtdgS1/dCHrDy+yvhpoJY5TdwdT28oWaHWfRpKFDLd3GZnGTx6Mlt4+anbsxQ==} + /rimraf/4.4.0: + resolution: {integrity: sha512-X36S+qpCUR0HjXlkDe4NAOhS//aHH0Z+h8Ckf2auGJk3PTnx5rLmrHkwNdbVQuCSUhOyFrlRvFEllZOYE+yZGQ==} engines: {node: '>=14'} hasBin: true dependencies: @@ -11500,7 +11570,7 @@ packages: jest-worker: 26.6.2 rollup: 2.79.1 serialize-javascript: 4.0.0 - terser: 5.16.5 + terser: 5.16.6 /rollup/2.79.1: resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} @@ -11597,7 +11667,7 @@ packages: /sanitize.css/13.0.0: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} - /sass-loader/12.6.0_webpack@5.75.0: + /sass-loader/12.6.0_webpack@5.76.0: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -11618,7 +11688,7 @@ packages: dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.75.0 + webpack: 5.76.0 /scheduler/0.19.1: resolution: {integrity: sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==} @@ -11944,7 +12014,7 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - /source-map-loader/3.0.2_webpack@5.75.0: + /source-map-loader/3.0.2_webpack@5.76.0: resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -11953,7 +12023,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.75.0 + webpack: 5.76.0 /source-map-support/0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} @@ -11996,7 +12066,7 @@ packages: detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 - readable-stream: 3.6.1 + readable-stream: 3.6.2 wbuf: 1.7.3 transitivePeerDependencies: - supports-color @@ -12057,7 +12127,7 @@ packages: resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} dependencies: inherits: 2.0.4 - readable-stream: 3.6.1 + readable-stream: 3.6.2 dev: false /stream-shift/1.0.1: @@ -12222,13 +12292,13 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /style-loader/3.3.1_webpack@5.75.0: + /style-loader/3.3.1_webpack@5.76.0: resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.75.0 + webpack: 5.76.0 /styled-components/5.3.8_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-6jQrlvaJQ16uWVVO0rBfApaTPItkqaG32l3746enNZzpMDxMvzmHzj8rHUg39bvVtom0Y8o8ZzWuchEXKGjVsg==} @@ -12381,8 +12451,8 @@ packages: type-fest: 0.16.0 unique-string: 2.0.0 - /terser-webpack-plugin/5.3.6_webpack@5.75.0: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin/5.3.7_webpack@5.76.0: + resolution: {integrity: sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -12401,11 +12471,11 @@ packages: jest-worker: 27.5.1 schema-utils: 3.1.1 serialize-javascript: 6.0.1 - terser: 5.16.5 - webpack: 5.75.0 + terser: 5.16.6 + webpack: 5.76.0 - /terser/5.16.5: - resolution: {integrity: sha512-qcwfg4+RZa3YvlFh0qjifnzBHjKGNbtDo9yivMqMFDy9Q6FSaQWSB/j1xKhsoUFJIqDOM3TsN6D5xbrMrFcHbg==} + /terser/5.16.6: + resolution: {integrity: sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -12506,7 +12576,7 @@ packages: /tryer/1.0.1: resolution: {integrity: sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==} - /ts-node/10.9.1_alpjt73dvgv6kni625hu7f2l4m: + /ts-node/10.9.1_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -12525,7 +12595,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 18.14.6 + '@types/node': 18.15.0 acorn: 8.8.2 acorn-walk: 8.2.0 arg: 4.1.3 @@ -12537,8 +12607,8 @@ packages: yn: 3.1.1 dev: false - /tsc-alias/1.8.2: - resolution: {integrity: sha512-ukBkcNekOgwtnSWYLD5QsMX3yQWg7JviAs8zg3qJGgu4LGtY3tsV4G6vnqvOXIDkbC+XL9vbhObWSpRA5/6wbg==} + /tsc-alias/1.8.3: + resolution: {integrity: sha512-/9JARcmXBrEqSuLjdSOqxY7/xI/AnvmBi4CU9/Ba2oX6Oq8vnd0OGSQTk+PIwqWJ5ZxskV0X/x15yzxCNTHU+g==} hasBin: true dependencies: chokidar: 3.5.3 @@ -12790,6 +12860,24 @@ packages: dependencies: minimalistic-assert: 1.0.1 + /webextension-polyfill-ts/0.22.0: + resolution: {integrity: sha512-3P33ClMwZ/qiAT7UH1ROrkRC1KM78umlnPpRhdC/292UyoTTW9NcjJEqDsv83HbibcTB6qCtpVeuB2q2/oniHQ==} + deprecated: This project has moved to @types/webextension-polyfill + dependencies: + webextension-polyfill: 0.7.0 + dev: true + + /webextension-polyfill-ts/0.25.0: + resolution: {integrity: sha512-ikQhwwHYkpBu00pFaUzIKY26I6L87DeRI+Q6jBT1daZUNuu8dSrg5U9l/ZbqdaQ1M/TTSPKeAa3kolP5liuedw==} + deprecated: This project has moved to @types/webextension-polyfill + dependencies: + webextension-polyfill: 0.7.0 + dev: true + + /webextension-polyfill/0.7.0: + resolution: {integrity: sha512-su48BkMLxqzTTvPSE1eWxKToPS2Tv5DLGxKexLEVpwFd6Po6N8hhSLIvG6acPAg7qERoEaDL+Y5HQJeJeml5Aw==} + dev: true + /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: false @@ -12817,7 +12905,7 @@ packages: - utf-8-validate dev: true - /webpack-dev-middleware/5.3.3_webpack@5.75.0: + /webpack-dev-middleware/5.3.3_webpack@5.76.0: resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -12828,9 +12916,9 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.76.0 - /webpack-dev-server/4.11.1_webpack@5.75.0: + /webpack-dev-server/4.11.1_webpack@5.76.0: resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -12868,8 +12956,8 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0 - webpack-dev-middleware: 5.3.3_webpack@5.75.0 + webpack: 5.76.0 + webpack-dev-middleware: 5.3.3_webpack@5.76.0 ws: 8.12.1 transitivePeerDependencies: - bufferutil @@ -12877,14 +12965,14 @@ packages: - supports-color - utf-8-validate - /webpack-manifest-plugin/4.1.1_webpack@5.75.0: + /webpack-manifest-plugin/4.1.1_webpack@5.76.0: resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} engines: {node: '>=12.22.0'} peerDependencies: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.76.0 webpack-sources: 2.3.1 /webpack-sources/1.4.3: @@ -12904,7 +12992,7 @@ packages: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - /webpack-subresource-integrity/5.2.0-rc.1_webpack@5.75.0: + /webpack-subresource-integrity/5.2.0-rc.1_webpack@5.76.0: resolution: {integrity: sha512-SyjlQ3VZVwpNeVPIMpYf9Qt6oTnq9G3lCcr5YNwjW9TfUoip70MlB9ZDNhJPhkHvfvajMDQwZFfDVVL1QVwnLQ==} engines: {node: '>= 12'} peerDependencies: @@ -12914,11 +13002,11 @@ packages: html-webpack-plugin: optional: true dependencies: - webpack: 5.75.0 + webpack: 5.76.0 dev: true - /webpack/5.75.0: - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack/5.76.0: + resolution: {integrity: sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -12948,7 +13036,7 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + terser-webpack-plugin: 5.3.7_webpack@5.76.0 watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -13043,7 +13131,7 @@ packages: engines: {node: '>= 6.4.0'} dependencies: logform: 2.5.1 - readable-stream: 3.6.1 + readable-stream: 3.6.2 triple-beam: 1.3.0 dev: true @@ -13056,7 +13144,7 @@ packages: is-stream: 2.0.1 logform: 2.5.1 one-time: 1.0.0 - readable-stream: 3.6.1 + readable-stream: 3.6.2 safe-stable-stringify: 2.4.2 stack-trace: 0.0.10 triple-beam: 1.3.0 @@ -13191,7 +13279,7 @@ packages: /workbox-sw/6.5.4: resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} - /workbox-webpack-plugin/6.5.4_webpack@5.75.0: + /workbox-webpack-plugin/6.5.4_webpack@5.76.0: resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -13200,7 +13288,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.75.0 + webpack: 5.76.0 webpack-sources: 1.4.3 workbox-build: 6.5.4 transitivePeerDependencies: diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 2ef5ff3..c36eaf6 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -27,7 +27,6 @@ import { OnClose, reducer, StateContext, - StepID, } from "./components" import { Router } from "./pages" @@ -121,8 +120,6 @@ const AppContainerRender: ForwardRefRenderFunction< return } - await kycDao.kycDao.registerOrLogin() - if (kycDao.redirectEvent) { dispatch({ type: DataActionTypes.termsAcceptedChange, @@ -160,6 +157,7 @@ const AppContainerRender: ForwardRefRenderFunction< } } } else { + await kycDao.kycDao.registerOrLogin() const { subscribed } = kycDao.kycDao if (subscribed) { @@ -177,13 +175,7 @@ const AppContainerRender: ForwardRefRenderFunction< }) } } catch (error) { - errorHandler( - "fatal", - error, - dispatch, - StepID.loading, - messageTargetOrigin - ) + errorHandler("fatal", error, dispatch, messageTargetOrigin) } dispatch({ type: DataActionTypes.StartFlow }) @@ -207,13 +199,7 @@ const AppContainerRender: ForwardRefRenderFunction< } }) .catch((error) => { - errorHandler( - "fatal", - error, - dispatch, - StepID.loading, - messageTargetOrigin - ) + errorHandler("fatal", error, dispatch, messageTargetOrigin) }) }, [config, onReady, messageTargetOrigin]) diff --git a/src/components/modal/genericErrorModal.tsx b/src/components/modal/genericErrorModal.tsx index 08bef9f..f4c1653 100644 --- a/src/components/modal/genericErrorModal.tsx +++ b/src/components/modal/genericErrorModal.tsx @@ -12,10 +12,12 @@ import { export const GenericErrorModal = () => { const { - data: { errorModalHeader, errorModalBody }, + data: { error }, dispatch, } = useContext(StateContext) + const { body, header } = error || { body: undefined, header: undefined } + const onClose = useCallback(() => { dispatch({ type: DataActionTypes.setModal, payload: null }) }, [dispatch]) @@ -29,7 +31,7 @@ export const GenericErrorModal = () => { className="material-icons"> error -

{errorModalHeader}

+

{header}

close @@ -37,7 +39,7 @@ export const GenericErrorModal = () => { - {errorModalBody} + {body} ) diff --git a/src/components/modal/mintingFailed.tsx b/src/components/modal/mintingFailed.tsx index b65e7bc..21a9520 100644 --- a/src/components/modal/mintingFailed.tsx +++ b/src/components/modal/mintingFailed.tsx @@ -16,10 +16,12 @@ import { CloseButton } from ".." export const MintingFailedModal = () => { const minting = useMinting() const { - data: { subscriptionYears, imageId, errorModalBody }, + data: { subscriptionYears, imageId, error }, dispatch, } = useContext(StateContext) + const { body } = error || { body: undefined } + const onRetry = useCallback(() => { if (imageId) { minting(imageId, subscriptionYears) @@ -50,7 +52,7 @@ export const MintingFailedModal = () => { Minting failed because of an error. Please try mint kycNFT again. - {errorModalBody && {errorModalBody}} + {body && {body}} diff --git a/src/components/stateContext/getNextStep.ts b/src/components/stateContext/getNextStep.ts index e99f484..ad00042 100644 --- a/src/components/stateContext/getNextStep.ts +++ b/src/components/stateContext/getNextStep.ts @@ -105,7 +105,19 @@ function last(this: Array) { * @returns The new state, with the next step */ export function CalculateStep(data: Data, direction: boolean): Data { - const { flowStack, stepIndices, currentPage: prevPage } = data + const { flowStack, stepIndices, currentPage: prevPage, error } = data + + /** + * Check for fatal error, it is allways a priority + */ + if (error && error.type === "fatal") { + return { + ...data, + prevPage, + currentPage: StepID.fatalError, + } + } + const offset = direction ? 1 : -1 if (flowStack.length === 0) { diff --git a/src/components/stateContext/stateContext.ts b/src/components/stateContext/stateContext.ts index de24851..1b2af56 100644 --- a/src/components/stateContext/stateContext.ts +++ b/src/components/stateContext/stateContext.ts @@ -6,6 +6,7 @@ import { DataActionTypes, DataChangeActions, HeaderButtons, + ModalType, StepID, } from "./stateContextTypes" @@ -28,6 +29,23 @@ export const reducer = ( case DataActionTypes.GoToPrevStep: { return CalculatePrevStep(data) } + case DataActionTypes.ShowError: { + let currentModal: ModalType | null = null + + switch (payload?.type) { + case "minting": + currentModal = "mintingFailed" + break + case "modal": + currentModal = "genericError" + } + + return { + ...data, + currentModal, + error: payload, + } + } case DataActionTypes.StartFlow: { return CalculateNextStep({ ...data, @@ -68,13 +86,6 @@ export const reducer = ( prevPage: payload.prev, currentPage: payload.current, } - case DataActionTypes.SetErrorModalText: { - return { - ...data, - errorModalHeader: payload.header, - errorModalBody: payload.body, - } - } case DataActionTypes.taxResidenceChange: return { ...data, taxResidency: payload } case DataActionTypes.setNftImageUrl: diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index 61e1176..c434d66 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -26,7 +26,6 @@ export enum DataActionTypes { setEmailConfirmed, nftImageChange, subscriptionYearsChange, - SetErrorModalText, setChainExplorerUrl, setMessageTargetOrigin, setModalMode, @@ -40,6 +39,7 @@ export enum DataActionTypes { GoToNextStep, StartFlow, GoToPrevStep, + ShowError, } export enum StepID { @@ -62,6 +62,8 @@ export enum StepID { verifyAccountStep, } +export type ErrorType = "fatal" | "modal" | "minting" + export type Data = { flowStack: Flow[] stepIndices: number[] @@ -85,8 +87,11 @@ export type Data = { translations: { [key: string]: { [key: string]: string } } isEmailConfirmed: boolean subscriptionYears?: number - errorModalHeader?: string - errorModalBody?: string + error?: { + header: string + body: string + type: ErrorType + } chainExplorerUrl?: string isModal: boolean grantFlowEnabled: boolean @@ -168,11 +173,6 @@ export type SetSubscriptionYearsAction = { payload: number } -export type SetErrorModalTextAction = { - type: DataActionTypes.SetErrorModalText - payload: { header: string; body: string } -} - export type SetChainExplorerUrl = { type: DataActionTypes.setChainExplorerUrl payload: string @@ -238,6 +238,15 @@ export type GoToPrevStep = { payload?: never } +export type ShowError = { + type: DataActionTypes.ShowError + payload?: { + header: string + body: string + type: ErrorType + } +} + export type DataChangeActions = | HeaderButtonClickAction | SetHeaderButtonStateAction @@ -251,7 +260,6 @@ export type DataChangeActions = | EmailConfirmedChangeAction | NftImageChangeAction | SetSubscriptionYearsAction - | SetErrorModalTextAction | SetChainExplorerUrl | SetMessageTargetOrigin | SetModalMode @@ -265,6 +273,7 @@ export type DataChangeActions = | GoToNextStep | StartFlow | GoToPrevStep + | ShowError export type ModalType = | "emailVerification" diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index 8bdfd2c..1be1ef5 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -2,7 +2,6 @@ import { DataActionTypes, DataChangeActions, StateContext, - StepID, } from "@Components/stateContext" import { KycDaoClientMessageBody } from "KycDaoClientCommon" import { useContext } from "react" @@ -19,16 +18,16 @@ export function errorHandler( type: "fatal" | "modal" | "minting", error: unknown, dispatch: React.Dispatch, - currentPage: StepID, messageTargetOrigin: string ) { const errorText = getErrorText(error) dispatch({ - type: DataActionTypes.SetErrorModalText, + type: DataActionTypes.ShowError, payload: { header: "An error happened", - body: `${errorText}`, + body: errorText, + type: type, }, }) @@ -44,18 +43,13 @@ export function errorHandler( return } - console.error(errorText) - switch (type) { case "fatal": - dispatch({ - payload: { current: StepID.fatalError, prev: currentPage }, - type: DataActionTypes.changePage, - }) dispatch({ type: DataActionTypes.setModal, payload: null, }) + dispatch({ type: DataActionTypes.GoToNextStep }) break case "minting": { dispatch({ @@ -71,14 +65,16 @@ export function errorHandler( }) } } + + console.error(errorText) } export default function useErrorHandler() { const { dispatch, - data: { currentPage, messageTargetOrigin }, + data: { messageTargetOrigin }, } = useContext(StateContext) return (type: "fatal" | "modal" | "minting", error: unknown) => - errorHandler(type, error, dispatch, currentPage, messageTargetOrigin) + errorHandler(type, error, dispatch, messageTargetOrigin) } diff --git a/src/pages/fatalErrorStep.tsx b/src/pages/fatalErrorStep.tsx index 9e41124..99454a3 100644 --- a/src/pages/fatalErrorStep.tsx +++ b/src/pages/fatalErrorStep.tsx @@ -16,13 +16,18 @@ export const FatalErrorStep: FC = ({ ...rest }) => { const { - data: { errorModalBody, errorModalHeader }, + data: { error }, dispatch, } = useContext(StateContext) const ResetApp = useContext(RestartContext) - const Header = () =>

{errorModalHeader || "Something went wrong!"}

+ const { body, header } = error || { + errorModalHeader: "Something went wrong!", + errorModalBody: "An unknown, fatal error happened!", + } + + const Header = () =>

{header}

const startAgain = useCallback(() => { ResetApp() @@ -43,13 +48,13 @@ export const FatalErrorStep: FC = ({ }) }, [dispatch]) - const body = useCallback( + const modalBody = useCallback( () => (
-

{errorModalBody || "An unknown, fatal error happened!"}

+

{body}

), - [errorModalBody] + [body] ) const footer = useCallback( @@ -68,7 +73,7 @@ export const FatalErrorStep: FC = ({ disabled={disabled} footer={footer} header={Header} - body={body} + body={modalBody} /> ) } diff --git a/src/pages/grantNameAndAddress.tsx b/src/pages/grantNameAndAddress.tsx index f99d28c..ce555fc 100644 --- a/src/pages/grantNameAndAddress.tsx +++ b/src/pages/grantNameAndAddress.tsx @@ -61,12 +61,13 @@ export const GrantNameAndAddress: FC = ({ const [hasInteracted, setHasInteracted] = useState(false) const [hasSigned, setHasSigned] = useState(false) - const sign = useCallback(() => { + const sign = useCallback(async () => { if (isSigning) return isSigning = true - window.ethereum - .request({ + + try { + await window.ethereum.request({ method: "personal_sign", params: [ hexEncodeString( @@ -76,19 +77,13 @@ export const GrantNameAndAddress: FC = ({ kycDao?.kycDao.connectedWallet?.address, ], }) - .then(() => { - setHasSigned(true) - }) - .catch(() => { - redirect( - StepID.taxResidenceStep, - StepID.grantNameAndAddressStep, - "prev" - ) - }) - .finally(() => { - isSigning = false - }) + + setHasSigned(true) + } catch { + redirect(StepID.taxResidenceStep, StepID.grantNameAndAddressStep, "prev") + } finally { + isSigning = false + } }, [kycDao?.kycDao.connectedWallet?.address, redirect]) useEffect(() => { diff --git a/src/pages/nftArtSelection.tsx b/src/pages/nftArtSelection.tsx index 6d183b7..31f65e2 100644 --- a/src/pages/nftArtSelection.tsx +++ b/src/pages/nftArtSelection.tsx @@ -177,22 +177,28 @@ export const NftSelection: FC = ({ } }, [disabled, inactive, dispatch, currentArt]) - const onRegenerate = useCallback(() => { - kycDao?.kycDao.regenerateNftImageOptions().then((options) => { - const images = [] as Nft[] - setCurrentArt(undefined) + const onRegenerate = useCallback(async () => { + try { + const options = await kycDao?.kycDao.regenerateNftImageOptions() - dispatch({ - payload: { button: HeaderButtons.next, state: "hidden" }, - type: DataActionTypes.SetHeaderButtonState, - }) + if (options) { + const images = [] as Nft[] + setCurrentArt(undefined) - Object.entries(options).forEach(([id, url]) => { - images.push({ url: url + "?timestamp=" + Date.now().toString(), id }) - }) - setNftImages(images.slice(0, 4)) - }) - }, [kycDao?.kycDao, dispatch]) + dispatch({ + payload: { button: HeaderButtons.next, state: "hidden" }, + type: DataActionTypes.SetHeaderButtonState, + }) + + Object.entries(options).forEach(([id, url]) => { + images.push({ url: url + "?timestamp=" + Date.now().toString(), id }) + }) + setNftImages(images.slice(0, 4)) + } + } catch (error) { + errorHandler("fatal", error) + } + }, [kycDao?.kycDao, dispatch, errorHandler]) const body = useCallback( () => ( diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts index 48e008e..97db9ed 100644 --- a/src/react-app-env.d.ts +++ b/src/react-app-env.d.ts @@ -1,7 +1,7 @@ /// -import { MetaMaskInpageProvider } from "@metamask/providers" -import { KycDaoWidgetConfig } from "./widget" -import { +import type { MetaMaskInpageProvider } from "@metamask/providers" +import type { KycDaoWidgetConfig } from "./widget" +import type { KycDaoClientOptions, KycDaoClientInterface, } from "./KycDaoClientCommon" From 50710ff8a98169e9fa17bff0f704fead92f07d7f Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Mon, 6 Mar 2023 13:39:54 +0100 Subject: [PATCH 05/52] Font refactor --- src/components/appStyleContainer/index.ts | 4 +- src/components/button/button.tsx | 5 +-- src/components/input/input.tsx | 25 ++---------- src/components/modal/common.ts | 7 +--- src/components/typography/index.ts | 49 +++++++++++++---------- src/pages/finalStep.tsx | 3 +- src/pages/membershipCard.tsx | 13 +++--- src/pages/mintMembershipCard.tsx | 27 +++++-------- 8 files changed, 55 insertions(+), 78 deletions(-) diff --git a/src/components/appStyleContainer/index.ts b/src/components/appStyleContainer/index.ts index 5441ff0..d292873 100644 --- a/src/components/appStyleContainer/index.ts +++ b/src/components/appStyleContainer/index.ts @@ -49,8 +49,8 @@ export const AppStyleContainer = styled.div` --kyc-sdk-red-35: rgba(255, 70, 70, 0.35); - --light-font: gilroyLight; - --display-font: gilroyBold; + --light-font: gilroy-light; + --display-font: gilroy-bold; @font-face { font-family: gilroy-bold; diff --git a/src/components/button/button.tsx b/src/components/button/button.tsx index 088c046..b9929b9 100644 --- a/src/components/button/button.tsx +++ b/src/components/button/button.tsx @@ -174,14 +174,11 @@ export const Button = styled(unstyledButton)` align-items: center; } + i:disabled, span:disabled { color: grey; } - i:disabled { - color: grey; - } - &:hover { :after { height: 8px; diff --git a/src/components/input/input.tsx b/src/components/input/input.tsx index 299071c..88b8e96 100644 --- a/src/components/input/input.tsx +++ b/src/components/input/input.tsx @@ -1,4 +1,4 @@ -import { tr2 } from "@Components/typography" +import { bold, tr2 } from "@Components/typography" import { ChangeEventHandler, createRef, @@ -253,25 +253,7 @@ const StyledInput = styled.input<{ background: var(--kyc-sdk-cybergreen-35); } - &:focus { - border: 2px solid var(--kyc-sdk-cybergreen); - box-shadow: 0 0 0 5px var(--kyc-sdk-cybergreen-50); - ${({ showAutoComplete }) => - showAutoComplete && - css` - border-radius: 0 0 var(--kyc-sdk-border-radius-light) - var(--kyc-sdk-border-radius-light); - `} - color: white; - background: black; - - ::placeholder { - color: white; - font-family: var(--kyc-sdk-primary-font); - } - } - - &:active { + &:focus &:active { border: 2px solid var(--kyc-sdk-cybergreen); box-shadow: 0 0 0 5px var(--kyc-sdk-cybergreen-50); ${({ showAutoComplete }) => @@ -335,8 +317,7 @@ const Option = styled.div` width: 100%; strong { - font-family: var(--kyc-sdk-primary-font); - font-weight: 800; + ${bold} justify-content: center; } diff --git a/src/components/modal/common.ts b/src/components/modal/common.ts index 0b145f9..209d31d 100644 --- a/src/components/modal/common.ts +++ b/src/components/modal/common.ts @@ -1,3 +1,4 @@ +import { bold } from "@Components/typography" import styled from "styled-components/macro" export const ModalBackdrop = styled.div` @@ -40,12 +41,8 @@ export const ModalBody = styled.div` box-sizing: border-box; p { - color: black; - font-family: var(--kyc-sdk-primary-font); - b { - font-weight: 800; - color: black; + ${bold} } } ` diff --git a/src/components/typography/index.ts b/src/components/typography/index.ts index ccf70f0..0e89070 100644 --- a/src/components/typography/index.ts +++ b/src/components/typography/index.ts @@ -24,35 +24,44 @@ export const materialIcon = css` -webkit-font-smoothing: antialiased; ` -export const typoBase = css` +export const text = css` color: black; + font-weight: 400; + font-size: 12pt; line-height: 100%; + font-family: var(--kyc-sdk-primary-font); -webkit-font-smoothing: antialiased; - font-family: neue-machina; +` + +export const smallText = css` + ${text}; + font-size: 12px; +` + +export const bold = css` + ${text}; + font-weight: 800; ` export const H1 = styled.h1<{ marginBottom?: string }>` - ${typoBase}; + ${text}; margin-bottom: ${({ marginBottom }) => (marginBottom ? marginBottom : "1em")}; font-size: 1.6rem; margin-top: 0; ` export const H2 = styled.h2` - ${typoBase}; + ${text}; margin-bottom: 1em; ` export const H3 = styled.h3` - ${typoBase}; - color: black; - font-size: 12pt; + ${text}; margin-bottom: 1em; ` export const P = styled.p` - font-size: 12pt; - ${typoBase}; + ${text}; color: black; margin-bottom: 1em; margin-top: 0; @@ -60,32 +69,27 @@ export const P = styled.p` ` export const Policy = styled(P)` - font-family: var(--kyc-sdk-primary-font); + ${smallText} margin-bottom: 1em; - font-size: 12px; - - -webkit-font-smoothing: antialiased; ` export const Li = styled.li` - ${typoBase}; + ${text}; margin-left: 2em; - font-size: 12pt; ${P} { margin-bottom: 1em; - ${typoBase} } ` export const B = styled.b` - font-size: 12pt; - ${typoBase}; + ${text}; margin-bottom: 1em; margin-top: 0; ` export const Ul = styled.ul` + ${text}; padding: 1rem 0; width: fit-content; list-style: disc; @@ -95,14 +99,17 @@ export const translateX = (x: number | string) => css` transform: translateX(${x}); ` -export const CenteredH1 = styled(H1)` +export const Centered = css` text-align: center; ` +export const CenteredH1 = styled(H1)` + ${Centered} +` + export const Link = styled.a` - ${typoBase}; + ${smallText} font-family: var(--light-font); - font-size: 12px; text-decoration: underline; color: var(--kyc-sdk-dark-blue); :visited { diff --git a/src/pages/finalStep.tsx b/src/pages/finalStep.tsx index ef5cef5..7af8d93 100644 --- a/src/pages/finalStep.tsx +++ b/src/pages/finalStep.tsx @@ -5,6 +5,7 @@ import { useKycDao } from "@Hooks/useKycDao" import styled from "styled-components/macro" import { Button, + Centered, CenteredH1, DataActionTypes, H1, @@ -26,7 +27,7 @@ export const NftButtonWrapper = styled.div` ` const NftImageContainer = styled.div` - text-align: center; + ${Centered} ` const TwitterButtonContainer = styled.div` diff --git a/src/pages/membershipCard.tsx b/src/pages/membershipCard.tsx index 522f659..b81a2a0 100644 --- a/src/pages/membershipCard.tsx +++ b/src/pages/membershipCard.tsx @@ -23,6 +23,9 @@ import { StepPart, SubmitButton, Ul, + bold, + smallText, + text, } from "@Components/index" import useErrorHandler from "@Hooks/errorHandler" @@ -92,20 +95,18 @@ const Li = styled.li` ${P}, b { - font-family: var(--kyc-sdk-primary-font); - font-weight: 400; - color: black; + ${text} margin-bottom: 0; } b { - font-size: 12px; - color: black; + ${smallText} } } ` const Span = styled.span` + ${bold} display: flex; justify-content: center; align-items: center; @@ -114,8 +115,6 @@ const Span = styled.span` outline: 0.5rem solid var(--kyc-sdk-cybergreen-35); border-radius: 999rem; background: var(--kyc-sdk-cybergreen); - color: black; - font-weight: 800; ` const ProcessContainer = styled.div` diff --git a/src/pages/mintMembershipCard.tsx b/src/pages/mintMembershipCard.tsx index 7465deb..ef4242b 100644 --- a/src/pages/mintMembershipCard.tsx +++ b/src/pages/mintMembershipCard.tsx @@ -7,6 +7,7 @@ import { useMinting } from "@Hooks/useMinting" import styled from "styled-components/macro" import { Button, + Centered, DataActionTypes, H1, HeaderButtons, @@ -18,6 +19,9 @@ import { Step, StepPart, SubmitButton, + bold, + smallText, + text, } from "@Components/index" import useErrorHandler from "@Hooks/errorHandler" @@ -143,11 +147,8 @@ const Sum = styled.div` ` const Price = styled.span` - color: black; - font-size: 12pt; - font-weight: 800; - font-family: var(--kyc-sdk-primary-font); - -webkit-font-smoothing: antialiased; + ${text} + ${bold} ` const PriceWithStrikethrough = styled(Price)` @@ -157,11 +158,9 @@ const PriceWithStrikethrough = styled(Price)` ` const Value = styled.div` - color: black; - font-size: 12px; + ${smallText} display: flex; margin-bottom: 1em; - font-family: var(--kyc-sdk-primary-font); padding: 0.5rem; background: var(--kyc-sdk-cybergreen-35); @@ -174,26 +173,22 @@ const Value = styled.div` } p { + ${smallText} display: flex; - font-size: 12px; padding-right: 3px; > strong { + ${bold} padding-right: 3px; - color: black; - font-weight: 800; } } ` const YearCount = styled.div` + ${Centered} + ${text} padding: 1rem; - font-size: 12pt; width: 10rem; - text-align: center; - font-family: var(--kyc-sdk-primary-font); - -webkit-font-smoothing: antialiased; - color: black; display: flex; align-items: center; margin-block: auto; From c4f0716c5c9e174e2652a700334bcf918a83c625 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Mon, 6 Mar 2023 17:27:40 +0100 Subject: [PATCH 06/52] Add connect modal --- src/AppContainer.tsx | 32 ++++++++++- .../modal/emailVerificationModal.tsx | 2 +- src/components/modal/genericErrorModal.tsx | 43 +++++++++++++-- src/components/modal/mintingFailed.tsx | 7 +-- src/components/modal/modalRouter.tsx | 36 ++++++++++--- src/components/stateContext/getNextStep.ts | 2 +- src/components/stateContext/stateContext.ts | 24 ++++----- .../stateContext/stateContextTypes.ts | 53 +++++++++++-------- src/hooks/errorHandler.ts | 36 ++++++++----- src/hooks/useMinting.ts | 6 +-- src/pages/emailDiscordVerificationStep.tsx | 7 +-- src/pages/fatalErrorStep.tsx | 4 +- 12 files changed, 176 insertions(+), 76 deletions(-) diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index c36eaf6..2bb9bbb 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -5,7 +5,6 @@ import { KycDaoInitializationResult, SdkConfiguration, } from "@kycdao/kycdao-sdk" -import { getNetworkType } from "@Utils/getNetworkType" import { KycDaoClientMessageBody } from "KycDaoClientCommon" import { useMemo, @@ -29,6 +28,7 @@ import { StateContext, } from "./components" import { Router } from "./pages" +import { getNetworkType } from "@Utils/getNetworkType" export type AppContainerProps = { config: SdkConfiguration @@ -79,10 +79,40 @@ const AppContainerRender: ForwardRefRenderFunction< if (kycDao) { ;(async () => { try { + dispatch({ + type: DataActionTypes.SetLoadingMessage, + payload: + "Trying to connet your wallet. If it does not succeed please ask for help on our Discord.", + }) + + const modalTimeout = setTimeout(() => { + dispatch({ + type: DataActionTypes.ShowModal, + payload: { + body: "If it seems stuck, please click to retry.", + header: "Trying to connect your wallet", + type: "genericInfo", + showRetry: true, + }, + }) + }, 5000) + await kycDao.kycDao.connectWallet( getNetworkType(config.enabledBlockchainNetworks[0]) ) + dispatch({ + type: DataActionTypes.ShowModal, + payload: undefined, + }) + + clearTimeout(modalTimeout) + + await dispatch({ + type: DataActionTypes.SetLoadingMessage, + payload: "", + }) + dispatch({ type: DataActionTypes.setModalMode, payload: isModal, diff --git a/src/components/modal/emailVerificationModal.tsx b/src/components/modal/emailVerificationModal.tsx index bae35fe..30b11cb 100644 --- a/src/components/modal/emailVerificationModal.tsx +++ b/src/components/modal/emailVerificationModal.tsx @@ -30,7 +30,7 @@ export const EmailVerificationModal = () => { }, [kycDao, errorHandler]) const onChangeEmail = useCallback(() => { - dispatch({ type: DataActionTypes.setModal, payload: null }) + dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) }, [dispatch]) return ( diff --git a/src/components/modal/genericErrorModal.tsx b/src/components/modal/genericErrorModal.tsx index f4c1653..92d31b3 100644 --- a/src/components/modal/genericErrorModal.tsx +++ b/src/components/modal/genericErrorModal.tsx @@ -6,28 +6,52 @@ import { HeaderIcon, HeadlineWrapper, ModalBody, + ModalButtonWrapper, ModalContainer, ModalHeader, } from "./common" +import { Button } from "@Components/button/button" +import { RestartContext } from "@Components/restartContext" -export const GenericErrorModal = () => { +export type GenericModalProps = { + mode: "error" | "info" +} + +export const GenericModal = ({ mode }: GenericModalProps) => { const { - data: { error }, + data: { modal, currentModal }, dispatch, } = useContext(StateContext) - const { body, header } = error || { body: undefined, header: undefined } + const { body, header, showRetry } = + !modal || typeof modal === "string" + ? { + body: undefined, + header: undefined, + showRetry: false, + } + : modal + + const ResetApp = useContext(RestartContext) const onClose = useCallback(() => { - dispatch({ type: DataActionTypes.setModal, payload: null }) + dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) }, [dispatch]) + const startAgain = useCallback(() => { + ResetApp() + }, [ResetApp]) + return ( error @@ -41,6 +65,15 @@ export const GenericErrorModal = () => { {body} + + {showRetry && ( + + + + )} ) } diff --git a/src/components/modal/mintingFailed.tsx b/src/components/modal/mintingFailed.tsx index 21a9520..2d56c76 100644 --- a/src/components/modal/mintingFailed.tsx +++ b/src/components/modal/mintingFailed.tsx @@ -16,11 +16,12 @@ import { CloseButton } from ".." export const MintingFailedModal = () => { const minting = useMinting() const { - data: { subscriptionYears, imageId, error }, + data: { subscriptionYears, imageId, modal }, dispatch, } = useContext(StateContext) - const { body } = error || { body: undefined } + const { body } = + typeof modal === "string" || !modal ? { body: undefined } : modal const onRetry = useCallback(() => { if (imageId) { @@ -29,7 +30,7 @@ export const MintingFailedModal = () => { }, [minting, subscriptionYears, imageId]) const onClose = useCallback(() => { - dispatch({ type: DataActionTypes.setModal, payload: null }) + dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) }, [dispatch]) return ( diff --git a/src/components/modal/modalRouter.tsx b/src/components/modal/modalRouter.tsx index c0a9b70..b2242ab 100644 --- a/src/components/modal/modalRouter.tsx +++ b/src/components/modal/modalRouter.tsx @@ -1,17 +1,17 @@ -import { StateContext } from "@Components/stateContext" +import { ModalData, StateContext } from "@Components/stateContext" import { FC, useContext } from "react" import { ModalBackdrop } from "./common" import { EmailVerificationModal } from "./emailVerificationModal" -import { GenericErrorModal } from "./genericErrorModal" +import { GenericModal } from "./genericErrorModal" import { MintingFailedModal } from "./mintingFailed" import { MintingModal } from "./mintingModal" -export const ModalRouter: FC = () => { - const { - data: { currentModal }, - } = useContext(StateContext) +function RenderModal(type?: ModalData["type"]) { + if (!type) { + return + } - switch (currentModal) { + switch (type) { case "emailVerification": { return ( @@ -39,7 +39,15 @@ export const ModalRouter: FC = () => { case "genericError": { return ( - + + + ) + } + + case "genericInfo": { + return ( + + ) } @@ -48,3 +56,15 @@ export const ModalRouter: FC = () => { return null } } + +export const ModalRouter: FC = () => { + const { + data: { modal }, + } = useContext(StateContext) + + return modal ? ( + + {RenderModal(typeof modal === "string" ? modal : modal?.type)} + + ) : null +} diff --git a/src/components/stateContext/getNextStep.ts b/src/components/stateContext/getNextStep.ts index ad00042..480d319 100644 --- a/src/components/stateContext/getNextStep.ts +++ b/src/components/stateContext/getNextStep.ts @@ -110,7 +110,7 @@ export function CalculateStep(data: Data, direction: boolean): Data { /** * Check for fatal error, it is allways a priority */ - if (error && error.type === "fatal") { + if (error?.type === "fatal") { return { ...data, prevPage, diff --git a/src/components/stateContext/stateContext.ts b/src/components/stateContext/stateContext.ts index 1b2af56..792a978 100644 --- a/src/components/stateContext/stateContext.ts +++ b/src/components/stateContext/stateContext.ts @@ -6,7 +6,6 @@ import { DataActionTypes, DataChangeActions, HeaderButtons, - ModalType, StepID, } from "./stateContextTypes" @@ -29,20 +28,15 @@ export const reducer = ( case DataActionTypes.GoToPrevStep: { return CalculatePrevStep(data) } - case DataActionTypes.ShowError: { - let currentModal: ModalType | null = null - - switch (payload?.type) { - case "minting": - currentModal = "mintingFailed" - break - case "modal": - currentModal = "genericError" + case DataActionTypes.ShowModal: { + return { + ...data, + modal: payload, } - + } + case DataActionTypes.SetError: { return { ...data, - currentModal, error: payload, } } @@ -53,6 +47,9 @@ export const reducer = ( stepIndices: [0], }) } + case DataActionTypes.SetLoadingMessage: { + return { ...data, loadingMessage: payload } + } case DataActionTypes.SetNearMinted: { return { ...data, nearMinted: payload } } @@ -75,8 +72,6 @@ export const reducer = ( return { ...data, chain: payload } case DataActionTypes.emailChange: return { ...data, email: payload } - case DataActionTypes.setModal: - return { ...data, currentModal: payload } case DataActionTypes.subscriptionYearsChange: return { ...data, subscriptionYears: payload } case DataActionTypes.changePage: @@ -134,6 +129,7 @@ export const reducer = ( } export const DefaultData = { + loadingMessage: "", flowStack: [MainFlow], stepIndices: [0], returningUserFlow: false, diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index c434d66..c3907eb 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -13,6 +13,7 @@ export enum HeaderButtons { } export enum DataActionTypes { + SetError, chainChange, changePage, prevPage, @@ -22,7 +23,6 @@ export enum DataActionTypes { SetHeaderButtonState, setVerifyingModalOpen, OnClickHeaderButton, - setModal, setEmailConfirmed, nftImageChange, subscriptionYearsChange, @@ -39,7 +39,8 @@ export enum DataActionTypes { GoToNextStep, StartFlow, GoToPrevStep, - ShowError, + SetLoadingMessage, + ShowModal, } export enum StepID { @@ -64,7 +65,16 @@ export enum StepID { export type ErrorType = "fatal" | "modal" | "minting" +export type ModalData = { + header: string + body: string + type: ModalType + showRetry: boolean +} + export type Data = { + error?: ErrorData + loadingMessage: string flowStack: Flow[] stepIndices: number[] nftImageUrl?: string @@ -87,11 +97,7 @@ export type Data = { translations: { [key: string]: { [key: string]: string } } isEmailConfirmed: boolean subscriptionYears?: number - error?: { - header: string - body: string - type: ErrorType - } + modal?: ModalData | ModalType chainExplorerUrl?: string isModal: boolean grantFlowEnabled: boolean @@ -153,11 +159,6 @@ export type HeaderButtonClickAction = { payload: { button: HeaderButtons } } -export type SetModalAction = { - type: DataActionTypes.setModal - payload: ModalType | null -} - export type EmailConfirmedChangeAction = { type: DataActionTypes.setEmailConfirmed payload: boolean @@ -238,13 +239,21 @@ export type GoToPrevStep = { payload?: never } -export type ShowError = { - type: DataActionTypes.ShowError - payload?: { - header: string - body: string - type: ErrorType - } +export type ShowModal = { + type: DataActionTypes.ShowModal + payload?: ModalData | ModalType +} + +export type SetLoadingMessage = { + type: DataActionTypes.SetLoadingMessage + payload: string +} + +export type ErrorData = { type: ErrorType; header?: string; body?: string } + +export type SetError = { + type: DataActionTypes.SetError + payload: ErrorData } export type DataChangeActions = @@ -256,7 +265,6 @@ export type DataChangeActions = | EmailChangeAction | ChangePageAction | TaxResidentChangeAction - | SetModalAction | EmailConfirmedChangeAction | NftImageChangeAction | SetSubscriptionYearsAction @@ -273,10 +281,13 @@ export type DataChangeActions = | GoToNextStep | StartFlow | GoToPrevStep - | ShowError + | ShowModal + | SetLoadingMessage + | SetError export type ModalType = | "emailVerification" | "minting" | "mintingFailed" | "genericError" + | "genericInfo" diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index 1be1ef5..1009a06 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -22,15 +22,6 @@ export function errorHandler( ) { const errorText = getErrorText(error) - dispatch({ - type: DataActionTypes.ShowError, - payload: { - header: "An error happened", - body: errorText, - type: type, - }, - }) - if (/\[RejectedByUser\]/g.test(errorText)) { window.parent.postMessage( { @@ -46,22 +37,39 @@ export function errorHandler( switch (type) { case "fatal": dispatch({ - type: DataActionTypes.setModal, - payload: null, + type: DataActionTypes.ShowModal, + payload: undefined, }) + dispatch({ type: DataActionTypes.SetError, payload: { type: "fatal" } }) dispatch({ type: DataActionTypes.GoToNextStep }) break case "minting": { dispatch({ - type: DataActionTypes.setModal, + type: DataActionTypes.ShowModal, payload: "mintingFailed", }) + + dispatch({ + type: DataActionTypes.ShowModal, + payload: { + header: "An error happened", + body: errorText, + type: "mintingFailed", + showRetry: false, + }, + }) + break } case "modal": { dispatch({ - type: DataActionTypes.setModal, - payload: "genericError", + type: DataActionTypes.ShowModal, + payload: { + type: "genericError", + showRetry: false, + body: errorText, + header: "An error happened", + }, }) } } diff --git a/src/hooks/useMinting.ts b/src/hooks/useMinting.ts index 9ea1109..b9864dc 100644 --- a/src/hooks/useMinting.ts +++ b/src/hooks/useMinting.ts @@ -21,7 +21,7 @@ export const useMinting = () => { } = state dispatch({ - type: DataActionTypes.setModal, + type: DataActionTypes.ShowModal, payload: "minting", }) @@ -47,8 +47,8 @@ export const useMinting = () => { throw Error("Something went wrong") } dispatch({ - type: DataActionTypes.setModal, - payload: null, + type: DataActionTypes.ShowModal, + payload: undefined, }) dispatch({ type: DataActionTypes.changePage, diff --git a/src/pages/emailDiscordVerificationStep.tsx b/src/pages/emailDiscordVerificationStep.tsx index b4d1b49..7c0d550 100644 --- a/src/pages/emailDiscordVerificationStep.tsx +++ b/src/pages/emailDiscordVerificationStep.tsx @@ -148,9 +148,10 @@ export const EmailDiscordVerificationStep: FC = ({ if (!disableSubmit && kycDao) { if (!isEmailConfirmed) { dispatch({ - type: DataActionTypes.setModal, + type: DataActionTypes.ShowModal, payload: "emailVerification", }) + dispatch({ type: DataActionTypes.emailChange, payload: emailValue }) try { @@ -172,8 +173,8 @@ export const EmailDiscordVerificationStep: FC = ({ ) dispatch({ - type: DataActionTypes.setModal, - payload: null, + type: DataActionTypes.ShowModal, + payload: undefined, }) clearInterval(confirmationInterval.current) diff --git a/src/pages/fatalErrorStep.tsx b/src/pages/fatalErrorStep.tsx index 99454a3..a33c70e 100644 --- a/src/pages/fatalErrorStep.tsx +++ b/src/pages/fatalErrorStep.tsx @@ -23,8 +23,8 @@ export const FatalErrorStep: FC = ({ const ResetApp = useContext(RestartContext) const { body, header } = error || { - errorModalHeader: "Something went wrong!", - errorModalBody: "An unknown, fatal error happened!", + header: "Something went wrong!", + body: "An unknown, fatal error happened!", } const Header = () =>

{header}

From 4c4666d89bd698e9c6179caca89dcd75383cae30 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Wed, 8 Mar 2023 02:07:56 +0100 Subject: [PATCH 07/52] Update deps Update iframe Improve modals --- public/iframe.html | 13 + public/index.html | 176 ++++++++++- src/AppContainer.tsx | 17 +- src/BootstrapKycDaoModal.tsx | 5 - src/KycDaoClient.ts | 106 +------ src/KycDaoClientCommon.ts | 93 +++++- src/KycDaoIframeClient.ts | 280 +++++++++--------- .../modal/emailVerificationModal.tsx | 2 +- src/components/modal/genericErrorModal.tsx | 2 +- src/components/modal/mintingFailed.tsx | 2 +- src/components/stateContext/stateContext.ts | 3 + .../stateContext/stateContextTypes.ts | 7 + src/hooks/errorHandler.ts | 3 +- src/hooks/useMinting.ts | 3 +- src/pages/emailDiscordVerificationStep.tsx | 3 +- src/pages/fatalErrorStep.tsx | 10 +- src/pages/loading.tsx | 25 +- src/react-app-env.d.ts | 13 +- 18 files changed, 475 insertions(+), 288 deletions(-) diff --git a/public/iframe.html b/public/iframe.html index d21abb0..cdaf90d 100644 --- a/public/iframe.html +++ b/public/iframe.html @@ -10,6 +10,19 @@ const client = new KycDaoClient({ parent: "#modalRoot", configFromUrl: true, + config: { + demoMode: true, + enabledBlockchainNetworks: [ + "PolygonMumbai", + "CeloAlfajores", + "SolanaDevnet", + "NearTestnet", + "EthereumGoerli", + ], + enabledVerificationTypes: ["KYC"], + evmProvider: false ? walletConnectEvmProvider : window.ethereum, + baseUrl: "https://staging.kycdao.xyz", + }, }) client.open() diff --git a/public/index.html b/public/index.html index 179576f..63d4bf9 100644 --- a/public/index.html +++ b/public/index.html @@ -31,11 +31,52 @@ font-family: gilroy-light; } + .buttonHeaderButton-selected { + background: white !important; + border: solid; + box-sizing: border-box; + border-color: black white black black; + border-bottom: white !important; + color: black !important; + } + + .buttonHeaderButton { + cursor: pointer; + + background: black; + color: white; + + border-radius: 5px; + border-left-width: 1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + border: solid black; + padding: 0.75em; + border-width: 2px 1px 2px 1px; + margin: 0; + } + + .buttonHeaderButton:hover { + background: #00ffb3; + color: black; + z-index: 0; + } + a:visited { color: #181f60; font-family: gilroy-light; } + .buttonHeaderButton:first-child { + border-left-width: 2px; + border-top-right-radius: 0 !important; + } + + .buttonHeaderButton:last-child { + border-right-width: 2px; + border-top-left-radius: 0 !important; + } + .chainSelectorButton { cursor: pointer; padding: 1em; @@ -68,13 +109,13 @@ box-sizing: content-box; } - .dualButton > .chainSelectorButton:nth-child(1) { + .dualButton > .chainSelectorButton:first-child { border-end-end-radius: 0; border-start-end-radius: 0; border-right-style: solid; } - .dualButton > .chainSelectorButton:nth-child(2) { + .dualButton > .chainSelectorButton:last-child { border-start-start-radius: 0; border-end-start-radius: 0; border-left-style: none; @@ -83,7 +124,7 @@ #faucetContainer { margin-bottom: 2em; display: flex; - flex-direction: col; + flex-direction: column; flex: 1; } @@ -102,7 +143,13 @@ justify-content: space-around; flex-wrap: wrap; gap: 1em; - padding-bottom: 1em; + padding: 1em; + margin-bottom: 2em; + border: solid black 2px; + border-radius: 5px; + border-top-right-radius: 0; + border-top-left-radius: 0; + background-color: white; } .flexRow { @@ -112,12 +159,18 @@ .flexCol { display: flex; - flex-direction: row; + flex-direction: column; + } + + div.typeSelectorContainer { + position: relative; + bottom: -2px; + z-index: 2; } .centered { text-align: center; - margin-bottom: 2em; + margin-bottom: 1em; } .flex-1 { @@ -167,10 +220,41 @@ // ], // } }) - const autostart = false + let mode = localStorage.getItem("mode") || "integrated" + + function handleModeClick(btn) { + const typeSelectorChildren = document.getElementsByClassName( + "typeSelectorContainer" + )[0].children + + for (const item of typeSelectorChildren) { + item.classList.remove("buttonHeaderButton-selected") + } + + if (btn.innerText === "Integrated modal") { + mode = "integrated" + } else if (btn.innerText === "iFrame modal") { + mode = "iframe" + } + + localStorage.setItem("mode", mode) + + btn.classList.add("buttonHeaderButton-selected") + } + onload = () => { + const [integratedBtn, iframeButton] = document.getElementsByClassName( + "typeSelectorContainer" + )[0].children + + if (mode === "integrated") { + integratedBtn.classList.add("buttonHeaderButton-selected") + } else if (mode === "iframe") { + iframeButton.classList.add("buttonHeaderButton-selected") + } + const client = new KycDaoClient({ parent: "#modalRoot", modal: true, @@ -218,12 +302,70 @@ }, }) + const iFrameClient = new KycDaoIframeClient({ + parent: "#modalRoot", + modal: true, + backdrop: true, + iframeOptions: { + url: `${window.location.origin}/iframe.html`, + messageTargetOrigin: window.url, + }, + config: { + demoMode: true, + enabledBlockchainNetworks: [ + "PolygonMumbai", + "CeloAlfajores", + "SolanaDevnet", + "NearTestnet", + "EthereumGoerli", + ], + enabledVerificationTypes: ["KYC"], + // evmProvider: false ? walletConnectEvmProvider : window.ethereum, + baseUrl: "https://staging.kycdao.xyz", + }, + onReady: (sdkInstance) => { + let nftCheckInterval + + function writeNFT() { + if (sdkInstance.kycDao.connectedWallet) { + sdkInstance.kycDao + .hasValidNft("KYC") + .then((value) => { + console.log( + `This wallet ${value ? "has" : "has not"} a valid nft.` + ) + }) + .catch(console.error) + clearInterval(nftCheckInterval) + } + } + + nftCheckInterval = setInterval(writeNFT, 1000) + }, + onSuccess: (data) => { + if (data) { + const i = /Already has an nft on (.*)\./g.exec(data) + + if (i) { + console.log(`Already has an nft on ${i[1]}.`) + } + } + }, + }) + globalThis.selectorHndlr = function (selectedChain, walletConnectOn) { console.log(walletConnectOn) - client.open( - selectedChain, - walletConnectOn ? walletConnectEvmProvider : window.ethereum - ) + if (mode === "integrated") { + client.open( + selectedChain, + walletConnectOn ? walletConnectEvmProvider : window.ethereum + ) + } else if (mode === "iframe") { + iFrameClient.open( + selectedChain + // walletConnectOn ? walletConnectEvmProvider : window.ethereum + ) + } } if (autostart) { @@ -250,6 +392,18 @@

Select your chain

+
+

+ Integrated modal +

+

+ iFrame modal +

+
{ dispatch({ type: DataActionTypes.ShowModal, @@ -102,22 +107,16 @@ const AppContainerRender: ForwardRefRenderFunction< ) dispatch({ - type: DataActionTypes.ShowModal, - payload: undefined, - }) - - clearTimeout(modalTimeout) - - await dispatch({ type: DataActionTypes.SetLoadingMessage, payload: "", }) dispatch({ - type: DataActionTypes.setModalMode, - payload: isModal, + type: DataActionTypes.HideModal, }) + clearTimeout(modalTimeout) + const emailData = await kycDao?.kycDao.checkEmailConfirmed() dispatch({ diff --git a/src/BootstrapKycDaoModal.tsx b/src/BootstrapKycDaoModal.tsx index e57d0c7..a4f934c 100644 --- a/src/BootstrapKycDaoModal.tsx +++ b/src/BootstrapKycDaoModal.tsx @@ -13,11 +13,6 @@ import { } from "@kycdao/kycdao-sdk/dist/types" import { ErrorPageFactory } from "./pages" -export type IframeOptions = { - url?: string - messageTargetOrigin: string -} - // don't know why this stopped working, so I do a manual polyfill if (!window.Buffer) { diff --git a/src/KycDaoClient.ts b/src/KycDaoClient.ts index b815d53..4b814bb 100644 --- a/src/KycDaoClient.ts +++ b/src/KycDaoClient.ts @@ -6,22 +6,17 @@ import { BootstrapIframeKycDaoModal, BootstrapKycDaoModal, } from "./BootstrapKycDaoModal" -import type { +import { KycDaoClientInterface, KycDaoClientMessage, KycDaoClientOptions, + WelcomeString, + getParentElement, + messageHndlr, + nearNetworkRegex, + nearRedirectCheck, } from "./KycDaoClientCommon" -const errorPrefix = "Wallet callback handling error" - -const knownNearQueryParams = { - account_id: "NearLogin", - errorCode: "NearUserRejectedError", - transactionHashes: "NearMint", -} - -const nearNetworkRegex = /Near*./g - // basically the KycDaoClient.css const styles = ` .KycDaoModalRoot { @@ -73,6 +68,7 @@ styleNode.innerText = styles document.head.appendChild(styleNode) export class KycDaoClient implements KycDaoClientInterface { + messageHndlr: ({ data: { data, type } }: KycDaoClientMessage) => void height: string width: string parent: HTMLElement | string = document.body @@ -88,6 +84,7 @@ export class KycDaoClient implements KycDaoClientInterface { isModal = false container?: HTMLDivElement originalParentZIndex: null | string = null + getParentElement: () => HTMLElement constructor({ height = "650px", @@ -115,44 +112,22 @@ export class KycDaoClient implements KycDaoClientInterface { this.configFromUrl = configFromUrl this.onReady = onReady - this.messageHndlr = this.messageHndlr.bind(this) + this.messageHndlr = messageHndlr.bind(this) + this.getParentElement = getParentElement.bind(this) - /** - * Compile time environment variable injection by babel-plugin-transform-inline-environment-variables & webpack.DefinePlugin. - * {@link https://www.npmjs.com/package/babel-plugin-transform-inline-environment-variables package/babel-plugin-transform-inline-environment-variables} - * {@link https://webpack.js.org/plugins/define-plugin define-plugin} - */ - console.log( - `Thank you for using ${process.env.npm_package_name} version ${process.env.npm_package_version}+${process.env.REACT_APP_GIT_HASH}` - ) + console.log(WelcomeString) const nearNetwork = this.config.enabledBlockchainNetworks.find((network) => nearNetworkRegex.test(network) ) - if (nearNetwork && this.nearRedirectCheck()) { + if (nearNetwork && nearRedirectCheck()) { this.container = document.createElement("div") this.open(nearNetwork) } } - getParentElement() { - if (typeof this.parent === "string") { - const parentElement = document.querySelector( - this.parent - ) as HTMLElement | null - if (!parentElement) { - throw new Error( - `There is no such element as '${this.parent}', check your parent selector string!` - ) - } - - return parentElement - } - return this.parent - } - open( blockchain?: BlockchainNetwork, ethProvider?: KycDaoClientOptions["config"]["evmProvider"] @@ -224,34 +199,6 @@ export class KycDaoClient implements KycDaoClientInterface { } } - nearRedirectCheck() { - const knownQueryParamNames = Object.keys(knownNearQueryParams) - - const queryParams = new URLSearchParams(window.location.search) - const matches = [...queryParams].filter(([key, _]) => - knownQueryParamNames.includes(key) - ) - - if (matches.length > 1) { - console.error( - `${errorPrefix} - Multiple URL query parameters identified: ${matches.map( - ([key]) => key - )}.` - ) - } else if (matches.length === 1) { - const [match] = matches - const [key] = match - const event = - knownNearQueryParams[key as keyof typeof knownNearQueryParams] - - if (event.startsWith("Near")) { - return true - } - } - - return false - } - close() { if (this.isOpen && this.modal) { const parentNode = this.getParentElement() @@ -273,33 +220,6 @@ export class KycDaoClient implements KycDaoClientInterface { // document.body.style.setProperty("height", this.originalBodyHeight) } } - - messageHndlr({ data: { data, type } }: KycDaoClientMessage) { - switch (type) { - case "kycDaoCloseModal": - if (this.onFail) { - this.onFail("cancelled") - } - if (this.isOpen) { - this.close() - } - break - case "kycDaoSuccess": - this.isSuccessful = true - if (this.onSuccess) { - this.onSuccess(data) - } - this.close() - break - case "kycDaoFail": { - if (this.onFail) { - this.onFail(data) - } - } - } - } } -window.KycDaoClient = KycDaoClient as unknown as { - new (config: KycDaoClientOptions): KycDaoClientInterface -} +window.KycDaoClient = KycDaoClient diff --git a/src/KycDaoClientCommon.ts b/src/KycDaoClientCommon.ts index 1ca47fc..0bf92c5 100644 --- a/src/KycDaoClientCommon.ts +++ b/src/KycDaoClientCommon.ts @@ -13,12 +13,56 @@ export type KycDaoClientMessages = | "kycDaoSuccess" | "kycDaoFail" +export const errorPrefix = "Wallet callback handling error" + +export const knownNearQueryParams = { + account_id: "NearLogin", + errorCode: "NearUserRejectedError", + transactionHashes: "NearMint", +} + +export const nearNetworkRegex = /Near*./g + export type KycDaoClientMessageHandler = (message: KycDaoClientMessage) => void +export function messageHndlr( + this: KycDaoClientInterface, + { data: { data, type } }: KycDaoClientMessage +) { + switch (type) { + case "kycDaoCloseModal": + if (this.onFail) { + this.onFail("cancelled") + } + if (this.isOpen) { + this.close() + } + break + case "kycDaoSuccess": + this.isSuccessful = true + if (this.onSuccess) { + this.onSuccess(data) + this.close() + } + break + case "kycDaoFail": { + if (this.onFail) { + this.onFail(data) + } + } + } +} + +/** + * Compile time environment variable injection by babel-plugin-transform-inline-environment-variables & webpack.DefinePlugin. + * {@link https://www.npmjs.com/package/babel-plugin-transform-inline-environment-variables package/babel-plugin-transform-inline-environment-variables} + * {@link https://webpack.js.org/plugins/define-plugin define-plugin} + */ +export const WelcomeString = `Thank you for using ${process.env.npm_package_name} version ${process.env.npm_package_version}+${process.env.REACT_APP_GIT_HASH}` + export type KycDaoClientInterface = { nearAutorunEnabled?: boolean config: SdkConfiguration - iframeOptions?: IframeOptions width: string height: string isOpen: boolean @@ -35,12 +79,27 @@ export type KycDaoClientInterface = { ethProvider?: KycDaoClientOptions["config"]["evmProvider"] ) => void close: () => void - messageHndlr: KycDaoClientMessageHandler getParentElement: () => HTMLElement originalParentZIndex: string | null onReady?: (kycDaoSdkInstance: KycDaoInitializationResult) => void container?: HTMLDivElement - nearRedirectCheck: () => boolean + messageHndlr: ({ data: { data, type } }: KycDaoClientMessage) => void +} + +export function getParentElement(this: KycDaoClientInterface) { + if (typeof this.parent === "string") { + const parentElement = document.querySelector( + this.parent + ) as HTMLElement | null + if (!parentElement) { + throw new Error( + `There is no such element as '${this.parent}', check your parent selector string!` + ) + } + + return parentElement + } + return this.parent } export type KycDaoClientOptions = { @@ -51,7 +110,6 @@ export type KycDaoClientOptions = { config: SdkConfiguration configFromUrl?: boolean backdrop?: boolean - iframeOptions?: IframeOptions nearAutorunEnabled?: boolean onFail?: (reason?: string) => void onSuccess?: (data?: string) => void @@ -63,6 +121,33 @@ export type IframeOptions = { messageTargetOrigin: string } +export function nearRedirectCheck() { + const knownQueryParamNames = Object.keys(knownNearQueryParams) + + const queryParams = new URLSearchParams(window.location.search) + const matches = [...queryParams].filter(([key, _]) => + knownQueryParamNames.includes(key) + ) + + if (matches.length > 1) { + console.error( + `${errorPrefix} - Multiple URL query parameters identified: ${matches.map( + ([key]) => key + )}.` + ) + } else if (matches.length === 1) { + const [match] = matches + const [key] = match + const event = knownNearQueryParams[key as keyof typeof knownNearQueryParams] + + if (event.startsWith("Near")) { + return true + } + } + + return false +} + export type UrlParams = { [key: string]: | string diff --git a/src/KycDaoIframeClient.ts b/src/KycDaoIframeClient.ts index c205536..2a0b57b 100644 --- a/src/KycDaoIframeClient.ts +++ b/src/KycDaoIframeClient.ts @@ -1,7 +1,18 @@ import { + BlockchainNetwork, + KycDaoInitializationResult, + SdkConfiguration, +} from "@kycdao/kycdao-sdk" +import { + IframeOptions, KycDaoClientInterface, KycDaoClientMessage, KycDaoClientOptions, + WelcomeString, + getParentElement, + messageHndlr, + nearNetworkRegex, + nearRedirectCheck, } from "./KycDaoClientCommon" // basically the KycDaoClient.css @@ -56,9 +67,31 @@ styleNode.innerText = styles document.head.appendChild(styleNode) -export function kycDaoIframeClient( - this: KycDaoClientInterface, - { +export type KycDaoIframeClientOptions = KycDaoClientOptions & { + iframeOptions: IframeOptions +} + +export class KycDaoIframeClient implements KycDaoClientInterface { + messageHndlr: ({ data: { data, type } }: KycDaoClientMessage) => void + height: string + width: string + parent: HTMLElement | string = document.body + onFail + onSuccess + config + configFromUrl = false + backdrop = true + modal?: HTMLDivElement + onReady?: (kycDaoSdkInstance: KycDaoInitializationResult) => void + isOpen = false + isSuccessful = false + isModal = false + container?: HTMLDivElement + originalParentZIndex: null | string = null + iframeOptions: IframeOptions + getParentElement: () => HTMLElement + + constructor({ height = 650, width = 400, parent = document.body, @@ -68,170 +101,143 @@ export function kycDaoIframeClient( config, backdrop = true, modal = true, - }: KycDaoClientOptions -) { - if ("virtualKeyboard" in navigator) { - navigator.virtualKeyboard.overlaysContent = true - } + }: KycDaoIframeClientOptions) { + if ("virtualKeyboard" in navigator) { + navigator.virtualKeyboard.overlaysContent = true + } - this.config = config - this.iframeOptions = iframeOptions + this.config = config + this.iframeOptions = iframeOptions - this.width = typeof width === "string" ? width : `${width}px` - this.height = typeof height === "string" ? height : `${height}px` + this.width = typeof width === "string" ? width : `${width}px` + this.height = typeof height === "string" ? height : `${height}px` - this.isOpen = false - this.parent = parent - this.onFail = onFail - this.onSuccess = onSuccess - this.isSuccessful = false - this.isModal = modal + this.isOpen = false + this.parent = parent + this.onFail = onFail + this.onSuccess = onSuccess + this.isSuccessful = false + this.isModal = modal + this.backdrop = backdrop - this.messageHndlr = this.messageHndlr.bind(this) - this.open = this.open.bind(this) - this.close = this.close.bind(this) - this.getParentElement = this.getParentElement.bind(this) - this.backdrop = backdrop -} + this.messageHndlr = messageHndlr.bind(this) + this.getParentElement = getParentElement.bind(this) -kycDaoIframeClient.prototype.messageHndlr = function ( - this: KycDaoClientInterface, - { data: { data, type } }: KycDaoClientMessage -) { - switch (type) { - case "kycDaoCloseModal": - if (this.onFail) { - this.onFail("cancelled") - } - if (this.isOpen) { - this.close() - } - break - case "kycDaoSuccess": - this.isSuccessful = true - if (this.onSuccess) { - this.onSuccess(data) - this.close() - } - break - case "kycDaoFail": { - if (this.onFail) { - this.onFail(data) - } - } - } -} - -kycDaoIframeClient.prototype.getParentElement = function ( - this: KycDaoClientInterface -) { - if (typeof this.parent === "string") { - const parentElement = document.querySelector( - this.parent - ) as HTMLElement | null - if (!parentElement) { - throw new Error( - `There is no such element as '${this.parent}', check your parent selector string!` - ) - } + console.log(WelcomeString) - return parentElement - } - return this.parent -} - -kycDaoIframeClient.prototype.open = function (this: KycDaoClientInterface) { - if (!this.iframeOptions?.url) { - throw new Error( - "An URL is needed if you want to use an iframe! What do you want to display?" + const nearNetwork = this.config.enabledBlockchainNetworks.find((network) => + nearNetworkRegex.test(network) ) - } - - if (!this.isOpen) { - const params = new URLSearchParams() - const paramSetter = ({ 0: key, 1: value }: { 0: string; 1: string }) => - params.set(key, Array.isArray(value) ? `["${value.join('","')}"]` : value) - - Object.entries(this.config).forEach(paramSetter) - Object.entries(this.iframeOptions).forEach(paramSetter) - params.set("messageTargetOrigin", this.iframeOptions.messageTargetOrigin) + if (nearNetwork && nearRedirectCheck()) { + this.container = document.createElement("div") - this.parent = this.getParentElement() || document.body - if (this.isModal) { - this.parent.classList.add("KycDaoIframeModalRoot") + this.open(nearNetwork) } + } - if (this.backdrop && this.isModal) { - this.parent.style.setProperty( - "--backdrop", - typeof this.backdrop === "boolean" - ? "rgba(0, 0, 0, 0.7)" - : this.backdrop - ) + open(blockchain?: BlockchainNetwork) { + if (!this.iframeOptions) { + throw new Error("iframeOptions are not set!") } - this.modal = document.createElement("div") - - if (this.isModal) { - this.modal.classList.add("KycDaoIframeModalRoot") - this.modal.style.setProperty("--width", this.width) - this.modal.style.setProperty("--height", this.height) + if (!this.iframeOptions.url) { + throw new Error( + "An URL is needed if you want to use an iframe! What do you want to display?" + ) } - const container = document.createElement("iframe") - container.allow = "encrypted-media; camera" - container.src = this.iframeOptions.url + "?" + params.toString() - container.width = this.width - container.height = this.height + if (!this.isOpen) { + const config = { ...this.config } as SdkConfiguration - if (this.isModal) { - container.classList.add("KycDaoModalIFrame") - } + config.enabledBlockchainNetworks = blockchain + ? [blockchain] + : [this.config.enabledBlockchainNetworks[0]] - this.modal.appendChild(container) + const params = new URLSearchParams() + const paramSetter = ({ 0: key, 1: value }: { 0?: string; 1?: string }) => + key && + value && + params.set( + key, + Array.isArray(value) ? `["${value.join('","')}"]` : value + ) - this.parent.appendChild(this.modal) - this.isOpen = true + Object.entries(config).forEach(paramSetter) + Object.entries(this.iframeOptions).forEach(paramSetter) - if ("virtualKeyboard" in navigator) { - navigator.virtualKeyboard.overlaysContent = true - } + params.set("messageTargetOrigin", window.location.origin) - window.addEventListener("message", this.messageHndlr) + this.parent = this.getParentElement() || document.body + if (this.isModal) { + this.parent.classList.add("KycDaoIframeModalRoot") + } + if (this.backdrop && this.isModal) { + this.originalParentZIndex = + this.parent.style.getPropertyValue("z-index") + + this.parent.style.setProperty( + "--kyc-dao-backdrop", + typeof this.backdrop === "boolean" + ? "rgba(0, 0, 0, 0.7)" + : this.backdrop + ) + this.parent.style.setProperty("z-index", "101") + } - // this.originalBodyHeight = document.body.style.height - // this.originalBodyOverflow = document.body.style.overflow + this.modal = document.createElement("div") - document.body.style.setProperty("height", "100%") - document.body.style.setProperty("overflow", "hidden") - } -} + if (this.isModal) { + this.modal.classList.add("KycDaoIframeModalRoot") + this.modal.style.setProperty("--width", this.width) + this.modal.style.setProperty("--height", this.height) + } -kycDaoIframeClient.prototype.close = function (this: KycDaoClientInterface) { - if (this.isOpen) { - if (this.modal) { - const parentNode = this.getParentElement() + const container = document.createElement("iframe") + container.allow = "encrypted-media; camera" + container.src = this.iframeOptions.url + "?" + params.toString() + container.width = this.width + container.height = this.height if (this.isModal) { - parentNode.classList.remove("KycDaoIframeModalRoot") + container.classList.add("KycDaoModalIFrame") } - if (parentNode) { - parentNode.removeChild(this.modal) + this.modal.appendChild(container) + + this.parent.appendChild(this.modal) + this.isOpen = true + + if ("virtualKeyboard" in navigator) { + navigator.virtualKeyboard.overlaysContent = true } - window.removeEventListener("message", this.messageHndlr) - this.isOpen = false - // document.body.style.setProperty("height", this.originalBodyHeight) - // document.body.style.setProperty("overflow", this.originalBodyOverflow) + + window.addEventListener("message", messageHndlr.bind(this)) } } -} -window.KycDaoIframeClient = kycDaoIframeClient as unknown as { - new (config: KycDaoClientOptions): KycDaoClientInterface + close() { + if (this.isOpen) { + if (this.modal) { + const parentNode = this.getParentElement() + + if (this.isModal) { + parentNode.classList.remove("KycDaoIframeModalRoot") + parentNode.style.setProperty("z-index", this.originalParentZIndex) + + if (this.backdrop) { + parentNode.style.setProperty("--kyc-dao-backdrop", null) + } + } + + if (parentNode) { + parentNode.removeChild(this.modal) + } + window.removeEventListener("message", messageHndlr.bind(this)) + this.isOpen = false + } + } + } } -export const KycDaoIframeClient = kycDaoIframeClient as unknown as { - new (config: KycDaoClientOptions): KycDaoClientInterface -} +window.KycDaoIframeClient = KycDaoIframeClient diff --git a/src/components/modal/emailVerificationModal.tsx b/src/components/modal/emailVerificationModal.tsx index 30b11cb..5cb8435 100644 --- a/src/components/modal/emailVerificationModal.tsx +++ b/src/components/modal/emailVerificationModal.tsx @@ -30,7 +30,7 @@ export const EmailVerificationModal = () => { }, [kycDao, errorHandler]) const onChangeEmail = useCallback(() => { - dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) + dispatch({ type: DataActionTypes.HideModal }) }, [dispatch]) return ( diff --git a/src/components/modal/genericErrorModal.tsx b/src/components/modal/genericErrorModal.tsx index 92d31b3..a046f9c 100644 --- a/src/components/modal/genericErrorModal.tsx +++ b/src/components/modal/genericErrorModal.tsx @@ -35,7 +35,7 @@ export const GenericModal = ({ mode }: GenericModalProps) => { const ResetApp = useContext(RestartContext) const onClose = useCallback(() => { - dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) + dispatch({ type: DataActionTypes.HideModal }) }, [dispatch]) const startAgain = useCallback(() => { diff --git a/src/components/modal/mintingFailed.tsx b/src/components/modal/mintingFailed.tsx index 2d56c76..f06612a 100644 --- a/src/components/modal/mintingFailed.tsx +++ b/src/components/modal/mintingFailed.tsx @@ -30,7 +30,7 @@ export const MintingFailedModal = () => { }, [minting, subscriptionYears, imageId]) const onClose = useCallback(() => { - dispatch({ type: DataActionTypes.ShowModal, payload: undefined }) + dispatch({ type: DataActionTypes.HideModal }) }, [dispatch]) return ( diff --git a/src/components/stateContext/stateContext.ts b/src/components/stateContext/stateContext.ts index 792a978..5bf0f9b 100644 --- a/src/components/stateContext/stateContext.ts +++ b/src/components/stateContext/stateContext.ts @@ -22,6 +22,9 @@ export const reducer = ( { payload, type }: DataChangeActions ): Data => { switch (type) { + case DataActionTypes.HideModal: { + return { ...data, modal: undefined } + } case DataActionTypes.GoToNextStep: { return CalculateNextStep(data) } diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index c3907eb..0a26cdd 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -41,6 +41,7 @@ export enum DataActionTypes { GoToPrevStep, SetLoadingMessage, ShowModal, + HideModal, } export enum StepID { @@ -256,6 +257,11 @@ export type SetError = { payload: ErrorData } +export type HideModal = { + type: DataActionTypes.HideModal + payload?: never +} + export type DataChangeActions = | HeaderButtonClickAction | SetHeaderButtonStateAction @@ -284,6 +290,7 @@ export type DataChangeActions = | ShowModal | SetLoadingMessage | SetError + | HideModal export type ModalType = | "emailVerification" diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index 1009a06..6a1824a 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -37,8 +37,7 @@ export function errorHandler( switch (type) { case "fatal": dispatch({ - type: DataActionTypes.ShowModal, - payload: undefined, + type: DataActionTypes.HideModal, }) dispatch({ type: DataActionTypes.SetError, payload: { type: "fatal" } }) dispatch({ type: DataActionTypes.GoToNextStep }) diff --git a/src/hooks/useMinting.ts b/src/hooks/useMinting.ts index b9864dc..55981d6 100644 --- a/src/hooks/useMinting.ts +++ b/src/hooks/useMinting.ts @@ -47,8 +47,7 @@ export const useMinting = () => { throw Error("Something went wrong") } dispatch({ - type: DataActionTypes.ShowModal, - payload: undefined, + type: DataActionTypes.HideModal, }) dispatch({ type: DataActionTypes.changePage, diff --git a/src/pages/emailDiscordVerificationStep.tsx b/src/pages/emailDiscordVerificationStep.tsx index 7c0d550..d47d0d8 100644 --- a/src/pages/emailDiscordVerificationStep.tsx +++ b/src/pages/emailDiscordVerificationStep.tsx @@ -173,8 +173,7 @@ export const EmailDiscordVerificationStep: FC = ({ ) dispatch({ - type: DataActionTypes.ShowModal, - payload: undefined, + type: DataActionTypes.HideModal, }) clearInterval(confirmationInterval.current) diff --git a/src/pages/fatalErrorStep.tsx b/src/pages/fatalErrorStep.tsx index a33c70e..bf09f57 100644 --- a/src/pages/fatalErrorStep.tsx +++ b/src/pages/fatalErrorStep.tsx @@ -22,10 +22,12 @@ export const FatalErrorStep: FC = ({ const ResetApp = useContext(RestartContext) - const { body, header } = error || { - header: "Something went wrong!", - body: "An unknown, fatal error happened!", - } + const { body, header } = error + ? error + : { + header: "Something went wrong!", + body: "An unknown, fatal error happened!", + } const Header = () =>

{header}

diff --git a/src/pages/loading.tsx b/src/pages/loading.tsx index d566fb2..89a658d 100644 --- a/src/pages/loading.tsx +++ b/src/pages/loading.tsx @@ -7,6 +7,7 @@ import { DataActionTypes, HeaderButtons, Loading, + P, StateContext, Step, } from "@Components/index" @@ -15,22 +16,26 @@ const H1 = styled.h1` justify-content: center; ` -const Body = () => { - return ( - <> -

Loading

- - - ) -} - export const LoadingCard: FC = ({ className, animation, disabled = false, inactive = false, }) => { - const { dispatch } = useContext(StateContext) + const { + dispatch, + data: { loadingMessage }, + } = useContext(StateContext) + + const Body = useCallback(() => { + return ( + <> +

Loading

+ {loadingMessage &&

{loadingMessage}

} + + + ) + }, [loadingMessage]) const onTransitionDone = useCallback(() => { if (!disabled) { diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts index 97db9ed..c544682 100644 --- a/src/react-app-env.d.ts +++ b/src/react-app-env.d.ts @@ -1,10 +1,11 @@ /// import type { MetaMaskInpageProvider } from "@metamask/providers" import type { KycDaoWidgetConfig } from "./widget" -import type { - KycDaoClientOptions, - KycDaoClientInterface, -} from "./KycDaoClientCommon" +import { + KycDaoIframeClient, + KycDaoIframeClientOptions, +} from "KycDaoIframeClient" +import { KycDaoClient } from "KycDaoClient" type VirtualKeyboardEvent = UIEvent & { target: { boundingRect: { height: string } } @@ -14,10 +15,10 @@ declare global { interface Window { ethereum: MetaMaskInpageProvider KycDaoClient: { - new (config: KycDaoClientOptions): KycDaoClientInterface + new (config: KycDaoClientOptions): KycDaoClient } KycDaoIframeClient: { - new (config: KycDaoClientOptions): KycDaoClientInterface + new (config: KycDaoIframeClientOptions): KycDaoIframeClient } KycDaoWidget: React.FC } From 3457f8423ac7a2ad5452d7f19071997e6f1d0a48 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Thu, 9 Mar 2023 17:25:46 +0100 Subject: [PATCH 08/52] Make near login work with iframe --- config-overrides.js | 15 +- package.json | 2 + pnpm-lock.yaml | 949 ++++++++++++++++++++-- public/index.html | 12 +- src/AppContainer.tsx | 75 +- src/BootstrapKycDaoModal.tsx | 29 +- src/KycDaoClient.ts | 8 +- src/KycDaoClientCommon.ts | 123 ++- src/KycDaoIframeClient.ts | 50 +- src/components/appStyleContainer/index.ts | 31 +- src/components/typography/index.ts | 2 +- src/hooks/errorHandler.ts | 7 +- src/pages/ErrorPage.tsx | 9 +- src/pages/fatalErrorStep.tsx | 20 +- src/pages/finalStep.tsx | 9 +- 15 files changed, 1144 insertions(+), 197 deletions(-) diff --git a/config-overrides.js b/config-overrides.js index cd0b727..53758e7 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -12,6 +12,10 @@ module.exports = function override(config, env) { const fallback = { ...(config.resolve.fallback ? config.resolve.fallback : {}), crypto: false, + http: false, + https: false, + os: false, + url: false, } const outDir = "./build" @@ -42,13 +46,6 @@ module.exports = function override(config, env) { "@Images": path.resolve(__dirname, "src/images/"), } - config.plugins = (config.plugins || []).concat([ - new webpack.ProvidePlugin({ - Buffer: ["buffer", "Buffer"], - ethereum: ["ethereum", "ethereum"], - }), - ]) - config.module.rules.unshift({ test: /\.(woff2?)$/, dependency: { not: ["file"] }, @@ -100,6 +97,10 @@ module.exports = function override(config, env) { )*/ config.plugins.push( + new webpack.ProvidePlugin({ + Buffer: ["buffer"], + ethereum: "ethereum", + }), new webpack.DefinePlugin({ "process.env.npm_package_name": JSON.stringify( process.env.npm_package_name diff --git a/package.json b/package.json index cf1e46f..0b09a74 100644 --- a/package.json +++ b/package.json @@ -94,6 +94,7 @@ } }, "peerDependencies": { + "@walletconnect/web3-provider": "^1.8.0", "react": "^18", "react-dom": "^18" }, @@ -117,6 +118,7 @@ "@types/styled-components": "^5.1.26", "@typescript-eslint/eslint-plugin": "^5.54.1", "@typescript-eslint/parser": "^5.54.1", + "@walletconnect/web3-provider": "^1.8.0", "babel-plugin-macros": "^3.1.0", "babel-plugin-module-resolver": "^5.0.0", "babel-plugin-styled-components": "^2.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8c93e9d..2965eb7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,7 @@ specifiers: '@types/styled-components': ^5.1.26 '@typescript-eslint/eslint-plugin': ^5.54.1 '@typescript-eslint/parser': ^5.54.1 + '@walletconnect/web3-provider': ^1.8.0 babel-plugin-macros: ^3.1.0 babel-plugin-module-resolver: ^5.0.0 babel-plugin-styled-components: ^2.0.7 @@ -110,6 +111,7 @@ devDependencies: '@types/styled-components': 5.1.26 '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu + '@walletconnect/web3-provider': 1.8.0_@babel+core@7.21.0 babel-plugin-macros: 3.1.0 babel-plugin-module-resolver: 5.0.0 babel-plugin-styled-components: 2.0.7_styled-components@5.3.8 @@ -3682,6 +3684,12 @@ packages: dependencies: '@babel/types': 7.21.2 + /@types/bn.js/4.11.6: + resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} + dependencies: + '@types/node': 18.14.6 + dev: true + /@types/bn.js/5.1.1: resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} dependencies: @@ -4095,7 +4103,30 @@ packages: '@walletconnect/window-getters': 1.0.0 '@walletconnect/window-metadata': 1.0.0 detect-browser: 5.2.0 - dev: false + + /@walletconnect/client/1.8.0: + resolution: {integrity: sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ==} + deprecated: 'WalletConnect''s v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/' + dependencies: + '@walletconnect/core': 1.8.0 + '@walletconnect/iso-crypto': 1.8.0 + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@walletconnect/core/1.8.0: + resolution: {integrity: sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==} + dependencies: + '@walletconnect/socket-transport': 1.8.0 + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true /@walletconnect/core/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-OLyBNJyUfQNr1qlcCxqzu5bmNorOL6SqWOwA3LcxV+3+mbUk4fByFd8AJRzGFWf8kC3BRycLFivHh4QEeBNZ8Q==} @@ -4127,11 +4158,29 @@ packages: - utf-8-validate dev: false + /@walletconnect/crypto/1.0.3: + resolution: {integrity: sha512-+2jdORD7XQs76I2Odgr3wwrtyuLUXD/kprNVsjWRhhhdO9Mt6WqVzOPu0/t7OHSmgal8k7SoBQzUc5hu/8zL/g==} + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/environment': 1.0.1 + '@walletconnect/randombytes': 1.0.3 + aes-js: 3.1.2 + hash.js: 1.1.7 + tslib: 1.14.1 + dev: true + + /@walletconnect/encoding/1.0.2: + resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} + dependencies: + is-typedarray: 1.0.0 + tslib: 1.14.1 + typedarray-to-buffer: 3.1.5 + dev: true + /@walletconnect/environment/1.0.1: resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} dependencies: tslib: 1.14.1 - dev: false /@walletconnect/events/1.0.1: resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -4156,6 +4205,23 @@ packages: - typescript dev: false + /@walletconnect/http-connection/1.8.0: + resolution: {integrity: sha512-IziEr3c53qsMromK7jz0EkbKDHlryRbxXdFR+xaG+S5nfxtUdAfjzlZabvczXdDCgmTij6KbNsZAjBMqCBzACw==} + dependencies: + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + eventemitter3: 4.0.7 + xhr2-cookies: 1.1.0 + dev: true + + /@walletconnect/iso-crypto/1.8.0: + resolution: {integrity: sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==} + dependencies: + '@walletconnect/crypto': 1.0.3 + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + dev: true + /@walletconnect/jsonrpc-provider/1.0.8: resolution: {integrity: sha512-M44vzTrF0TeDcxQorm2lJ5klmfqchYOZqmIHb5T9lIPA/rj22643P83j44flZLyzycPqy5UUlIH6foeBPwjxMg==} dependencies: @@ -4169,7 +4235,6 @@ packages: dependencies: keyvaluestorage-interface: 1.0.0 tslib: 1.14.1 - dev: false /@walletconnect/jsonrpc-utils/1.0.6: resolution: {integrity: sha512-snp0tfkjPiDLQp/jrBewI+9SM33GPV4+Gjgldod6XQ7rFyQ5FZjnBxUkY4xWH0+arNxzQSi6v5iDXjCjSaorpg==} @@ -4177,7 +4242,6 @@ packages: '@walletconnect/environment': 1.0.1 '@walletconnect/jsonrpc-types': 1.0.2 tslib: 1.14.1 - dev: false /@walletconnect/jsonrpc-ws-connection/1.0.9: resolution: {integrity: sha512-x1COaW6hhMLEo+ND5zF/siBGg5SEwC/gHjeRbJtK1CRiq9atkg/XR7JwtSNfMvYX/O3PRCVmuc5SP0RQio9JUw==} @@ -4217,7 +4281,6 @@ packages: /@walletconnect/mobile-registry/1.4.0: resolution: {integrity: sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==} deprecated: 'Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry' - dev: false /@walletconnect/qrcode-modal/1.8.0: resolution: {integrity: sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==} @@ -4229,7 +4292,15 @@ packages: copy-to-clipboard: 3.3.3 preact: 10.4.1 qrcode: 1.4.4 - dev: false + + /@walletconnect/randombytes/1.0.3: + resolution: {integrity: sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw==} + dependencies: + '@walletconnect/encoding': 1.0.2 + '@walletconnect/environment': 1.0.1 + randombytes: 2.1.0 + tslib: 1.14.1 + dev: true /@walletconnect/relay-api/1.0.9: resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} @@ -4251,7 +4322,6 @@ packages: /@walletconnect/safe-json/1.0.0: resolution: {integrity: sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==} - dev: false /@walletconnect/safe-json/1.0.1: resolution: {integrity: sha512-Fm7e31oSYY15NQr8SsLJheKAy5L744udZf2lJKcz6wFmPJEzf7hOF0866o/rrldRzJnjZ4H2GJ45pFudsnLW5A==} @@ -4284,6 +4354,17 @@ packages: - utf-8-validate dev: false + /@walletconnect/socket-transport/1.8.0: + resolution: {integrity: sha512-5DyIyWrzHXTcVp0Vd93zJ5XMW61iDM6bcWT4p8DTRfFsOtW46JquruMhxOLeCOieM4D73kcr3U7WtyR4JUsGuQ==} + dependencies: + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + ws: 7.5.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + /@walletconnect/time/1.0.2: resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} dependencies: @@ -4293,7 +4374,6 @@ packages: /@walletconnect/types/1.8.0: resolution: {integrity: sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==} deprecated: 'WalletConnect''s v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/' - dev: false /@walletconnect/types/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-NuL+c/BHExK7hwF+JoJVy/LnNB8sNtoxvlpIa2Er5qeB8MJsWtwbmEJMS/bP6CbOTSpO0kOpXGzb1ht0LD2rkw==} @@ -4340,9 +4420,26 @@ packages: - typescript dev: false + /@walletconnect/web3-provider/1.8.0_@babel+core@7.21.0: + resolution: {integrity: sha512-lqqEO0oRmCehH+c8ZPk3iH7I7YtbzmkWd58/Or2AgWAl869JamzndKCD3sTlNsPRQLxxPpraHQqzur7uclLWvg==} + deprecated: 'WalletConnect''s v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/' + dependencies: + '@walletconnect/client': 1.8.0 + '@walletconnect/http-connection': 1.8.0 + '@walletconnect/qrcode-modal': 1.8.0 + '@walletconnect/types': 1.8.0 + '@walletconnect/utils': 1.8.0 + web3-provider-engine: 16.0.1_@babel+core@7.21.0 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@walletconnect/window-getters/1.0.0: resolution: {integrity: sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==} - dev: false /@walletconnect/window-getters/1.0.1: resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -4354,7 +4451,6 @@ packages: resolution: {integrity: sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==} dependencies: '@walletconnect/window-getters': 1.0.0 - dev: false /@walletconnect/window-metadata/1.0.1: resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} @@ -4471,6 +4567,18 @@ packages: /abab/2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + /abstract-leveldown/2.6.3: + resolution: {integrity: sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==} + dependencies: + xtend: 4.0.2 + dev: true + + /abstract-leveldown/2.7.2: + resolution: {integrity: sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==} + dependencies: + xtend: 4.0.2 + dev: true + /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -4528,6 +4636,10 @@ packages: loader-utils: 2.0.4 regex-parser: 2.2.11 + /aes-js/3.1.2: + resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} + dev: true + /agentkeepalive/4.3.0: resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} engines: {node: '>= 8.0.0'} @@ -4605,7 +4717,6 @@ packages: /ansi-regex/4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} - dev: false /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -4732,6 +4843,17 @@ packages: safer-buffer: 2.1.2 dev: false + /asn1/0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /assert-plus/1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: true + /assert/2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} dependencies: @@ -4753,15 +4875,45 @@ packages: engines: {node: '>=8'} dev: true + /async-eventemitter/0.2.4: + resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==} + dependencies: + async: 2.6.4 + dev: true + + /async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: true + + /async-mutex/0.2.6: + resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} + dependencies: + tslib: 2.5.0 + dev: true + /async-mutex/0.4.0: resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} dependencies: tslib: 2.5.0 dev: false + /async/1.5.2: + resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} + dev: true + + /async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + dependencies: + lodash: 4.17.21 + dev: true + /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} @@ -4790,6 +4942,14 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + /aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true + + /aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: true + /axe-core/4.6.3: resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} engines: {node: '>=4'} @@ -5037,16 +5197,21 @@ packages: transitivePeerDependencies: - supports-color + /backoff/2.5.0: + resolution: {integrity: sha512-wC5ihrnUXmR2douXmXLCe5O3zg3GKIyvRi/hi58a/XyRxVI+3/yM0PYueQOZXPXQ9pxBislYkw+sF9b7C/RuMA==} + engines: {node: '>= 0.6'} + dependencies: + precond: 0.2.3 + dev: true + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base-x/4.0.0: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} - dev: false /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: false /base64url/3.0.1: resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} @@ -5056,6 +5221,12 @@ packages: /batch/0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + /bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: true + /bent/7.3.12: resolution: {integrity: sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==} dependencies: @@ -5107,14 +5278,12 @@ packages: /blakejs/1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} - dev: false /bluebird/3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} /bn.js/5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} - dev: false /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -5177,7 +5346,6 @@ packages: /brorand/1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} - dev: false /browser-stdout/1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} @@ -5192,7 +5360,6 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false /browserify-cipher/1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} @@ -5246,7 +5413,6 @@ packages: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} dependencies: base-x: 4.0.0 - dev: false /bs58check/2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} @@ -5254,27 +5420,29 @@ packages: bs58: 5.0.0 create-hash: 1.2.0 safe-buffer: 5.2.1 - dev: false /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} dependencies: node-int64: 0.4.0 + /btoa/1.2.1: + resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} + engines: {node: '>= 0.4.0'} + hasBin: true + dev: true + /buffer-alloc-unsafe/1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} - dev: false /buffer-alloc/1.2.0: resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} dependencies: buffer-alloc-unsafe: 1.1.0 buffer-fill: 1.0.0 - dev: false /buffer-fill/1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} - dev: false /buffer-from/0.1.2: resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} @@ -5285,14 +5453,12 @@ packages: /buffer-xor/1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: false /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: false /bufferutil/4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} @@ -5441,6 +5607,12 @@ packages: /check-types/11.2.2: resolution: {integrity: sha512-HBiYvXvn9Z70Z88XKjz3AEKd4HJhBXsa3j7xFnITAzoS8+q6eIGi8qDB8FKPBAjtuxjI/zFpwuiCb8oDtKOYrA==} + /checkpoint-store/1.1.0: + resolution: {integrity: sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==} + dependencies: + functional-red-black-tree: 1.0.1 + dev: true + /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -5473,7 +5645,6 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} @@ -5518,7 +5689,6 @@ packages: string-width: 3.1.0 strip-ansi: 5.2.0 wrap-ansi: 5.1.0 - dev: false /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -5536,6 +5706,11 @@ packages: strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + /clone/2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + dev: true + /clsx/1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} engines: {node: '>=6'} @@ -5697,11 +5872,14 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} + /cookiejar/2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: true + /copy-to-clipboard/3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} dependencies: toggle-selection: 1.0.6 - dev: false /core-js-compat/3.29.0: resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==} @@ -5716,6 +5894,10 @@ packages: resolution: {integrity: sha512-VG23vuEisJNkGl6XQmFJd3rEG/so/CNatqeE+7uZAwTSwFeB/qaO0be8xZYUNWprJ/GIwL8aMt9cj1kvbpTZhg==} requiresBuild: true + /core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true + /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -5760,7 +5942,6 @@ packages: md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: false /create-hmac/1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} @@ -5771,7 +5952,6 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: false /create-react-app/5.0.1: resolution: {integrity: sha512-UkxTKK8I9HuZZHqkNq/JkKXDgdLeiRGc+bL58Iae2g+7WwFomAj4wppn6JfqlZM2IKYRlZtgLlmVr5oZfdd1xg==} @@ -5805,6 +5985,15 @@ packages: cross-spawn: 7.0.3 dev: true + /cross-fetch/2.2.6: + resolution: {integrity: sha512-9JZz+vXCmfKUZ68zAptS7k4Nu8e2qcibe7WVZYps7sAgk5R8GYTc+T1WR0v1rlP9HxgARmOX1UTIJZFytajpNA==} + dependencies: + node-fetch: 2.6.9 + whatwg-fetch: 2.0.4 + transitivePeerDependencies: + - encoding + dev: true + /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -6045,6 +6234,13 @@ packages: /damerau-levenshtein/1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + /dashdash/1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: true + /date-fns/2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} engines: {node: '>=0.11'} @@ -6109,7 +6305,6 @@ packages: /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - dev: false /decamelize/4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} @@ -6124,7 +6319,6 @@ packages: /decode-uri-component/0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} - dev: false /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -6170,6 +6364,12 @@ packages: dependencies: execa: 5.1.1 + /deferred-leveldown/1.2.2: + resolution: {integrity: sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==} + dependencies: + abstract-leveldown: 2.6.3 + dev: true + /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -6189,6 +6389,11 @@ packages: engines: {node: '>=10'} dev: false + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -6210,7 +6415,6 @@ packages: /detect-browser/5.2.0: resolution: {integrity: sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==} - dev: false /detect-browser/5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} @@ -6273,7 +6477,6 @@ packages: /dijkstrajs/1.0.2: resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==} - dev: false /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -6328,6 +6531,10 @@ packages: domhandler: 5.0.3 entities: 4.4.0 + /dom-walk/0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: true + /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -6402,6 +6609,13 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ecc-jsbn/0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: true + /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6435,7 +6649,6 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false /emitter-component/1.1.1: resolution: {integrity: sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ==} @@ -6451,7 +6664,6 @@ packages: /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} - dev: false /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -6515,6 +6727,13 @@ packages: hasBin: true dev: true + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: true + /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -7091,11 +7310,96 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + /eth-block-tracker/4.4.3_@babel+core@7.21.0: + resolution: {integrity: sha512-A8tG4Z4iNg4mw5tP1Vung9N9IjgMNqpiMoJ/FouSFwNCGHv2X0mmOYwtQOJzki6XN7r7Tyo01S29p7b224I4jw==} + dependencies: + '@babel/plugin-transform-runtime': 7.21.0_@babel+core@7.21.0 + '@babel/runtime': 7.21.0 + eth-query: 2.1.2 + json-rpc-random-id: 1.0.1 + pify: 3.0.0 + safe-event-emitter: 1.0.1 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /eth-json-rpc-filters/4.2.2: + resolution: {integrity: sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==} + dependencies: + '@metamask/safe-event-emitter': 2.0.0 + async-mutex: 0.2.6 + eth-json-rpc-middleware: 6.0.0 + eth-query: 2.1.2 + json-rpc-engine: 6.1.0 + pify: 5.0.0 + transitivePeerDependencies: + - encoding + dev: true + + /eth-json-rpc-infura/5.1.0: + resolution: {integrity: sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==} + dependencies: + eth-json-rpc-middleware: 6.0.0 + eth-rpc-errors: 3.0.0 + json-rpc-engine: 5.4.0 + node-fetch: 2.6.9 + transitivePeerDependencies: + - encoding + dev: true + + /eth-json-rpc-middleware/6.0.0: + resolution: {integrity: sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==} + dependencies: + btoa: 1.2.1 + clone: 2.1.2 + eth-query: 2.1.2 + eth-rpc-errors: 3.0.0 + eth-sig-util: 1.4.2 + ethereumjs-util: 5.2.1 + json-rpc-engine: 5.4.0 + json-stable-stringify: 1.0.2 + node-fetch: 2.6.9 + pify: 3.0.0 + safe-event-emitter: 1.0.1 + transitivePeerDependencies: + - encoding + dev: true + + /eth-query/2.1.2: + resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} + dependencies: + json-rpc-random-id: 1.0.1 + xtend: 4.0.2 + dev: true + + /eth-rpc-errors/3.0.0: + resolution: {integrity: sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==} + dependencies: + fast-safe-stringify: 2.1.1 + dev: true + /eth-rpc-errors/4.0.3: resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} dependencies: fast-safe-stringify: 2.1.1 + /eth-sig-util/1.4.2: + resolution: {integrity: sha512-iNZ576iTOGcfllftB73cPB5AN+XUQAT/T8xzsILsghXC1o8gJUqe3RHlcDqagu+biFpYQ61KQrZZJza8eRSYqw==} + deprecated: Deprecated in favor of '@metamask/eth-sig-util' + dependencies: + ethereumjs-abi: github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0 + ethereumjs-util: 5.2.1 + dev: true + + /ethereum-common/0.0.18: + resolution: {integrity: sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==} + dev: true + + /ethereum-common/0.2.0: + resolution: {integrity: sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==} + dev: true + /ethereum-cryptography/0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} dependencies: @@ -7114,7 +7418,81 @@ packages: scrypt-js: 3.0.1 secp256k1: 4.0.3 setimmediate: 1.0.5 - dev: false + + /ethereumjs-account/2.0.5: + resolution: {integrity: sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==} + dependencies: + ethereumjs-util: 5.2.1 + rlp: 2.2.7 + safe-buffer: 5.2.1 + dev: true + + /ethereumjs-block/1.7.1: + resolution: {integrity: sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==} + deprecated: 'New package name format for new versions: @ethereumjs/block. Please update.' + dependencies: + async: 2.6.4 + ethereum-common: 0.2.0 + ethereumjs-tx: 1.3.7 + ethereumjs-util: 5.2.1 + merkle-patricia-tree: 2.3.2 + dev: true + + /ethereumjs-block/2.2.2: + resolution: {integrity: sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==} + deprecated: 'New package name format for new versions: @ethereumjs/block. Please update.' + dependencies: + async: 2.6.4 + ethereumjs-common: 1.5.2 + ethereumjs-tx: 2.1.2 + ethereumjs-util: 5.2.1 + merkle-patricia-tree: 2.3.2 + dev: true + + /ethereumjs-common/1.5.2: + resolution: {integrity: sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==} + deprecated: 'New package name format for new versions: @ethereumjs/common. Please update.' + dev: true + + /ethereumjs-tx/1.3.7: + resolution: {integrity: sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==} + deprecated: 'New package name format for new versions: @ethereumjs/tx. Please update.' + dependencies: + ethereum-common: 0.0.18 + ethereumjs-util: 5.2.1 + dev: true + + /ethereumjs-tx/2.1.2: + resolution: {integrity: sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==} + deprecated: 'New package name format for new versions: @ethereumjs/tx. Please update.' + dependencies: + ethereumjs-common: 1.5.2 + ethereumjs-util: 6.2.1 + dev: true + + /ethereumjs-util/5.2.1: + resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==} + dependencies: + bn.js: 5.2.1 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + safe-buffer: 5.2.1 + dev: true + + /ethereumjs-util/6.2.1: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 5.2.1 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + dev: true /ethereumjs-util/7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} @@ -7127,6 +7505,31 @@ packages: rlp: 2.2.7 dev: false + /ethereumjs-vm/2.6.0: + resolution: {integrity: sha512-r/XIUik/ynGbxS3y+mvGnbOKnuLo40V5Mj1J25+HEO63aWYREIqvWeRO/hnROlMBE5WoniQmPmhiaN0ctiHaXw==} + deprecated: 'New package name format for new versions: @ethereumjs/vm. Please update.' + dependencies: + async: 2.6.4 + async-eventemitter: 0.2.4 + ethereumjs-account: 2.0.5 + ethereumjs-block: 2.2.2 + ethereumjs-common: 1.5.2 + ethereumjs-util: 6.2.1 + fake-merkle-patricia-tree: 1.0.1 + functional-red-black-tree: 1.0.1 + merkle-patricia-tree: 2.3.2 + rustbn.js: 0.2.0 + safe-buffer: 5.2.1 + dev: true + + /ethjs-util/0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + dev: true + /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -7139,7 +7542,6 @@ packages: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: false /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -7233,6 +7635,10 @@ packages: transitivePeerDependencies: - supports-color + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + /extension-port-stream/2.0.1: resolution: {integrity: sha512-ltrv4Dh/979I04+D4Te6TFygfRSOc5EBzzlHRldWMS8v73V80qWluxH88hqF0qyUsBXTb8NmzlmSipcre6a+rg==} engines: {node: '>=12.0.0'} @@ -7240,11 +7646,22 @@ packages: webextension-polyfill-ts: 0.22.0 dev: true + /extsprintf/1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: true + /eyes/0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} dev: false + /fake-merkle-patricia-tree/1.0.1: + resolution: {integrity: sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==} + dependencies: + checkpoint-store: 1.1.0 + dev: true + /fast-deep-equal/2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} dev: true @@ -7557,6 +7974,10 @@ packages: es-abstract: 1.21.1 functions-have-names: 1.2.3 + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -7597,6 +8018,12 @@ packages: call-bind: 1.0.2 get-intrinsic: 1.2.0 + /getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: true + /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} @@ -7688,6 +8115,13 @@ packages: kind-of: 6.0.3 which: 1.3.1 + /global/4.4.0: + resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} + dependencies: + min-document: 2.19.0 + process: 0.11.10 + dev: true + /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} @@ -7735,6 +8169,20 @@ packages: /handle-thing/2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + /har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: true + + /har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + dev: true + /harmony-reflect/1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} @@ -7781,14 +8229,12 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: false /hash.js/1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 - dev: false /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -7800,7 +8246,6 @@ packages: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 - dev: false /hoist-non-react-statics/3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -7930,6 +8375,15 @@ packages: transitivePeerDependencies: - debug + /http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.17.0 + dev: true + /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -7990,12 +8444,15 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: false /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /immediate/3.3.0: + resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + dev: true + /immer/9.0.19: resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} @@ -8117,10 +8574,14 @@ packages: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} + /is-fn/1.0.0: + resolution: {integrity: sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==} + engines: {node: '>=0.10.0'} + dev: true + /is-fullwidth-code-point/2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} - dev: false /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -8131,6 +8592,10 @@ packages: engines: {node: '>=12'} dev: true + /is-function/1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: true + /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} @@ -8148,6 +8613,11 @@ packages: dependencies: is-extglob: 2.1.1 + /is-hex-prefixed/1.0.0: + resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} + engines: {node: '>=6.5.0', npm: '>=3'} + dev: true + /is-map/2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -8301,6 +8771,10 @@ packages: ws: 7.5.9 dev: false + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true + /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} engines: {node: '>=8'} @@ -8930,7 +9404,6 @@ packages: /js-sha3/0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} - dev: false /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -8952,6 +9425,10 @@ packages: resolution: {integrity: sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ==} dev: false + /jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true + /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -8964,6 +9441,13 @@ packages: /json-parse-even-better-errors/2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + /json-rpc-engine/5.4.0: + resolution: {integrity: sha512-rAffKbPoNDjuRnXkecTjnsE3xLLrb00rEkdgalINhaYVYIxDwWtvYBr9UFbhTvPB1B2qUOLoFd/cV6f4Q7mh7g==} + dependencies: + eth-rpc-errors: 3.0.0 + safe-event-emitter: 1.0.1 + dev: true + /json-rpc-engine/6.1.0: resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} engines: {node: '>=10.0.0'} @@ -8982,7 +9466,6 @@ packages: /json-rpc-random-id/1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} - dev: false /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -9000,11 +9483,9 @@ packages: resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} dependencies: jsonify: 0.0.1 - dev: false /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: false /json5/1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -9026,7 +9507,6 @@ packages: /jsonify/0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: false /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -9037,6 +9517,16 @@ packages: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} + /jsprim/1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: true + /jsqr/1.4.0: resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==} dev: false @@ -9060,7 +9550,6 @@ packages: /keyvaluestorage-interface/1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} - dev: false /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -9086,6 +9575,44 @@ packages: dependencies: language-subtag-registry: 0.3.22 + /level-codec/7.0.1: + resolution: {integrity: sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==} + dev: true + + /level-errors/1.0.5: + resolution: {integrity: sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==} + dependencies: + errno: 0.1.8 + dev: true + + /level-iterator-stream/1.3.1: + resolution: {integrity: sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==} + dependencies: + inherits: 2.0.4 + level-errors: 1.0.5 + readable-stream: 1.0.34 + xtend: 4.0.2 + dev: true + + /level-ws/0.0.0: + resolution: {integrity: sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==} + dependencies: + readable-stream: 1.0.34 + xtend: 2.1.2 + dev: true + + /levelup/1.3.9: + resolution: {integrity: sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==} + dependencies: + deferred-leveldown: 1.2.2 + level-codec: 7.0.1 + level-errors: 1.0.5 + level-iterator-stream: 1.3.1 + prr: 1.0.1 + semver: 5.4.1 + xtend: 4.0.2 + dev: true + /leven/2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} engines: {node: '>=0.10.0'} @@ -9279,6 +9806,10 @@ packages: engines: {node: '>=12'} dev: true + /ltgt/2.2.1: + resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} + dev: true + /lz-string/1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true @@ -9318,7 +9849,6 @@ packages: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false /mdn-data/2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -9330,6 +9860,17 @@ packages: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} + /memdown/1.4.1: + resolution: {integrity: sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==} + dependencies: + abstract-leveldown: 2.7.2 + functional-red-black-tree: 1.0.1 + immediate: 3.3.0 + inherits: 2.0.4 + ltgt: 2.2.1 + safe-buffer: 5.1.2 + dev: true + /memfs/3.4.13: resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} engines: {node: '>= 4.0.0'} @@ -9350,6 +9891,19 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /merkle-patricia-tree/2.3.2: + resolution: {integrity: sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g==} + dependencies: + async: 1.5.2 + ethereumjs-util: 5.2.1 + level-ws: 0.0.0 + levelup: 1.3.9 + memdown: 1.4.1 + readable-stream: 2.3.8 + rlp: 2.2.7 + semaphore: 1.1.0 + dev: true + /methods/1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} @@ -9393,6 +9947,12 @@ packages: engines: {node: '>=12'} dev: true + /min-document/2.19.0: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: true + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -9412,7 +9972,6 @@ packages: /minimalistic-crypto-utils/1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} - dev: false /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -9597,7 +10156,6 @@ packages: /node-addon-api/2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} - dev: false /node-fetch/2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} @@ -9609,7 +10167,6 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 - dev: false /node-forge/1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} @@ -9618,7 +10175,6 @@ packages: /node-gyp-build/4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true - dev: false /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -9710,6 +10266,10 @@ packages: capability: 0.2.5 dev: false + /oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: true + /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -9728,6 +10288,10 @@ packages: call-bind: 1.0.2 define-properties: 1.2.0 + /object-keys/0.4.0: + resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} + dev: true + /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -9910,6 +10474,10 @@ packages: safe-buffer: 5.2.1 dev: false + /parse-headers/2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + dev: true + /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -9986,7 +10554,6 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 - dev: false /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -10026,11 +10593,21 @@ packages: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: true + /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} dev: true + /pify/5.0.0: + resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} + engines: {node: '>=10'} + dev: true + /pino-abstract-transport/0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} dependencies: @@ -10090,7 +10667,6 @@ packages: /pngjs/3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} - dev: false /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.21: resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} @@ -10799,7 +11375,11 @@ packages: /preact/10.4.1: resolution: {integrity: sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==} - dev: false + + /precond/0.2.3: + resolution: {integrity: sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==} + engines: {node: '>= 0.6'} + dev: true /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -10863,7 +11443,14 @@ packages: /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} - dev: false + + /promise-to-callback/1.0.0: + resolution: {integrity: sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==} + engines: {node: '>=0.10.0'} + dependencies: + is-fn: 1.0.0 + set-immediate-shim: 1.0.1 + dev: true /promise/8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -10895,6 +11482,14 @@ packages: forwarded: 0.2.0 ipaddr.js: 1.9.1 + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + /public-encrypt/4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} dependencies: @@ -10946,7 +11541,6 @@ packages: isarray: 2.0.5 pngjs: 3.4.0 yargs: 13.3.2 - dev: false /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} @@ -10961,6 +11555,20 @@ packages: side-channel: 1.0.4 dev: false + /qs/6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: true + + /query-string/6.13.5: + resolution: {integrity: sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==} + engines: {node: '>=6'} + dependencies: + decode-uri-component: 0.2.2 + split-on-first: 1.1.0 + strict-uri-encode: 2.0.0 + dev: true + /query-string/7.1.1: resolution: {integrity: sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==} engines: {node: '>=6'} @@ -11417,6 +12025,33 @@ packages: lodash: 4.17.21 strip-ansi: 6.0.1 + /request/2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + dev: true + /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -11427,7 +12062,6 @@ packages: /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: false /requireindex/1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} @@ -11551,14 +12185,12 @@ packages: dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: false /rlp/2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true dependencies: bn.js: 5.2.1 - dev: false /rollup-plugin-terser/7.0.2_rollup@2.79.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} @@ -11603,6 +12235,10 @@ packages: dependencies: queue-microtask: 1.2.3 + /rustbn.js/0.2.0: + resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} + dev: true + /rxjs-report-usage/1.0.6: resolution: {integrity: sha512-omv1DIv5z1kV+zDAEjaDjWSkx8w5TbFp5NZoPwUipwzYVcor/4So9ZU3bUyQ1c8lxY5Q0Es/ztWW7PGjY7to0Q==} hasBin: true @@ -11636,6 +12272,13 @@ packages: /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-event-emitter/1.0.1: + resolution: {integrity: sha512-e1wFe99A91XYYxoQbcq2ZJUWurxEyP8vfz7A7vuUe1s95q8r5ebraVaA1BukYJcpM6V16ugWoD9vngi8Ccu5fg==} + deprecated: Renamed to @metamask/safe-event-emitter + dependencies: + events: 3.3.0 + dev: true + /safe-json-utils/1.1.1: resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} dev: false @@ -11741,7 +12384,6 @@ packages: /scrypt-js/3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - dev: false /sdp/2.12.0: resolution: {integrity: sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==} @@ -11771,7 +12413,6 @@ packages: elliptic: 6.5.4 node-addon-api: 2.0.2 node-gyp-build: 4.6.0 - dev: false /select-hose/2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -11782,6 +12423,16 @@ packages: dependencies: node-forge: 1.3.1 + /semaphore/1.1.0: + resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} + engines: {node: '>=0.8.0'} + dev: true + + /semver/5.4.1: + resolution: {integrity: sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==} + hasBin: true + dev: true + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -11867,11 +12518,14 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: false + + /set-immediate-shim/1.0.1: + resolution: {integrity: sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==} + engines: {node: '>=0.10.0'} + dev: true /setimmediate/1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: false /setprototypeof/1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -11885,7 +12539,6 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: false /shallowequal/1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -12086,7 +12739,6 @@ packages: /split-on-first/1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} - dev: false /split2/4.1.0: resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} @@ -12096,6 +12748,22 @@ packages: /sprintf-js/1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + /sshpk/1.17.0: + resolution: {integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + /stack-trace/0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: true @@ -12143,7 +12811,6 @@ packages: /strict-uri-encode/2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} - dev: false /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} @@ -12174,7 +12841,6 @@ packages: emoji-regex: 7.0.3 is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 - dev: false /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -12246,7 +12912,6 @@ packages: engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 - dev: false /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -12281,6 +12946,13 @@ packages: engines: {node: '>=12'} dev: true + /strip-hex-prefix/1.0.0: + resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + dev: true + /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -12544,7 +13216,6 @@ packages: /toggle-selection/1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} - dev: false /toidentifier/1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} @@ -12555,9 +13226,16 @@ packages: engines: {node: '>=6'} dev: true + /tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.0 + dev: true + /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -12655,6 +13333,16 @@ packages: tslib: 1.14.1 typescript: 4.9.5 + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + /tweetnacl/1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: false @@ -12811,6 +13499,12 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true + /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -12837,6 +13531,15 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + /verror/1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: true + /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -12860,6 +13563,39 @@ packages: dependencies: minimalistic-assert: 1.0.1 + /web3-provider-engine/16.0.1_@babel+core@7.21.0: + resolution: {integrity: sha512-/Eglt2aocXMBiDj7Se/lyZnNDaHBaoJlaUfbP5HkLJQC/HlGbR+3/W+dINirlJDhh7b54DzgykqY7ksaU5QgTg==} + dependencies: + async: 2.6.4 + backoff: 2.5.0 + clone: 2.1.2 + cross-fetch: 2.2.6 + eth-block-tracker: 4.4.3_@babel+core@7.21.0 + eth-json-rpc-filters: 4.2.2 + eth-json-rpc-infura: 5.1.0 + eth-json-rpc-middleware: 6.0.0 + eth-rpc-errors: 3.0.0 + eth-sig-util: 1.4.2 + ethereumjs-block: 1.7.1 + ethereumjs-tx: 1.3.7 + ethereumjs-util: 5.2.1 + ethereumjs-vm: 2.6.0 + json-stable-stringify: 1.0.2 + promise-to-callback: 1.0.0 + readable-stream: 2.3.8 + request: 2.88.2 + semaphore: 1.1.0 + ws: 5.2.3 + xhr: 2.6.0 + xtend: 4.0.2 + transitivePeerDependencies: + - '@babel/core' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /webextension-polyfill-ts/0.22.0: resolution: {integrity: sha512-3P33ClMwZ/qiAT7UH1ROrkRC1KM78umlnPpRhdC/292UyoTTW9NcjJEqDsv83HbibcTB6qCtpVeuB2q2/oniHQ==} deprecated: This project has moved to @types/webextension-polyfill @@ -12880,7 +13616,6 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -13064,6 +13799,10 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} + /whatwg-fetch/2.0.4: + resolution: {integrity: sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==} + dev: true + /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} @@ -13072,7 +13811,6 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: false /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -13100,7 +13838,6 @@ packages: /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} - dev: false /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -13312,7 +14049,6 @@ packages: ansi-styles: 3.2.1 string-width: 3.1.0 strip-ansi: 5.2.0 - dev: false /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -13349,6 +14085,33 @@ packages: imurmurhash: 0.1.4 signal-exit: 3.0.7 + /ws/5.2.3: + resolution: {integrity: sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + dev: true + + /ws/7.5.3: + resolution: {integrity: sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} @@ -13402,18 +14165,39 @@ packages: utf-8-validate: 5.0.10 dev: false + /xhr/2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + dev: true + + /xhr2-cookies/1.1.0: + resolution: {integrity: sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==} + dependencies: + cookiejar: 2.1.4 + dev: true + /xmlhttprequest-ssl/2.0.0: resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} engines: {node: '>=0.4.0'} dev: false + /xtend/2.1.2: + resolution: {integrity: sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==} + engines: {node: '>=0.4'} + dependencies: + object-keys: 0.4.0 + dev: true + /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: false /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -13439,7 +14223,6 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: false /yargs-parser/20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} @@ -13473,7 +14256,6 @@ packages: which-module: 2.0.0 y18n: 4.0.3 yargs-parser: 13.1.2 - dev: false /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} @@ -13508,3 +14290,12 @@ packages: /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + + github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0: + resolution: {tarball: https://codeload.github.com/ethereumjs/ethereumjs-abi/tar.gz/ee3994657fa7a427238e6ba92a84d0b529bbcde0} + name: ethereumjs-abi + version: 0.6.8 + dependencies: + bn.js: 5.2.1 + ethereumjs-util: 6.2.1 + dev: true diff --git a/public/index.html b/public/index.html index 63d4bf9..a5712ad 100644 --- a/public/index.html +++ b/public/index.html @@ -320,7 +320,7 @@ "EthereumGoerli", ], enabledVerificationTypes: ["KYC"], - // evmProvider: false ? walletConnectEvmProvider : window.ethereum, + // evmProvider: walletConnectOn ? "walletConnect" : "ethereum", baseUrl: "https://staging.kycdao.xyz", }, onReady: (sdkInstance) => { @@ -340,6 +340,8 @@ } } + console.log("SDK instance", nftCheckInterval) + nftCheckInterval = setInterval(writeNFT, 1000) }, onSuccess: (data) => { @@ -353,7 +355,7 @@ }, }) - globalThis.selectorHndlr = function (selectedChain, walletConnectOn) { + window.selectorHndlr = function (selectedChain, walletConnectOn) { console.log(walletConnectOn) if (mode === "integrated") { client.open( @@ -362,14 +364,14 @@ ) } else if (mode === "iframe") { iFrameClient.open( - selectedChain - // walletConnectOn ? walletConnectEvmProvider : window.ethereum + selectedChain, + walletConnectOn ? "walletConnect" : "ethereum" ) } } if (autostart) { - walletConnectOn = false + const walletConnectOn = false const chains = [ "PolygonMumbai", diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 3e38579..3b5f7f4 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -5,7 +5,13 @@ import { KycDaoInitializationResult, SdkConfiguration, } from "@kycdao/kycdao-sdk" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" +import { + KycDaoClientMessage, + KycDaoClientMessageBody, + KycDaoClientMessageTypes, + KycDaoClientRegisterOrLogin, + nearNetworkRegex, +} from "./KycDaoClientCommon" import { useMemo, useEffect, @@ -78,6 +84,9 @@ const AppContainerRender: ForwardRefRenderFunction< useEffect(() => { if (kycDao) { ;(async () => { + let modalTimeout + const [currentChain] = config.enabledBlockchainNetworks + try { dispatch({ type: DataActionTypes.SetLoadingMessage, @@ -90,7 +99,7 @@ const AppContainerRender: ForwardRefRenderFunction< payload: isModal, }) - const modalTimeout = setTimeout(() => { + modalTimeout = setTimeout(() => { dispatch({ type: DataActionTypes.ShowModal, payload: { @@ -102,14 +111,30 @@ const AppContainerRender: ForwardRefRenderFunction< }) }, 5000) - await kycDao.kycDao.connectWallet( - getNetworkType(config.enabledBlockchainNetworks[0]) + nearNetworkRegex.lastIndex = 0 + + //TODO Make this foolproof + const isNearLoggedIn = Object.keys(localStorage).find((value) => + /near-api-js:keystore:(.*)/g.test(value) ) - dispatch({ - type: DataActionTypes.SetLoadingMessage, - payload: "", - }) + if ( + nearNetworkRegex.test(currentChain) && + iframeOptions?.messageTargetOrigin === window.location.origin && + !isNearLoggedIn + ) { + window.parent.postMessage( + { + type: KycDaoClientMessageTypes.kycDaoRegisterOrLogin, + data: { chainNetwork: [currentChain] }, + } as KycDaoClientRegisterOrLogin, + messageTargetOrigin + ) + + return + } + + await kycDao.kycDao.connectWallet(getNetworkType(currentChain)) dispatch({ type: DataActionTypes.HideModal, @@ -161,7 +186,7 @@ const AppContainerRender: ForwardRefRenderFunction< case "NearUserRejectedError": window.parent.postMessage( { - type: "kycDaoCloseModal", + type: KycDaoClientMessageTypes.kycDaoCloseModal, } as KycDaoClientMessageBody, messageTargetOrigin ) @@ -186,7 +211,27 @@ const AppContainerRender: ForwardRefRenderFunction< } } } else { + nearNetworkRegex.lastIndex = 0 + + if ( + nearNetworkRegex.test(currentChain) && + iframeOptions?.messageTargetOrigin === window.location.origin + ) { + window.parent.postMessage( + { + origin: iframeOptions.messageTargetOrigin, + data: { + type: KycDaoClientMessageTypes.kycDaoRegisterOrLogin, + }, + } as KycDaoClientMessage, + messageTargetOrigin + ) + + return + } + await kycDao.kycDao.registerOrLogin() + const { subscribed } = kycDao.kycDao if (subscribed) { @@ -204,9 +249,15 @@ const AppContainerRender: ForwardRefRenderFunction< }) } } catch (error) { + clearTimeout(modalTimeout) errorHandler("fatal", error, dispatch, messageTargetOrigin) } + dispatch({ + type: DataActionTypes.SetLoadingMessage, + payload: "", + }) + dispatch({ type: DataActionTypes.StartFlow }) })() } @@ -238,7 +289,7 @@ const AppContainerRender: ForwardRefRenderFunction< if (data.isProcessSuccess) { window.parent.postMessage( { - type: "kycDaoSuccess", + type: KycDaoClientMessageTypes.kycDaoSuccess, data: data.alreadyHaveAnNftOnThisChain && !data.nearMinted ? `Already has an nft on ${kycDao?.kycDao.connectedWallet?.blockchainNetwork}.` @@ -248,7 +299,9 @@ const AppContainerRender: ForwardRefRenderFunction< ) } else { window.parent.postMessage( - { type: "kycDaoCloseModal" } as KycDaoClientMessageBody, + { + type: KycDaoClientMessageTypes.kycDaoCloseModal, + } as KycDaoClientMessageBody, messageTargetOrigin ) } diff --git a/src/BootstrapKycDaoModal.tsx b/src/BootstrapKycDaoModal.tsx index a4f934c..3d8358e 100644 --- a/src/BootstrapKycDaoModal.tsx +++ b/src/BootstrapKycDaoModal.tsx @@ -5,7 +5,6 @@ import { SdkConfiguration, } from "@kycdao/kycdao-sdk" import { ErrorBoundary } from "react-error-boundary" -import buffer from "buffer" import { BlockchainNetwork, KycDaoEnvironment, @@ -13,12 +12,7 @@ import { } from "@kycdao/kycdao-sdk/dist/types" import { ErrorPageFactory } from "./pages" -// don't know why this stopped working, so I do a manual polyfill - -if (!window.Buffer) { - //eslint-disable-next-line @typescript-eslint/no-explicit-any - ;(window as any).Buffer = (buffer as any).Buffer -} +import WalletConnectProvider from "@walletconnect/web3-provider/dist/esm" // https://prod-test.kycdao.xyz @@ -72,12 +66,31 @@ export function BootstrapKycDaoModal({ ) } -export type EvmProvidersT = "ethereum" +export type EvmProvidersT = "ethereum" | "walletConnect" const EvmProviders: { [index in EvmProvidersT]: unknown } = { ethereum: window.ethereum, + walletConnect: new WalletConnectProvider({ + rpc: { + 1: "https://rpc.ankr.com/eth", + 5: "https://rpc.ankr.com/eth_goerli", + 137: "https://rpc-mainnet.maticvigil.com/", + 80001: "https://rpc-mumbai.maticvigil.com/", + 44787: "https://alfajores-forno.celo-testnet.org", + }, + chainId: 80001, + // qrcodeModalOptions: { + // desktopLinks: [ + // 'ledger', + // 'zerion', + // ], + // mobileLinks: [ + // "metamask", + // ], + // } + }), } export function BootstrapIframeKycDaoModal({ diff --git a/src/KycDaoClient.ts b/src/KycDaoClient.ts index 4b814bb..af76e14 100644 --- a/src/KycDaoClient.ts +++ b/src/KycDaoClient.ts @@ -117,8 +117,12 @@ export class KycDaoClient implements KycDaoClientInterface { console.log(WelcomeString) - const nearNetwork = this.config.enabledBlockchainNetworks.find((network) => - nearNetworkRegex.test(network) + const nearNetwork = this.config.enabledBlockchainNetworks.find( + (network) => { + nearNetworkRegex.lastIndex = 0 + + return nearNetworkRegex.test(network) + } ) if (nearNetwork && nearRedirectCheck()) { diff --git a/src/KycDaoClientCommon.ts b/src/KycDaoClientCommon.ts index 0bf92c5..8c36605 100644 --- a/src/KycDaoClientCommon.ts +++ b/src/KycDaoClientCommon.ts @@ -1,17 +1,22 @@ -import type { +import { BlockchainNetwork, SdkConfiguration, KycDaoInitializationResult, + KycDao, } from "@kycdao/kycdao-sdk" import type { KycDaoEnvironment, VerificationType, } from "@kycdao/kycdao-sdk/dist/types" -export type KycDaoClientMessages = - | "kycDaoCloseModal" - | "kycDaoSuccess" - | "kycDaoFail" +export enum KycDaoClientMessageTypes { + "kycDaoCloseModal", + "kycDaoSuccess", + "kycDaoFail", + "kycDaoCancelled", + "kycDaoRegisterOrLogin", + "kycDaoMint", +} export const errorPrefix = "Wallet callback handling error" @@ -21,36 +26,71 @@ export const knownNearQueryParams = { transactionHashes: "NearMint", } -export const nearNetworkRegex = /Near*./g +export const nearNetworkRegex = /.*Near*./g export type KycDaoClientMessageHandler = (message: KycDaoClientMessage) => void export function messageHndlr( this: KycDaoClientInterface, - { data: { data, type } }: KycDaoClientMessage + { data: { type, data }, origin }: KycDaoClientMessage ) { - switch (type) { - case "kycDaoCloseModal": - if (this.onFail) { - this.onFail("cancelled") - } - if (this.isOpen) { + if (origin === window.location.origin) + switch (type) { + case KycDaoClientMessageTypes.kycDaoCancelled: + case KycDaoClientMessageTypes.kycDaoCloseModal: + if (this.onFail) { + this.onFail("cancelled") + } this.close() - } - break - case "kycDaoSuccess": - this.isSuccessful = true - if (this.onSuccess) { - this.onSuccess(data) + return + case KycDaoClientMessageTypes.kycDaoSuccess: + this.isSuccessful = true + if (this.onSuccess) { + this.onSuccess(data as string) + } this.close() + return + case KycDaoClientMessageTypes.kycDaoFail: { + if (this.onFail) { + this.onFail(data as string) + } + return + } + case KycDaoClientMessageTypes.kycDaoMint: { + KycDao.initialize(this.config) + .then((result) => { + result.kycDao.startMinting({ + disclaimerAccepted: true, + imageId: "", + subscriptionYears: 1, + verificationType: "KYC", + }) + }) + .catch((error) => { + alert(error) + }) + + return } - break - case "kycDaoFail": { - if (this.onFail) { - this.onFail(data) + case KycDaoClientMessageTypes.kycDaoRegisterOrLogin: { + const chainNetwork = (data as KycDaoClientRegisterOrLogin["data"]) + ?.chainNetwork + if (chainNetwork) { + const config = { ...this.config } + config.enabledBlockchainNetworks = chainNetwork + + KycDao.initialize(config) + .then((result) => { + result.kycDao.connectWallet("Near") + result.kycDao.registerOrLogin() + }) + .catch((error) => { + alert(error) + }) + return + } } } - } } /** @@ -72,8 +112,8 @@ export type KycDaoClientInterface = { isSuccessful: boolean configFromUrl?: boolean backdrop: boolean - onFail?: (reason?: string) => void - onSuccess?: (data?: string) => void + onFail?: (reason: string) => void + onSuccess?: (data: string) => void open: ( blockchain?: BlockchainNetwork, ethProvider?: KycDaoClientOptions["config"]["evmProvider"] @@ -177,10 +217,37 @@ export type KycDaoClientIFrameUrlParameters = { export type KycDaoClientMessageBody = { data?: string - type: KycDaoClientMessages + type: KycDaoClientMessageTypes +} + +export type KycDaoClientRegisterOrLogin = { + data?: { chainNetwork: SdkConfiguration["enabledBlockchainNetworks"] } + type: KycDaoClientMessageTypes +} + +export type KycDaoClientMint = { + data: KycDaoClientMint + type: KycDaoClientMessageTypes.kycDaoMint +} + +export type KycDaoClientSuccess = { + data: string + type: KycDaoClientMessageTypes.kycDaoSuccess +} + +export type KycDaoClientFail = { + data: KycDaoClientFail + type: KycDaoClientMessageTypes.kycDaoFail } export type KycDaoClientMessage = { origin: string - data: KycDaoClientMessageBody + data: + | KycDaoClientMessageBody + | KycDaoClientRegisterOrLogin + | KycDaoClientMint + | KycDaoClientSuccess + | KycDaoClientFail } + +export type KycDaoClientMessages = KycDaoClientMessage diff --git a/src/KycDaoIframeClient.ts b/src/KycDaoIframeClient.ts index 2a0b57b..a7816be 100644 --- a/src/KycDaoIframeClient.ts +++ b/src/KycDaoIframeClient.ts @@ -125,8 +125,12 @@ export class KycDaoIframeClient implements KycDaoClientInterface { console.log(WelcomeString) - const nearNetwork = this.config.enabledBlockchainNetworks.find((network) => - nearNetworkRegex.test(network) + const nearNetwork = this.config.enabledBlockchainNetworks.find( + (network) => { + nearNetworkRegex.lastIndex = 0 + + return nearNetworkRegex.test(network) + } ) if (nearNetwork && nearRedirectCheck()) { @@ -136,7 +140,10 @@ export class KycDaoIframeClient implements KycDaoClientInterface { } } - open(blockchain?: BlockchainNetwork) { + open( + blockchain?: BlockchainNetwork, + ethProvider?: KycDaoClientOptions["config"]["evmProvider"] + ) { if (!this.iframeOptions) { throw new Error("iframeOptions are not set!") } @@ -149,10 +156,13 @@ export class KycDaoIframeClient implements KycDaoClientInterface { if (!this.isOpen) { const config = { ...this.config } as SdkConfiguration + const [currentChain] = config.enabledBlockchainNetworks - config.enabledBlockchainNetworks = blockchain - ? [blockchain] - : [this.config.enabledBlockchainNetworks[0]] + config.enabledBlockchainNetworks = [blockchain || currentChain] + + if (ethProvider) { + config.evmProvider = ethProvider + } const params = new URLSearchParams() const paramSetter = ({ 0: key, 1: value }: { 0?: string; 1?: string }) => @@ -217,25 +227,25 @@ export class KycDaoIframeClient implements KycDaoClientInterface { } close() { - if (this.isOpen) { - if (this.modal) { - const parentNode = this.getParentElement() + if (this.isOpen && this.modal) { + const parentNode = this.getParentElement() - if (this.isModal) { - parentNode.classList.remove("KycDaoIframeModalRoot") - parentNode.style.setProperty("z-index", this.originalParentZIndex) + if (this.isModal) { + parentNode.classList.remove("KycDaoIframeModalRoot") + parentNode.style.setProperty("z-index", this.originalParentZIndex) - if (this.backdrop) { - parentNode.style.setProperty("--kyc-dao-backdrop", null) - } + if (this.backdrop) { + parentNode.style.setProperty("--kyc-dao-backdrop", null) } + } - if (parentNode) { - parentNode.removeChild(this.modal) - } - window.removeEventListener("message", messageHndlr.bind(this)) - this.isOpen = false + this.container?.remove() + + if (parentNode) { + parentNode.removeChild(this.modal) } + window.removeEventListener("message", messageHndlr.bind(this)) + this.isOpen = false } } } diff --git a/src/components/appStyleContainer/index.ts b/src/components/appStyleContainer/index.ts index d292873..833ffbe 100644 --- a/src/components/appStyleContainer/index.ts +++ b/src/components/appStyleContainer/index.ts @@ -1,6 +1,20 @@ import styled from "styled-components/macro" export const AppStyleContainer = styled.div` + .material-icons { + font-family: "Material Icons"; + font-weight: normal; + font-style: normal; + font-size: 24px; + line-height: 1; + letter-spacing: normal; + text-transform: none; + white-space: nowrap; + word-wrap: normal; + direction: ltr; + font-feature-settings: liga; + -webkit-font-smoothing: antialiased; + } font-size: 12px; --kyc-sdk-primary-font: neue-machina; @@ -211,26 +225,11 @@ export const AppStyleContainer = styled.div` /* fallback */ @font-face { - font-family: Material Icons; + font-family: "Material Icons"; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/materialicons/v139/flUhRq6tzZclQEJ-Vdg-IuiaDsNc.woff2) format("woff2"); font-display: block; } - - .material-icons { - font-family: Material Icons; - font-weight: normal; - font-style: normal; - font-size: 24px; - line-height: 1; - letter-spacing: normal; - text-transform: none; - white-space: nowrap; - word-wrap: normal; - direction: ltr; - font-feature-settings: liga; - -webkit-font-smoothing: antialiased; - } ` diff --git a/src/components/typography/index.ts b/src/components/typography/index.ts index 0e89070..1be9b77 100644 --- a/src/components/typography/index.ts +++ b/src/components/typography/index.ts @@ -9,7 +9,7 @@ export const tr2 = css` ` export const materialIcon = css` - font-family: Material Icons; + font-family: "Material Icons"; font-weight: normal; font-style: normal; font-size: 24px; diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index 6a1824a..3e32c59 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -3,7 +3,10 @@ import { DataChangeActions, StateContext, } from "@Components/stateContext" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" +import { + KycDaoClientMessageBody, + KycDaoClientMessageTypes, +} from "../KycDaoClientCommon" import { useContext } from "react" function getErrorText(error: unknown) { @@ -25,7 +28,7 @@ export function errorHandler( if (/\[RejectedByUser\]/g.test(errorText)) { window.parent.postMessage( { - type: "kycDaoCloseModal", + type: KycDaoClientMessageTypes.kycDaoCloseModal, data: errorText, } as KycDaoClientMessageBody, messageTargetOrigin diff --git a/src/pages/ErrorPage.tsx b/src/pages/ErrorPage.tsx index 161f557..480076e 100644 --- a/src/pages/ErrorPage.tsx +++ b/src/pages/ErrorPage.tsx @@ -1,6 +1,9 @@ import { CloseOnlyHeader } from "@Components/header/closeOnlyHeader" import { Step, H1, P, Button } from "@Components/index" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" +import { + KycDaoClientMessageBody, + KycDaoClientMessageTypes, +} from "../KycDaoClientCommon" import { useCallback } from "react" import { FallbackProps } from "react-error-boundary" @@ -18,7 +21,9 @@ export const ErrorPageFactory = (messageTargetOrigin: string) => const onClose = useCallback(() => { window.parent.postMessage( - { type: "kycDaoCloseModal" } as KycDaoClientMessageBody, + { + type: KycDaoClientMessageTypes.kycDaoCloseModal, + } as KycDaoClientMessageBody, messageTargetOrigin ) }, []) diff --git a/src/pages/fatalErrorStep.tsx b/src/pages/fatalErrorStep.tsx index bf09f57..75271ac 100644 --- a/src/pages/fatalErrorStep.tsx +++ b/src/pages/fatalErrorStep.tsx @@ -22,18 +22,12 @@ export const FatalErrorStep: FC = ({ const ResetApp = useContext(RestartContext) - const { body, header } = error - ? error - : { - header: "Something went wrong!", - body: "An unknown, fatal error happened!", - } - - const Header = () =>

{header}

+ const Header = useCallback( + () =>

{error?.header || "Something went wrong!"}

, + [error?.header] + ) - const startAgain = useCallback(() => { - ResetApp() - }, [ResetApp]) + const startAgain = useCallback(ResetApp, [ResetApp]) useEffect(() => { dispatch({ @@ -53,10 +47,10 @@ export const FatalErrorStep: FC = ({ const modalBody = useCallback( () => (
-

{body}

+

{error?.body || "An unknown, fatal error happened!"}

), - [body] + [error?.body] ) const footer = useCallback( diff --git a/src/pages/finalStep.tsx b/src/pages/finalStep.tsx index 7af8d93..441c274 100644 --- a/src/pages/finalStep.tsx +++ b/src/pages/finalStep.tsx @@ -16,7 +16,10 @@ import { StepPart, SubmitButton, } from "@Components/index" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" +import { + KycDaoClientMessageBody, + KycDaoClientMessageTypes, +} from "../KycDaoClientCommon" import useErrorHandler from "@Hooks/errorHandler" import { TwitterShareButton } from "react-twitter-embed" @@ -148,7 +151,7 @@ export const FinalStep: FC = ({ if (alreadyHaveAnNftOnThisChain) { window.parent.postMessage( { - type: "kycDaoSuccess", + type: KycDaoClientMessageTypes.kycDaoSuccess, data: `Already has an nft on ${kycDao?.kycDao.connectedWallet?.blockchainNetwork}.`, } as KycDaoClientMessageBody, messageTargetOrigin @@ -156,7 +159,7 @@ export const FinalStep: FC = ({ } else { window.parent.postMessage( { - type: "kycDaoSuccess", + type: KycDaoClientMessageTypes.kycDaoSuccess, data: chainExplorerUrl, } as KycDaoClientMessageBody, messageTargetOrigin From d7d150e3292789f9e7e693d8028a51dd7ef22a3a Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 10 Mar 2023 11:32:17 +0100 Subject: [PATCH 09/52] Add minting to Near iframe --- config-overrides.js | 2 +- src/App.tsx | 2 ++ src/AppContainer.tsx | 2 +- src/KycDaoClientCommon.ts | 15 ++++---- src/hooks/useMinting.ts | 75 ++++++++++++++++++++++++--------------- 5 files changed, 57 insertions(+), 39 deletions(-) diff --git a/config-overrides.js b/config-overrides.js index 53758e7..ef80973 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -98,7 +98,7 @@ module.exports = function override(config, env) { config.plugins.push( new webpack.ProvidePlugin({ - Buffer: ["buffer"], + Buffer: ["buffer", "Buffer"], ethereum: "ethereum", }), new webpack.DefinePlugin({ diff --git a/src/App.tsx b/src/App.tsx index c16b568..84ee7ba 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -20,6 +20,8 @@ const fontFile = new FontFace( document.fonts.add(fontFile) fontFile.load() +window.Buffer = Buffer + export type KycDaoModalProps = { width?: number | string height?: number | string diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 3b5f7f4..1b4c747 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -120,7 +120,7 @@ const AppContainerRender: ForwardRefRenderFunction< if ( nearNetworkRegex.test(currentChain) && - iframeOptions?.messageTargetOrigin === window.location.origin && + window !== window.parent && !isNearLoggedIn ) { window.parent.postMessage( diff --git a/src/KycDaoClientCommon.ts b/src/KycDaoClientCommon.ts index 8c36605..fd99721 100644 --- a/src/KycDaoClientCommon.ts +++ b/src/KycDaoClientCommon.ts @@ -6,6 +6,7 @@ import { } from "@kycdao/kycdao-sdk" import type { KycDaoEnvironment, + MintingData, VerificationType, } from "@kycdao/kycdao-sdk/dist/types" @@ -57,14 +58,13 @@ export function messageHndlr( return } case KycDaoClientMessageTypes.kycDaoMint: { + const mintingData = data as MintingData + KycDao.initialize(this.config) .then((result) => { - result.kycDao.startMinting({ - disclaimerAccepted: true, - imageId: "", - subscriptionYears: 1, - verificationType: "KYC", - }) + result.kycDao.connectWallet("Near") + result.kycDao.registerOrLogin() + result.kycDao.startMinting(mintingData) }) .catch((error) => { alert(error) @@ -87,7 +87,6 @@ export function messageHndlr( .catch((error) => { alert(error) }) - return } } } @@ -226,7 +225,7 @@ export type KycDaoClientRegisterOrLogin = { } export type KycDaoClientMint = { - data: KycDaoClientMint + data: MintingData type: KycDaoClientMessageTypes.kycDaoMint } diff --git a/src/hooks/useMinting.ts b/src/hooks/useMinting.ts index 55981d6..8f68956 100644 --- a/src/hooks/useMinting.ts +++ b/src/hooks/useMinting.ts @@ -4,6 +4,10 @@ import { useContext } from "react" import useErrorHandler from "./errorHandler" import { useKycDao } from "./useKycDao" +import { + KycDaoClientMessageTypes, + KycDaoClientMint, +} from "../KycDaoClientCommon" export const useMinting = () => { const kycDao = useKycDao() @@ -16,7 +20,7 @@ export const useMinting = () => { ) { if (kycDao) { const { - data: { termsAccepted, currentPage }, + data: { termsAccepted, currentPage, messageTargetOrigin }, dispatch, } = state @@ -25,40 +29,53 @@ export const useMinting = () => { payload: "minting", }) - try { - const result = await kycDao.kycDao.startMinting({ - disclaimerAccepted: termsAccepted || kycDao.kycDao.subscribed, - verificationType: VerificationTypes.KYC, - imageId, - subscriptionYears, - }) - if (result) { - const { imageUrl, transactionUrl } = result + const mintingData = { + disclaimerAccepted: termsAccepted || kycDao.kycDao.subscribed, + verificationType: VerificationTypes.KYC, + imageId, + subscriptionYears, + } + + if (window !== window.parent) { + window.parent.postMessage( + { + type: KycDaoClientMessageTypes.kycDaoMint, + data: mintingData, + } as KycDaoClientMint, + messageTargetOrigin + ) + } else { + try { + const result = await kycDao.kycDao.startMinting(mintingData) + + if (result) { + const { imageUrl, transactionUrl } = result + dispatch({ + type: DataActionTypes.setChainExplorerUrl, + payload: transactionUrl, + }) + dispatch({ + type: DataActionTypes.setNftImageUrl, + payload: imageUrl, + }) + } else { + throw Error("Something went wrong") + } + dispatch({ + type: DataActionTypes.HideModal, + }) dispatch({ - type: DataActionTypes.setChainExplorerUrl, - payload: transactionUrl, + type: DataActionTypes.changePage, + payload: { prev: currentPage, current: StepID.finalStep }, }) dispatch({ - type: DataActionTypes.setNftImageUrl, - payload: imageUrl, + type: DataActionTypes.SetProcessSucess, + payload: true, }) - } else { - throw Error("Something went wrong") + } catch (error) { + errorHandler("minting", error) } - dispatch({ - type: DataActionTypes.HideModal, - }) - dispatch({ - type: DataActionTypes.changePage, - payload: { prev: currentPage, current: StepID.finalStep }, - }) - dispatch({ - type: DataActionTypes.SetProcessSucess, - payload: true, - }) - } catch (error) { - errorHandler("minting", error) } } } From de591fb38915b1cff1d80b72c90784326e1fc883 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 10 Mar 2023 13:46:39 +0100 Subject: [PATCH 10/52] Fix memory leak for event handler --- src/KycDaoIframeClient.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/KycDaoIframeClient.ts b/src/KycDaoIframeClient.ts index a7816be..6ba9430 100644 --- a/src/KycDaoIframeClient.ts +++ b/src/KycDaoIframeClient.ts @@ -222,7 +222,7 @@ export class KycDaoIframeClient implements KycDaoClientInterface { navigator.virtualKeyboard.overlaysContent = true } - window.addEventListener("message", messageHndlr.bind(this)) + window.addEventListener("message", this.messageHndlr) } } @@ -240,11 +240,9 @@ export class KycDaoIframeClient implements KycDaoClientInterface { } this.container?.remove() + parentNode.removeChild(this.modal) - if (parentNode) { - parentNode.removeChild(this.modal) - } - window.removeEventListener("message", messageHndlr.bind(this)) + window.removeEventListener("message", this.messageHndlr) this.isOpen = false } } From 4c8aa91b412132a1317ceaeebf0eb59d2890a8fd Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 10 Mar 2023 14:15:50 +0100 Subject: [PATCH 11/52] Fix error window --- package.json | 3 +- pnpm-lock.yaml | 349 +++++++++++++++++++++++++------------- src/hooks/errorHandler.ts | 5 +- 3 files changed, 233 insertions(+), 124 deletions(-) diff --git a/package.json b/package.json index 0b09a74..6ce2335 100644 --- a/package.json +++ b/package.json @@ -71,7 +71,8 @@ "react-twitter-embed": "^4.0.4", "rxjs": "^7.8.0", "stream": "^0.0.2", - "styled-components": "^5.3.8" + "styled-components": "^5.3.8", + "@walletconnect/web3-provider": "^1.8.0" }, "dependenciesMeta": { "@toruslabs/eccrypto": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2965eb7..f23df61 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -79,6 +79,7 @@ specifiers: dependencies: '@kycdao/kycdao-sdk': 0.6.10_ld2frdykwo3alsy32anduthxfu + '@walletconnect/web3-provider': 1.8.0_@babel+core@7.21.0 buffer: 6.0.3 clsx: 1.2.1 near-api-js: 1.1.0 @@ -111,7 +112,6 @@ devDependencies: '@types/styled-components': 5.1.26 '@typescript-eslint/eslint-plugin': 5.54.1_mlk7dnz565t663n4razh6a6v6i '@typescript-eslint/parser': 5.54.1_ycpbpc6yetojsgtrx3mwntkhsu - '@walletconnect/web3-provider': 1.8.0_@babel+core@7.21.0 babel-plugin-macros: 3.1.0 babel-plugin-module-resolver: 5.0.0 babel-plugin-styled-components: 2.0.7_styled-components@5.3.8 @@ -2261,7 +2261,6 @@ packages: /@metamask/safe-event-emitter/2.0.0: resolution: {integrity: sha512-/kSXhY692qiV1MXu6EeOZvg5nECLclxNXcKCxJ3cXQgYuRymRHpdx/t7JXfsK+JLjwA1e1c1/SBrlQYpusC29Q==} - dev: true /@ngraveio/bc-ur/1.1.6: resolution: {integrity: sha512-G+2XgjXde2IOcEQeCwR250aS43/Swi7gw0FuETgJy2c3HqF8f88SXDMsIGgJlZ8jXd0GeHR4aX0MfjXf523UZg==} @@ -3687,8 +3686,8 @@ packages: /@types/bn.js/4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 18.14.6 - dev: true + '@types/node': 18.15.0 + dev: false /@types/bn.js/5.1.1: resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} @@ -4103,6 +4102,7 @@ packages: '@walletconnect/window-getters': 1.0.0 '@walletconnect/window-metadata': 1.0.0 detect-browser: 5.2.0 + dev: false /@walletconnect/client/1.8.0: resolution: {integrity: sha512-svyBQ14NHx6Cs2j4TpkQaBI/2AF4+LXz64FojTjMtV4VMMhl81jSO1vNeg+yYhQzvjcGH/GpSwixjyCW0xFBOQ==} @@ -4115,7 +4115,7 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true + dev: false /@walletconnect/core/1.8.0: resolution: {integrity: sha512-aFTHvEEbXcZ8XdWBw6rpQDte41Rxwnuk3SgTD8/iKGSRTni50gI9S3YEzMj05jozSiOBxQci4pJDMVhIUMtarw==} @@ -4126,7 +4126,7 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true + dev: false /@walletconnect/core/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-OLyBNJyUfQNr1qlcCxqzu5bmNorOL6SqWOwA3LcxV+3+mbUk4fByFd8AJRzGFWf8kC3BRycLFivHh4QEeBNZ8Q==} @@ -4167,7 +4167,7 @@ packages: aes-js: 3.1.2 hash.js: 1.1.7 tslib: 1.14.1 - dev: true + dev: false /@walletconnect/encoding/1.0.2: resolution: {integrity: sha512-CrwSBrjqJ7rpGQcTL3kU+Ief+Bcuu9PH6JLOb+wM6NITX1GTxR/MfNwnQfhLKK6xpRAyj2/nM04OOH6wS8Imag==} @@ -4175,12 +4175,13 @@ packages: is-typedarray: 1.0.0 tslib: 1.14.1 typedarray-to-buffer: 3.1.5 - dev: true + dev: false /@walletconnect/environment/1.0.1: resolution: {integrity: sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg==} dependencies: tslib: 1.14.1 + dev: false /@walletconnect/events/1.0.1: resolution: {integrity: sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ==} @@ -4212,7 +4213,7 @@ packages: '@walletconnect/utils': 1.8.0 eventemitter3: 4.0.7 xhr2-cookies: 1.1.0 - dev: true + dev: false /@walletconnect/iso-crypto/1.8.0: resolution: {integrity: sha512-pWy19KCyitpfXb70hA73r9FcvklS+FvO9QUIttp3c2mfW8frxgYeRXfxLRCIQTkaYueRKvdqPjbyhPLam508XQ==} @@ -4220,7 +4221,7 @@ packages: '@walletconnect/crypto': 1.0.3 '@walletconnect/types': 1.8.0 '@walletconnect/utils': 1.8.0 - dev: true + dev: false /@walletconnect/jsonrpc-provider/1.0.8: resolution: {integrity: sha512-M44vzTrF0TeDcxQorm2lJ5klmfqchYOZqmIHb5T9lIPA/rj22643P83j44flZLyzycPqy5UUlIH6foeBPwjxMg==} @@ -4235,6 +4236,7 @@ packages: dependencies: keyvaluestorage-interface: 1.0.0 tslib: 1.14.1 + dev: false /@walletconnect/jsonrpc-utils/1.0.6: resolution: {integrity: sha512-snp0tfkjPiDLQp/jrBewI+9SM33GPV4+Gjgldod6XQ7rFyQ5FZjnBxUkY4xWH0+arNxzQSi6v5iDXjCjSaorpg==} @@ -4242,6 +4244,7 @@ packages: '@walletconnect/environment': 1.0.1 '@walletconnect/jsonrpc-types': 1.0.2 tslib: 1.14.1 + dev: false /@walletconnect/jsonrpc-ws-connection/1.0.9: resolution: {integrity: sha512-x1COaW6hhMLEo+ND5zF/siBGg5SEwC/gHjeRbJtK1CRiq9atkg/XR7JwtSNfMvYX/O3PRCVmuc5SP0RQio9JUw==} @@ -4281,6 +4284,7 @@ packages: /@walletconnect/mobile-registry/1.4.0: resolution: {integrity: sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==} deprecated: 'Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry' + dev: false /@walletconnect/qrcode-modal/1.8.0: resolution: {integrity: sha512-BueaFefaAi8mawE45eUtztg3ZFbsAH4DDXh1UNwdUlsvFMjqcYzLUG0xZvDd6z2eOpbgDg2N3bl6gF0KONj1dg==} @@ -4292,6 +4296,7 @@ packages: copy-to-clipboard: 3.3.3 preact: 10.4.1 qrcode: 1.4.4 + dev: false /@walletconnect/randombytes/1.0.3: resolution: {integrity: sha512-35lpzxcHFbTN3ABefC9W+uBpNZl1GC4Wpx0ed30gibfO/y9oLdy1NznbV96HARQKSBV9J9M/rrtIvf6a23jfYw==} @@ -4300,7 +4305,7 @@ packages: '@walletconnect/environment': 1.0.1 randombytes: 2.1.0 tslib: 1.14.1 - dev: true + dev: false /@walletconnect/relay-api/1.0.9: resolution: {integrity: sha512-Q3+rylJOqRkO1D9Su0DPE3mmznbAalYapJ9qmzDgK28mYF9alcP3UwG/og5V7l7CFOqzCLi7B8BvcBUrpDj0Rg==} @@ -4322,6 +4327,7 @@ packages: /@walletconnect/safe-json/1.0.0: resolution: {integrity: sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==} + dev: false /@walletconnect/safe-json/1.0.1: resolution: {integrity: sha512-Fm7e31oSYY15NQr8SsLJheKAy5L744udZf2lJKcz6wFmPJEzf7hOF0866o/rrldRzJnjZ4H2GJ45pFudsnLW5A==} @@ -4363,7 +4369,7 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true + dev: false /@walletconnect/time/1.0.2: resolution: {integrity: sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g==} @@ -4374,6 +4380,7 @@ packages: /@walletconnect/types/1.8.0: resolution: {integrity: sha512-Cn+3I0V0vT9ghMuzh1KzZvCkiAxTq+1TR2eSqw5E5AVWfmCtECFkVZBP6uUJZ8YjwLqXheI+rnjqPy7sVM4Fyg==} deprecated: 'WalletConnect''s v1 SDKs are now deprecated. Please upgrade to a v2 SDK. For details see: https://docs.walletconnect.com/' + dev: false /@walletconnect/types/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-NuL+c/BHExK7hwF+JoJVy/LnNB8sNtoxvlpIa2Er5qeB8MJsWtwbmEJMS/bP6CbOTSpO0kOpXGzb1ht0LD2rkw==} @@ -4393,6 +4400,18 @@ packages: - typescript dev: false + /@walletconnect/utils/1.8.0: + resolution: {integrity: sha512-zExzp8Mj1YiAIBfKNm5u622oNw44WOESzo6hj+Q3apSMIb0Jph9X3GDIdbZmvVZsNPxWDL7uodKgZcCInZv2vA==} + dependencies: + '@walletconnect/browser-utils': 1.8.0 + '@walletconnect/encoding': 1.0.2 + '@walletconnect/jsonrpc-utils': 1.0.6 + '@walletconnect/types': 1.8.0 + bn.js: 5.2.1 + js-sha3: 0.8.0 + query-string: 6.13.5 + dev: false + /@walletconnect/utils/2.4.8_lwgqdwokjtwlohdqtbb6s252kq: resolution: {integrity: sha512-W/5Ly+p+6/RHsYzVUiuwxGK+J9BQEins0RRdPeO6tJjNPeR05SoJE564JSKRYxPkGf/9vB5wfOZ88IEzOIAYLw==} dependencies: @@ -4436,10 +4455,11 @@ packages: - encoding - supports-color - utf-8-validate - dev: true + dev: false /@walletconnect/window-getters/1.0.0: resolution: {integrity: sha512-xB0SQsLaleIYIkSsl43vm8EwETpBzJ2gnzk7e0wMF3ktqiTGS6TFHxcprMl5R44KKh4tCcHCJwolMCaDSwtAaA==} + dev: false /@walletconnect/window-getters/1.0.1: resolution: {integrity: sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q==} @@ -4451,6 +4471,7 @@ packages: resolution: {integrity: sha512-9eFvmJxIKCC3YWOL97SgRkKhlyGXkrHwamfechmqszbypFspaSk+t2jQXAEU7YClHF6Qjw5eYOmy1//zFi9/GA==} dependencies: '@walletconnect/window-getters': 1.0.0 + dev: false /@walletconnect/window-metadata/1.0.1: resolution: {integrity: sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA==} @@ -4571,13 +4592,13 @@ packages: resolution: {integrity: sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA==} dependencies: xtend: 4.0.2 - dev: true + dev: false /abstract-leveldown/2.7.2: resolution: {integrity: sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==} dependencies: xtend: 4.0.2 - dev: true + dev: false /accepts/1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} @@ -4638,7 +4659,7 @@ packages: /aes-js/3.1.2: resolution: {integrity: sha512-e5pEa2kBnBOgR4Y/p20pskXI74UEz7de8ZGVo58asOtvSVG5YAbJeELPZxOmt+Bnz3rX753YKhfIn4X4l1PPRQ==} - dev: true + dev: false /agentkeepalive/4.3.0: resolution: {integrity: sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==} @@ -4717,6 +4738,7 @@ packages: /ansi-regex/4.1.1: resolution: {integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==} engines: {node: '>=6'} + dev: false /ansi-regex/5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -4847,12 +4869,12 @@ packages: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 - dev: true + dev: false /assert-plus/1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} - dev: true + dev: false /assert/2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} @@ -4879,17 +4901,17 @@ packages: resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==} dependencies: async: 2.6.4 - dev: true + dev: false /async-limiter/1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} - dev: true + dev: false /async-mutex/0.2.6: resolution: {integrity: sha512-Hs4R+4SPgamu6rSGW8C7cV9gaWUKEHykfzCCvIRuaVv636Ju10ZdeUbvb4TBEW0INuq2DHZqXbK4Nd3yG4RaRw==} dependencies: tslib: 2.5.0 - dev: true + dev: false /async-mutex/0.4.0: resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} @@ -4899,20 +4921,20 @@ packages: /async/1.5.2: resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==} - dev: true + dev: false /async/2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 - dev: true + dev: false /async/3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + dev: false /at-least-node/1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} @@ -4944,11 +4966,11 @@ packages: /aws-sign2/0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: true + dev: false /aws4/1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} - dev: true + dev: false /axe-core/4.6.3: resolution: {integrity: sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==} @@ -5202,16 +5224,18 @@ packages: engines: {node: '>= 0.6'} dependencies: precond: 0.2.3 - dev: true + dev: false /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} /base-x/4.0.0: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} + dev: false /base64-js/1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false /base64url/3.0.1: resolution: {integrity: sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==} @@ -5225,7 +5249,7 @@ packages: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: tweetnacl: 0.14.5 - dev: true + dev: false /bent/7.3.12: resolution: {integrity: sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==} @@ -5278,12 +5302,14 @@ packages: /blakejs/1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: false /bluebird/3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} /bn.js/5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false /body-parser/1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -5346,6 +5372,7 @@ packages: /brorand/1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false /browser-stdout/1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} @@ -5360,6 +5387,7 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: false /browserify-cipher/1.0.1: resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} @@ -5413,6 +5441,7 @@ packages: resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} dependencies: base-x: 4.0.0 + dev: false /bs58check/2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} @@ -5420,6 +5449,7 @@ packages: bs58: 5.0.0 create-hash: 1.2.0 safe-buffer: 5.2.1 + dev: false /bser/2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -5430,19 +5460,22 @@ packages: resolution: {integrity: sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==} engines: {node: '>= 0.4.0'} hasBin: true - dev: true + dev: false /buffer-alloc-unsafe/1.1.0: resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==} + dev: false /buffer-alloc/1.2.0: resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==} dependencies: buffer-alloc-unsafe: 1.1.0 buffer-fill: 1.0.0 + dev: false /buffer-fill/1.0.0: resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==} + dev: false /buffer-from/0.1.2: resolution: {integrity: sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg==} @@ -5453,12 +5486,14 @@ packages: /buffer-xor/1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: false /buffer/6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: false /bufferutil/4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} @@ -5545,7 +5580,6 @@ packages: /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - dev: true /cbor-sync/1.0.4: resolution: {integrity: sha512-GWlXN4wiz0vdWWXBU71Dvc1q3aBo0HytqwAZnXF1wOwjqNnDWA1vZ1gDMFLlqohak31VQzmhiYfiCX5QSSfagA==} @@ -5611,7 +5645,7 @@ packages: resolution: {integrity: sha512-J/NdY2WvIx654cc6LWSq/IYFFCUf75fFTgwzFnmbqyORH4MwgiQCgswLLKBGzmsyTI5V7i5bp/So6sMbDWhedg==} dependencies: functional-red-black-tree: 1.0.1 - dev: true + dev: false /chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} @@ -5645,6 +5679,7 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: false /cjs-module-lexer/1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} @@ -5689,6 +5724,7 @@ packages: string-width: 3.1.0 strip-ansi: 5.2.0 wrap-ansi: 5.1.0 + dev: false /cliui/7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} @@ -5709,7 +5745,7 @@ packages: /clone/2.1.2: resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} engines: {node: '>=0.8'} - dev: true + dev: false /clsx/1.2.1: resolution: {integrity: sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==} @@ -5767,6 +5803,13 @@ packages: text-hex: 1.0.0 dev: true + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + /commander/10.0.0: resolution: {integrity: sha512-zS5PnTI22FIRM6ylNW8G4Ap0IEOyk62fhLSD0+uHRT9McRCLGpkVNvao4bjimpK/GShynyQkFFxHhwMcETmduA==} engines: {node: '>=14'} @@ -5874,12 +5917,13 @@ packages: /cookiejar/2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} - dev: true + dev: false /copy-to-clipboard/3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} dependencies: toggle-selection: 1.0.6 + dev: false /core-js-compat/3.29.0: resolution: {integrity: sha512-ScMn3uZNAFhK2DGoEfErguoiAHhV2Ju+oJo/jK08p7B3f3UhocUrCCkTvnZaiS+edl5nlIoiBXKcwMc6elv4KQ==} @@ -5896,7 +5940,7 @@ packages: /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true + dev: false /core-util-is/1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -5942,6 +5986,7 @@ packages: md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 + dev: false /create-hmac/1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} @@ -5952,6 +5997,7 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: false /create-react-app/5.0.1: resolution: {integrity: sha512-UkxTKK8I9HuZZHqkNq/JkKXDgdLeiRGc+bL58Iae2g+7WwFomAj4wppn6JfqlZM2IKYRlZtgLlmVr5oZfdd1xg==} @@ -5992,7 +6038,7 @@ packages: whatwg-fetch: 2.0.4 transitivePeerDependencies: - encoding - dev: true + dev: false /cross-spawn/7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} @@ -6239,7 +6285,7 @@ packages: engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 - dev: true + dev: false /date-fns/2.29.3: resolution: {integrity: sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==} @@ -6305,6 +6351,7 @@ packages: /decamelize/1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} + dev: false /decamelize/4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} @@ -6319,6 +6366,7 @@ packages: /decode-uri-component/0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} + dev: false /dedent/0.7.0: resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} @@ -6368,7 +6416,7 @@ packages: resolution: {integrity: sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA==} dependencies: abstract-leveldown: 2.6.3 - dev: true + dev: false /define-lazy-prop/2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} @@ -6392,7 +6440,7 @@ packages: /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: true + dev: false /depd/1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} @@ -6415,6 +6463,7 @@ packages: /detect-browser/5.2.0: resolution: {integrity: sha512-tr7XntDAu50BVENgQfajMLzacmSe34D+qZc4zjnniz0ZVuw/TZcLcyxHQjYpJTM36sGEkZZlYLnIM1hH7alTMA==} + dev: false /detect-browser/5.3.0: resolution: {integrity: sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==} @@ -6477,6 +6526,7 @@ packages: /dijkstrajs/1.0.2: resolution: {integrity: sha512-QV6PMaHTCNmKSeP6QoXhVTw9snc9VD8MulTT0Bd99Pacp4SS1cjcrYPgBPmibqKVtMJJfqC6XvOXgPMEEPH/fg==} + dev: false /dir-glob/3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -6533,7 +6583,7 @@ packages: /dom-walk/0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} - dev: true + dev: false /domelementtype/2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} @@ -6614,7 +6664,7 @@ packages: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - dev: true + dev: false /ee-first/1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} @@ -6649,6 +6699,7 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: false /emitter-component/1.1.1: resolution: {integrity: sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ==} @@ -6664,6 +6715,7 @@ packages: /emoji-regex/7.0.3: resolution: {integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==} + dev: false /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -6732,7 +6784,7 @@ packages: hasBin: true dependencies: prr: 1.0.1 - dev: true + dev: false /error-ex/1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -7322,7 +7374,7 @@ packages: transitivePeerDependencies: - '@babel/core' - supports-color - dev: true + dev: false /eth-json-rpc-filters/4.2.2: resolution: {integrity: sha512-DGtqpLU7bBg63wPMWg1sCpkKCf57dJ+hj/k3zF26anXMzkmtSBDExL8IhUu7LUd34f0Zsce3PYNO2vV2GaTzaw==} @@ -7335,7 +7387,7 @@ packages: pify: 5.0.0 transitivePeerDependencies: - encoding - dev: true + dev: false /eth-json-rpc-infura/5.1.0: resolution: {integrity: sha512-THzLye3PHUSGn1EXMhg6WTLW9uim7LQZKeKaeYsS9+wOBcamRiCQVGHa6D2/4P0oS0vSaxsBnU/J6qvn0MPdow==} @@ -7346,7 +7398,7 @@ packages: node-fetch: 2.6.9 transitivePeerDependencies: - encoding - dev: true + dev: false /eth-json-rpc-middleware/6.0.0: resolution: {integrity: sha512-qqBfLU2Uq1Ou15Wox1s+NX05S9OcAEL4JZ04VZox2NS0U+RtCMjSxzXhLFWekdShUPZ+P8ax3zCO2xcPrp6XJQ==} @@ -7364,20 +7416,20 @@ packages: safe-event-emitter: 1.0.1 transitivePeerDependencies: - encoding - dev: true + dev: false /eth-query/2.1.2: resolution: {integrity: sha512-srES0ZcvwkR/wd5OQBRA1bIJMww1skfGS0s8wlwK3/oNP4+wnds60krvu5R1QbpRQjMmpG5OMIWro5s7gvDPsA==} dependencies: json-rpc-random-id: 1.0.1 xtend: 4.0.2 - dev: true + dev: false /eth-rpc-errors/3.0.0: resolution: {integrity: sha512-iPPNHPrLwUlR9xCSYm7HHQjWBasor3+KZfRvwEWxMz3ca0yqnlBeJrnyphkGIXZ4J7AMAaOLmwy4AWhnxOiLxg==} dependencies: fast-safe-stringify: 2.1.1 - dev: true + dev: false /eth-rpc-errors/4.0.3: resolution: {integrity: sha512-Z3ymjopaoft7JDoxZcEb3pwdGh7yiYMhOwm2doUt6ASXlMavpNlK6Cre0+IMl2VSGyEU9rkiperQhp5iRxn5Pg==} @@ -7390,15 +7442,15 @@ packages: dependencies: ethereumjs-abi: github.com/ethereumjs/ethereumjs-abi/ee3994657fa7a427238e6ba92a84d0b529bbcde0 ethereumjs-util: 5.2.1 - dev: true + dev: false /ethereum-common/0.0.18: resolution: {integrity: sha512-EoltVQTRNg2Uy4o84qpa2aXymXDJhxm7eos/ACOg0DG4baAbMjhbdAEsx9GeE8sC3XCxnYvrrzZDH8D8MtA2iQ==} - dev: true + dev: false /ethereum-common/0.2.0: resolution: {integrity: sha512-XOnAR/3rntJgbCdGhqdaLIxDLWKLmsZOGhHdBKadEr6gEnJLH52k93Ou+TUdFaPN3hJc3isBZBal3U/XZ15abA==} - dev: true + dev: false /ethereum-cryptography/0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} @@ -7418,6 +7470,7 @@ packages: scrypt-js: 3.0.1 secp256k1: 4.0.3 setimmediate: 1.0.5 + dev: false /ethereumjs-account/2.0.5: resolution: {integrity: sha512-bgDojnXGjhMwo6eXQC0bY6UK2liSFUSMwwylOmQvZbSl/D7NXQ3+vrGO46ZeOgjGfxXmgIeVNDIiHw7fNZM4VA==} @@ -7425,7 +7478,7 @@ packages: ethereumjs-util: 5.2.1 rlp: 2.2.7 safe-buffer: 5.2.1 - dev: true + dev: false /ethereumjs-block/1.7.1: resolution: {integrity: sha512-B+sSdtqm78fmKkBq78/QLKJbu/4Ts4P2KFISdgcuZUPDm9x+N7qgBPIIFUGbaakQh8bzuquiRVbdmvPKqbILRg==} @@ -7436,7 +7489,7 @@ packages: ethereumjs-tx: 1.3.7 ethereumjs-util: 5.2.1 merkle-patricia-tree: 2.3.2 - dev: true + dev: false /ethereumjs-block/2.2.2: resolution: {integrity: sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg==} @@ -7447,12 +7500,12 @@ packages: ethereumjs-tx: 2.1.2 ethereumjs-util: 5.2.1 merkle-patricia-tree: 2.3.2 - dev: true + dev: false /ethereumjs-common/1.5.2: resolution: {integrity: sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==} deprecated: 'New package name format for new versions: @ethereumjs/common. Please update.' - dev: true + dev: false /ethereumjs-tx/1.3.7: resolution: {integrity: sha512-wvLMxzt1RPhAQ9Yi3/HKZTn0FZYpnsmQdbKYfUUpi4j1SEIcbkd9tndVjcPrufY3V7j2IebOpC00Zp2P/Ay2kA==} @@ -7460,7 +7513,7 @@ packages: dependencies: ethereum-common: 0.0.18 ethereumjs-util: 5.2.1 - dev: true + dev: false /ethereumjs-tx/2.1.2: resolution: {integrity: sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==} @@ -7468,7 +7521,7 @@ packages: dependencies: ethereumjs-common: 1.5.2 ethereumjs-util: 6.2.1 - dev: true + dev: false /ethereumjs-util/5.2.1: resolution: {integrity: sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ==} @@ -7480,7 +7533,7 @@ packages: ethjs-util: 0.1.6 rlp: 2.2.7 safe-buffer: 5.2.1 - dev: true + dev: false /ethereumjs-util/6.2.1: resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} @@ -7492,7 +7545,7 @@ packages: ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 - dev: true + dev: false /ethereumjs-util/7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} @@ -7520,7 +7573,7 @@ packages: merkle-patricia-tree: 2.3.2 rustbn.js: 0.2.0 safe-buffer: 5.2.1 - dev: true + dev: false /ethjs-util/0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} @@ -7528,7 +7581,7 @@ packages: dependencies: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 - dev: true + dev: false /eventemitter3/4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -7542,6 +7595,7 @@ packages: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 + dev: false /execa/5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -7637,7 +7691,7 @@ packages: /extend/3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true + dev: false /extension-port-stream/2.0.1: resolution: {integrity: sha512-ltrv4Dh/979I04+D4Te6TFygfRSOc5EBzzlHRldWMS8v73V80qWluxH88hqF0qyUsBXTb8NmzlmSipcre6a+rg==} @@ -7649,7 +7703,7 @@ packages: /extsprintf/1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} - dev: true + dev: false /eyes/0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} @@ -7660,7 +7714,7 @@ packages: resolution: {integrity: sha512-Tgq37lkc9pUIgIKw5uitNUKcgcYL3R6JvXtKQbOf/ZSavXbidsksgp/pAY6p//uhw0I4yoMsvTSovvVIsk/qxA==} dependencies: checkpoint-store: 1.1.0 - dev: true + dev: false /fast-deep-equal/2.0.1: resolution: {integrity: sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==} @@ -7861,6 +7915,10 @@ packages: dependencies: is-callable: 1.2.7 + /forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: false + /fork-ts-checker-webpack-plugin/6.5.3_3yr7rclcvllpl37mk7h3upl2ve: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -7892,6 +7950,15 @@ packages: typescript: 4.9.5 webpack: 5.76.0 + /form-data/2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: false + /forwarded/0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -7976,7 +8043,7 @@ packages: /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} - dev: true + dev: false /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -8022,7 +8089,7 @@ packages: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 - dev: true + dev: false /glob-parent/5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -8120,7 +8187,7 @@ packages: dependencies: min-document: 2.19.0 process: 0.11.10 - dev: true + dev: false /globals/11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -8172,7 +8239,7 @@ packages: /har-schema/2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} - dev: true + dev: false /har-validator/5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} @@ -8181,7 +8248,7 @@ packages: dependencies: ajv: 6.12.6 har-schema: 2.0.0 - dev: true + dev: false /harmony-reflect/1.6.2: resolution: {integrity: sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g==} @@ -8229,12 +8296,14 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 + dev: false /hash.js/1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: false /he/1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} @@ -8246,6 +8315,7 @@ packages: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: false /hoist-non-react-statics/3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -8382,7 +8452,7 @@ packages: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.17.0 - dev: true + dev: false /human-signals/2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} @@ -8444,6 +8514,7 @@ packages: /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false /ignore/5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} @@ -8451,7 +8522,7 @@ packages: /immediate/3.3.0: resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} - dev: true + dev: false /immer/9.0.19: resolution: {integrity: sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==} @@ -8577,11 +8648,12 @@ packages: /is-fn/1.0.0: resolution: {integrity: sha512-XoFPJQmsAShb3jEQRfzf2rqXavq7fIqF/jOekp308JlThqrODnMpweVSGilKTCXELfLhltGP2AGgbQGVP8F1dg==} engines: {node: '>=0.10.0'} - dev: true + dev: false /is-fullwidth-code-point/2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} + dev: false /is-fullwidth-code-point/3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} @@ -8594,7 +8666,7 @@ packages: /is-function/1.0.2: resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} - dev: true + dev: false /is-generator-fn/2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} @@ -8616,7 +8688,7 @@ packages: /is-hex-prefixed/1.0.0: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} - dev: true + dev: false /is-map/2.0.2: resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} @@ -8752,7 +8824,6 @@ packages: /isarray/0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: true /isarray/1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -8773,7 +8844,7 @@ packages: /isstream/0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - dev: true + dev: false /istanbul-lib-coverage/3.2.0: resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} @@ -9404,6 +9475,7 @@ packages: /js-sha3/0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: false /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -9427,7 +9499,7 @@ packages: /jsbn/0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: true + dev: false /jsesc/0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} @@ -9446,7 +9518,7 @@ packages: dependencies: eth-rpc-errors: 3.0.0 safe-event-emitter: 1.0.1 - dev: true + dev: false /json-rpc-engine/6.1.0: resolution: {integrity: sha512-NEdLrtrq1jUZyfjkr9OCz9EzCNhnRyWtt1PAnvnhwy6e8XETS0Dtc+ZNCO2gvuAoKsIn2+vCSowXTYE4CkgnAQ==} @@ -9454,7 +9526,6 @@ packages: dependencies: '@metamask/safe-event-emitter': 2.0.0 eth-rpc-errors: 4.0.3 - dev: true /json-rpc-middleware-stream/4.2.1: resolution: {integrity: sha512-6QKayke/8lg0nTjOpRCq4JCgRx7bVybldmloIfY21HSDV0GUevcV9i8DJNvuKTJx4KR9EDIf6HTStAnEovGUvA==} @@ -9466,6 +9537,7 @@ packages: /json-rpc-random-id/1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} + dev: false /json-schema-traverse/0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} @@ -9483,9 +9555,11 @@ packages: resolution: {integrity: sha512-eunSSaEnxV12z+Z73y/j5N37/In40GK4GmsSy+tEHJMxknvqnA7/djeYtAgW0GsWHUfg+847WJjKaEylk2y09g==} dependencies: jsonify: 0.0.1 + dev: false /json-stringify-safe/5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: false /json5/1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} @@ -9507,6 +9581,7 @@ packages: /jsonify/0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: false /jsonparse/1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} @@ -9525,7 +9600,7 @@ packages: extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - dev: true + dev: false /jsqr/1.4.0: resolution: {integrity: sha512-dxLob7q65Xg2DvstYkRpkYtmKm2sPJ9oFhrhmudT1dZvNFFTlroai3AWSpLey/w5vMcLBXRgOJsbXpdN9HzU/A==} @@ -9550,6 +9625,7 @@ packages: /keyvaluestorage-interface/1.0.0: resolution: {integrity: sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g==} + dev: false /kind-of/6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} @@ -9577,13 +9653,13 @@ packages: /level-codec/7.0.1: resolution: {integrity: sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ==} - dev: true + dev: false /level-errors/1.0.5: resolution: {integrity: sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig==} dependencies: errno: 0.1.8 - dev: true + dev: false /level-iterator-stream/1.3.1: resolution: {integrity: sha512-1qua0RHNtr4nrZBgYlpV0qHHeHpcRRWTxEZJ8xsemoHAXNL5tbooh4tPEEqIqsbWCAJBmUmkwYK/sW5OrFjWWw==} @@ -9592,14 +9668,14 @@ packages: level-errors: 1.0.5 readable-stream: 1.0.34 xtend: 4.0.2 - dev: true + dev: false /level-ws/0.0.0: resolution: {integrity: sha512-XUTaO/+Db51Uiyp/t7fCMGVFOTdtLS/NIACxE/GHsij15mKzxksZifKVjlXDF41JMUP/oM1Oc4YNGdKnc3dVLw==} dependencies: readable-stream: 1.0.34 xtend: 2.1.2 - dev: true + dev: false /levelup/1.3.9: resolution: {integrity: sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ==} @@ -9611,7 +9687,7 @@ packages: prr: 1.0.1 semver: 5.4.1 xtend: 4.0.2 - dev: true + dev: false /leven/2.1.0: resolution: {integrity: sha512-nvVPLpIHUxCUoRLrFqTgSxXJ614d8AgQoWl7zPe/2VadE8+1dpU3LBhowRuBAcuwruWtOdD8oYC9jDNJjXDPyA==} @@ -9808,7 +9884,7 @@ packages: /ltgt/2.2.1: resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} - dev: true + dev: false /lz-string/1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -9849,6 +9925,7 @@ packages: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 + dev: false /mdn-data/2.0.28: resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} @@ -9869,7 +9946,7 @@ packages: inherits: 2.0.4 ltgt: 2.2.1 safe-buffer: 5.1.2 - dev: true + dev: false /memfs/3.4.13: resolution: {integrity: sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==} @@ -9902,7 +9979,7 @@ packages: readable-stream: 2.3.8 rlp: 2.2.7 semaphore: 1.1.0 - dev: true + dev: false /methods/1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} @@ -9951,7 +10028,7 @@ packages: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: dom-walk: 0.1.2 - dev: true + dev: false /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -9972,6 +10049,7 @@ packages: /minimalistic-crypto-utils/1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false /minimatch/3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -10156,6 +10234,7 @@ packages: /node-addon-api/2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: false /node-fetch/2.6.9: resolution: {integrity: sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==} @@ -10167,6 +10246,7 @@ packages: optional: true dependencies: whatwg-url: 5.0.0 + dev: false /node-forge/1.3.1: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} @@ -10175,6 +10255,7 @@ packages: /node-gyp-build/4.6.0: resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true + dev: false /node-int64/0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -10268,7 +10349,7 @@ packages: /oauth-sign/0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - dev: true + dev: false /object-assign/4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} @@ -10290,7 +10371,7 @@ packages: /object-keys/0.4.0: resolution: {integrity: sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==} - dev: true + dev: false /object-keys/1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -10476,7 +10557,7 @@ packages: /parse-headers/2.0.5: resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} - dev: true + dev: false /parse-json/5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} @@ -10554,6 +10635,7 @@ packages: ripemd160: 2.0.2 safe-buffer: 5.2.1 sha.js: 2.4.11 + dev: false /performance-now/2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} @@ -10596,7 +10678,7 @@ packages: /pify/3.0.0: resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} engines: {node: '>=4'} - dev: true + dev: false /pify/4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -10606,7 +10688,7 @@ packages: /pify/5.0.0: resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==} engines: {node: '>=10'} - dev: true + dev: false /pino-abstract-transport/0.5.0: resolution: {integrity: sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ==} @@ -10667,6 +10749,7 @@ packages: /pngjs/3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} + dev: false /postcss-attribute-case-insensitive/5.0.2_postcss@8.4.21: resolution: {integrity: sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==} @@ -11375,11 +11458,12 @@ packages: /preact/10.4.1: resolution: {integrity: sha512-WKrRpCSwL2t3tpOOGhf2WfTpcmbpxaWtDbdJdKdjd0aEiTkvOmS4NBkG6kzlaAHI9AkQ3iVqbFWM3Ei7mZ4o1Q==} + dev: false /precond/0.2.3: resolution: {integrity: sha512-QCYG84SgGyGzqJ/vlMsxeXd/pgL/I94ixdNFyh1PusWmTCyVfPJjZ1K1jvHtsbfnXQs2TSkEP2fR7QiMZAnKFQ==} engines: {node: '>= 0.6'} - dev: true + dev: false /prelude-ls/1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -11443,6 +11527,7 @@ packages: /process/0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + dev: false /promise-to-callback/1.0.0: resolution: {integrity: sha512-uhMIZmKM5ZteDMfLgJnoSq9GCwsNKrYau73Awf1jIy6/eUcuuZ3P+CD9zUv0kJsIUbU+x6uLNIhXhLHDs1pNPA==} @@ -11450,7 +11535,7 @@ packages: dependencies: is-fn: 1.0.0 set-immediate-shim: 1.0.1 - dev: true + dev: false /promise/8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} @@ -11484,11 +11569,11 @@ packages: /prr/1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: true + dev: false /psl/1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true + dev: false /public-encrypt/4.0.3: resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} @@ -11541,6 +11626,7 @@ packages: isarray: 2.0.5 pngjs: 3.4.0 yargs: 13.3.2 + dev: false /qs/6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} @@ -11558,7 +11644,7 @@ packages: /qs/6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} - dev: true + dev: false /query-string/6.13.5: resolution: {integrity: sha512-svk3xg9qHR39P3JlHuD7g3nRnyay5mHbrPctEBDUxUkHRifPHXJDhBUycdCC0NBjXoDf44Gb+IsOZL1Uwn8M/Q==} @@ -11567,7 +11653,7 @@ packages: decode-uri-component: 0.2.2 split-on-first: 1.1.0 strict-uri-encode: 2.0.0 - dev: true + dev: false /query-string/7.1.1: resolution: {integrity: sha512-MplouLRDHBZSG9z7fpuAAcI7aAYjDLhtsiVZsevsfaHWDS2IDdORKbSd1kWUA+V4zyva/HZoSfpwnYMMQDhb0w==} @@ -11908,7 +11994,6 @@ packages: inherits: 2.0.4 isarray: 0.0.1 string_decoder: 0.10.31 - dev: true /readable-stream/1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} @@ -12050,7 +12135,7 @@ packages: tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 - dev: true + dev: false /require-directory/2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -12062,6 +12147,7 @@ packages: /require-main-filename/2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + dev: false /requireindex/1.2.0: resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} @@ -12185,12 +12271,14 @@ packages: dependencies: hash-base: 3.1.0 inherits: 2.0.4 + dev: false /rlp/2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true dependencies: bn.js: 5.2.1 + dev: false /rollup-plugin-terser/7.0.2_rollup@2.79.1: resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} @@ -12237,7 +12325,7 @@ packages: /rustbn.js/0.2.0: resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} - dev: true + dev: false /rxjs-report-usage/1.0.6: resolution: {integrity: sha512-omv1DIv5z1kV+zDAEjaDjWSkx8w5TbFp5NZoPwUipwzYVcor/4So9ZU3bUyQ1c8lxY5Q0Es/ztWW7PGjY7to0Q==} @@ -12277,7 +12365,7 @@ packages: deprecated: Renamed to @metamask/safe-event-emitter dependencies: events: 3.3.0 - dev: true + dev: false /safe-json-utils/1.1.1: resolution: {integrity: sha512-SAJWGKDs50tAbiDXLf89PDwt9XYkWyANFWVzn4dTXl5QyI8t2o/bW5/OJl3lvc2WVU4MEpTo9Yz5NVFNsp+OJQ==} @@ -12384,6 +12472,7 @@ packages: /scrypt-js/3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: false /sdp/2.12.0: resolution: {integrity: sha512-jhXqQAQVM+8Xj5EjJGVweuEzgtGWb3tmEEpl3CLP3cStInSbVHSg0QWOGQzNq8pSID4JkpeV2mPqlMDLrm0/Vw==} @@ -12413,6 +12502,7 @@ packages: elliptic: 6.5.4 node-addon-api: 2.0.2 node-gyp-build: 4.6.0 + dev: false /select-hose/2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -12426,12 +12516,12 @@ packages: /semaphore/1.1.0: resolution: {integrity: sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA==} engines: {node: '>=0.8.0'} - dev: true + dev: false /semver/5.4.1: resolution: {integrity: sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==} hasBin: true - dev: true + dev: false /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} @@ -12518,14 +12608,16 @@ packages: /set-blocking/2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: false /set-immediate-shim/1.0.1: resolution: {integrity: sha512-Li5AOqrZWCVA2n5kryzEmqai6bKSIvpz5oUJHPVj6+dsbD3X1ixtsY5tEnsaNpH3pFAHmG8eIHUrtEtohrg+UQ==} engines: {node: '>=0.10.0'} - dev: true + dev: false /setimmediate/1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: false /setprototypeof/1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -12539,6 +12631,7 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 + dev: false /shallowequal/1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -12739,6 +12832,7 @@ packages: /split-on-first/1.1.0: resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==} engines: {node: '>=6'} + dev: false /split2/4.1.0: resolution: {integrity: sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==} @@ -12762,7 +12856,7 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 - dev: true + dev: false /stack-trace/0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} @@ -12811,6 +12905,7 @@ packages: /strict-uri-encode/2.0.0: resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==} engines: {node: '>=4'} + dev: false /string-argv/0.3.1: resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} @@ -12841,6 +12936,7 @@ packages: emoji-regex: 7.0.3 is-fullwidth-code-point: 2.0.0 strip-ansi: 5.2.0 + dev: false /string-width/4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -12887,7 +12983,6 @@ packages: /string_decoder/0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} - dev: true /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} @@ -12912,6 +13007,7 @@ packages: engines: {node: '>=6'} dependencies: ansi-regex: 4.1.1 + dev: false /strip-ansi/6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} @@ -12951,7 +13047,7 @@ packages: engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 - dev: true + dev: false /strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} @@ -13216,6 +13312,7 @@ packages: /toggle-selection/1.0.6: resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false /toidentifier/1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} @@ -13232,10 +13329,11 @@ packages: dependencies: psl: 1.9.0 punycode: 2.3.0 - dev: true + dev: false /tr46/0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: false /tr46/1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} @@ -13337,11 +13435,11 @@ packages: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 - dev: true + dev: false /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: true + dev: false /tweetnacl/1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -13503,7 +13601,7 @@ packages: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true - dev: true + dev: false /uuid/8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} @@ -13538,7 +13636,7 @@ packages: assert-plus: 1.0.0 core-util-is: 1.0.2 extsprintf: 1.3.0 - dev: true + dev: false /walker/1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -13594,7 +13692,7 @@ packages: - encoding - supports-color - utf-8-validate - dev: true + dev: false /webextension-polyfill-ts/0.22.0: resolution: {integrity: sha512-3P33ClMwZ/qiAT7UH1ROrkRC1KM78umlnPpRhdC/292UyoTTW9NcjJEqDsv83HbibcTB6qCtpVeuB2q2/oniHQ==} @@ -13616,6 +13714,7 @@ packages: /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: false /webidl-conversions/4.0.2: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} @@ -13801,7 +13900,7 @@ packages: /whatwg-fetch/2.0.4: resolution: {integrity: sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==} - dev: true + dev: false /whatwg-fetch/3.6.2: resolution: {integrity: sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==} @@ -13811,6 +13910,7 @@ packages: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + dev: false /whatwg-url/7.1.0: resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} @@ -13838,6 +13938,7 @@ packages: /which-module/2.0.0: resolution: {integrity: sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==} + dev: false /which-typed-array/1.1.9: resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} @@ -14049,6 +14150,7 @@ packages: ansi-styles: 3.2.1 string-width: 3.1.0 strip-ansi: 5.2.0 + dev: false /wrap-ansi/6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} @@ -14097,7 +14199,7 @@ packages: optional: true dependencies: async-limiter: 1.0.1 - dev: true + dev: false /ws/7.5.3: resolution: {integrity: sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==} @@ -14110,7 +14212,7 @@ packages: optional: true utf-8-validate: optional: true - dev: true + dev: false /ws/7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} @@ -14172,13 +14274,13 @@ packages: is-function: 1.0.2 parse-headers: 2.0.5 xtend: 4.0.2 - dev: true + dev: false /xhr2-cookies/1.1.0: resolution: {integrity: sha512-hjXUA6q+jl/bd8ADHcVfFsSPIf+tyLIjuO9TwJC9WI6JP2zKcS7C+p56I9kCLLsaCiNT035iYvEUUzdEFj/8+g==} dependencies: cookiejar: 2.1.4 - dev: true + dev: false /xmlhttprequest-ssl/2.0.0: resolution: {integrity: sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==} @@ -14190,7 +14292,7 @@ packages: engines: {node: '>=0.4'} dependencies: object-keys: 0.4.0 - dev: true + dev: false /xtend/4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} @@ -14198,6 +14300,7 @@ packages: /y18n/4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + dev: false /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -14223,6 +14326,7 @@ packages: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 + dev: false /yargs-parser/20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} @@ -14256,6 +14360,7 @@ packages: which-module: 2.0.0 y18n: 4.0.3 yargs-parser: 13.1.2 + dev: false /yargs/16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} @@ -14298,4 +14403,4 @@ packages: dependencies: bn.js: 5.2.1 ethereumjs-util: 6.2.1 - dev: true + dev: false diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index 3e32c59..a1ec686 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -42,7 +42,10 @@ export function errorHandler( dispatch({ type: DataActionTypes.HideModal, }) - dispatch({ type: DataActionTypes.SetError, payload: { type: "fatal" } }) + dispatch({ + type: DataActionTypes.SetError, + payload: { type: "fatal", body: errorText }, + }) dispatch({ type: DataActionTypes.GoToNextStep }) break case "minting": { From 98d09306f84d8bf967566a6da26b8920b0657474 Mon Sep 17 00:00:00 2001 From: AttilaVargaw Date: Fri, 10 Mar 2023 15:01:47 +0100 Subject: [PATCH 12/52] Rename files --- src/AppContainer.tsx | 2 +- src/KycDaoClient.css | 41 ------------------- src/KycDaoIframeClient.css | 27 ------------ src/{KycDaoClient.ts => StandaloneClient.ts} | 2 +- ...entCommon.ts => StandaloneClientCommon.ts} | 0 ...ameClient.ts => StandaloneIframeClient.ts} | 2 +- src/hooks/errorHandler.ts | 2 +- src/hooks/useMinting.ts | 2 +- src/index.d.ts | 4 +- src/index.js | 4 +- src/pages/ErrorPage.tsx | 2 +- src/pages/finalStep.tsx | 2 +- src/react-app-env.d.ts | 4 +- src/widget.tsx | 4 +- 14 files changed, 15 insertions(+), 83 deletions(-) delete mode 100644 src/KycDaoClient.css delete mode 100644 src/KycDaoIframeClient.css rename src/{KycDaoClient.ts => StandaloneClient.ts} (99%) rename src/{KycDaoClientCommon.ts => StandaloneClientCommon.ts} (100%) rename src/{KycDaoIframeClient.ts => StandaloneIframeClient.ts} (99%) diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 1b4c747..bbb511d 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -11,7 +11,7 @@ import { KycDaoClientMessageTypes, KycDaoClientRegisterOrLogin, nearNetworkRegex, -} from "./KycDaoClientCommon" +} from "./StandaloneClientCommon" import { useMemo, useEffect, diff --git a/src/KycDaoClient.css b/src/KycDaoClient.css deleted file mode 100644 index 075fb77..0000000 --- a/src/KycDaoClient.css +++ /dev/null @@ -1,41 +0,0 @@ -.KycDaoModalFrame { - box-shadow: 0px 1px 174px rgba(59, 31, 69, 0.2); - width: 100%; - height: 100%; - background-color: #fefefe; - position: absolute; - overflow: hidden; -} - -.KycDaoModalRoot { - width: 100%; - position: absolute; - inset: 0; -} - -@media only screen and (min-width: 992px) { - .KycDaoModalFrame { - width: var(--width); - height: var(--height); - margin: auto; - border-radius: 12px; - overflow: hidden; - inset: 0; - } - - .KycDaoModalRoot { - position: sticky; - overflow: hidden; - height: 100vh; - } -} - -@media only screen and (max-width: 992px) { - body:has(.KycDaoModalRoot) { - overflow: hidden; - } -} - -body:has(.KycDaoModalRoot) { - background: var(--kyc-dao-backdrop, auto); -} diff --git a/src/KycDaoIframeClient.css b/src/KycDaoIframeClient.css deleted file mode 100644 index 230b8f5..0000000 --- a/src/KycDaoIframeClient.css +++ /dev/null @@ -1,27 +0,0 @@ -.KycDaoModalIFrame { - box-shadow: 0px 1px 174px rgba(59, 31, 69, 0.2); - width: 100%; - height: 100%; - background-color: #fefefe; - position: absolute; - overflow: hidden; - - border: 0px; - border-width: 0; -} - -@media only screen and (min-width: 992px) { - .KycDaoModalIFrame { - width: var(--width); - height: var(--height); - margin: auto; - border-radius: 12px; - } -} - -.KycDaoModalRoot { - background: var(--backdrop, auto); - position: absolute; - width: 100%; - inset: 0; -} diff --git a/src/KycDaoClient.ts b/src/StandaloneClient.ts similarity index 99% rename from src/KycDaoClient.ts rename to src/StandaloneClient.ts index af76e14..e7617c3 100644 --- a/src/KycDaoClient.ts +++ b/src/StandaloneClient.ts @@ -15,7 +15,7 @@ import { messageHndlr, nearNetworkRegex, nearRedirectCheck, -} from "./KycDaoClientCommon" +} from "./StandaloneClientCommon" // basically the KycDaoClient.css const styles = ` diff --git a/src/KycDaoClientCommon.ts b/src/StandaloneClientCommon.ts similarity index 100% rename from src/KycDaoClientCommon.ts rename to src/StandaloneClientCommon.ts diff --git a/src/KycDaoIframeClient.ts b/src/StandaloneIframeClient.ts similarity index 99% rename from src/KycDaoIframeClient.ts rename to src/StandaloneIframeClient.ts index 6ba9430..aef1ba6 100644 --- a/src/KycDaoIframeClient.ts +++ b/src/StandaloneIframeClient.ts @@ -13,7 +13,7 @@ import { messageHndlr, nearNetworkRegex, nearRedirectCheck, -} from "./KycDaoClientCommon" +} from "./StandaloneClientCommon" // basically the KycDaoClient.css const styles = ` diff --git a/src/hooks/errorHandler.ts b/src/hooks/errorHandler.ts index a1ec686..3f65ff3 100644 --- a/src/hooks/errorHandler.ts +++ b/src/hooks/errorHandler.ts @@ -6,7 +6,7 @@ import { import { KycDaoClientMessageBody, KycDaoClientMessageTypes, -} from "../KycDaoClientCommon" +} from "../StandaloneClientCommon" import { useContext } from "react" function getErrorText(error: unknown) { diff --git a/src/hooks/useMinting.ts b/src/hooks/useMinting.ts index 8f68956..952bd0a 100644 --- a/src/hooks/useMinting.ts +++ b/src/hooks/useMinting.ts @@ -7,7 +7,7 @@ import { useKycDao } from "./useKycDao" import { KycDaoClientMessageTypes, KycDaoClientMint, -} from "../KycDaoClientCommon" +} from "../StandaloneClientCommon" export const useMinting = () => { const kycDao = useKycDao() diff --git a/src/index.d.ts b/src/index.d.ts index b23ad09..77d0c12 100644 --- a/src/index.d.ts +++ b/src/index.d.ts @@ -1,5 +1,5 @@ export * from "./BootstrapKycDaoModal" export * from "./App" export * from "./widget" -export * from "./KycDaoClient" -export * from "./KycDaoIframeClient" +export * from "./StandaloneClient" +export * from "./StandaloneIframeClient" diff --git a/src/index.js b/src/index.js index b23ad09..77d0c12 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,5 @@ export * from "./BootstrapKycDaoModal" export * from "./App" export * from "./widget" -export * from "./KycDaoClient" -export * from "./KycDaoIframeClient" +export * from "./StandaloneClient" +export * from "./StandaloneIframeClient" diff --git a/src/pages/ErrorPage.tsx b/src/pages/ErrorPage.tsx index 480076e..024b35e 100644 --- a/src/pages/ErrorPage.tsx +++ b/src/pages/ErrorPage.tsx @@ -3,7 +3,7 @@ import { Step, H1, P, Button } from "@Components/index" import { KycDaoClientMessageBody, KycDaoClientMessageTypes, -} from "../KycDaoClientCommon" +} from "../StandaloneClientCommon" import { useCallback } from "react" import { FallbackProps } from "react-error-boundary" diff --git a/src/pages/finalStep.tsx b/src/pages/finalStep.tsx index 441c274..cd850f5 100644 --- a/src/pages/finalStep.tsx +++ b/src/pages/finalStep.tsx @@ -19,7 +19,7 @@ import { import { KycDaoClientMessageBody, KycDaoClientMessageTypes, -} from "../KycDaoClientCommon" +} from "../StandaloneClientCommon" import useErrorHandler from "@Hooks/errorHandler" import { TwitterShareButton } from "react-twitter-embed" diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts index c544682..c092fe4 100644 --- a/src/react-app-env.d.ts +++ b/src/react-app-env.d.ts @@ -4,8 +4,8 @@ import type { KycDaoWidgetConfig } from "./widget" import { KycDaoIframeClient, KycDaoIframeClientOptions, -} from "KycDaoIframeClient" -import { KycDaoClient } from "KycDaoClient" +} from "StandaloneIframeClient" +import { KycDaoClient } from "StandaloneClient" type VirtualKeyboardEvent = UIEvent & { target: { boundingRect: { height: string } } diff --git a/src/widget.tsx b/src/widget.tsx index 929ef9e..e1bf24c 100644 --- a/src/widget.tsx +++ b/src/widget.tsx @@ -1,10 +1,10 @@ import { FC, useEffect, useRef } from "react" -import { KycDaoClient } from "./KycDaoClient" +import { KycDaoClient } from "./StandaloneClient" import { KycDaoClientInterface, KycDaoClientOptions, -} from "./KycDaoClientCommon" +} from "./StandaloneClientCommon" import { KycDaoInitializationResult, SdkConfiguration, From 81d18d565174637478ac096cc206da1b000bc3fd Mon Sep 17 00:00:00 2001 From: balazs Date: Wed, 8 Mar 2023 16:07:18 +0100 Subject: [PATCH 13/52] StandaloneClient, Widget --- config-overrides.js | 3 +- package.json | 2 +- public/index.html | 34 +- src/AppContainer.tsx | 3 +- src/StandaloneClient.tsx | 73 ++++ src/Widget.tsx | 312 ++++++++++++++++++ .../modal/emailVerificationModal.tsx | 8 +- .../stateContext/stateContextTypes.ts | 2 + src/hooks/useErrorHandler.ts | 27 ++ src/hooks/useMinting.ts | 6 +- src/index.js | 5 +- src/pages/ErrorPage.tsx | 16 +- src/pages/beginVerifying.tsx | 8 +- src/pages/emailDiscordVerificationStep.tsx | 10 +- src/pages/finalStep.tsx | 34 +- src/pages/membershipCard.tsx | 8 +- src/pages/mintMembershipCard.tsx | 8 +- src/pages/nftArtSelection.tsx | 8 +- src/pages/verifyAccount.tsx | 8 +- src/react-app-env.d.ts | 7 +- src/{hooks => utils}/errorHandler.ts | 30 +- src/utils/getErrorText.ts | 9 + src/widget.tsx | 52 --- 23 files changed, 517 insertions(+), 156 deletions(-) create mode 100644 src/StandaloneClient.tsx create mode 100644 src/Widget.tsx create mode 100644 src/hooks/useErrorHandler.ts rename src/{hooks => utils}/errorHandler.ts (60%) create mode 100644 src/utils/getErrorText.ts delete mode 100644 src/widget.tsx diff --git a/config-overrides.js b/config-overrides.js index cd0b727..2e570ba 100644 --- a/config-overrides.js +++ b/config-overrides.js @@ -21,7 +21,8 @@ module.exports = function override(config, env) { KycDaoIframeClient: "./src/KycDaoIframeClient.ts", // "index": "./src/index.js", app: "./src/App.tsx", - widget: "./src/widget.tsx", + Widget: "./src/Widget.tsx", + StandaloneClient: "./src/StandaloneClient.tsx", } config.output = { filename: "[name].js", diff --git a/package.json b/package.json index a543dfe..1e6bd88 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kycdao/widget", - "version": "0.5.10", + "version": "1.0.0", "license": "UNLICENSED", "main": "dist/umd/index.js", "types": "dist", diff --git a/public/index.html b/public/index.html index 179576f..bd393c6 100644 --- a/public/index.html +++ b/public/index.html @@ -157,15 +157,6 @@ 44787: "https://alfajores-forno.celo-testnet.org", }, chainId: 80001, - // qrcodeModalOptions: { - // desktopLinks: [ - // 'ledger', - // 'zerion', - // ], - // mobileLinks: [ - // "metamask", - // ], - // } }) const autostart = false @@ -220,10 +211,27 @@ globalThis.selectorHndlr = function (selectedChain, walletConnectOn) { console.log(walletConnectOn) - client.open( - selectedChain, - walletConnectOn ? walletConnectEvmProvider : window.ethereum - ) + const config = { + isModal: true, + container: '#modalRoot', + config: { + demoMode: true, + enabledBlockchainNetworks: [ + "PolygonMumbai", + ], + enabledVerificationTypes: ["KYC"], + evmProvider: walletConnectOn ? walletConnectEvmProvider : window.ethereum, + baseUrl: "https://staging.kycdao.xyz", + } + } + + const handle = KycDaoWidget.open(config) + console.log('handle', handle) + + // client.open( + // selectedChain, + // walletConnectOn ? walletConnectEvmProvider : window.ethereum + // ) } if (autostart) { diff --git a/src/AppContainer.tsx b/src/AppContainer.tsx index 0bbd0fb..ffaa027 100644 --- a/src/AppContainer.tsx +++ b/src/AppContainer.tsx @@ -1,5 +1,4 @@ import { AppStyleContainer } from "@Components/appStyleContainer" -import { errorHandler } from "@Hooks/errorHandler" import { KycDao, KycDaoInitializationResult, @@ -30,6 +29,7 @@ import { StepID, } from "./components" import { Router } from "./pages" +import errorHandler from "@Utils/errorHandler" export type AppContainerProps = { config: SdkConfiguration @@ -236,6 +236,7 @@ const AppContainerRender: ForwardRefRenderFunction< }) }, [config, onReady, messageTargetOrigin]) + // todo: is this needed? useEffect(() => { if (isModal) { const close = OnClose.subscribe(() => { diff --git a/src/StandaloneClient.tsx b/src/StandaloneClient.tsx new file mode 100644 index 0000000..65204a4 --- /dev/null +++ b/src/StandaloneClient.tsx @@ -0,0 +1,73 @@ +// todo: move to types +import { Widget, WidgetConfig } from "./Widget" +import { ErrorPageFactory } from "@Pages/ErrorPage" +import { ErrorBoundary } from "react-error-boundary" +import { createRoot } from "react-dom/client" + +export interface StandaloneClientConfig extends WidgetConfig { + container: HTMLElement | string +} + +export interface StandaloneClientHandle { + close: () => void +} + +export const open = ( + clientConfig: StandaloneClientConfig +): StandaloneClientHandle => { + const { container, onFail, onSuccess, ...props } = clientConfig + + const rootElement = + typeof container === "string" + ? document.querySelector(container) + : container + + if (!rootElement) { + throw new Error( + `There is no such element as '${container}', check your parent selector string!` + ) + } + + const root = createRoot(rootElement) + + // todo: move this to a component + const ErrorBoundaryFallbackComponent = ErrorPageFactory( + window.location.origin + ) + + // As a side effect, unmount the widget when the user closes the modal + const onFailWrapper = (reason?: string) => { + if (onFail) { + onFail(reason) + } + + root.unmount() + } + + const onSuccessWrapper = (data?: string) => { + if (onSuccess) { + onSuccess(data) + } + + root.unmount() + } + + root.render( + + + + ) + + return { + close: () => { + root.unmount() + }, + } +} + +/** + * The KycDaoWidget is the global object that is exposed to the window – which can be accessed from Vanilla JS applications (StandaloneClient). + */ +window.KycDaoWidget = { + open, +} diff --git a/src/Widget.tsx b/src/Widget.tsx new file mode 100644 index 0000000..c7ab7bf --- /dev/null +++ b/src/Widget.tsx @@ -0,0 +1,312 @@ +import { + FC, + StrictMode, + useCallback, + useEffect, + useMemo, + useReducer, + useState, +} from "react" + +import { + KycDao, + KycDaoInitializationResult, + SdkConfiguration, +} from "@kycdao/kycdao-sdk" +import { KycDaoContext } from "@Components/kycDao.provider" +import { + DataActionTypes, + DefaultData, + HeaderButtons, + reducer, + StateContext, + StepID, +} from "@Components/stateContext" +import { Header } from "@Components/header/header" +import { Router } from "@Pages/router" +import { ModalRouter } from "@Components/modal" +import styled from "styled-components/macro" +import useErrorHandler from "@Hooks/useErrorHandler" +import { AppStyleContainer } from "@Components/appStyleContainer" +import { RestartContext } from "@Components/restartContext" +import NeueMachinaRegularBase64 from "./fonts/NeueMachina-Regular" +import { getNetworkType } from "@Utils/getNetworkType" + +export interface ModalOptions { + width: string | number + height: string | number + backdrop?: string +} + +export interface WidgetConfig { + config: SdkConfiguration + onFail?: (reason?: string) => void + onSuccess?: (data?: string) => void + onReady?: (kycDaoSdkInstance: KycDaoInitializationResult) => void + isModal?: boolean + modalOptions?: ModalOptions +} + +const defaultModalOptions: ModalOptions = { + width: "480px", + height: "600px", + backdrop: "rgba(0, 0, 0, 0.7)", +} + +// todo: move this to CSS +const fontFile = new FontFace( + "neue-machina", + `url(${NeueMachinaRegularBase64})`, + { + weight: "400", + style: "normal", + } +) + +document.fonts.add(fontFile) +fontFile.load() + +export const Widget: FC = ({ + config, + onReady, + onFail, + onSuccess, + isModal = false, + modalOptions = { + width: defaultModalOptions.width, + height: defaultModalOptions.height, + }, +}) => { + const [data, dispatch] = useReducer(reducer, { + ...DefaultData, + onSuccess, + onFail, + }) + const contextData = useMemo(() => ({ data, dispatch }), [data, dispatch]) + const [kycDao, setKycDao] = useState() + const [key, setKey] = useState(Date.now()) + const { handleError } = useErrorHandler() + const { width, height, backdrop } = modalOptions + const startFlow = useCallback(async () => { + if (!kycDao) return + + try { + await kycDao.kycDao.connectWallet( + getNetworkType(config.enabledBlockchainNetworks[0]) + ) + + dispatch({ + type: DataActionTypes.setModalMode, + payload: isModal, + }) + + const emailData = await kycDao?.kycDao.checkEmailConfirmed() + + dispatch({ + type: DataActionTypes.setEmailConfirmed, + payload: !!emailData.isConfirmed, + }) + + if (emailData.address) { + dispatch({ + type: DataActionTypes.emailChange, + payload: emailData.address, + }) + } + + const hasValidNft = await kycDao.kycDao.hasValidNft("KYC") + + if (hasValidNft && kycDao.redirectEvent !== "NearMint") { + dispatch({ + payload: { + current: StepID.finalStep, + prev: StepID.loading, + }, + type: DataActionTypes.changePage, + }) + + dispatch({ + payload: true, + type: DataActionTypes.SetProcessSucess, + }) + + dispatch({ + payload: true, + type: DataActionTypes.SetAlreadyHaveAnNftOnThisChain, + }) + + return + } + + await kycDao.kycDao.registerOrLogin() + + let startPage = StepID.AgreementStep + + if (kycDao.redirectEvent) { + dispatch({ + type: DataActionTypes.termsAcceptedChange, + payload: true, + }) + + switch (kycDao.redirectEvent) { + case "NearLogin": + startPage = StepID.AgreementStep + break + case "NearUserRejectedError": + onFail?.() + return + case "NearMint": + dispatch({ + type: DataActionTypes.SetNearMinted, + payload: true, + }) + + if (kycDao.mintingResult?.transactionUrl) { + dispatch({ + type: DataActionTypes.setChainExplorerUrl, + payload: kycDao.mintingResult?.transactionUrl || "", + }) + } + if (kycDao.mintingResult?.imageUrl) { + dispatch({ + type: DataActionTypes.setNftImageUrl, + payload: kycDao.mintingResult?.imageUrl, + }) + } + startPage = StepID.finalStep + } + } else { + await kycDao.kycDao.registerOrLogin() + + const { subscribed } = kycDao.kycDao + + if (subscribed) { + dispatch({ + payload: true, + type: DataActionTypes.SetReturnUserFlow, + }) + } + + startPage = subscribed + ? StepID.subscribedStartStep + : StepID.AgreementStep + } + + dispatch({ + payload: { current: startPage, prev: StepID.loading }, + type: DataActionTypes.changePage, + }) + + if (!isModal) { + dispatch({ + type: DataActionTypes.SetHeaderButtonState, + payload: { button: HeaderButtons.close, state: "hidden" }, + }) + } + } catch (error) { + handleError("fatal", error) + } + }, [config.enabledBlockchainNetworks, handleError, isModal, kycDao, onFail]) + + useEffect(() => { + startFlow() + }, [startFlow]) + + const RestartApp = useCallback(() => { + setKey(Date.now()) + }, []) + + useEffect(() => { + KycDao.initialize(config) + .then((result) => { + setKycDao(result) + + if (onReady) { + onReady(result) + } + }) + .catch((error) => { + handleError("fatal", error) + }) + }, [config, handleError, onReady]) + + const InlineWidget = useMemo( + () => ( + + + + +
+ + + + + + + ), + [RestartApp, contextData, key, kycDao] + ) + + if (!kycDao) { + return null + } + + if (isModal) { + return ( + + + {InlineWidget} + + + ) + } + + return {InlineWidget} +} + +const StyledWidget = styled(AppStyleContainer)` + width: 100%; +` + +const ModalRoot = styled.div>` + z-index: 9999; + width: 100%; + position: absolute; + inset: 0; + background: ${({ backdrop }) => backdrop || defaultModalOptions.backdrop}; + + // todo: refactor: mobile first + @media only screen and (max-width: 992px) { + overflow: hidden; + position: fixed; + } + + @media only screen and (min-width: 992px) { + position: fixed; + overflow: hidden; + height: 100vh; + } +` + +const Modal = styled.div>` + box-shadow: 0 1px 174px rgba(59, 31, 69, 0.2); + width: 100%; + height: 100%; + background-color: #fefefe; + position: absolute; + overflow: hidden; + // todo: is this needed? + --width: ${({ width }) => width}; + --height: ${({ height }) => height}; + + @media only screen and (min-width: 992px) { + width: var(--width); + height: var(--height); + margin: auto; + border-radius: 12px; + overflow: hidden; + inset: 0; + } +` diff --git a/src/components/modal/emailVerificationModal.tsx b/src/components/modal/emailVerificationModal.tsx index bae35fe..067ed93 100644 --- a/src/components/modal/emailVerificationModal.tsx +++ b/src/components/modal/emailVerificationModal.tsx @@ -11,7 +11,7 @@ import { import { DataActionTypes, StateContext } from "@Components/stateContext" import { P, Policy } from "@Components/typography" import { Button } from "@Components/button/button" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" export const EmailVerificationModal = () => { const { @@ -19,15 +19,15 @@ export const EmailVerificationModal = () => { dispatch, } = useContext(StateContext) - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const kycDao = useKycDao() const onResend = useCallback(() => { kycDao?.kycDao.resendEmailConfirmationCode().catch((e) => { - errorHandler("fatal", e) + handleError("fatal", e) }) - }, [kycDao, errorHandler]) + }, [kycDao, handleError]) const onChangeEmail = useCallback(() => { dispatch({ type: DataActionTypes.setModal, payload: null }) diff --git a/src/components/stateContext/stateContextTypes.ts b/src/components/stateContext/stateContextTypes.ts index 50d5a97..b89fac1 100644 --- a/src/components/stateContext/stateContextTypes.ts +++ b/src/components/stateContext/stateContextTypes.ts @@ -92,6 +92,8 @@ export type Data = { isProcessSuccess: boolean alreadyHaveAnNftOnThisChain: boolean nearMinted: boolean + onSuccess?: (data?: string) => void + onFail?: (reason?: string) => void } export type HeaderButtonState = "enabled" | "disabled" | "hidden" diff --git a/src/hooks/useErrorHandler.ts b/src/hooks/useErrorHandler.ts new file mode 100644 index 0000000..d3f06d6 --- /dev/null +++ b/src/hooks/useErrorHandler.ts @@ -0,0 +1,27 @@ +import { StateContext } from "@Components/stateContext" +import { useCallback, useContext } from "react" +import errorHandler, { ErrorType } from "@Utils/errorHandler" + +export default function useErrorHandler() { + const { + dispatch, + data: { currentPage, messageTargetOrigin }, + } = useContext(StateContext) + + const handleError = useCallback( + (type: ErrorType, error: unknown) => { + return errorHandler( + type, + error, + dispatch, + currentPage, + messageTargetOrigin + ) + }, + [currentPage, dispatch, messageTargetOrigin] + ) + + return { + handleError, + } +} diff --git a/src/hooks/useMinting.ts b/src/hooks/useMinting.ts index 9ea1109..1793fc5 100644 --- a/src/hooks/useMinting.ts +++ b/src/hooks/useMinting.ts @@ -1,14 +1,14 @@ import { DataActionTypes, StateContext, StepID } from "@Components/stateContext" import { VerificationTypes } from "@kycdao/kycdao-sdk" import { useContext } from "react" -import useErrorHandler from "./errorHandler" +import useErrorHandler from "./useErrorHandler" import { useKycDao } from "./useKycDao" export const useMinting = () => { const kycDao = useKycDao() const state = useContext(StateContext) - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() return async function StartMinting( imageId: string, @@ -59,7 +59,7 @@ export const useMinting = () => { payload: true, }) } catch (error) { - errorHandler("minting", error) + handleError("minting", error) } } } diff --git a/src/index.js b/src/index.js index b23ad09..6e1c75e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,8 @@ export * from "./BootstrapKycDaoModal" export * from "./App" -export * from "./widget" export * from "./KycDaoClient" export * from "./KycDaoIframeClient" + +// new +export * from "./Widget" +export * from "./StandaloneClient" \ No newline at end of file diff --git a/src/pages/ErrorPage.tsx b/src/pages/ErrorPage.tsx index 161f557..3801453 100644 --- a/src/pages/ErrorPage.tsx +++ b/src/pages/ErrorPage.tsx @@ -1,13 +1,16 @@ import { CloseOnlyHeader } from "@Components/header/closeOnlyHeader" -import { Step, H1, P, Button } from "@Components/index" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" -import { useCallback } from "react" +import { Step, H1, P, Button, StateContext } from "@Components/index" +import { useCallback, useContext } from "react" import { FallbackProps } from "react-error-boundary" const Header = () =>

Something went wrong!

export const ErrorPageFactory = (messageTargetOrigin: string) => function ErrorPage({ error, resetErrorBoundary }: FallbackProps) { + const { + data: { onFail }, + } = useContext(StateContext) + const body = useCallback(() => { return (
@@ -17,11 +20,8 @@ export const ErrorPageFactory = (messageTargetOrigin: string) => }, [error.message]) const onClose = useCallback(() => { - window.parent.postMessage( - { type: "kycDaoCloseModal" } as KycDaoClientMessageBody, - messageTargetOrigin - ) - }, []) + onFail?.() + }, [onFail]) const footer = useCallback( () => ( diff --git a/src/pages/beginVerifying.tsx b/src/pages/beginVerifying.tsx index acbac5c..442ab38 100644 --- a/src/pages/beginVerifying.tsx +++ b/src/pages/beginVerifying.tsx @@ -5,7 +5,7 @@ import { useKycDao } from "@Hooks/useKycDao" import { PageProps } from "./pageProps" import { H1, StateContext, StepID } from "@Components/index" import useChangePage from "@Hooks/useChangePage" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" export const BeginVerifyingStep: FC = ({ inactive, disabled }) => { const onError = useCallback((error: string) => { @@ -14,7 +14,7 @@ export const BeginVerifyingStep: FC = ({ inactive, disabled }) => { // what should be the error page? }, []) - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const { dispatch, @@ -81,7 +81,7 @@ export const BeginVerifyingStep: FC = ({ inactive, disabled }) => { } ) } catch (error) { - errorHandler("fatal", error) + handleError("fatal", error) } })() }, [ @@ -100,7 +100,7 @@ export const BeginVerifyingStep: FC = ({ inactive, disabled }) => { isEmailConfirmed, grantFlowEnabled, redirect, - errorHandler, + handleError, ]) if (!kycDao) { diff --git a/src/pages/emailDiscordVerificationStep.tsx b/src/pages/emailDiscordVerificationStep.tsx index f555631..df1cd4e 100644 --- a/src/pages/emailDiscordVerificationStep.tsx +++ b/src/pages/emailDiscordVerificationStep.tsx @@ -29,7 +29,7 @@ import { import useChangePage from "@Hooks/useChangePage" import styled from "styled-components/macro" import UnstyledDiscordLogo from "../images/discord.svg" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" const emailRegex = /^[^@]+@[a-z0-9-]+.[a-z]+$/ @@ -86,7 +86,7 @@ export const EmailDiscordVerificationStep: FC = ({ } = useContext(StateContext) const redirect = useChangePage() const kycDao = useKycDao() - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const [buttonAutofocus, setButtonAutoFocus] = useState(false) @@ -179,12 +179,12 @@ export const EmailDiscordVerificationStep: FC = ({ clearInterval(confirmationInterval.current) } } catch (error) { - errorHandler("modal", error) + handleError("modal", error) } } confirmationInterval.current = setInterval(emailCheck, 1500) } catch (error) { - errorHandler("modal", error) + handleError("modal", error) } } else { redirect(StepID.taxResidenceStep, StepID.emailDiscordVerificationStep) @@ -197,7 +197,7 @@ export const EmailDiscordVerificationStep: FC = ({ dispatch, emailValue, redirect, - errorHandler, + handleError, ]) const onPrev = useCallback(() => { diff --git a/src/pages/finalStep.tsx b/src/pages/finalStep.tsx index ef5cef5..e3b347e 100644 --- a/src/pages/finalStep.tsx +++ b/src/pages/finalStep.tsx @@ -15,8 +15,7 @@ import { StepPart, SubmitButton, } from "@Components/index" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" import { TwitterShareButton } from "react-twitter-embed" export const NftButtonWrapper = styled.div` @@ -45,15 +44,15 @@ export const FinalStep: FC = ({ const { dispatch, data: { - messageTargetOrigin, chainExplorerUrl, nftImageUrl, alreadyHaveAnNftOnThisChain, nearMinted, + onSuccess, }, } = useContext(StateContext) - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const header = useCallback( () => @@ -97,14 +96,14 @@ export const FinalStep: FC = ({ setDisplayedNftImageUrl(tokens[0].image) } } catch (error) { - errorHandler("modal", error) + handleError("modal", error) } } else { setDisplayedNftImageUrl(kycDao.mintingResult?.imageUrl || nftImageUrl) } })() } - }, [kycDao, nftImageUrl, errorHandler, alreadyHaveAnNftOnThisChain]) + }, [kycDao, nftImageUrl, handleError, alreadyHaveAnNftOnThisChain]) const body = useCallback( (props) => ( @@ -145,26 +144,17 @@ export const FinalStep: FC = ({ const onFinish = useCallback(async () => { if (alreadyHaveAnNftOnThisChain) { - window.parent.postMessage( - { - type: "kycDaoSuccess", - data: `Already has an nft on ${kycDao?.kycDao.connectedWallet?.blockchainNetwork}.`, - } as KycDaoClientMessageBody, - messageTargetOrigin - ) - } else { - window.parent.postMessage( - { - type: "kycDaoSuccess", - data: chainExplorerUrl, - } as KycDaoClientMessageBody, - messageTargetOrigin + onSuccess?.( + `Already has an nft on ${kycDao?.kycDao.connectedWallet?.blockchainNetwork}.` ) + return } + + onSuccess?.(chainExplorerUrl || "") }, [ - messageTargetOrigin, - chainExplorerUrl, alreadyHaveAnNftOnThisChain, + chainExplorerUrl, + onSuccess, kycDao?.kycDao.connectedWallet?.blockchainNetwork, ]) diff --git a/src/pages/membershipCard.tsx b/src/pages/membershipCard.tsx index 44e1ac0..ea4ffc3 100644 --- a/src/pages/membershipCard.tsx +++ b/src/pages/membershipCard.tsx @@ -26,7 +26,7 @@ import { Ul, } from "@Components/index" import useChangePage from "@Hooks/useChangePage" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" const Footer: StepPart = ({ disabled, inactive, onEnter }) => ( <> @@ -180,7 +180,7 @@ export const KycDAOMembershipStep: FC = ({ data: { returningUserFlow }, } = useContext(StateContext) const redirect = useChangePage() - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const kycDaoContext = useKycDao() @@ -220,11 +220,11 @@ export const KycDAOMembershipStep: FC = ({ errorMsg = `${errorMsg} (${e.message})` } - errorHandler("modal", errorMsg) + handleError("modal", errorMsg) } } } - }, [dispatch, kycDaoContext, redirect, errorHandler]) + }, [dispatch, kycDaoContext, redirect, handleError]) useEffect(() => { if (!disabled && !inactive) { diff --git a/src/pages/mintMembershipCard.tsx b/src/pages/mintMembershipCard.tsx index 4e307df..c6456f6 100644 --- a/src/pages/mintMembershipCard.tsx +++ b/src/pages/mintMembershipCard.tsx @@ -21,7 +21,7 @@ import { SubmitButton, } from "@Components/index" import useChangePage from "@Hooks/useChangePage" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" const Body = () => { return ( @@ -236,7 +236,7 @@ export const MintStep: FC = ({ const minting = useMinting() - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const onSubmit = useCallback(async () => { if (kycDao && yearCount && yearCount > 0 && imageId) { @@ -247,10 +247,10 @@ export const MintStep: FC = ({ try { await minting(imageId, yearCount) } catch (error) { - errorHandler("minting", error) + handleError("minting", error) } } - }, [kycDao, yearCount, minting, dispatch, imageId, errorHandler]) + }, [kycDao, yearCount, minting, dispatch, imageId, handleError]) const onTransitionDone = useCallback(() => { if (!disabled && !inactive) { diff --git a/src/pages/nftArtSelection.tsx b/src/pages/nftArtSelection.tsx index 81dfdc8..08a15a2 100644 --- a/src/pages/nftArtSelection.tsx +++ b/src/pages/nftArtSelection.tsx @@ -22,7 +22,7 @@ import { } from "@Components/index" import { NftButtonWrapper } from "./finalStep" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" const Header = () => (

@@ -87,7 +87,7 @@ export const NftSelection: FC = ({ const [nftImages, setNftImages] = useState([]) - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const onArtClick = useCallback( (id: string) => () => { @@ -124,7 +124,7 @@ export const NftSelection: FC = ({ try { await startMinting(currentArt) } catch (error) { - errorHandler("fatal", error) + handleError("fatal", error) } } else { dispatch({ @@ -141,7 +141,7 @@ export const NftSelection: FC = ({ kycDao?.kycDao.subscribed, startMinting, currentArt, - errorHandler, + handleError, ]) const onPrev = useCallback(() => { diff --git a/src/pages/verifyAccount.tsx b/src/pages/verifyAccount.tsx index 6ca16db..c941887 100644 --- a/src/pages/verifyAccount.tsx +++ b/src/pages/verifyAccount.tsx @@ -21,7 +21,7 @@ import { Selector } from "./selector" import { useVerified } from "@Hooks/useVerified" import veriLabs from "@Components/Icons/veriLabs" import emptyIcon from "@Components/Icons/emptyIcon" -import useErrorHandler from "@Hooks/errorHandler" +import useErrorHandler from "@Hooks/useErrorHandler" const Footer: StepPart = ({ disabled, inactive, onEnter }) => ( = ({ } = useContext(StateContext) const redirect = useChangePage() const checkVerification = useVerified() - const errorHandler = useErrorHandler() + const { handleError } = useErrorHandler() const onSubmit = useCallback(() => { if (returningUserFlow) { @@ -205,7 +205,7 @@ export const VerifyAccountStep: FC = ({ } })() } catch (error) { - errorHandler("fatal", error) + handleError("fatal", error) } } }, [ @@ -213,7 +213,7 @@ export const VerifyAccountStep: FC = ({ returningUserFlow, checkVerification, dispatch, - errorHandler, + handleError, isEmailConfirmed, ]) diff --git a/src/react-app-env.d.ts b/src/react-app-env.d.ts index 48e008e..9f74282 100644 --- a/src/react-app-env.d.ts +++ b/src/react-app-env.d.ts @@ -1,10 +1,11 @@ /// import { MetaMaskInpageProvider } from "@metamask/providers" -import { KycDaoWidgetConfig } from "./widget" +import { KycDaoWidgetConfig } from "./Widget" import { KycDaoClientOptions, KycDaoClientInterface, } from "./KycDaoClientCommon" +import { StandaloneClientHandle } from "./StandaloneClient" type VirtualKeyboardEvent = UIEvent & { target: { boundingRect: { height: string } } @@ -19,7 +20,9 @@ declare global { KycDaoIframeClient: { new (config: KycDaoClientOptions): KycDaoClientInterface } - KycDaoWidget: React.FC + KycDaoWidget: { + open: (config: KycDaoWidgetConfig) => StandaloneClientHandle + } } interface Navigator { diff --git a/src/hooks/errorHandler.ts b/src/utils/errorHandler.ts similarity index 60% rename from src/hooks/errorHandler.ts rename to src/utils/errorHandler.ts index 8bdfd2c..a731863 100644 --- a/src/hooks/errorHandler.ts +++ b/src/utils/errorHandler.ts @@ -1,24 +1,18 @@ import { DataActionTypes, DataChangeActions, - StateContext, StepID, } from "@Components/stateContext" -import { KycDaoClientMessageBody } from "KycDaoClientCommon" -import { useContext } from "react" +import getErrorText from "@Utils/getErrorText" +import { KycDaoClientMessageBody } from "../KycDaoClientCommon" +import { Dispatch } from "react" -function getErrorText(error: unknown) { - if (typeof error === "object" && !(error instanceof Error)) { - return JSON.stringify(error) - } else { - return `${error}` - } -} +export type ErrorType = "fatal" | "modal" | "minting" -export function errorHandler( - type: "fatal" | "modal" | "minting", +export default function errorHandler( + type: ErrorType, error: unknown, - dispatch: React.Dispatch, + dispatch: Dispatch, currentPage: StepID, messageTargetOrigin: string ) { @@ -72,13 +66,3 @@ export function errorHandler( } } } - -export default function useErrorHandler() { - const { - dispatch, - data: { currentPage, messageTargetOrigin }, - } = useContext(StateContext) - - return (type: "fatal" | "modal" | "minting", error: unknown) => - errorHandler(type, error, dispatch, currentPage, messageTargetOrigin) -} diff --git a/src/utils/getErrorText.ts b/src/utils/getErrorText.ts new file mode 100644 index 0000000..d8e78af --- /dev/null +++ b/src/utils/getErrorText.ts @@ -0,0 +1,9 @@ +function getErrorText(error: unknown) { + if (typeof error === "object" && !(error instanceof Error)) { + return JSON.stringify(error) + } else { + return `${error}` + } +} + +export default getErrorText diff --git a/src/widget.tsx b/src/widget.tsx deleted file mode 100644 index 929ef9e..0000000 --- a/src/widget.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { FC, useEffect, useRef } from "react" - -import { KycDaoClient } from "./KycDaoClient" -import { - KycDaoClientInterface, - KycDaoClientOptions, -} from "./KycDaoClientCommon" -import { - KycDaoInitializationResult, - SdkConfiguration, -} from "@kycdao/kycdao-sdk" - -export interface KycDaoWidgetConfig { - config: SdkConfiguration - onFail?: (reason?: string) => void - onSuccess?: (data?: string) => void - onReady?: (kycDaoSdkInstance: KycDaoInitializationResult) => void -} - -export const KycDaoWidget: FC = (props) => { - const parent = useRef(null) - const client = useRef() - - useEffect(() => { - const ClientConstructor = KycDaoClient as unknown as { - new (config: KycDaoClientOptions): KycDaoClientInterface - } - - if (parent.current) { - client.current = new ClientConstructor({ - ...props, - parent: parent.current, - width: 400, - height: 650, - configFromUrl: false, - modal: false, - backdrop: false, - }) - client.current.open() - } else { - console.error("Something went wrong, check the widget creator function!") - } - - return () => { - client.current?.close() - } - }, [props]) - - return
-} - -window.KycDaoWidget = KycDaoWidget From d21c9154d42881160b909b55b548d022619b0bed Mon Sep 17 00:00:00 2001 From: balazs Date: Wed, 8 Mar 2023 17:37:11 +0100 Subject: [PATCH 14/52] StandaloneIframeClient --- src/StandaloneClient.tsx | 1 - src/StandaloneIframeClient.tsx | 115 +++++++++++++++++++++++++++++++++ src/Widget.tsx | 30 ++++++--- src/index.js | 4 +- src/react-app-env.d.ts | 19 +++++- src/types.ts | 9 +++ 6 files changed, 165 insertions(+), 13 deletions(-) create mode 100644 src/StandaloneIframeClient.tsx create mode 100644 src/types.ts diff --git a/src/StandaloneClient.tsx b/src/StandaloneClient.tsx index 65204a4..87a39b5 100644 --- a/src/StandaloneClient.tsx +++ b/src/StandaloneClient.tsx @@ -1,4 +1,3 @@ -// todo: move to types import { Widget, WidgetConfig } from "./Widget" import { ErrorPageFactory } from "@Pages/ErrorPage" import { ErrorBoundary } from "react-error-boundary" diff --git a/src/StandaloneIframeClient.tsx b/src/StandaloneIframeClient.tsx new file mode 100644 index 0000000..578a882 --- /dev/null +++ b/src/StandaloneIframeClient.tsx @@ -0,0 +1,115 @@ +import { + defaultModalOptions, + WidgetConfig, + WidgetModalContainer, +} from "./Widget" +import { ErrorPageFactory } from "@Pages/ErrorPage" +import { ErrorBoundary } from "react-error-boundary" +import { createRoot } from "react-dom/client" +import { KycDaoEvent, KycDaoOnReadyEvent } from "./types" + +export interface StandaloneIframeClientConfig extends WidgetConfig { + container: HTMLElement | string + url: string +} + +export interface StandaloneIframeClientHandle { + close: () => void +} + +const addParams = (params: URLSearchParams, obj: Record): void => { + for (const [key, value] of Object.entries(obj)) { + params.set(key, Array.isArray(value) ? `["${value.join('","')}"]` : value) + } +} + +export const open = ( + clientConfig: StandaloneIframeClientConfig +): StandaloneIframeClientHandle => { + const { + container, + url, + config, + modalOptions = defaultModalOptions, + onFail, + onReady, + onSuccess, + isModal, + } = clientConfig + + const rootElement = + typeof container === "string" + ? document.querySelector(container) + : container + + if (!rootElement) { + throw new Error( + `There is no such element as '${container}', check your parent selector string!` + ) + } + + const root = createRoot(rootElement) + + // todo: move this to a component + const ErrorBoundaryFallbackComponent = ErrorPageFactory( + window.location.origin + ) + + const params = new URLSearchParams() + // unpack the config object into the URL params + addParams(params, config) + + root.render( + + +