diff --git a/contracts/deploy/00-escrow.ts b/contracts/deploy/00-escrow.ts
index 11ad67fa..1cedaf0c 100644
--- a/contracts/deploy/00-escrow.ts
+++ b/contracts/deploy/00-escrow.ts
@@ -23,8 +23,6 @@ const disputeTemplate = `{
"uri": "{{{extraDescriptionUri}}}"
},
"frontendUrl": "https://escrow-v2.kleros.builders/#/transactions/{{externalDisputeID}}",
- "arbitrableChainID": "421614",
- "arbitrableAddress": "0xFromContext",
"arbitratorChainID": "421614",
"arbitratorAddress": "0xA54e7A16d7460e38a8F324eF46782FB520d58CE8",
"metadata": {
diff --git a/contracts/package.json b/contracts/package.json
index da843235..e288601f 100644
--- a/contracts/package.json
+++ b/contracts/package.json
@@ -63,7 +63,7 @@
"@types/chai": "^4.2.0",
"@types/mocha": "^10.0.0",
"@types/node": "^16.0.0",
- "@wagmi/cli": "^1.5.2",
+ "@wagmi/cli": "^2.0.3",
"abitype": "^0.10.3",
"chai": "^4.2.0",
"dotenv": "^16.3.1",
diff --git a/web/.parcelrc b/web/.parcelrc
deleted file mode 100644
index 8b6b0a40..00000000
--- a/web/.parcelrc
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "extends": "@parcel/config-default",
- "transformers": {
- "*.svg": ["...", "@parcel/transformer-svg-react"],
- "tsx:*.svg": ["@parcel/transformer-svg-react"],
- "tsx:*": ["..."]
- }
-}
diff --git a/web/netlify.toml b/web/netlify.toml
index 4bcdd19e..8cf55aef 100644
--- a/web/netlify.toml
+++ b/web/netlify.toml
@@ -9,6 +9,3 @@ YARN_ENABLE_GLOBAL_CACHE = "true"
[functions]
directory = "web/netlify/functions/"
-
-[dev]
-framework = "parcel"
\ No newline at end of file
diff --git a/web/netlify/functions/authUser.ts b/web/netlify/functions/authUser.ts
index 5debff29..23166ea6 100644
--- a/web/netlify/functions/authUser.ts
+++ b/web/netlify/functions/authUser.ts
@@ -1,11 +1,11 @@
import middy from "@middy/core";
import jsonBodyParser from "@middy/http-json-body-parser";
import { createClient } from "@supabase/supabase-js";
+import { ethers } from "ethers";
import * as jwt from "jose";
import { SiweMessage } from "siwe";
-import { DEFAULT_CHAIN } from "consts/chains";
-import { ETH_SIGNATURE_REGEX } from "consts/index";
+import { ETH_SIGNATURE_REGEX, DEFAULT_CHAIN, isProductionDeployment } from "consts/processEnvConsts";
import { netlifyUri, netlifyDeployUri, netlifyDeployPrimeUri } from "src/generatedNetlifyInfo.json";
import { Database } from "src/types/supabase-notification";
@@ -79,9 +79,14 @@ const authUser = async (event) => {
}
try {
- await siweMessage.verify({ signature, nonce: nonceData.nonce, time: new Date().toISOString() });
+ // If the main Alchemy API key is permissioned, it won't work in a Netlify Function so we use a dedicated API key
+ const alchemyApiKey = process.env.ALCHEMY_FUNCTIONS_API_KEY ?? process.env.ALCHEMY_API_KEY;
+ const alchemyChain = isProductionDeployment() ? "arb-mainnet" : "arb-sepolia";
+ const alchemyRpcURL = `https://${alchemyChain}.g.alchemy.com/v2/${alchemyApiKey}`;
+ const provider = new ethers.providers.JsonRpcProvider(alchemyRpcURL);
+ await siweMessage.verify({ signature, nonce: nonceData.nonce, time: new Date().toISOString() }, { provider });
} catch (err) {
- throw new Error("Invalid signer");
+ throw new Error("Invalid signer: " + JSON.stringify(err));
}
const { error } = await supabase.from("user-nonce").delete().match({ address: lowerCaseAddress });
diff --git a/web/netlify/functions/getNonce.ts b/web/netlify/functions/getNonce.ts
index d9b7b942..38dcc03c 100644
--- a/web/netlify/functions/getNonce.ts
+++ b/web/netlify/functions/getNonce.ts
@@ -2,9 +2,9 @@ import middy from "@middy/core";
import { createClient } from "@supabase/supabase-js";
import { generateNonce } from "siwe";
-import { ETH_ADDRESS_REGEX } from "src/consts";
+import { ETH_ADDRESS_REGEX } from "src/consts/processEnvConsts";
-import { Database } from "../../src/types/supabase-notification";
+import { Database } from "src/types/supabase-notification";
import config from "../config";
diff --git a/web/netlify/functions/update-settings.ts b/web/netlify/functions/update-settings.ts
index 3008f65f..d56742be 100644
--- a/web/netlify/functions/update-settings.ts
+++ b/web/netlify/functions/update-settings.ts
@@ -2,8 +2,10 @@ import middy from "@middy/core";
import jsonBodyParser from "@middy/http-json-body-parser";
import { createClient } from "@supabase/supabase-js";
-import { EMAIL_REGEX, TELEGRAM_REGEX, ETH_ADDRESS_REGEX } from "../../src/consts/index";
-import { Database } from "../../src/types/supabase-notification";
+import { EMAIL_REGEX, TELEGRAM_REGEX, ETH_ADDRESS_REGEX } from "consts/processEnvConsts";
+
+import { Database } from "src/types/supabase-notification";
+
import { authMiddleware } from "../middleware/authMiddleware";
import config from "../config";
diff --git a/web/package.json b/web/package.json
index 328586c5..191813ba 100644
--- a/web/package.json
+++ b/web/package.json
@@ -6,6 +6,7 @@
"repository": "",
"author": "",
"license": "MIT",
+ "type": "module",
"alias": {
"src": "./src",
"utils": "./src/utils",
@@ -25,16 +26,15 @@
"node": "20.11.0"
},
"scripts": {
- "clear": "rm -fr ../.parcel-cache dist/bundle.js",
"start": "yarn start-devnet",
- "start-local": "scripts/runEnv.sh local 'yarn generate && parcel'",
- "start-devnet": "scripts/runEnv.sh devnet 'yarn generate && parcel'",
- "start-testnet": "scripts/runEnv.sh testnet 'yarn generate && parcel'",
+ "start-local": "scripts/runEnv.sh local 'yarn generate && vite'",
+ "start-devnet": "scripts/runEnv.sh devnet 'yarn generate && vite'",
+ "start-testnet": "scripts/runEnv.sh testnet 'yarn generate && vite'",
"build": "yarn build-devnet",
- "build-local": "scripts/runEnv.sh local 'yarn generate && parcel build'",
- "build-devnet": "scripts/runEnv.sh devnet 'yarn generate && parcel build'",
- "build-testnet": "scripts/runEnv.sh testnet 'yarn generate && parcel build'",
- "build-netlify": "scripts/runEnv.sh devnet 'scripts/generateBuildInfo.sh && yarn generate && parcel build'",
+ "build-local": "scripts/runEnv.sh local 'yarn generate && vite build'",
+ "build-devnet": "scripts/runEnv.sh devnet 'yarn generate && vite build'",
+ "build-testnet": "scripts/runEnv.sh testnet 'yarn generate && vite build'",
+ "build-netlify": "scripts/runEnv.sh devnet 'scripts/generateBuildInfo.sh && yarn generate && vite build'",
"check-style": "eslint 'src/**/*.{js,jsx,ts,tsx}'",
"check-types": "tsc --noEmit",
"generate": "yarn generate:gql && yarn generate:hooks",
@@ -47,8 +47,6 @@
"@graphql-codegen/cli": "^4.0.1",
"@graphql-codegen/client-preset": "^4.1.0",
"@netlify/functions": "^1.6.0",
- "@parcel/transformer-svg-react": "2.11.0",
- "@parcel/watcher": "~2.2.0",
"@types/amqplib": "^0.10.4",
"@types/busboy": "^1.5.3",
"@types/react": "18.2.0",
@@ -58,16 +56,17 @@
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
"@typescript-eslint/utils": "^5.62.0",
- "@wagmi/cli": "^1.5.2",
+ "@wagmi/cli": "^2.1.15",
"eslint": "^8.56.0",
"eslint-config-prettier": "^8.10.0",
- "eslint-import-resolver-parcel": "^1.10.6",
"eslint-plugin-react": "^7.33.2",
"eslint-plugin-react-hooks": "^4.6.0",
"lru-cache": "^7.18.3",
- "parcel": "2.11.0",
"supabase": "^1.133.3",
- "typescript": "^5.3.3"
+ "typescript": "^5.3.3",
+ "vite-plugin-node-polyfills": "^0.21.0",
+ "vite-plugin-svgr": "^4.2.0",
+ "vite-tsconfig-paths": "^4.3.2"
},
"dependencies": {
"@cyntler/react-doc-viewer": "^1.16.3",
@@ -78,9 +77,8 @@
"@sentry/react": "^7.93.0",
"@sentry/tracing": "^7.93.0",
"@supabase/supabase-js": "^2.39.3",
- "@tanstack/react-query": "^4.28.0",
- "@web3modal/ethereum": "^2.7.1",
- "@web3modal/react": "^2.2.2",
+ "@tanstack/react-query": "^5.40.1",
+ "@web3modal/wagmi": "^5.1.4",
"@yornaath/batshit": "^0.9.0",
"alchemy-sdk": "^3.3.1",
"amqplib": "^0.10.4",
@@ -109,7 +107,8 @@
"react-use": "^17.4.3",
"siwe": "^2.3.2",
"styled-components": "^5.3.11",
- "viem": "^1.21.4",
- "wagmi": "^1.4.13"
+ "viem": "^2.1.0",
+ "vite": "^5.2.10",
+ "wagmi": "^2.12.8"
}
}
diff --git a/web/scripts/gitInfo.js b/web/scripts/gitInfo.js
index 1828e114..f92f2dcf 100644
--- a/web/scripts/gitInfo.js
+++ b/web/scripts/gitInfo.js
@@ -1,8 +1,9 @@
/* eslint-disable max-len */
-const fs = require("fs");
-const path = require("path");
-const { execSync } = require("child_process");
-const packageJson = require("../package.json");
+import fs from "fs";
+import path from "path";
+import { execSync } from "child_process";
+
+import packageJson from "../package.json" with { type: "json" };
const execSyncWrapper = (command) => {
let stdout = null;
diff --git a/web/src/app.tsx b/web/src/app.tsx
index bfb49b5e..fa316194 100644
--- a/web/src/app.tsx
+++ b/web/src/app.tsx
@@ -7,7 +7,6 @@ import Web3Provider from "context/Web3Provider";
import IsListProvider from "context/IsListProvider";
import QueryClientProvider from "context/QueryClientProvider";
import StyledComponentsProvider from "context/StyledComponentsProvider";
-import RefetchOnBlock from "context/RefetchOnBlock";
import GraphqlBatcherProvider from "context/GraphqlBatcher";
import Layout from "layout/index";
import NewTransaction from "./pages/NewTransaction";
@@ -18,10 +17,9 @@ import AttachmentDisplay from "./pages/AttachmentDisplay";
const App: React.FC = () => {
return (
-
-
-
-
+
+
+
@@ -35,9 +33,9 @@ const App: React.FC = () => {
-
-
-
+
+
+
);
};
diff --git a/web/src/assets/svgs/icons/book.svg b/web/src/assets/svgs/icons/book.svg
index 56a6f99a..d9fa11bb 100644
--- a/web/src/assets/svgs/icons/book.svg
+++ b/web/src/assets/svgs/icons/book.svg
@@ -1,3 +1,3 @@
diff --git a/web/src/assets/svgs/icons/calendar.svg b/web/src/assets/svgs/icons/calendar.svg
index 642995bf..a627c95f 100644
--- a/web/src/assets/svgs/icons/calendar.svg
+++ b/web/src/assets/svgs/icons/calendar.svg
@@ -1,10 +1,10 @@
-