diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..734f5f518 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,34 @@ +name: Lint + +on: + pull_request: + push: + branches: + - development + - staging + - production + - mainnet + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 20 + cache: "npm" + - run: npm ci + - run: npm run lint:ci + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 20 + cache: "npm" + - run: npm ci + - run: npm run build diff --git a/.github/workflows/wormhole-connect.yml b/.github/workflows/wormhole-connect.yml deleted file mode 100644 index 7803344ea..000000000 --- a/.github/workflows/wormhole-connect.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: Run tests - -on: [push, pull_request] - -jobs: - lint: - runs-on: ubuntu-latest - - steps: - - name: Lint - run: npm run lint - - test: - runs-on: ubuntu-latest - - steps: - - name: Test - run: npm run test diff --git a/.prettierignore b/.prettierignore index 59745b70d..ff4c822fc 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,3 @@ dist build *.md -builder -wormhole-connect-loader \ No newline at end of file diff --git a/builder/package.json b/builder/package.json index 5a5a15388..4080073ab 100644 --- a/builder/package.json +++ b/builder/package.json @@ -22,6 +22,7 @@ "web-vitals": "^2.1.4" }, "scripts": { + "lint:ci": "prettier -c ./src && eslint --max-warnings=0 ./src", "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test", diff --git a/builder/src/App.test.tsx b/builder/src/App.test.tsx index 2a68616d9..d76787ed6 100644 --- a/builder/src/App.test.tsx +++ b/builder/src/App.test.tsx @@ -1,8 +1,8 @@ -import React from 'react'; -import { render, screen } from '@testing-library/react'; -import App from './App'; +import React from "react"; +import { render, screen } from "@testing-library/react"; +import App from "./App"; -test('renders learn react link', () => { +test("renders learn react link", () => { render(); const linkElement = screen.getByText(/learn react/i); expect(linkElement).toBeInTheDocument(); diff --git a/builder/src/App.tsx b/builder/src/App.tsx index d4aa374a7..a4630e26c 100644 --- a/builder/src/App.tsx +++ b/builder/src/App.tsx @@ -1,32 +1,35 @@ -import React from 'react'; -import { copyTextToClipboard } from './utils'; -import Background from './Background'; -import { makeStyles } from 'tss-react/mui'; -import WormholeBridge, { defaultTheme, WormholeConnectConfig } from '@wormhole-foundation/wormhole-connect'; +import React from "react"; +import { copyTextToClipboard } from "./utils"; +import Background from "./Background"; +import { makeStyles } from "tss-react/mui"; +import WormholeBridge, { + defaultTheme, + WormholeConnectConfig, +} from "@wormhole-foundation/wormhole-connect"; const useStyles = makeStyles()(() => ({ appContent: { - paddingBottom: '60px', + paddingBottom: "60px", }, title: { - marginTop: '60px', - textAlign: 'center', - marginBottom: '16px', - color: 'white', + marginTop: "60px", + textAlign: "center", + marginBottom: "16px", + color: "white", }, copy: { - padding: '16px', - backgroundColor: 'rgba(255,255,255,0.05)', - border: '1px solid rgba(255,255,255,0.3)', - borderRadius: '8px', - maxWidth: '150px', - margin: 'auto', - cursor: 'pointer', - display: 'flex', - justifyContent: 'center', - color: 'white', - } -})) + padding: "16px", + backgroundColor: "rgba(255,255,255,0.05)", + border: "1px solid rgba(255,255,255,0.3)", + borderRadius: "8px", + maxWidth: "150px", + margin: "auto", + cursor: "pointer", + display: "flex", + justifyContent: "center", + color: "white", + }, +})); function App() { const { classes } = useStyles(); @@ -34,14 +37,14 @@ function App() {
- ` + `; const customized = defaultTheme; - customized.background.default = 'transparent'; + customized.background.default = "transparent"; const config: WormholeConnectConfig = { - mode: 'dark', + mode: "dark", customTheme: customized, - networks: ['goerli', 'alfajores', 'fuji'] - } + networks: ["goerli", "alfajores", "fuji"], + }; return (
diff --git a/builder/src/Background.tsx b/builder/src/Background.tsx index 7b74dc995..090f6014c 100644 --- a/builder/src/Background.tsx +++ b/builder/src/Background.tsx @@ -1,31 +1,31 @@ -import React from 'react'; -import { makeStyles } from 'tss-react/mui'; +import React from "react"; +import { makeStyles } from "tss-react/mui"; import bg from "./bg.svg"; -import { OPACITY } from './theme'; +import { OPACITY } from "./theme"; const colors = { - bg: '#030712', - purple: '#3B234E', - blue: '#302A60', - pink: '#5A1E46', -} + bg: "#030712", + purple: "#3B234E", + blue: "#302A60", + pink: "#5A1E46", +}; const useStyles = makeStyles()((theme) => ({ container: { backgroundColor: `${colors.bg} !important`, - width: '100%', + width: "100%", minHeight: "100vh", - height: '100%', - zIndex: '-2', + height: "100%", + zIndex: "-2", }, bg: { display: "flex", flexDirection: "column", position: "relative", overflow: "hidden", - width: '100%', + width: "100%", height: "100%", - minHeight: '100vh', + minHeight: "100vh", overscrollBehaviorY: "none", backgroundImage: `url(${bg})`, backgroundPosition: "top center", @@ -34,8 +34,8 @@ const useStyles = makeStyles()((theme) => ({ }, background: { position: "absolute", - width: '100%', - height: '100%', + width: "100%", + height: "100%", top: 0, bottom: 0, left: 0, @@ -50,8 +50,7 @@ const useStyles = makeStyles()((theme) => ({ right: "-1000px", width: "1757px", height: "1506px", - background: - `radial-gradient(closest-side at 50% 50%, ${colors.blue} 0%, ${colors.blue}00 100%)`, + background: `radial-gradient(closest-side at 50% 50%, ${colors.blue} 0%, ${colors.blue}00 100%)`, opacity: "0.5", transform: "matrix(0.87, 0.48, -0.48, 0.87, 0, 0)", zIndex: "-1", @@ -66,8 +65,7 @@ const useStyles = makeStyles()((theme) => ({ width: "1379px", height: "1378px", position: "absolute", - background: - `radial-gradient(closest-side at 50% 50%, ${colors.pink}${OPACITY[60]} 0%, ${colors.pink}00 100%)`, + background: `radial-gradient(closest-side at 50% 50%, ${colors.pink}${OPACITY[60]} 0%, ${colors.pink}00 100%)`, opacity: "0.5", zIndex: "-1", pointerEvent: "none", @@ -78,8 +76,7 @@ const useStyles = makeStyles()((theme) => ({ width: "1379px", height: "1378px", position: "absolute", - background: - `radial-gradient(closest-side at 50% 50%, ${colors.purple} 0%, ${colors.purple}00 100%)`, + background: `radial-gradient(closest-side at 50% 50%, ${colors.purple} 0%, ${colors.purple}00 100%)`, opacity: "0.5", zIndex: "-1", pointerEvent: "none", @@ -93,8 +90,7 @@ const useStyles = makeStyles()((theme) => ({ right: "-1000px", width: "1757px", height: "1506px", - background: - `radial-gradient(closest-side at 50% 50%, ${colors.purple} 0%, ${colors.purple}00 100%)`, + background: `radial-gradient(closest-side at 50% 50%, ${colors.purple} 0%, ${colors.purple}00 100%)`, opacity: "0.5", transform: "matrix(0.87, 0.48, -0.48, 0.87, 0, 0);", zIndex: "-1", @@ -103,11 +99,11 @@ const useStyles = makeStyles()((theme) => ({ display: "none", }, }, -})) +})); type Props = { - children: React.ReactNode | React.ReactNode[] -} + children: React.ReactNode | React.ReactNode[]; +}; function Background({ children }: Props) { const { classes } = useStyles(); diff --git a/builder/src/index.css b/builder/src/index.css index ec2585e8c..4a1df4db7 100644 --- a/builder/src/index.css +++ b/builder/src/index.css @@ -1,13 +1,13 @@ body { margin: 0; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", + "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } code { - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', + font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", monospace; } diff --git a/builder/src/index.tsx b/builder/src/index.tsx index 032464fb6..ccbac81f4 100644 --- a/builder/src/index.tsx +++ b/builder/src/index.tsx @@ -1,11 +1,11 @@ -import React from 'react'; -import ReactDOM from 'react-dom/client'; -import './index.css'; -import App from './App'; -import reportWebVitals from './reportWebVitals'; +import React from "react"; +import ReactDOM from "react-dom/client"; +import "./index.css"; +import App from "./App"; +import reportWebVitals from "./reportWebVitals"; const root = ReactDOM.createRoot( - document.getElementById('root') as HTMLElement + document.getElementById("root") as HTMLElement ); root.render( diff --git a/builder/src/reportWebVitals.ts b/builder/src/reportWebVitals.ts index 49a2a16e0..5fa3583b7 100644 --- a/builder/src/reportWebVitals.ts +++ b/builder/src/reportWebVitals.ts @@ -1,8 +1,8 @@ -import { ReportHandler } from 'web-vitals'; +import { ReportHandler } from "web-vitals"; const reportWebVitals = (onPerfEntry?: ReportHandler) => { if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { + import("web-vitals").then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { getCLS(onPerfEntry); getFID(onPerfEntry); getFCP(onPerfEntry); diff --git a/builder/src/theme.ts b/builder/src/theme.ts index e0b1af40f..1c8e4de55 100644 --- a/builder/src/theme.ts +++ b/builder/src/theme.ts @@ -1,59 +1,52 @@ -import { Theme } from '@wormhole-foundation/wormhole-connect'; -import { - grey, - green, - orange, - red, - cyan, - purple, -} from '@mui/material/colors'; +import { Theme } from "@wormhole-foundation/wormhole-connect"; +import { grey, green, orange, red, cyan, purple } from "@mui/material/colors"; export const OPACITY = { - 0: '00', - 5: '0C', - 7: '0F', - 10: '19', - 15: '26', - 20: '33', - 25: '3F', - 30: '4C', - 35: '59', - 40: '66', - 45: '72', - 50: '7F', - 55: '8C', - 60: '99', - 65: 'A5', - 70: 'B2', - 75: 'BF', - 80: 'CC', - 85: 'D8', - 90: 'E5', - 95: 'F2', - 100: 'FF', + 0: "00", + 5: "0C", + 7: "0F", + 10: "19", + 15: "26", + 20: "33", + 25: "3F", + 30: "4C", + 35: "59", + 40: "66", + 45: "72", + 50: "7F", + 55: "8C", + 60: "99", + 65: "A5", + 70: "B2", + 75: "BF", + 80: "CC", + 85: "D8", + 90: "E5", + 95: "F2", + 100: "FF", }; export const light: Theme = { primary: { - 50: '#161718', - 100: '#2d2e30', - 200: '#444548', - 300: '#5b5c60', - 400: '#727479', - 500: '#898b91', - 600: '#a0a2a9', - 700: '#b7b9c1', - 800: '#ced0d9', - 900: '#E5E8F2', - A100: '#ceced1', - A200: '#9d9ea4', - A400: '#535660', - A700: '#0a0e1c', + 50: "#161718", + 100: "#2d2e30", + 200: "#444548", + 300: "#5b5c60", + 400: "#727479", + 500: "#898b91", + 600: "#a0a2a9", + 700: "#b7b9c1", + 800: "#ced0d9", + 900: "#E5E8F2", + A100: "#ceced1", + A200: "#9d9ea4", + A400: "#535660", + A700: "#0a0e1c", }, secondary: grey, - divider: '#a0a2a9', + divider: "#a0a2a9", background: { - default: '#E5E8F2', + default: "#E5E8F2", }, text: { primary: grey[900], @@ -61,48 +54,48 @@ export const light: Theme = { }, error: red, info: { - 50: '#d1e3f9', - 100: '#c8def7', - 200: '#bfd8f6', - 300: '#b6d3f5', - 400: '#adcdf4', - 500: '#A4C8F3', - 600: '#93b4da', - 700: '#83a0c2', - 800: '#728caa', - 900: '#627891', - A100: '#A4C8F3', - A200: '#A4C8F3', - A400: '#A4C8F3', - A700: '#A4C8F3', + 50: "#d1e3f9", + 100: "#c8def7", + 200: "#bfd8f6", + 300: "#b6d3f5", + 400: "#adcdf4", + 500: "#A4C8F3", + 600: "#93b4da", + 700: "#83a0c2", + 800: "#728caa", + 900: "#627891", + A100: "#A4C8F3", + A200: "#A4C8F3", + A400: "#A4C8F3", + A700: "#A4C8F3", }, success: green, warning: orange, button: { - primary: '#ffffff', + primary: "#ffffff", primaryText: grey[900], - disabled: '#c8cad1', + disabled: "#c8cad1", disabledText: grey[800], - action: '#F3A01E', - actionText: '#000000', - hover: '#b7b9c1', + action: "#F3A01E", + actionText: "#000000", + hover: "#b7b9c1", }, options: { - hover: '#f9f9fb', - select: '#F0F0F5', + hover: "#f9f9fb", + select: "#F0F0F5", }, card: { - background: '#ffffff', - elevation: '10px 10px 30px 15px #CCD2E7', - secondary: '#F0F0F5', + background: "#ffffff", + elevation: "10px 10px 30px 15px #CCD2E7", + secondary: "#F0F0F5", }, popover: { - background: '#ffffff', - elevation: '10px 10px 30px 15px #CCD2E7', - secondary: '#F0F0F5', + background: "#ffffff", + elevation: "10px 10px 30px 15px #CCD2E7", + secondary: "#F0F0F5", }, modal: { - background: '#ffffff', + background: "#ffffff", }, font: { primary: '"Inter", sans-serif', @@ -113,12 +106,12 @@ export const light: Theme = { export const dark: Theme = { primary: grey, secondary: grey, - divider: '#ffffff' + OPACITY[20], + divider: "#ffffff" + OPACITY[20], background: { - default: '#212121', + default: "#212121", }, text: { - primary: '#ffffff', + primary: "#ffffff", secondary: grey[500], }, error: red, @@ -126,30 +119,30 @@ export const dark: Theme = { success: green, warning: orange, button: { - primary: '#ffffff' + OPACITY[20], - primaryText: '#ffffff', - disabled: '#ffffff' + OPACITY[10], - disabledText: '#ffffff' + OPACITY[40], + primary: "#ffffff" + OPACITY[20], + primaryText: "#ffffff", + disabled: "#ffffff" + OPACITY[10], + disabledText: "#ffffff" + OPACITY[40], action: purple[400], - actionText: '#000000', - hover: '#ffffff' + OPACITY[7], + actionText: "#000000", + hover: "#ffffff" + OPACITY[7], }, options: { - hover: '#373737', - select: '#3F3F3F', + hover: "#373737", + select: "#3F3F3F", }, card: { - background: '#2F2F2F', - secondary: '#474747', - elevation: 'none', + background: "#2F2F2F", + secondary: "#474747", + elevation: "none", }, popover: { - background: '#111111', - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#111111", + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, modal: { - background: '#2d2d2d', + background: "#2d2d2d", }, font: { primary: '"Inter", sans-serif', @@ -160,89 +153,89 @@ export const dark: Theme = { export const custom: Theme = { primary: grey, secondary: grey, - divider: '#ffffff' + OPACITY[20], + divider: "#ffffff" + OPACITY[20], background: { - default: 'transparent', + default: "transparent", }, text: { - primary: '#ffffff', + primary: "#ffffff", secondary: grey[500], }, error: red, info: { - 50: '#97a5b7', - 100: '#8293a9', - 200: '#6e819a', - 300: '#596f8c', - 400: '#445d7e', - 500: '#304C70', - 600: '#2b4464', - 700: '#263c59', - 800: '#21354e', - 900: '#1c2d43', - A100: '#304C70', - A200: '#304C70', - A400: '#304C70', - A700: '#304C70', + 50: "#97a5b7", + 100: "#8293a9", + 200: "#6e819a", + 300: "#596f8c", + 400: "#445d7e", + 500: "#304C70", + 600: "#2b4464", + 700: "#263c59", + 800: "#21354e", + 900: "#1c2d43", + A100: "#304C70", + A200: "#304C70", + A400: "#304C70", + A700: "#304C70", }, // success: green, success: { - 50: '#66d6cd', - 100: '#4dcfc4', - 200: '#33c8bc', - 300: '#1ac1b4', - 400: '#01BBAC', - 500: '#00a89a', - 600: '#009589', - 700: '#008278', - 800: '#007067', - 900: '#005d56', - A100: '#00a89a', - A200: '#00a89a', - A400: '#00a89a', - A700: '#00a89a', + 50: "#66d6cd", + 100: "#4dcfc4", + 200: "#33c8bc", + 300: "#1ac1b4", + 400: "#01BBAC", + 500: "#00a89a", + 600: "#009589", + 700: "#008278", + 800: "#007067", + 900: "#005d56", + A100: "#00a89a", + A200: "#00a89a", + A400: "#00a89a", + A700: "#00a89a", }, warning: { - 50: '#ffe3a4', - 100: '#ffdd91', - 200: '#ffd77f', - 300: '#ffd26d', - 400: '#ffcc5b', - 500: '#FFC749', - 600: '#e5b341', - 700: '#cc9f3a', - 800: '#b28b33', - 900: '#99772b', - A100: '#FFC749', - A200: '#FFC749', - A400: '#FFC749', - A700: '#FFC749', + 50: "#ffe3a4", + 100: "#ffdd91", + 200: "#ffd77f", + 300: "#ffd26d", + 400: "#ffcc5b", + 500: "#FFC749", + 600: "#e5b341", + 700: "#cc9f3a", + 800: "#b28b33", + 900: "#99772b", + A100: "#FFC749", + A200: "#FFC749", + A400: "#FFC749", + A700: "#FFC749", }, button: { - primary: '#ffffff' + OPACITY[10], - primaryText: '#ffffff', - disabled: '#ffffff' + OPACITY[7], - disabledText: '#ffffff' + OPACITY[40], - action: '#ffffff' + OPACITY[20], - actionText: '#ffffff', - hover: '#ffffff' + OPACITY[7], + primary: "#ffffff" + OPACITY[10], + primaryText: "#ffffff", + disabled: "#ffffff" + OPACITY[7], + disabledText: "#ffffff" + OPACITY[40], + action: "#ffffff" + OPACITY[20], + actionText: "#ffffff", + hover: "#ffffff" + OPACITY[7], }, options: { - hover: '#ffffff' + OPACITY[7], - select: '#ffffff' + OPACITY[10], + hover: "#ffffff" + OPACITY[7], + select: "#ffffff" + OPACITY[10], }, card: { - background: '#ffffff' + OPACITY[5], - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#ffffff" + OPACITY[5], + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, popover: { - background: '#1b2033', - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#1b2033", + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, modal: { - background: '#0F1024', + background: "#0F1024", }, font: { primary: '"Inter", sans-serif', diff --git a/builder/src/utils.js b/builder/src/utils.js index 2f3c107f8..72f5e0d2b 100644 --- a/builder/src/utils.js +++ b/builder/src/utils.js @@ -1,26 +1,26 @@ function fallbackCopyTextToClipboard(text) { - const textArea = document.createElement('textarea') - textArea.value = text + const textArea = document.createElement("textarea"); + textArea.value = text; // Avoid scrolling to bottom - textArea.style.top = '0' - textArea.style.left = '0' - textArea.style.position = 'fixed' + textArea.style.top = "0"; + textArea.style.left = "0"; + textArea.style.position = "fixed"; - document.body.appendChild(textArea) - textArea.focus() - textArea.select() + document.body.appendChild(textArea); + textArea.focus(); + textArea.select(); try { - const successful = document.execCommand('copy') - const msg = successful ? 'successful' : 'unsuccessful' - console.log('Fallback: Copying text command was ' + msg) - document.body.removeChild(textArea) - return true + const successful = document.execCommand("copy"); + const msg = successful ? "successful" : "unsuccessful"; + console.log("Fallback: Copying text command was " + msg); + document.body.removeChild(textArea); + return true; } catch (err) { - console.error('Fallback: Oops, unable to copy', err) - document.body.removeChild(textArea) - return false + console.error("Fallback: Oops, unable to copy", err); + document.body.removeChild(textArea); + return false; } } @@ -28,14 +28,14 @@ export async function copyTextToClipboard(text) { if (navigator.clipboard) { return await navigator.clipboard.writeText(text).then( function () { - console.log('Async: Copying to clipboard was successful!') - return true + console.log("Async: Copying to clipboard was successful!"); + return true; }, function (err) { - console.error('Async: Could not copy text: ', err) - return fallbackCopyTextToClipboard(text) + console.error("Async: Could not copy text: ", err); + return fallbackCopyTextToClipboard(text); } - ) + ); } - return fallbackCopyTextToClipboard(text) + return fallbackCopyTextToClipboard(text); } diff --git a/builder/src/wormhole-config.json b/builder/src/wormhole-config.json index 1a28c63ea..b9f16b3fa 100644 --- a/builder/src/wormhole-config.json +++ b/builder/src/wormhole-config.json @@ -1,4 +1,17 @@ { "networks": ["goerli", "bsc", "fuji", "fantom", "alfajores", "solana"], - "tokens": ["ETH", "WETH", "USDC", "MATIC", "WMATIC", "BNB", "WBNB", "AVAX", "WAVAX", "FTM", "WFTM", "CELO"] + "tokens": [ + "ETH", + "WETH", + "USDC", + "MATIC", + "WMATIC", + "BNB", + "WBNB", + "AVAX", + "WAVAX", + "FTM", + "WFTM", + "CELO" + ] } diff --git a/package-lock.json b/package-lock.json index c16b100f2..2324ee40a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,9 +6,10 @@ "": { "name": "wormhole-foundation", "workspaces": [ - "wormhole-connect", "sdk", - "builder" + "wormhole-connect", + "builder", + "wormhole-connect-loader" ], "dependencies": { "tss-react": "^4.7.7" @@ -42,6 +43,18 @@ "web-vitals": "^2.1.4" } }, + "builder/node_modules/@wormhole-foundation/wormhole-connect": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@wormhole-foundation/wormhole-connect/-/wormhole-connect-0.0.4.tgz", + "integrity": "sha512-txm+8XDO1veJK/zydgm141QfjY9zCw7eWJ7tMpXWgheaqtPrMMOY6q+x3+iCVnuL4gbdUsf2Je8GheGq8sLohg==", + "dependencies": { + "@mui/material": "^5.12.1" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, "node_modules/@adobe/css-tools": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.2.0.tgz", @@ -2640,6 +2653,15 @@ "postcss-selector-parser": "^6.0.10" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@emotion/babel-plugin": { "version": "11.10.6", "license": "MIT", @@ -10421,18 +10443,54 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@wormhole-foundation/wormhole-connect": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@wormhole-foundation/wormhole-connect/-/wormhole-connect-0.0.4.tgz", - "integrity": "sha512-txm+8XDO1veJK/zydgm141QfjY9zCw7eWJ7tMpXWgheaqtPrMMOY6q+x3+iCVnuL4gbdUsf2Je8GheGq8sLohg==", - "dependencies": { - "@mui/material": "^5.12.1" + "node_modules/@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "engines": { + "node": ">=14.15.0" }, "peerDependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" + "webpack": "5.x.x", + "webpack-cli": "5.x.x" } }, + "node_modules/@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + } + }, + "node_modules/@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "engines": { + "node": ">=14.15.0" + }, + "peerDependencies": { + "webpack": "5.x.x", + "webpack-cli": "5.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/@wormhole-foundation/wormhole-connect": { + "resolved": "wormhole-connect-loader", + "link": true + }, "node_modules/@wormhole-foundation/wormhole-connect-app": { "resolved": "wormhole-connect", "link": true @@ -12414,6 +12472,20 @@ "node": ">=0.8" } }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/clone-response": { "version": "1.0.3", "license": "MIT", @@ -14011,6 +14083,18 @@ "node": ">=8.0.0" } }, + "node_modules/envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/errno": { "version": "0.1.8", "license": "MIT", @@ -16094,6 +16178,15 @@ "version": "1.0.0", "license": "MIT" }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, "node_modules/fastq": { "version": "1.15.0", "license": "ISC", @@ -17719,6 +17812,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "license": "MIT" @@ -17871,6 +17976,15 @@ "version": "2.0.0", "license": "ISC" }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/isomorphic-ws": { "version": "4.0.1", "license": "MIT", @@ -27033,6 +27147,18 @@ "buffer": "6.0.3" } }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "license": "MIT", @@ -28516,6 +28642,128 @@ "version": "4.0.0", "license": "ISC" }, + "node_modules/ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ts-loader/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/tsconfig-paths": { "version": "3.14.2", "license": "MIT", @@ -29663,6 +29911,81 @@ } } }, + "node_modules/webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "dependencies": { + "resolve": "^1.20.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, "node_modules/webpack-dev-middleware": { "version": "5.3.3", "license": "MIT", @@ -29896,6 +30219,19 @@ "node": ">=10.13.0" } }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/webpack-sources": { "version": "3.2.3", "license": "MIT", @@ -30062,6 +30398,12 @@ "bs58check": "<3.0.0" } }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "node_modules/word-wrap": { "version": "1.2.3", "license": "MIT", @@ -31136,6 +31478,216 @@ "react-dom": "^18.2.0" } }, + "wormhole-connect-loader": { + "version": "0.0.12", + "license": "ISC", + "dependencies": { + "@mui/material": "^5.12.1" + }, + "devDependencies": { + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.23", + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "babel-loader": "^9.1.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "ts-loader": "^9.4.2", + "typescript": "^4.9.5", + "webpack": "^5.79.0", + "webpack-cli": "^5.0.1" + }, + "peerDependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0" + } + }, + "wormhole-connect-loader/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "wormhole-connect-loader/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "wormhole-connect-loader/node_modules/babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "dependencies": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "wormhole-connect-loader/node_modules/find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "dependencies": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "wormhole-connect-loader/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "wormhole-connect-loader/node_modules/pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "dependencies": { + "find-up": "^6.3.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "wormhole-connect-loader/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "wormhole-connect-loader/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "wormhole-connect/node_modules/@blocto/sdk": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@blocto/sdk/-/sdk-0.3.6.tgz", @@ -32996,6 +33548,12 @@ "version": "2.2.0", "requires": {} }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, "@emotion/babel-plugin": { "version": "11.10.6", "requires": { @@ -38480,12 +39038,164 @@ "@xtuc/long": "4.2.2" } }, + "@webpack-cli/configtest": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", + "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", + "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", + "dev": true, + "requires": {} + }, + "@webpack-cli/serve": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", + "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", + "dev": true, + "requires": {} + }, "@wormhole-foundation/wormhole-connect": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@wormhole-foundation/wormhole-connect/-/wormhole-connect-0.0.4.tgz", - "integrity": "sha512-txm+8XDO1veJK/zydgm141QfjY9zCw7eWJ7tMpXWgheaqtPrMMOY6q+x3+iCVnuL4gbdUsf2Je8GheGq8sLohg==", + "version": "file:wormhole-connect-loader", "requires": { - "@mui/material": "^5.12.1" + "@mui/material": "^5.12.1", + "@testing-library/jest-dom": "^5.16.5", + "@testing-library/react": "^13.4.0", + "@testing-library/user-event": "^13.5.0", + "@types/jest": "^27.5.2", + "@types/node": "^16.18.23", + "@types/react": "^18.0.37", + "@types/react-dom": "^18.0.11", + "babel-loader": "^9.1.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "ts-loader": "^9.4.2", + "typescript": "^4.9.5", + "webpack": "^5.79.0", + "webpack-cli": "^5.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "babel-loader": { + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", + "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==", + "dev": true, + "requires": { + "find-cache-dir": "^4.0.0", + "schema-utils": "^4.0.0" + } + }, + "find-cache-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz", + "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==", + "dev": true, + "requires": { + "common-path-prefix": "^3.0.0", + "pkg-dir": "^7.0.0" + } + }, + "find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "requires": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "requires": { + "p-locate": "^6.0.0" + } + }, + "p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "requires": { + "yocto-queue": "^1.0.0" + } + }, + "p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "requires": { + "p-limit": "^4.0.0" + } + }, + "path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true + }, + "pkg-dir": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz", + "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==", + "dev": true, + "requires": { + "find-up": "^6.3.0" + } + }, + "schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + } + }, + "yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true + } } }, "@wormhole-foundation/wormhole-connect-app": { @@ -40495,6 +41205,17 @@ "clone": { "version": "2.1.2" }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "clone-response": { "version": "1.0.3", "requires": { @@ -41490,6 +42211,12 @@ "cross-spawn": "^7.0.0" } }, + "envinfo": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", + "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "dev": true + }, "errno": { "version": "0.1.8", "requires": { @@ -43005,6 +43732,12 @@ "fast-stable-stringify": { "version": "1.0.0" }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, "fastq": { "version": "1.15.0", "requires": { @@ -43939,6 +44672,15 @@ "is-plain-obj": { "version": "3.0.0" }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, "is-potential-custom-element-name": { "version": "1.0.1" }, @@ -44020,6 +44762,12 @@ "isexe": { "version": "2.0.0" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, "isomorphic-ws": { "version": "4.0.1", "requires": {} @@ -49712,6 +50460,15 @@ "buffer": "6.0.3" } }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "requires": { + "kind-of": "^6.0.2" + } + }, "shebang-command": { "version": "2.0.0", "requires": { @@ -50663,6 +51420,93 @@ } } }, + "ts-loader": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.4.tgz", + "integrity": "sha512-MLukxDHBl8OJ5Dk3y69IsKVFRA/6MwzEqBgh+OXMPB/OD01KQuWPFd1WAQP8a5PeSCAxfnkhiuWqfmFJzJQt9w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, "tsconfig-paths": { "version": "3.14.2", "requires": { @@ -51458,6 +52302,50 @@ "webpack-sources": "^3.2.3" } }, + "webpack-cli": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^2.1.1", + "@webpack-cli/info": "^2.0.2", + "@webpack-cli/serve": "^2.0.5", + "colorette": "^2.0.14", + "commander": "^10.0.1", + "cross-spawn": "^7.0.3", + "envinfo": "^7.7.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^5.7.3" + }, + "dependencies": { + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true + }, + "rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", + "dev": true, + "requires": { + "resolve": "^1.20.0" + } + } + } + }, "webpack-dev-middleware": { "version": "5.3.3", "requires": { @@ -51593,6 +52481,16 @@ } } }, + "webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, "webpack-sources": { "version": "3.2.3" }, @@ -51708,6 +52606,12 @@ "bs58check": "<3.0.0" } }, + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, "word-wrap": { "version": "1.2.3" }, @@ -51947,6 +52851,16 @@ "tss-react": "^4.8.2", "typescript": "^4.9.5", "web-vitals": "^2.1.4" + }, + "dependencies": { + "@wormhole-foundation/wormhole-connect": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/@wormhole-foundation/wormhole-connect/-/wormhole-connect-0.0.4.tgz", + "integrity": "sha512-txm+8XDO1veJK/zydgm141QfjY9zCw7eWJ7tMpXWgheaqtPrMMOY6q+x3+iCVnuL4gbdUsf2Je8GheGq8sLohg==", + "requires": { + "@mui/material": "^5.12.1" + } + } } }, "wrap-ansi": { diff --git a/package.json b/package.json index c54a3a2fc..d8bb3f620 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,16 @@ "name": "wormhole-foundation", "private": true, "workspaces": [ - "wormhole-connect", "sdk", + "wormhole-connect", + "wormhole-connect-loader", "builder" ], "scripts": { "build": "npm run build --workspaces --if-present", "compile": "npm run compile --workspaces --if-present", "lint": "npm run lint --workspaces --if-present", + "lint:ci": "npm run lint:ci --workspaces --if-present", "wormhole-connect": "npm run workspace @wormhole-foundation/wormhole-connect", "sdk": "npm run workspace @wormhole-foundation/wormhole-connect-sdk", "builder": "npm run workspace wormhole-connect-builder", diff --git a/sdk/package.json b/sdk/package.json index 63cdad61f..0d6c6f4f3 100644 --- a/sdk/package.json +++ b/sdk/package.json @@ -42,12 +42,24 @@ "typescript": "^4.9.4" }, "scripts": { - "lint": "npm run prettier && eslint --fix", + "lint": "npm run prettier && eslint --fix ./src", + "lint:ci": "prettier -c ./src && eslint --max-warnings=0 ./src", "prettier": "prettier --write ./src", "build": "tsc --build", "check": "tsc --noEmit", "doc": "typedoc src/index.ts --out ../docs" }, + "eslintConfig": { + "extends": [ + "react-app", + "react-app/jest" + ], + "rules": { + "eqeqeq": "off", + "no-empty-pattern": "off", + "@typescript-eslint/no-useless-constructor": "off" + } + }, "repository": { "type": "git", "url": "git+https://github.com/wormhole-foundation/wormhole-connect.git" diff --git a/sdk/src/contexts/solana/utils/wormhole/coder/instruction.ts b/sdk/src/contexts/solana/utils/wormhole/coder/instruction.ts index e33a10063..2b10b5f66 100644 --- a/sdk/src/contexts/solana/utils/wormhole/coder/instruction.ts +++ b/sdk/src/contexts/solana/utils/wormhole/coder/instruction.ts @@ -6,6 +6,22 @@ import { IdlField, IdlStateMethod } from '../../anchor'; import * as borsh from '@coral-xyz/borsh'; import { IdlCoder } from './idl'; +/** Solitaire enum of existing the Core Bridge's instructions. + * + * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/lib.rs#L92 + */ +export enum WormholeInstruction { + Initialize, + PostMessage, + PostVaa, + SetFees, + TransferFees, + UpgradeContract, + UpgradeGuardianSet, + VerifySignatures, + PostMessageUnreliable, // sounds useful +} + // Inspired by coral-xyz/anchor // // https://github.com/coral-xyz/anchor/blob/master/ts/packages/anchor/src/coder/borsh/instruction.ts @@ -85,22 +101,6 @@ export class WormholeInstructionCoder implements InstructionCoder { } } -/** Solitaire enum of existing the Core Bridge's instructions. - * - * https://github.com/certusone/wormhole/blob/main/solana/bridge/program/src/lib.rs#L92 - */ -export enum WormholeInstruction { - Initialize, - PostMessage, - PostVaa, - SetFees, - TransferFees, - UpgradeContract, - UpgradeGuardianSet, - VerifySignatures, - PostMessageUnreliable, // sounds useful -} - function encodeWormholeInstructionData( discriminator: number, data?: Buffer, diff --git a/wormhole-connect-loader/package.json b/wormhole-connect-loader/package.json index 9bb610bf4..b815f1f0f 100644 --- a/wormhole-connect-loader/package.json +++ b/wormhole-connect-loader/package.json @@ -25,6 +25,7 @@ "react-dom": "^18.2.0" }, "scripts": { + "lint:ci": "prettier -c ./src && eslint --max-warnings=0 ./src", "build:cjs": "tsc -p tsconfig.cjs.json", "build:esm": "tsc -p tsconfig.esm.json", "build": "rm -rf lib && npm run build:cjs && npm run build:esm" diff --git a/wormhole-connect-loader/src/theme.ts b/wormhole-connect-loader/src/theme.ts index bc34e0648..0edddc6a1 100644 --- a/wormhole-connect-loader/src/theme.ts +++ b/wormhole-connect-loader/src/theme.ts @@ -1,11 +1,4 @@ -import { - grey, - green, - orange, - red, - cyan, - purple, -} from '@mui/material/colors'; +import { grey, green, orange, red, cyan, purple } from "@mui/material/colors"; export type PaletteColor = { 50: string; @@ -72,51 +65,51 @@ export type Theme = { }; export const OPACITY = { - 0: '00', - 5: '0C', - 7: '0F', - 10: '19', - 15: '26', - 20: '33', - 25: '3F', - 30: '4C', - 35: '59', - 40: '66', - 45: '72', - 50: '7F', - 55: '8C', - 60: '99', - 65: 'A5', - 70: 'B2', - 75: 'BF', - 80: 'CC', - 85: 'D8', - 90: 'E5', - 95: 'F2', - 100: 'FF', + 0: "00", + 5: "0C", + 7: "0F", + 10: "19", + 15: "26", + 20: "33", + 25: "3F", + 30: "4C", + 35: "59", + 40: "66", + 45: "72", + 50: "7F", + 55: "8C", + 60: "99", + 65: "A5", + 70: "B2", + 75: "BF", + 80: "CC", + 85: "D8", + 90: "E5", + 95: "F2", + 100: "FF", }; export const light: Theme = { primary: { - 50: '#161718', - 100: '#2d2e30', - 200: '#444548', - 300: '#5b5c60', - 400: '#727479', - 500: '#898b91', - 600: '#a0a2a9', - 700: '#b7b9c1', - 800: '#ced0d9', - 900: '#E5E8F2', - A100: '#ceced1', - A200: '#9d9ea4', - A400: '#535660', - A700: '#0a0e1c', + 50: "#161718", + 100: "#2d2e30", + 200: "#444548", + 300: "#5b5c60", + 400: "#727479", + 500: "#898b91", + 600: "#a0a2a9", + 700: "#b7b9c1", + 800: "#ced0d9", + 900: "#E5E8F2", + A100: "#ceced1", + A200: "#9d9ea4", + A400: "#535660", + A700: "#0a0e1c", }, secondary: grey, - divider: '#a0a2a9', + divider: "#a0a2a9", background: { - default: '#E5E8F2', + default: "#E5E8F2", }, text: { primary: grey[900], @@ -124,48 +117,48 @@ export const light: Theme = { }, error: red, info: { - 50: '#d1e3f9', - 100: '#c8def7', - 200: '#bfd8f6', - 300: '#b6d3f5', - 400: '#adcdf4', - 500: '#A4C8F3', - 600: '#93b4da', - 700: '#83a0c2', - 800: '#728caa', - 900: '#627891', - A100: '#A4C8F3', - A200: '#A4C8F3', - A400: '#A4C8F3', - A700: '#A4C8F3', + 50: "#d1e3f9", + 100: "#c8def7", + 200: "#bfd8f6", + 300: "#b6d3f5", + 400: "#adcdf4", + 500: "#A4C8F3", + 600: "#93b4da", + 700: "#83a0c2", + 800: "#728caa", + 900: "#627891", + A100: "#A4C8F3", + A200: "#A4C8F3", + A400: "#A4C8F3", + A700: "#A4C8F3", }, success: green, warning: orange, button: { - primary: '#ffffff', + primary: "#ffffff", primaryText: grey[900], - disabled: '#c8cad1', + disabled: "#c8cad1", disabledText: grey[800], - action: '#F3A01E', - actionText: '#000000', - hover: '#b7b9c1', + action: "#F3A01E", + actionText: "#000000", + hover: "#b7b9c1", }, options: { - hover: '#f9f9fb', - select: '#F0F0F5', + hover: "#f9f9fb", + select: "#F0F0F5", }, card: { - background: '#ffffff', - elevation: '10px 10px 30px 15px #CCD2E7', - secondary: '#F0F0F5', + background: "#ffffff", + elevation: "10px 10px 30px 15px #CCD2E7", + secondary: "#F0F0F5", }, popover: { - background: '#ffffff', - elevation: '10px 10px 30px 15px #CCD2E7', - secondary: '#F0F0F5', + background: "#ffffff", + elevation: "10px 10px 30px 15px #CCD2E7", + secondary: "#F0F0F5", }, modal: { - background: '#ffffff', + background: "#ffffff", }, font: { primary: '"Inter", sans-serif', @@ -176,12 +169,12 @@ export const light: Theme = { export const dark: Theme = { primary: grey, secondary: grey, - divider: '#ffffff' + OPACITY[20], + divider: "#ffffff" + OPACITY[20], background: { - default: '#212121', + default: "#212121", }, text: { - primary: '#ffffff', + primary: "#ffffff", secondary: grey[500], }, error: red, @@ -189,30 +182,30 @@ export const dark: Theme = { success: green, warning: orange, button: { - primary: '#ffffff' + OPACITY[20], - primaryText: '#ffffff', - disabled: '#ffffff' + OPACITY[10], - disabledText: '#ffffff' + OPACITY[40], + primary: "#ffffff" + OPACITY[20], + primaryText: "#ffffff", + disabled: "#ffffff" + OPACITY[10], + disabledText: "#ffffff" + OPACITY[40], action: purple[400], - actionText: '#000000', - hover: '#ffffff' + OPACITY[7], + actionText: "#000000", + hover: "#ffffff" + OPACITY[7], }, options: { - hover: '#373737', - select: '#3F3F3F', + hover: "#373737", + select: "#3F3F3F", }, card: { - background: '#2F2F2F', - secondary: '#474747', - elevation: 'none', + background: "#2F2F2F", + secondary: "#474747", + elevation: "none", }, popover: { - background: '#111111', - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#111111", + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, modal: { - background: '#2d2d2d', + background: "#2d2d2d", }, font: { primary: '"Inter", sans-serif', @@ -223,89 +216,89 @@ export const dark: Theme = { export const defaultTheme: Theme = { primary: grey, secondary: grey, - divider: '#ffffff' + OPACITY[20], + divider: "#ffffff" + OPACITY[20], background: { - default: 'wormhole', + default: "wormhole", }, text: { - primary: '#ffffff', + primary: "#ffffff", secondary: grey[500], }, error: red, info: { - 50: '#97a5b7', - 100: '#8293a9', - 200: '#6e819a', - 300: '#596f8c', - 400: '#445d7e', - 500: '#304C70', - 600: '#2b4464', - 700: '#263c59', - 800: '#21354e', - 900: '#1c2d43', - A100: '#304C70', - A200: '#304C70', - A400: '#304C70', - A700: '#304C70', + 50: "#97a5b7", + 100: "#8293a9", + 200: "#6e819a", + 300: "#596f8c", + 400: "#445d7e", + 500: "#304C70", + 600: "#2b4464", + 700: "#263c59", + 800: "#21354e", + 900: "#1c2d43", + A100: "#304C70", + A200: "#304C70", + A400: "#304C70", + A700: "#304C70", }, // success: green, success: { - 50: '#66d6cd', - 100: '#4dcfc4', - 200: '#33c8bc', - 300: '#1ac1b4', - 400: '#01BBAC', - 500: '#00a89a', - 600: '#009589', - 700: '#008278', - 800: '#007067', - 900: '#005d56', - A100: '#00a89a', - A200: '#00a89a', - A400: '#00a89a', - A700: '#00a89a', + 50: "#66d6cd", + 100: "#4dcfc4", + 200: "#33c8bc", + 300: "#1ac1b4", + 400: "#01BBAC", + 500: "#00a89a", + 600: "#009589", + 700: "#008278", + 800: "#007067", + 900: "#005d56", + A100: "#00a89a", + A200: "#00a89a", + A400: "#00a89a", + A700: "#00a89a", }, warning: { - 50: '#ffe3a4', - 100: '#ffdd91', - 200: '#ffd77f', - 300: '#ffd26d', - 400: '#ffcc5b', - 500: '#FFC749', - 600: '#e5b341', - 700: '#cc9f3a', - 800: '#b28b33', - 900: '#99772b', - A100: '#FFC749', - A200: '#FFC749', - A400: '#FFC749', - A700: '#FFC749', + 50: "#ffe3a4", + 100: "#ffdd91", + 200: "#ffd77f", + 300: "#ffd26d", + 400: "#ffcc5b", + 500: "#FFC749", + 600: "#e5b341", + 700: "#cc9f3a", + 800: "#b28b33", + 900: "#99772b", + A100: "#FFC749", + A200: "#FFC749", + A400: "#FFC749", + A700: "#FFC749", }, button: { - primary: '#ffffff' + OPACITY[10], - primaryText: '#ffffff', - disabled: '#ffffff' + OPACITY[7], - disabledText: '#ffffff' + OPACITY[40], - action: '#ffffff', - actionText: '#000000', - hover: '#ffffff' + OPACITY[7], + primary: "#ffffff" + OPACITY[10], + primaryText: "#ffffff", + disabled: "#ffffff" + OPACITY[7], + disabledText: "#ffffff" + OPACITY[40], + action: "#ffffff", + actionText: "#000000", + hover: "#ffffff" + OPACITY[7], }, options: { - hover: '#ffffff' + OPACITY[7], - select: '#ffffff' + OPACITY[10], + hover: "#ffffff" + OPACITY[7], + select: "#ffffff" + OPACITY[10], }, card: { - background: '#ffffff' + OPACITY[5], - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#ffffff" + OPACITY[5], + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, popover: { - background: '#1b2033', - secondary: '#ffffff' + OPACITY[5], - elevation: 'none', + background: "#1b2033", + secondary: "#ffffff" + OPACITY[5], + elevation: "none", }, modal: { - background: '#0F1024', + background: "#0F1024", }, font: { primary: '"Inter", sans-serif', diff --git a/wormhole-connect/package.json b/wormhole-connect/package.json index e7e56bf03..68bbf23bc 100644 --- a/wormhole-connect/package.json +++ b/wormhole-connect/package.json @@ -67,9 +67,10 @@ }, "scripts": { "lint": "npm run prettier && eslint --fix ./src", + "lint:ci": "prettier -c ./src && eslint --max-warnings=0 ./src", "prettier": "prettier --write ./src", "start": "react-app-rewired start", - "build": "NODE_ENV=production GENERATE_SOURCEMAP=false react-app-rewired build --max_old_space_size=4096 build", + "build": "NODE_ENV=production GENERATE_SOURCEMAP=false react-app-rewired --max_old_space_size=6144 build", "test": "jest ./tests/*.test.ts --detectOpenHandles", "eject": "react-app-rewired eject" }, diff --git a/wormhole-connect/src/utils/index.ts b/wormhole-connect/src/utils/index.ts index 7dbd3f90b..0015edb7d 100644 --- a/wormhole-connect/src/utils/index.ts +++ b/wormhole-connect/src/utils/index.ts @@ -203,4 +203,4 @@ export function toNormalizedDecimals( export async function sleep(timeout: number) { return new Promise((resolve) => setTimeout(resolve, timeout)); -} \ No newline at end of file +}