diff --git a/examples/oauth/.env.local.example b/examples/oauth/.env.local.example index b24b0e2d3..9d4344fd4 100644 --- a/examples/oauth/.env.local.example +++ b/examples/oauth/.env.local.example @@ -1,7 +1,7 @@ API_PUBLIC_KEY="" API_PRIVATE_KEY="" NEXT_PUBLIC_ORGANIZATION_ID="" -NEXT_PUBLIC_GOOGLE_CLIENT_ID=" +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/react-components/next.config.js b/examples/react-components/next.config.js new file mode 100644 index 000000000..658404ac6 --- /dev/null +++ b/examples/react-components/next.config.js @@ -0,0 +1,4 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = {}; + +module.exports = nextConfig; diff --git a/examples/react-components/package.json b/examples/react-components/package.json new file mode 100644 index 000000000..743a8e441 --- /dev/null +++ b/examples/react-components/package.json @@ -0,0 +1,43 @@ +{ + "name": "@turnkey/example-react-components", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "typecheck": "tsc --noEmit" + }, + "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@hello-pangea/dnd": "^17.0.0", + "@mui/icons-material": "^6.1.5", + "@mui/material": "^6.1.5", + "@noble/hashes": "1.4.0", + "@solana/web3.js": "^1.95.8", + "@turnkey/sdk-browser": "workspace:*", + "@turnkey/sdk-react": "workspace:*", + "@turnkey/sdk-server": "workspace:*", + "@types/node": "20.3.1", + "@types/react": "18.2.14", + "@types/react-dom": "18.2.6", + "axios": "^1.7.4", + "buffer": "^6.0.3", + "encoding": "^0.1.13", + "eslint": "8.43.0", + "eslint-config-next": "14.2.10", + "esm": "^3.2.25", + "ethers": "^6.10.0", + "install": "^0.13.0", + "next": "^14.2.10", + "npm": "^9.7.2", + "react": "18.2.0", + "react-dom": "18.2.0", + "react-international-phone": "^4.3.0", + "sonner": "^1.4.41", + "tweetnacl": "^1.0.3", + "typescript": "5.1.3" + } +} diff --git a/examples/react-components/public/apple.svg b/examples/react-components/public/apple.svg new file mode 100644 index 000000000..2ed4299f4 --- /dev/null +++ b/examples/react-components/public/apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/react-components/public/dots.svg b/examples/react-components/public/dots.svg new file mode 100644 index 000000000..191f566b4 --- /dev/null +++ b/examples/react-components/public/dots.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/examples/react-components/public/eth-hover.svg b/examples/react-components/public/eth-hover.svg new file mode 100644 index 000000000..6c831b0c9 --- /dev/null +++ b/examples/react-components/public/eth-hover.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/react-components/public/eth.svg b/examples/react-components/public/eth.svg new file mode 100644 index 000000000..4142f57ad --- /dev/null +++ b/examples/react-components/public/eth.svg @@ -0,0 +1,4 @@ + + + + diff --git a/examples/react-components/public/facebook.svg b/examples/react-components/public/facebook.svg new file mode 100644 index 000000000..31884b73e --- /dev/null +++ b/examples/react-components/public/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/react-components/public/favicon.svg b/examples/react-components/public/favicon.svg new file mode 100644 index 000000000..73948fa1a --- /dev/null +++ b/examples/react-components/public/favicon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/react-components/public/fonts/inter/Inter-Bold.woff2 b/examples/react-components/public/fonts/inter/Inter-Bold.woff2 new file mode 100644 index 000000000..2846f29cc Binary files /dev/null and b/examples/react-components/public/fonts/inter/Inter-Bold.woff2 differ diff --git a/examples/react-components/public/fonts/inter/Inter-Regular.woff2 b/examples/react-components/public/fonts/inter/Inter-Regular.woff2 new file mode 100644 index 000000000..6c2b6893d Binary files /dev/null and b/examples/react-components/public/fonts/inter/Inter-Regular.woff2 differ diff --git a/examples/react-components/public/fonts/inter/Inter-SemiBold.woff2 b/examples/react-components/public/fonts/inter/Inter-SemiBold.woff2 new file mode 100644 index 000000000..611e90c95 Binary files /dev/null and b/examples/react-components/public/fonts/inter/Inter-SemiBold.woff2 differ diff --git a/examples/react-components/public/google.svg b/examples/react-components/public/google.svg new file mode 100644 index 000000000..fb226ca2d --- /dev/null +++ b/examples/react-components/public/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/react-components/public/grid.svg b/examples/react-components/public/grid.svg new file mode 100644 index 000000000..0a75c8f9d --- /dev/null +++ b/examples/react-components/public/grid.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/examples/react-components/public/key.svg b/examples/react-components/public/key.svg new file mode 100644 index 000000000..22b871e14 --- /dev/null +++ b/examples/react-components/public/key.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/react-components/public/logo.svg b/examples/react-components/public/logo.svg new file mode 100644 index 000000000..f983fd29b --- /dev/null +++ b/examples/react-components/public/logo.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + diff --git a/examples/react-components/public/mail.svg b/examples/react-components/public/mail.svg new file mode 100644 index 000000000..0e1f2cd7b --- /dev/null +++ b/examples/react-components/public/mail.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/react-components/public/phone.svg b/examples/react-components/public/phone.svg new file mode 100644 index 000000000..058ec4e36 --- /dev/null +++ b/examples/react-components/public/phone.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/examples/react-components/public/solana-hover.svg b/examples/react-components/public/solana-hover.svg new file mode 100644 index 000000000..bca516ef0 --- /dev/null +++ b/examples/react-components/public/solana-hover.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/examples/react-components/public/solana.svg b/examples/react-components/public/solana.svg new file mode 100644 index 000000000..fc0ae4936 --- /dev/null +++ b/examples/react-components/public/solana.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/examples/react-components/src/app/components/Navbar.css b/examples/react-components/src/app/components/Navbar.css new file mode 100644 index 000000000..090831808 --- /dev/null +++ b/examples/react-components/src/app/components/Navbar.css @@ -0,0 +1,15 @@ +.navbar { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000; + background-color: black; + display: flex; + align-items: center; + height: 3rem; + padding: 1rem; +} +.navbarLogo { + padding-left: 24px; +} diff --git a/examples/react-components/src/app/components/Navbar.tsx b/examples/react-components/src/app/components/Navbar.tsx new file mode 100644 index 000000000..e80c69734 --- /dev/null +++ b/examples/react-components/src/app/components/Navbar.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import "./Navbar.css"; + +const Navbar = () => { + return ( + + ); +}; + +export default Navbar; diff --git a/examples/react-components/src/app/components/PhoneInput.tsx b/examples/react-components/src/app/components/PhoneInput.tsx new file mode 100644 index 000000000..fa032af5e --- /dev/null +++ b/examples/react-components/src/app/components/PhoneInput.tsx @@ -0,0 +1,160 @@ +import "react-international-phone/style.css"; +import { + BaseTextFieldProps, + InputAdornment, + MenuItem, + Select, + TextField, + Typography, +} from "@mui/material"; +import { + CountryIso2, + defaultCountries, + parseCountry, + usePhoneInput, +} from "react-international-phone"; +import { FlagImage as OriginalFlagImage } from "react-international-phone"; + +const FlagImage = OriginalFlagImage as React.ElementType; +const allowedCountries = ["us", "ca"]; + +const countries = defaultCountries.filter((country) => { + const { iso2 } = parseCountry(country); + return allowedCountries.includes(iso2); +}); + +export interface MUIPhoneProps extends BaseTextFieldProps { + value: string; + onChange: (phone: string) => void; +} + +export const MuiPhone: React.FC = ({ + value, + onChange, + ...restProps +}) => { + const { inputValue, handlePhoneValueChange, inputRef, country, setCountry } = + usePhoneInput({ + defaultCountry: "us", + disableDialCodeAndPrefix: true, + value, + countries: countries, + onChange: (data) => { + onChange(data.phone); + }, + }); + + return ( + + + + ), + }} + {...restProps} + /> + ); +}; diff --git a/examples/react-components/src/app/components/Switch.tsx b/examples/react-components/src/app/components/Switch.tsx new file mode 100644 index 000000000..f43b6d016 --- /dev/null +++ b/examples/react-components/src/app/components/Switch.tsx @@ -0,0 +1,26 @@ +import { styled, Switch } from "@mui/material"; + +const CustomSwitch = styled(Switch)(({ theme }) => ({ + padding: 8, + "& .MuiSwitch-track": { + borderRadius: 22 / 2, + backgroundColor: theme.palette.grey[400], + opacity: 1, + }, + "& .MuiSwitch-thumb": { + backgroundColor: "#FFFFFF", + boxShadow: "none", + width: 16, + height: 16, + margin: 2, + }, + "& .MuiSwitch-switchBase.Mui-checked": { + color: "var(--Greyscale-900, #2B2F33)", + }, + "& .MuiSwitch-switchBase.Mui-checked + .MuiSwitch-track": { + backgroundColor: "var(--Greyscale-900, #2B2F33)", + opacity: 1, + }, +})); + +export default CustomSwitch; diff --git a/examples/react-components/src/app/dashboard/dashboard.css b/examples/react-components/src/app/dashboard/dashboard.css new file mode 100644 index 000000000..745b58559 --- /dev/null +++ b/examples/react-components/src/app/dashboard/dashboard.css @@ -0,0 +1,497 @@ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../../../public/fonts/inter/Inter-Regular.woff2?v=3.19") + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("../../../public/fonts/inter/Inter-SemiBold.woff2?v=3.19") + format("woff2"); +} + +.MuiTypography-root { + font-family: "Inter", Arial, sans-serif !important; +} + +body { + font-family: "Inter"; + margin: 0; + padding: 0; + width: 100vw; + height: 100vh; + background-image: url("../../../public/grid.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + font-family: Inter, sans-serif; +} + +.loaderOverlay { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; + background: none; +} + +.circularProgress { + color: #4c48ff; +} +.main { + font-family: Inter; + display: flex; + justify-content: center; + align-items: center; + padding: 8rem; + padding-bottom: 0rem; + gap: 60px; + position: relative; +} + +.dashboardContainer { + position: absolute; + left: 0; + display: flex; + justify-content: flex-start; +} + +.dashboardCard { + min-width: 400px; + background: var(--Greyscale-20, #f5f7fb); + padding: 8px 24px; + border-radius: 8px; + width: 542px; + height: 584px; + border: 1px solid var(--Greyscale-100, #ebedf2); + font-family: Arial, sans-serif; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + display: flex; + flex-direction: column; + justify-content: flex-start; +} + +.socialsTitle { + font-family: "Inter"; + font-size: 1rem; + font-weight: 700; + line-height: 26px; + letter-spacing: -0.01em; + text-align: left; + margin-top: 16px; +} + +.configTitle { + font-family: "Inter"; + font-size: 1.5rem; + font-weight: 700; + line-height: 36px; + letter-spacing: -0.01em; + text-align: left; + margin-bottom: 16px; + margin-top: 16px; +} +.modalTitle { + font-size: 18px; + line-height: 24px; + font-weight: 600; + letter-spacing: -0.01em; + text-align: left; +} + +.accountContainer { + display: flex; + flex-direction: column; + gap: 12px; + border-bottom: 1px solid var(--Greyscale-200, #ebedf2); +} + +.loginMethodContainer { + display: flex; + flex-direction: column; + gap: 12px; +} + +.loginMethodRow { + background-color: #ffffff; + border-radius: 8px; + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + position: relative; +} + +.labelContainer { + display: flex; + align-items: center; + gap: 8px; + flex: 0; +} + +.loginMethodDetails { + font-size: 1rem; + line-height: 20px; + color: #868c95; + position: absolute; + left: 33%; + text-align: left; +} + +.accountRow { + background-color: #ffffff; + border-radius: 8px; + align-items: center; + display: flex; + justify-content: space-between; + padding: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.accountAddress { + margin-left: 4px; + font-family: monospace; + font-size: 16px; + display: flex; + align-items: center; + gap: 4px; + transition: color 0.3s ease; +} +.accountAddress:hover { + color: #8a8a8a; +} + +.radioButton { + margin-left: auto; +} + +.toggleSocialRow { + background-color: #ffffff; + border-radius: 8px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; +} + +.toggleSocialIndividualRow { + background-color: var(--Greyscale-20, #f5f7fb); + display: flex; + margin-left: 16px; + padding-left: 16px; + padding-top: 4px; + padding-bottom: 4px; + justify-content: space-between; + align-items: center; +} + +.copyConfigButton { + display: flex; + align-items: center; + cursor: pointer; + color: #666; + font-size: 14px; + margin-top: auto; + padding: 8px 16px; +} +.copyConfigText { + padding-left: 4px; +} + +.authComponent { + display: flex; + justify-content: center; + align-items: center; + flex: 1; +} + +.success { + justify-items: center; +} + +.iconSmall { + width: 24px; + height: 24px; +} + +.socialContainer { + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + padding: 8px 16px; + padding-bottom: 16px; + background-color: #ffffff; +} + +.continue { + margin-top: 12px; + /* margin-top: 24px; */ +} + +.signMessage { + margin-bottom: 12px; + /* margin-top: 24px; */ +} +.exportImportGroup { + margin-top: 12px; + display: flex; + gap: 12px; +} + +button { + padding: 10px 16px 10px 16px; + gap: 8px; + color: #ffffff; + width: 100%; + font-size: 1rem; + background: var(--Greyscale-900, #2b2f33); + border: 1px solid var(--Greyscale-800, #3f464b); + border-radius: 8px; + cursor: pointer; + transition: 0.3s ease; +} + +button:disabled { + color: var(--Greyscale-700, #a2a7ae); + background: #ffffff; + border-color: var(--Greyscale-400, #a2a7ae); + cursor: not-allowed; +} + +button:hover { + background-color: var(--Greyscale-700, #4a4f55); +} + +.authFooter { + display: flex; + justify-content: space-between; + align-items: flex-end; + padding-top: 16px; + border-top: 1px solid var(--Greyscale-200, #ebedf2); + margin-top: auto; +} + +.authFooterLeft, +.authFooterRight { + display: flex; + flex-direction: column; + align-items: center; + width: 50%; + margin-bottom: 12px; +} + +.authFooterLeft { + justify-content: flex-start; + text-align: center; +} + +.authFooterRight { + justify-content: flex-start; + text-align: center; +} + +.authFooterSeparatorVertical { + border-left: 1px solid var(--Greyscale-200, #ebedf2); + height: 100%; + margin: 0 16px; +} + +.authFooterButton { + display: flex; + align-items: center; + justify-content: center; + gap: 8px; + cursor: pointer; +} + +.eth-icon { + position: relative; + width: 32px; + height: 32px; + display: inline-block; + background-image: url("/eth.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + overflow: hidden; +} + +.eth-icon::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url("/eth-hover.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + opacity: 0; /* Hover state starts hidden */ + transition: opacity 0.3s ease; /* Smooth fade-in effect */ +} + +.eth-icon:hover::after { + opacity: 1; /* Fade in hover image */ +} + +.sol-icon { + position: relative; + width: 32px; + height: 32px; + display: inline-block; + background-image: url("/solana.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + overflow: hidden; +} + +.sol-icon::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url("/solana-hover.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + opacity: 0; + transition: opacity 0.3s ease; +} + +.sol-icon:hover::after { + opacity: 1; +} + +/* HoverContainer for the clickable elements */ +.hoverContainer { + display: flex; + align-items: center; + gap: 8px; + transition: color 0.3s ease; /* Smooth hover transition */ +} + +.hoverContainer:hover .eth-icon::after, +.hoverContainer:hover .sol-icon::after { + opacity: 1; /* Smooth transition for hover icons */ +} + +.hoverContainer:hover .accountAddress, +.hoverContainer:hover .launchIcon { + color: #8a8a8a; /* Lighter gray on hover */ +} + +/* AccountRow */ +.accountRow { + background-color: #ffffff; /* No background hover effect */ + border-radius: 8px; + align-items: center; + display: flex; + justify-content: space-between; + padding: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +/* Shared styling for address text and icons */ +.accountAddress { + font-family: monospace; + font-size: 16px; + transition: color 0.3s ease; /* Smooth text color transition */ +} + +.launchIcon { + width: 16px; + transition: color 0.3s ease; /* Smooth icon color transition */ +} + +/* Eth and Sol hover icon transitions */ +.eth-icon, +.sol-icon { + position: relative; + width: 32px; + height: 32px; + display: inline-block; + background-size: cover; + background-repeat: no-repeat; + background-position: center; + cursor: pointer; + overflow: hidden; +} + +.eth-icon { + background-image: url("/eth.svg"); +} + +.eth-icon::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url("/eth-hover.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + opacity: 0; + transition: opacity 0.3s ease; +} + +.sol-icon { + background-image: url("/solana.svg"); +} + +.sol-icon::after { + content: ""; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: url("/solana-hover.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; + opacity: 0; + transition: opacity 0.3s ease; +} +.passkeyContainer { + font-family: "Inter"; + font-style: normal; + font-weight: 400; +} +.passkeyIconContainer { + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + margin: 16px 0; +} + +.sonner-toaster { + font-family: "Inter"; + font-size: 14px; + z-index: 9999; + pointer-events: none; + background-color: var(--Greyscale-20, #f5f7fb); +} + +.sonner-toaster > div { + pointer-events: auto; +} diff --git a/examples/react-components/src/app/dashboard/page.tsx b/examples/react-components/src/app/dashboard/page.tsx new file mode 100644 index 000000000..2c6e8eb0d --- /dev/null +++ b/examples/react-components/src/app/dashboard/page.tsx @@ -0,0 +1,1148 @@ +"use client"; + +import { + Export, + Import, + useTurnkey, + getSuborgs, + getVerifiedSuborgs, + OtpVerification, + OtpType, +} from "@turnkey/sdk-react"; +import { useEffect, useState } from "react"; +import "./dashboard.css"; +import { + Typography, + Radio, + RadioGroup, + FormControlLabel, + Modal, + Box, + TextField, + MenuItem, + Menu, + CircularProgress, +} from "@mui/material"; +import LogoutIcon from "@mui/icons-material/Logout"; +import DeleteOutlineIcon from "@mui/icons-material/DeleteOutline"; +import { + verifyEthSignatureWithAddress, + verifySolSignatureWithAddress, +} from "../utils"; +import { keccak256, toUtf8Bytes } from "ethers"; +import { useRouter } from "next/navigation"; +import AddCircleIcon from "@mui/icons-material/AddCircle"; +import ArrowDropDownIcon from "@mui/icons-material/ArrowDropDown"; +import LaunchIcon from "@mui/icons-material/Launch"; +import { + appleOidcToken, + facebookOidcToken, + googleOidcToken, +} from "../utils/oidc"; +import { MuiPhone } from "../components/PhoneInput"; +import CheckCircleIcon from "@mui/icons-material/CheckCircle"; +import Navbar from "../components/Navbar"; +import { Toaster, toast } from "sonner"; + +export default function Dashboard() { + const router = useRouter(); + const { turnkey, authIframeClient, passkeyClient } = useTurnkey(); + const [loading, setLoading] = useState(true); + const [accounts, setAccounts] = useState([]); + const [wallets, setWallets] = useState([]); + const [selectedAccount, setSelectedAccount] = useState(null); + const [selectedWallet, setSelectedWallet] = useState(null); + const [isSignModalOpen, setIsSignModalOpen] = useState(false); + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); + const [isPasskeyModalOpen, setIsPasskeyModalOpen] = useState(false); + const [messageToSign, setMessageToSign] = useState( + "Signing within Turnkey Demo." + ); + const [signature, setSignature] = useState(null); + const [suborgId, setSuborgId] = useState(""); + const [isVerifiedEmail, setIsVerifiedEmail] = useState(false); + const [isVerifiedPhone, setIsVerifiedPhone] = useState(false); + const [user, setUser] = useState(""); + const [otpId, setOtpId] = useState(""); + const [messageSigningResult, setMessageSigningResult] = useState< + string | null + >(null); + const [anchorEl, setAnchorEl] = useState(null); + + const [isEmailModalOpen, setIsEmailModalOpen] = useState(false); + const [isPhoneModalOpen, setIsPhoneModalOpen] = useState(false); + const [isOtpModalOpen, setIsOtpModalOpen] = useState(false); + const [emailInput, setEmailInput] = useState(""); + const [phoneInput, setPhoneInput] = useState(""); + + const handleExportSuccess = async () => { + toast.success("Wallet successfully exported"); + }; + const handleImportSuccess = async () => { + await getWallets(); + toast.success("Wallet successfully imported"); + }; + const handleResendEmail = async () => { + const initAuthResponse = await authIframeClient?.initOtpAuth({ + organizationId: suborgId, + otpType: OtpType.Email, + contact: emailInput, + }); + setOtpId(initAuthResponse?.otpId!); + }; + const handleResendSms = async () => { + const initAuthResponse = await authIframeClient?.initOtpAuth({ + organizationId: suborgId, + otpType: OtpType.Sms, + contact: phoneInput, + smsCustomization: { + template: "Your Turnkey Demo OTP is {{.OtpCode}}", + }, + }); + setOtpId(initAuthResponse?.otpId!); + }; + + const handleOtpSuccess = async (credentialBundle: any) => { + window.location.reload(); + }; + const handleOpenEmailModal = () => { + setIsEmailModalOpen(true); + }; + const handleOpenPhoneModal = () => { + setIsPhoneModalOpen(true); + }; + const handleEmailSubmit = async () => { + if (!emailInput) { + toast.error("Please enter a valid email address"); + return; + } + const suborgs = await getVerifiedSuborgs({ + filterType: "EMAIL", + filterValue: emailInput, + }); + if (suborgs && suborgs!.organizationIds.length > 0) { + toast.error("Email is already connected to another account"); + return; + } + await authIframeClient?.updateUser({ + organizationId: suborgId, + userId: user.userId, + userEmail: emailInput, + userTagIds: [], + }); + const initAuthResponse = await authIframeClient?.initOtpAuth({ + organizationId: suborgId, + otpType: OtpType.Email, + contact: emailInput, + }); + setOtpId(initAuthResponse?.otpId!); + setIsEmailModalOpen(false); + setIsOtpModalOpen(true); + }; + + const handlePhoneSubmit = async () => { + if (!phoneInput) { + toast.error("Please enter a valid phone number."); + return; + } + const suborgs = await getVerifiedSuborgs({ + filterType: "PHONE_NUMBER", + filterValue: phoneInput, + }); + if (suborgs && suborgs!.organizationIds.length > 0) { + toast.error("Phone Number is already connected to another account"); + return; + } + await authIframeClient?.updateUser({ + organizationId: suborgId, + userId: user.userId, + userPhoneNumber: phoneInput, + userTagIds: [], + }); + const initAuthResponse = await authIframeClient?.initOtpAuth({ + organizationId: suborgId, + otpType: OtpType.Sms, + contact: phoneInput, + smsCustomization: { + template: "Your Turnkey Demo OTP is {{.OtpCode}}", + }, + }); + setOtpId(initAuthResponse?.otpId!); + setIsEmailModalOpen(false); + setIsOtpModalOpen(true); + }; + + const handleAddOauth = async (oauthType: string) => { + let oidcToken; + switch (oauthType) { + case "Apple": + oidcToken = await appleOidcToken({ + iframePublicKey: authIframeClient?.iframePublicKey!, + clientId: process.env.NEXT_PUBLIC_APPLE_CLIENT_ID!, + redirectURI: `${process.env + .NEXT_PUBLIC_OAUTH_REDIRECT_URI!}dashboard`, + }); + break; + + case "Facebook": + oidcToken = await facebookOidcToken({ + iframePublicKey: authIframeClient?.iframePublicKey!, + clientId: process.env.NEXT_PUBLIC_FACEBOOK_CLIENT_ID!, + redirectURI: `${process.env + .NEXT_PUBLIC_OAUTH_REDIRECT_URI!}dashboard`, + }); + break; + + case "Google": + oidcToken = await googleOidcToken({ + iframePublicKey: authIframeClient?.iframePublicKey!, + clientId: process.env.NEXT_PUBLIC_GOOGLE_CLIENT_ID!, + redirectURI: `${process.env + .NEXT_PUBLIC_OAUTH_REDIRECT_URI!}dashboard`, + }); + break; + + default: + console.error(`Unknown OAuth type: ${oauthType}`); + } + if (oidcToken) { + const suborgs = await getSuborgs({ + filterType: "OIDC_TOKEN", + filterValue: oidcToken.idToken, + }); + if (suborgs!.organizationIds.length > 0) { + toast.error("Social login is already connected to another account"); + return; + } + await authIframeClient?.createOauthProviders({ + organizationId: suborgId, + userId: user.userId, + oauthProviders: [ + { + providerName: `TurnkeyDemoApp - ${Date.now()}`, + oidcToken: oidcToken.idToken, + }, + ], + }); + window.location.reload(); + } + }; + + const handleAddPasskey = async () => { + const siteInfo = `${ + new URL(window.location.href).hostname + } - ${new Date().toLocaleString(undefined, { + year: "numeric", + month: "long", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + })}`; + const { encodedChallenge, attestation } = + (await passkeyClient?.createUserPasskey({ + publicKey: { user: { name: siteInfo, displayName: siteInfo } }, + })) || {}; + + if (encodedChallenge && attestation) { + await authIframeClient?.createAuthenticators({ + organizationId: suborgId, + userId: user.userId, + authenticators: [ + { + authenticatorName: `Passkey - ${Date.now()}`, + challenge: encodedChallenge, + attestation, + }, + ], + }); + window.location.reload(); + } + }; + + const handleDropdownClick = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + + const handleDropdownClose = () => { + setAnchorEl(null); + }; + + const handleDeleteAccount: any = async () => { + await authIframeClient?.deleteSubOrganization({ + organizationId: suborgId, + deleteWithoutExport: true, + }); + await handleLogout(); + }; + + const handleLogout: any = async () => { + turnkey?.logoutUser(); + router.push("/"); + }; + useEffect(() => { + const manageSession = async () => { + try { + if (turnkey && authIframeClient) { + const session = await turnkey?.getReadWriteSession(); + if (!session || Date.now() > session!.expiry) { + await handleLogout(); + } + await authIframeClient.injectCredentialBundle( + session!.credentialBundle + ); + const whoami = await authIframeClient?.getWhoami(); + const suborgId = whoami?.organizationId; + setSuborgId(suborgId!); + + const userResponse = await authIframeClient!.getUser({ + organizationId: suborgId!, + userId: whoami?.userId!, + }); + + setUser(userResponse.user); + const walletsResponse = await authIframeClient!.getWallets({ + organizationId: suborgId!, + }); + setWallets(walletsResponse.wallets); + if (userResponse.user.userEmail) { + const suborgs = await getVerifiedSuborgs({ + filterType: "EMAIL", + filterValue: userResponse.user.userEmail, + }); + + if ( + suborgs && + suborgs!.organizationIds.length > 0 && + suborgs!.organizationIds[0] == suborgId + ) { + setIsVerifiedEmail(true); + } + } + if (userResponse.user.userPhoneNumber) { + const suborgs = await getVerifiedSuborgs({ + filterType: "PHONE_NUMBER", + filterValue: userResponse.user.userPhoneNumber, + }); + if ( + suborgs && + suborgs!.organizationIds.length > 0 && + suborgs!.organizationIds[0] == suborgId + ) { + setIsVerifiedPhone(true); + } + } + + // Default to the first wallet if available + if (walletsResponse.wallets.length > 0) { + const defaultWalletId = walletsResponse.wallets[0].walletId; + setSelectedWallet(defaultWalletId); + + const accountsResponse = await authIframeClient!.getWalletAccounts({ + organizationId: suborgId!, + walletId: defaultWalletId, + }); + setAccounts(accountsResponse.accounts); + if (accountsResponse.accounts.length > 0) { + setSelectedAccount(accountsResponse.accounts[0].address); + } + } + } + } catch (error) { + console.error(error); + } finally { + setLoading(false); + } + }; + if (authIframeClient) { + manageSession(); + } + }, [authIframeClient, turnkey]); + + const getWallets = async () => { + const walletsResponse = await authIframeClient!.getWallets({ + organizationId: suborgId!, + }); + setWallets(walletsResponse.wallets); + }; + const handleAccountSelect = (event: React.ChangeEvent) => { + setSelectedAccount(event.target.value); // Save the full address (untruncated) + }; + + const handleSignMessageClick = () => { + if (!selectedAccount) { + toast.error("Please select an account first!"); + return; + } + setIsSignModalOpen(true); + }; + + const handleModalClose = () => { + setIsSignModalOpen(false); + setSignature(null); + setMessageSigningResult(null); + }; + + const handleWalletSelect = async (walletId: string) => { + setSelectedWallet(walletId); + setAnchorEl(null); + + // Fetch accounts for the selected wallet + const accountsResponse = await authIframeClient!.getWalletAccounts({ + organizationId: suborgId!, + walletId, + }); + setAccounts(accountsResponse.accounts); + if (accountsResponse.accounts.length > 0) { + setSelectedAccount(accountsResponse.accounts[0].address); + } else { + setSelectedAccount(null); // Clear selected account if no accounts found + } + }; + + const handleSign = async () => { + try { + const addressType = selectedAccount?.startsWith("0x") ? "ETH" : "SOL"; + const hashedMessage = + addressType === "ETH" + ? keccak256(toUtf8Bytes(messageToSign)) // Ethereum requires keccak256 hash + : Buffer.from(messageToSign, "utf8").toString("hex"); // Solana doesn't require hashing + + const resp = await authIframeClient?.signRawPayload({ + organizationId: suborgId!, + signWith: selectedAccount!, + payload: hashedMessage, + encoding: "PAYLOAD_ENCODING_HEXADECIMAL", + hashFunction: + addressType === "ETH" + ? "HASH_FUNCTION_NO_OP" + : "HASH_FUNCTION_NOT_APPLICABLE", + }); + setMessageSigningResult("Success! Message signed."); + setSignature({ r: resp?.r, s: resp?.s, v: resp?.v }); + } catch (error) { + console.error("Error signing message:", error); + } + }; + + const handleVerify = () => { + if (!signature) return; + const addressType = selectedAccount?.startsWith("0x") ? "ETH" : "SOL"; + const verificationPassed = + addressType === "ETH" + ? verifyEthSignatureWithAddress( + messageToSign, + signature.r, + signature.s, + signature.v, + selectedAccount! + ) + : verifySolSignatureWithAddress( + messageToSign, + signature.r, + signature.s, + selectedAccount! + ); + + setMessageSigningResult( + verificationPassed + ? "Verified! The address used to sign the message matches your wallet address." + : "Verification failed." + ); + }; + if (loading) { + return ( +
+ +
+ +
+
+ ); + } + + return ( +
+ + + +
+
Login methods
+
+
+
+ + Email + {user && user.userEmail && isVerifiedEmail && ( + {user.userEmail} + )} +
+ {user && user.userEmail && isVerifiedEmail ? ( + + ) : ( +
+ +
+ )} +
+ +
+
+ + Phone + {user && user.userPhoneNumber && isVerifiedPhone && ( + + {user.userPhoneNumber} + + )} +
+ {user && user.userPhoneNumber && isVerifiedPhone ? ( + + ) : ( +
+ +
+ )} +
+ +
+
+ + Passkey +
+ {user && user.authenticators && user.authenticators.length > 0 ? ( + + ) : ( +
setIsPasskeyModalOpen(true)}> + +
+ )} +
+ +
Socials
+
+
+ + Google + {user && + user.oauthProviders && + user.oauthProviders.some((provider: { issuer: string }) => + provider.issuer.toLowerCase().includes("google") + ) && {}} +
+ {user && + user.oauthProviders && + user.oauthProviders.some((provider: { issuer: string }) => + provider.issuer.toLowerCase().includes("google") + ) ? ( + + ) : ( +
handleAddOauth("Google")}> + +
+ )} +
+
+
+ + Apple +
+ {user && + user.oauthProviders && + user.oauthProviders.some((provider: { issuer: string }) => + provider.issuer.toLowerCase().includes("apple") + ) ? ( + + ) : ( +
handleAddOauth("Apple")}> + +
+ )} +
+
+
+ + Facebook +
+ {user && + user.oauthProviders && + user.oauthProviders.some((provider: { issuer: string }) => + provider.issuer.toLowerCase().includes("facebook") + ) ? ( + + ) : ( +
handleAddOauth("Facebook")}> + +
+ )} +
+
+
+
+
+
+ + {wallets.find((wallet) => wallet.walletId === selectedWallet) + ?.walletName || "Select Wallet"} + + +
+ + + {wallets.map((wallet) => ( + handleWalletSelect(wallet.walletId)} + > + {wallet.walletName || wallet.walletId} + + ))} + + +
+ {accounts.map((account: any, index: number) => ( +
setSelectedAccount(account.address)} + style={{ + cursor: "pointer", + display: "flex", + alignItems: "center", + }} + > +
+ window.open( + account.addressFormat === "ADDRESS_FORMAT_ETHEREUM" + ? `https://etherscan.io/address/${account.address}` + : `https://solscan.io/account/${account.address}`, + "_blank" + ) + } + style={{ + display: "flex", + alignItems: "center", + gap: "8px", + }} + > + {account.addressFormat === "ADDRESS_FORMAT_ETHEREUM" && ( +
+ )} + {account.addressFormat === "ADDRESS_FORMAT_SOLANA" && ( +
+ )} + {`${account.address.slice( + 0, + 5 + )}...${account.address.slice(-5)}`} + +
+ + } + label="" + className="radioButton" + style={{ pointerEvents: "none" }} + /> +
+ ))} + +
+ + +
+ toast.error(errorMessage)} + > + toast.error(errorMessage)} + onHandleImportSuccess={handleImportSuccess} + /> +
+
+
+
+ + Log out +
+
+
+
+
setIsDeleteModalOpen(true)} + className="authFooterButton" + > + + Delete account +
+
+
+
+
+ + +
setIsDeleteModalOpen(false)} + style={{ + position: "absolute", + top: "16px", + right: "16px", + background: "none", + border: "none", + fontSize: "20px", + fontWeight: "bold", + cursor: "pointer", + color: "#6C727E", + }} + > + × +
+ + Confirm account deletion + + + This action can not be undone. + +
+ +
+
+
+ + + +
+ × +
+ + Sign a message + + + This helps prove you signed a message using your address. + + + signature + ? setSignature(JSON.parse(e.target.value)) + : setMessageToSign(e.target.value) + } + sx={{ + bgcolor: "#ffffff", + "& .MuiOutlinedInput-root": { + height: "auto", + alignItems: "flex-start", + "& fieldset": { + borderColor: "#D0D5DD", + }, + "&:hover fieldset": { + borderColor: "#8A929E", + }, + "&.Mui-focused fieldset": { + borderColor: "#D0D5DD", + border: "1px solid", + }, + }, + "& .MuiInputBase-input": { + whiteSpace: "pre-wrap", + wordWrap: "break-word", + }, + }} + /> + {messageSigningResult && ( + + {messageSigningResult} + + )} + {signature ? ( + messageSigningResult?.startsWith("Verif") ? ( + + ) : ( + + ) + ) : ( + + )} +
+
+ {isEmailModalOpen && ( + setIsEmailModalOpen(false)} + > + +
setIsEmailModalOpen(false)} + style={{ + position: "absolute", + top: "16px", + right: "16px", + background: "none", + border: "none", + fontSize: "20px", + fontWeight: "bold", + cursor: "pointer", + color: "#6C727E", + }} + > + × +
+ + Connect email + + setEmailInput(e.target.value)} + placeholder="Enter your email" + sx={{ + bgcolor: "#ffffff", + "& .MuiOutlinedInput-root": { + "& fieldset": { + borderColor: "#D0D5DD", + }, + "&:hover fieldset": { + borderColor: "#8A929E", + }, + "&.Mui-focused fieldset": { + borderColor: "#D0D5DD", + border: "1px solid", + }, + }, + "& .MuiInputBase-input": { + whiteSpace: "pre-wrap", + wordWrap: "break-word", + }, + }} + /> + +
+
+ )} + + {isPhoneModalOpen && ( + setIsPhoneModalOpen(false)} + > + +
setIsPhoneModalOpen(false)} + style={{ + position: "absolute", + top: "16px", + right: "16px", + background: "none", + border: "none", + fontSize: "20px", + fontWeight: "bold", + cursor: "pointer", + color: "#6C727E", + }} + > + × +
+ + Connect phone + + setPhoneInput(e)} + /> + +
+
+ )} + + {isOtpModalOpen && ( + setIsOtpModalOpen(false)}> + +
setIsOtpModalOpen(false)} + style={{ + position: "absolute", + top: "16px", + right: "16px", + background: "none", + border: "none", + fontSize: "20px", + fontWeight: "bold", + cursor: "pointer", + color: "#6C727E", + }} + > + × +
+ +
+
+ )} + + {isPasskeyModalOpen && ( + setIsPasskeyModalOpen(false)} + > + +
setIsPasskeyModalOpen(false)} + style={{ + position: "absolute", + top: "16px", + right: "16px", + background: "none", + border: "none", + fontSize: "20px", + fontWeight: "bold", + cursor: "pointer", + color: "#6C727E", + }} + > + × +
+
+
+ +
+
+

