diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..d82c67f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "zk-keyless-wallet-contracts"] + path = zk-keyless-wallet-contracts + url = https://github.com/WalletZkApp/zk-keyless-wallet-contracts.git diff --git a/app/[locale]/guardian-registration/GuardianZkappWorker.ts b/app/[locale]/guardian-registration/GuardianZkappWorker.ts new file mode 100644 index 0000000..6ba3443 --- /dev/null +++ b/app/[locale]/guardian-registration/GuardianZkappWorker.ts @@ -0,0 +1,203 @@ +import { + AccountUpdate, + Field, + MerkleTree, + Mina, + PrivateKey, + PublicKey, + UInt32, + fetchAccount, +} from "snarkyjs"; + +type Transaction = Awaited>; + +// --------------------------------------------------------------------------------------- +import { Guardian } from "../../../zk-keyless-wallet-contracts/src/guardians/Guardian"; +import { GuardianZkApp } from "../../../zk-keyless-wallet-contracts/src/guardians/GuardianZkApp"; +import { MerkleWitness32 } from "../../../zk-keyless-wallet-contracts/src/storage/offchain-storage"; + +const GUARDIAN_SERVICE_PRIVATE_KEY = + process.env.GUARDIAN_SERVICE_PRIVATE_KEY || + "EKEviwcuN5yafPnPvroeeR3L9zbYUgkqvYMXaqqWz4KMNQpgUKy5"; + +const state: any = { + Guardian: null as null | typeof Guardian, + GuardianZkApp: null as null | typeof GuardianZkApp, + MerkleWitness32: null as null | typeof MerkleWitness32, + zkapp: null as null | GuardianZkApp, + transaction: null as null | Transaction, + guardian: null as null | Guardian, + guardianTree: null as null | MerkleTree, + guardianWitness: null as null | MerkleWitness32, +}; + +// --------------------------------------------------------------------------------------- + +const functions = { + setActiveInstanceToBerkeley: async (args: {}) => { + const Berkeley = Mina.Network( + "https://proxy.berkeley.minaexplorer.com/graphql" + ); + console.log("Berkeley Instance Created"); + Mina.setActiveInstance(Berkeley); + }, + loadContract: async (args: {}) => { + const { GuardianZkApp } = await import( + "../../../zk-keyless-wallet-contracts/build/src/guardians/index" + ); + state.GuardianZkApp = GuardianZkApp; + state.guardianTree = new MerkleTree(32); + }, + compileContract: async (args: {}) => { + await state.GuardianZkApp!.compile(); + }, + fetchAccount: async (args: { + publicKey58: string; + isGuardian: boolean; + nullifierMessage: string; + }) => { + const publicKey = PublicKey.fromBase58(args.publicKey58); + let guardian: Guardian | null = null; + if (args.isGuardian) { + const { Guardian } = await import( + "../../../zk-keyless-wallet-contracts/build/src/guardians/Guardian.js" + ); + const { MerkleWitness32 } = await import( + "../../../zk-keyless-wallet-contracts/build/src/storage/offchain-storage.js" + ); + state.Guardian = Guardian; + state.MerkleWitness32 = MerkleWitness32; + const nullifierMessageField: Field = Field(args.nullifierMessage); + guardian = Guardian.from(publicKey, nullifierMessageField); + state.guardian = guardian; + console.log("guardian hash", guardian.hash().toString()); + + const counter = state.zkapp!.counter.getAndAssertEquals(); + console.log("counter", counter.toString()); + const newGuardianTree: MerkleTree = state.guardianTree!; + newGuardianTree.setLeaf(counter.toBigint(), guardian.hash()); + state.guardianTree = newGuardianTree; + console.log("guardian tree", state.guardianTree!.getRoot().toString()); + + let w = newGuardianTree.getWitness(counter.toBigint()); + let witness = new MerkleWitness32(w); + state.guardianWitness = witness; + console.log("guardian witness", state.guardianWitness!.toJSON()); + } + return await fetchAccount({ publicKey }); + }, + initZkappInstance: async (args: { publicKey58: string }) => { + const publicKey = PublicKey.fromBase58(args.publicKey58); + state.zkapp = new state.GuardianZkApp!(publicKey); + }, + getOwner: async (args: {}) => { + const owner = await state.zkapp!.owner.getAndAssertEquals(); + return JSON.stringify(owner.toJSON()); + }, + getNullifierRoot: async (args: {}) => { + const nullifierRoot = await state.zkapp!.nullifierRoot.getAndAssertEquals(); + return JSON.stringify(nullifierRoot.toJSON()); + }, + getCommittedGuardians: async (args: {}) => { + const committedGuardians = + await state.zkapp!.committedGuardians.getAndAssertEquals(); + return JSON.stringify(committedGuardians.toJSON()); + }, + getApprovedGuardians: async (args: {}) => { + const approvedGuardians = + await state.zkapp!.approvedGuardians.getAndAssertEquals(); + return JSON.stringify(approvedGuardians.toJSON()); + }, + getGuardiansCounter: async (args: {}) => { + const counter: UInt32 = await state.zkapp!.counter.getAndAssertEquals(); + return JSON.stringify(counter.toJSON()); + }, + createRegisterGuardianTransaction: async (args: { + privateKey58: string; + feePayerAddress58: string; + }) => { + const feePayer: PublicKey = PublicKey.fromBase58(args.feePayerAddress58); + console.log("feePayer", feePayer); + const randomPrivateKey: PrivateKey = PrivateKey.fromBase58( + args.privateKey58 + ); + console.log("randomPrivateKey", randomPrivateKey); + const transaction = await Mina.transaction(feePayer, async () => { + const response = await fetchAccount({ publicKey: feePayer }); + if (response.error) { + AccountUpdate.fundNewAccount(feePayer); + } + state.zkapp!.registerGuardian( + state.guardian!.hash(), + state.guardianTree!.getRoot() + ); + }); + transaction.sign([randomPrivateKey]); + state.transaction = transaction; + }, + createApproveGuardianTransaction: async (args: { + privateKey58: string; + feePayerAddress58: string; + }) => { + const feePayer: PublicKey = PublicKey.fromBase58(args.feePayerAddress58); + console.log("feePayer", feePayer); + const randomPrivateKey: PrivateKey = PrivateKey.fromBase58( + args.privateKey58 + ); + console.log("randomPrivateKey", randomPrivateKey); + const guardianServicePrivateKey: PrivateKey = PrivateKey.fromBase58( + GUARDIAN_SERVICE_PRIVATE_KEY + ); + const transaction = await Mina.transaction(feePayer, async () => { + const response = await fetchAccount({ publicKey: feePayer }); + if (response.error) { + AccountUpdate.fundNewAccount(feePayer); + } + state.zkapp!.approveGuardian( + guardianServicePrivateKey, + state.guardian!.hash(), + state.guardianTree!.getRoot() + ); + }); + transaction.sign([randomPrivateKey]); + state.transaction = transaction; + }, + proveUpdateTransaction: async (args: {}) => { + await state.transaction!.prove(); + }, + getTransactionJSON: async (args: {}) => { + return state.transaction!.toJSON(); + }, +}; + +// --------------------------------------------------------------------------------------- + +export type GuardianWorkerFunctions = keyof typeof functions; + +export type GuardianZkappWorkerRequest = { + id: number; + fn: GuardianWorkerFunctions; + args: any; +}; + +export type GuardianZkappWorkerReponse = { + id: number; + data: any; +}; + +if (typeof window !== "undefined") { + addEventListener( + "message", + async (event: MessageEvent) => { + const returnData = await functions[event.data.fn](event.data.args); + + const message: GuardianZkappWorkerReponse = { + id: event.data.id, + data: returnData, + }; + postMessage(message); + } + ); +} + +console.log("Web Worker Successfully Initialized."); diff --git a/app/[locale]/guardian-registration/GuardianZkappWorkerClient.ts b/app/[locale]/guardian-registration/GuardianZkappWorkerClient.ts new file mode 100644 index 0000000..e229f0e --- /dev/null +++ b/app/[locale]/guardian-registration/GuardianZkappWorkerClient.ts @@ -0,0 +1,137 @@ +import { fetchAccount, PublicKey, Field, UInt32, PrivateKey } from "snarkyjs"; + +import type { + GuardianZkappWorkerRequest, + GuardianZkappWorkerReponse, + GuardianWorkerFunctions, +} from "./GuardianZkappWorker"; + +export default class GuardianZkappWorkerClient { + // --------------------------------------------------------------------------------------- + + setActiveInstanceToBerkeley() { + return this._call("setActiveInstanceToBerkeley", {}); + } + + loadContract() { + return this._call("loadContract", {}); + } + + compileContract() { + return this._call("compileContract", {}); + } + + fetchAccount( + publicKey: PublicKey, + isGuardian: boolean, + nullifierMessage: string + ): ReturnType { + const result = this._call("fetchAccount", { + publicKey58: publicKey.toBase58(), + isGuardian: isGuardian, + nullifierMessage: nullifierMessage, + }); + return result as ReturnType; + } + + initZkappInstance(publicKey: PublicKey) { + return this._call("initZkappInstance", { + publicKey58: publicKey.toBase58(), + }); + } + + async getOwner(): Promise { + const result = await this._call("getOwner", {}); + return PublicKey.fromBase58(JSON.parse(result as string)); + } + + async getNullifierRoot(): Promise { + const result = await this._call("getNullifierRoot", {}); + return Field.fromJSON(JSON.parse(result as string)); + } + + async getCommittedGuardians(): Promise { + const result = await this._call("getCommittedGuardians", {}); + return Field.fromJSON(JSON.parse(result as string)); + } + + async getApprovedGuardians(): Promise { + const result = await this._call("getApprovedGuardians", {}); + return Field.fromJSON(JSON.parse(result as string)); + } + + async getGuardiansCounter(): Promise { + const result = await this._call("getGuardiansCounter", {}); + return UInt32.fromJSON(JSON.parse(result as string)); + } + + createRegisterGuardianTransaction( + privateKey: PrivateKey, + feePayer: PublicKey + ) { + return this._call("createRegisterGuardianTransaction", { + privateKey58: privateKey.toBase58(), + feePayerAddress58: feePayer.toBase58(), + }); + } + + createApproveGuardianTransaction( + privateKey: PrivateKey, + feePayer: PublicKey + ) { + return this._call("createApproveGuardianTransaction", { + privateKey58: privateKey.toBase58(), + guardianAccount58: feePayer.toBase58(), + }); + } + + proveUpdateTransaction() { + return this._call("proveUpdateTransaction", {}); + } + + async getTransactionJSON() { + const result = await this._call("getTransactionJSON", {}); + return result; + } + + // --------------------------------------------------------------------------------------- + + worker: Worker; + + promises: { + [id: number]: { resolve: (res: any) => void; reject: (err: any) => void }; + }; + + nextId: number; + + constructor() { + this.worker = new Worker( + new URL("./guardianZkappWorker.ts", import.meta.url) + ); + this.promises = {}; + this.nextId = 0; + + this.worker.onmessage = ( + event: MessageEvent + ) => { + this.promises[event.data.id].resolve(event.data.data); + delete this.promises[event.data.id]; + }; + } + + _call(fn: GuardianWorkerFunctions, args: any) { + return new Promise((resolve, reject) => { + this.promises[this.nextId] = { resolve, reject }; + + const message: GuardianZkappWorkerRequest = { + id: this.nextId, + fn, + args, + }; + + this.worker.postMessage(message); + + this.nextId++; + }); + } +} diff --git a/app/[locale]/guardian-registration/page.tsx b/app/[locale]/guardian-registration/page.tsx index e363ce8..234bb5f 100644 --- a/app/[locale]/guardian-registration/page.tsx +++ b/app/[locale]/guardian-registration/page.tsx @@ -15,6 +15,19 @@ import { useContext, useEffect, useState } from "react"; import { WalletContext } from "@/context/wallet_context"; import Footer from "@/components/layout/footer"; import { toast } from "react-toastify"; +import GuardianZkappWorkerClient from "./GuardianZkappWorkerClient"; +import { PublicKey, Field, UInt32, PrivateKey } from "snarkyjs"; + +let transactionFee = 0.1; + +interface SignedData { + publicKey: string; + data: string; + signature: { + field: string; + scalar: string; + }; +} function Page() { const { theme } = useContext(ThemeContext); @@ -22,11 +35,193 @@ function Page() { const [submitted, setSubmitted] = useState(false); const t = useTranslations("Index"); + const [state, setState] = useState({ + guardian: null as null | any, + zkappWorkerClient: null as null | GuardianZkappWorkerClient, + hasWallet: null as null | boolean, + hasBeenSetup: false, + accountExists: false, + owner: null as null | PublicKey, + nullifierRoot: null as null | Field, + committedGuardians: null as null | Field, + approvedGuardians: null as null | Field, + guardiansCounter: null as null | UInt32, + publicKey: null as null | PublicKey, + privateKey: null as null | PrivateKey, + signature: null as null | SignedData, + zkappPublicKey: null as null | PublicKey, + createRegisterGuardianTransaction: false, + createApproveGuardianTransaction: false, + }); + + const [displayText, setDisplayText] = useState(""); + const [transactionlink, setTransactionLink] = useState(""); + + const guardianZkAppAddress: string = + process.env.NEXT_PUBLIC_GUARDIAN_ZKAPP?.toString() || + "B62qmq5NbjES5Lmi3g7YtP2FddjrxB9Zvu8PLp4kvC45ji9ezNFPJka"; + + // ------------------------------------------------------- + // Do Setup + useEffect(() => { - if (!isAuroInstalled) { - toast("Aura wallet not found", { type: "error" }); + async function timeout(seconds: number): Promise { + return new Promise((resolve) => { + setTimeout(() => { + resolve(); + }, seconds * 1000); + }); } - }, [isAuroInstalled]); + + console.log(state); + + async () => { + if (!state.hasBeenSetup) { + setDisplayText("Loading web worker..."); + console.log("Loading web worker..."); + // const zkappWorkerClient = new GuardianZkappWorkerClient(); + await timeout(5); + } + }; + + // (async () => { + // if (!state.hasBeenSetup) { + // setDisplayText("Loading web worker..."); + // console.log("Loading web worker..."); + // const zkappWorkerClient = new GuardianZkappWorkerClient(); + // await timeout(5); + + // setDisplayText("Done loading web worker"); + // console.log("Done loading web worker"); + + // await zkappWorkerClient.setActiveInstanceToBerkeley(); + + // const mina = (window as any).mina; + + // if (mina == null) { + // setState({ ...state, hasWallet: false }); + // return; + // } + + // console.log("checking AURO connection"); + // const network = await mina.requestNetwork(); + // console.log("network:", network.toString()); // 'Mainnet' , 'Devnet' , 'Berkeley' or 'Unknown' + // setDisplayText(`Network: ${network.toString()}`); + + // const accounts = await mina.requestAccounts(); + // console.log(`From requestAccounts:${accounts.toString()}`); + // setDisplayText(`From requestAccounts:${accounts.toString()}`); + // const newSignature: SignedData = await mina.signMessage({ + // message: "Register as guardian", + // }); + // //const newSignature: SignedFieldsData = await mina.signFields({ message: [777]}) + // console.log(`From signMessage:${JSON.stringify(newSignature)}`); + // if (newSignature == null) { + // setState({ ...state, signature: newSignature }); + // } + // const publicKey = PublicKey.fromBase58(newSignature.publicKey); + + // console.log(`Using key:${publicKey.toBase58()}`); + // setDisplayText(`Using key:${publicKey.toBase58()}`); + + // await zkappWorkerClient.loadContract(); + + // console.log("Compiling zkApp..."); + // setDisplayText("Compiling zkApp..."); + // await zkappWorkerClient.compileContract(); + // console.log("zkApp compiled"); + // setDisplayText("zkApp compiled..."); + + // console.log("guardianZkAppAddress: " + guardianZkAppAddress); + + // const zkappPublicKey = PublicKey.fromBase58(guardianZkAppAddress); + + // await zkappWorkerClient.initZkappInstance(zkappPublicKey); + + // console.log("Getting zkApp state..."); + // setDisplayText("Getting zkApp state..."); + // await zkappWorkerClient.fetchAccount(zkappPublicKey, false, "0"); + // const owner: PublicKey = await zkappWorkerClient.getOwner(); + // console.log(`Current state in zkApp, owner: ${owner.toBase58()}`); + // setDisplayText(`Current state in zkApp, owner: ${owner.toBase58()}`); + + // const nullifierRoot: Field = await zkappWorkerClient.getNullifierRoot(); + // console.log( + // `Current state in zkApp, nullifierRoot: ${nullifierRoot.toString()}` + // ); + // setDisplayText( + // `Current state in zkApp, nullifierRoot: ${nullifierRoot.toString()}` + // ); + + // const committedGuardians: Field = + // await zkappWorkerClient.getCommittedGuardians(); + // console.log( + // `Current state in zkApp, committedGuardians: ${committedGuardians.toString()}` + // ); + // setDisplayText( + // `Current state in zkApp, committedGuardians: ${committedGuardians.toString()}` + // ); + + // const guardiansCounter: UInt32 = + // await zkappWorkerClient.getGuardiansCounter(); + // console.log( + // `Current state in zkApp, guardiansCounter: ${guardiansCounter.toString()}` + // ); + // setDisplayText( + // `Current state in zkApp, guardiansCounter: ${guardiansCounter.toString()}` + // ); + + // setDisplayText("Checking if fee payer account exists..."); + // console.log("Checking if fee payer account exists..."); + + // const res = await zkappWorkerClient.fetchAccount( + // publicKey!, + // true, + // "777" + // ); + // const accountExists = res.error == null; + + // setState({ + // ...state, + // zkappWorkerClient, + // hasWallet: true, + // hasBeenSetup: true, + // publicKey, + // zkappPublicKey, + // accountExists, + // owner, + // nullifierRoot, + // committedGuardians, + // guardiansCounter, + // }); + // } + // })(); + }, []); + + // ------------------------------------------------------- + // Wait for account to exist, if it didn't + + useEffect(() => { + (async () => { + if (state.hasBeenSetup && !state.accountExists) { + for (;;) { + setDisplayText("Checking if fee payer account exists..."); + console.log("Checking if fee payer account exists..."); + const res = await state.zkappWorkerClient!.fetchAccount( + state.publicKey!, + true, + "777" + ); + const accountExists = res.error == null; + if (accountExists) { + break; + } + await new Promise((resolve) => setTimeout(resolve, 5000)); + } + setState({ ...state, accountExists: true }); + } + })(); + }, [state.hasBeenSetup]); async function formSubmit(event: any): Promise { event.preventDefault(); @@ -63,6 +258,10 @@ function Page() { } } + const transactionClick = () => { + console.log("test"); + }; + return ( <>
Register +
diff --git a/app/[locale]/layout.tsx b/app/[locale]/layout.tsx index 404c867..1843330 100644 --- a/app/[locale]/layout.tsx +++ b/app/[locale]/layout.tsx @@ -9,7 +9,7 @@ import { NextIntlClientProvider } from "next-intl"; import { Params } from "next/dist/shared/lib/router/utils/route-matcher"; import "react-toastify/dist/ReactToastify.min.css"; -import GoogleAnalytics from "@/components/google/GoogleAnalytics"; +import GoogleAnalytics from "@/components/google/GoogleAnalytics"; export function generateStaticParams() { return [ @@ -44,7 +44,11 @@ export default async function LocaleLayout({ name="description" content="The First Smart Contract Wallet on Mina Protocol, No Recovery Seed Phrase Required" /> - {process.env.NEXT_PUBLIC_GA_TRACKING_ID && } + {process.env.NEXT_PUBLIC_GA_TRACKING_ID && ( + + )} diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index d00b175..bf0d1d6 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -20,6 +20,8 @@ import OurSolution from "@/components/home/our_solution"; import KeylessWallet from "@/components/home/keyless_wallet"; import SocialRecovery from "@/components/home/social_recovery"; +import "./reactCOIServiceWorker"; + export default function Page() { const { theme } = useContext(ThemeContext); return ( diff --git a/app/[locale]/reactCOIServiceWorker.ts b/app/[locale]/reactCOIServiceWorker.ts new file mode 100644 index 0000000..d904ff5 --- /dev/null +++ b/app/[locale]/reactCOIServiceWorker.ts @@ -0,0 +1,14 @@ +export {}; + +function loadCOIServiceWorker() { + if ( + typeof window !== "undefined" && + window.location.hostname != "localhost" + ) { + const coi = window.document.createElement("script"); + coi.setAttribute("src", "/website/coi-serviceworker.min.js"); + window.document.head.appendChild(coi); + } +} + +loadCOIServiceWorker(); diff --git a/components/layout/navigation.tsx b/components/layout/navigation.tsx index 4fb568a..1742a22 100644 --- a/components/layout/navigation.tsx +++ b/components/layout/navigation.tsx @@ -65,17 +65,6 @@ function Navigation() { ); })} - {smartcontract === "" ? ( - - - - ) : ( -
- {smartcontract} -
- )} ); }; @@ -158,15 +147,6 @@ function Navigation() { ); })} - {smartcontract === "" ? ( - - - - ) : ( -
{smartcontract}
- )} {/* Mobile Navigation End */} diff --git a/next.config.js b/next.config.js index 8ebbec8..e4e50c5 100644 --- a/next.config.js +++ b/next.config.js @@ -6,4 +6,8 @@ const withNextIntl = require("next-intl/plugin")( module.exports = withNextIntl({ // Other Next.js configuration ... experimental: { appDir: true }, + webpack(config) { + config.experiments = { ...config.experiments, topLevelAwait: true }; + return config; + }, }); diff --git a/package-lock.json b/package-lock.json index 463cb79..33afe43 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "react-dom": "18.2.0", "react-hook-form": "^7.44.3", "react-toastify": "^9.1.3", + "snarkyjs": "^0.12.1", "swiper": "^9.3.2", "tailwindcss": "3.3.2", "typescript": "5.0.4", @@ -982,6 +983,11 @@ "node": ">=8" } }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1258,6 +1264,14 @@ "node": ">=0.4.0" } }, + "node_modules/detect-gpu": { + "version": "5.0.37", + "resolved": "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.37.tgz", + "integrity": "sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw==", + "dependencies": { + "webgl-constants": "^1.1.1" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -1637,6 +1651,15 @@ "node": ">=0.12.0" } }, + "node_modules/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "node_modules/jiti": { "version": "1.18.2", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz", @@ -1645,6 +1668,11 @@ "jiti": "bin/jiti.js" } }, + "node_modules/js-sha256": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", + "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -1854,6 +1882,25 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/node-releases": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", @@ -2237,6 +2284,11 @@ "node": ">=8.10.0" } }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", @@ -2310,6 +2362,25 @@ "resolved": "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz", "integrity": "sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==" }, + "node_modules/snarkyjs": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/snarkyjs/-/snarkyjs-0.12.1.tgz", + "integrity": "sha512-Zv1tj+NBoid2O4Pewj1sUCcqYApoDJ4M6I/Lm7WzpRwf1HwU3h4rUF10mDfBaX4fb6A+9OXLI6cmR8P2URVehg==", + "dependencies": { + "blakejs": "1.2.1", + "detect-gpu": "^5.0.5", + "isomorphic-fetch": "^3.0.0", + "js-sha256": "^0.9.0", + "reflect-metadata": "^0.1.13", + "tslib": "^2.3.0" + }, + "bin": { + "snarky-run": "src/build/run.js" + }, + "engines": { + "node": ">=16.4.0" + } + }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -2515,6 +2586,11 @@ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -2597,6 +2673,30 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/webgl-constants": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz", + "integrity": "sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg==" + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.18", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz", + "integrity": "sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 013b2f8..dbc6b0a 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "react-dom": "18.2.0", "react-hook-form": "^7.44.3", "react-toastify": "^9.1.3", + "snarkyjs": "^0.12.1", "swiper": "^9.3.2", "tailwindcss": "3.3.2", "typescript": "5.0.4", diff --git a/public/coi-serviceworker.min.js b/public/coi-serviceworker.min.js new file mode 100644 index 0000000..88eaffd --- /dev/null +++ b/public/coi-serviceworker.min.js @@ -0,0 +1,101 @@ +/*! coi-serviceworker v0.1.7 - Guido Zuidhof and contributors, licensed under MIT */ +let coepCredentialless = !1; +"undefined" == typeof window + ? (self.addEventListener("install", () => self.skipWaiting()), + self.addEventListener("activate", (e) => e.waitUntil(self.clients.claim())), + self.addEventListener("message", (e) => { + e.data && + ("deregister" === e.data.type + ? self.registration + .unregister() + .then(() => self.clients.matchAll()) + .then((e) => { + e.forEach((e) => e.navigate(e.url)); + }) + : "coepCredentialless" === e.data.type && + (coepCredentialless = e.data.value)); + }), + self.addEventListener("fetch", function (e) { + const r = e.request; + if ("only-if-cached" === r.cache && "same-origin" !== r.mode) return; + const s = + coepCredentialless && "no-cors" === r.mode + ? new Request(r, { credentials: "omit" }) + : r; + e.respondWith( + fetch(s) + .then((e) => { + if (0 === e.status) return e; + const r = new Headers(e.headers); + return ( + r.set( + "Cross-Origin-Embedder-Policy", + coepCredentialless ? "credentialless" : "require-corp" + ), + coepCredentialless || + r.set("Cross-Origin-Resource-Policy", "cross-origin"), + r.set("Cross-Origin-Opener-Policy", "same-origin"), + new Response(e.body, { + status: e.status, + statusText: e.statusText, + headers: r, + }) + ); + }) + .catch((e) => console.error(e)) + ); + })) + : (() => { + const e = { + shouldRegister: () => !0, + shouldDeregister: () => !1, + coepCredentialless: () => !(window.chrome || window.netscape), + doReload: () => window.location.reload(), + quiet: !1, + ...window.coi, + }, + r = navigator; + r.serviceWorker && + r.serviceWorker.controller && + (r.serviceWorker.controller.postMessage({ + type: "coepCredentialless", + value: e.coepCredentialless(), + }), + e.shouldDeregister() && + r.serviceWorker.controller.postMessage({ type: "deregister" })), + !1 === window.crossOriginIsolated && + e.shouldRegister() && + (window.isSecureContext + ? r.serviceWorker && + r.serviceWorker.register(window.document.currentScript.src).then( + (s) => { + !e.quiet && + console.log("COOP/COEP Service Worker registered", s.scope), + s.addEventListener("updatefound", () => { + !e.quiet && + console.log( + "Reloading page to make use of updated COOP/COEP Service Worker." + ), + e.doReload(); + }), + s.active && + !r.serviceWorker.controller && + (!e.quiet && + console.log( + "Reloading page to make use of COOP/COEP Service Worker." + ), + e.doReload()); + }, + (r) => { + !e.quiet && + console.error( + "COOP/COEP Service Worker failed to register:", + r + ); + } + ) + : !e.quiet && + console.log( + "COOP/COEP Service Worker not registered, a secure context is required." + )); + })(); diff --git a/yarn.lock b/yarn.lock index 39ee2c6..33c1b45 100644 --- a/yarn.lock +++ b/yarn.lock @@ -103,17 +103,17 @@ dependencies: "@emotion/memoize" "^0.8.1" -"@emotion/memoize@0.7.4": - version "0.7.4" - resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" - integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== - "@emotion/memoize@^0.8.1": version "0.8.1" resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz" integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== -"@emotion/react@^11.11.0": +"@emotion/memoize@0.7.4": + version "0.7.4" + resolved "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz" + integrity sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw== + +"@emotion/react@^11.0.0-rc.0", "@emotion/react@^11.11.0", "@emotion/react@^11.4.1", "@emotion/react@^11.5.0": version "11.11.0" resolved "https://registry.npmjs.org/@emotion/react/-/react-11.11.0.tgz" integrity sha512-ZSK3ZJsNkwfjT3JpDAWJZlrGD81Z3ytNDsxw1LKq1o+xkmO5pnWfr6gmCC8gHEFf3nSSX/09YrG67jybNPxSUw== @@ -143,7 +143,7 @@ resolved "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.2.2.tgz" integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== -"@emotion/styled@^11.11.0": +"@emotion/styled@^11.11.0", "@emotion/styled@^11.3.0": version "11.11.0" resolved "https://registry.npmjs.org/@emotion/styled/-/styled-11.11.0.tgz" integrity sha512-hM5Nnvu9P3midq5aaXj4I+lnSfNi7Pmd4EWk1fOZ3pxookaQTNew6bp4JaCBYM4HVFZF9g7UjJmsUmC2JlxOng== @@ -175,14 +175,6 @@ resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz" integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== -"@formatjs/ecma402-abstract@1.11.4": - version "1.11.4" - resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz" - integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== - dependencies: - "@formatjs/intl-localematcher" "0.2.25" - tslib "^2.1.0" - "@formatjs/ecma402-abstract@^1.11.4": version "1.15.0" resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.15.0.tgz" @@ -191,6 +183,14 @@ "@formatjs/intl-localematcher" "0.2.32" tslib "^2.4.0" +"@formatjs/ecma402-abstract@1.11.4": + version "1.11.4" + resolved "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-1.11.4.tgz" + integrity sha512-EBikYFp2JCdIfGEb5G9dyCkTGDmC57KSHhRQOC3aYxoPWVZvfWCDjZwkGYHN7Lis/fmuWl906bnNTJifDQ3sXw== + dependencies: + "@formatjs/intl-localematcher" "0.2.25" + tslib "^2.1.0" + "@formatjs/fast-memoize@1.2.1": version "1.2.1" resolved "https://registry.npmjs.org/@formatjs/fast-memoize/-/fast-memoize-1.2.1.tgz" @@ -215,6 +215,13 @@ "@formatjs/ecma402-abstract" "1.11.4" tslib "^2.1.0" +"@formatjs/intl-localematcher@^0.2.32", "@formatjs/intl-localematcher@0.2.32": + version "0.2.32" + resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz" + integrity sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ== + dependencies: + tslib "^2.4.0" + "@formatjs/intl-localematcher@0.2.25": version "0.2.25" resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.25.tgz" @@ -222,13 +229,6 @@ dependencies: tslib "^2.1.0" -"@formatjs/intl-localematcher@0.2.32", "@formatjs/intl-localematcher@^0.2.32": - version "0.2.32" - resolved "https://registry.npmjs.org/@formatjs/intl-localematcher/-/intl-localematcher-0.2.32.tgz" - integrity sha512-k/MEBstff4sttohyEpXxCmC3MqbUn9VvHGlZ8fauLzkbwXmVrEeyzS+4uhrvAk9DWU9/7otYWxyDox4nT/KVLQ== - dependencies: - tslib "^2.4.0" - "@hookform/resolvers@^3.1.1": version "3.1.1" resolved "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.1.1.tgz" @@ -253,16 +253,16 @@ resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.15" resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@1.4.14": + version "1.4.14" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + "@jridgewell/trace-mapping@^0.3.9": version "0.3.18" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" @@ -297,7 +297,7 @@ dependencies: "@babel/runtime" "^7.21.0" -"@mui/material@^5.13.2": +"@mui/material@^5.0.0", "@mui/material@^5.13.2": version "5.13.2" resolved "https://registry.npmjs.org/@mui/material/-/material-5.13.2.tgz" integrity sha512-Pfke1l0GG2OJb/Nr10aVr8huoBFcBTdWKV5iFSTEHqf9c2C1ZlyYMISn7ui6X3Gix8vr+hP5kVqH1LAWwQSb6w== @@ -374,46 +374,6 @@ resolved "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.4.tgz" integrity sha512-xfjgXvp4KalNUKZMHmsFxr1Ug+aGmmO6NWP0uoh4G3WFqP/mJ1xxfww0gMOeMeSq/Jyr5k7DvoZ2Pv+XOITTtw== -"@next/swc-darwin-x64@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.4.tgz#5fe01c65c80fcb833c8789fd70f074ea99893864" - integrity sha512-ZY9Ti1hkIwJsxGus3nlubIkvYyB0gNOYxKrfsOrLEqD0I2iCX8D7w8v6QQZ2H+dDl6UT29oeEUdDUNGk4UEpfg== - -"@next/swc-linux-arm64-gnu@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.4.tgz#f2e071f38e8a6cdadf507cc5d28956f73360d064" - integrity sha512-+KZnDeMShYkpkqAvGCEDeqYTRADJXc6SY1jWXz+Uo6qWQO/Jd9CoyhTJwRSxvQA16MoYzvILkGaDqirkRNctyA== - -"@next/swc-linux-arm64-musl@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.4.tgz#23bf75c544e54562bc24ec1be036e4bd9cf89e2c" - integrity sha512-evC1twrny2XDT4uOftoubZvW3EG0zs0ZxMwEtu/dDGVRO5n5pT48S8qqEIBGBUZYu/Xx4zzpOkIxx1vpWdE+9A== - -"@next/swc-linux-x64-gnu@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.4.tgz#bd42590950a01957952206f89cf5622e7c9e4196" - integrity sha512-PX706XcCHr2FfkyhP2lpf+pX/tUvq6/ke7JYnnr0ykNdEMo+sb7cC/o91gnURh4sPYSiZJhsF2gbIqg9rciOHQ== - -"@next/swc-linux-x64-musl@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.4.tgz#907d81feb1abec3daec0ecb61e3f39b56e7aeafe" - integrity sha512-TKUUx3Ftd95JlHV6XagEnqpT204Y+IsEa3awaYIjayn0MOGjgKZMZibqarK3B1FsMSPaieJf2FEAcu9z0yT5aA== - -"@next/swc-win32-arm64-msvc@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.4.tgz#1d754d2bb10bdf9907c0acc83711438697c3b5fe" - integrity sha512-FP8AadgSq4+HPtim7WBkCMGbhr5vh9FePXiWx9+YOdjwdQocwoCK5ZVC3OW8oh3TWth6iJ0AXJ/yQ1q1cwSZ3A== - -"@next/swc-win32-ia32-msvc@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.4.tgz#77b2c7f7534b675d46e46301869e08d504d23956" - integrity sha512-3WekVmtuA2MCdcAOrgrI+PuFiFURtSyyrN1I3UPtS0ckR2HtLqyqmS334Eulf15g1/bdwMteePdK363X/Y9JMg== - -"@next/swc-win32-x64-msvc@13.4.4": - version "13.4.4" - resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.4.tgz#faab69239f8a9d0be7cd473e65f5a07735ef7b0e" - integrity sha512-AHRITu/CrlQ+qzoqQtEMfaTu7GHaQ6bziQln/pVWpOYC1wU+Mq6VQQFlsDtMCnDztPZtppAXdvvbNS7pcfRzlw== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" @@ -422,7 +382,7 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": +"@nodelib/fs.stat@^2.0.2", "@nodelib/fs.stat@2.0.5": version "2.0.5" resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== @@ -452,16 +412,16 @@ resolved "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz" integrity sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q== -"@types/node@20.2.5": - version "20.2.5" - resolved "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz" - integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== - "@types/node@^16.10.2": version "16.18.34" resolved "https://registry.npmjs.org/@types/node/-/node-16.18.34.tgz" integrity sha512-VmVm7gXwhkUimRfBwVI1CHhwp86jDWR04B5FGebMMyxV90SlCmFujwUHrxTD4oO+SOYU86SoxvhgeRQJY7iXFg== +"@types/node@20.2.5": + version "20.2.5" + resolved "https://registry.npmjs.org/@types/node/-/node-20.2.5.tgz" + integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== + "@types/parse-json@^4.0.0": version "4.0.0" resolved "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz" @@ -493,7 +453,7 @@ dependencies: "@types/react" "*" -"@types/react@*", "@types/react@18.2.7": +"@types/react@*", "@types/react@^17.0.0 || ^18.0.0", "@types/react@18.2.7": version "18.2.7" resolved "https://registry.npmjs.org/@types/react/-/react-18.2.7.tgz" integrity sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw== @@ -577,6 +537,11 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== +blakejs@1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -592,7 +557,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.21.5: +browserslist@^4.21.5, "browserslist@>= 4.21.0": version "4.21.5" resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz" integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== @@ -732,6 +697,13 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== +detect-gpu@^5.0.5: + version "5.0.37" + resolved "https://registry.npmjs.org/detect-gpu/-/detect-gpu-5.0.37.tgz" + integrity sha512-EraWs84faI4iskB4qvE39bevMIazEvd1RpoyGLOBesRLbiz6eMeJqqRPHjEFClfRByYZzi9IzU35rBXIO76oDw== + dependencies: + webgl-constants "^1.1.1" + didyoumean@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz" @@ -850,7 +822,7 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -glob-parent@^5.1.2, glob-parent@~5.1.2: +glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -864,6 +836,13 @@ glob-parent@^6.0.2: dependencies: is-glob "^4.0.3" +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob@7.1.6: version "7.1.6" resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz" @@ -962,11 +941,24 @@ is-number@^7.0.0: resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +isomorphic-fetch@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz" + integrity sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA== + dependencies: + node-fetch "^2.6.1" + whatwg-fetch "^3.4.1" + jiti@^1.18.2: version "1.18.2" resolved "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz" integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== +js-sha256@^0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" @@ -1055,7 +1047,7 @@ next-intl@^2.15.0-beta.5: server-only "0.0.1" use-intl "^2.14.6" -next@13.4.4: +"next@^10.0.0 || ^11.0.0 || ^12.0.0 || ^13.0.0", next@13.4.4: version "13.4.4" resolved "https://registry.npmjs.org/next/-/next-13.4.4.tgz" integrity sha512-C5S0ysM0Ily9McL4Jb48nOQHT1BukOWI59uC3X/xCMlYIh9rJZCv7nzG92J6e1cOBqQbKovlpgvHWFmz4eKKEA== @@ -1078,6 +1070,13 @@ next@13.4.4: "@next/swc-win32-ia32-msvc" "13.4.4" "@next/swc-win32-x64-msvc" "13.4.4" +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-releases@^2.0.8: version "2.0.12" resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" @@ -1206,6 +1205,15 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0: resolved "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz" integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== +postcss@^8.0.0, postcss@^8.1.0, postcss@^8.2.14, postcss@^8.4.21, postcss@^8.4.23, postcss@>=8.0.9, postcss@8.4.23: + version "8.4.23" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz" + integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== + dependencies: + nanoid "^3.3.6" + picocolors "^1.0.0" + source-map-js "^1.0.2" + postcss@8.4.14: version "8.4.14" resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz" @@ -1215,15 +1223,6 @@ postcss@8.4.14: picocolors "^1.0.0" source-map-js "^1.0.2" -postcss@8.4.23, postcss@^8.4.23: - version "8.4.23" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz" - integrity sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA== - dependencies: - nanoid "^3.3.6" - picocolors "^1.0.0" - source-map-js "^1.0.2" - prop-types@^15.6.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz" @@ -1248,7 +1247,7 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-dom@18.2.0: +"react-dom@^17.0.0 || ^18.0.0", react-dom@^18.0.0, react-dom@^18.2.0, react-dom@>=16, react-dom@>=16.6.0, react-dom@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -1256,12 +1255,17 @@ react-dom@18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-hook-form@^7.44.3: +react-hook-form@^7.0.0, react-hook-form@^7.44.3: version "7.44.3" resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.44.3.tgz" integrity sha512-/tHId6p2ViAka1wECMw8FEPn/oz/w226zehHrJyQ1oIzCBNMIJCaj6ZkQcv+MjDxYh9MWR7RQic7Qqwe4a5nkw== -react-is@^16.13.1, react-is@^16.7.0: +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -1288,7 +1292,7 @@ react-transition-group@^4.4.5: loose-envify "^1.4.0" prop-types "^15.6.2" -react@18.2.0: +"react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0", react@^18.0.0, react@^18.2.0, "react@>= 16.8.0 || 17.x.x || ^18.0.0-0", react@>=16, react@>=16.6.0, react@>=16.8.0, react@18.2.0: version "18.2.0" resolved "https://registry.npmjs.org/react/-/react-18.2.0.tgz" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -1309,6 +1313,11 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +reflect-metadata@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + regenerator-runtime@^0.13.11: version "0.13.11" resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" @@ -1352,6 +1361,18 @@ server-only@0.0.1: resolved "https://registry.npmjs.org/server-only/-/server-only-0.0.1.tgz" integrity sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA== +snarkyjs@^0.12.1: + version "0.12.1" + resolved "https://registry.npmjs.org/snarkyjs/-/snarkyjs-0.12.1.tgz" + integrity sha512-Zv1tj+NBoid2O4Pewj1sUCcqYApoDJ4M6I/Lm7WzpRwf1HwU3h4rUF10mDfBaX4fb6A+9OXLI6cmR8P2URVehg== + dependencies: + blakejs "1.2.1" + detect-gpu "^5.0.5" + isomorphic-fetch "^3.0.0" + js-sha256 "^0.9.0" + reflect-metadata "^0.1.13" + tslib "^2.3.0" + source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz" @@ -1481,12 +1502,17 @@ toposort@^2.0.2: resolved "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz" integrity sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg== +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^2.1.0, tslib@^2.4.0: +tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0: version "2.5.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.2.tgz" integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== @@ -1522,6 +1548,29 @@ util-deprecate@^1.0.2: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +webgl-constants@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/webgl-constants/-/webgl-constants-1.1.1.tgz" + integrity sha512-LkBXKjU5r9vAW7Gcu3T5u+5cvSvh5WwINdr0C+9jpzVB41cjQAP5ePArDtk/WHYdVj0GefCgM73BA7FlIiNtdg== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-fetch@^3.4.1: + version "3.6.18" + resolved "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz" + integrity sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" diff --git a/zk-keyless-wallet-contracts b/zk-keyless-wallet-contracts new file mode 160000 index 0000000..830f143 --- /dev/null +++ b/zk-keyless-wallet-contracts @@ -0,0 +1 @@ +Subproject commit 830f1434c9a89e8b3a31f0424edfef7d692f0983