Create a passkey

+
+
+
+ Passkeys allow for easy biometric access to your wallet and + can be synced across devices. +
+ +
+
+
+
+ )} +
+ +
+
+ ); +} diff --git a/examples/react-components/src/app/index.css b/examples/react-components/src/app/index.css new file mode 100644 index 000000000..71529fbb0 --- /dev/null +++ b/examples/react-components/src/app/index.css @@ -0,0 +1,169 @@ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("../../public/fonts/inter/Inter-Regular.woff2?v=3.19") + format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("../../public/fonts/inter/Inter-SemiBold.woff2?v=3.19") + format("woff2"); +} +.MuiTypography-root { + font-family: "Inter", Arial, sans-serif !important; +} +:root { + font-family: "Inter"; +} +body { + font-family: "Inter"; + margin: 0; + padding: 0; + width: 100vw; + height: 100vh; + background-image: url("../../public/grid.svg"); + background-size: cover; + background-repeat: no-repeat; + background-position: center; +} + +.main { + font-family: "Inter"; + display: flex; + justify-content: center; + align-items: center; + padding: 8rem; + padding-bottom: 0rem; + gap: 60px; + position: relative; +} + +.authConfigContainer { + position: absolute; + left: 0; + display: flex; + justify-content: flex-start; +} + +.authConfigCard { + min-width: 400px; + background: var(--Greyscale-20, #f5f7fb); + padding: 32px; + border-radius: 8px; + width: 542px; + height: 584px; + border: 1px solid var(--Greyscale-100, #ebedf2); + font-family: Arial, sans-serif; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.configTitle { + font-family: "Inter"; + font-size: 1.5rem; + font-weight: 700; + line-height: 36px; + letter-spacing: -0.01em; + text-align: left; + margin-bottom: 16px; + margin-top: 16px; +} + +.toggleContainer { + display: flex; + flex-direction: column; + gap: 12px; +} + +.labelContainer { + display: flex; + align-items: center; + gap: 8px; +} + +.toggleRow { + background-color: #ffffff; + border-radius: 8px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 8px 16px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); +} + +.toggleSocialRow { + background-color: #ffffff; + border-radius: 8px; + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 8px; +} + +.toggleSocialIndividualRow { + background-color: var(--Greyscale-20, #f5f7fb); + display: flex; + margin-left: 16px; + padding-left: 16px; + padding-top: 4px; + padding-bottom: 4px; + justify-content: space-between; + align-items: center; +} + +.copyConfigButton { + display: flex; + align-items: center; + cursor: pointer; + color: #666; + font-size: 14px; + margin-top: auto; + padding: 8px 16px; +} +.copyConfigText { + padding-left: 4px; +} + +.authComponent { + display: flex; + justify-content: center; + align-items: center; + flex: 1; +} + +.success { + justify-items: center; +} + +.iconSmall { + width: 18px; + height: 18px; +} + +.socialContainer { + border-radius: 8px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); + padding: 8px 16px; + padding-bottom: 16px; + background-color: #ffffff; +} + +.sonner-toaster { + font-family: "Inter"; + font-size: 14px; + z-index: 9999; + pointer-events: none; + background-color: var(--Greyscale-20, #f5f7fb); +} + +.sonner-toaster > div { + pointer-events: auto; +} diff --git a/examples/react-components/src/app/layout.tsx b/examples/react-components/src/app/layout.tsx new file mode 100644 index 000000000..49704bd3f --- /dev/null +++ b/examples/react-components/src/app/layout.tsx @@ -0,0 +1,34 @@ +"use client"; + +import "@turnkey/sdk-react/styles"; +import { TurnkeyProvider, TurnkeyThemeProvider } from "@turnkey/sdk-react"; + +const turnkeyConfig = { + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + rpId: process.env.NEXT_PUBLIC_RPID!, + iframeUrl: + process.env.NEXT_PUBLIC_AUTH_IFRAME_URL ?? "https://auth.turnkey.com", +}; + +interface RootLayoutProps { + children: React.ReactNode; +} + +function RootLayout({ children }: RootLayoutProps) { + return ( + + + Turnkey Auth Demo + + + + + {children} + + + + ); +} + +export default RootLayout; diff --git a/examples/react-components/src/app/page.tsx b/examples/react-components/src/app/page.tsx new file mode 100644 index 000000000..719dd8de6 --- /dev/null +++ b/examples/react-components/src/app/page.tsx @@ -0,0 +1,310 @@ +"use client"; + +import * as React from "react"; +import { useEffect, useState } from "react"; +import { Auth, useTurnkey } from "@turnkey/sdk-react"; +import { Typography } from "@mui/material"; +import ContentCopyIcon from "@mui/icons-material/ContentCopy"; +import CustomSwitch from "./components/Switch"; +import { + DragDropContext, + Droppable, + Draggable, + DropResult, + DroppableProvided, + DraggableProvided, +} from "@hello-pangea/dnd"; +import "./index.css"; +import { useRouter } from "next/navigation"; +import Navbar from "./components/Navbar"; +import { Toaster, toast } from "sonner"; + +// Define reusable types for provided props +type DroppableProvidedProps = DroppableProvided; +type DraggableProvidedProps = DraggableProvided; + +// Define types for config and socials +interface SocialConfig { + enabled: boolean; + providers: { + google: boolean; + apple: boolean; + facebook: boolean; + }; +} + +interface Config { + email: boolean; + passkey: boolean; + phone: boolean; + socials: SocialConfig; +} + +export default function AuthPage() { + const router = useRouter(); + const handleAuthSuccess = async () => { + router.push("/dashboard"); + }; + const { turnkey } = useTurnkey(); + const [configOrder, setConfigOrder] = useState([ + "socials", + "email", + "phone", + "passkey", + ]); + + const [config, setConfig] = useState({ + email: true, + phone: false, + passkey: true, + socials: { + enabled: true, + providers: { + google: true, + apple: false, + facebook: false, + }, + }, + }); + + useEffect(() => { + const manageSession = async () => { + if (turnkey) { + const session = await turnkey?.getReadWriteSession(); + if (session && Date.now() < session.expiry) { + await handleAuthSuccess(); + } + } + }; + manageSession(); + }, [turnkey]); + + const toggleConfig = (key: keyof Config) => { + setConfig((prev) => { + const newConfig = { ...prev }; + if (key !== "socials") { + newConfig[key] = !prev[key]; + } + return newConfig; + }); + }; + + const toggleSocials = ( + key: keyof SocialConfig | keyof SocialConfig["providers"] + ) => { + setConfig((prev) => { + if (key === "enabled") { + const isEnabled = !prev.socials.enabled; + return { + ...prev, + socials: { + enabled: isEnabled, + providers: { + google: isEnabled, + apple: isEnabled, + facebook: isEnabled, + }, + }, + }; + } + + if (prev.socials.enabled && key in prev.socials.providers) { + return { + ...prev, + socials: { + ...prev.socials, + providers: { + ...prev.socials.providers, + [key]: + !prev.socials.providers[key as keyof SocialConfig["providers"]], + }, + }, + }; + } + + return prev; + }); + }; + + const handleCopyConfig = () => { + const authConfig = { + emailEnabled: config.email, + passkeyEnabled: config.passkey, + phoneEnabled: config.phone, + appleEnabled: config.socials.providers.apple, + googleEnabled: config.socials.providers.google, + facebookEnabled: config.socials.providers.facebook, + }; + + const configToCopy = { + authConfig, + configOrder, + }; + navigator.clipboard.writeText(JSON.stringify(configToCopy, null, 2)); + toast.success("Copied to clipboard!"); + }; + + const authConfig = { + emailEnabled: config.email, + passkeyEnabled: config.passkey, + phoneEnabled: config.phone, + appleEnabled: config.socials.providers.apple, + googleEnabled: config.socials.providers.google, + facebookEnabled: config.socials.providers.facebook, + }; + + const onDragEnd = (result: DropResult) => { + const { destination, source } = result; + if (!destination) return; + + const reorderedConfig = Array.from(configOrder); + const [movedItem] = reorderedConfig.splice(source.index, 1); + reorderedConfig.splice(destination.index, 0, movedItem); + + setConfigOrder(reorderedConfig); + }; + + return ( +
+ +
+
Authentication config
+ + + + {(provided: DroppableProvidedProps) => ( +
+ {configOrder.map((key, index) => + key === "socials" ? ( + + {(provided: DraggableProvidedProps) => ( +
+
+
+ Drag handle + Socials +
+ toggleSocials("enabled")} + /> +
+ {Object.entries(config.socials.providers).map( + ([provider, enabled]) => ( +
+
+ + + {provider.charAt(0).toUpperCase() + + provider.slice(1)} + +
+ + toggleSocials( + provider as keyof SocialConfig["providers"] + ) + } + /> +
+ ) + )} +
+ )} +
+ ) : ( + + {(provided: DraggableProvidedProps) => ( +
+
+ Drag handle + + {key.charAt(0).toUpperCase() + key.slice(1)} + +
+ toggleConfig(key as keyof Config)} + /> +
+ )} +
+ ) + )} + {provided.placeholder} +
+ )} +
+
+ +
+ +
+ + Copy config + +
+
+
+
+ toast.error(errorMessage)} + customSmsMessage={"Your Turnkey Demo OTP is {{.OtpCode}}"} + /> +
+
+ +
+
+ ); +} diff --git a/examples/react-components/src/app/utils.ts b/examples/react-components/src/app/utils.ts new file mode 100644 index 000000000..628f16abd --- /dev/null +++ b/examples/react-components/src/app/utils.ts @@ -0,0 +1,70 @@ +import { PublicKey, PublicKeyInitData } from "@solana/web3.js"; +import nacl from "tweetnacl"; +import { Buffer } from "buffer"; + +import { hashMessage, keccak256, recoverAddress, toUtf8Bytes } from "ethers"; + +/** + * Verifies an Ethereum signature and returns the address it was signed with. + * @param {string} message - The original message that was signed. + * @param {string} r - The r value of the signature. + * @param {string} s - The s value of the signature. + * @param {string} v - The v value of the signature. + * @param {string} address - The Ethereum address of the signer. + * @returns {boolean} - The recovered Ethereum address. + */ +export function verifyEthSignatureWithAddress( + message: string, + r: string, + s: string, + v: string, + address: string +): boolean { + try { + // Construct the full signature + const signature = `0x${r}${s}${v === "00" ? "1b" : "1c"}`; // 1b/1c corresponds to v for Ethereum + const hashedMessage = keccak256(toUtf8Bytes(message)); + + // Recover the address from the signature + return address == recoverAddress(hashedMessage, signature); + } catch (error) { + console.error("Ethereum signature verification failed:", error); + return false; + } +} + +/** + * Verifies a Solana signature using the address (treated as the public key). + * @param {string} message - The original message that was signed. + * @param {string} r - The r value of the signature. + * @param {string} s - The s value of the signature. + * @param {string} address - The Solana address of the signer. + * @returns {boolean} - True if the signature is valid, false otherwise. + */ +export function verifySolSignatureWithAddress( + message: string, + r: string, + s: string, + address: string +) { + try { + // Combine r and s as the full signature (64 bytes for Solana) + const signature = Buffer.from(r + s, "hex"); + + // Convert the message to a buffer + const messageBuffer = Buffer.from(message); + + // Treat the address as the public key (if valid) + const pubKey = new PublicKey(address); + + // Verify the signature + return nacl.sign.detached.verify( + messageBuffer, + signature, + pubKey.toBytes() + ); + } catch (error) { + console.error("Solana signature verification failed:", error); + return false; + } +} diff --git a/examples/react-components/src/app/utils/facebookUtils.ts b/examples/react-components/src/app/utils/facebookUtils.ts new file mode 100644 index 000000000..fcbbae46e --- /dev/null +++ b/examples/react-components/src/app/utils/facebookUtils.ts @@ -0,0 +1,39 @@ +"use server"; + +import crypto from "crypto"; + +export async function generateChallengePair() { + const verifier = crypto.randomBytes(32).toString("base64url"); + const codeChallenge = crypto + .createHash("sha256") + .update(verifier) + .digest("base64url"); + return { verifier, codeChallenge }; +} + +export async function exchangeCodeForToken( + clientId: string, + redirectURI: string, + authCode: string, + verifier: string +) { + const response = await fetch( + `https://graph.facebook.com/v11.0/oauth/access_token`, + { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + client_id: clientId, + redirect_uri: redirectURI, + code: authCode, + code_verifier: verifier, + }), + } + ); + + const tokenData = await response.json(); + if (!response.ok) { + throw new Error("Token exchange failed: " + JSON.stringify(tokenData)); + } + return tokenData; +} diff --git a/examples/react-components/src/app/utils/oidc.ts b/examples/react-components/src/app/utils/oidc.ts new file mode 100644 index 000000000..7d8b44304 --- /dev/null +++ b/examples/react-components/src/app/utils/oidc.ts @@ -0,0 +1,214 @@ +"use client"; + +import { sha256 } from "@noble/hashes/sha2"; +import { bytesToHex } from "@noble/hashes/utils"; +import { exchangeCodeForToken, generateChallengePair } from "./facebookUtils"; + +// OAuth URLs +const APPLE_AUTH_URL = "https://appleid.apple.com/auth/authorize"; +const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth"; +const FACEBOOK_AUTH_URL = "https://www.facebook.com/v11.0/dialog/oauth"; + +// Popup Size +const popupWidth = 500; +const popupHeight = 600; +interface OidcTokenParams { + iframePublicKey: string; + clientId: string; + redirectURI: string; +} + +export const appleOidcToken = async ({ + iframePublicKey, + clientId, + redirectURI, +}: OidcTokenParams): Promise => { + const nonce = bytesToHex(sha256(iframePublicKey)); + const appleAuthUrl = new URL(APPLE_AUTH_URL); + appleAuthUrl.searchParams.set("client_id", clientId); + appleAuthUrl.searchParams.set("redirect_uri", redirectURI); + appleAuthUrl.searchParams.set("response_type", "code id_token"); + appleAuthUrl.searchParams.set("response_mode", "fragment"); + appleAuthUrl.searchParams.set("nonce", nonce); + + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + return new Promise((resolve, reject) => { + const authWindow = window.open( + appleAuthUrl.toString(), + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (!authWindow) { + reject(new Error("Failed to open Apple login window.")); + return; + } + + const interval = setInterval(() => { + try { + const url = authWindow?.location.href || ""; + if (url.startsWith(window.location.origin)) { + const hashParams = new URLSearchParams(url.split("#")[1]); + const idToken = hashParams.get("id_token"); + if (idToken) { + authWindow?.close(); + clearInterval(interval); + resolve({ idToken }); + } + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + + if (authWindow?.closed) { + clearInterval(interval); + } + }, 500); + }); +}; + +export const googleOidcToken = async ({ + iframePublicKey, + clientId, + redirectURI, +}: OidcTokenParams): Promise => { + const nonce = bytesToHex(sha256(iframePublicKey)); + const googleAuthUrl = new URL(GOOGLE_AUTH_URL); + googleAuthUrl.searchParams.set("client_id", clientId); + googleAuthUrl.searchParams.set("redirect_uri", redirectURI); + googleAuthUrl.searchParams.set("response_type", "id_token"); + googleAuthUrl.searchParams.set("scope", "openid email profile"); + googleAuthUrl.searchParams.set("nonce", nonce); + googleAuthUrl.searchParams.set("prompt", "select_account"); + + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + return new Promise((resolve, reject) => { + const authWindow = window.open( + googleAuthUrl.toString(), + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (!authWindow) { + reject(new Error("Failed to open Google login window.")); + return; + } + + const interval = setInterval(() => { + try { + const url = authWindow?.location.href || ""; + if (url.startsWith(window.location.origin)) { + const hashParams = new URLSearchParams(url.split("#")[1]); + const idToken = hashParams.get("id_token"); + if (idToken) { + authWindow?.close(); + clearInterval(interval); + resolve({ idToken }); + } + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + + if (authWindow?.closed) { + clearInterval(interval); + } + }, 500); + }); +}; + +export const facebookOidcToken = async ({ + iframePublicKey, + clientId, + redirectURI, +}: OidcTokenParams): Promise => { + const { verifier, codeChallenge } = await generateChallengePair(); + sessionStorage.setItem("facebook_verifier", verifier); + + const params = new URLSearchParams({ + client_id: clientId, + redirect_uri: redirectURI, + state: verifier, + code_challenge: codeChallenge, + code_challenge_method: "S256", + nonce: bytesToHex(sha256(iframePublicKey)), + scope: "openid", + response_type: "code", + }); + + const facebookOAuthURL = `${FACEBOOK_AUTH_URL}?${params.toString()}`; + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + return new Promise((resolve, reject) => { + const popup = window.open( + facebookOAuthURL, + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (!popup) { + reject(new Error("Failed to open login popup")); + return; + } + + const interval = setInterval(async () => { + try { + if (popup.closed) { + clearInterval(interval); + reject( + new Error("Popup closed by user before completing authentication") + ); + return; + } + + const popupUrl = new URL(popup.location.href); + const authCode = popupUrl.searchParams.get("code"); + + if (authCode) { + popup.close(); + clearInterval(interval); + const verifier = sessionStorage.getItem("facebook_verifier"); + if (!verifier) { + reject(new Error("No verifier found in sessionStorage")); + return; + } + + try { + const tokenData = await exchangeCodeForToken( + clientId, + redirectURI, + authCode, + verifier + ); + sessionStorage.removeItem("facebook_verifier"); + resolve({ idToken: tokenData.id_token }); + } catch (error) { + reject(new Error(`Error during token exchange: ${error}`)); + } + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + }, 250); + }); +}; diff --git a/examples/react-components/tsconfig.json b/examples/react-components/tsconfig.json new file mode 100644 index 000000000..06f3d9aad --- /dev/null +++ b/examples/react-components/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "es5", + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "node", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./src/*"], + "react": ["./node_modules/@types/react"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/examples/with-solana-passkeys/package.json b/examples/with-solana-passkeys/package.json index 43efde4dd..a05dc7079 100644 --- a/examples/with-solana-passkeys/package.json +++ b/examples/with-solana-passkeys/package.json @@ -35,7 +35,7 @@ "typescript": "5.1.3" }, "devDependencies": { - "@solana/web3.js": "^1.95.1", + "@solana/web3.js": "^1.95.8", "@types/node": "20.3.1", "@types/react": "^18.2.25", "@types/react-dom": "^18.2.6" diff --git a/examples/with-solana/package.json b/examples/with-solana/package.json index e06e6683e..bf2a34dab 100644 --- a/examples/with-solana/package.json +++ b/examples/with-solana/package.json @@ -17,7 +17,7 @@ "dependencies": { "@project-serum/anchor": "^0.26.0", "@solana/spl-token": "^0.4.8", - "@solana/web3.js": "^1.88.1", + "@solana/web3.js": "^1.95.8", "@turnkey/api-key-stamper": "workspace:*", "@turnkey/http": "workspace:*", "@turnkey/sdk-server": "workspace:*", diff --git a/examples/with-wallet-stamper/package.json b/examples/with-wallet-stamper/package.json index 98ec134ea..e93a41c08 100644 --- a/examples/with-wallet-stamper/package.json +++ b/examples/with-wallet-stamper/package.json @@ -25,7 +25,7 @@ "@solana/wallet-adapter-react": "^0.15.35", "@solana/wallet-adapter-react-ui": "^0.9.35", "@solana/wallet-adapter-wallets": "^0.19.32", - "@solana/web3.js": "^1.88.1", + "@solana/web3.js": "^1.95.8", "@t3-oss/env-nextjs": "^0.11.0", "@turnkey/api-key-stamper": "workspace:*", "@turnkey/encoding": "workspace:*", diff --git a/package.json b/package.json index 8b1911456..29e8f4a5b 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,12 @@ "prettier": "^2.8.4", "rimraf": "^3.0.2", "rollup": "^4.22.4", + "rollup-plugin-copy": "^3.5.0", "rollup-plugin-node-externals": "^6.1.2", + "rollup-plugin-postcss": "^4.0.2", + "rollup-preserve-directives": "^1.1.2", + "@rollup/plugin-alias": "5.1.1", + "@rollup/plugin-url": "8.0.2", "tsx": "^3.12.7", "typescript": "^5.1.4" }, diff --git a/packages/sdk-react/package.json b/packages/sdk-react/package.json index 76244006b..6cc7c8993 100644 --- a/packages/sdk-react/package.json +++ b/packages/sdk-react/package.json @@ -9,6 +9,11 @@ "import": "./dist/index.mjs", "require": "./dist/index.js", "default": "./dist/index.mjs" + }, + "./styles": { + "import": "./dist/styles.esm.css", + "require": "./dist/styles.cjs.css", + "default": "./dist/styles.esm.css" } }, "types": "./dist/index.d.ts", @@ -43,9 +48,22 @@ "typecheck": "tsc -p tsconfig.typecheck.json" }, "dependencies": { + "@emotion/react": "^11.13.3", + "@emotion/styled": "^11.13.0", + "@icons-pack/react-simple-icons": "^10.1.0", + "@mui/icons-material": "^6.1.5", + "@mui/material": "^6.1.5", + "@noble/hashes": "1.4.0", + "@react-oauth/google": "^0.12.1", "@turnkey/sdk-browser": "workspace:*", "@turnkey/wallet-stamper": "workspace:*", - "usehooks-ts": "^3.1.0" + "@turnkey/crypto": "workspace:*", + "@turnkey/sdk-server": "workspace:*", + "usehooks-ts": "^3.1.0", + "libphonenumber-js": "^1.11.14", + "next": "^15.0.2", + "react-apple-login": "^1.1.6", + "react-international-phone": "^4.3.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" diff --git a/packages/sdk-react/rollup.config.mjs b/packages/sdk-react/rollup.config.mjs index 8e9f6643c..fef551e5a 100644 --- a/packages/sdk-react/rollup.config.mjs +++ b/packages/sdk-react/rollup.config.mjs @@ -1,3 +1,86 @@ -import rollup from '../../rollup.config.base.mjs'; +import typescript from "@rollup/plugin-typescript"; +import nodeExternals from "rollup-plugin-node-externals"; +import path from "node:path"; +import postcss from "rollup-plugin-postcss"; +import preserveDirectives from "rollup-preserve-directives"; +import url from "@rollup/plugin-url"; +import alias from "@rollup/plugin-alias"; +import copy from "rollup-plugin-copy"; -export default (options) => rollup(); +const getFormatConfig = (format) => { + const pkgPath = path.join(process.cwd(), "package.json"); + const __dirname = path.dirname(new URL(import.meta.url).pathname); + + return { + input: 'src/index.ts', + output: { + format, + dir: "dist", + entryFileNames: `[name].${format === 'esm' ? 'mjs' : 'js'}`, + preserveModules: true, + sourcemap: true, + }, + plugins: [ + alias({ // required for svg assets + entries: [ + { find: 'assets', replacement: path.resolve(__dirname, 'src/assets') } + ] + }), + postcss({ // required for css module bundling + modules: true, + extensions: ['.css', '.scss'], + use: ['sass'], + extract: `styles.${format}.css`, + minimize: true, + sourceMap: true, + }), + typescript({ + outputToFilesystem: true, + tsconfig: './tsconfig.json', + compilerOptions: { + outDir: "dist", + composite: false, + declaration: format === 'esm', + declarationMap: format === "esm", + sourceMap: true, + }, + }), + preserveDirectives(), // required for use server and use client directive preservation + nodeExternals({ + packagePath: pkgPath, + builtinsPrefix: 'ignore', + }), + url({ // required for fonts and assets + include: [ + '**/*.svg', + '**/*.png', + '**/*.jpg', + '**/*.gif', + '**/*.woff', + '**/*.woff2', + '**/*.ttf', + '**/*.eot' + ], + limit: 8192, + emitFiles: true, + fileName: 'assets/fonts/[name].[hash][extname]', + }), + copy({ // required for fonts + targets: [ + { + src: path.resolve(__dirname, "src/assets/fonts/**/*"), + dest: path.resolve(__dirname, "dist/assets/fonts"), + }, + ], + verbose: false, + }), + ], + }; +}; + +export default () => { + const esm = getFormatConfig('esm'); + const cjs = getFormatConfig('cjs'); + + return [esm, cjs]; +}; diff --git a/packages/sdk-react/src/actions/createSuborg.ts b/packages/sdk-react/src/actions/createSuborg.ts new file mode 100644 index 000000000..638134230 --- /dev/null +++ b/packages/sdk-react/src/actions/createSuborg.ts @@ -0,0 +1,74 @@ +"use server"; + +import { + DEFAULT_ETHEREUM_ACCOUNTS, + DEFAULT_SOLANA_ACCOUNTS, +} from "@turnkey/sdk-browser"; +import { Turnkey } from "@turnkey/sdk-server"; + +type CreateSuborgRequest = { + oauthProviders?: Provider[]; + email?: string; + phoneNumber?: string; + passkey?: Passkey; +}; + +type Passkey = { + authenticatorName: string; + challenge: any; + attestation: any; +}; + +type Provider = { + providerName: string; + oidcToken: string; +}; + +type CreateSuborgResponse = { + subOrganizationId: string; +}; + +export async function createSuborg( + request: CreateSuborgRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + try { + const suborgResponse = await turnkeyClient + .apiClient() + .createSubOrganization({ + subOrganizationName: `suborg-${String(Date.now())}`, + rootQuorumThreshold: 1, + rootUsers: [ + { + userName: request.email ?? "", + userEmail: request.email ?? "", + ...(request.phoneNumber + ? { userPhoneNumber: request.phoneNumber } + : {}), + apiKeys: [], + authenticators: request.passkey ? [request.passkey] : [], + oauthProviders: request.oauthProviders ?? [], + }, + ], + wallet: { + walletName: `Wallet 1`, + accounts: [...DEFAULT_ETHEREUM_ACCOUNTS, ...DEFAULT_SOLANA_ACCOUNTS], + }, + }); + + const { subOrganizationId } = suborgResponse; + if (!subOrganizationId) { + throw new Error("Expected a non-null subOrganizationId."); + } + + return { subOrganizationId }; + } catch (error) { + console.error(error); + return undefined; + } +} diff --git a/packages/sdk-react/src/actions/getSuborgs.ts b/packages/sdk-react/src/actions/getSuborgs.ts new file mode 100644 index 000000000..831700283 --- /dev/null +++ b/packages/sdk-react/src/actions/getSuborgs.ts @@ -0,0 +1,38 @@ +"use server"; + +import { Turnkey } from "@turnkey/sdk-server"; + +type GetSuborgsRequest = { + filterValue: string; + filterType: string; +}; + +type GetSuborgsResponse = { + organizationIds: string[]; +}; + +export async function getSuborgs( + request: GetSuborgsRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + try { + const response = await turnkeyClient.apiClient().getSubOrgIds({ + organizationId: turnkeyClient.config.defaultOrganizationId, + filterType: request.filterType, + filterValue: request.filterValue, + }); + if (!response || !response.organizationIds) { + throw new Error("Expected a non-null response with organizationIds."); + } + + return { organizationIds: response.organizationIds }; + } catch (e) { + console.error(e); + return; + } +} diff --git a/packages/sdk-react/src/actions/getVerifiedSuborgs.ts b/packages/sdk-react/src/actions/getVerifiedSuborgs.ts new file mode 100644 index 000000000..f4975d7ec --- /dev/null +++ b/packages/sdk-react/src/actions/getVerifiedSuborgs.ts @@ -0,0 +1,38 @@ +"use server"; + +import { Turnkey } from "@turnkey/sdk-server"; + +type GetSuborgsRequest = { + filterValue: string; + filterType: string; +}; + +type GetSuborgsResponse = { + organizationIds: string[]; +}; + +export async function getVerifiedSuborgs( + request: GetSuborgsRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + try { + const response = await turnkeyClient.apiClient().getVerifiedSubOrgIds({ + organizationId: turnkeyClient.config.defaultOrganizationId, + filterType: request.filterType, + filterValue: request.filterValue, + }); + if (!response || !response.organizationIds) { + throw new Error("Expected a non-null response with organizationIds."); + } + + return { organizationIds: response.organizationIds }; + } catch (e) { + console.error(e); + return; + } +} diff --git a/packages/sdk-react/src/actions/index.ts b/packages/sdk-react/src/actions/index.ts new file mode 100644 index 000000000..69e98ae6f --- /dev/null +++ b/packages/sdk-react/src/actions/index.ts @@ -0,0 +1,8 @@ +// actions that need to be run on the server side (i.e Activities signed by the Parent Organization) + +export { createSuborg } from "./createSuborg"; +export { getSuborgs } from "./getSuborgs"; +export { getVerifiedSuborgs } from "./getVerifiedSuborgs"; +export { initOtpAuth } from "./initOtpAuth"; +export { oauth } from "./oauth"; +export { otpAuth } from "./otpAuth"; diff --git a/packages/sdk-react/src/actions/initOtpAuth.ts b/packages/sdk-react/src/actions/initOtpAuth.ts new file mode 100644 index 000000000..aaa12195e --- /dev/null +++ b/packages/sdk-react/src/actions/initOtpAuth.ts @@ -0,0 +1,47 @@ +"use server"; + +import { Turnkey } from "@turnkey/sdk-server"; + +type InitOtpAuthRequest = { + suborgID: string; + otpType: string; + contact: string; + customSmsMessage?: string; +}; + +type InitOtpAuthResponse = { + otpId: string; +}; + +export async function initOtpAuth( + request: InitOtpAuthRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + + try { + const initOtpAuthResponse = await turnkeyClient.apiClient().initOtpAuth({ + contact: request.contact, + otpType: request.otpType, + organizationId: request.suborgID, + ...(request.customSmsMessage && { + smsCustomization: { + template: request.customSmsMessage, + }, + }), + }); + const { otpId } = initOtpAuthResponse; + + if (!otpId) { + throw new Error("Expected a non-null otpId."); + } + + return { otpId }; + } catch (e) { + return; + } +} diff --git a/packages/sdk-react/src/actions/oauth.ts b/packages/sdk-react/src/actions/oauth.ts new file mode 100644 index 000000000..abb3a71e1 --- /dev/null +++ b/packages/sdk-react/src/actions/oauth.ts @@ -0,0 +1,45 @@ +"use server"; + +import { Turnkey } from "@turnkey/sdk-server"; + +type OauthRequest = { + suborgID: string; + oidcToken: string; + targetPublicKey: string; +}; + +type OauthResponse = { + userId: string; + apiKeyId: string; + credentialBundle: string; +}; + +export async function oauth( + request: OauthRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + try { + const oauthResponse = await turnkeyClient.apiClient().oauth({ + oidcToken: request.oidcToken, + targetPublicKey: request.targetPublicKey, + organizationId: request.suborgID, + }); + + const { credentialBundle, apiKeyId, userId } = oauthResponse; + if (!credentialBundle || !apiKeyId || !userId) { + throw new Error( + "Expected non-null values for credentialBundle, apiKeyId, and userId." + ); + } + + return { credentialBundle, apiKeyId, userId }; + } catch (error) { + console.error(error); + return undefined; + } +} diff --git a/packages/sdk-react/src/actions/otpAuth.ts b/packages/sdk-react/src/actions/otpAuth.ts new file mode 100644 index 000000000..f571c9b06 --- /dev/null +++ b/packages/sdk-react/src/actions/otpAuth.ts @@ -0,0 +1,44 @@ +"use server"; + +import { Turnkey } from "@turnkey/sdk-server"; + +type OtpAuthRequest = { + suborgID: string; + otpId: string; + otpCode: string; + targetPublicKey: string; +}; + +type OtpAuthResponse = { + userId: string; + apiKeyId: string; + credentialBundle: string; +}; + +export async function otpAuth( + request: OtpAuthRequest +): Promise { + const turnkeyClient = new Turnkey({ + apiBaseUrl: process.env.NEXT_PUBLIC_BASE_URL!, + defaultOrganizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + apiPrivateKey: process.env.TURNKEY_API_PRIVATE_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + apiPublicKey: process.env.TURNKEY_API_PUBLIC_KEY!, // DO NOT EXPOSE THESE TO YOUR CLIENT SIDE CODE + }); + try { + const otpAuthResponse = await turnkeyClient.apiClient().otpAuth({ + otpId: request.otpId, + otpCode: request.otpCode, + targetPublicKey: request.targetPublicKey, + organizationId: request.suborgID, + }); + const { credentialBundle, apiKeyId, userId } = otpAuthResponse; + + if (!apiKeyId || !credentialBundle || !userId) { + throw new Error("Expected a non-null otp auth response."); + } + + return { credentialBundle, apiKeyId, userId }; + } catch (e) { + return; + } +} diff --git a/packages/sdk-react/src/assets/apple.svg b/packages/sdk-react/src/assets/apple.svg new file mode 100644 index 000000000..2ed4299f4 --- /dev/null +++ b/packages/sdk-react/src/assets/apple.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/sdk-react/src/assets/caution.svg b/packages/sdk-react/src/assets/caution.svg new file mode 100644 index 000000000..fdcbafecb --- /dev/null +++ b/packages/sdk-react/src/assets/caution.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/checkbox.svg b/packages/sdk-react/src/assets/checkbox.svg new file mode 100644 index 000000000..b8c065755 --- /dev/null +++ b/packages/sdk-react/src/assets/checkbox.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/sdk-react/src/assets/clock.svg b/packages/sdk-react/src/assets/clock.svg new file mode 100644 index 000000000..97c83c148 --- /dev/null +++ b/packages/sdk-react/src/assets/clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/email.svg b/packages/sdk-react/src/assets/email.svg new file mode 100644 index 000000000..76f97cbb2 --- /dev/null +++ b/packages/sdk-react/src/assets/email.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/export.svg b/packages/sdk-react/src/assets/export.svg new file mode 100644 index 000000000..33f0d7936 --- /dev/null +++ b/packages/sdk-react/src/assets/export.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/eye.svg b/packages/sdk-react/src/assets/eye.svg new file mode 100644 index 000000000..d46144b1b --- /dev/null +++ b/packages/sdk-react/src/assets/eye.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/facebook.svg b/packages/sdk-react/src/assets/facebook.svg new file mode 100644 index 000000000..31884b73e --- /dev/null +++ b/packages/sdk-react/src/assets/facebook.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/sdk-react/src/assets/faceid.svg b/packages/sdk-react/src/assets/faceid.svg new file mode 100644 index 000000000..0b0e9cffe --- /dev/null +++ b/packages/sdk-react/src/assets/faceid.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/fingerprint.svg b/packages/sdk-react/src/assets/fingerprint.svg new file mode 100644 index 000000000..567225f21 --- /dev/null +++ b/packages/sdk-react/src/assets/fingerprint.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/fingerprintred.svg b/packages/sdk-react/src/assets/fingerprintred.svg new file mode 100644 index 000000000..5229f4450 --- /dev/null +++ b/packages/sdk-react/src/assets/fingerprintred.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/fonts/Inter-Bold.woff2 b/packages/sdk-react/src/assets/fonts/Inter-Bold.woff2 new file mode 100644 index 000000000..2846f29cc Binary files /dev/null and b/packages/sdk-react/src/assets/fonts/Inter-Bold.woff2 differ diff --git a/packages/sdk-react/src/assets/fonts/Inter-Regular.woff2 b/packages/sdk-react/src/assets/fonts/Inter-Regular.woff2 new file mode 100644 index 000000000..6c2b6893d Binary files /dev/null and b/packages/sdk-react/src/assets/fonts/Inter-Regular.woff2 differ diff --git a/packages/sdk-react/src/assets/fonts/Inter-SemiBold.woff2 b/packages/sdk-react/src/assets/fonts/Inter-SemiBold.woff2 new file mode 100644 index 000000000..611e90c95 Binary files /dev/null and b/packages/sdk-react/src/assets/fonts/Inter-SemiBold.woff2 differ diff --git a/packages/sdk-react/src/assets/google.svg b/packages/sdk-react/src/assets/google.svg new file mode 100644 index 000000000..fb226ca2d --- /dev/null +++ b/packages/sdk-react/src/assets/google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/sdk-react/src/assets/import.svg b/packages/sdk-react/src/assets/import.svg new file mode 100644 index 000000000..17efdebb9 --- /dev/null +++ b/packages/sdk-react/src/assets/import.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/keyhole.svg b/packages/sdk-react/src/assets/keyhole.svg new file mode 100644 index 000000000..d0d179a8f --- /dev/null +++ b/packages/sdk-react/src/assets/keyhole.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/sdk-react/src/assets/lockshield.svg b/packages/sdk-react/src/assets/lockshield.svg new file mode 100644 index 000000000..2885aa86e --- /dev/null +++ b/packages/sdk-react/src/assets/lockshield.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/sdk-react/src/assets/passkey.svg b/packages/sdk-react/src/assets/passkey.svg new file mode 100644 index 000000000..1ce73175d --- /dev/null +++ b/packages/sdk-react/src/assets/passkey.svg @@ -0,0 +1,14 @@ + + + + \ No newline at end of file diff --git a/packages/sdk-react/src/assets/redcircle.svg b/packages/sdk-react/src/assets/redcircle.svg new file mode 100644 index 000000000..18d0cc013 --- /dev/null +++ b/packages/sdk-react/src/assets/redcircle.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/shieldfinger.svg b/packages/sdk-react/src/assets/shieldfinger.svg new file mode 100644 index 000000000..1ada4f554 --- /dev/null +++ b/packages/sdk-react/src/assets/shieldfinger.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/packages/sdk-react/src/assets/sms.svg b/packages/sdk-react/src/assets/sms.svg new file mode 100644 index 000000000..6de1055f3 --- /dev/null +++ b/packages/sdk-react/src/assets/sms.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/timer.svg b/packages/sdk-react/src/assets/timer.svg new file mode 100644 index 000000000..302f1fd6d --- /dev/null +++ b/packages/sdk-react/src/assets/timer.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/assets/turnkey.svg b/packages/sdk-react/src/assets/turnkey.svg new file mode 100644 index 000000000..549b30a0c --- /dev/null +++ b/packages/sdk-react/src/assets/turnkey.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/sdk-react/src/assets/unlock.svg b/packages/sdk-react/src/assets/unlock.svg new file mode 100644 index 000000000..c92e3b410 --- /dev/null +++ b/packages/sdk-react/src/assets/unlock.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/sdk-react/src/components/auth/Apple.tsx b/packages/sdk-react/src/components/auth/Apple.tsx new file mode 100644 index 000000000..dff66754d --- /dev/null +++ b/packages/sdk-react/src/components/auth/Apple.tsx @@ -0,0 +1,121 @@ +import { useEffect, useState } from "react"; +import { sha256 } from "@noble/hashes/sha2"; +import { bytesToHex } from "@noble/hashes/utils"; +import styles from "./Socials.module.css"; +import appleIcon from "assets/apple.svg"; +import { + APPLE_AUTH_SCRIPT_URL, + APPLE_AUTH_URL, + popupHeight, + popupWidth, +} from "./constants"; + +interface AppleAuthButtonProps { + iframePublicKey: string; + clientId: string; + onSuccess: (response: any) => void; + layout: "inline" | "stacked"; +} +declare global { + interface Window { + AppleID?: any; + } +} + +const AppleAuthButton: React.FC = ({ + iframePublicKey, + onSuccess, + clientId, + layout, +}) => { + const [appleSDKLoaded, setAppleSDKLoaded] = useState(false); + const redirectURI = process.env.NEXT_PUBLIC_OAUTH_REDIRECT_URI!; + + useEffect(() => { + const loadAppleSDK = () => { + const script = document.createElement("script"); + script.src = APPLE_AUTH_SCRIPT_URL; + script.onload = () => setAppleSDKLoaded(true); + script.onerror = () => console.error("Failed to load AppleID SDK"); + document.body.appendChild(script); + }; + + if (!window.AppleID) { + loadAppleSDK(); + } else { + setAppleSDKLoaded(true); + } + }, []); + + const handleLogin = () => { + const nonce = bytesToHex(sha256(iframePublicKey)); + const appleAuthUrl = new URL(APPLE_AUTH_URL); + appleAuthUrl.searchParams.set("client_id", clientId); + appleAuthUrl.searchParams.set("redirect_uri", redirectURI); + appleAuthUrl.searchParams.set("response_type", "code id_token"); + appleAuthUrl.searchParams.set("response_mode", "fragment"); + appleAuthUrl.searchParams.set("nonce", nonce); + + // Calculate popup dimensions and position for centering + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + // Open the Apple login popup + const authWindow = window.open( + appleAuthUrl.toString(), + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (!authWindow) { + console.error("Failed to open Apple login window."); + return; + } + + // Monitor the popup for redirect and extract tokens + const interval = setInterval(() => { + try { + const url = authWindow?.location.href || ""; + if (url.startsWith(window.location.origin)) { + const hashParams = new URLSearchParams(url.split("#")[1]); + const idToken = hashParams.get("id_token"); + if (idToken) { + authWindow?.close(); + clearInterval(interval); + onSuccess({ idToken }); + } + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + + if (authWindow?.closed) { + clearInterval(interval); + } + }, 500); + }; + + if (!appleSDKLoaded) { + return null; + } + + return ( +
+ + {layout === "stacked" && Continue with Apple} +
+ ); +}; + +export default AppleAuthButton; diff --git a/packages/sdk-react/src/components/auth/Auth.module.css b/packages/sdk-react/src/components/auth/Auth.module.css new file mode 100644 index 000000000..496adea97 --- /dev/null +++ b/packages/sdk-react/src/components/auth/Auth.module.css @@ -0,0 +1,299 @@ +.authCardLoading { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + max-width: 450px; + min-width: 375px; + height: 200px; + margin: 0 auto; + padding: 20px; + background: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: var(--card-radius); + box-shadow: var(--card-shadow); + position: relative; +} + +.verifyingText { + font-weight: bold; + font-size: 18px; + color: var(--text-primary); + margin-bottom: 20px; + text-align: center; +} + +.loadingWrapper { + position: relative; + width: 100px; + height: 100px; + display: flex; + justify-content: center; + align-items: center; + margin-bottom: 8px; +} + +.defaultLoader { + max-width: 450px; + min-width: 375px; + position: relative; + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; + width: 100%; +} + +.circularProgress { + position: absolute; + color: var(--loader-color); +} + +.oauthIcon { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 60px; + height: 60px; +} + +.authCard { + position: relative; + width: 100%; + max-width: 450px; + min-width: 375px; + margin: 0 auto; + padding: 20px; + background: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: var(--card-radius); + box-shadow: var(--card-shadow); +} + +.authCard h2 { + font-size: 20px; + font-weight: 700; + line-height: 26px; + letter-spacing: -0.01em; + text-align: center; + font-size: 1.5rem; + margin-bottom: 16px; +} + +/* Form */ +.authForm { + margin-bottom: 16px; +} + +.inputGroup { + margin-bottom: 12px; +} + +.authButton { + font-family: "Inter"; + padding: 10px 16px; + gap: 8px; + color: var(--button-text); + width: 100%; + font-size: 1rem; + letter-spacing: -0.01em; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s ease; +} + +.authButton:hover { + background-color: var(--button-hover-bg); + color: var(--button-hover-text); +} + +.authButton:disabled { + color: var(--button-disabled-text); + background: var(--button-disabled-bg); + border-color: var(--button-disabled-border); + cursor: default; +} + +/* Separator */ +.separator { + text-align: center; + margin: 16px 0; + position: relative; +} + +.separator span { + color: var(--text-secondary); + padding: 0 10px; + position: relative; + z-index: 0; + font-size: 0.75rem; + background: var(--card-bg); +} + +.separator::before { + content: ""; + display: block; + position: absolute; + top: 50%; + left: 0; + right: 0; + height: 1px; + background: var(--card-border); + z-index: 0; +} + +.tos { + font-size: 12px; + font-weight: 400; + line-height: 16px; + letter-spacing: -0.01em; + text-align: center; + color: var(--text-secondary); + margin-top: 20px; +} + +.resendCode { + font-size: 12px; + line-height: 16px; + letter-spacing: -0.01em; + text-align: center; + color: var(--text-secondary); +} + +.resendCodeBold { + color: var(--text-primary); + font-weight: 700; + cursor: pointer; +} + +.tosBold { + color: var(--text-primary); + font-weight: 700; + cursor: pointer; + text-decoration: none; +} + +.socialButtonContainer { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + text-align: center; +} + +.poweredBy { + display: flex; + align-items: center; + justify-content: center; + gap: 2px; + font-size: 12px; + font-weight: 400; + line-height: 16px; + letter-spacing: -0.01em; + color: var(--text-secondary); + margin-top: 16px; + cursor: pointer; +} + +.poweredBy span { + position: relative; +} + +.phoneInput { + margin-top: 12px; + margin-bottom: 12px; +} + +.errorText { + min-height: 16px; + text-align: center; + margin-top: 12px; + color: var(--error-color); + font-size: 12px; +} + +.passkeyIconContainer { + display: flex; + justify-content: center; + align-items: center; + gap: 8px; + margin: 16px 0; +} + +.rowsContainer { + display: flex; + flex-direction: column; + justify-content: center; + gap: 8px; + margin-top: 16px; + width: 95%; + margin-left: auto; + margin-right: auto; + margin-bottom: 32px; +} + +.row { + display: flex; + align-items: center; +} + +.rowIcon { + padding-right: 8px; +} + +.noPasskeyLink { + letter-spacing: -0.01em; + color: var(--accent-color); + font-size: 1rem; + margin-top: 8px; + cursor: pointer; + align-items: center; + text-align: center; + display: inline-block; + transition: color 0.2s ease; +} + +.noPasskeyLink:hover { + color: var(--text-primary); +} + +.passkeyContainer { + display: flex; + flex-direction: column; + align-items: center; + gap: 8px; + margin-top: 16px; +} + +.socialButtonContainerInline { + display: flex; + justify-content: space-between; + align-items: center; + gap: 12px; +} + +.socialButtonContainerStacked { + width: 100%; + display: flex; + align-items: center; + justify-content: center; + cursor: pointer; + text-align: center; +} + +.primaryText { + color: var(--text-primary); +} + +.secondaryText { + color: var(--text-secondary); +} diff --git a/packages/sdk-react/src/components/auth/Auth.tsx b/packages/sdk-react/src/components/auth/Auth.tsx new file mode 100644 index 000000000..f7b445bcc --- /dev/null +++ b/packages/sdk-react/src/components/auth/Auth.tsx @@ -0,0 +1,622 @@ +import styles from "./Auth.module.css"; +import React, { useEffect, useState } from "react"; +import { initOtpAuth, getSuborgs, createSuborg, oauth } from "../../actions/"; +import { MuiPhone } from "./PhoneInput"; +import GoogleAuthButton from "./Google"; +import AppleAuthButton from "./Apple"; +import FacebookAuthButton from "./Facebook"; +import { CircularProgress, TextField } from "@mui/material"; +import turnkeyIcon from "assets/turnkey.svg"; +import googleIcon from "assets/google.svg"; +import facebookIcon from "assets/facebook.svg"; +import appleIcon from "assets/apple.svg"; +import ChevronLeftIcon from "@mui/icons-material/ChevronLeft"; +import OtpVerification from "./OtpVerification"; +import { useTurnkey } from "../../hooks/use-turnkey"; +import { getVerifiedSuborgs } from "../../actions/getVerifiedSuborgs"; +import { FilterType, OtpType, authErrors } from "./constants"; + +const passkeyIcon = ( + + + + +); + +const passkeyIconError = ( + + + + +); +interface AuthProps { + onAuthSuccess: () => Promise; + onError: (errorMessage: string) => void; + authConfig: { + emailEnabled: boolean; + passkeyEnabled: boolean; + phoneEnabled: boolean; + appleEnabled: boolean; + facebookEnabled: boolean; + googleEnabled: boolean; + }; + configOrder: string[]; + customSmsMessage?: string; +} + +const Auth: React.FC = ({ + onAuthSuccess, + onError, + authConfig, + configOrder, + customSmsMessage, +}) => { + const { passkeyClient, authIframeClient } = useTurnkey(); + const [email, setEmail] = useState(""); + const [phone, setPhone] = useState(""); + const [otpId, setOtpId] = useState(null); + const [step, setStep] = useState("auth"); + const [oauthLoading, setOauthLoading] = useState(""); + const [suborgId, setSuborgId] = useState(""); + const [passkeySignupScreen, setPasskeySignupScreen] = useState(false); + const [passkeyCreationScreen, setPasskeyCreationScreen] = useState(false); + const [passkeySignupError, setPasskeySignupError] = useState(""); + const [loading, setLoading] = useState(true); + const [passkeyCreated, setPasskeyCreated] = useState(false); + + const handleResendCode = async () => { + if (step === OtpType.Email) { + await handleOtpLogin(FilterType.Email, email, OtpType.Email); + } else if (step === OtpType.Sms) { + await handleOtpLogin(FilterType.PhoneNumber, phone, OtpType.Sms); + } + }; + + useEffect(() => { + if (authIframeClient) { + setLoading(false); + } + }, [authIframeClient]); + + if (loading) { + return ( +
+ +
+ ); + } + + const isValidEmail = (email: string) => + /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email); + + const isValidPhone = (phone: string) => /^\+1\d{10}$/.test(phone); + + const handleGetOrCreateSuborg = async ( + filterType: string, + filterValue: string, + additionalData = {} + ) => { + let suborgId; + if ( + filterType == FilterType.Email || + filterType == FilterType.PhoneNumber + ) { + const getVerifiedSuborgsResponse = await getVerifiedSuborgs({ + filterType, + filterValue, + }); + if ( + !getVerifiedSuborgsResponse || + !getVerifiedSuborgsResponse.organizationIds + ) { + onError(authErrors.suborg.fetchFailed); + } + suborgId = getVerifiedSuborgsResponse?.organizationIds[0]; + } else { + const getSuborgsResponse = await getSuborgs({ filterType, filterValue }); + if (!getSuborgsResponse || !getSuborgsResponse.organizationIds) { + onError(authErrors.suborg.fetchFailed); + } + suborgId = getSuborgsResponse?.organizationIds[0]; + } + + if (!suborgId) { + const createSuborgData: Record = { ...additionalData }; + if (filterType === FilterType.Email) createSuborgData.email = filterValue; + else if (filterType === FilterType.PhoneNumber) + createSuborgData.phoneNumber = filterValue; + + const createSuborgResponse = await createSuborg(createSuborgData); + if (!createSuborgResponse || !createSuborgResponse.subOrganizationId) { + onError(authErrors.suborg.createFailed); + } + suborgId = createSuborgResponse?.subOrganizationId!; + } + return suborgId; + }; + + const handleAuthSuccess = async (credentialBundle: any) => { + if (credentialBundle) { + await authIframeClient!.injectCredentialBundle(credentialBundle); + await authIframeClient!.loginWithAuthBundle(credentialBundle); + await onAuthSuccess(); + } + }; + + const handleSignupWithPasskey = async () => { + setPasskeySignupError(""); + const siteInfo = `${ + new URL(window.location.href).hostname + } - ${new Date().toLocaleString(undefined, { + year: "numeric", + month: "long", + day: "numeric", + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + })}`; + setPasskeySignupScreen(false); + setPasskeyCreationScreen(true); + try { + if (!passkeyCreated) { + const { encodedChallenge, attestation } = + (await passkeyClient?.createUserPasskey({ + publicKey: { user: { name: siteInfo, displayName: siteInfo } }, + })) || {}; + + if (encodedChallenge && attestation) { + const response = await createSuborg({ + email, + passkey: { + authenticatorName: "First Passkey", + challenge: encodedChallenge, + attestation, + }, + }); + if (response?.subOrganizationId) { + setPasskeyCreated(true); + } else { + authErrors.passkey.createFailed; + } + } else { + authErrors.passkey.createFailed; + } + } + + const sessionResponse = await passkeyClient?.createReadWriteSession({ + targetPublicKey: authIframeClient?.iframePublicKey!, + organizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + }); + if (sessionResponse?.credentialBundle) { + await handleAuthSuccess(sessionResponse.credentialBundle); + } else { + setPasskeySignupError(authErrors.passkey.loginFailed); + } + } catch { + setPasskeySignupError(authErrors.passkey.timeoutOrNotAllowed); + } + }; + + const handleLoginWithPasskey = async () => { + try { + const sessionResponse = await passkeyClient?.createReadWriteSession({ + targetPublicKey: authIframeClient?.iframePublicKey!, + organizationId: process.env.NEXT_PUBLIC_ORGANIZATION_ID!, + }); + + if (sessionResponse?.credentialBundle) { + await handleAuthSuccess(sessionResponse.credentialBundle); + } else { + authErrors.passkey.loginFailed; + } + } catch (error) { + onError(authErrors.passkey.loginFailed); + } + }; + + const handleOtpLogin = async ( + type: FilterType.Email | FilterType.PhoneNumber, + value: string, + otpType: string + ) => { + const suborgId = await handleGetOrCreateSuborg(type, value); + const initAuthResponse = await initOtpAuth({ + suborgID: suborgId, + otpType, + contact: value, + ...(customSmsMessage && { customSmsMessage }), + }); + if (initAuthResponse && initAuthResponse.otpId) { + setSuborgId(suborgId); + setOtpId(initAuthResponse?.otpId!); + setStep(otpType); + } else { + onError(authErrors.otp.sendFailed); + } + }; + + const handleOAuthLogin = async (credential: string, providerName: string) => { + setOauthLoading(providerName); + const suborgId = await handleGetOrCreateSuborg( + FilterType.OidcToken, + credential, + { + oauthProviders: [{ providerName, oidcToken: credential }], + } + ); + const oauthResponse = await oauth({ + suborgID: suborgId, + oidcToken: credential, + targetPublicKey: authIframeClient?.iframePublicKey!, + }); + if (oauthResponse && oauthResponse.credentialBundle) { + await handleAuthSuccess(oauthResponse!.credentialBundle); + } else { + onError(authErrors.oauth.loginFailed); + } + }; + + const renderBackButton = () => ( + { + setPasskeyCreationScreen(false); + setPasskeySignupError(""); + setPasskeySignupScreen(false); + setOtpId(null); + }} + sx={{ + color: "var(--text-secondary)", + position: "absolute", + top: 16, + left: 16, + zIndex: 10, + cursor: "pointer", + borderRadius: "50%", + padding: "6px", + transition: "background-color 0.3s ease", + }} + /> + ); + + const renderSocialButtons = () => { + const { googleEnabled, appleEnabled, facebookEnabled } = authConfig; + const layout = + [googleEnabled, appleEnabled, facebookEnabled].filter(Boolean).length >= 2 + ? "inline" + : "stacked"; + + return ( +
+ {googleEnabled && ( + + handleOAuthLogin(response.idToken, "Google") + } + /> + )} + {appleEnabled && ( + + handleOAuthLogin(response.idToken, "Apple") + } + /> + )} + {facebookEnabled && ( + + handleOAuthLogin(response.id_token, "Facebook") + } + /> + )} +
+ ); + }; + + const renderSection = (section: string) => { + switch (section) { + case "email": + return authConfig.emailEnabled && !otpId ? ( +
+
+ setEmail(e.target.value)} + fullWidth + sx={{ + "& .MuiOutlinedInput-root": { + color: "var(--input-text)", + "& fieldset": { + borderColor: "var(--input-border)", + }, + "&:hover fieldset": { + borderColor: "var(--input-hover-border)", + }, + "&.Mui-focused fieldset": { + borderColor: "var(--input-focus-border)", + border: "1px solid", + }, + }, + "& .MuiInputBase-input": { + padding: "12px", + }, + backgroundColor: "var(--input-bg)", + }} + variant="outlined" + /> +
+ +
+ ) : null; + + case "passkey": + return authConfig.passkeyEnabled && !otpId ? ( +
+ +
setPasskeySignupScreen(true)} + > + Sign up with passkey +
+
+ ) : null; + + case "phone": + return authConfig.phoneEnabled && !otpId ? ( +
+
+ setPhone(value)} value={phone} /> +
+ +
+ ) : null; + + case "socials": + return authConfig.googleEnabled || + authConfig.appleEnabled || + authConfig.facebookEnabled + ? renderSocialButtons() + : null; + + default: + return null; + } + }; + + return ( + <> + {passkeySignupScreen ? ( +
+ {renderBackButton()} +
{passkeyIcon}
+
+

Create a passkey

+
+
+
+ + Passkeys allow for easy biometric access to your wallet and can + be synced across devices. + +
+
+ +
+ ) : passkeyCreationScreen ? ( +
+ {renderBackButton()} +
+ {passkeySignupError ? ( +
{passkeyIconError}
+ ) : ( +
+ + {passkeyIcon} +
+ )} +
+
+

+ {passkeySignupError + ? "Authentication error" + : passkeyCreated + ? "Logging in with passkey..." + : "Creating passkey..."} +

+
+
+ +
{passkeySignupError ? passkeySignupError : ""}
+
+
+ {passkeySignupError && ( + + )} +
+ ) : ( +
+ {oauthLoading !== "" ? ( +
+

+ Verifying with {oauthLoading} +

+
+ + {oauthLoading === "Google" && ( + + )} + {oauthLoading === "Facebook" && ( + + )} + {oauthLoading === "Apple" && ( + + )} +
+
+ Secured by + +
+
+ ) : ( +
+ {otpId && renderBackButton()} +

+ {!otpId && "Log in or sign up"} +

+
+ {!otpId && + configOrder + .filter((section) => renderSection(section) !== null) + .map((section, index, visibleSections) => ( + + {renderSection(section)} + {index < visibleSections.length - 1 && ( +
+ OR +
+ )} +
+ ))} + {otpId && ( + + )} + + {!otpId && ( +
+ + By continuing, you agree to our{" "} + + Terms of Service + {" "} + &{" "} + + Privacy Policy + + {"."} + +
+ )} +
+
+ (window.location.href = "https://www.turnkey.com/") + } + className={styles.poweredBy} + > + Secured by + +
+
+ )} +
+ )} + + ); +}; + +export default Auth; diff --git a/packages/sdk-react/src/components/auth/Facebook.tsx b/packages/sdk-react/src/components/auth/Facebook.tsx new file mode 100644 index 000000000..039241244 --- /dev/null +++ b/packages/sdk-react/src/components/auth/Facebook.tsx @@ -0,0 +1,121 @@ +"use client"; + +import { useState } from "react"; +import styles from "./Socials.module.css"; +import { exchangeCodeForToken, generateChallengePair } from "./facebookUtils"; +import { sha256 } from "@noble/hashes/sha256"; +import { bytesToHex } from "@noble/hashes/utils"; +import facebookIcon from "assets/facebook.svg"; +import { FACEBOOK_AUTH_URL, popupHeight, popupWidth } from "./constants"; + +interface FacebookAuthButtonProps { + iframePublicKey: string; + clientId: string; + onSuccess: (response: any) => void; + layout: "inline" | "stacked"; +} + +const FacebookAuthButton: React.FC = ({ + iframePublicKey, + onSuccess, + clientId, + layout, +}) => { + const [tokenExchanged, setTokenExchanged] = useState(false); + const redirectURI = process.env.NEXT_PUBLIC_OAUTH_REDIRECT_URI!; + + const initiateFacebookLogin = async () => { + const { verifier, codeChallenge } = await generateChallengePair(); + sessionStorage.setItem("facebook_verifier", verifier); + + const params = new URLSearchParams({ + client_id: clientId, + redirect_uri: redirectURI, + state: verifier, + code_challenge: codeChallenge, + code_challenge_method: "S256", + nonce: bytesToHex(sha256(iframePublicKey)), + scope: "openid", + response_type: "code", + }); + + const facebookOAuthURL = `${FACEBOOK_AUTH_URL}?${params.toString()}`; + + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + // Open the login flow in a new window + const popup = window.open( + facebookOAuthURL, + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (popup) { + const interval = setInterval(async () => { + try { + if (popup.closed) { + clearInterval(interval); + return; + } + + const popupUrl = new URL(popup.location.href); + const authCode = popupUrl.searchParams.get("code"); + + if (authCode) { + popup.close(); + clearInterval(interval); + handleTokenExchange(authCode); + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + }, 250); + } + }; + + const handleTokenExchange = async (authCode: string) => { + const redirectURI = process.env.NEXT_PUBLIC_OAUTH_REDIRECT_URI!; + const verifier = sessionStorage.getItem("facebook_verifier"); + if (!verifier || tokenExchanged) { + console.error( + "No verifier found in sessionStorage or token exchange already completed" + ); + return; + } + + try { + const tokenData = await exchangeCodeForToken( + clientId, + redirectURI, + authCode, + verifier + ); + sessionStorage.removeItem("facebook_verifier"); + onSuccess(tokenData); + setTokenExchanged(true); + } catch (error) { + console.error("Error during token exchange:", error); + } + }; + + return ( +
+ + {layout === "stacked" && Continue with Facebook} +
+ ); +}; + +export default FacebookAuthButton; diff --git a/packages/sdk-react/src/components/auth/Google.tsx b/packages/sdk-react/src/components/auth/Google.tsx new file mode 100644 index 000000000..8147b4691 --- /dev/null +++ b/packages/sdk-react/src/components/auth/Google.tsx @@ -0,0 +1,99 @@ +"use client"; + +import { sha256 } from "@noble/hashes/sha2"; +import { bytesToHex } from "@noble/hashes/utils"; +import styles from "./Socials.module.css"; +import googleIcon from "assets/google.svg"; +import { GOOGLE_AUTH_URL, popupHeight, popupWidth } from "./constants"; + +interface GoogleAuthButtonProps { + iframePublicKey: string; + clientId: string; + onSuccess: (response: any) => void; + layout: "inline" | "stacked"; +} +declare global { + interface Window { + google: any; + } +} + +const GoogleAuthButton: React.FC = ({ + iframePublicKey, + clientId, + onSuccess, + layout, +}) => { + const handleLogin = async () => { + const nonce = bytesToHex(sha256(iframePublicKey)); + const redirectURI = process.env.NEXT_PUBLIC_OAUTH_REDIRECT_URI!.replace( + /\/$/, + "" + ); + // Construct the Google OIDC URL + const googleAuthUrl = new URL(GOOGLE_AUTH_URL); + googleAuthUrl.searchParams.set("client_id", clientId); + googleAuthUrl.searchParams.set("redirect_uri", redirectURI); // Replace with your actual redirect URI + googleAuthUrl.searchParams.set("response_type", "id_token"); // Use id_token for OpenID Connect + googleAuthUrl.searchParams.set("scope", "openid email profile"); // Scopes required for OpenID + googleAuthUrl.searchParams.set("nonce", nonce); + googleAuthUrl.searchParams.set("prompt", "select_account"); + const width = popupWidth; + const height = popupHeight; + const left = window.screenX + (window.innerWidth - width) / 2; + const top = window.screenY + (window.innerHeight - height) / 2; + + // Open the login flow in a new window + const authWindow = window.open( + googleAuthUrl.toString(), + "_blank", + `width=${width},height=${height},top=${top},left=${left},scrollbars=yes,resizable=yes` + ); + + if (!authWindow) { + console.error("Failed to open Google login window."); + return; + } + + // Monitor the child window for redirect and extract tokens + const interval = setInterval(() => { + try { + const url = authWindow?.location.href || ""; + if (url.startsWith(window.location.origin)) { + const hashParams = new URLSearchParams(url.split("#")[1]); + const idToken = hashParams.get("id_token"); + if (idToken) { + authWindow?.close(); + clearInterval(interval); + onSuccess({ idToken }); + } + } + } catch (error) { + // Ignore cross-origin errors until the popup redirects to the same origin. + // These errors occur because the script attempts to access the URL of the popup window while it's on a different domain. + // Due to browser security policies (Same-Origin Policy), accessing properties like location.href on a window that is on a different domain will throw an exception. + // Once the popup redirects to the same origin as the parent window, these errors will no longer occur, and the script can safely access the popup's location to extract parameters. + } + + if (authWindow?.closed) { + clearInterval(interval); + } + }, 500); + }; + + return ( +
+ Google + {layout === "stacked" && Continue with Google} +
+ ); +}; + +export default GoogleAuthButton; diff --git a/packages/sdk-react/src/components/auth/OtpVerification.module.css b/packages/sdk-react/src/components/auth/OtpVerification.module.css new file mode 100644 index 000000000..0f07f8f66 --- /dev/null +++ b/packages/sdk-react/src/components/auth/OtpVerification.module.css @@ -0,0 +1,98 @@ +.verifyingText { + font-weight: bold; + font-size: 18px; + color: var(--text-primary); + margin-bottom: 20px; + text-align: center; +} + +.verification { + font-size: 16px; + font-weight: 400; + line-height: 16px; + letter-spacing: -0.01em; + text-align: center; + color: var(--text-secondary); + margin-top: 16px; + height: 244px; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: relative; + box-sizing: border-box; + max-width: 400px; + padding: 8px; + margin: 0 auto; + background-color: var(--card-bg); + border-radius: 8px; +} + +.contentWrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; +} + +.otpInputWrapper { + width: 100%; +} + +.loadingWrapper { + position: absolute; + width: 100px; + height: 100px; + display: flex; + justify-content: center; + align-items: center; + z-index: 2; +} + +.errorText { + min-height: 16px; + text-align: center; + margin-top: 8px; + color: var(--error-color); + font-size: 14px; + margin-bottom: 8px; + max-width: 320px; + word-wrap: break-word; +} + +.verificationText { + font-size: 18px; + color: var(--text-primary); + font-weight: 500; +} + +.verificationBold { + color: var(--text-primary); + font-weight: 600; + display: block; + margin-top: 8px; +} + +.verificationIcon { + display: flex; + justify-content: center; + margin-bottom: 8px; +} + +.circularProgress { + position: absolute; + color: var(--loader-color); +} +.resendCode { + font-size: 14px; + letter-spacing: -0.01em; + text-align: center; + color: var(--text-secondary); +} + +.resendCodeBold { + color: var(--text-primary); + font-weight: 600; + cursor: pointer; +} diff --git a/packages/sdk-react/src/components/auth/OtpVerification.tsx b/packages/sdk-react/src/components/auth/OtpVerification.tsx new file mode 100644 index 000000000..f69c13eed --- /dev/null +++ b/packages/sdk-react/src/components/auth/OtpVerification.tsx @@ -0,0 +1,148 @@ +import React, { useRef, useState } from "react"; +import OtpInput from "./otp"; +import styles from "./OtpVerification.module.css"; +import { formatPhoneNumber } from "./utils"; +import { otpAuth } from "../../actions"; +import EmailIcon from "@mui/icons-material/Email"; +import SmsIcon from "@mui/icons-material/Sms"; +import { CircularProgress } from "@mui/material"; +import { OtpType, FilterType } from "./constants"; + +const resendTimerMs = 15000; +interface OtpVerificationProps { + type: string; + contact: string; + suborgId: string; + otpId: string; + authIframeClient: any; + onValidateSuccess: (credentialBundle: any) => Promise; + onResendCode: ( + type: FilterType.Email | FilterType.PhoneNumber, + value: string + ) => Promise; +} + +const OtpVerification: React.FC = ({ + type, + contact, + suborgId, + otpId, + authIframeClient, + onValidateSuccess, + onResendCode, +}) => { + const [otpError, setOtpError] = useState(null); + const [isLoading, setIsLoading] = useState(false); + const [resendText, setResendText] = useState("Resend code"); + const otpInputRef = useRef(null); + + const handleValidateOtp = async (otp: string) => { + setOtpError(null); + setIsLoading(true); + try { + const authResponse = await otpAuth({ + suborgID: suborgId, + otpId, + otpCode: otp, + targetPublicKey: authIframeClient!.iframePublicKey!, + }); + + if (authResponse?.credentialBundle) { + await onValidateSuccess(authResponse.credentialBundle); + } else { + setOtpError("Invalid code. Please try again."); + } + otpInputRef.current.resetOtp(); + } catch (error) { + setOtpError("An error occurred. Please try again."); + } + setIsLoading(false); + }; + + const handleResendCode = async () => { + setOtpError(null); + try { + await onResendCode( + type === OtpType.Email ? FilterType.Email : FilterType.PhoneNumber, + contact + ); + setResendText("Code sent âś“"); + + setTimeout(() => { + setResendText("Resend code"); + }, resendTimerMs); + } catch { + setOtpError("Failed to resend the code. Please try again."); + } + }; + + return ( +
+ {isLoading && ( +
+ +
+ )} +
+
+ {type === OtpType.Email ? ( + + ) : ( + + )} +
+
+ + Enter the 6-digit code we{" "} + {type === OtpType.Email ? "emailed" : "sent"} to{" "} + + + {type === OtpType.Email ? contact : formatPhoneNumber(contact)} + +
+
+ +
+ +
{otpError ? otpError : " "}
+ +
+ + {resendText} + +
+
+
+ ); +}; + +export default OtpVerification; diff --git a/packages/sdk-react/src/components/auth/PhoneInput.css b/packages/sdk-react/src/components/auth/PhoneInput.css new file mode 100644 index 000000000..cb5c8c99f --- /dev/null +++ b/packages/sdk-react/src/components/auth/PhoneInput.css @@ -0,0 +1 @@ +@import "react-international-phone/style.css"; diff --git a/packages/sdk-react/src/components/auth/PhoneInput.tsx b/packages/sdk-react/src/components/auth/PhoneInput.tsx new file mode 100644 index 000000000..1cb84b0c4 --- /dev/null +++ b/packages/sdk-react/src/components/auth/PhoneInput.tsx @@ -0,0 +1,161 @@ +import "./PhoneInput.css"; +import { + BaseTextFieldProps, + InputAdornment, + MenuItem, + Select, + TextField, + Typography, +} from "@mui/material"; +import { + CountryIso2, + defaultCountries, + parseCountry, + usePhoneInput, +} from "react-international-phone"; +import { FlagImage as OriginalFlagImage } from "react-international-phone"; + +const FlagImage = OriginalFlagImage as React.ElementType; +const allowedCountries = ["us", "ca"]; + +const countries = defaultCountries.filter((country) => { + const { iso2 } = parseCountry(country); + return allowedCountries.includes(iso2); +}); + +export interface MUIPhoneProps extends BaseTextFieldProps { + value: string; + onChange: (phone: string) => void; +} + +export const MuiPhone: React.FC = ({ + value, + onChange, + ...restProps +}) => { + const { inputValue, handlePhoneValueChange, inputRef, country, setCountry } = + usePhoneInput({ + defaultCountry: "us", + disableDialCodeAndPrefix: true, + value, + countries: countries, + onChange: (data) => { + onChange(data.phone); + }, + }); + + return ( + + + + ), + }} + {...restProps} + /> + ); +}; diff --git a/packages/sdk-react/src/components/auth/Socials.module.css b/packages/sdk-react/src/components/auth/Socials.module.css new file mode 100644 index 000000000..911593384 --- /dev/null +++ b/packages/sdk-react/src/components/auth/Socials.module.css @@ -0,0 +1,54 @@ +.socialButton { + letter-spacing: -0.01em; + font-family: "Inter"; + padding: 10px 16px; + gap: 8px; + color: var(--button-text); + width: 100%; + font-size: 1rem; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s ease; +} + +.iconButton { + padding: 10px 16px; + gap: 8px; + color: var(--button-text); + width: 100%; + font-size: 1rem; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + transition: background-color 0.2s ease; +} + +.socialButton:hover { + background-color: var(--button-hover-bg); +} + +.iconButton:hover { + background-color: var(--button-hover-bg); +} + +.iconSmall { + width: 20px; + height: 20px; + margin-right: 4px; +} + +.iconLarge { + width: 24px; + height: 24px; +} diff --git a/packages/sdk-react/src/components/auth/TurnkeyThemeProvider.tsx b/packages/sdk-react/src/components/auth/TurnkeyThemeProvider.tsx new file mode 100644 index 000000000..32be740bd --- /dev/null +++ b/packages/sdk-react/src/components/auth/TurnkeyThemeProvider.tsx @@ -0,0 +1,48 @@ +import React, { createContext, useContext, useEffect } from "react"; + +const ThemeContext = createContext | null>(null); + +interface ThemeProviderProps { + children: React.ReactNode; + theme?: Record; +} + +/** + * A provider component for dynamically applying and managing CSS custom properties (variables) as themes. + * + * - Applies the provided `theme` to the root `` element via CSS variables. + * - Makes the `theme` object accessible to child components through React context. These themes will apply to all Turnkey components used in your app + * + * Example usage: + * ```tsx + * const theme = { + * "--text-primary": "#333", + * }; + * + * + * + * + * ``` + */ + +export const TurnkeyThemeProvider: React.FC = ({ + children, + theme, +}) => { + useEffect(() => { + if (theme) { + const root = document.documentElement.style; + Object.entries(theme).forEach(([key, value]) => { + root.setProperty(key, value); + }); + } + }, [theme]); + + return ( + + {children} + + ); +}; + +export const useTheme = () => useContext(ThemeContext); diff --git a/packages/sdk-react/src/components/auth/constants.ts b/packages/sdk-react/src/components/auth/constants.ts new file mode 100644 index 000000000..a92e1a5f4 --- /dev/null +++ b/packages/sdk-react/src/components/auth/constants.ts @@ -0,0 +1,48 @@ +export const GOOGLE_AUTH_URL = "https://accounts.google.com/o/oauth2/v2/auth"; +export const APPLE_AUTH_URL = "https://appleid.apple.com/auth/authorize"; +export const APPLE_AUTH_SCRIPT_URL = + "https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"; +export const FACEBOOK_AUTH_URL = "https://www.facebook.com/v11.0/dialog/oauth"; +export const FACEBOOK_GRAPH_URL = + "https://graph.facebook.com/v11.0/oauth/access_token"; +export const popupWidth = 500; +export const popupHeight = 600; + +export const authErrors = { + // Passkey-related errors + passkey: { + createFailed: "Passkey not created. Please try again.", + loginFailed: "Failed to login with passkey. Please try again.", + timeoutOrNotAllowed: + "The operation either timed out or was not allowed. Please try again.", + }, + + // OTP-related errors + otp: { + sendFailed: "Failed to send OTP", + invalidEmail: "Invalid email address.", + invalidPhone: "Invalid phone number.", + }, + + // OAuth-related errors + oauth: { + loginFailed: "Failed to login with OIDC provider", + }, + + // Sub-organization-related errors + suborg: { + fetchFailed: "Failed to fetch account", + createFailed: "Failed to create account.", + }, +}; + +export enum OtpType { + Email = "OTP_TYPE_EMAIL", + Sms = "OTP_TYPE_SMS", +} + +export enum FilterType { + Email = "EMAIL", + PhoneNumber = "PHONE_NUMBER", + OidcToken = "OIDC_TOKEN", +} diff --git a/packages/sdk-react/src/components/auth/facebookUtils.ts b/packages/sdk-react/src/components/auth/facebookUtils.ts new file mode 100644 index 000000000..a5d40faeb --- /dev/null +++ b/packages/sdk-react/src/components/auth/facebookUtils.ts @@ -0,0 +1,37 @@ +"use server"; + +import crypto from "crypto"; +import { FACEBOOK_GRAPH_URL } from "./constants"; + +export async function generateChallengePair() { + const verifier = crypto.randomBytes(32).toString("base64url"); + const codeChallenge = crypto + .createHash("sha256") + .update(verifier) + .digest("base64url"); + return { verifier, codeChallenge }; +} + +export async function exchangeCodeForToken( + clientId: string, + redirectURI: string, + authCode: string, + verifier: string +) { + const response = await fetch(FACEBOOK_GRAPH_URL, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + client_id: clientId, + redirect_uri: redirectURI, + code: authCode, + code_verifier: verifier, + }), + }); + + const tokenData = await response.json(); + if (!response.ok) { + throw new Error("Token exchange failed: " + JSON.stringify(tokenData)); + } + return tokenData; +} diff --git a/packages/sdk-react/src/components/auth/index.ts b/packages/sdk-react/src/components/auth/index.ts new file mode 100644 index 000000000..15a7f86c9 --- /dev/null +++ b/packages/sdk-react/src/components/auth/index.ts @@ -0,0 +1,4 @@ +export { default as Auth } from "./Auth"; +export { default as OtpVerification } from "./OtpVerification"; +export { TurnkeyThemeProvider } from "./TurnkeyThemeProvider"; +export { OtpType, FilterType } from "./constants"; diff --git a/packages/sdk-react/src/components/auth/otp.tsx b/packages/sdk-react/src/components/auth/otp.tsx new file mode 100644 index 000000000..88d884a83 --- /dev/null +++ b/packages/sdk-react/src/components/auth/otp.tsx @@ -0,0 +1,109 @@ +import React, { useState, forwardRef, useImperativeHandle } from "react"; +import { TextField, Box } from "@mui/material"; + +interface OtpInputProps { + onComplete: (otp: string) => void; + hasError: boolean; +} + +const OtpInput = forwardRef( + ({ onComplete, hasError }, ref) => { + const [otp, setOtp] = useState(Array(6).fill("")); + + useImperativeHandle(ref, () => ({ + resetOtp() { + setOtp(Array(6).fill("")); + const firstInput = document.getElementById("otp-input-0"); + if (firstInput) (firstInput as HTMLInputElement).focus(); + }, + })); + + const handleChange = (value: string, index: number) => { + if (/^\d*$/.test(value)) { + const newOtp = [...otp]; + newOtp[index] = value; + setOtp(newOtp); + + // If all boxes are filled, call onComplete with the OTP + if (newOtp.every((digit) => digit !== "")) { + onComplete(newOtp.join("")); + } + + // Move focus to the next box if current is filled + if (value && index < 5) { + const nextInput = document.getElementById(`otp-input-${index + 1}`); + if (nextInput) (nextInput as HTMLInputElement).focus(); + } + } + }; + + const handleKeyDown = (event: React.KeyboardEvent, index: number) => { + if (event.key === "Backspace" && otp[index] === "" && index > 0) { + const prevInput = document.getElementById(`otp-input-${index - 1}`); + if (prevInput) (prevInput as HTMLInputElement).focus(); + } + }; + + const handlePaste = (event: React.ClipboardEvent) => { + const pasteData = event.clipboardData.getData("Text").replace(/\D/g, ""); // Ensure only digits are pasted + if (pasteData.length === 6) { + const newOtp = pasteData.split(""); + setOtp(newOtp); + onComplete(newOtp.join("")); + + // Automatically move focus to the last input box + const lastInput = document.getElementById(`otp-input-5`); + if (lastInput) (lastInput as HTMLInputElement).focus(); + + event.preventDefault(); + } + }; + + return ( + + {otp.map((digit, index) => ( + handleChange(e.target.value, index)} + onKeyDown={(e) => handleKeyDown(e, index)} + onPaste={index === 0 ? handlePaste : undefined} + inputProps={{ + maxLength: 1, + style: { + textAlign: "center", + fontSize: "1.5rem", + height: "20px", + width: "100%", + background: "var(--input-bg)", + }, + }} + variant="outlined" + sx={{ + "& .MuiOutlinedInput-root": { + color: "var(--input-text)", + "& fieldset": { + borderColor: + hasError && !digit + ? "var(--error-color)" + : "var(--input-border)", + }, + "&:hover fieldset": { + borderColor: "var(--input-border-hover)", + }, + "&.Mui-focused fieldset": { + borderColor: "var(--input-border-focus)", + border: "1px solid", + }, + }, + }} + /> + ))} + + ); + } +); + +export default OtpInput; diff --git a/packages/sdk-react/src/components/auth/utils.ts b/packages/sdk-react/src/components/auth/utils.ts new file mode 100644 index 000000000..9417dd145 --- /dev/null +++ b/packages/sdk-react/src/components/auth/utils.ts @@ -0,0 +1,6 @@ +import parsePhoneNumberFromString from "libphonenumber-js"; + +export const formatPhoneNumber = (phone: string) => { + const phoneNumber = parsePhoneNumberFromString(phone); + return phoneNumber ? phoneNumber.formatInternational() : phone; +}; diff --git a/packages/sdk-react/src/components/export/Export.module.css b/packages/sdk-react/src/components/export/Export.module.css new file mode 100644 index 000000000..4c4f7344a --- /dev/null +++ b/packages/sdk-react/src/components/export/Export.module.css @@ -0,0 +1,111 @@ +.exportModalTitle { + font-size: 18px; + line-height: 24px; + font-weight: 600; + letter-spacing: -0.01em; + text-align: left; + color: var(--text-primary); +} + +.exportCard { + font-family: Inter; + position: relative; + width: 100%; + max-width: 450px; + min-width: 375px; + margin: 0 auto; + padding: 20px; + background: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: var(--card-radius); + box-shadow: var(--card-shadow); +} + +.exportCard h2 { + font-size: 20px; + font-weight: 700; + line-height: 26px; + letter-spacing: -0.01em; + text-align: center; + font-size: 1.5rem; + margin-bottom: 16px; + color: var(--text-primary); +} + +.doneButtonContainer { + margin-top: 12px; +} + +.exportButton { + letter-spacing: -0.01em; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 10px 16px; + gap: 8px; + color: var(--button-text); + width: 100%; + font-size: 1rem; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +.exportButton:hover { + background-color: var(--button-hover-bg); +} + +.exportButton:disabled { + color: var(--button-disabled-text); + background: var(--button-disabled-bg); + border-color: var(--button-disabled-border); + cursor: default; +} + +.rowsContainer { + font-family: Inter; + display: flex; + flex-direction: column; + justify-content: center; + gap: 16px; + margin-top: 16px; + width: 95%; + margin-right: auto; + margin-bottom: 32px; + color: var(--text-primary); +} + +.row { + display: flex; + align-items: center; +} + +.rowIcon { + padding-right: 8px; +} + +.poweredBy { + font-family: Inter; + display: flex; + align-items: center; + justify-content: center; + gap: 2px; + font-size: 12px; + font-weight: 400; + line-height: 16px; + letter-spacing: -0.01em; + color: var(--text-secondary); + margin-top: 16px; + cursor: pointer; +} + +.poweredBy span { + position: relative; +} + +iframe { + box-sizing: border-box; + border: 0 solid var(--border-default); +} diff --git a/packages/sdk-react/src/components/export/Export.tsx b/packages/sdk-react/src/components/export/Export.tsx new file mode 100644 index 000000000..ab0b13eb1 --- /dev/null +++ b/packages/sdk-react/src/components/export/Export.tsx @@ -0,0 +1,226 @@ +import React, { useState } from "react"; +import { Modal, Box, Typography } from "@mui/material"; +import { useTurnkey } from "../../hooks/use-turnkey"; +import type { TurnkeyIframeClient } from "@turnkey/sdk-browser"; +import styles from "./Export.module.css"; +import unlockIcon from "assets/unlock.svg"; +import eyeIcon from "assets/eye.svg"; +import cautionIcon from "assets/caution.svg"; +import turnkeyIcon from "assets/turnkey.svg"; +import exportIcon from "assets/export.svg"; + +type ExportProps = { + walletId: string; + onHandleExportSuccess: () => Promise; + onError: (errorMessage: string) => void; +}; + +const Export: React.FC = ({ + walletId, + onHandleExportSuccess, + onError, +}) => { + const { authIframeClient, turnkey } = useTurnkey(); + const [exportIframeClient, setExportIframeClient] = + useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + const [isIframeVisible, setIsIframeVisible] = useState(false); + const TurnkeyExportIframeContainerId = "turnkey-export-iframe-container-id"; + const TurnkeyIframeElementId = "turnkey-default-iframe-element-id"; + + const handleOpenModal = async () => { + setIsModalOpen(true); + + // Wait for the modal and its content to render + requestAnimationFrame(async () => { + const iframeContainer = document.getElementById( + TurnkeyExportIframeContainerId + ); + if (!iframeContainer) { + console.error("Iframe container not found."); + return; + } + + const existingIframe = document.getElementById(TurnkeyIframeElementId); + + if (!existingIframe) { + try { + const newExportIframeClient = await turnkey?.iframeClient({ + iframeContainer: document.getElementById( + TurnkeyExportIframeContainerId + ), + iframeUrl: process.env.NEXT_PUBLIC_EXPORT_IFRAME_URL!, + }); + setExportIframeClient(newExportIframeClient!); + } catch (error) { + console.error("Error initializing IframeStamper:", error); + } + } + }); + }; + + const handleCloseModal = () => { + // Clear the iframe stamper + if (exportIframeClient) { + setExportIframeClient(null); + + const existingIframe = document.getElementById(TurnkeyIframeElementId); + if (existingIframe) { + existingIframe.remove(); + } + } + + // Reset modal and iframe states + setIsModalOpen(false); + setIsIframeVisible(false); + }; + + const handleExport = async () => { + await exportWallet(); + setIsIframeVisible(true); + }; + + const exportWallet = async () => { + try { + const whoami = await authIframeClient!.getWhoami(); + + const exportResponse = await authIframeClient?.exportWallet({ + organizationId: whoami.organizationId, + walletId: walletId!, + targetPublicKey: exportIframeClient!.iframePublicKey!, + }); + + if (!exportResponse?.exportBundle) { + throw new Error("Failed to retrieve export bundle"); + } + + await exportIframeClient?.injectWalletExportBundle( + exportResponse.exportBundle, + whoami.organizationId + ); + + onHandleExportSuccess(); + } catch (error) { + console.error("Error during wallet export:", error); + onError("Failed to export wallet"); + } + }; + + return ( + <> + + + + +
+ × +
+ +
Export wallet
+ + {!isIframeVisible ? ( +
+
+ + Keep your seed phrase private. +
+
+ + + Anyone who has your seed phrase can access your wallet. + +
+
+ + + Make sure nobody can see your screen when viewing your seed + phrase. + +
+
+ ) : ( + + Your seed phrase is the key to your wallet. Save it in a secure + location. + + )} + {!isIframeVisible && ( + <> + + + )} +
+ {isIframeVisible && ( +
+ +
+ )} + +
(window.location.href = "https://www.turnkey.com/")} + className={styles.poweredBy} + > + Secured by + +
+ + + + ); +}; + +export default Export; diff --git a/packages/sdk-react/src/components/export/index.ts b/packages/sdk-react/src/components/export/index.ts new file mode 100644 index 000000000..585761b9f --- /dev/null +++ b/packages/sdk-react/src/components/export/index.ts @@ -0,0 +1 @@ +export { default as Export } from "./Export"; diff --git a/packages/sdk-react/src/components/import/Import.module.css b/packages/sdk-react/src/components/import/Import.module.css new file mode 100644 index 000000000..2ae47ab20 --- /dev/null +++ b/packages/sdk-react/src/components/import/Import.module.css @@ -0,0 +1,87 @@ +.importModalTitle { + font-size: 18px; + line-height: 24px; + font-weight: 600; + letter-spacing: -0.01em; + text-align: left; + color: var(--text-primary); +} + +.importCard { + font-family: Inter; + position: relative; + width: 100%; + max-width: 450px; + min-width: 375px; + margin: 0 auto; + padding: 20px; + background: var(--card-bg); + border: 1px solid var(--card-border); + border-radius: var(--card-radius); + box-shadow: var(--card-shadow); +} + +.importCard h2 { + font-size: 20px; + font-weight: 700; + line-height: 26px; + letter-spacing: -0.01em; + text-align: center; + font-size: 1.5rem; + margin-bottom: 16px; + color: var(--text-primary); +} + +.importButton { + letter-spacing: -0.01em; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 10px 16px; + gap: 8px; + color: var(--button-text); + width: 100%; + font-size: 1rem; + background: var(--button-bg); + border: 1px solid var(--button-border); + border-radius: 8px; + cursor: pointer; + transition: background-color 0.3s ease; +} + +.importButton:hover { + background-color: var(--button-hover-bg); +} + +.importButton:disabled { + color: var(--button-disabled-text); + background: var(--button-disabled-bg); + border-color: var(--button-disabled-border); + cursor: default; +} + +.poweredBy { + font-family: Inter; + display: flex; + align-items: center; + justify-content: center; + gap: 2px; + font-size: 12px; + font-weight: 400; + line-height: 16px; + letter-spacing: -0.01em; + color: var(--text-secondary); + margin-top: 16px; + cursor: pointer; +} + +.poweredBy span { + position: relative; +} + +iframe { + box-sizing: border-box; + border: 0 solid var(--border-default); + width: 100%; + height: 100%; +} diff --git a/packages/sdk-react/src/components/import/Import.tsx b/packages/sdk-react/src/components/import/Import.tsx new file mode 100644 index 000000000..8f2a228ae --- /dev/null +++ b/packages/sdk-react/src/components/import/Import.tsx @@ -0,0 +1,232 @@ +import React, { useState } from "react"; +import { Modal, Box, Typography, TextField } from "@mui/material"; +import { useTurnkey } from "../../hooks/use-turnkey"; +import { + DEFAULT_ETHEREUM_ACCOUNTS, + DEFAULT_SOLANA_ACCOUNTS, + TurnkeyIframeClient, +} from "@turnkey/sdk-browser"; +import styles from "./Import.module.css"; +import turnkeyIcon from "assets/turnkey.svg"; +import importIcon from "assets/import.svg"; +type ImportProps = { + onError: (errorMessage: string) => void; + onHandleImportSuccess: () => Promise; +}; + +const Import: React.FC = ({ onHandleImportSuccess, onError }) => { + const { authIframeClient, turnkey } = useTurnkey(); + const [importIframeClient, setImportIframeClient] = + useState(null); + const [isModalOpen, setIsModalOpen] = useState(false); + const [walletName, setWalletName] = useState(""); + const TurnkeyImportIframeContainerId = "turnkey-import-iframe-container-id"; + const TurnkeyIframeElementId = "turnkey-default-iframe-element-id"; + + const handleOpenModal = async () => { + setIsModalOpen(true); + + requestAnimationFrame(async () => { + const iframeContainer = document.getElementById( + TurnkeyImportIframeContainerId + ); + if (!iframeContainer) { + console.error("Iframe container not found."); + return; + } + + const existingIframe = document.getElementById(TurnkeyIframeElementId); + + if (!existingIframe) { + try { + const newImportIframeClient = await turnkey?.iframeClient({ + iframeContainer: document.getElementById( + TurnkeyImportIframeContainerId + ), + iframeUrl: process.env.NEXT_PUBLIC_IMPORT_IFRAME_URL!, + }); + setImportIframeClient(newImportIframeClient!); + } catch (error) { + console.error("Error initializing IframeStamper:", error); + } + } + }); + }; + + const handleCloseModal = () => { + if (importIframeClient) { + setImportIframeClient(null); + + const existingIframe = document.getElementById(TurnkeyIframeElementId); + if (existingIframe) { + existingIframe.remove(); + } + } + + setIsModalOpen(false); + }; + + const handleImport = async () => { + try { + const whoami = await authIframeClient!.getWhoami(); + if (!importIframeClient) { + throw new Error("Import iframe client not initialized"); + } + + const initResult = await authIframeClient!.initImportWallet({ + organizationId: whoami.organizationId, + userId: whoami.userId, + }); + + const injected = await importIframeClient!.injectImportBundle( + initResult.importBundle, + whoami.organizationId, + whoami.userId + ); + + if (!injected) { + throw new Error("Failed to inject import bundle"); + } + + const encryptedBundle = + await importIframeClient.extractWalletEncryptedBundle(); + + if (!encryptedBundle || encryptedBundle.trim() === "") { + throw new Error("Encrypted wallet bundle is empty or invalid"); + } + + const response = await authIframeClient?.importWallet({ + organizationId: whoami.organizationId, + userId: whoami.userId, + walletName: walletName, + encryptedBundle, + accounts: [...DEFAULT_ETHEREUM_ACCOUNTS, ...DEFAULT_SOLANA_ACCOUNTS], + }); + + if (response?.walletId) { + handleCloseModal(); + onHandleImportSuccess(); + } else { + throw new Error("Failed to import wallet"); + } + } catch (error) { + console.error("Error during wallet import:", error); + onError("Failed to import wallet"); + } + }; + + return ( + <> + + + + + {/* Close Button */} +
+ × +
+ +
Import wallet
+ + Enter your seed phrase. Seed phrases are typically 12-24 words. + + +
+ setWalletName(e.target.value)} + fullWidth + style={{ + marginTop: "12px", + marginBottom: "12px", + }} + sx={{ + "& .MuiOutlinedInput-root": { + "& fieldset": { + borderColor: "var(--input-border)", + }, + "&:hover fieldset": { + borderColor: "var(--input-hover-border)", + }, + "&.Mui-focused fieldset": { + borderColor: "var(--input-focus-border)", + border: "1px solid", + }, + }, + "& .MuiInputBase-input": { + padding: "12px", + }, + backgroundColor: "white", + }} + variant="outlined" + /> + + + +
(window.location.href = "https://www.turnkey.com/")} + className={styles.poweredBy} + > + Secured by + +
+ + + + ); +}; + +export default Import; diff --git a/packages/sdk-react/src/components/import/index.ts b/packages/sdk-react/src/components/import/index.ts new file mode 100644 index 000000000..476acb2f7 --- /dev/null +++ b/packages/sdk-react/src/components/import/index.ts @@ -0,0 +1 @@ +export { default as Import } from "./Import"; diff --git a/packages/sdk-react/src/components/index.ts b/packages/sdk-react/src/components/index.ts new file mode 100644 index 000000000..b84268305 --- /dev/null +++ b/packages/sdk-react/src/components/index.ts @@ -0,0 +1,3 @@ +export * from "./auth"; +export * from "./export"; +export * from "./import"; diff --git a/packages/sdk-react/src/components/theme.css b/packages/sdk-react/src/components/theme.css new file mode 100644 index 000000000..a0f83ef29 --- /dev/null +++ b/packages/sdk-react/src/components/theme.css @@ -0,0 +1,70 @@ +/* Define the font-face rules */ +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: url("./assets/fonts/Inter-Regular.woff2") format("woff2"); +} + +@font-face { + font-family: "Inter"; + font-style: normal; + font-weight: 600; + font-display: swap; + src: url("./assets/fonts/Inter-SemiBold.woff2?v=3.19") format("woff2"); +} + +:root { + font-family: "Inter"; + /* Button Colors */ + --button-bg: #ffffff; /* Default button background */ + --button-text: var(--Greyscale-900, #2b2f33); /* Default button text */ + --button-border: var(--Greyscale-400, #a2a7ae); /* Default button border */ + --button-hover-bg: #f5f5f5; /* Hover button background */ + --button-hover-text: var(--Greyscale-900, #2b2f33); /* Hover button text */ + --button-disabled-bg: #ffffff; /* Disabled button background */ + --button-disabled-text: var( + --Greyscale-700, + #a2a7ae + ); /* Disabled button text */ + --button-disabled-border: var( + --Greyscale-100, + #f5f7fb + ); /* Disabled button border */ + + /* Input Field Colors */ + --input-bg: #ffffff; /* Input field background */ + --input-text: var(--Greyscale-900, #2b2f33); /* Input text color */ + --input-border: var(--Greyscale-400, #d0d5dd); /* Input border color */ + --input-hover-border: var( + --Greyscale-500, + #868c95 + ); /* Input border on hover */ + --input-focus-border: var( + --Greyscale-900, + #2b2f33 + ); /* Input border on focus */ + + /* Text Colors */ + --text-primary: var(--Greyscale-900, #2b2f33); /* Primary text */ + --text-secondary: var(--Greyscale-500, #868c95); /* Secondary text */ + --text-disabled: var(--Greyscale-700, #a2a7ae); /* Disabled text */ + + /* Border Colors */ + --border-default: var(--Greyscale-400, #a2a7ae); /* Default border */ + --border-hover: var(--Greyscale-500, #868c95); /* Hover border */ + --border-disabled: var(--Greyscale-100, #f5f7fb); /* Disabled border */ + + /* Card Colors */ + --card-bg: var(--Greyscale-20, #f5f7fb); /* Default auth-card background */ + --card-border: var(--Greyscale-100, #ebedf2); /* Default auth-card border */ + --card-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); /* Default auth-card shadow */ + --card-radius: 15px; /* Default auth-card border radius */ + + /* Misc Colors */ + --accent-color: var(--Blue-500, #4c48ff); + --loader-color: var(--Blue-500, #4c48ff); + --icon-color: var(--Greyscale-900, #2b2f33); + --error-color: #ff4c4c; +} diff --git a/packages/sdk-react/src/global.d.ts b/packages/sdk-react/src/global.d.ts new file mode 100644 index 000000000..fb9c743e1 --- /dev/null +++ b/packages/sdk-react/src/global.d.ts @@ -0,0 +1,11 @@ +// For CSS modules +declare module "*.module.css" { + const classes: { [key: string]: string }; + export default classes; +} + +// For SVG files +declare module "*.svg" { + const content: string; + export default content; +} diff --git a/packages/sdk-react/src/index.ts b/packages/sdk-react/src/index.ts index 78f74c83d..a9c1b54c5 100644 --- a/packages/sdk-react/src/index.ts +++ b/packages/sdk-react/src/index.ts @@ -1,4 +1,11 @@ +import "./components/auth/Auth.module.css"; +import "./components/auth/OtpVerification.module.css"; +import "./components/auth/PhoneInput.css"; +import "./components/export/Export.module.css"; +import "./components/import/Import.module.css"; +import "./components/theme.css"; import { TurnkeyContext, TurnkeyProvider } from "./contexts/TurnkeyContext"; import { useTurnkey } from "./hooks/use-turnkey"; - +export * from "./components"; +export * from "./actions"; export { TurnkeyContext, TurnkeyProvider, useTurnkey }; diff --git a/packages/solana/package.json b/packages/solana/package.json index 93544a10f..a6ef7af77 100644 --- a/packages/solana/package.json +++ b/packages/solana/package.json @@ -48,7 +48,7 @@ "typecheck": "tsc -p tsconfig.typecheck.json" }, "dependencies": { - "@solana/web3.js": "^1.88.1", + "@solana/web3.js": "^1.95.8", "@turnkey/http": "workspace:*", "@turnkey/sdk-browser": "workspace:*", "@turnkey/sdk-server": "workspace:*" diff --git a/packages/wallet-stamper/package.json b/packages/wallet-stamper/package.json index 9615c08bb..3ce773f2b 100644 --- a/packages/wallet-stamper/package.json +++ b/packages/wallet-stamper/package.json @@ -55,7 +55,7 @@ "viem": "^2.21.35" }, "devDependencies": { - "@solana/web3.js": "^1.88.1", + "@solana/web3.js": "^1.95.8", "@turnkey/api-key-stamper": "workspace:*", "@turnkey/http": "workspace:*", "dotenv": "^16.0.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fd397ad93..54488215a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -29,9 +29,15 @@ importers: '@jest/types': specifier: ^29.3.1 version: 29.4.3 + '@rollup/plugin-alias': + specifier: 5.1.1 + version: 5.1.1(rollup@4.22.4) '@rollup/plugin-typescript': specifier: ^11.1.5 version: 11.1.5(rollup@4.22.4)(typescript@5.1.5) + '@rollup/plugin-url': + specifier: 8.0.2 + version: 8.0.2(rollup@4.22.4) '@tsconfig/node16-strictest': specifier: ^1.0.4 version: 1.0.4 @@ -53,9 +59,18 @@ importers: rollup: specifier: ^4.22.4 version: 4.22.4 + rollup-plugin-copy: + specifier: ^3.5.0 + version: 3.5.0 rollup-plugin-node-externals: specifier: ^6.1.2 version: 6.1.2(rollup@4.22.4) + rollup-plugin-postcss: + specifier: ^4.0.2 + version: 4.0.2(postcss@8.4.38) + rollup-preserve-directives: + specifier: ^1.1.2 + version: 1.1.2(rollup@4.22.4) tsx: specifier: ^3.12.7 version: 3.12.7 @@ -458,6 +473,96 @@ importers: specifier: 5.1.3 version: 5.1.3 + examples/react-components: + dependencies: + '@emotion/react': + specifier: ^11.13.3 + version: 11.13.3(@types/react@18.2.14)(react@18.2.0) + '@emotion/styled': + specifier: ^11.13.0 + version: 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.14)(react@18.2.0) + '@hello-pangea/dnd': + specifier: ^17.0.0 + version: 17.0.0(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@mui/icons-material': + specifier: ^6.1.5 + version: 6.1.5(@mui/material@6.1.5)(@types/react@18.2.14)(react@18.2.0) + '@mui/material': + specifier: ^6.1.5 + version: 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@noble/hashes': + specifier: 1.4.0 + version: 1.4.0 + '@solana/web3.js': + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) + '@turnkey/sdk-browser': + specifier: workspace:* + version: link:../../packages/sdk-browser + '@turnkey/sdk-react': + specifier: workspace:* + version: link:../../packages/sdk-react + '@turnkey/sdk-server': + specifier: workspace:* + version: link:../../packages/sdk-server + '@types/node': + specifier: 20.3.1 + version: 20.3.1 + '@types/react': + specifier: 18.2.14 + version: 18.2.14 + '@types/react-dom': + specifier: 18.2.6 + version: 18.2.6 + axios: + specifier: ^1.7.4 + version: 1.7.4 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + encoding: + specifier: ^0.1.13 + version: 0.1.13 + eslint: + specifier: 8.43.0 + version: 8.43.0 + eslint-config-next: + specifier: 14.2.10 + version: 14.2.10(eslint@8.43.0)(typescript@5.1.3) + esm: + specifier: ^3.2.25 + version: 3.2.25 + ethers: + specifier: ^6.10.0 + version: 6.10.0 + install: + specifier: ^0.13.0 + version: 0.13.0 + next: + specifier: ^14.2.10 + version: 14.2.10(@babel/core@7.24.5)(react-dom@18.2.0)(react@18.2.0) + npm: + specifier: ^9.7.2 + version: 9.7.2 + react: + specifier: 18.2.0 + version: 18.2.0 + react-dom: + specifier: 18.2.0 + version: 18.2.0(react@18.2.0) + react-international-phone: + specifier: ^4.3.0 + version: 4.3.0(react@18.2.0) + sonner: + specifier: ^1.4.41 + version: 1.4.41(react-dom@18.2.0)(react@18.2.0) + tweetnacl: + specifier: ^1.0.3 + version: 1.0.3 + typescript: + specifier: 5.1.3 + version: 5.1.3 + examples/rebalancer: dependencies: '@turnkey/ethers': @@ -826,7 +931,7 @@ importers: dependencies: '@biconomy/account': specifier: ^4.5.6 - version: 4.5.6(typescript@5.1.3)(viem@2.21.29) + version: 4.5.6(typescript@5.1.3)(viem@2.21.48) '@turnkey/api-key-stamper': specifier: workspace:* version: link:../../packages/api-key-stamper @@ -901,7 +1006,7 @@ importers: version: 5.1.3 viem: specifier: ^2.21.9 - version: 2.21.29(typescript@5.1.3) + version: 2.21.48(typescript@5.1.3) examples/with-ethers: dependencies: @@ -1068,10 +1173,10 @@ importers: version: 0.26.0 '@solana/spl-token': specifier: ^0.4.8 - version: 0.4.8(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5) + version: 0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5) '@solana/web3.js': - specifier: ^1.88.1 - version: 1.95.1(encoding@0.1.13) + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) '@turnkey/api-key-stamper': specifier: workspace:* version: link:../../packages/api-key-stamper @@ -1174,8 +1279,8 @@ importers: version: 5.1.3 devDependencies: '@solana/web3.js': - specifier: ^1.95.1 - version: 1.95.1(encoding@0.1.13) + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) '@types/node': specifier: 20.3.1 version: 20.3.1 @@ -1367,22 +1472,22 @@ importers: version: 1.1.0(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@solana/wallet-adapter-base': specifier: ^0.9.23 - version: 0.9.23(@solana/web3.js@1.88.1) + version: 0.9.23(@solana/web3.js@1.95.8) '@solana/wallet-adapter-base-ui': specifier: ^0.1.2 - version: 0.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + version: 0.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) '@solana/wallet-adapter-react': specifier: ^0.15.35 - version: 0.15.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + version: 0.15.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) '@solana/wallet-adapter-react-ui': specifier: ^0.9.35 - version: 0.9.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1) + version: 0.9.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1) '@solana/wallet-adapter-wallets': specifier: ^0.19.32 - version: 0.19.32(@babel/core@7.24.5)(@babel/runtime@7.25.6)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1)(tslib@2.8.1) + version: 0.19.32(@babel/core@7.24.5)(@babel/runtime@7.26.0)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1)(tslib@2.8.1) '@solana/web3.js': - specifier: ^1.88.1 - version: 1.88.1 + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) '@t3-oss/env-nextjs': specifier: ^0.11.0 version: 0.11.0(typescript@5.1.5)(zod@3.23.8) @@ -1717,12 +1822,51 @@ importers: packages/sdk-react: dependencies: + '@emotion/react': + specifier: ^11.13.3 + version: 11.13.3(@types/react@18.2.75)(react@18.2.0) + '@emotion/styled': + specifier: ^11.13.0 + version: 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.75)(react@18.2.0) + '@icons-pack/react-simple-icons': + specifier: ^10.1.0 + version: 10.1.0(react@18.2.0) + '@mui/icons-material': + specifier: ^6.1.5 + version: 6.1.5(@mui/material@6.1.5)(@types/react@18.2.75)(react@18.2.0) + '@mui/material': + specifier: ^6.1.5 + version: 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.75)(react-dom@18.3.1)(react@18.2.0) + '@noble/hashes': + specifier: 1.4.0 + version: 1.4.0 + '@react-oauth/google': + specifier: ^0.12.1 + version: 0.12.1(react-dom@18.3.1)(react@18.2.0) + '@turnkey/crypto': + specifier: workspace:* + version: link:../crypto '@turnkey/sdk-browser': specifier: workspace:* version: link:../sdk-browser + '@turnkey/sdk-server': + specifier: workspace:* + version: link:../sdk-server '@turnkey/wallet-stamper': specifier: workspace:* version: link:../wallet-stamper + libphonenumber-js: + specifier: ^1.11.14 + version: 1.11.14 + next: + specifier: ^15.0.2 + version: 15.0.2(@babel/core@7.24.5)(react-dom@18.3.1)(react@18.2.0) + react-apple-login: + specifier: ^1.1.6 + version: 1.1.6(prop-types@15.8.1)(react-dom@18.3.1)(react@18.2.0) + react-international-phone: + specifier: ^4.3.0 + version: 4.3.0(react@18.2.0) usehooks-ts: specifier: ^3.1.0 version: 3.1.0(react@18.2.0) @@ -1765,8 +1909,8 @@ importers: packages/solana: dependencies: '@solana/web3.js': - specifier: ^1.88.1 - version: 1.88.1 + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) '@turnkey/http': specifier: workspace:* version: link:../http @@ -1842,11 +1986,11 @@ importers: optionalDependencies: viem: specifier: ^2.21.35 - version: 2.21.35(typescript@5.1.5) + version: 2.21.48(typescript@5.1.5) devDependencies: '@solana/web3.js': - specifier: ^1.88.1 - version: 1.95.1(encoding@0.1.13) + specifier: ^1.95.8 + version: 1.95.8(encoding@0.1.13) '@turnkey/api-key-stamper': specifier: workspace:* version: link:../api-key-stamper @@ -1977,7 +2121,7 @@ packages: '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) '@babel/helpers': 7.24.5 '@babel/parser': 7.24.8 - '@babel/template': 7.24.0 + '@babel/template': 7.24.7 '@babel/traverse': 7.23.2 '@babel/types': 7.24.9 convert-source-map: 2.0.0 @@ -1992,7 +2136,7 @@ packages: resolution: {integrity: sha512-AEmuXHdcD3A52HHXxaTmYlb8q/xMEhoRP67B3T4Oq7lbmSoqroMZzjnGj3+i1io3pdnF8iBYVu4Ilj+c4hBxYg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 '@jridgewell/gen-mapping': 0.3.5 jsesc: 2.5.2 dev: false @@ -2010,7 +2154,7 @@ packages: resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-annotate-as-pure@7.22.5: @@ -2032,7 +2176,7 @@ packages: engines: {node: '>=6.9.0'} dependencies: '@babel/helper-explode-assignable-expression': 7.18.6 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-compilation-targets@7.20.7(@babel/core@7.20.12): @@ -2078,13 +2222,13 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.20.12) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.7 dev: false /@babel/helper-create-class-features-plugin@7.20.12(@babel/core@7.24.5): @@ -2095,13 +2239,13 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.5) '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.7 dev: false /@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.5): @@ -2193,16 +2337,6 @@ packages: - supports-color dev: false - /@babel/helper-environment-visitor@7.18.9: - resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-environment-visitor@7.22.20: - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - dev: false - /@babel/helper-environment-visitor@7.24.7: resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} @@ -2216,22 +2350,6 @@ packages: '@babel/types': 7.24.9 dev: false - /@babel/helper-function-name@7.19.0: - resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - dev: false - - /@babel/helper-function-name@7.23.0: - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - dev: false - /@babel/helper-function-name@7.24.7: resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} @@ -2239,18 +2357,11 @@ packages: '@babel/template': 7.24.7 '@babel/types': 7.24.9 - /@babel/helper-hoist-variables@7.18.6: - resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - dev: false - /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 /@babel/helper-member-expression-to-functions@7.23.0: resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} @@ -2269,19 +2380,6 @@ packages: - supports-color dev: false - /@babel/helper-module-imports@7.18.6: - resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - dev: false - - /@babel/helper-module-imports@7.24.3: - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.9 - /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} @@ -2290,20 +2388,19 @@ packages: '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color - dev: false /@babel/helper-module-transforms@7.20.11: resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.20.2 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 - '@babel/template': 7.22.15 + '@babel/template': 7.24.7 '@babel/traverse': 7.23.2 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color dev: false @@ -2315,11 +2412,13 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-module-transforms@7.22.20(@babel/core@7.24.5): @@ -2329,11 +2428,13 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false /@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5): @@ -2344,10 +2445,12 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.5 '@babel/helper-split-export-declaration': 7.24.7 '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color /@babel/helper-module-transforms@7.24.9(@babel/core@7.24.5): resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} @@ -2369,7 +2472,7 @@ packages: resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-optimise-call-expression@7.22.5: @@ -2408,9 +2511,9 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color dev: false @@ -2423,9 +2526,9 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-wrap-function': 7.20.5 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color dev: false @@ -2434,12 +2537,12 @@ packages: resolution: {integrity: sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/template': 7.24.0 + '@babel/template': 7.24.7 '@babel/traverse': 7.23.2 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color dev: false @@ -2486,7 +2589,7 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-simple-access@7.24.5: @@ -2509,14 +2612,14 @@ packages: resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-skip-transparent-expression-wrappers@7.22.5: resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false /@babel/helper-skip-transparent-expression-wrappers@7.24.7: @@ -2529,35 +2632,12 @@ packages: - supports-color dev: false - /@babel/helper-split-export-declaration@7.18.6: - resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.5 - dev: false - - /@babel/helper-split-export-declaration@7.24.5: - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/types': 7.24.9 - dev: false - /@babel/helper-split-export-declaration@7.24.7: resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.24.9 - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} - engines: {node: '>=6.9.0'} - dev: false - - /@babel/helper-string-parser@7.24.1: - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} - engines: {node: '>=6.9.0'} - /@babel/helper-string-parser@7.24.8: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} @@ -2601,9 +2681,9 @@ packages: resolution: {integrity: sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 + '@babel/template': 7.24.7 '@babel/traverse': 7.23.2 - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color dev: false @@ -2632,16 +2712,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 dev: false - /@babel/parser@7.24.5: - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true - dependencies: - '@babel/types': 7.24.5 - /@babel/parser@7.24.8: resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} engines: {node: '>=6.0.0'} @@ -2701,7 +2774,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.20.12) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.20.12) @@ -2717,7 +2790,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.18.9 + '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.24.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) @@ -3506,7 +3579,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.20.12) transitivePeerDependencies: @@ -3520,7 +3593,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.18.9(@babel/core@7.24.5) transitivePeerDependencies: @@ -3576,12 +3649,12 @@ packages: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3596,12 +3669,12 @@ packages: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.18.6 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-environment-visitor': 7.18.9 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 '@babel/helper-optimise-call-expression': 7.18.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.20.7 - '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3615,7 +3688,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + '@babel/template': 7.24.7 dev: false /@babel/plugin-transform-computed-properties@7.20.7(@babel/core@7.24.5): @@ -3626,7 +3699,7 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.15 + '@babel/template': 7.24.7 dev: false /@babel/plugin-transform-destructuring@7.20.7(@babel/core@7.20.12): @@ -3763,7 +3836,7 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -3775,7 +3848,7 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-function-name': 7.19.0 + '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -3828,6 +3901,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.24.5): @@ -3839,6 +3914,8 @@ packages: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.20.12): @@ -3851,6 +3928,8 @@ packages: '@babel/helper-module-transforms': 7.22.20(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-commonjs@7.20.11(@babel/core@7.24.5): @@ -3863,6 +3942,8 @@ packages: '@babel/helper-module-transforms': 7.22.20(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.20.2 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.5): @@ -3886,10 +3967,12 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.20.12 - '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-systemjs@7.20.11(@babel/core@7.24.5): @@ -3899,10 +3982,12 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.24.5 - '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.20.12): @@ -3914,6 +3999,8 @@ packages: '@babel/core': 7.20.12 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.20.12) '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.24.5): @@ -3925,6 +4012,8 @@ packages: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.22.20(@babel/core@7.24.5) '@babel/helper-plugin-utils': 7.22.5 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-named-capturing-groups-regex@7.20.5(@babel/core@7.20.12): @@ -4091,6 +4180,8 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.24.5): @@ -4121,10 +4212,12 @@ packages: dependencies: '@babel/core': 7.20.12 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.20.12) - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-jsx@7.20.13(@babel/core@7.24.5): @@ -4135,10 +4228,12 @@ packages: dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.18.6 - '@babel/helper-module-imports': 7.18.6 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 + transitivePeerDependencies: + - supports-color dev: false /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.20.12): @@ -4587,7 +4682,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.20.12) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.20.12) - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 esutils: 2.0.3 dev: false @@ -4600,7 +4695,7 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.24.5) '@babel/plugin-transform-dotall-regex': 7.18.6(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 esutils: 2.0.3 dev: false @@ -4617,6 +4712,8 @@ packages: '@babel/plugin-transform-react-jsx': 7.20.13(@babel/core@7.20.12) '@babel/plugin-transform-react-jsx-development': 7.18.6(@babel/core@7.20.12) '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.20.12) + transitivePeerDependencies: + - supports-color dev: false /@babel/preset-typescript@7.18.6(@babel/core@7.20.12): @@ -4676,9 +4773,10 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 + dev: false - /@babel/runtime@7.25.6: - resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} + /@babel/runtime@7.26.0: + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 @@ -4686,28 +4784,11 @@ packages: /@babel/template@7.20.7: resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - dev: false - - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - dev: false - - /@babel/template@7.24.0: - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.8 '@babel/types': 7.24.9 + dev: false /@babel/template@7.24.7: resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} @@ -4738,7 +4819,7 @@ packages: resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.24.1 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false @@ -4747,19 +4828,11 @@ packages: resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 dev: false - /@babel/types@7.24.5: - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} - engines: {node: '>=6.9.0'} - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - /@babel/types@7.24.9: resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} @@ -4772,7 +4845,7 @@ packages: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true - /@biconomy/account@4.5.6(typescript@5.1.3)(viem@2.21.29): + /@biconomy/account@4.5.6(typescript@5.1.3)(viem@2.21.48): resolution: {integrity: sha512-Mq0X9HF4fsPTkf87eXklJJE/Hl3GQwQHN/2/D1fCA4Q4o4AM9HV7Tzpb+hBsh8cUJ+s2j0Q9wORXA1c0onAImQ==} peerDependencies: typescript: ^5 @@ -4781,7 +4854,7 @@ packages: '@silencelaboratories/walletprovider-sdk': 0.1.0(typescript@5.1.3) merkletreejs: 0.4.0 typescript: 5.1.3 - viem: 2.21.29(typescript@5.1.3) + viem: 2.21.48(typescript@5.1.3) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -4855,7 +4928,7 @@ packages: /@changesets/apply-release-plan@7.0.3: resolution: {integrity: sha512-klL6LCdmfbEe9oyfLxnidIf/stFXmrbFO/3gT5LU5pcyoZytzJe4gWpTBx3BPmyNPl16dZ1xrkcW7b98e3tYkA==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/config': 3.0.1 '@changesets/get-version-range-type': 0.4.0 '@changesets/git': 3.0.0 @@ -4874,7 +4947,7 @@ packages: /@changesets/assemble-release-plan@6.0.2: resolution: {integrity: sha512-n9/Tdq+ze+iUtjmq0mZO3pEhJTKkku9hUxtUadW30jlN7kONqJG3O6ALeXrmc6gsi/nvoCuKjqEJ68Hk8RbMTQ==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.0 '@changesets/should-skip-package': 0.1.0 @@ -4959,7 +5032,7 @@ packages: /@changesets/get-release-plan@4.0.2: resolution: {integrity: sha512-rOalz7nMuMV2vyeP7KBeAhqEB7FM2GFPO5RQSoOoUKKH9L6wW3QyPA2K+/rG9kBrWl2HckPVES73/AuwPvbH3w==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/assemble-release-plan': 6.0.2 '@changesets/config': 3.0.1 '@changesets/pre': 2.0.0 @@ -4975,7 +5048,7 @@ packages: /@changesets/git@3.0.0: resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -5000,7 +5073,7 @@ packages: /@changesets/pre@2.0.0: resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/errors': 0.2.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 @@ -5010,7 +5083,7 @@ packages: /@changesets/read@0.6.0: resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/git': 3.0.0 '@changesets/logger': 0.1.0 '@changesets/parse': 0.4.0 @@ -5023,7 +5096,7 @@ packages: /@changesets/should-skip-package@0.1.0: resolution: {integrity: sha512-FxG6Mhjw7yFStlSM7Z0Gmg3RiyQ98d/9VpQAZ3Fzr59dCOM9G6ZdYbjiSAt0XtFr9JR5U2tBaJWPjrkGGc618g==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 dev: true @@ -5039,7 +5112,7 @@ packages: /@changesets/write@0.3.1: resolution: {integrity: sha512-SyGtMXzH3qFqlHKcvFY2eX+6b0NGiFcNav8AFsYwy5l8hejOeoeTDemu5Yjmke2V5jpzY+pBvM0vCCQ3gdZpfw==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/types': 6.0.0 fs-extra: 7.0.1 human-id: 1.0.2 @@ -5053,13 +5126,13 @@ packages: protobufjs: 7.2.6 dev: false - /@coral-xyz/borsh@0.26.0(@solana/web3.js@1.95.3): + /@coral-xyz/borsh@0.26.0(@solana/web3.js@1.95.8): resolution: {integrity: sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.68.0 dependencies: - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bn.js: 5.2.1 buffer-layout: 1.2.2 dev: false @@ -5180,23 +5253,200 @@ packages: resolution: {integrity: sha512-nNcycZWUYLNJlrIXgpcgVRqdl6BXjF4YlXdxobQWpW9Tikk61bEGeAFhDYtC0PwHlokCNw0KxWiHGJL4nL7Q5A==} dev: false - /@emurgo/cardano-serialization-lib-browser@11.5.0: - resolution: {integrity: sha512-qchOJ9NYDUz10tzs5r5QhP9hK0p+ZOlRiBwPdTAxqAYLw/8emYBkQQLaS8T1DF6EkeudyrgS00ym5Trw1fo4iA==} + /@emnapi/runtime@1.3.1: + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + requiresBuild: true + dependencies: + tslib: 2.8.1 dev: false + optional: true - /@emurgo/cardano-serialization-lib-nodejs@11.5.0: - resolution: {integrity: sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ==} + /@emotion/babel-plugin@11.12.0: + resolution: {integrity: sha512-y2WQb+oP8Jqvvclh8Q55gLUyb7UFvgv7eJfsj7td5TToBrIUtPay2kMrZi4xjq9qw2vD0ZR5fSho0yqoFgX7Rw==} + dependencies: + '@babel/helper-module-imports': 7.24.7 + '@babel/runtime': 7.26.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.2 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color dev: false - /@esbuild-kit/cjs-loader@2.4.2: - resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} + /@emotion/cache@11.13.1: + resolution: {integrity: sha512-iqouYkuEblRcXmylXIwwOodiEK5Ifl7JcX7o6V4jI3iW4mLXX3dmt5xwBtIkJiQEXFAI+pC8X0i67yiPkH9Ucw==} dependencies: - '@esbuild-kit/core-utils': 3.1.0 - get-tsconfig: 4.8.1 - dev: true + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + dev: false - /@esbuild-kit/core-utils@3.1.0: - resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} + /@emotion/hash@0.9.2: + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + dev: false + + /@emotion/is-prop-valid@1.3.1: + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + dependencies: + '@emotion/memoize': 0.9.0 + dev: false + + /@emotion/memoize@0.9.0: + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + dev: false + + /@emotion/react@11.13.3(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.4.0 + '@types/react': 18.2.14 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/react@11.13.3(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-lIsdU6JNrmYfJ5EbUCf4xW1ovy5wKQ2CkPRM4xogziOxH1nXxBSjpC9YqbFAP7circxMfYp+6x676BqWcEiixg==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/cache': 11.13.1 + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) + '@emotion/utils': 1.4.1 + '@emotion/weak-memoize': 0.4.0 + '@types/react': 18.2.75 + hoist-non-react-statics: 3.3.2 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/serialize@1.3.2: + resolution: {integrity: sha512-grVnMvVPK9yUVE6rkKfAJlYZgo0cu3l9iMC77V7DW6E1DUIrU68pSEXRmFZFOFB1QFo57TncmOcvcbMDWsL4yA==} + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.1 + csstype: 3.1.3 + dev: false + + /@emotion/sheet@1.4.0: + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + dev: false + + /@emotion/styled@11.13.0(@emotion/react@11.13.3)(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.13.3(@types/react@18.2.14)(react@18.2.0) + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) + '@emotion/utils': 1.4.1 + '@types/react': 18.2.14 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/styled@11.13.0(@emotion/react@11.13.3)(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-tkzkY7nQhW/zC4hztlwucpT8QEZ6eUzpXDRhww/Eej4tFfO0FxQYWRyg/c5CCXa4d/f174kqeXYjuQRnhzf6dA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/babel-plugin': 11.12.0 + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.13.3(@types/react@18.2.75)(react@18.2.0) + '@emotion/serialize': 1.3.2 + '@emotion/use-insertion-effect-with-fallbacks': 1.1.0(react@18.2.0) + '@emotion/utils': 1.4.1 + '@types/react': 18.2.75 + react: 18.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@emotion/unitless@0.10.0: + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + dev: false + + /@emotion/use-insertion-effect-with-fallbacks@1.1.0(react@18.2.0): + resolution: {integrity: sha512-+wBOcIV5snwGgI2ya3u99D7/FJquOIniQT1IKyDsBmEgwvpxMNeS65Oib7OnE2d2aY+3BU4OiH+0Wchf8yk3Hw==} + peerDependencies: + react: '>=16.8.0' + dependencies: + react: 18.2.0 + dev: false + + /@emotion/utils@1.4.1: + resolution: {integrity: sha512-BymCXzCG3r72VKJxaYVwOXATqXIZ85cuvg0YOUDxMGNrKc1DJRZk8MgV5wyXRyEayIMd4FuXJIUgTBXvDNW5cA==} + dev: false + + /@emotion/weak-memoize@0.4.0: + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + dev: false + + /@emurgo/cardano-serialization-lib-browser@11.5.0: + resolution: {integrity: sha512-qchOJ9NYDUz10tzs5r5QhP9hK0p+ZOlRiBwPdTAxqAYLw/8emYBkQQLaS8T1DF6EkeudyrgS00ym5Trw1fo4iA==} + dev: false + + /@emurgo/cardano-serialization-lib-nodejs@11.5.0: + resolution: {integrity: sha512-IlVABlRgo9XaTR1NunwZpWcxnfEv04ba2l1vkUz4S1W7Jt36F4CtffP+jPeqBZGnAe+fnUwo0XjIJC3ZTNToNQ==} + dev: false + + /@esbuild-kit/cjs-loader@2.4.2: + resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==} + deprecated: 'Merged into tsx: https://tsx.is' + dependencies: + '@esbuild-kit/core-utils': 3.1.0 + get-tsconfig: 4.8.1 + dev: true + + /@esbuild-kit/core-utils@3.1.0: + resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==} deprecated: 'Merged into tsx: https://tsx.is' dependencies: esbuild: 0.17.18 @@ -5845,11 +6095,11 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: false - /@fractalwagmi/solana-wallet-adapter@0.1.1(@solana/web3.js@1.88.1)(react-dom@18.3.1)(react@18.3.1): + /@fractalwagmi/solana-wallet-adapter@0.1.1(@solana/web3.js@1.95.8)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-oTZLEuD+zLKXyhZC5tDRMPKPj8iaxKLxXiCjqRfOo4xmSbS2izGRWLJbKMYYsJysn/OI3UJ3P6CWP8WUWi0dZg==} dependencies: '@fractalwagmi/popup-connection': 1.1.1(react-dom@18.3.1)(react@18.3.1) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) bs58: 5.0.0 transitivePeerDependencies: - '@solana/web3.js' @@ -5874,6 +6124,25 @@ packages: '@hapi/hoek': 9.3.0 dev: false + /@hello-pangea/dnd@17.0.0(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-LDDPOix/5N0j5QZxubiW9T0M0+1PR0rTDWeZF5pu1Tz91UQnuVK4qQ/EjY83Qm2QeX0eM8qDXANfDh3VVqtR4Q==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@babel/runtime': 7.26.0 + css-box-model: 1.2.1 + memoize-one: 6.0.0 + raf-schd: 4.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-redux: 9.1.2(@types/react@18.2.14)(react@18.2.0)(redux@5.0.1) + redux: 5.0.1 + use-memo-one: 1.1.3(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@humanwhocodes/config-array@0.11.10: resolution: {integrity: sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==} engines: {node: '>=10.10.0'} @@ -5892,6 +6161,194 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} deprecated: Use @eslint/object-schema instead + /@icons-pack/react-simple-icons@10.1.0(react@18.2.0): + resolution: {integrity: sha512-sZ2oDkYaVAci7GuNL8okERJn4Ej0INbeCwtIDVuwWfO5zILW7j5frvKQbozTB+fLtZqEwAP9KkNp7oR8WeHaIg==} + peerDependencies: + react: ^16.13 || ^17 || ^18 + dependencies: + react: 18.2.0 + dev: false + + /@img/sharp-darwin-arm64@0.33.5: + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + dev: false + optional: true + + /@img/sharp-darwin-x64@0.33.5: + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + dev: false + optional: true + + /@img/sharp-libvips-darwin-arm64@1.0.4: + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-darwin-x64@1.0.4: + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm64@1.0.4: + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-arm@1.0.5: + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-s390x@1.0.4: + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linux-x64@1.0.4: + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-arm64@1.0.4: + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-libvips-linuxmusl-x64@1.0.4: + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-linux-arm64@0.33.5: + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + dev: false + optional: true + + /@img/sharp-linux-arm@0.33.5: + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + dev: false + optional: true + + /@img/sharp-linux-s390x@0.33.5: + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + dev: false + optional: true + + /@img/sharp-linux-x64@0.33.5: + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + dev: false + optional: true + + /@img/sharp-linuxmusl-arm64@0.33.5: + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + dev: false + optional: true + + /@img/sharp-linuxmusl-x64@0.33.5: + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + requiresBuild: true + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + dev: false + optional: true + + /@img/sharp-wasm32@0.33.5: + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + requiresBuild: true + dependencies: + '@emnapi/runtime': 1.3.1 + dev: false + optional: true + + /@img/sharp-win32-ia32@0.33.5: + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + /@img/sharp-win32-x64@0.33.5: + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@inquirer/checkbox@1.5.2: resolution: {integrity: sha512-CifrkgQjDkUkWexmgYYNyB5603HhTHI91vLFeQXh6qrTKiCMVASol01Rs1cv6LP/A2WccZSRlJKZhbaBIs/9ZA==} engines: {node: '>=14.18.0'} @@ -5918,7 +6375,7 @@ packages: dependencies: '@inquirer/type': 1.5.5 '@types/mute-stream': 0.0.1 - '@types/node': 20.17.6 + '@types/node': 20.17.9 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -5938,7 +6395,7 @@ packages: dependencies: '@inquirer/type': 1.5.5 '@types/mute-stream': 0.0.4 - '@types/node': 20.17.6 + '@types/node': 20.17.9 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -6408,12 +6865,12 @@ packages: '@types/yargs': 17.0.22 chalk: 4.1.2 - /@jnwng/walletconnect-solana@0.2.0(@solana/web3.js@1.88.1): + /@jnwng/walletconnect-solana@0.2.0(@solana/web3.js@1.95.8): resolution: {integrity: sha512-nyRq0xLEj9i2J4UXQ0Mr4KzsooTMbLu0ewHOqdQV7iZE0PfbtKa8poTSF4ZBAQD8hoMHEx+I7zGFCNMI9BTrTA==} peerDependencies: '@solana/web3.js': ^1.63.0 dependencies: - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@walletconnect/qrcode-modal': 1.8.0 '@walletconnect/sign-client': 2.14.0 '@walletconnect/utils': 2.14.0 @@ -6443,7 +6900,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 dev: false /@jridgewell/gen-mapping@0.3.5: @@ -6451,7 +6908,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 /@jridgewell/resolve-uri@3.1.1: @@ -6469,14 +6926,14 @@ packages: '@jridgewell/trace-mapping': 0.3.25 dev: false - /@jridgewell/sourcemap-codec@1.4.15: - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 /@keystonehq/alias-sampling@0.1.2: resolution: {integrity: sha512-5ukLB3bcgltgaFfQfYKYwHDUbwHicekYo53fSEa7xhVkAEqsA74kxdIwoBIURmGUtXe3EVIRm4SYlgcrt2Ri0w==} @@ -6517,7 +6974,7 @@ packages: '@keystonehq/bc-ur-registry': 0.5.5 '@keystonehq/bc-ur-registry-sol': 0.3.1 '@keystonehq/sdk': 0.13.1 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 5.0.0 uuid: 8.3.2 transitivePeerDependencies: @@ -6563,7 +7020,7 @@ packages: /@manypkg/find-root@1.1.0: resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 @@ -6572,7 +7029,7 @@ packages: /@manypkg/get-packages@1.1.3: resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 @@ -6618,36 +7075,336 @@ packages: engines: {node: '>= 10.*'} dev: false - /@mysten/bcs@0.7.3: - resolution: {integrity: sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==} - dependencies: - bs58: 5.0.0 + /@mui/core-downloads-tracker@6.1.5: + resolution: {integrity: sha512-3J96098GrC95XsLw/TpGNMxhUOnoG9NZ/17Pfk1CrJj+4rcuolsF2RdF3XAFTu/3a/A+5ouxlSIykzYz6Ee87g==} dev: false - /@mysten/sui.js@0.37.1: - resolution: {integrity: sha512-nEOqnjUqb/VJcVk23LgZOX1FmBib/mBCwAWaJhtsCHLwv2jIAfCPY/fpB9lJ62QHrM8UFclpWxsLkqcUkKyPgA==} - engines: {node: '>=16'} + /@mui/icons-material@6.1.5(@mui/material@6.1.5)(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-SbxFtO5I4cXfvhjAMgGib/t2lQUzcEzcDFYiRHRufZUeMMeXuoKaGsptfwAHTepYkv0VqcCwvxtvtWbpZLAbjQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^6.1.5 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true dependencies: - '@mysten/bcs': 0.7.3 - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - '@open-rpc/client-js': 1.8.1 - '@scure/bip32': 1.4.0 - '@scure/bip39': 1.3.0 - '@suchipi/femver': 1.0.0 - events: 3.3.0 - superstruct: 1.0.4 - tweetnacl: 1.0.3 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate + '@babel/runtime': 7.26.0 + '@mui/material': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) + '@types/react': 18.2.14 + react: 18.2.0 dev: false - /@next/env@14.2.10: + /@mui/icons-material@6.1.5(@mui/material@6.1.5)(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-SbxFtO5I4cXfvhjAMgGib/t2lQUzcEzcDFYiRHRufZUeMMeXuoKaGsptfwAHTepYkv0VqcCwvxtvtWbpZLAbjQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@mui/material': ^6.1.5 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@mui/material': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.75)(react-dom@18.3.1)(react@18.2.0) + '@types/react': 18.2.75 + react: 18.2.0 + dev: false + + /@mui/material@6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rhaxC7LnlOG8zIVYv7BycNbWkC5dlm9A/tcDUp0CuwA7Zf9B9JP6M3rr50cNKxI7Z0GIUesAT86ceVm44quwnQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^6.1.5 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/react': 11.13.3(@types/react@18.2.14)(react@18.2.0) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.14)(react@18.2.0) + '@mui/core-downloads-tracker': 6.1.5 + '@mui/system': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.14)(react@18.2.0) + '@mui/types': 7.2.18(@types/react@18.2.14) + '@mui/utils': 6.1.5(@types/react@18.2.14)(react@18.2.0) + '@popperjs/core': 2.11.8 + '@types/react': 18.2.14 + '@types/react-transition-group': 4.4.11 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-is: 18.3.1 + react-transition-group: 4.4.5(react-dom@18.2.0)(react@18.2.0) + dev: false + + /@mui/material@6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.75)(react-dom@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-rhaxC7LnlOG8zIVYv7BycNbWkC5dlm9A/tcDUp0CuwA7Zf9B9JP6M3rr50cNKxI7Z0GIUesAT86ceVm44quwnQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^6.1.5 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/react': 11.13.3(@types/react@18.2.75)(react@18.2.0) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.75)(react@18.2.0) + '@mui/core-downloads-tracker': 6.1.5 + '@mui/system': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.75)(react@18.2.0) + '@mui/types': 7.2.18(@types/react@18.2.75) + '@mui/utils': 6.1.5(@types/react@18.2.75)(react@18.2.0) + '@popperjs/core': 2.11.8 + '@types/react': 18.2.75 + '@types/react-transition-group': 4.4.11 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + react-is: 18.3.1 + react-transition-group: 4.4.5(react-dom@18.3.1)(react@18.2.0) + dev: false + + /@mui/private-theming@6.1.5(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-FJqweqEXk0KdtTho9C2h6JEKXsOT7MAVH2Uj3N5oIqs6YKxnwBn2/zL2QuYYEtj5OJ87rEUnCfFic6ldClvzJw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.1.5(@types/react@18.2.14)(react@18.2.0) + '@types/react': 18.2.14 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/private-theming@6.1.5(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-FJqweqEXk0KdtTho9C2h6JEKXsOT7MAVH2Uj3N5oIqs6YKxnwBn2/zL2QuYYEtj5OJ87rEUnCfFic6ldClvzJw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@mui/utils': 6.1.5(@types/react@18.2.75)(react@18.2.0) + '@types/react': 18.2.75 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/styled-engine@6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(react@18.2.0): + resolution: {integrity: sha512-tiyWzMkHeWlOoE6AqomWvYvdml8Nv5k5T+LDwOiwHEawx8P9Lyja6ZwWPU6xljwPXYYPT2KBp1XvMly7dsK46A==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/cache': 11.13.1 + '@emotion/react': 11.13.3(@types/react@18.2.14)(react@18.2.0) + '@emotion/serialize': 1.3.2 + '@emotion/sheet': 1.4.0 + '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.14)(react@18.2.0) + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/system@6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-vPM9ocQ8qquRDByTG3XF/wfYTL7IWL/20EiiKqByLDps8wOmbrDG9rVznSE3ZbcjFCFfMRMhtxvN92bwe/63SA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/react': 11.13.3(@types/react@18.2.14)(react@18.2.0) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.14)(react@18.2.0) + '@mui/private-theming': 6.1.5(@types/react@18.2.14)(react@18.2.0) + '@mui/styled-engine': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(react@18.2.0) + '@mui/types': 7.2.18(@types/react@18.2.14) + '@mui/utils': 6.1.5(@types/react@18.2.14)(react@18.2.0) + '@types/react': 18.2.14 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/system@6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-vPM9ocQ8qquRDByTG3XF/wfYTL7IWL/20EiiKqByLDps8wOmbrDG9rVznSE3ZbcjFCFfMRMhtxvN92bwe/63SA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@emotion/react': 11.13.3(@types/react@18.2.75)(react@18.2.0) + '@emotion/styled': 11.13.0(@emotion/react@11.13.3)(@types/react@18.2.75)(react@18.2.0) + '@mui/private-theming': 6.1.5(@types/react@18.2.75)(react@18.2.0) + '@mui/styled-engine': 6.1.5(@emotion/react@11.13.3)(@emotion/styled@11.13.0)(react@18.2.0) + '@mui/types': 7.2.18(@types/react@18.2.75) + '@mui/utils': 6.1.5(@types/react@18.2.75)(react@18.2.0) + '@types/react': 18.2.75 + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.2.0 + dev: false + + /@mui/types@7.2.18(@types/react@18.2.14): + resolution: {integrity: sha512-uvK9dWeyCJl/3ocVnTOS6nlji/Knj8/tVqVX03UVTpdmTJYu/s4jtDd9Kvv0nRGE0CUSNW1UYAci7PYypjealg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.14 + dev: false + + /@mui/types@7.2.18(@types/react@18.2.75): + resolution: {integrity: sha512-uvK9dWeyCJl/3ocVnTOS6nlji/Knj8/tVqVX03UVTpdmTJYu/s4jtDd9Kvv0nRGE0CUSNW1UYAci7PYypjealg==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@types/react': 18.2.75 + dev: false + + /@mui/utils@6.1.5(@types/react@18.2.14)(react@18.2.0): + resolution: {integrity: sha512-vp2WfNDY+IbKUIGg+eqX1Ry4t/BilMjzp6p9xO1rfqpYjH1mj8coQxxDfKxcQLzBQkmBJjymjoGOak5VUYwXug==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.18(@types/react@18.2.14) + '@types/prop-types': 15.7.13 + '@types/react': 18.2.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.3.1 + dev: false + + /@mui/utils@6.1.5(@types/react@18.2.75)(react@18.2.0): + resolution: {integrity: sha512-vp2WfNDY+IbKUIGg+eqX1Ry4t/BilMjzp6p9xO1rfqpYjH1mj8coQxxDfKxcQLzBQkmBJjymjoGOak5VUYwXug==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + dependencies: + '@babel/runtime': 7.26.0 + '@mui/types': 7.2.18(@types/react@18.2.75) + '@types/prop-types': 15.7.13 + '@types/react': 18.2.75 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + react-is: 18.3.1 + dev: false + + /@mysten/bcs@0.7.3: + resolution: {integrity: sha512-fbusBfsyc2MpTACi72H5edWJ670T84va+qn9jSPpb5BzZ+pzUM1Q0ApPrF5OT+mB1o5Ng+mxPQpBCZQkfiV2TA==} + dependencies: + bs58: 5.0.0 + dev: false + + /@mysten/sui.js@0.37.1: + resolution: {integrity: sha512-nEOqnjUqb/VJcVk23LgZOX1FmBib/mBCwAWaJhtsCHLwv2jIAfCPY/fpB9lJ62QHrM8UFclpWxsLkqcUkKyPgA==} + engines: {node: '>=16'} + dependencies: + '@mysten/bcs': 0.7.3 + '@noble/curves': 1.4.0 + '@noble/hashes': 1.4.0 + '@open-rpc/client-js': 1.8.1 + '@scure/bip32': 1.4.0 + '@scure/bip39': 1.3.0 + '@suchipi/femver': 1.0.0 + events: 3.3.0 + superstruct: 1.0.4 + tweetnacl: 1.0.3 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: false + + /@next/env@14.2.10: resolution: {integrity: sha512-dZIu93Bf5LUtluBXIv4woQw2cZVZ2DJTjax5/5DOs3lzEOeKLy7GxRSr4caK9/SCPdaW6bCgpye6+n4Dh9oJPw==} dev: false + /@next/env@15.0.2: + resolution: {integrity: sha512-c0Zr0ModK5OX7D4ZV8Jt/wqoXtitLNPwUfG9zElCZztdaZyNVnN40rDXVZ/+FGuR4CcNV5AEfM6N8f+Ener7Dg==} + dev: false + /@next/eslint-plugin-next@13.4.7: resolution: {integrity: sha512-ANEPltxzXbyyG7CvqxdY4PmeM5+RyWdAJGufTHnU+LA/i3J6IDV2r8Z4onKwskwKEhwqzz5lMaSYGGXLyHX+mg==} dependencies: @@ -6674,6 +7431,15 @@ packages: dev: false optional: true + /@next/swc-darwin-arm64@15.0.2: + resolution: {integrity: sha512-GK+8w88z+AFlmt+ondytZo2xpwlfAR8U6CRwXancHImh6EdGfHMIrTSCcx5sOSBei00GyLVL0ioo1JLKTfprgg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-darwin-x64@14.2.10: resolution: {integrity: sha512-Y0TC+FXbFUQ2MQgimJ/7Ina2mXIKhE7F+GUe1SgnzRmwFY3hX2z8nyVCxE82I2RicspdkZnSWMn4oTjIKz4uzA==} engines: {node: '>= 10'} @@ -6683,6 +7449,15 @@ packages: dev: false optional: true + /@next/swc-darwin-x64@15.0.2: + resolution: {integrity: sha512-KUpBVxIbjzFiUZhiLIpJiBoelqzQtVZbdNNsehhUn36e2YzKHphnK8eTUW1s/4aPy5kH/UTid8IuVbaOpedhpw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-gnu@14.2.10: resolution: {integrity: sha512-ZfQ7yOy5zyskSj9rFpa0Yd7gkrBnJTkYVSya95hX3zeBG9E55Z6OTNPn1j2BTFWvOVVj65C3T+qsjOyVI9DQpA==} engines: {node: '>= 10'} @@ -6692,6 +7467,15 @@ packages: dev: false optional: true + /@next/swc-linux-arm64-gnu@15.0.2: + resolution: {integrity: sha512-9J7TPEcHNAZvwxXRzOtiUvwtTD+fmuY0l7RErf8Yyc7kMpE47MIQakl+3jecmkhOoIyi/Rp+ddq7j4wG6JDskQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-arm64-musl@14.2.10: resolution: {integrity: sha512-n2i5o3y2jpBfXFRxDREr342BGIQCJbdAUi/K4q6Env3aSx8erM9VuKXHw5KNROK9ejFSPf0LhoSkU/ZiNdacpQ==} engines: {node: '>= 10'} @@ -6701,6 +7485,15 @@ packages: dev: false optional: true + /@next/swc-linux-arm64-musl@15.0.2: + resolution: {integrity: sha512-BjH4ZSzJIoTTZRh6rG+a/Ry4SW0HlizcPorqNBixBWc3wtQtj4Sn9FnRZe22QqrPnzoaW0ctvSz4FaH4eGKMww==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-gnu@14.2.10: resolution: {integrity: sha512-GXvajAWh2woTT0GKEDlkVhFNxhJS/XdDmrVHrPOA83pLzlGPQnixqxD8u3bBB9oATBKB//5e4vpACnx5Vaxdqg==} engines: {node: '>= 10'} @@ -6710,6 +7503,15 @@ packages: dev: false optional: true + /@next/swc-linux-x64-gnu@15.0.2: + resolution: {integrity: sha512-i3U2TcHgo26sIhcwX/Rshz6avM6nizrZPvrDVDY1bXcLH1ndjbO8zuC7RoHp0NSK7wjJMPYzm7NYL1ksSKFreA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-linux-x64-musl@14.2.10: resolution: {integrity: sha512-opFFN5B0SnO+HTz4Wq4HaylXGFV+iHrVxd3YvREUX9K+xfc4ePbRrxqOuPOFjtSuiVouwe6uLeDtabjEIbkmDA==} engines: {node: '>= 10'} @@ -6719,6 +7521,15 @@ packages: dev: false optional: true + /@next/swc-linux-x64-musl@15.0.2: + resolution: {integrity: sha512-AMfZfSVOIR8fa+TXlAooByEF4OB00wqnms1sJ1v+iu8ivwvtPvnkwdzzFMpsK5jA2S9oNeeQ04egIWVb4QWmtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-arm64-msvc@14.2.10: resolution: {integrity: sha512-9NUzZuR8WiXTvv+EiU/MXdcQ1XUvFixbLIMNQiVHuzs7ZIFrJDLJDaOF1KaqttoTujpcxljM/RNAOmw1GhPPQQ==} engines: {node: '>= 10'} @@ -6728,6 +7539,15 @@ packages: dev: false optional: true + /@next/swc-win32-arm64-msvc@15.0.2: + resolution: {integrity: sha512-JkXysDT0/hEY47O+Hvs8PbZAeiCQVxKfGtr4GUpNAhlG2E0Mkjibuo8ryGD29Qb5a3IOnKYNoZlh/MyKd2Nbww==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@next/swc-win32-ia32-msvc@14.2.10: resolution: {integrity: sha512-fr3aEbSd1GeW3YUMBkWAu4hcdjZ6g4NBl1uku4gAn661tcxd1bHs1THWYzdsbTRLcCKLjrDZlNp6j2HTfrw+Bg==} engines: {node: '>= 10'} @@ -6746,6 +7566,15 @@ packages: dev: false optional: true + /@next/swc-win32-x64-msvc@15.0.2: + resolution: {integrity: sha512-foaUL0NqJY/dX0Pi/UcZm5zsmSk5MtP/gxx3xOPyREkMFN+CTjctPfu3QaqrQHinaKdPnMWPJDKt4VjDfTBe/Q==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + /@ngraveio/bc-ur@1.1.13: resolution: {integrity: sha512-j73akJMV4+vLR2yQ4AphPIT5HZmxVjn/LxpL7YHoINnXoH6ccc90Zzck6/n6a3bCXOVZwBxq+YHwbAKRV+P8Zg==} dependencies: @@ -6783,17 +7612,11 @@ packages: '@noble/hashes': 1.4.0 dev: false - /@noble/curves@1.4.2: - resolution: {integrity: sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==} - dependencies: - '@noble/hashes': 1.4.0 - /@noble/curves@1.6.0: resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} engines: {node: ^14.21.3 || >=16} dependencies: '@noble/hashes': 1.5.0 - dev: false /@noble/ed25519@2.1.0: resolution: {integrity: sha512-KM4qTyXPinyCgMzeYJH/UudpdL+paJXtY3CHtHYZQtBkS8MZoPr4rOikZllIutJe0d06QDQKisyn02gxZ8TcQA==} @@ -6817,7 +7640,6 @@ packages: /@noble/hashes@1.5.0: resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} engines: {node: ^14.21.3 || >=16} - dev: false /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} @@ -7680,14 +8502,14 @@ packages: uuidv4: 6.2.13 dev: false - /@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.88.1)(bs58@5.0.0): + /@particle-network/solana-wallet@1.3.2(@solana/web3.js@1.95.8)(bs58@5.0.0): resolution: {integrity: sha512-KviKVP87OtWq813y8IumM3rIQMNkTjHBaQmCUbTWGebz3csFOv54JIoy1r+3J3NnA+mBxBdZeRedZ5g+07v75w==} peerDependencies: '@solana/web3.js': ^1.50.1 bs58: ^4.0.1 dependencies: '@particle-network/auth': 1.3.1 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 5.0.0 dev: false @@ -7734,12 +8556,16 @@ packages: picocolors: 1.0.0 tslib: 2.8.1 + /@popperjs/core@2.11.8: + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + dev: false + /@project-serum/anchor@0.26.0: resolution: {integrity: sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==} engines: {node: '>=11'} dependencies: - '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.95.3) - '@solana/web3.js': 1.95.3 + '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) base64-js: 1.5.1 bn.js: 5.2.1 bs58: 4.0.1 @@ -7759,13 +8585,13 @@ packages: - utf-8-validate dev: false - /@project-serum/sol-wallet-adapter@0.2.6(@solana/web3.js@1.88.1): + /@project-serum/sol-wallet-adapter@0.2.6(@solana/web3.js@1.95.8): resolution: {integrity: sha512-cpIb13aWPW8y4KzkZAPDgw+Kb+DXjCC6rZoH74MGm3I/6e/zKyGnfAuW5olb2zxonFqsYgnv7ev8MQnvSgJ3/g==} engines: {node: '>=10'} peerDependencies: '@solana/web3.js': ^1.5.0 dependencies: - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 4.0.1 eventemitter3: 4.0.7 dev: false @@ -7806,13 +8632,13 @@ packages: /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dev: false /@radix-ui/primitive@1.0.1: resolution: {integrity: sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dev: false /@radix-ui/primitive@1.1.0: @@ -7832,7 +8658,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.14 '@types/react-dom': 18.2.6 @@ -7853,7 +8679,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -7874,7 +8700,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@radix-ui/react-context': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) @@ -7898,7 +8724,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) @@ -7941,7 +8767,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -7955,7 +8781,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -7982,7 +8808,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -7996,7 +8822,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -8061,7 +8887,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.24.1 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-context': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -8091,7 +8917,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -8105,7 +8931,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -8136,7 +8962,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) @@ -8161,7 +8987,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) @@ -8209,7 +9035,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -8223,7 +9049,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -8241,7 +9067,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) @@ -8264,7 +9090,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -8291,7 +9117,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 react: 18.2.0 @@ -8306,7 +9132,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 @@ -8381,7 +9207,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) @@ -8419,7 +9245,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@floating-ui/react-dom': 2.0.8(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) @@ -8449,7 +9275,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@floating-ui/react-dom': 2.0.8(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-arrow': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) @@ -8479,7 +9305,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.14 '@types/react-dom': 18.2.6 @@ -8500,7 +9326,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -8521,7 +9347,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 @@ -8543,7 +9369,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 @@ -8586,7 +9412,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 '@types/react-dom': 18.2.6 @@ -8607,7 +9433,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -8677,7 +9503,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.14)(react@18.2.0) @@ -8983,7 +9809,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -8997,7 +9823,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -9024,7 +9850,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 react: 18.2.0 @@ -9039,7 +9865,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 @@ -9068,7 +9894,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 react: 18.2.0 @@ -9083,7 +9909,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 @@ -9098,7 +9924,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -9112,7 +9938,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -9139,7 +9965,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.2.14 react: 18.2.0 dev: false @@ -9153,7 +9979,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@types/react': 18.3.3 react: 18.3.1 dev: false @@ -9180,7 +10006,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/rect': 1.0.1 '@types/react': 18.2.14 react: 18.2.0 @@ -9195,7 +10021,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/rect': 1.0.1 '@types/react': 18.3.3 react: 18.3.1 @@ -9210,7 +10036,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.14)(react@18.2.0) '@types/react': 18.2.14 react: 18.2.0 @@ -9225,7 +10051,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.3.3)(react@18.3.1) '@types/react': 18.3.3 react: 18.3.1 @@ -9258,7 +10084,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.6)(@types/react@18.2.14)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.14 '@types/react-dom': 18.2.6 @@ -9279,7 +10105,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1)(react@18.3.1) '@types/react': 18.3.3 '@types/react-dom': 18.3.0 @@ -9290,7 +10116,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dev: false /@react-native-async-storage/async-storage@1.24.0(react-native@0.74.0): @@ -9675,6 +10501,16 @@ packages: react-dom: 18.2.0(react@18.2.0) dev: false + /@react-oauth/google@0.12.1(react-dom@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-qagsy22t+7UdkYAiT5ZhfM4StXi9PPNvw0zuwNmabrWyMKddczMtBIOARflbaIj+wHiQjnMAsZmzsUYuXeyoSg==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + dependencies: + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + dev: false + /@rhinestone/module-sdk@0.1.28(viem@2.21.29): resolution: {integrity: sha512-Ob9qMs/scBrk6/X0dvb02kWqiCdP3Vau6PRNr3PP7PGxIIBFunJoVHuLWg4Tb/DHS3dCUXhuTk+XhObH1HjH+w==} peerDependencies: @@ -9699,6 +10535,18 @@ packages: - supports-color dev: false + /@rollup/plugin-alias@5.1.1(rollup@4.22.4): + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + rollup: 4.22.4 + dev: true + /@rollup/plugin-typescript@11.1.5(rollup@4.22.4)(typescript@5.1.5): resolution: {integrity: sha512-rnMHrGBB0IUEv69Q8/JGRD/n4/n6b3nfpufUu26axhUcboUzv/twfZU8fIBbTOphRAe0v8EyxzeDpKXqGHfyDA==} engines: {node: '>=14.0.0'} @@ -9718,6 +10566,21 @@ packages: typescript: 5.1.5 dev: true + /@rollup/plugin-url@8.0.2(rollup@4.22.4): + resolution: {integrity: sha512-5yW2LP5NBEgkvIRSSEdJkmxe5cUNZKG3eenKtfJvSkxVm/xTTu7w+ayBtNwhozl1ZnTUCU0xFaRQR+cBl2H7TQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.0.5(rollup@4.22.4) + make-dir: 3.1.0 + mime: 3.0.0 + rollup: 4.22.4 + dev: true + /@rollup/pluginutils@5.0.5(rollup@4.22.4): resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==} engines: {node: '>=14.0.0'} @@ -10099,7 +10962,7 @@ packages: resolution: {integrity: sha512-53fV1noQJDUN9JNydDohyzsFl4+QYoWNkkkAfRzmIgtv+6DR+Dksb0fKmme2WdtA8MPEw/HsRwN3Lr6YC3iF7A==} dependencies: '@noble/curves': 1.6.0 - viem: 2.21.35(typescript@5.1.3) + viem: 2.21.48(typescript@5.1.3) transitivePeerDependencies: - bufferutil - typescript @@ -10111,7 +10974,7 @@ packages: resolution: {integrity: sha512-53fV1noQJDUN9JNydDohyzsFl4+QYoWNkkkAfRzmIgtv+6DR+Dksb0fKmme2WdtA8MPEw/HsRwN3Lr6YC3iF7A==} dependencies: '@noble/curves': 1.6.0 - viem: 2.21.35(typescript@5.1.5) + viem: 2.21.48(typescript@5.1.5) transitivePeerDependencies: - bufferutil - typescript @@ -10162,13 +11025,13 @@ packages: resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} dev: false - /@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(react-native@0.74.0)(react@18.3.1): + /@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-IEvPzp4m39sWTS3gybbVfk1WQ5Bx9TrGlthtRlVw1BJPvjbmT6lTcnndgXp7HmMkz5e6cc8fwJWp3EKx5upAug==} peerDependencies: '@solana/web3.js': ^1.58.0 dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol': 2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) - '@solana/web3.js': 1.88.1 + '@solana-mobile/mobile-wallet-adapter-protocol': 2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 5.0.0 js-base64: 3.7.7 transitivePeerDependencies: @@ -10177,15 +11040,15 @@ packages: - react-native dev: false - /@solana-mobile/mobile-wallet-adapter-protocol@2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): + /@solana-mobile/mobile-wallet-adapter-protocol@2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-rj1/cSQVjPYdQjHsJDxmlpgRjI9jly/0Md3bEeqCan2sLXPf5F6+TiVlAg9+Hxg+uVWd1peUrepFUdOykbklSw==} peerDependencies: '@solana/web3.js': ^1.58.0 react-native: '>0.69' dependencies: - '@solana/wallet-standard': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1) + '@solana/wallet-standard': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1) '@solana/wallet-standard-util': 1.1.1 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@wallet-standard/core': 1.0.3 js-base64: 3.7.7 react-native: 0.74.0(@babel/core@7.24.5)(@babel/preset-env@7.20.2)(@types/react@18.3.3)(react@18.3.1) @@ -10195,15 +11058,15 @@ packages: - react dev: false - /@solana-mobile/wallet-adapter-mobile@2.1.3(@solana/web3.js@1.88.1)(react-native@0.74.0)(react@18.3.1): + /@solana-mobile/wallet-adapter-mobile@2.1.3(@solana/web3.js@1.95.8)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-V9gxV7/F1BLode6I+j134kFvQv1mnF0OlN+tYPHEmJOcH4caDfH6rlJy7t9Pktkl9ZEVTO9kT8K19Y4MRl6nxg==} peerDependencies: '@solana/web3.js': ^1.58.0 dependencies: - '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(react-native@0.74.0)(react@18.3.1) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) + '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.1.3(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(react-native@0.74.0)(react@18.3.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) '@solana/wallet-standard-features': 1.2.0 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) js-base64: 3.7.7 optionalDependencies: '@react-native-async-storage/async-storage': 1.24.0(react-native@0.74.0) @@ -10217,7 +11080,7 @@ packages: engines: {node: '>= 10'} dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bigint-buffer: 1.1.5 bignumber.js: 9.1.2 transitivePeerDependencies: @@ -10375,7 +11238,7 @@ packages: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5): + /@solana/spl-token-group@0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5): resolution: {integrity: sha512-CLJnWEcdoUBpQJfx9WEbX3h6nTdNiUzswfFdkABUik7HVwSNA98u5AYvBVK2H93d9PGMOHAak2lHW9xr+zAJGQ==} engines: {node: '>=16'} peerDependencies: @@ -10383,13 +11246,13 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.4(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.1(encoding@0.1.13) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - fastestsmallesttextencoderdecoder - typescript dev: false - /@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22): + /@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22): resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==} engines: {node: '>=16'} peerDependencies: @@ -10397,12 +11260,12 @@ packages: dependencies: '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22) '@solana/spl-type-length-value': 0.1.0 - '@solana/web3.js': 1.95.1(encoding@0.1.13) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - fastestsmallesttextencoderdecoder dev: false - /@solana/spl-token@0.4.8(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5): + /@solana/spl-token@0.4.8(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5): resolution: {integrity: sha512-RO0JD9vPRi4LsAbMUdNbDJ5/cv2z11MGhtAvFeRzT4+hAGE/FUzRi0tkkWtuCfSIU3twC6CtmAihRp/+XXjWsA==} engines: {node: '>=16'} peerDependencies: @@ -10410,9 +11273,9 @@ packages: dependencies: '@solana/buffer-layout': 4.0.1 '@solana/buffer-layout-utils': 0.2.0 - '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5) - '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.1)(fastestsmallesttextencoderdecoder@1.0.22) - '@solana/web3.js': 1.95.1(encoding@0.1.13) + '@solana/spl-token-group': 0.0.5(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.1.5) + '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.95.8)(fastestsmallesttextencoderdecoder@1.0.22) + '@solana/web3.js': 1.95.8(encoding@0.1.13) buffer: 6.0.3 transitivePeerDependencies: - bufferutil @@ -10429,175 +11292,175 @@ packages: buffer: 6.0.3 dev: false - /@solana/wallet-adapter-alpha@0.1.10(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-alpha@0.1.10(@solana/web3.js@1.95.8): resolution: {integrity: sha512-TOUhDyUNSmp8bqeUueN0LPmurTAEmYm3PTrPGSnsq6JFeTzwTv5xZRygtCvULpBzCPZu/7AfIqh/TSoz4P92aw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-avana@0.1.13(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-avana@0.1.13(@solana/web3.js@1.95.8): resolution: {integrity: sha512-dvKDzaFo9KgfNh0ohI6qOBTnOU2f6cHKPiDxdtLfXVubdic1mUYzuA2PcrBZQuRc5EBcvHbGCpr3Ds90cGB+xQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): + /@solana/wallet-adapter-base-ui@0.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-33l0WqY0mKKhcrNBbqS9anvT4MjzNnKewoF1VcdbI/uSlMOZtGy+9fr8ETVFI+ivr44QHpvbiZX9dmz2mTCGXw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 react: '*' dependencies: - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + '@solana/web3.js': 1.95.8(encoding@0.1.13) react: 18.3.1 transitivePeerDependencies: - bs58 - react-native dev: false - /@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-base@0.9.23(@solana/web3.js@1.95.8): resolution: {integrity: sha512-apqMuYwFp1jFi55NxDfvXUX2x1T0Zh07MxhZ/nCCTGys5raSfYUh82zen2BLv8BSDj/JxZ2P/s7jrQZGrX8uAw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: '@solana/wallet-standard-features': 1.2.0 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 eventemitter3: 4.0.7 dev: false - /@solana/wallet-adapter-bitkeep@0.3.20(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-bitkeep@0.3.20(@solana/web3.js@1.95.8): resolution: {integrity: sha512-v6Jd13CZOPNIAX0nFlopAJ3HDvC+MhiB4sde3C8sSnNbjVi9h1WLHBmaUfgqU6mAyhDjWUZjKt4zYlMhLdp/bg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-bitpie@0.5.18(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-bitpie@0.5.18(@solana/web3.js@1.95.8): resolution: {integrity: sha512-gEflEwAyUbfmU4NEmsoDYt1JNFyoBQGm99BBvrvXdJsDdExvT6PwHNi5YlQKp1A4EAqjqaEj+nQzr6ygUpmCBQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-clover@0.4.19(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-clover@0.4.19(@solana/web3.js@1.95.8): resolution: {integrity: sha512-48PoaPte/SRYeU25bvOSmSEqoKCcyOBH9CXebsDcXkrgf+g46KRlAlsY605q1ebzr+iaFEONtTdxW8LthvJtbA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-coin98@0.5.20(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-coin98@0.5.20(@solana/web3.js@1.95.8): resolution: {integrity: sha512-gnDFNsFq4IeB6jtQj6fZOUthuuQpvtomCkwkwsOWARNhl8nhnsfbuNs3r4XaT4Q79my07ogNQUBPGKY/8CqjiA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 4.0.1 dev: false - /@solana/wallet-adapter-coinbase@0.1.19(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-coinbase@0.1.19(@solana/web3.js@1.95.8): resolution: {integrity: sha512-hcf9ieAbQxD2g8/5glXVAt67w+3iixpjMMZC7lT7Wa8SJZsq6lmISC9AtZctDEQcWSVV0IkedZp3bg6bp22kng==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-coinhub@0.3.18(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-coinhub@0.3.18(@solana/web3.js@1.95.8): resolution: {integrity: sha512-yeJo+cHVlUBlH16Q+knnFDJrH9wzEB3zvSq57PXfqvlWSjySm4PkkK7srRoAwfNOxL/eArSJWfBwRprsymttJQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-fractal@0.1.8(@solana/web3.js@1.88.1)(react-dom@18.3.1)(react@18.3.1): + /@solana/wallet-adapter-fractal@0.1.8(@solana/web3.js@1.95.8)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-lV/rXOMQSR7sBIEDx8g0jwvXP/fT2Vw/47CSj9BaVYC5LGphhuoYbcI4ko1y0Zv+dJu8JVRTeKbnaiRBjht5DA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@fractalwagmi/solana-wallet-adapter': 0.1.1(@solana/web3.js@1.88.1)(react-dom@18.3.1)(react@18.3.1) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@fractalwagmi/solana-wallet-adapter': 0.1.1(@solana/web3.js@1.95.8)(react-dom@18.3.1)(react@18.3.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - react - react-dom dev: false - /@solana/wallet-adapter-huobi@0.1.15(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-huobi@0.1.15(@solana/web3.js@1.95.8): resolution: {integrity: sha512-VKwlK0fE7v97NEWwP86iBY/xgnB3fQJv2/RYaw8ODAcfJqVQZAV6EhDR8fo6++jdS1KkcWc2GcHdBMrqPli3yQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-hyperpay@0.1.14(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-hyperpay@0.1.14(@solana/web3.js@1.95.8): resolution: {integrity: sha512-K0qMVpPHbeIVAvhwnn+2GR8jjBe/a5EP514TL/10SQQ8vTLd7ggNWZdTRCjUkHRlsbTOK7yYWAOHu3gx7429rw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-keystone@0.1.15(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-keystone@0.1.15(@solana/web3.js@1.95.8): resolution: {integrity: sha512-2A31/vuDRAfASOEyWvJ2YjtwCQohwim3/K+KzhPfvG20C4wr6agDbMXi1T2lDWwrd13kyP+dIgOzPfuLn09tWw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: '@keystonehq/sol-keyring': 0.3.1 - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - bufferutil - encoding - utf-8-validate dev: false - /@solana/wallet-adapter-krystal@0.1.12(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-krystal@0.1.12(@solana/web3.js@1.95.8): resolution: {integrity: sha512-umQV9cbLZcqJFkcjpdOgPvTeDvUjcivRSzWgbx27drmeQ9bi4w9bYH5XkFmbj9iD98q+fjrYQUOK772IHZqrkQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-ledger@0.9.25(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-ledger@0.9.25(@solana/web3.js@1.95.8): resolution: {integrity: sha512-59yD3aveLwlzXqk4zBCaPLobeqAhmtMxPizfUBOjzwRKyepi1Nnnt9AC9Af3JrweU2x4qySRxAaZfU/iNqJ3rQ==} engines: {node: '>=16'} peerDependencies: @@ -10606,85 +11469,85 @@ packages: '@ledgerhq/devices': 6.27.1 '@ledgerhq/hw-transport': 6.27.1 '@ledgerhq/hw-transport-webhid': 6.27.1 - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) buffer: 6.0.3 dev: false - /@solana/wallet-adapter-mathwallet@0.9.18(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-mathwallet@0.9.18(@solana/web3.js@1.95.8): resolution: {integrity: sha512-sleBX+wB8Wahu2lLBCWihkFtnl64DMJgla/kgsf75PCNmNA93+WLA4gYOK+fFKeBkU12a/Hp5oZKEQsQGFPSOA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-neko@0.2.12(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-neko@0.2.12(@solana/web3.js@1.95.8): resolution: {integrity: sha512-ei1QoQZhiYMuH/qm3bnXlueT0jQmH4tZfQvEwudFB8+a0fLtSA8lZU+CYI1jd1YLDjkUEIiXV6R/u32nlCuYDA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-nightly@0.1.16(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-nightly@0.1.16(@solana/web3.js@1.95.8): resolution: {integrity: sha512-JaPzT8R4HHUqGn/QdElx9iRW98h0NaANBt0j3CZZYWlqsdG0f8fFfy2xofILA+qnDL6NaRI9AzQ4NcQGuVZsVQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-nufi@0.1.17(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-nufi@0.1.17(@solana/web3.js@1.95.8): resolution: {integrity: sha512-ggTZKvYPJS3m/9hsMaGSH0F8kqumPqP0WdY7WNihWR6O4Pr401kDBdgXPXNSGorIahdPrRBzp5UrahnrlodvTQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-onto@0.1.7(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-onto@0.1.7(@solana/web3.js@1.95.8): resolution: {integrity: sha512-WS4LY0Z0J+NcyEkjdjkD11uKURkRQ/RHMYSFE59U+MuBHggEpXJFZuJzUE9SZbG1ltlLTh13hS5ZuiEz7F+faA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-particle@0.1.12(@solana/web3.js@1.88.1)(bs58@5.0.0): + /@solana/wallet-adapter-particle@0.1.12(@solana/web3.js@1.95.8)(bs58@5.0.0): resolution: {integrity: sha512-6tD5pbyuyCRDswDVD5LCakVQ/vIwjO2lXlVvJFDLdhGa6MinbjTHigLmE58nkTgKATRScyS8FuCCzGmYcXGbow==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.88.1)(bs58@5.0.0) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@particle-network/solana-wallet': 1.3.2(@solana/web3.js@1.95.8)(bs58@5.0.0) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - bs58 dev: false - /@solana/wallet-adapter-phantom@0.9.24(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-phantom@0.9.24(@solana/web3.js@1.95.8): resolution: {integrity: sha512-D24AxRHmRJ4AYoRvijbiuUb9LmC4xLGKLMSJS2ly+zGxVmaPASPM/ThaY/DlYTDL31QvkYtl8RzSR4yIU1gpLg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1): + /@solana/wallet-adapter-react-ui@0.9.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-SyHUavEAyzBL5zim5xAlYaqP5jF3bOtxi/02wgXzMpKXUYpG4EiXXY3DeGw5eUbcvvej45rQENtTHWEEH9fW+A==} engines: {node: '>=16'} peerDependencies: @@ -10692,10 +11555,10 @@ packages: react: '*' react-dom: '*' dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) - '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-base-ui': 0.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + '@solana/wallet-adapter-react': 0.15.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1) + '@solana/web3.js': 1.95.8(encoding@0.1.13) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -10703,127 +11566,127 @@ packages: - react-native dev: false - /@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): + /@solana/wallet-adapter-react@0.15.35(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-native@0.74.0)(react@18.3.1): resolution: {integrity: sha512-i4hc/gNLTYNLMEt2LS+4lrrc0QAwa5SU2PtYMnZ2A3rsoKF5m1bv1h6cjLj2KBry4/zRGEBoqkiMOC5zHkLnRQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 react: '*' dependencies: - '@solana-mobile/wallet-adapter-mobile': 2.1.3(@solana/web3.js@1.88.1)(react-native@0.74.0)(react@18.3.1) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1) - '@solana/web3.js': 1.88.1 + '@solana-mobile/wallet-adapter-mobile': 2.1.3(@solana/web3.js@1.95.8)(react-native@0.74.0)(react@18.3.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1) + '@solana/web3.js': 1.95.8(encoding@0.1.13) react: 18.3.1 transitivePeerDependencies: - bs58 - react-native dev: false - /@solana/wallet-adapter-safepal@0.5.18(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-safepal@0.5.18(@solana/web3.js@1.95.8): resolution: {integrity: sha512-E/EIO5j+f0FS9Yj5o5JLJ/qHh3Se/9jP2KdHKhooWTlXWbQDzrxMjV88qIKKl5sgWEndqRYDuDbAdW+2dhw6hw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-saifu@0.1.15(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-saifu@0.1.15(@solana/web3.js@1.95.8): resolution: {integrity: sha512-4nrziKQ+4QInh+COsICpNNUlUt456EJ60SZLxvG/z1AOGpatuzT0gN1+RdMcwHGUtiPBPCkEneUVhFZhhbMJlg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-salmon@0.1.14(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-salmon@0.1.14(@solana/web3.js@1.95.8): resolution: {integrity: sha512-CMXdbhaj3prloCJwvxO7e1wfAyRd58QiPB8pjvB4GBbznyoSnHbFXmpxZrKX1Dk6FoJOGBgjB71xnreGcc6oMw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 - salmon-adapter-sdk: 1.1.1(@solana/web3.js@1.88.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) + salmon-adapter-sdk: 1.1.1(@solana/web3.js@1.95.8) dev: false - /@solana/wallet-adapter-sky@0.1.15(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-sky@0.1.15(@solana/web3.js@1.95.8): resolution: {integrity: sha512-1vlk1/jnlOC/WfDDgDoUk3XtEhB3hq1fKtUb+xj0pVuSOg2Db+8ka9vPPYlVaKHoGvjm30iGGfr3ZrCxVfG6OQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-solflare@0.6.28(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-solflare@0.6.28(@solana/web3.js@1.95.8): resolution: {integrity: sha512-iiUQtuXp8p4OdruDawsm1dRRnzUCcsu+lKo8OezESskHtbmZw2Ifej0P99AbJbBAcBw7q4GPI6987Vh05Si5rw==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) '@solana/wallet-standard-chains': 1.1.0 - '@solana/web3.js': 1.88.1 - '@solflare-wallet/metamask-sdk': 1.0.3(@solana/web3.js@1.88.1) - '@solflare-wallet/sdk': 1.4.2(@solana/web3.js@1.88.1) + '@solana/web3.js': 1.95.8(encoding@0.1.13) + '@solflare-wallet/metamask-sdk': 1.0.3(@solana/web3.js@1.95.8) + '@solflare-wallet/sdk': 1.4.2(@solana/web3.js@1.95.8) '@wallet-standard/wallet': 1.0.1 dev: false - /@solana/wallet-adapter-solong@0.9.18(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-solong@0.9.18(@solana/web3.js@1.95.8): resolution: {integrity: sha512-n40eemFUbJlOP+FKvn8rgq+YAOW51lEsn7uVz5ZjmiaW6MnRQniId9KkGYPPOUjytFyM+6/4x6IXI+QJknlSqA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-spot@0.1.15(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-spot@0.1.15(@solana/web3.js@1.95.8): resolution: {integrity: sha512-daU2iBTSJp1RGfQrB2uV06+2WHfeyW0uhjoJ3zTkz24kXqv5/ycoPHr8Gi2jkDSGMFkewnjWF8g0KMEzq2VYug==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-tokenary@0.1.12(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-tokenary@0.1.12(@solana/web3.js@1.95.8): resolution: {integrity: sha512-iIsOzzEHfRfDUiwYy2BAVGeMl+xBUu92qYK1yAKeKxQPF5McJrnjS3FXwT/onBU5WMdxI6dWm0HKZUiDwefN6A==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-tokenpocket@0.4.19(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-tokenpocket@0.4.19(@solana/web3.js@1.95.8): resolution: {integrity: sha512-zKXTN+tuKIr/stSxUeG9XPBks9iqeliBWS9JF8eq+8u/Qb/bIDbNSQmd8Z5u1x2lf0puiStc9/iUu/+MLaOSVg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-torus@0.11.28(@babel/runtime@7.25.6)(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-torus@0.11.28(@babel/runtime@7.26.0)(@solana/web3.js@1.95.8): resolution: {integrity: sha512-bu1oJQ+AoIZICxz8J1lVcdL+iBBrdbynnEs5N6dxwoM/cMGLbX7PGYqaH0J1dEXisA+1H5AzGAnW4UU05VBmLA==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 - '@toruslabs/solana-embed': 0.3.4(@babel/runtime@7.25.6) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) + '@toruslabs/solana-embed': 0.3.4(@babel/runtime@7.26.0) assert: 2.1.0 crypto-browserify: 3.12.0 process: 0.11.10 @@ -10837,14 +11700,14 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-trezor@0.1.2(@babel/core@7.24.5)(@solana/web3.js@1.88.1)(react-native@0.74.0)(tslib@2.8.1): + /@solana/wallet-adapter-trezor@0.1.2(@babel/core@7.24.5)(@solana/web3.js@1.95.8)(react-native@0.74.0)(tslib@2.8.1): resolution: {integrity: sha512-x4nXntYi1SIv63ZdXWX/Rq/VKwguByKu67WpyUXsu8kOdviksb20bQMuAR7Ue41oJ9zSnLlTxAxA1SuWNkFRBg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@trezor/connect-web': 9.3.0(@babel/core@7.24.5)(react-native@0.74.0)(tslib@2.8.1) buffer: 6.0.3 transitivePeerDependencies: @@ -10859,38 +11722,38 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-trust@0.1.13(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-trust@0.1.13(@solana/web3.js@1.95.8): resolution: {integrity: sha512-lkmPfNdyRgx+z0K7i2cDa3a6SOKXpi3FiaYSo8Zozoxkp+Ga/NXVWxlXtMca4GAc/MnJMVp7yF/31kyFIee+3A==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-unsafe-burner@0.1.7(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-unsafe-burner@0.1.7(@solana/web3.js@1.95.8): resolution: {integrity: sha512-SuBVqQxA1NNUwP4Lo70rLPaM8aWkV1EFAlxkRoRLtwyw/gM8bxTO6+9EVyKCv+ix3yw1rCGIF3B0idXx0i37eQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: '@noble/curves': 1.4.0 - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) '@solana/wallet-standard-features': 1.2.0 '@solana/wallet-standard-util': 1.1.1 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false - /@solana/wallet-adapter-walletconnect@0.1.16(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-walletconnect@0.1.16(@solana/web3.js@1.95.8): resolution: {integrity: sha512-jNaQwSho8hT7gF1ifePE8TJc1FULx8jCF16KX3fZPtzXDxKrj0R4VUpHMGcw4MlDknrnZNLOJAVvyiawAkPCRQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@jnwng/walletconnect-solana': 0.2.0(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@jnwng/walletconnect-solana': 0.2.0(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10911,49 +11774,49 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-wallets@0.19.32(@babel/core@7.24.5)(@babel/runtime@7.25.6)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1)(tslib@2.8.1): + /@solana/wallet-adapter-wallets@0.19.32(@babel/core@7.24.5)(@babel/runtime@7.26.0)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react-dom@18.3.1)(react-native@0.74.0)(react@18.3.1)(tslib@2.8.1): resolution: {integrity: sha512-voZYQiIy1yXuKvm7x7YpnQ53eiJC7NpIYSQjzApOUiswiBRVeYcnPO4O/MMPUwsGkS7iZKqKZjo5CnOaN44n+g==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-bitkeep': 0.3.20(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-bitpie': 0.5.18(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-clover': 0.4.19(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-coin98': 0.5.20(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-coinbase': 0.1.19(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-coinhub': 0.3.18(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-fractal': 0.1.8(@solana/web3.js@1.88.1)(react-dom@18.3.1)(react@18.3.1) - '@solana/wallet-adapter-huobi': 0.1.15(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-hyperpay': 0.1.14(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-keystone': 0.1.15(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-krystal': 0.1.12(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-ledger': 0.9.25(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-mathwallet': 0.9.18(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-neko': 0.2.12(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-nightly': 0.1.16(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-nufi': 0.1.17(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-onto': 0.1.7(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.88.1)(bs58@5.0.0) - '@solana/wallet-adapter-phantom': 0.9.24(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-safepal': 0.5.18(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-saifu': 0.1.15(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-salmon': 0.1.14(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-sky': 0.1.15(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-solflare': 0.6.28(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-solong': 0.9.18(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-spot': 0.1.15(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-tokenary': 0.1.12(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-tokenpocket': 0.4.19(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-torus': 0.11.28(@babel/runtime@7.25.6)(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-trezor': 0.1.2(@babel/core@7.24.5)(@solana/web3.js@1.88.1)(react-native@0.74.0)(tslib@2.8.1) - '@solana/wallet-adapter-trust': 0.1.13(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-unsafe-burner': 0.1.7(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-walletconnect': 0.1.16(@solana/web3.js@1.88.1) - '@solana/wallet-adapter-xdefi': 0.1.7(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-alpha': 0.1.10(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-avana': 0.1.13(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-bitkeep': 0.3.20(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-bitpie': 0.5.18(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-clover': 0.4.19(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-coin98': 0.5.20(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-coinbase': 0.1.19(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-coinhub': 0.3.18(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-fractal': 0.1.8(@solana/web3.js@1.95.8)(react-dom@18.3.1)(react@18.3.1) + '@solana/wallet-adapter-huobi': 0.1.15(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-hyperpay': 0.1.14(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-keystone': 0.1.15(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-krystal': 0.1.12(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-ledger': 0.9.25(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-mathwallet': 0.9.18(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-neko': 0.2.12(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-nightly': 0.1.16(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-nufi': 0.1.17(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-onto': 0.1.7(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-particle': 0.1.12(@solana/web3.js@1.95.8)(bs58@5.0.0) + '@solana/wallet-adapter-phantom': 0.9.24(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-safepal': 0.5.18(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-saifu': 0.1.15(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-salmon': 0.1.14(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-sky': 0.1.15(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-solflare': 0.6.28(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-solong': 0.9.18(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-spot': 0.1.15(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-tokenary': 0.1.12(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-tokenpocket': 0.4.19(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-torus': 0.11.28(@babel/runtime@7.26.0)(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-trezor': 0.1.2(@babel/core@7.24.5)(@solana/web3.js@1.95.8)(react-native@0.74.0)(tslib@2.8.1) + '@solana/wallet-adapter-trust': 0.1.13(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-unsafe-burner': 0.1.7(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-walletconnect': 0.1.16(@solana/web3.js@1.95.8) + '@solana/wallet-adapter-xdefi': 0.1.7(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) transitivePeerDependencies: - '@azure/app-configuration' - '@azure/cosmos' @@ -10985,14 +11848,14 @@ packages: - utf-8-validate dev: false - /@solana/wallet-adapter-xdefi@0.1.7(@solana/web3.js@1.88.1): + /@solana/wallet-adapter-xdefi@0.1.7(@solana/web3.js@1.95.8): resolution: {integrity: sha512-d0icfBOQyaY8kpsdU/wQwaBIahZZPzkXkXfBjpMGwjixD8oeZUFfsg8LC7T1rOIUObeczlocaR/lwtEqWpnaeg==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.77.3 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) dev: false /@solana/wallet-standard-chains@1.1.0: @@ -11028,18 +11891,18 @@ packages: '@solana/wallet-standard-features': 1.2.0 dev: false - /@solana/wallet-standard-wallet-adapter-base@1.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0): + /@solana/wallet-standard-wallet-adapter-base@1.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0): resolution: {integrity: sha512-DqhzYbgh3disHMgcz6Du7fmpG29BYVapNEEiL+JoVMa+bU9d4P1wfwXUNyJyRpGGNXtwhyZjIk2umWbe5ZBNaQ==} engines: {node: '>=16'} peerDependencies: '@solana/web3.js': ^1.58.0 bs58: ^4.0.1 dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) '@solana/wallet-standard-chains': 1.1.0 '@solana/wallet-standard-features': 1.2.0 '@solana/wallet-standard-util': 1.1.1 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 '@wallet-standard/features': 1.0.3 @@ -11047,15 +11910,15 @@ packages: bs58: 5.0.0 dev: false - /@solana/wallet-standard-wallet-adapter-react@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1): + /@solana/wallet-standard-wallet-adapter-react@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1): resolution: {integrity: sha512-bN6W4QkzenyjUoUz3sC5PAed+z29icGtPh9VSmLl1ZrRO7NbFB49a8uwUUVXNxhL/ZbMsyVKhb9bNj47/p8uhQ==} engines: {node: '>=16'} peerDependencies: '@solana/wallet-adapter-base': '*' react: '*' dependencies: - '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.88.1) - '@solana/wallet-standard-wallet-adapter-base': 1.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0) + '@solana/wallet-adapter-base': 0.9.23(@solana/web3.js@1.95.8) + '@solana/wallet-standard-wallet-adapter-base': 1.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0) '@wallet-standard/app': 1.0.1 '@wallet-standard/base': 1.0.1 react: 18.3.1 @@ -11064,12 +11927,12 @@ packages: - bs58 dev: false - /@solana/wallet-standard-wallet-adapter@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1): + /@solana/wallet-standard-wallet-adapter@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1): resolution: {integrity: sha512-lCwoA+vhPfmvjcmJOhSRV94wouVWTfJv1Z7eeULAe+GodCeKA/0T9/uBYgXHUxQjLHd7o8LpLYIkfm+xjA5sMA==} engines: {node: '>=16'} dependencies: - '@solana/wallet-standard-wallet-adapter-base': 1.1.2(@solana/web3.js@1.88.1)(bs58@5.0.0) - '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1) + '@solana/wallet-standard-wallet-adapter-base': 1.1.2(@solana/web3.js@1.95.8)(bs58@5.0.0) + '@solana/wallet-standard-wallet-adapter-react': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1) transitivePeerDependencies: - '@solana/wallet-adapter-base' - '@solana/web3.js' @@ -11077,12 +11940,12 @@ packages: - react dev: false - /@solana/wallet-standard@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1): + /@solana/wallet-standard@1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1): resolution: {integrity: sha512-o7wk+zr5/QgyE393cGRC04K1hacR4EkBu3MB925ddaLvCVaXjwr2asgdviGzN9PEm3FiEJp3sMmMKYHFnwOITQ==} engines: {node: '>=16'} dependencies: '@solana/wallet-standard-core': 1.1.1 - '@solana/wallet-standard-wallet-adapter': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.88.1)(bs58@5.0.0)(react@18.3.1) + '@solana/wallet-standard-wallet-adapter': 1.1.2(@solana/wallet-adapter-base@0.9.23)(@solana/web3.js@1.95.8)(bs58@5.0.0)(react@18.3.1) transitivePeerDependencies: - '@solana/wallet-adapter-base' - '@solana/web3.js' @@ -11090,57 +11953,10 @@ packages: - react dev: false - /@solana/web3.js@1.88.1: - resolution: {integrity: sha512-X9SSARo0wGxvEf0YIK/1JO3bH4uTShn2m5rTFpRRVG4soZyOy0Lz9xtQKAIMP/KqKCc4iYiA/7fU4V6GCB72wg==} + /@solana/web3.js@1.95.8(encoding@0.1.13): + resolution: {integrity: sha512-sBHzNh7dHMrmNS5xPD1d0Xa2QffW/RXaxu/OysRXBfwTp+LYqGGmMtCYYwrHPrN5rjAmJCsQRNAwv4FM0t3B6g==} dependencies: - '@babel/runtime': 7.24.1 - '@noble/curves': 1.4.0 - '@noble/hashes': 1.4.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.0 - node-fetch: 2.7.0(encoding@0.1.13) - rpc-websockets: 7.5.1 - superstruct: 0.14.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: false - - /@solana/web3.js@1.95.1(encoding@0.1.13): - resolution: {integrity: sha512-mRX/AjV6QbiOXpWcy5Rz1ZWEH2lVkwO7T0pcv9t97ACpv3/i3tPiqXwk0JIZgSR3wOSTiT26JfygnJH2ulS6dQ==} - dependencies: - '@babel/runtime': 7.24.8 - '@noble/curves': 1.4.2 - '@noble/hashes': 1.4.0 - '@solana/buffer-layout': 4.0.1 - agentkeepalive: 4.5.0 - bigint-buffer: 1.1.5 - bn.js: 5.2.1 - borsh: 0.7.0 - bs58: 4.0.1 - buffer: 6.0.3 - fast-stable-stringify: 1.0.0 - jayson: 4.1.1 - node-fetch: 2.7.0(encoding@0.1.13) - rpc-websockets: 9.0.2 - superstruct: 2.0.2 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - - /@solana/web3.js@1.95.3: - resolution: {integrity: sha512-O6rPUN0w2fkNqx/Z3QJMB9L225Ex10PRDH8bTaIUPZXMPV0QP8ZpPvjQnXK+upUczlRgzHzd6SjKIha1p+I6og==} - dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.4.0 '@solana/buffer-layout': 4.0.1 @@ -11159,27 +11975,26 @@ packages: - bufferutil - encoding - utf-8-validate - dev: false - /@solflare-wallet/metamask-sdk@1.0.3(@solana/web3.js@1.88.1): + /@solflare-wallet/metamask-sdk@1.0.3(@solana/web3.js@1.95.8): resolution: {integrity: sha512-os5Px5PTMYKGS5tzOoyjDxtOtj0jZKnbI1Uwt8+Jsw1HHIA+Ib2UACCGNhQ/un2f8sIbTfLD1WuucNMOy8KZpQ==} peerDependencies: '@solana/web3.js': '*' dependencies: '@solana/wallet-standard-features': 1.2.0 - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@wallet-standard/base': 1.0.1 bs58: 5.0.0 eventemitter3: 5.0.1 uuid: 9.0.1 dev: false - /@solflare-wallet/sdk@1.4.2(@solana/web3.js@1.88.1): + /@solflare-wallet/sdk@1.4.2(@solana/web3.js@1.95.8): resolution: {integrity: sha512-jrseNWipwl9xXZgrzwZF3hhL0eIVxuEtoZOSLmuPuef7FgHjstuTtNJAeT4icA7pzdDV4hZvu54pI2r2f7SmrQ==} peerDependencies: '@solana/web3.js': '*' dependencies: - '@solana/web3.js': 1.88.1 + '@solana/web3.js': 1.95.8(encoding@0.1.13) bs58: 5.0.0 eventemitter3: 5.0.1 uuid: 9.0.1 @@ -11387,7 +12202,7 @@ packages: '@ton/core': 0.59.0(@ton/crypto@3.3.0) '@ton/crypto': 3.3.0 axios: 1.7.4 - dataloader: 2.2.2 + dataloader: 2.2.3 symbol.inspect: 1.0.1 teslabot: 1.5.0 zod: 3.23.8 @@ -11400,16 +12215,16 @@ packages: engines: {node: '>= 10'} dev: true - /@toruslabs/base-controllers@2.9.0(@babel/runtime@7.25.6): + /@toruslabs/base-controllers@2.9.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-rKc+bR4QB/wdbH0CxLZC5e2PUZcIgkr9yY7TMd3oIffDklaYBnsuC5ES2/rgK1aRUDRWz+qWbTwLqsY6PlT37Q==} peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@ethereumjs/util': 8.1.0 '@toruslabs/broadcast-channel': 6.3.1 - '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.25.6) - '@toruslabs/openlogin-jrpc': 4.7.2(@babel/runtime@7.25.6) + '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.26.0) + '@toruslabs/openlogin-jrpc': 4.7.2(@babel/runtime@7.26.0) async-mutex: 0.4.1 bignumber.js: 9.1.2 bowser: 2.11.0 @@ -11427,9 +12242,9 @@ packages: /@toruslabs/broadcast-channel@6.3.1: resolution: {integrity: sha512-BEtJQ+9bMfFoGuCsp5NmxyY+C980Ho+3BZIKSiYwRtl5qymJ+jMX5lsoCppoQblcb34dP6FwEjeFw80Y9QC/rw==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@toruslabs/eccrypto': 2.2.1 - '@toruslabs/metadata-helpers': 3.2.0(@babel/runtime@7.25.6) + '@toruslabs/metadata-helpers': 3.2.0(@babel/runtime@7.26.0) bowser: 2.11.0 loglevel: 1.9.1 oblivious-set: 1.1.1 @@ -11448,7 +12263,7 @@ packages: elliptic: 6.5.7 dev: false - /@toruslabs/http-helpers@3.4.0(@babel/runtime@7.25.6): + /@toruslabs/http-helpers@3.4.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-CoeJSL32mpp0gmYjxv48odu6pfjHk/rbJHDwCtYPcMHAl+qUQ/DTpVOOn9U0fGkD+fYZrQmZbRkXFgLhiT0ajQ==} engines: {node: '>=14.17.0', npm: '>=6.x'} peerDependencies: @@ -11458,20 +12273,20 @@ packages: '@sentry/types': optional: true dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 lodash.merge: 4.6.2 loglevel: 1.9.1 dev: false - /@toruslabs/metadata-helpers@3.2.0(@babel/runtime@7.25.6): + /@toruslabs/metadata-helpers@3.2.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-2bCc6PNKd9y+aWfZQ1FXd47QmfyT4NmmqPGfsqk+sQS2o+MlxIyLuh9uh7deMgXo4b4qBDX+RQGbIKM1zVk56w==} engines: {node: '>=14.17.0', npm: '>=6.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@toruslabs/eccrypto': 2.2.1 - '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.25.6) + '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.26.0) elliptic: 6.5.7 ethereum-cryptography: 2.1.3 json-stable-stringify: 1.1.1 @@ -11479,14 +12294,14 @@ packages: - '@sentry/types' dev: false - /@toruslabs/openlogin-jrpc@3.2.0(@babel/runtime@7.25.6): + /@toruslabs/openlogin-jrpc@3.2.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-G+K0EHyVUaAEyeD4xGsnAZRpn/ner8lQ2HC2+pGKg6oGmzKI2wGMDcw2KMH6+HKlfBGVJ5/VR9AQfC/tZlLDmQ==} deprecated: Not supported. Pls upgrade peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 - '@toruslabs/openlogin-utils': 3.0.0(@babel/runtime@7.25.6) + '@babel/runtime': 7.26.0 + '@toruslabs/openlogin-utils': 3.0.0(@babel/runtime@7.26.0) end-of-stream: 1.4.4 eth-rpc-errors: 4.0.3 events: 3.3.0 @@ -11496,15 +12311,15 @@ packages: readable-stream: 3.6.2 dev: false - /@toruslabs/openlogin-jrpc@4.7.2(@babel/runtime@7.25.6): + /@toruslabs/openlogin-jrpc@4.7.2(@babel/runtime@7.26.0): resolution: {integrity: sha512-9Eb0cPc0lPuS6v2YkQlgzfbRnZ6fLez9Ike5wznoHSFA2/JVu1onwuI56EV1HwswdDrOWPPQEyzI1j9NriZ0ew==} engines: {node: '>=16.18.1', npm: '>=8.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 '@metamask/rpc-errors': 5.1.1 - '@toruslabs/openlogin-utils': 4.7.0(@babel/runtime@7.25.6) + '@toruslabs/openlogin-utils': 4.7.0(@babel/runtime@7.26.0) end-of-stream: 1.4.4 events: 3.3.0 fast-safe-stringify: 2.1.1 @@ -11515,39 +12330,39 @@ packages: - supports-color dev: false - /@toruslabs/openlogin-utils@3.0.0(@babel/runtime@7.25.6): + /@toruslabs/openlogin-utils@3.0.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-T5t29/AIFqXc84x4OoAkZWjd0uoP2Lk6iaFndnIIMzCPu+BwwV0spX/jd/3YYNjZ8Po8D+faEnwAhiqemYeK2w==} deprecated: Not supported. Pls upgrade peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 base64url: 3.0.1 keccak: 3.0.3 randombytes: 2.1.0 dev: false - /@toruslabs/openlogin-utils@4.7.0(@babel/runtime@7.25.6): + /@toruslabs/openlogin-utils@4.7.0(@babel/runtime@7.26.0): resolution: {integrity: sha512-w6XkHs4WKuufsf/zzteBzs4EJuOknrUmJ+iv5FZ8HzIpMQeL/984CP8HYaFSEYkbGCP4ydAnhY4Uh0QAhpDbPg==} engines: {node: '>=16.18.1', npm: '>=8.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 base64url: 3.0.1 dev: false - /@toruslabs/solana-embed@0.3.4(@babel/runtime@7.25.6): + /@toruslabs/solana-embed@0.3.4(@babel/runtime@7.26.0): resolution: {integrity: sha512-yj+aBJoBAneap7Jlu9/OOp7irWNuC5CqAhyhVcmb0IjWrCUFnioLdL0U7UfGaqVm/5O0leJh7/Z5Ll+3toWJBg==} engines: {node: '>=14.17.0', npm: '>=6.x'} peerDependencies: '@babel/runtime': 7.x dependencies: - '@babel/runtime': 7.25.6 - '@solana/web3.js': 1.95.3 - '@toruslabs/base-controllers': 2.9.0(@babel/runtime@7.25.6) - '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.25.6) - '@toruslabs/openlogin-jrpc': 3.2.0(@babel/runtime@7.25.6) + '@babel/runtime': 7.26.0 + '@solana/web3.js': 1.95.8(encoding@0.1.13) + '@toruslabs/base-controllers': 2.9.0(@babel/runtime@7.26.0) + '@toruslabs/http-helpers': 3.4.0(@babel/runtime@7.26.0) + '@toruslabs/openlogin-jrpc': 3.2.0(@babel/runtime@7.26.0) eth-rpc-errors: 4.0.3 fast-deep-equal: 3.1.3 is-stream: 2.0.1 @@ -11581,7 +12396,7 @@ packages: peerDependencies: tslib: ^2.6.2 dependencies: - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@trezor/type-utils': 1.1.0 '@trezor/utxo-lib': 2.1.0(tslib@2.8.1) socks-proxy-agent: 6.1.1 @@ -11599,7 +12414,7 @@ packages: tslib: ^2.6.2 dependencies: '@mobily/ts-belt': 3.13.1 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@trezor/env-utils': 1.1.0(react-native@0.74.0)(tslib@2.8.1) '@trezor/utils': 9.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -11618,7 +12433,7 @@ packages: tslib: ^2.6.2 dependencies: '@solana/buffer-layout': 4.0.1 - '@solana/web3.js': 1.95.3 + '@solana/web3.js': 1.95.8(encoding@0.1.13) '@trezor/blockchain-link-types': 1.1.0(tslib@2.8.1) '@trezor/blockchain-link-utils': 1.1.0(react-native@0.74.0)(tslib@2.8.1) '@trezor/utils': 9.1.0(tslib@2.8.1) @@ -11825,6 +12640,11 @@ packages: wif: 4.0.0 dev: false + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + /@tsconfig/node16-strictest@1.0.4: resolution: {integrity: sha512-kp6/DuAoKzHVv5U+p0uOesYbjrEvrYVNdQMl163a+yXXUv9twabvkCGEn3pmVxKXB45JU5MPGolDDWnONZL5ZQ==} dev: true @@ -11871,8 +12691,8 @@ packages: /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 '@types/babel__generator': 7.6.4 '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.18.3 @@ -11880,18 +12700,18 @@ packages: /@types/babel__generator@7.6.4: resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 /@types/babel__template@7.4.1: resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} dependencies: - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/parser': 7.24.8 + '@babel/types': 7.24.9 /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} @@ -11964,6 +12784,19 @@ packages: '@types/serve-static': 1.15.5 dev: true + /@types/fs-extra@8.1.5: + resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==} + dependencies: + '@types/node': 20.3.1 + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.3.1 + dev: true + /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: @@ -12002,7 +12835,7 @@ packages: dependencies: '@types/node': 20.3.1 '@types/tough-cookie': 4.0.5 - parse5: 7.2.0 + parse5: 7.2.1 dev: true /@types/json-schema@7.0.15: @@ -12032,6 +12865,10 @@ packages: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} dev: true + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + /@types/minimist@1.2.2: resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==} dev: true @@ -12067,8 +12904,8 @@ packages: /@types/node@18.18.2: resolution: {integrity: sha512-u1cis+7wLZMPI62EozwsqvgMZyauczyiqRRu/vcqZKI5N5yidrJHqOFxEg5seT8adc96Q6Yczg1c0DlqGtMJMw==} - /@types/node@20.17.6: - resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} + /@types/node@20.17.9: + resolution: {integrity: sha512-0JOXkRyLanfGPE2QRCwgxhzlBAvaRdCNMcvbd7jFfpmD4eEXll7LRwy5ymJmyeZqk7Nh7eD2LeUyQ68BbndmXw==} dependencies: undici-types: 6.19.8 dev: false @@ -12080,6 +12917,10 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false + /@types/pbkdf2@3.1.0: resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==} dependencies: @@ -12096,6 +12937,9 @@ packages: kleur: 3.0.3 dev: true + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} @@ -12117,12 +12961,18 @@ packages: dependencies: '@types/react': 18.3.3 + /@types/react-transition-group@4.4.11: + resolution: {integrity: sha512-RM05tAniPZ5DZPzzNFP+DmrcOdD0efDUxMy3145oljWSl3x9ZV5vhme98gTxFrj2lhXvmGNnUiuDyJgY9IKkNA==} + dependencies: + '@types/react': 18.3.3 + dev: false + /@types/react@18.2.14: resolution: {integrity: sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==} dependencies: - '@types/prop-types': 15.7.5 + '@types/prop-types': 15.7.13 '@types/scheduler': 0.16.3 - csstype: 3.1.2 + csstype: 3.1.3 /@types/react@18.2.75: resolution: {integrity: sha512-+DNnF7yc5y0bHkBTiLKqXFe+L4B3nvOphiMY3tuA5X10esmjqk7smyBZzbGTy2vsiy/Bnzj8yFIBL8xhRacoOg==} @@ -12186,6 +13036,10 @@ packages: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} dev: true + /@types/use-sync-external-store@0.0.3: + resolution: {integrity: sha512-EwmlvuaxPNej9+T4v5AuBPJa2x2UOJVdjCtDHgcDqitUeOtjnJKJ+apYjVcAoBEMjKW1VVFGZLUb5+qqa09XFA==} + dev: false + /@types/uuid@8.3.4: resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} @@ -13287,7 +14141,6 @@ packages: /aptos@1.21.0: resolution: {integrity: sha512-PRKjoFgL8tVEc9+oS7eJUv8GNxx8n3+0byH2+m7CP3raYOD6yFKOecuwjVMIJmgfpjp6xH0P0HDMGZAXmSyU0Q==} engines: {node: '>=11.0.0'} - deprecated: Package aptos is no longer supported, please migrate to https://www.npmjs.com/package/@aptos-labs/ts-sdk dependencies: '@aptos-labs/aptos-client': 0.1.1 '@noble/hashes': 1.3.3 @@ -13620,8 +14473,8 @@ packages: resolution: {integrity: sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/template': 7.24.7 + '@babel/types': 7.24.9 '@types/babel__core': 7.20.0 '@types/babel__traverse': 7.18.3 dev: false @@ -13636,6 +14489,15 @@ packages: '@types/babel__traverse': 7.18.3 dev: true + /babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + dependencies: + '@babel/runtime': 7.26.0 + cosmiconfig: 7.1.0 + resolve: 1.22.8 + dev: false + /babel-plugin-polyfill-corejs2@0.3.3(@babel/core@7.20.12): resolution: {integrity: sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==} peerDependencies: @@ -13979,6 +14841,10 @@ packages: /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + /borsh@0.7.0: resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} dependencies: @@ -14291,6 +15157,15 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.3 + caniuse-lite: 1.0.30001581 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + /caniuse-lite@1.0.30001581: resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} @@ -14368,6 +15243,7 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: false /chrome-launcher@0.15.2: resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} @@ -14523,6 +15399,11 @@ packages: engines: {node: '>=6'} dev: false + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: false + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} @@ -14549,6 +15430,27 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + optional: true + + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + dev: false + optional: true + + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /colorette@1.4.0: resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} @@ -14600,6 +15502,11 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -14639,6 +15546,12 @@ packages: /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + /concat-with-sourcemaps@1.1.0: + resolution: {integrity: sha512-4gEjHJFT9e+2W/77h/DS5SGUgwDaOwprX8L/gl5+3ixnzkVJJsZWDSelmN3Oilw3LNDZjZV0yqH1hLG3k6nghg==} + dependencies: + source-map: 0.6.1 + dev: true + /confbox@0.1.7: resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} dev: false @@ -14706,6 +15619,17 @@ packages: parse-json: 4.0.0 dev: false + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: false + /cosmjs-types@0.8.0: resolution: {integrity: sha512-Q2Mj95Fl0PYMWEhA2LuGEIhipF7mQwd9gTQ85DdP9jjjopeoGaDxvmPa5nakNzsq7FnO1DMTatXTAx6bxMH7Lg==} dependencies: @@ -14831,11 +15755,115 @@ packages: deprecated: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. dev: true + /css-box-model@1.2.1: + resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} + dependencies: + tiny-invariant: 1.3.1 + dev: false + + /css-declaration-sorter@6.4.1(postcss@8.4.38): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.38 + dev: true + + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + dev: true + + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + /cssnano-preset-default@5.2.14(postcss@8.4.38): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.4.38) + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-calc: 8.2.4(postcss@8.4.38) + postcss-colormin: 5.3.1(postcss@8.4.38) + postcss-convert-values: 5.1.3(postcss@8.4.38) + postcss-discard-comments: 5.1.2(postcss@8.4.38) + postcss-discard-duplicates: 5.1.0(postcss@8.4.38) + postcss-discard-empty: 5.1.1(postcss@8.4.38) + postcss-discard-overridden: 5.1.0(postcss@8.4.38) + postcss-merge-longhand: 5.1.7(postcss@8.4.38) + postcss-merge-rules: 5.1.4(postcss@8.4.38) + postcss-minify-font-values: 5.1.0(postcss@8.4.38) + postcss-minify-gradients: 5.1.1(postcss@8.4.38) + postcss-minify-params: 5.1.4(postcss@8.4.38) + postcss-minify-selectors: 5.2.1(postcss@8.4.38) + postcss-normalize-charset: 5.1.0(postcss@8.4.38) + postcss-normalize-display-values: 5.1.0(postcss@8.4.38) + postcss-normalize-positions: 5.1.1(postcss@8.4.38) + postcss-normalize-repeat-style: 5.1.1(postcss@8.4.38) + postcss-normalize-string: 5.1.0(postcss@8.4.38) + postcss-normalize-timing-functions: 5.1.0(postcss@8.4.38) + postcss-normalize-unicode: 5.1.1(postcss@8.4.38) + postcss-normalize-url: 5.1.0(postcss@8.4.38) + postcss-normalize-whitespace: 5.1.1(postcss@8.4.38) + postcss-ordered-values: 5.1.3(postcss@8.4.38) + postcss-reduce-initial: 5.1.2(postcss@8.4.38) + postcss-reduce-transforms: 5.1.0(postcss@8.4.38) + postcss-svgo: 5.1.0(postcss@8.4.38) + postcss-unique-selectors: 5.1.1(postcss@8.4.38) + dev: true + + /cssnano-utils@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /cssnano@5.1.15(postcss@8.4.38): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.4.38) + lilconfig: 2.1.0 + postcss: 8.4.38 + yaml: 1.10.2 + dev: true + + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} dev: true @@ -14854,6 +15882,9 @@ packages: /csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + /csv-generate@3.4.3: resolution: {integrity: sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==} dev: true @@ -14912,8 +15943,8 @@ packages: es-errors: 1.3.0 is-data-view: 1.0.1 - /dataloader@2.2.2: - resolution: {integrity: sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g==} + /dataloader@2.2.3: + resolution: {integrity: sha512-y2krtASINtPFS1rSDjacrFgn1dcUuoREVabwlOGOe4SdxenREqwjwjElAdwvbGM7kgZz9a3KVicWR7vcz8rnzA==} dev: false /dateformat@4.6.3: @@ -15118,6 +16149,12 @@ packages: hasBin: true dev: false + /detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + dev: false + optional: true + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -15172,6 +16209,25 @@ packages: dependencies: esutils: 2.0.3 + /dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + dependencies: + '@babel/runtime': 7.26.0 + csstype: 3.1.3 + dev: false + + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + dev: true + + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} @@ -15180,6 +16236,21 @@ packages: webidl-conversions: 7.0.0 dev: true + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.3.0 + dev: true + + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + dev: true + /dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: @@ -15252,6 +16323,7 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: false /elliptic@6.5.7: resolution: {integrity: sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==} @@ -15340,6 +16412,10 @@ packages: ansi-colors: 4.1.3 strip-ansi: 6.0.1 + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -15815,7 +16891,7 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 aria-query: 5.3.0 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 @@ -15881,6 +16957,7 @@ packages: /eslint@8.43.0: resolution: {integrity: sha512-aaCpf2JqqKesMFGgmRPessmVKjcGXqdlAYLLC3THM8t5nBRZRQ+st5WM/hoJXkdioEXLLbXgclUpM0TXo5HX5Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.43.0) @@ -15959,6 +17036,10 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + /estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true @@ -16026,7 +17107,7 @@ packages: '@types/bn.js': 4.11.6 bn.js: 4.12.0 create-hash: 1.2.0 - elliptic: 6.5.5 + elliptic: 6.5.7 ethereum-cryptography: 0.1.3 ethjs-util: 0.1.6 rlp: 2.2.7 @@ -16110,7 +17191,6 @@ packages: /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: false /eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} @@ -16345,6 +17425,10 @@ packages: array-back: 3.1.0 dev: true + /find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + dev: false + /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} @@ -16504,6 +17588,12 @@ packages: /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + /generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} + dependencies: + loader-utils: 3.3.1 + dev: true + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -16665,6 +17755,20 @@ packages: dependencies: define-properties: 1.2.1 + /globby@10.0.1: + resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -16749,7 +17853,7 @@ packages: peerDependencies: hardhat: ^2.0.0 dependencies: - chokidar: 3.6.0 + chokidar: 3.5.3 hardhat: 2.12.7(typescript@5.1.5) dev: false @@ -16758,7 +17862,7 @@ packages: peerDependencies: hardhat: ^2.0.0 dependencies: - chokidar: 3.6.0 + chokidar: 3.5.3 hardhat: 2.22.2(typescript@5.1.5) dev: false @@ -17067,6 +18171,12 @@ packages: minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + dependencies: + react-is: 16.13.1 + dev: false + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -17172,6 +18282,19 @@ packages: dependencies: safer-buffer: 2.1.2 + /icss-replace-symbols@1.1.0: + resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==} + dev: true + + /icss-utils@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + /idb-keyval@6.2.1: resolution: {integrity: sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg==} dev: false @@ -17198,6 +18321,13 @@ packages: /immutable@4.3.4: resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + /import-cwd@3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + /import-fresh@2.0.0: resolution: {integrity: sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==} engines: {node: '>=4'} @@ -17213,6 +18343,13 @@ packages: parent-module: 1.0.1 resolve-from: 4.0.0 + /import-from@3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + /import-local@3.1.0: resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} engines: {node: '>=8'} @@ -17299,6 +18436,11 @@ packages: /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + optional: true + /is-async-function@2.0.0: resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} engines: {node: '>= 0.4'} @@ -17460,6 +18602,11 @@ packages: isobject: 3.0.1 dev: false + /is-plain-object@3.0.1: + resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==} + engines: {node: '>=0.10.0'} + dev: true + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true @@ -17644,7 +18791,7 @@ packages: engines: {node: '>=8'} dependencies: '@babel/core': 7.24.5 - '@babel/parser': 7.24.5 + '@babel/parser': 7.24.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 semver: 7.5.4 @@ -17709,28 +18856,6 @@ packages: optionalDependencies: '@pkgjs/parseargs': 0.11.0 - /jayson@4.1.0: - resolution: {integrity: sha512-R6JlbyLN53Mjku329XoRT2zJAE6ZgOQ8f91ucYdMCD4nkGCF9kZSrcGXpHIU4jeKj58zUZke2p+cdQchU7Ly7A==} - engines: {node: '>=8'} - hasBin: true - dependencies: - '@types/connect': 3.4.35 - '@types/node': 12.20.55 - '@types/ws': 7.4.7 - JSONStream: 1.3.5 - commander: 2.20.3 - delay: 5.0.0 - es6-promisify: 5.0.0 - eyes: 0.1.8 - isomorphic-ws: 4.0.1(ws@8.17.1) - json-stringify-safe: 5.0.1 - uuid: 8.3.2 - ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: false - /jayson@4.1.1: resolution: {integrity: sha512-5ZWm4Q/0DHPyeMfAsrwViwUS2DMVsQgWh8bEEIVTkfb3DzHZ2L3G5WUnF+AKmGjjM9r1uAv73SaqC1/U4RL45w==} engines: {node: '>=8'} @@ -18173,7 +19298,7 @@ packages: '@babel/generator': 7.24.5 '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.24.5) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/types': 7.24.9 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -18399,8 +19524,8 @@ packages: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.13 - parse5: 7.2.0 + nwsapi: 2.2.16 + parse5: 7.2.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -18437,7 +19562,6 @@ packages: /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true /json-rpc-random-id@1.0.1: resolution: {integrity: sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA==} @@ -18594,6 +19718,10 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 + /libphonenumber-js@1.11.14: + resolution: {integrity: sha512-sexvAfwcW1Lqws4zFp8heAtAEXbEDnvkYCEGzvOoMgZR7JhXo/IkE9MkkGACgBed5fWqh3ShBGnJBdDnU9N8EQ==} + dev: false + /libsodium-sumo@0.7.11: resolution: {integrity: sha512-bY+7ph7xpk51Ez2GbE10lXAQ5sJma6NghcIDaSPbM/G9elfrjLa0COHl/7P6Wb/JizQzl5UQontOOP1z0VwbLA==} dev: false @@ -18660,6 +19788,11 @@ packages: strip-bom: 3.0.0 dev: true + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + dev: true + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} @@ -18702,6 +19835,10 @@ packages: /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -18713,6 +19850,10 @@ packages: resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} dev: false + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: true + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -18794,6 +19935,12 @@ packages: react: 18.3.1 dev: false + /magic-string@0.30.14: + resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true + /make-dir@2.1.0: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} @@ -18839,10 +19986,18 @@ packages: inherits: 2.0.4 safe-buffer: 5.2.1 + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + /memoize-one@5.2.1: resolution: {integrity: sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==} dev: false + /memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + /memory-level@1.0.0: resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} engines: {node: '>=12'} @@ -18984,7 +20139,7 @@ packages: resolution: {integrity: sha512-L0syTWJUdWzfUmKgkScr6fSBVTh6QDr8eKEkRtn40OBd8LPagrJGySBboWSgbyn9eIb4ayW3Y347HxgXBSAjmg==} engines: {node: '>=18'} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dev: false /metro-source-map@0.80.5: @@ -19154,7 +20309,6 @@ packages: resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} engines: {node: '>=10.0.0'} hasBin: true - dev: false /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} @@ -19438,6 +20592,51 @@ packages: - babel-plugin-macros dev: false + /next@15.0.2(@babel/core@7.24.5)(react-dom@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-rxIWHcAu4gGSDmwsELXacqAPUk+j8dV/A9cDF5fsiCMpkBDYkO2AEaL1dfD+nNmDiU6QMCFN8Q30VEKapT9UHQ==} + engines: {node: '>=18.18.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 + react-dom: ^18.2.0 || 19.0.0-rc-02c0e824-20241028 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + dependencies: + '@next/env': 15.0.2 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 + busboy: 1.6.0 + caniuse-lite: 1.0.30001581 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + styled-jsx: 5.1.6(@babel/core@7.24.5)(react@18.2.0) + optionalDependencies: + '@next/swc-darwin-arm64': 15.0.2 + '@next/swc-darwin-x64': 15.0.2 + '@next/swc-linux-arm64-gnu': 15.0.2 + '@next/swc-linux-arm64-musl': 15.0.2 + '@next/swc-linux-x64-gnu': 15.0.2 + '@next/swc-linux-x64-musl': 15.0.2 + '@next/swc-win32-arm64-msvc': 15.0.2 + '@next/swc-win32-x64-msvc': 15.0.2 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + dev: false + /no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: @@ -19549,7 +20748,6 @@ packages: /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} - dev: false /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} @@ -19636,6 +20834,12 @@ packages: - which - write-file-atomic + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + /nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} dev: false @@ -19644,8 +20848,8 @@ packages: resolution: {integrity: sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==} dev: true - /nwsapi@2.2.13: - resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} + /nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} dev: true /ob1@0.80.5: @@ -19848,6 +21052,46 @@ packages: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true + /ox@0.1.2(typescript@5.1.3): + resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.1.3) + eventemitter3: 5.0.1 + typescript: 5.1.3 + transitivePeerDependencies: + - zod + dev: false + + /ox@0.1.2(typescript@5.1.5): + resolution: {integrity: sha512-ak/8K0Rtphg9vnRJlbOdaX9R7cmxD2MiSthjWGaQdMk3D7hrAlDoM+6Lxn7hN52Za3vrXfZ7enfke/5WjolDww==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@adraffy/ens-normalize': 1.11.0 + '@noble/curves': 1.6.0 + '@noble/hashes': 1.5.0 + '@scure/bip32': 1.5.0 + '@scure/bip39': 1.4.0 + abitype: 1.0.6(typescript@5.1.5) + eventemitter3: 5.0.1 + typescript: 5.1.5 + transitivePeerDependencies: + - zod + dev: false + /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -19860,6 +21104,11 @@ packages: p-map: 2.1.0 dev: true + /p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + dev: true + /p-limit@1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} @@ -19914,6 +21163,21 @@ packages: dependencies: aggregate-error: 3.1.0 + /p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + dev: true + + /p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + /p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -19960,10 +21224,9 @@ packages: error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse5@7.2.0: - resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} + /parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} dependencies: entities: 4.5.0 dev: true @@ -20036,6 +21299,11 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} + /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: @@ -20126,86 +21394,404 @@ packages: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} - /postcss-import@14.1.0(postcss@8.4.38): - resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} - engines: {node: '>=10.0.0'} + /postcss-calc@8.2.4(postcss@8.4.38): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@5.3.1(postcss@8.4.38): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.3 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.3 + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-duplicates@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-empty@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-discard-overridden@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-import@14.1.0(postcss@8.4.38): + resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + /postcss-import@15.1.0(postcss@8.4.38): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.8 + + /postcss-js@4.0.1(postcss@8.4.38): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + dependencies: + camelcase-css: 2.0.1 + postcss: 8.4.38 + + /postcss-load-config@3.1.4(postcss@8.4.38): + resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} + engines: {node: '>= 10'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 2.1.0 + postcss: 8.4.38 + yaml: 1.10.2 + + /postcss-load-config@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + dependencies: + lilconfig: 3.1.2 + postcss: 8.4.38 + yaml: 2.3.4 + + /postcss-merge-longhand@5.1.7(postcss@8.4.38): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + stylehacks: 5.1.1(postcss@8.4.38) + dev: true + + /postcss-merge-rules@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.3 + caniuse-api: 3.0.0 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + dev: true + + /postcss-minify-font-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.9.3 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@5.1.4(postcss@8.4.38): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.3 + cssnano-utils: 3.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@5.2.1(postcss@8.4.38): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + dev: true + + /postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-modules-scope@3.2.0(postcss@8.4.38): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + dev: true + + /postcss-modules-values@4.0.0(postcss@8.4.38): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0(postcss@8.4.38) + postcss: 8.4.38 + dev: true + + /postcss-modules@4.3.1(postcss@8.4.38): + resolution: {integrity: sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 4.0.0 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.4.38 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) + postcss-modules-scope: 3.2.0(postcss@8.4.38) + postcss-modules-values: 4.0.0(postcss@8.4.38) + string-hash: 1.1.3 + dev: true + + /postcss-nested@6.0.0(postcss@8.4.38): + resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + + /postcss-nested@6.2.0(postcss@8.4.38): + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + + /postcss-normalize-charset@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + dev: true + + /postcss-normalize-display-values@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.2.15 dependencies: postcss: 8.4.38 postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 + dev: true - /postcss-import@15.1.0(postcss@8.4.38): - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} + /postcss-normalize-unicode@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.0.0 + postcss: ^8.2.15 dependencies: + browserslist: 4.22.3 postcss: 8.4.38 postcss-value-parser: 4.2.0 - read-cache: 1.0.0 - resolve: 1.22.8 + dev: true - /postcss-js@4.0.1(postcss@8.4.38): - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} - engines: {node: ^12 || ^14 || >= 16} + /postcss-normalize-url@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.4.21 + postcss: ^8.2.15 dependencies: - camelcase-css: 2.0.1 + normalize-url: 6.1.0 postcss: 8.4.38 + postcss-value-parser: 4.2.0 + dev: true - /postcss-load-config@3.1.4(postcss@8.4.38): - resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} - engines: {node: '>= 10'} + /postcss-normalize-whitespace@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss: ^8.2.15 dependencies: - lilconfig: 2.1.0 postcss: 8.4.38 - yaml: 1.10.2 + postcss-value-parser: 4.2.0 + dev: true - /postcss-load-config@4.0.2(postcss@8.4.38): - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} + /postcss-ordered-values@5.1.3(postcss@8.4.38): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true + postcss: ^8.2.15 dependencies: - lilconfig: 3.1.2 + cssnano-utils: 3.1.0(postcss@8.4.38) postcss: 8.4.38 - yaml: 2.3.4 + postcss-value-parser: 4.2.0 + dev: true - /postcss-nested@6.0.0(postcss@8.4.38): - resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} - engines: {node: '>=12.0'} + /postcss-reduce-initial@5.1.2(postcss@8.4.38): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.14 + postcss: ^8.2.15 dependencies: + browserslist: 4.22.3 + caniuse-api: 3.0.0 postcss: 8.4.38 - postcss-selector-parser: 6.1.1 + dev: true - /postcss-nested@6.2.0(postcss@8.4.38): - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} + /postcss-reduce-transforms@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} peerDependencies: - postcss: ^8.2.14 + postcss: ^8.2.15 dependencies: postcss: 8.4.38 - postcss-selector-parser: 6.1.1 + postcss-value-parser: 4.2.0 + dev: true /postcss-selector-parser@6.0.16: resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} @@ -20221,6 +21807,27 @@ packages: cssesc: 3.0.0 util-deprecate: 1.0.2 + /postcss-svgo@5.1.0(postcss@8.4.38): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-value-parser: 4.2.0 + svgo: 2.8.0 + dev: true + + /postcss-unique-selectors@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + dev: true + /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} @@ -20286,7 +21893,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 dev: true /pretty-format@29.7.0: @@ -20295,7 +21902,7 @@ packages: dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} @@ -20309,6 +21916,11 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + /promise.series@0.2.0: + resolution: {integrity: sha512-VWQJyU2bcDTgZw8kpfBpB/ejZASlCrzwz5f2hjb/zlujOEB4oeiAhHygAWq8ubsX2GVkD4kCU5V2dwOTaCY5EQ==} + engines: {node: '>=0.12'} + dev: true + /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: @@ -20371,8 +21983,8 @@ packages: end-of-stream: 1.4.4 once: 1.4.0 - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + /punycode@2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} /pure-rand@6.1.0: @@ -20478,6 +22090,10 @@ packages: resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==} dev: false + /raf-schd@4.0.3: + resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} + dev: false + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: @@ -20514,6 +22130,19 @@ packages: iconv-lite: 0.4.24 unpipe: 1.0.0 + /react-apple-login@1.1.6(prop-types@15.8.1)(react-dom@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-ySV6ax0aB+ksA7lKzhr4MvsgjwSH068VtdHJXS+7rL380IJnNQNl14SszR31k3UqB8q8C1H1oyjJFGq4MyO6tw==} + engines: {node: '>=8', npm: '>=5'} + peerDependencies: + prop-types: ^15.5.4 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + dependencies: + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + dev: false + /react-devtools-core@5.1.0: resolution: {integrity: sha512-NRtLBqYVLrIY+lOa2oTpFiAhI7Hru0AUXI0tP9neCyaPPAzlZyeH0i+VZ0shIyRTJbpvyqbD/uCsewA2hpfZHw==} dependencies: @@ -20546,6 +22175,16 @@ packages: scheduler: 0.23.2 dev: false + /react-dom@18.3.1(react@18.2.0): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.2 + dev: false + /react-dom@18.3.1(react@18.3.1): resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: @@ -20565,6 +22204,14 @@ packages: react: 18.2.0 dev: false + /react-international-phone@4.3.0(react@18.2.0): + resolution: {integrity: sha512-lIntIkwq2j0m3j4RsRiGJl/buHMLBd+mQ9S9RfiX3KbiUCUtbawoPCV2r8BvyeRMZI0cDtovoukBCuZ+70QzJA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -20572,8 +22219,8 @@ packages: resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} dev: false - /react-is@18.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} /react-lifecycles-compat@3.0.4: resolution: {integrity: sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==} @@ -20676,6 +22323,25 @@ packages: webrtc-adapter: 7.7.1 dev: false + /react-redux@9.1.2(@types/react@18.2.14)(react@18.2.0)(redux@5.0.1): + resolution: {integrity: sha512-0OA4dhM1W48l3uzmv6B7TXPCGmokUU4p1M44DGN2/D9a1FjVPukVjER1PcPX97jIg6aUeLq1XJo1IpfbgULn0w==} + peerDependencies: + '@types/react': ^18.2.25 + react: ^18.0 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + dependencies: + '@types/react': 18.2.14 + '@types/use-sync-external-store': 0.0.3 + react: 18.2.0 + redux: 5.0.1 + use-sync-external-store: 1.2.2(react@18.2.0) + dev: false + /react-refresh@0.14.0: resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} engines: {node: '>=0.10.0'} @@ -20758,7 +22424,7 @@ packages: dependencies: object-assign: 4.1.1 react: 18.3.1 - react-is: 18.2.0 + react-is: 18.3.1 dev: false /react-style-singleton@2.2.1(@types/react@18.2.14)(react@18.2.0): @@ -20795,6 +22461,34 @@ packages: tslib: 2.8.1 dev: false + /react-transition-group@4.4.5(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + + /react-transition-group@4.4.5(react-dom@18.3.1)(react@18.2.0): + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + dependencies: + '@babel/runtime': 7.26.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.3.1(react@18.2.0) + dev: false + /react@16.13.1: resolution: {integrity: sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==} engines: {node: '>=0.10.0'} @@ -20923,6 +22617,10 @@ packages: engines: {node: '>=6'} dev: true + /redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + dev: false + /reflect.getprototypeof@1.0.6: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} @@ -20956,7 +22654,7 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.25.6 + '@babel/runtime': 7.26.0 dev: false /regexp.prototype.flags@1.5.2: @@ -21181,6 +22879,17 @@ packages: dependencies: bn.js: 5.2.1 + /rollup-plugin-copy@3.5.0: + resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==} + engines: {node: '>=8.3'} + dependencies: + '@types/fs-extra': 8.1.5 + colorette: 1.4.0 + fs-extra: 8.1.0 + globby: 10.0.1 + is-plain-object: 3.0.1 + dev: true + /rollup-plugin-node-externals@6.1.2(rollup@4.22.4): resolution: {integrity: sha512-2TWan0u0/zHcgPrKpIPgKSY8OMqwDAYD380I0hxx7iUQw8mrN34DWwG9sQUMEo5Yy4xd6/5QEAySYgiKN9fdBQ==} engines: {node: '>=16.0.0'} @@ -21190,6 +22899,45 @@ packages: rollup: 4.22.4 dev: true + /rollup-plugin-postcss@4.0.2(postcss@8.4.38): + resolution: {integrity: sha512-05EaY6zvZdmvPUDi3uCcAQoESDcYnv8ogJJQRp6V5kZ6J6P7uAVJlrTZcaaA20wTH527YTnKfkAoPxWI/jPp4w==} + engines: {node: '>=10'} + peerDependencies: + postcss: 8.x + dependencies: + chalk: 4.1.2 + concat-with-sourcemaps: 1.1.0 + cssnano: 5.1.15(postcss@8.4.38) + import-cwd: 3.0.0 + p-queue: 6.6.2 + pify: 5.0.0 + postcss: 8.4.38 + postcss-load-config: 3.1.4(postcss@8.4.38) + postcss-modules: 4.3.1(postcss@8.4.38) + promise.series: 0.2.0 + resolve: 1.22.8 + rollup-pluginutils: 2.8.2 + safe-identifier: 0.4.2 + style-inject: 0.3.0 + transitivePeerDependencies: + - ts-node + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup-preserve-directives@1.1.2(rollup@4.22.4): + resolution: {integrity: sha512-OOaYh4zO0Dcd/eVWGB8H69CgTiohl+jJqc2TLtjLENVIQaV2rxO3OW6RILzCQOdDvPT+/rzwRp+97OXhem895Q==} + peerDependencies: + rollup: ^2.0.0 || ^3.0.0 || ^4.0.0 + dependencies: + magic-string: 0.30.14 + rollup: 4.22.4 + dev: true + /rollup@4.22.4: resolution: {integrity: sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -21216,18 +22964,6 @@ packages: fsevents: 2.3.3 dev: true - /rpc-websockets@7.5.1: - resolution: {integrity: sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==} - dependencies: - '@babel/runtime': 7.25.6 - eventemitter3: 4.0.7 - uuid: 8.3.2 - ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) - optionalDependencies: - bufferutil: 4.0.7 - utf-8-validate: 5.0.10 - dev: false - /rpc-websockets@9.0.2: resolution: {integrity: sha512-YzggvfItxMY3Lwuax5rC18inhbjJv9Py7JXRHxTIi94JOLrqBsSsUUc5bbl5W6c11tXhdfpDPK0KzBhoGe8jjw==} dependencies: @@ -21295,6 +23031,10 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-identifier@0.4.2: + resolution: {integrity: sha512-6pNbSMW6OhAi9j+N8V+U715yBQsaWJ7eyEUaOrawX+isg5ZxhUlV1NipNtgaKHmFGiABwt+ZF04Ii+3Xjkg+8w==} + dev: true + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} @@ -21311,13 +23051,13 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /salmon-adapter-sdk@1.1.1(@solana/web3.js@1.88.1): + /salmon-adapter-sdk@1.1.1(@solana/web3.js@1.95.8): resolution: {integrity: sha512-28ysSzmDjx2AbotxSggqdclh9MCwlPJUldKkCph48oS5Xtwu0QOg8T9ZRHS2Mben4Y8sTq6VvxXznKssCYFBJA==} peerDependencies: '@solana/web3.js': ^1.44.3 dependencies: - '@project-serum/sol-wallet-adapter': 0.2.6(@solana/web3.js@1.88.1) - '@solana/web3.js': 1.88.1 + '@project-serum/sol-wallet-adapter': 0.2.6(@solana/web3.js@1.95.8) + '@solana/web3.js': 1.95.8(encoding@0.1.13) eventemitter3: 4.0.7 dev: false @@ -21476,6 +23216,37 @@ packages: kind-of: 6.0.3 dev: false + /sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + requiresBuild: true + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.5.4 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + dev: false + optional: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -21506,6 +23277,13 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + dependencies: + is-arrayish: 0.3.2 + dev: false + optional: true + /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -21729,6 +23507,11 @@ packages: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} dev: false + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: true + /stack-utils@2.0.6: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} @@ -21792,6 +23575,10 @@ packages: resolution: {integrity: sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==} dev: true + /string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} + dev: true + /string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -21934,6 +23721,10 @@ packages: resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} dev: false + /style-inject@0.3.0: + resolution: {integrity: sha512-IezA2qp+vcdlhJaVm5SOdPPTUu0FCEqfNSli2vRuSIBbu5Nq5UvygTk/VzeCqfLz2Atj3dVII5QBKGZRZ0edzw==} + dev: true + /styled-jsx@5.1.1(@babel/core@7.24.5)(react@18.2.0): resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} engines: {node: '>= 12.0.0'} @@ -21970,6 +23761,39 @@ packages: react: 18.3.1 dev: false + /styled-jsx@5.1.6(@babel/core@7.24.5)(react@18.2.0): + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + dependencies: + '@babel/core': 7.24.5 + client-only: 0.0.1 + react: 18.2.0 + dev: false + + /stylehacks@5.1.1(postcss@8.4.38): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.22.3 + postcss: 8.4.38 + postcss-selector-parser: 6.1.1 + dev: true + + /stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + /sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} engines: {node: '>=16 || 14 >=14.17'} @@ -21985,10 +23809,7 @@ packages: /sudo-prompt@9.2.1: resolution: {integrity: sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==} - dev: false - - /superstruct@0.14.2: - resolution: {integrity: sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. dev: false /superstruct@0.15.5: @@ -22026,6 +23847,20 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 4.3.0 + css-tree: 1.1.3 + csso: 4.2.0 + picocolors: 1.0.0 + stable: 0.1.8 + dev: true + /symbol-observable@2.0.3: resolution: {integrity: sha512-sQV7phh2WCYAn81oAkakC5qjq2Ml0g8ozqz03wOGnx9dDlG1de6yrF+0RAzSJD8fPUow3PTSMf2SAbOGxb93BA==} engines: {node: '>=0.10'} @@ -22124,7 +23959,7 @@ packages: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 - chokidar: 3.6.0 + chokidar: 3.5.3 didyoumean: 1.2.2 dlv: 1.1.3 fast-glob: 3.3.2 @@ -22141,7 +23976,7 @@ packages: postcss-js: 4.0.1(postcss@8.4.38) postcss-load-config: 4.0.2(postcss@8.4.38) postcss-nested: 6.2.0(postcss@8.4.38) - postcss-selector-parser: 6.1.1 + postcss-selector-parser: 6.0.16 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -22299,7 +24134,7 @@ packages: engines: {node: '>=6'} dependencies: psl: 1.9.0 - punycode: 2.3.1 + punycode: 2.3.0 universalify: 0.2.0 url-parse: 1.5.10 dev: true @@ -22311,7 +24146,7 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} dependencies: - punycode: 2.3.1 + punycode: 2.3.0 dev: true /treeify@1.1.0: @@ -22770,7 +24605,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.1 + punycode: 2.3.0 /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} @@ -22819,6 +24654,14 @@ packages: tslib: 2.8.1 dev: false + /use-memo-one@1.1.3(react@18.2.0): + resolution: {integrity: sha512-g66/K7ZQGYrI6dy8GLpVcMsBp4s17xNkYJVSMvTEevGy3nDxHOfE6z8BVE22+5G5x7t3+bhzrlTDB7ObrEE0cQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /use-sidecar@1.1.2(@types/react@18.2.14)(react@18.2.0): resolution: {integrity: sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==} engines: {node: '>=10'} @@ -22851,6 +24694,14 @@ packages: tslib: 2.8.1 dev: false + /use-sync-external-store@1.2.2(react@18.2.0): + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /usehooks-ts@3.1.0(react@18.2.0): resolution: {integrity: sha512-bBIa7yUyPhE1BCc0GmR96VU/15l/9gP1Ch5mYdLcFBaFGQsdmXkvjV0TtOqW1yUd6VjIwDunm+flSciCQXujiw==} engines: {node: '>=16.15.0'} @@ -22999,30 +24850,6 @@ packages: - zod dev: false - /viem@2.21.29(typescript@5.1.3): - resolution: {integrity: sha512-n9LoCJjmI1XsE33nl+M4p3Wy5hczv7YC682RpX4Qk9cw8s9HJU+hUi5eDcNDPBcAwIHGCPKsf8yFBEYnE2XYVg==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@adraffy/ens-normalize': 1.11.0 - '@noble/curves': 1.6.0 - '@noble/hashes': 1.5.0 - '@scure/bip32': 1.5.0 - '@scure/bip39': 1.4.0 - abitype: 1.0.6(typescript@5.1.3) - isows: 1.0.6(ws@8.17.1) - typescript: 5.1.3 - webauthn-p256: 0.0.10 - ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - zod - dev: false - /viem@2.21.29(typescript@5.1.5): resolution: {integrity: sha512-n9LoCJjmI1XsE33nl+M4p3Wy5hczv7YC682RpX4Qk9cw8s9HJU+hUi5eDcNDPBcAwIHGCPKsf8yFBEYnE2XYVg==} peerDependencies: @@ -23071,21 +24898,21 @@ packages: - zod dev: false - /viem@2.21.35(typescript@5.1.3): - resolution: {integrity: sha512-f3EFc5JILeA9veuNymUN8HG/nKP9ykC0NCgwFrZWuxcCc822GaP0IEnkRBsHGqmjwbz//FxJFmvtx7TBcdVs0A==} + /viem@2.21.48(typescript@5.1.3): + resolution: {integrity: sha512-/hBHyG1gdIIuiQv0z9YmzXl5eWJa0UCZGwkeuQzH2Bmg6FIEwZeEcxgiytXZydip+p2wMBFa1jdr7o5O1+mrIg==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@scure/bip32': 1.5.0 '@scure/bip39': 1.4.0 abitype: 1.0.6(typescript@5.1.3) isows: 1.0.6(ws@8.17.1) + ox: 0.1.2(typescript@5.1.3) typescript: 5.1.3 webauthn-p256: 0.0.10 ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10) @@ -23095,21 +24922,21 @@ packages: - zod dev: false - /viem@2.21.35(typescript@5.1.5): - resolution: {integrity: sha512-f3EFc5JILeA9veuNymUN8HG/nKP9ykC0NCgwFrZWuxcCc822GaP0IEnkRBsHGqmjwbz//FxJFmvtx7TBcdVs0A==} + /viem@2.21.48(typescript@5.1.5): + resolution: {integrity: sha512-/hBHyG1gdIIuiQv0z9YmzXl5eWJa0UCZGwkeuQzH2Bmg6FIEwZeEcxgiytXZydip+p2wMBFa1jdr7o5O1+mrIg==} peerDependencies: typescript: '>=5.0.4' peerDependenciesMeta: typescript: optional: true dependencies: - '@adraffy/ens-normalize': 1.11.0 '@noble/curves': 1.6.0 '@noble/hashes': 1.5.0 '@scure/bip32': 1.5.0 '@scure/bip39': 1.4.0 abitype: 1.0.6(typescript@5.1.5) isows: 1.0.6(ws@8.17.1) + ox: 0.1.2(typescript@5.1.5) typescript: 5.1.5 webauthn-p256: 0.0.10 ws: 8.17.1(bufferutil@4.0.7)(utf-8-validate@5.0.10)