From 6846a62d40878eda0df526f91fc92cb904560981 Mon Sep 17 00:00:00 2001 From: Divide-By-0 Date: Sun, 21 May 2023 23:00:05 +0900 Subject: [PATCH] refactored code, added wallet parsing tests, moved things into regex readme directly from top level, and parity with min-dfa toolbox --- README.md | 10 +- package.json | 8 +- regex_to_circom/README.md | 26 +- regex_to_circom/lexical.js | 6 +- regex_to_circom/regex_to_dfa.js | 223 +-- src/contracts/src/WalletEmailHandler.sol | 256 ++-- src/contracts/src/test/TestWallet.t.sol | 464 +++--- tsconfig.json | 19 +- yarn.lock | 1627 +++++++++++++++++++++- 9 files changed, 2103 insertions(+), 536 deletions(-) diff --git a/README.md b/README.md index 8a7bfdf..18475cd 100644 --- a/README.md +++ b/README.md @@ -74,15 +74,7 @@ public/ # Should contain vkey/wasm, but we end up fetching those from AWS server ### Regex to Circom -First, generate a regex. Go to our [min_dfa fork](zkregex.com/min_dfa) of cyberzhg's toolbox and insert your regex on the top line. We've forked [min-dfa into a UI here](zkregex.com/min_dfa) to create a UI that converts existing regexes with [] support, as well as escapes \_, and the character classes a-z, A-Z, and 0-9. It also shows the DFA states very clearly so you can choose accept states easily. This should make converting regexes into DFA form way cleaner. - -Modify either `let raw_regex = ` (that supports actual regex strings like `[A-Za-z0-9]` [but no other character ranges]) or modify `let regex = regexToMinDFASpec()` (that does not support generic brackets or character ranges, only the limited syntax in https://zkregex.com/min_dfa) in `regex_to_circom/regex_to_dfa.js`. Then run `npx tsx regex_to_dfa.js` to make sure that it compiles and `tsx` is installed, and then remove all `console.log` statements except for the last line, and finally run `python3 gen.py`. - -This will output a circom body. Wrap it the same way for instance circuits/regexes/from_regex.circom is written. To have the correct reveal states, subtract 1 from the indexes that show up on the zkregex [min_dfa visualizer](zkregex.com/min_dfa). - -Note that if your regex uses `^` at the start to mean sentinel starting character, you have to edit the resulting regex.circom file to manually change `94` (ascii code of ^) to `128` (manually inserted sentinel character meaning start, you'll see it defined as the 0th character of the string). - -We will soon have a website [WIP](https://frontend-zk-regex.vercel.app/) that automatically does this. If you'd like to make this process simpler, cleaner, and less hacky, we'd recommend making a PR here or to the zk-regex library (which is a bit out of date regex-string wise and match group-wise). +See regex_to_circom/README.md for usage instructions. ### Email Circuit Build Steps diff --git a/package.json b/package.json index 98b4c02..341beed 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,8 @@ "atob": "^2.1.2", "base64-sol": "^1.1.0", "buffer": "^6.0.3", + "chai": "^4.3.7", + "circom_tester": "^0.0.19", "circomlib": "^2.0.3", "circomlibjs": "^0.1.2", "cryo": "^0.0.6", @@ -25,6 +27,7 @@ "libmime": "^5.1.0", "localforage": "^1.10.0", "lodash": "^4.17.21", + "mocha": "^10.2.0", "next": "^12.3.1", "pako": "^2.1.0", "prettier": "^2.7.1", @@ -63,6 +66,7 @@ "test:e2e-ui": "CI=true react-scripts test --runInBand --testPathPattern='e2e-ui' --reporters=default --reporters=jest-junit", "test:e2e-zkp": "CI=true react-scripts test --runInBand --testPathPattern='e2e-dl-zkp' --reporters=default --reporters=jest-junit", "eject": "react-scripts eject", + "jest": "jest", "compile": "node circuits/scripts/compile.js", "gen-input": "npx tsx src/scripts/generate_input.ts", "compile-all": "yarn gen-input && yarn compile email true", @@ -90,12 +94,14 @@ }, "devDependencies": { "@types/atob": "^2.1.2", - "@types/jest": "^29.4.0", + "@types/jest": "^29.5.1", + "@types/mocha": "^10.0.1", "@types/node": "^18.0.6", "@types/tar-stream": "^2.2.2", "browserstack-local": "^1.5.1", "browserstack-node-sdk": "^1.6.1", "husky": "^8.0.3", + "jest": "^29.5.0", "jest-junit": "^15.0.0", "msw": "^1.0.1", "nodemon": "^2.0.19", diff --git a/regex_to_circom/README.md b/regex_to_circom/README.md index d37f2a8..0ece389 100644 --- a/regex_to_circom/README.md +++ b/regex_to_circom/README.md @@ -1,14 +1,24 @@ # ZK Regex -This code generates a circom regex file with Python and JS, but doesn't support all regex syntax. +This code generates a circom regex file with Python and JS, but doesn't support all regex syntax. You have to edit the test_regex function in regex_to_dfa.js to change what is generated. -Note that there is a full JS version of this code with tests at https://github.com/zk-email-verify/zk-regex/ , which also now supports some additional character classes. Once it reaches parity, we expect to update this repo to use that library instead. +Note that there is a buggy JS version of this code with tests and a command line tool at https://github.com/zk-email-verify/zk-regex/, which also now supports some additional character classes. Once it reaches parity, we expect to update this repo to use that library instead of gen.py. Edit the regex on the top of lexical.js to change which regex is generated, then run `python3 gen.py`. -## Halo2 +## Circom Instructions -You can use the compiled halo2_regex_lookup.txt file as input to the https://github.com/zk-email-verify/halo2-regex/ library, which will generate a regex circuit in halo2 instead. That circuit is much more efficient than this one for large inputs. +First, generate a regex. Go to our [min_dfa fork](zkregex.com/min_dfa) of cyberzhg's toolbox and insert your regex on the top line. We've forked [min-dfa into a UI here](zkregex.com/min_dfa) to create a UI that converts existing regexes with [] support, as well as escapes \_, and the character classes a-z, A-Z, and 0-9. It also shows the DFA states very clearly so you can choose accept states easily. This should make converting regexes into DFA form way cleaner. + +In the function `test_regex()` in `regex_to_dfa.js`, modify either `let raw_regex = ` (that supports some regex strings like `[A-Za-z0-9]` [but no other character ranges]) or modify `let regex = regexToMinDFASpec()` (that does not support generic brackets or character ranges, only the limited syntax in https://zkregex.com/min_dfa) in `regex_to_circom/regex_to_dfa.js`. The top line of min_dfa tool corresponds to the "raw_regex", and the second line corresponds to the expanded "regex". + +Then run `npx tsx regex_to_dfa.js` to make sure that it compiles and `tsx` is installed, and then remove all `console.log` statements except for the last line, and finally run `python3 gen.py`. + +This will output a circom body. Wrap it the same way for instance circuits/regexes/from_regex.circom is written. To have the correct reveal states, you may have to subtract 1 from the indexes that show up on the zkregex [min_dfa visualizer](zkregex.com/min_dfa). + +Note that if your regex uses `^` at the start to mean sentinel starting character, you have to edit the resulting regex.circom file to manually change `94` (ascii code of ^) to `128` (manually inserted sentinel character meaning start, you'll see it defined as the 0th character of the string). + +We will soon have a website [WIP](https://frontend-zk-regex.vercel.app/) that automatically does this. If you'd like to make this process simpler, cleaner, and less hacky, we'd recommend making a PR here or to the zk-regex library (which is a bit out of date regex-string wise and match group-wise). ## Notes @@ -16,9 +26,15 @@ states[i+1][j] means that there was a character at msg[i] which led to the trans This means that reveal for index i should be looking at state of index i+1. +Note that ^ has to be manually replaced with \x80 in the circom regex. + +## Halo2 + +You can use the compiled halo2_regex_lookup.txt file as input to the https://github.com/zk-email-verify/halo2-regex/ library, which will generate a regex circuit in halo2 instead. That circuit is more efficient than this one for large inputs for use for fast clientside proofs that require privacy. + ## Some regexes -There are more in the regex section of the top level readme. Here are som examples however, for instance for from/subject/to order-free extraction: +There are more in the regex section of the top level zk-email-verify README. Here are some examples however, for instance for from/subject/to order-free extraction: raw regex: ((\\n|\x80|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?)(\\r))+ min-dfa version: (((\n|^)(((from):([A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9| |_|.|"|@|-]+<)?[a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|.|-]+@[a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|.]+>)?|(subject:[a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z| |0|1|2|3|4|5|6|7|8|9]+)?|((to):([A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|0|1|2|3|4|5|6|7|8|9| |_|.|"|@|-]+<)?[a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|.|-]+@[a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|_|.]+>)?)(\r))+) diff --git a/regex_to_circom/lexical.js b/regex_to_circom/lexical.js index 2905a5e..7e0627e 100644 --- a/regex_to_circom/lexical.js +++ b/regex_to_circom/lexical.js @@ -139,8 +139,10 @@ function parseRegex(text) { let new_text = []; let i = 0; while (i < text.length) { - if (text[i] == "\\") { - new_text.push([text[i + 1]]); + if (text[i] === "\\") { + const escapeMap = { n: "\n", r: "\r", t: "\t", v: "\v", f: "\f", "^": String.fromCharCode(128) }; + const char = text[i + 1]; + new_text.push([escapeMap[char] || char]); i += 2; } else { new_text.push(text[i]); diff --git a/regex_to_circom/regex_to_dfa.js b/regex_to_circom/regex_to_dfa.js index bfba27f..e60d06a 100644 --- a/regex_to_circom/regex_to_dfa.js +++ b/regex_to_circom/regex_to_dfa.js @@ -1,13 +1,14 @@ /*jslint browser: true*/ /*global require, exports*/ -import { assert } from "console"; import { STRING_PRESELECTOR } from "../src/helpers/constants.ts"; import { minDfa, nfaToDfa, regexToNfa } from "./lexical"; -/** This section sets the 'regex' variable to the regex you want to use. +/** This section defines helper regex components -- to edit the regex used, edit the return + * of the test_regex function. * All of the relevant regexes are in the main repo README. */ +// Helper components const a2z = "a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z"; const A2Z = "A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z"; const r0to9 = "0|1|2|3|4|5|6|7|8|9"; @@ -23,20 +24,77 @@ const email_chars = `${alphanum}|_|.|-`; const base_64 = `(${alphanum}|\\+|/|=)`; const word_char = `(${alphanum}|_)`; -// let to_from_regex_old = '(\r\n|\x80)(to|from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>?\r\n'; -// let regex = `\r\ndkim-signature:(${key_chars}=${catch_all_without_semicolon}+; )+bh=${base_64}+; `; -// let order_invariant_regex_raw = `((\\n|\x80|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; ))?)(\\r))+` // Uses a-z syntax instead of | for each char - const a2z_nosep = "abcdefghijklmnopqrstuvwxyz"; const A2Z_nosep = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const a2f_nosep = "abcdef"; const A2F_nosep = "ABCDEF"; const r0to9_nosep = "0123456789"; -// Note that in order to specify this string in regex, we must use \\ to escape \'s i.e. in the \r\n -let order_invariant_header_regex_raw = `(((\\n|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?)(\\r))+)\\n`; -let sig_regex = `\r\ndkim-signature:(${key_chars}=${catch_all_without_semicolon}+; )+bh=${base_64}+; `; +// TODO: Note that this is replicated code in lexical.js as well +// Note that ^ has to be manually replaced with \x80 in the regex +const escapeMap = { n: "\n", r: "\r", t: "\t", v: "\v", f: "\f" }; +let whitespace = Object.values(escapeMap); +const slash_s = whitespace.join("|"); +// The test_regex function whose return needs to be edited +// Note that in order to specify some strings in regex, we must use \\ to escape \'s. +// For instance, matching the literal + is represented as \\+. +// However, matching the literal \r (ascii 60) character is still \r +// Matching \ then an r as two characters would be \\r in the js string literal +function test_regex() { + // let to_from_regex_old = '(\r\n|\x80)(to|from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>?\r\n'; + // let regex = `\r\ndkim-signature:(${key_chars}=${catch_all_without_semicolon}+; )+bh=${base_64}+; `; + // let order_invariant_regex_raw = `((\\n|\x80|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; ))?)(\\r))+` // Uses a-z syntax instead of | for each char + let email_address_regex = `([a-zA-Z0-9._%\\+-=]+@[a-zA-Z0-9.-]+)`; + + // ------- HEADER/SIGNATURE REGEX -------- + let order_invariant_header_regex_raw = `(((\\n|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?)(\\r))+)\\n`; + let sig_regex = `\r\ndkim-signature:(${key_chars}=${catch_all_without_semicolon}+; )+bh=${base_64}+; `; + + // let full_header_regex = order_invariant_header_regex_raw + sig_regex; + // let raw_regex = order_invariant_header_regex_raw; + // let regex = regexToMinDFASpec(raw_regex) + sig_regex; + // console.log(format_regex_printable(sig_regex)); + + // -------- SUBJECT REGEXES -------- + // This raw subject line (with \\ replaced with \) can be put into regexr.com to test new match strings and sanity check that it works + // TODO: Other valid chars in email addresses: #$%!^/&*, outlined at https://ladedu.com/valid-characters-for-email-addresses-the-complete-list/ and in the RFC + + // -- SEND SPECIFIC REGEXES -- + // let send_specific_raw_subject_regex = `((\r\n)|^)subject:[Ss]end (\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (${email_address_regex}|0x[0-9a-fA_F]+)\r\n`; + // let raw_subject_regex = `((\r\n)|^)subject:[a-zA-Z]+ (\\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (([a-zA-Z0-9._%\\+-=]+@[a-zA-Z0-9.-]+)|0x[0-9]+)\r\n`; + // Input: ((\\r\\n)|^)subject:[Ss]end (\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (([a-zA-Z0-9._%\+-=]+@[a-zA-Z0-9.-]+)|0x[0-9]+)\\r\\n + // This can be pasted into the first line of https://zkregex.com/min_dfa (after replacing \\ -> \) + // ((\\r\\n)|\^)subject:[Ss]end (\$)?[0-9]+(\.[0-9])? (ETH|DAI|USDC|eth|usdc|dai) to (([a-zA-Z0-9\._%\+-]+@[a-zA-Z0-9\.-]+.[a-zA-Z0-9]+)|0x[0-9]+)\\r\\n + // console.log(raw_subject_regex); + + // -- GENERIC COMMANDS -- + let raw_subject_regex = `((\r\n)|^)subject:[a-zA-Z]+ (\\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (${email_address_regex}|0x[0-9a-fA_F]+)\r\n`; + + // -------- OTHER FIELD REGEXES -------- + let raw_from_regex = `(\r\n|^)from:([A-Za-z0-9 _.,"@-]+)<[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+>\r\n`; + // let message_id_regex = `(\r\n|^)message-id:<[=@.\\+_-a-zA-Z0-9]+>\r\n`; + let regex = regexToMinDFASpec(raw_subject_regex); + console.log(format_regex_printable(regex)); + + // -------- TWITTER BODY REGEX --------- + // let regex = STRING_PRESELECTOR + `${word_char}+`; + + // console.log(raw_regex, "\n", regex); + // ---------- DEPRECATAED REGEXES ---------- + // let order_invariant_header_regex_raw = `(((\\n|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?)(\\r))+)`; + // let order_invariant_full_regex_raw = `(dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|\`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; ))?)(\\r))+` // Uses a-z syntax instead of | for each char + // let old_regex = '(\r\n|\x80)(to|from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>?\r\n'; + // let regex = `(\n|^)(to|from):((${email_chars}|"|@| )+<)?(${email_chars})+@(${email_chars})+>?\r`; + // let regex = `(\r\n|^)(to|from):((${email_chars}|"|@| )+<)?(${email_chars})+@(${email_chars})+>?\r\n`; + // 'dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; )+bh=(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|\\+|/|=)+; ' + // let regex = 'hello(0|1|2|3|4|5|6|7|8|9)+world'; + // console.log(regex); + // console.log(Buffer.from(regex).toString('base64')); + return regex; +} + +// Escapes and prints regexes (might be buggy) function format_regex_printable(s) { const escaped_string_json = JSON.stringify(s); const escaped_string = escaped_string_json.slice(1, escaped_string_json.length - 1); @@ -55,11 +113,22 @@ function format_regex_printable(s) { // let fixed = escaped.replaceAll("\\(", "(").replaceAll("\\)", ")").replaceAll("\\+", "+").replaceAll("\\*", "*").replaceAll("\\?", "?"); } -// Note that this is not complete and very case specific i.e. can only handle a-z and not a-c. +// Note that this is not complete and very case specific i.e. can only handle a-z and a-f, and not a-c. +// This function expands [] sections to convert values for https://zkregex.com/min_dfa +// The input is a regex with [] and special characters (i.e. the first line of min_dfa tool) +// The output is expanded regexes without any special characters function regexToMinDFASpec(str) { // Replace all A-Z with A2Z etc // TODO: Upstream this to min_dfa - let combined_nosep = str.replaceAll("A-Z", A2Z_nosep).replaceAll("a-z", a2z_nosep).replaceAll("A-F", A2F_nosep).replaceAll("a-f", a2f_nosep).replaceAll("0-9", r0to9_nosep); + let combined_nosep = str + .replaceAll("A-Z", A2Z_nosep) + .replaceAll("a-z", a2z_nosep) + .replaceAll("A-F", A2F_nosep) + .replaceAll("a-f", a2f_nosep) + .replaceAll("0-9", r0to9_nosep) + .replaceAll("\\w", A2Z_nosep + r0to9_nosep + a2z_nosep + "_") + .replaceAll("\\d", r0to9_nosep) + .replaceAll("\\s", slash_s); // .replaceAll("\\w", A2Z_nosep + r0to9_nosep + a2z_nosep); // I think that there's also an underscore here function addPipeInsideBrackets(str) { @@ -102,6 +171,7 @@ function regexToMinDFASpec(str) { function checkIfBracketsHavePipes(str) { let result = true; let insideBrackets = false; + let insideParens = 0; let indexAt = 0; for (let i = 0; i < str.length; i++) { if (indexAt >= str.length) break; @@ -112,6 +182,11 @@ function regexToMinDFASpec(str) { } else if (str[indexAt] === "]") { insideBrackets = false; } + if (str[indexAt] === "(") { + insideParens++; + } else if (str[indexAt] === ")") { + insideParens--; + } if (insideBrackets) { if (str[indexAt] === "|") { indexAt++; @@ -120,6 +195,9 @@ function regexToMinDFASpec(str) { return result; } } + if (!insideParens && str[indexAt] === "|") { + console.log("Error: | outside of parens!"); + } if (str[indexAt] === "\\") { indexAt++; } @@ -132,7 +210,9 @@ function regexToMinDFASpec(str) { if (!checkIfBracketsHavePipes(combined_nosep)) { // console.log("Adding pipes within brackets between everything!"); combined = addPipeInsideBrackets(combined_nosep); - assert(checkIfBracketsHavePipes(combined), "Did not add brackets correctly!"); + if (!checkIfBracketsHavePipes(combined)) { + console.log("Did not add brackets correctly!"); + } } else { combined = combined_nosep; } @@ -140,43 +220,6 @@ function regexToMinDFASpec(str) { return combined; } -// let full_header_regex = order_invariant_header_regex_raw + sig_regex; -// let raw_regex = order_invariant_header_regex_raw; -// let regex = regexToMinDFASpec(raw_regex) + sig_regex; -// console.log(format_regex_printable(sig_regex)); - -// This raw subject line (with \\ replaced with \) can be put into regexr.com to test new match strings and sanity check that it works -let email_address_regex = `([a-zA-Z0-9._%\\+-=]+@[a-zA-Z0-9.-]+)`; -// TODO: Other valid chars in email addresses: #$%!^/&*, outlined at https://ladedu.com/valid-characters-for-email-addresses-the-complete-list/ and in the RFC -// let send_specific_raw_subject_regex = `((\r\n)|^)subject:[Ss]end (\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (${email_address_regex}|0x[0-9a-fA_F]+)\r\n`; -let raw_subject_regex = `((\r\n)|^)subject:[a-zA-Z]+ (\\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (${email_address_regex}|0x[0-9a-fA_F]+)\r\n`; -// let raw_subject_regex = `((\r\n)|^)subject:[a-zA-Z]+ (\\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (([a-zA-Z0-9._%\\+-=]+@[a-zA-Z0-9.-]+)|0x[0-9]+)\r\n`; -// Input: ((\\r\\n)|^)subject:[Ss]end (\$)?[0-9]+(.[0-9]+)? [a-zA-Z]+ to (([a-zA-Z0-9._%\+-=]+@[a-zA-Z0-9.-]+)|0x[0-9]+)\\r\\n -let raw_from_regex = `(\r\n|^)from:([A-Za-z0-9 _.,"@-]+)<[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+>\r\n`; -// let message_id_regex = `(\r\n|^)message-id:<[=@.\\+_-a-zA-Z0-9]+>\r\n`; -// This can be pasted into the first line of https://zkregex.com/min_dfa (after replacing \\ -> \) -// ((\\r\\n)|\^)subject:[Ss]end (\$)?[0-9]+(\.[0-9])? (ETH|DAI|USDC|eth|usdc|dai) to (([a-zA-Z0-9\._%\+-]+@[a-zA-Z0-9\.-]+.[a-zA-Z0-9]+)|0x[0-9]+)\\r\\n -// console.log(raw_subject_regex); -let regex = regexToMinDFASpec(raw_subject_regex); -// This can be pasted into the second line of https://zkregex.com/min_dfa -// console.log(format_regex_printable(regex)); -// TODO: change \^ into \0x80 [need the \ to parse more than 1 char] -// TODO: need to do this change in all .circom files as well - -// console.log(raw_regex, "\n", regex); -// let order_invariant_header_regex_raw = `(((\\n|^)(((from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?|(subject:[a-zA-Z 0-9]+)?|((to):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>)?)(\\r))+)`; -// let order_invariant_full_regex_raw = `(dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|\`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; ))?)(\\r))+` // Uses a-z syntax instead of | for each char -// let old_regex = '(\r\n|\x80)(to|from):([A-Za-z0-9 _."@-]+<)?[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.]+>?\r\n'; -// let regex = `(\n|^)(to|from):((${email_chars}|"|@| )+<)?(${email_chars})+@(${email_chars})+>?\r`; -// let regex = `(\r\n|^)(to|from):((${email_chars}|"|@| )+<)?(${email_chars})+@(${email_chars})+>?\r\n`; -// let regex = `\r\ndkim-signature:(${key_chars}=${catch_all_without_semicolon}+; )+bh=${base_64}+; `; -// console.log(regex); -// 'dkim-signature:((a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z)=(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|!|"|#|$|%|&|\'|\\(|\\)|\\*|\\+|,|-|.|/|:|<|=|>|\\?|@|[|\\\\|]|^|_|`|{|\\||}|~| |\t|\n|\r|\x0B|\f)+; )+bh=(a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|0|1|2|3|4|5|6|7|8|9|\\+|/|=)+; ' -// let regex = STRING_PRESELECTOR + `${word_char}+`; -// let regex = 'hello(0|1|2|3|4|5|6|7|8|9)+world'; -// console.log(regex); -// console.log(Buffer.from(regex).toString('base64')); - function toNature(col) { var i, j, @@ -192,47 +235,61 @@ function toNature(col) { return result; } -let nfa = regexToNfa(regex); -let dfa = minDfa(nfaToDfa(nfa)); +function printGraphForRegex(regex) { + let nfa = regexToNfa(regex); + let dfa = minDfa(nfaToDfa(nfa)); -var i, - j, - states = {}, - nodes = [], - stack = [dfa], - symbols = [], - top; + var i, + j, + states = {}, + nodes = [], + stack = [dfa], + symbols = [], + top; -while (stack.length > 0) { - top = stack.pop(); - if (!states.hasOwnProperty(top.id)) { - states[top.id] = top; - top.nature = toNature(top.id); - nodes.push(top); - for (i = 0; i < top.edges.length; i += 1) { - if (top.edges[i][0] !== "ϵ" && symbols.indexOf(top.edges[i][0]) < 0) { - symbols.push(top.edges[i][0]); + console.log("DFA: ", dfa); + + while (stack.length > 0) { + top = stack.pop(); + if (!states.hasOwnProperty(top.id)) { + states[top.id] = top; + console.log("TOP: ", top.id, top.symbols); + top.nature = toNature(top.id); + nodes.push(top); + for (i = 0; i < top.edges.length; i += 1) { + if (top.edges[i][0] !== "ϵ" && symbols.indexOf(top.edges[i][0]) < 0) { + symbols.push(top.edges[i][0]); + } + stack.push(top.edges[i][1]); } - stack.push(top.edges[i][1]); } } -} -nodes.sort(function (a, b) { - return a.nature - b.nature; -}); -symbols.sort(); + nodes.sort(function (a, b) { + return a.nature - b.nature; + }); + symbols.sort(); -let graph = []; -for (let i = 0; i < nodes.length; i += 1) { - let curr = {}; - curr.type = nodes[i].type; - curr.edges = {}; - for (let j = 0; j < symbols.length; j += 1) { - if (nodes[i].trans.hasOwnProperty(symbols[j])) { - curr.edges[symbols[j]] = nodes[i].trans[symbols[j]].nature - 1; + let graph = []; + for (let i = 0; i < nodes.length; i += 1) { + let curr = {}; + curr.type = nodes[i].type; + curr.edges = {}; + for (let j = 0; j < symbols.length; j += 1) { + if (nodes[i].trans.hasOwnProperty(symbols[j])) { + curr.edges[symbols[j]] = nodes[i].trans[symbols[j]].nature - 1; + } } + graph[nodes[i].nature - 1] = curr; } - graph[nodes[i].nature - 1] = curr; + + console.log(JSON.stringify(graph)); + return JSON.stringify(graph); } -console.log(JSON.stringify(graph)); +let regex = test_regex(); +printGraphForRegex(regex); + +if (typeof require === "function") { + exports.regexToMinDFASpec = regexToMinDFASpec; + exports.toNature = toNature; +} diff --git a/src/contracts/src/WalletEmailHandler.sol b/src/contracts/src/WalletEmailHandler.sol index 4040a41..a4cfb9c 100644 --- a/src/contracts/src/WalletEmailHandler.sol +++ b/src/contracts/src/WalletEmailHandler.sol @@ -10,145 +10,151 @@ import "./StringUtils.sol"; import "./AutoApproveWallet.sol"; import "./TestERC20.sol"; import "./NFTSVG.sol"; -import { Verifier } from "./Groth16VerifierWallet.sol"; +import {Verifier} from "./Groth16VerifierWallet.sol"; import "./MailServer.sol"; contract VerifiedWalletEmail { - using StringUtils for *; + using StringUtils for *; - uint16 public constant packSize = 7; // 7 bytes in a packed item returned from circom + uint16 public constant packSize = 7; // 7 bytes in a packed item returned from circom - uint16 public constant body_len = 4 * 4; - uint16 public constant rsa_modulus_chunks_len = 17; - uint16 public constant commitment_len = 1; - uint16 public constant msg_len = body_len + rsa_modulus_chunks_len + commitment_len; // 34 + uint16 public constant body_len = 4 * 4; + uint16 public constant rsa_modulus_chunks_len = 17; + uint16 public constant commitment_len = 1; + uint16 public constant msg_len = body_len + rsa_modulus_chunks_len + commitment_len; // 34 - uint16 public constant header_len = msg_len - body_len; - uint16 public constant addressIndexInSignals = msg_len - 1; // The last index is the commitment + uint16 public constant header_len = msg_len - body_len; + uint16 public constant addressIndexInSignals = msg_len - 1; // The last index is the commitment - mapping(string => uint256[rsa_modulus_chunks_len]) public verifiedMailserverKeys; - mapping(string => uint256) public balance; - mapping(uint256 => bool) public nullifier; - MailServer mailServer; - Verifier public immutable verifier; - TestEmailToken public testToken; + mapping(string => uint256[rsa_modulus_chunks_len]) public verifiedMailserverKeys; + mapping(string => uint256) public balance; + mapping(uint256 => bool) public nullifier; + MailServer mailServer; + Verifier public immutable verifier; + TestEmailToken public testToken; - mapping(bytes32 => address) public wallets; + mapping(bytes32 => address) public wallets; - // Arguments are deployed contracts/addresses - constructor(Verifier v, MailServer m, TestEmailToken t) { - // Do dig TXT outgoing._domainkey.twitter.com to verify these. - // This is the base 2^121 representation of that key. - // Circom bigint: represent a = a[0] + a[1] * 2**n + .. + a[k - 1] * 2**(n * k) - require(rsa_modulus_chunks_len + body_len + 1 == msg_len, "Variable counts are wrong!"); - verifier = v; - mailServer = m; - testToken = t; - } - - // TODO: Make internal - function moveTokens(bytes32 salt1, bytes32 salt2, uint256 amount) public { - address wallet1 = getOrCreateWallet(salt1); - address wallet2 = getOrCreateWallet(salt2); - - // Check for allowance and balance - require(testToken.allowance(wallet1, address(this)) >= amount, "Allowance too low"); - require(testToken.balanceOf(wallet1) >= amount, "Insufficient balance to perform the transfer"); - testToken.transferFrom(wallet1, wallet2, amount); - } - - function getOrCreateWallet(bytes32 salt) internal returns (address) { - bytes32 hashedSalt = keccak256(abi.encodePacked(salt)); - address wallet = wallets[hashedSalt]; - if (wallet == address(0)) { - // Create wallet - bytes memory bytecode = type(AutoApproveWallet).creationCode; - assembly { - wallet := create2(0, add(bytecode, 0x20), mload(bytecode), hashedSalt) - } - console.log("Wallet index at:"); - console.logBytes32(hashedSalt); - console.log("Wallet address created:", wallet); - require(wallet != address(0), "Wallet creation failed"); - wallets[hashedSalt] = wallet; - - // TODO: Remove this mint, it's only for test token - testToken.mint(wallet, 10 * 10 ** testToken.decimals()); // 10 tokens with 18 decimals - - // Initialize the wallet with the token address and approver - AutoApproveWallet(wallet).initialize(address(testToken), address(this)); - } - return wallet; - } - - function convertEmailToIndex(string memory email) public pure returns (bytes32) { - return keccak256(abi.encodePacked(convertEmailToBytes(email))); - } - - function convertEmailToBytes(string memory email) public pure returns (bytes32) { - return bytes32(bytes(StringUtils.removeTrailingZeros(email))); - } - - // TODO: When anon, it shouldn't be possible to get this via email, you have to pass in the salt - function getBalance(string memory email) public view returns (uint256) { - return testToken.balanceOf(wallets[convertEmailToIndex(email)]); - } - - function transfer(uint256[2] memory a, uint256[2][2] memory b, uint256[2] memory c, uint256[msg_len] memory signals) public { - // TODO no invalid signal check yet, which is fine since the zk proof does it - // Checks: Verify proof and check signals - // require(signals[0] == 1337, "invalid signals"); - - // 3 public signals are the masked packed message bytes, 17 are the modulus. - uint256[] memory bodySignals = new uint256[](body_len); - uint256[] memory rsaModulusSignals = new uint256[](header_len); - for (uint256 i = 0; i < body_len; i++) { - bodySignals[i] = signals[i]; - } - for (uint256 i = body_len; i < msg_len - 1; i++) { - rsaModulusSignals[i - body_len] = signals[i]; + // Arguments are deployed contracts/addresses + constructor(Verifier v, MailServer m, TestEmailToken t) { + // Do dig TXT outgoing._domainkey.twitter.com to verify these. + // This is the base 2^121 representation of that key. + // Circom bigint: represent a = a[0] + a[1] * 2**n + .. + a[k - 1] * 2**(n * k) + require(rsa_modulus_chunks_len + body_len + 1 == msg_len, "Variable counts are wrong!"); + verifier = v; + mailServer = m; + testToken = t; } - // Check eth address committed to in proof matches msg.sender, to avoid doublespend and relayer-frontrunning-relayer-for-profit - // require(address(uint160(signals[addressIndexInSignals])) == msg.sender, "Invalid address"); + // TODO: Make internal + function moveTokens(bytes32 salt1, bytes32 salt2, uint256 amount) public { + address wallet1 = getOrCreateWallet(salt1); + address wallet2 = getOrCreateWallet(salt2); - // TODO: Note that this is buggy since it is malleable - require(!nullifier[a[0]], "Value is already true"); - nullifier[a[0]] = true; - - // Check from/to email domains are correct [in this case, only from domain is checked] - // Right now, we just check that any email was received from anyone at Twitter, which is good enough for now - // We will upload the version with these domain checks soon! - // require(_domainCheck(headerSignals), "Invalid domain"); - string memory fromEmail = StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 0, 5), packSize * 4, packSize); - string memory amount = StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 5, 10), packSize * 4, packSize); - string memory currency = StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 10, 11), packSize * 4, packSize); - string memory recipientEmail = StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 11, 16), packSize * 4, packSize); - - string memory domain = StringUtils.getDomainFromEmail(fromEmail); - console.log(domain); - // Verify that the public key for RSA matches the hardcoded one - for (uint256 i = body_len; i < msg_len - 1; i++) { - require(mailServer.isVerified(domain, i - body_len, signals[i]), "Invalid: RSA modulus not matched"); + // Check for allowance and balance + require(testToken.allowance(wallet1, address(this)) >= amount, "Allowance too low"); + require(testToken.balanceOf(wallet1) >= amount, "Insufficient balance to perform the transfer"); + testToken.transferFrom(wallet1, wallet2, amount); } - require(verifier.verifyProof(a, b, c, signals), "Invalid Proof"); // checks effects iteractions, this should come first - console.log("Proof passed!"); - // Print transfer data - uint amountToTransfer = StringUtils.stringToUint(amount) * 10 ** testToken.decimals(); - console.log("Original amount", fromEmail); - console.log("Original amount", recipientEmail); - console.log("Original amount", amount); - console.log("Original amount", currency); - console.log("Transferring", amountToTransfer); - console.log("From", fromEmail, "to", recipientEmail); + function getOrCreateWallet(bytes32 salt) internal returns (address) { + bytes32 hashedSalt = keccak256(abi.encodePacked(salt)); + address wallet = wallets[hashedSalt]; + if (wallet == address(0)) { + // Create wallet + bytes memory bytecode = type(AutoApproveWallet).creationCode; + assembly { + wallet := create2(0, add(bytecode, 0x20), mload(bytecode), hashedSalt) + } + console.log("Wallet index at:"); + console.logBytes32(hashedSalt); + console.log("Wallet address created:", wallet); + require(wallet != address(0), "Wallet creation failed"); + wallets[hashedSalt] = wallet; - // Effects: Send money - // Transfer the tokens - moveTokens(convertEmailToBytes(fromEmail), convertEmailToBytes(recipientEmail), amountToTransfer); - } + // TODO: Remove this mint, it's only for test token + testToken.mint(wallet, 10 * 10 ** testToken.decimals()); // 10 tokens with 18 decimals - function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal { - require(from == address(0), "Cannot transfer - VerifiedEmail is soulbound"); - } + // Initialize the wallet with the token address and approver + AutoApproveWallet(wallet).initialize(address(testToken), address(this)); + } + return wallet; + } + + function convertEmailToIndex(string memory email) public pure returns (bytes32) { + return keccak256(abi.encodePacked(convertEmailToBytes(email))); + } + + function convertEmailToBytes(string memory email) public pure returns (bytes32) { + return bytes32(bytes(StringUtils.removeTrailingZeros(email))); + } + + // TODO: When anon, it shouldn't be possible to get this via email, you have to pass in the salt + function getBalance(string memory email) public view returns (uint256) { + return testToken.balanceOf(wallets[convertEmailToIndex(email)]); + } + + function transfer(uint256[2] memory a, uint256[2][2] memory b, uint256[2] memory c, uint256[msg_len] memory signals) + public + { + // TODO no invalid signal check yet, which is fine since the zk proof does it + // Checks: Verify proof and check signals + // require(signals[0] == 1337, "invalid signals"); + + // 3 public signals are the masked packed message bytes, 17 are the modulus. + uint256[] memory bodySignals = new uint256[](body_len); + uint256[] memory rsaModulusSignals = new uint256[](header_len); + for (uint256 i = 0; i < body_len; i++) { + bodySignals[i] = signals[i]; + } + for (uint256 i = body_len; i < msg_len - 1; i++) { + rsaModulusSignals[i - body_len] = signals[i]; + } + + // Check eth address committed to in proof matches msg.sender, to avoid doublespend and relayer-frontrunning-relayer-for-profit + // require(address(uint160(signals[addressIndexInSignals])) == msg.sender, "Invalid address"); + + // TODO: Note that this is buggy since it is malleable + require(!nullifier[a[0]], "Value is already true"); + nullifier[a[0]] = true; + + // Check from/to email domains are correct [in this case, only from domain is checked] + // Right now, we just check that any email was received from anyone at Twitter, which is good enough for now + // We will upload the version with these domain checks soon! + // require(_domainCheck(headerSignals), "Invalid domain"); + string memory fromEmail = + StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 0, 5), packSize * 4, packSize); + string memory amount = + StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 5, 10), packSize * 4, packSize); + string memory currency = + StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 10, 11), packSize * 4, packSize); + string memory recipientEmail = + StringUtils.convertPackedBytesToString(StringUtils.sliceArray(bodySignals, 11, 16), packSize * 4, packSize); + + string memory domain = StringUtils.getDomainFromEmail(fromEmail); + console.log(domain); + // Verify that the public key for RSA matches the hardcoded one + for (uint256 i = body_len; i < msg_len - 1; i++) { + require(mailServer.isVerified(domain, i - body_len, signals[i]), "Invalid: RSA modulus not matched"); + } + require(verifier.verifyProof(a, b, c, signals), "Invalid Proof"); // checks effects iteractions, this should come first + console.log("Proof passed!"); + + // Print transfer data + uint256 amountToTransfer = StringUtils.stringToUint(amount) * 10 ** testToken.decimals(); + console.log("Original from email", fromEmail); + console.log("Original recipient email", recipientEmail); + console.log("Original amount", amount); + console.log("Original currency", currency); + console.log("Transferring", amountToTransfer); + console.log("From", fromEmail, "to", recipientEmail); + + // Effects: Send money + // Transfer the tokens + moveTokens(convertEmailToBytes(fromEmail), convertEmailToBytes(recipientEmail), amountToTransfer); + } + + function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal { + require(from == address(0), "Cannot transfer - VerifiedEmail is soulbound"); + } } diff --git a/src/contracts/src/test/TestWallet.t.sol b/src/contracts/src/test/TestWallet.t.sol index 1d5bd35..6535629 100644 --- a/src/contracts/src/test/TestWallet.t.sol +++ b/src/contracts/src/test/TestWallet.t.sol @@ -8,249 +8,267 @@ import "../StringUtils.sol"; import "../Groth16VerifierWallet.sol"; contract WalletUtilsTest is Test { - using StringUtils for *; + using StringUtils for *; - address internal constant zero = 0x0000000000000000000000000000000000000000; - address constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; - uint16 public constant packSize = 7; - uint16 public constant body_len = 4 * 4; + address internal constant zero = 0x0000000000000000000000000000000000000000; + address constant VM_ADDR = 0x7109709ECfa91a80626fF3989D68f67F5b1DD12D; + uint16 public constant packSizeOld = 7; + uint16 public constant packSize = 30; + uint16 public constant body_len = 4 * 4; - VerifiedWalletEmail testVerifier; - MailServer mailServer; - Verifier proofVerifier; - TestEmailToken erc20; + VerifiedWalletEmail testVerifier; + MailServer mailServer; + Verifier proofVerifier; + TestEmailToken erc20; - function setUp() public { - proofVerifier = new Verifier(); - mailServer = new MailServer(); - erc20 = new TestEmailToken(5000); - testVerifier = new VerifiedWalletEmail(proofVerifier, mailServer, erc20); - } + function setUp() public { + proofVerifier = new Verifier(); + mailServer = new MailServer(); + erc20 = new TestEmailToken(5000); + testVerifier = new VerifiedWalletEmail(proofVerifier, mailServer, erc20); + } - // TODO: Fails - // function testUnpackIntoCurrency() public { - // uint256[] memory packedBytes = new uint256[](5); - // packedBytes[0] = 0; - // packedBytes[1] = 0; - // packedBytes[2] = 0; - // packedBytes[3] = 13661285; - // string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - // string memory intended_value = "eth"; - // assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - // console.logString(byteList); - // } + // Old unpacks + function testUnpackIntoFrom2() public { + uint256[] memory packedBytes = new uint256[](4); + packedBytes[0] = 30515164652858234; + packedBytes[1] = 18147879272211830; + packedBytes[2] = 27917065853693287; + packedBytes[3] = 28015; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSizeOld); + string memory intended_value = "zkemailverify@gmail.com"; + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + console.logString(byteList); + } - function testUnpackIntoFrom2() public { - uint256[] memory packedBytes = new uint256[](4); - packedBytes[0] = 30515164652858234; - packedBytes[1] = 18147879272211830; - packedBytes[2] = 27917065853693287; - packedBytes[3] = 28015; - string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - string memory intended_value = "zkemailverify@gmail.com"; - assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - console.logString(byteList); - } + function testUnpackIntoFrom2_1() public { + uint256[] memory packedBytes = new uint256[](4); + packedBytes[0] = 30515164652858234; + packedBytes[1] = 14207229598262646; + packedBytes[2] = 13067048790615872; + packedBytes[3] = 7171939; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSizeOld); + string memory intended_value = "zkemailverify2@gmail.com"; + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + console.logString(byteList); + } - function testUnpackIntoFrom2_1() public { - uint256[] memory packedBytes = new uint256[](4); - packedBytes[0] = 30515164652858234; - packedBytes[1] = 14207229598262646; - packedBytes[2] = 13067048790615872; - packedBytes[3] = 7171939; - string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - string memory intended_value = "zkemailverify2@gmail.com"; - assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - console.logString(byteList); - } + // Note that decimal points are removed + function testUnpackIntoFloat3() public { + uint256[] memory packedBytes = new uint256[](4); + packedBytes[0] = 0; + packedBytes[1] = 3485236; + packedBytes[2] = 0; + packedBytes[3] = 0; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSizeOld); + string memory intended_value = "4.5"; + assertEq(StringUtils.stringToUint(byteList), 4); + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + console.logString(byteList); + } - // Note that decimal points are removed - function testUnpackIntoFloat3() public { - uint256[] memory packedBytes = new uint256[](4); - packedBytes[0] = 0; - packedBytes[1] = 3485236; - packedBytes[2] = 0; - packedBytes[3] = 0; - string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - string memory intended_value = "4.5"; - assertEq(StringUtils.stringToUint(byteList), 4); - assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - console.logString(byteList); - } + function testUnpackIntoString4() public { + uint256[] memory packedBytes = new uint256[](4); + packedBytes[0] = 30515164652858234; + packedBytes[1] = 14207229598262646; + packedBytes[2] = 13067048790615872; + packedBytes[3] = 7171939; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSizeOld); + string memory intended_value = "zkemailverify2@gmail.com"; + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + console.logString(byteList); + } - function testUnpackIntoString4() public { - uint256[] memory packedBytes = new uint256[](4); - packedBytes[0] = 30515164652858234; - packedBytes[1] = 14207229598262646; - packedBytes[2] = 13067048790615872; - packedBytes[3] = 7171939; - string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - string memory intended_value = "zkemailverify2@gmail.com"; - assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - console.logString(byteList); - } + function testUnpackIntoString4_1() public { + uint256[] memory packedBytes = new uint256[](4); + packedBytes[0] = 30515164652858234; + packedBytes[1] = 18147879272211830; + packedBytes[2] = 27917065853693287; + packedBytes[3] = 28015; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSizeOld); + string memory intended_value = "zkemailverify@gmail.com"; + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + console.logString(byteList); + } - function testUnpackIntoString4_1() public { - uint256[] memory packedBytes = new uint256[](4); - packedBytes[0] = 30515164652858234; - packedBytes[1] = 18147879272211830; - packedBytes[2] = 27917065853693287; - packedBytes[3] = 28015; - string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - string memory intended_value = "zkemailverify@gmail.com"; - assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - console.logString(byteList); - } + function testUnpackIntoString_Pack30_0() public { + uint256[] memory packedBytes = new uint256[](1); + packedBytes[0] = 1684956499; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); + string memory intended_value = "Send"; + console.logString(byteList); + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + } - // function testUnpackIntoString4_2() public { - // uint256[] memory packedBytes = new uint256[](1); - // packedBytes[0] = 13661285; - // string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); - // string memory intended_value = "eth"; - // assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); - // console.logString(byteList); - // console.logBytes(bytes(byteList)); - // } + function testUnpackIntoString_Pack30_1() public { + uint256[] memory packedBytes = new uint256[](1); + packedBytes[0] = 2097152; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); + string memory intended_value = "dai"; + console.logString(byteList); + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + } - // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits) - function testVerifyWalletEmail() public { - uint256[34] memory publicSignals; - publicSignals[0] = 30515164652858234; - publicSignals[1] = 14207229598262646; - publicSignals[2] = 13067048790615872; - publicSignals[3] = 7171939; - publicSignals[4] = 0; - publicSignals[5] = 3485236; - publicSignals[6] = 0; - publicSignals[7] = 0; - publicSignals[8] = 0; - publicSignals[9] = 0; - publicSignals[10] = 13661285; - publicSignals[11] = 30515164652858234; - publicSignals[12] = 18147879272211830; - publicSignals[13] = 27917065853693287; - publicSignals[14] = 28015; - publicSignals[15] = 0; - publicSignals[16] = 2645260732387577900369388087711111123; - publicSignals[17] = 2332356685544126002119529566553287568; - publicSignals[18] = 587306946802222480578301599869128605; - publicSignals[19] = 1506808391343308562602228807782956759; - publicSignals[20] = 346696857027646434280628892032962406; - publicSignals[21] = 1655371642328152796841392591809876356; - publicSignals[22] = 773654757689631205903545947464515700; - publicSignals[23] = 137546842031326636154929265514533208; - publicSignals[24] = 979104436480501594376401576155183314; - publicSignals[25] = 1231402749194646866996172591430155068; - publicSignals[26] = 1573385231473380013164181608611759098; - publicSignals[27] = 1199794061179553911325952711127005960; - publicSignals[28] = 1393369642957971131987926230229916984; - publicSignals[29] = 2610100650498432208787557818514105421; - publicSignals[30] = 1405475120223887084339881602469286332; - publicSignals[31] = 2000538708964654339221687925776343058; - publicSignals[32] = 3483697379198011592407370076533025; - publicSignals[33] = 0; - uint256[2] memory proof_a = [ - 18214528451748025070455293058606558684367776249349482399993204103864741723468, - 15003530197647463595718037429164132062637106744660222086396269550328064261424 - ]; - // Note: you need to swap the order of the two elements in each subarray - uint256[2][2] memory proof_b = [ - [6461911610358766053365043908758394834732672681413987884242698462904724197255, 342103975494932482608081876029483576044074727035168137477391964391537410934], - [18351039964982209778799207158064219024562949371673722720718374575366986849311, 4669785024601609291633792167221088192727471283005169123961871153351390329210] - ]; - uint256[2] memory proof_c = [ - 17308091971421169481892128502517801279695749002269857786558424203436590932091, - 14587778590638321976005513090859474748106449498450192078465868665769372103254 - ]; + function testUnpackIntoString_Pack30_2() public { + uint256[] memory packedBytes = new uint256[](1); + packedBytes[0] = 452605509681; + string memory byteList = StringUtils.convertPackedBytesToString(packedBytes, 30, packSize); + string memory intended_value = "2"; + console.logString(byteList); + assertEq(bytes32(bytes(byteList)), bytes32(bytes(intended_value))); + } - // Test proof verification - bool verified = proofVerifier.verifyProof(proof_a, proof_b, proof_c, publicSignals); - assertEq(verified, true); + // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits) + function testVerifyWalletEmail() public { + uint256[34] memory publicSignals; + publicSignals[0] = 30515164652858234; + publicSignals[1] = 14207229598262646; + publicSignals[2] = 13067048790615872; + publicSignals[3] = 7171939; + publicSignals[4] = 0; + publicSignals[5] = 3485236; + publicSignals[6] = 0; + publicSignals[7] = 0; + publicSignals[8] = 0; + publicSignals[9] = 0; + publicSignals[10] = 13661285; + publicSignals[11] = 30515164652858234; + publicSignals[12] = 18147879272211830; + publicSignals[13] = 27917065853693287; + publicSignals[14] = 28015; + publicSignals[15] = 0; + publicSignals[16] = 2645260732387577900369388087711111123; + publicSignals[17] = 2332356685544126002119529566553287568; + publicSignals[18] = 587306946802222480578301599869128605; + publicSignals[19] = 1506808391343308562602228807782956759; + publicSignals[20] = 346696857027646434280628892032962406; + publicSignals[21] = 1655371642328152796841392591809876356; + publicSignals[22] = 773654757689631205903545947464515700; + publicSignals[23] = 137546842031326636154929265514533208; + publicSignals[24] = 979104436480501594376401576155183314; + publicSignals[25] = 1231402749194646866996172591430155068; + publicSignals[26] = 1573385231473380013164181608611759098; + publicSignals[27] = 1199794061179553911325952711127005960; + publicSignals[28] = 1393369642957971131987926230229916984; + publicSignals[29] = 2610100650498432208787557818514105421; + publicSignals[30] = 1405475120223887084339881602469286332; + publicSignals[31] = 2000538708964654339221687925776343058; + publicSignals[32] = 3483697379198011592407370076533025; + publicSignals[33] = 0; + uint256[2] memory proof_a = [ + 18214528451748025070455293058606558684367776249349482399993204103864741723468, + 15003530197647463595718037429164132062637106744660222086396269550328064261424 + ]; + // Note: you need to swap the order of the two elements in each subarray + uint256[2][2] memory proof_b = [ + [ + 6461911610358766053365043908758394834732672681413987884242698462904724197255, + 342103975494932482608081876029483576044074727035168137477391964391537410934 + ], + [ + 18351039964982209778799207158064219024562949371673722720718374575366986849311, + 4669785024601609291633792167221088192727471283005169123961871153351390329210 + ] + ]; + uint256[2] memory proof_c = [ + 17308091971421169481892128502517801279695749002269857786558424203436590932091, + 14587778590638321976005513090859474748106449498450192078465868665769372103254 + ]; - // Test mint after spoofing msg.sender - // Vm vm = Vm(VM_ADDR); - // vm.startPrank(0x0000000000000000000000000000000000000001); - // testVerifier.transfer(proof_a, proof_b, proof_c, publicSignals); - // vm.stopPrank(); - } + // Test proof verification + bool verified = proofVerifier.verifyProof(proof_a, proof_b, proof_c, publicSignals); + assertEq(verified, true); - // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits)function testTransferWalletEmail3() public { - function testTransferWalletEmail3() public { - uint256[34] memory publicSignals = [ - uint256(30515164652858234), - 18147879272211830, - 27917065853693287, - 28015, - 0, - 50, - 0, - 0, - 0, - 0, - 13762560, - 30515164652858234, - 14207229598262646, - 13067048790615872, - 7171939, - 0, - 1886180949733815343726466520516992271, - 1551366393280668736485689616947198994, - 1279057759087427731263511728885611780, - 1711061746895435768547617398484429347, - 2329140368326888129406637741054282011, - 2094858442222190249786465516374057361, - 2584558507302599829894674874442909655, - 1521552483858643935889582214011445675, - 176847449040377757035522930003764000, - 632921959964166974634188077062540145, - 2172441457165086627497230906075093832, - 248112436365636977369105357296082574, - 1408592841800630696650784801114783401, - 364610811473321782531041012695979858, - 342338521965453258686441392321054163, - 2269703683857229911110544415296249295, - 3643644972862751728748413716653892, - 0 - ]; + // Test mint after spoofing msg.sender + // Vm vm = Vm(VM_ADDR); + // vm.startPrank(0x0000000000000000000000000000000000000001); + // testVerifier.transfer(proof_a, proof_b, proof_c, publicSignals); + // vm.stopPrank(); + } - uint256[2] memory proof_a = [ - 18568569282385577752003966587062685654688127322905645867690168113644909624209, - 18759903706259146962639961745797835986209265804220236624283397965640158483190 - ]; + // Should pass (note that there are extra 0 bytes, which are filtered out but should be noted in audits)function testTransferWalletEmail3() public { + function testTransferWalletEmail3() public { + uint256[34] memory publicSignals = [ + uint256(30515164652858234), + 18147879272211830, + 27917065853693287, + 28015, + 0, + 50, + 0, + 0, + 0, + 0, + 13762560, + 30515164652858234, + 14207229598262646, + 13067048790615872, + 7171939, + 0, + 1886180949733815343726466520516992271, + 1551366393280668736485689616947198994, + 1279057759087427731263511728885611780, + 1711061746895435768547617398484429347, + 2329140368326888129406637741054282011, + 2094858442222190249786465516374057361, + 2584558507302599829894674874442909655, + 1521552483858643935889582214011445675, + 176847449040377757035522930003764000, + 632921959964166974634188077062540145, + 2172441457165086627497230906075093832, + 248112436365636977369105357296082574, + 1408592841800630696650784801114783401, + 364610811473321782531041012695979858, + 342338521965453258686441392321054163, + 2269703683857229911110544415296249295, + 3643644972862751728748413716653892, + 0 + ]; - uint256[2][2] memory proof_b = [ - [5803446705026913357518568395981657569264671269353189435142412707651256173413, 8593766898146870509264586194439641404493723665652266429471383540616111544172], - [16046700810774537572443697469030305204645791362097372667928847558873110846124, 20178806529375442298313753931928150693393269974972769756293026303013302674806] - ]; + uint256[2] memory proof_a = [ + 18568569282385577752003966587062685654688127322905645867690168113644909624209, + 18759903706259146962639961745797835986209265804220236624283397965640158483190 + ]; - uint256[2] memory proof_c = [ - 13905944782945043014900524454195421236229551576754549828484627488690083504903, - 21309166547782902503710040024457074452294672356307955049572131380081774653722 - ]; + uint256[2][2] memory proof_b = [ + [ + 5803446705026913357518568395981657569264671269353189435142412707651256173413, + 8593766898146870509264586194439641404493723665652266429471383540616111544172 + ], + [ + 16046700810774537572443697469030305204645791362097372667928847558873110846124, + 20178806529375442298313753931928150693393269974972769756293026303013302674806 + ] + ]; - console.log("Calldata"); - console.logBytes(abi.encode(proof_a, proof_b, proof_c, publicSignals)); + uint256[2] memory proof_c = [ + 13905944782945043014900524454195421236229551576754549828484627488690083504903, + 21309166547782902503710040024457074452294672356307955049572131380081774653722 + ]; - // Test proof verification - bool verified = proofVerifier.verifyProof(proof_a, proof_b, proof_c, publicSignals); - assertEq(verified, true); + console.log("Calldata"); + console.logBytes(abi.encode(proof_a, proof_b, proof_c, publicSignals)); - // Test mint after spoofing msg.sender - Vm vm = Vm(VM_ADDR); - vm.startPrank(0x0000000000000000000000000000000000000001); - testVerifier.transfer(proof_a, proof_b, proof_c, publicSignals); - vm.stopPrank(); + // Test proof verification + bool verified = proofVerifier.verifyProof(proof_a, proof_b, proof_c, publicSignals); + assertEq(verified, true); - assert(testVerifier.getBalance("zkemailverify@gmail.com") == 8 * 10 ** erc20.decimals()); - assert(testVerifier.getBalance("zkemailverify2@gmail.com") == 12 * 10 ** erc20.decimals()); - } + // Test mint after spoofing msg.sender + Vm vm = Vm(VM_ADDR); + vm.startPrank(0x0000000000000000000000000000000000000001); + testVerifier.transfer(proof_a, proof_b, proof_c, publicSignals); + vm.stopPrank(); - function testMoveERC20() public { - string memory fromEmail = "zkemailverify@gmail.com"; - string memory recipientEmail = "zkemailverify2@gmail.com"; - uint256 amountToTransfer = 1 * 10 ** erc20.decimals(); - testVerifier.moveTokens(bytes32(bytes(fromEmail)), bytes32(bytes(recipientEmail)), amountToTransfer); - assert(testVerifier.getBalance(fromEmail) == 9 * 10 ** erc20.decimals()); - assert(testVerifier.getBalance(recipientEmail) == 11 * 10 ** erc20.decimals()); - } + assert(testVerifier.getBalance("zkemailverify@gmail.com") == 8 * 10 ** erc20.decimals()); + assert(testVerifier.getBalance("zkemailverify2@gmail.com") == 12 * 10 ** erc20.decimals()); + } + + function testMoveERC20() public { + string memory fromEmail = "zkemailverify@gmail.com"; + string memory recipientEmail = "zkemailverify2@gmail.com"; + uint256 amountToTransfer = 1 * 10 ** erc20.decimals(); + testVerifier.moveTokens(bytes32(bytes(fromEmail)), bytes32(bytes(recipientEmail)), amountToTransfer); + assert(testVerifier.getBalance(fromEmail) == 9 * 10 ** erc20.decimals()); + assert(testVerifier.getBalance(recipientEmail) == 11 * 10 ** erc20.decimals()); + } } diff --git a/tsconfig.json b/tsconfig.json index 2a5b22a..cf4d385 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,11 +3,7 @@ "target": "es2020", "module": "esnext", "esModuleInterop": true, - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true, "allowSyntheticDefaultImports": true, @@ -19,16 +15,9 @@ "isolatedModules": true, "noEmit": true, "jsx": "react-jsx", - "types": [ - "node" - ], + "types": ["node", "jest"], "incremental": true }, - "include": [ - "src", - "circuits/scripts/" - ], - "exclude": [ - "node_modules" - ] + "include": ["src", "circuits/scripts/"], + "exclude": ["node_modules"] } diff --git a/yarn.lock b/yarn.lock index 5933c3e..9c7dc1b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -22,6 +22,16 @@ __metadata: languageName: node linkType: hard +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" + dependencies: + "@jridgewell/gen-mapping": ^0.3.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 + languageName: node + linkType: hard + "@babel/code-frame@npm:7.10.4": version: 7.10.4 resolution: "@babel/code-frame@npm:7.10.4" @@ -49,6 +59,15 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/code-frame@npm:7.21.4" + dependencies: + "@babel/highlight": ^7.18.6 + checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.17.7": version: 7.20.5 resolution: "@babel/compat-data@npm:7.20.5" @@ -63,6 +82,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.21.5": + version: 7.21.7 + resolution: "@babel/compat-data@npm:7.21.7" + checksum: 28747eb3fc084d088ba2db0336f52118cfa730a57bdbac81630cae1f38ad0336605b95b3390325937802f344e0b7fa25e2f1b67e3ee2d7383b877f88dee0e51c + languageName: node + linkType: hard + "@babel/core@npm:7.12.3": version: 7.12.3 resolution: "@babel/core@npm:7.12.3" @@ -110,6 +136,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.11.6": + version: 7.21.8 + resolution: "@babel/core@npm:7.21.8" + dependencies: + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-compilation-targets": ^7.21.5 + "@babel/helper-module-transforms": ^7.21.5 + "@babel/helpers": ^7.21.5 + "@babel/parser": ^7.21.8 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.2 + semver: ^6.3.0 + checksum: f28118447355af2a90bd340e2e60699f94c8020517eba9b71bf8ebff62fa9e00d63f076e033f9dfb97548053ad62ada45fafb0d96584b1a90e8aef5a3b8241b1 + languageName: node + linkType: hard + "@babel/core@npm:^7.7.5, @babel/core@npm:^7.8.4": version: 7.20.2 resolution: "@babel/core@npm:7.20.2" @@ -155,6 +204,18 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.21.5, @babel/generator@npm:^7.7.2": + version: 7.21.5 + resolution: "@babel/generator@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 + jsesc: ^2.5.1 + checksum: 78af737b9dd701d4c657f9731880430fa1c177767b562f4e8a330a7fe72a4abe857e3d24de4e6d9dafc1f6a11f894162d27e523d7e5948ff9e3925a0ce9867c4 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -188,6 +249,21 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-compilation-targets@npm:7.21.5" + dependencies: + "@babel/compat-data": ^7.21.5 + "@babel/helper-validator-option": ^7.21.0 + browserslist: ^4.21.3 + lru-cache: ^5.1.1 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 0edecb9c970ddc22ebda1163e77a7f314121bef9e483e0e0d9a5802540eed90d5855b6bf9bce03419b35b2e07c323e62d0353b153fa1ca34f17dbba897a83c25 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.2, @babel/helper-create-class-features-plugin@npm:^7.20.5": version: 7.20.5 resolution: "@babel/helper-create-class-features-plugin@npm:7.20.5" @@ -240,6 +316,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-environment-visitor@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-environment-visitor@npm:7.21.5" + checksum: e436af7b62956e919066448013a3f7e2cd0b51010c26c50f790124dcd350be81d5597b4e6ed0a4a42d098a27de1e38561cd7998a116a42e7899161192deac9a6 + languageName: node + linkType: hard + "@babel/helper-explode-assignable-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" @@ -259,6 +342,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" + dependencies: + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -286,6 +379,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-module-imports@npm:7.21.4" + dependencies: + "@babel/types": ^7.21.4 + checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-module-transforms@npm:7.20.2" @@ -318,6 +420,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-module-transforms@npm:7.21.5" + dependencies: + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-module-imports": ^7.21.4 + "@babel/helper-simple-access": ^7.21.5 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.19.1 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: 1ccfc88830675a5d485d198e918498f9683cdd46f973fdd4fe1c85b99648fb70f87fca07756c7a05dc201bd9b248c74ced06ea80c9991926ac889f53c3659675 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -370,6 +488,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-simple-access@npm:7.21.5" + dependencies: + "@babel/types": ^7.21.5 + checksum: ad212beaa24be3864c8c95bee02f840222457ccf5419991e2d3e3e39b0f75b77e7e857e0bf4ed428b1cd97acefc87f3831bdb0b9696d5ad0557421f398334fc3 + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": version: 7.20.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" @@ -395,6 +522,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helper-string-parser@npm:7.21.5" + checksum: 36c0ded452f3858e67634b81960d4bde1d1cd2a56b82f4ba2926e97864816021c885f111a7cf81de88a0ed025f49d84a393256700e9acbca2d99462d648705d8 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": version: 7.19.1 resolution: "@babel/helper-validator-identifier@npm:7.19.1" @@ -409,6 +543,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.18.9": version: 7.20.5 resolution: "@babel/helper-wrap-function@npm:7.20.5" @@ -443,6 +584,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/helpers@npm:7.21.5" + dependencies: + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.5 + "@babel/types": ^7.21.5 + checksum: a6f74b8579713988e7f5adf1a986d8b5255757632ba65b2552f0f609ead5476edb784044c7e4b18f3681ee4818ca9d08c41feb9bd4e828648c25a00deaa1f9e4 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.10.4, @babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -481,6 +633,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.5, @babel/parser@npm:^7.21.8": + version: 7.21.8 + resolution: "@babel/parser@npm:7.21.8" + bin: + parser: ./bin/babel-parser.js + checksum: 1b9a820fedfb6ef179e6ffa1dbc080808882949dec68340a616da2aa354af66ea2886bd68e61bd444d270aa0b24ad6273e3cfaf17d6878c34bf2521becacb353 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -841,6 +1002,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.21.4 + resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bb7309402a1d4e155f32aa0cf216e1fa8324d6c4cfd248b03280028a015a10e46b6efd6565f515f8913918a3602b39255999c06046f7d4b8a5106be2165d724a + languageName: node + linkType: hard + "@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4, @babel/plugin-syntax-logical-assignment-operators@npm:^7.8.3": version: 7.10.4 resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" @@ -940,6 +1112,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.21.4 + resolution: "@babel/plugin-syntax-typescript@npm:7.21.4" + dependencies: + "@babel/helper-plugin-utils": ^7.20.2 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a59ce2477b7ae8c8945dc37dda292fef9ce46a6507b3d76b03ce7f3a6c9451a6567438b20a78ebcb3955d04095fd1ccd767075a863f79fcc30aa34dcfa441fe0 + languageName: node + linkType: hard + "@babel/plugin-transform-arrow-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" @@ -1578,6 +1761,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e + languageName: node + linkType: hard + "@babel/traverse@npm:^7.1.0, @babel/traverse@npm:^7.12.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.7.0": version: 7.20.1 resolution: "@babel/traverse@npm:7.20.1" @@ -1632,6 +1826,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.21.5, @babel/traverse@npm:^7.7.2": + version: 7.21.5 + resolution: "@babel/traverse@npm:7.21.5" + dependencies: + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.5 + "@babel/helper-environment-visitor": ^7.21.5 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.21.5 + "@babel/types": ^7.21.5 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: b403733fa7d858f0c8e224f0434a6ade641bc469a4f92975363391e796629d5bf53e544761dfe85039aab92d5389ebe7721edb309d7a5bb7df2bf74f37bf9f47 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.6, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.19.4 resolution: "@babel/types@npm:7.19.4" @@ -1665,6 +1877,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.4, @babel/types@npm:^7.21.5": + version: 7.21.5 + resolution: "@babel/types@npm:7.21.5" + dependencies: + "@babel/helper-string-parser": ^7.21.5 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 43242a99c612d13285ee4af46cc0f1066bcb6ffd38307daef7a76e8c70f36cfc3255eb9e75c8e768b40e761176c313aec4d5c0b9d97a21e494d49d5fd123a9f7 + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -2290,6 +2513,16 @@ __metadata: languageName: node linkType: hard +"@iden3/binfileutils@npm:0.0.11": + version: 0.0.11 + resolution: "@iden3/binfileutils@npm:0.0.11" + dependencies: + fastfile: 0.0.20 + ffjavascript: ^0.2.48 + checksum: ca61db1325c7e038c6bd723c856eff5f2c82c76394db09d3350ef4f5b7525e3c9ab1f7429900ff5d3e9d26c5970bf5900e6126ccb5c5caa597c16a47336a6be8 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2324,6 +2557,20 @@ __metadata: languageName: node linkType: hard +"@jest/console@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/console@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + slash: ^3.0.0 + checksum: 9f4f4b8fabd1221361b7f2e92d4a90f5f8c2e2b29077249996ab3c8b7f765175ffee795368f8d6b5b2bb3adb32dc09319f7270c7c787b0d259e624e00e0f64a5 + languageName: node + linkType: hard + "@jest/core@npm:^26.6.0, @jest/core@npm:^26.6.3": version: 26.6.3 resolution: "@jest/core@npm:26.6.3" @@ -2360,6 +2607,47 @@ __metadata: languageName: node linkType: hard +"@jest/core@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/core@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/reporters": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + ci-info: ^3.2.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + jest-changed-files: ^29.5.0 + jest-config: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-resolve-dependencies: ^29.5.0 + jest-runner: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + jest-watcher: ^29.5.0 + micromatch: ^4.0.4 + pretty-format: ^29.5.0 + slash: ^3.0.0 + strip-ansi: ^6.0.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 9e8f5243fe82d5a57f3971e1b96f320058df7c315328a3a827263f3b17f64be10c80f4a9c1b1773628b64d2de6d607c70b5b2d5bf13e7f5ad04223e9ef6aac06 + languageName: node + linkType: hard + "@jest/environment@npm:^26.6.0, @jest/environment@npm:^26.6.2": version: 26.6.2 resolution: "@jest/environment@npm:26.6.2" @@ -2372,6 +2660,18 @@ __metadata: languageName: node linkType: hard +"@jest/environment@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/environment@npm:29.5.0" + dependencies: + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-mock: ^29.5.0 + checksum: 921de6325cd4817dec6685e5ff299b499b6379f3f9cf489b4b13588ee1f3820a0c77b49e6a087996b6de8f629f6f5251e636cba08d1bdb97d8071cc7d033c88a + languageName: node + linkType: hard + "@jest/expect-utils@npm:^29.3.1": version: 29.3.1 resolution: "@jest/expect-utils@npm:29.3.1" @@ -2381,6 +2681,25 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect-utils@npm:29.5.0" + dependencies: + jest-get-type: ^29.4.3 + checksum: c46fb677c88535cf83cf29f0a5b1f376c6a1109ddda266ad7da1a9cbc53cb441fa402dd61fc7b111ffc99603c11a9b3357ee41a1c0e035a58830bcb360871476 + languageName: node + linkType: hard + +"@jest/expect@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/expect@npm:29.5.0" + dependencies: + expect: ^29.5.0 + jest-snapshot: ^29.5.0 + checksum: bd10e295111547e6339137107d83986ab48d46561525393834d7d2d8b2ae9d5626653f3f5e48e5c3fa742ac982e97bdf1f541b53b9e1d117a247b08e938527f6 + languageName: node + linkType: hard + "@jest/fake-timers@npm:^26.6.2": version: 26.6.2 resolution: "@jest/fake-timers@npm:26.6.2" @@ -2395,6 +2714,20 @@ __metadata: languageName: node linkType: hard +"@jest/fake-timers@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/fake-timers@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@sinonjs/fake-timers": ^10.0.2 + "@types/node": "*" + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 69930c6922341f244151ec0d27640852ec96237f730fc024da1f53143d31b43cde75d92f9d8e5937981cdce3b31416abc3a7090a0d22c2377512c4a6613244ee + languageName: node + linkType: hard + "@jest/globals@npm:^26.6.2": version: 26.6.2 resolution: "@jest/globals@npm:26.6.2" @@ -2406,6 +2739,18 @@ __metadata: languageName: node linkType: hard +"@jest/globals@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/globals@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/types": ^29.5.0 + jest-mock: ^29.5.0 + checksum: b309ab8f21b571a7c672608682e84bbdd3d2b554ddf81e4e32617fec0a69094a290ab42e3c8b2c66ba891882bfb1b8b2736720ea1285b3ad646d55c2abefedd9 + languageName: node + linkType: hard + "@jest/reporters@npm:^26.6.2": version: 26.6.2 resolution: "@jest/reporters@npm:26.6.2" @@ -2442,6 +2787,43 @@ __metadata: languageName: node linkType: hard +"@jest/reporters@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/reporters@npm:29.5.0" + dependencies: + "@bcoe/v8-coverage": ^0.2.3 + "@jest/console": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 + "@types/node": "*" + chalk: ^4.0.0 + collect-v8-coverage: ^1.0.0 + exit: ^0.1.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + istanbul-lib-coverage: ^3.0.0 + istanbul-lib-instrument: ^5.1.0 + istanbul-lib-report: ^3.0.0 + istanbul-lib-source-maps: ^4.0.0 + istanbul-reports: ^3.1.3 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 + slash: ^3.0.0 + string-length: ^4.0.1 + strip-ansi: ^6.0.0 + v8-to-istanbul: ^9.0.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + checksum: 481268aac9a4a75cc49c4df1273d6b111808dec815e9d009dad717c32383ebb0cebac76e820ad1ab44e207540e1c2fe1e640d44c4f262de92ab1933e057fdeeb + languageName: node + linkType: hard + "@jest/schemas@npm:^29.0.0": version: 29.0.0 resolution: "@jest/schemas@npm:29.0.0" @@ -2451,6 +2833,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/schemas@npm:29.4.3" + dependencies: + "@sinclair/typebox": ^0.25.16 + checksum: ac754e245c19dc39e10ebd41dce09040214c96a4cd8efa143b82148e383e45128f24599195ab4f01433adae4ccfbe2db6574c90db2862ccd8551a86704b5bebd + languageName: node + linkType: hard + "@jest/source-map@npm:^26.6.2": version: 26.6.2 resolution: "@jest/source-map@npm:26.6.2" @@ -2462,6 +2853,17 @@ __metadata: languageName: node linkType: hard +"@jest/source-map@npm:^29.4.3": + version: 29.4.3 + resolution: "@jest/source-map@npm:29.4.3" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 + callsites: ^3.0.0 + graceful-fs: ^4.2.9 + checksum: 2301d225145f8123540c0be073f35a80fd26a2f5e59550fd68525d8cea580fb896d12bf65106591ffb7366a8a19790076dbebc70e0f5e6ceb51f81827ed1f89c + languageName: node + linkType: hard + "@jest/test-result@npm:^26.6.0, @jest/test-result@npm:^26.6.2": version: 26.6.2 resolution: "@jest/test-result@npm:26.6.2" @@ -2474,6 +2876,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-result@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-result@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/istanbul-lib-coverage": ^2.0.0 + collect-v8-coverage: ^1.0.0 + checksum: 2e8ff5242227ab960c520c3ea0f6544c595cc1c42fa3873c158e9f4f685f4ec9670ec08a4af94ae3885c0005a43550a9595191ffbc27a0965df27d9d98bbf901 + languageName: node + linkType: hard + "@jest/test-sequencer@npm:^26.6.3": version: 26.6.3 resolution: "@jest/test-sequencer@npm:26.6.3" @@ -2487,6 +2901,18 @@ __metadata: languageName: node linkType: hard +"@jest/test-sequencer@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/test-sequencer@npm:29.5.0" + dependencies: + "@jest/test-result": ^29.5.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + slash: ^3.0.0 + checksum: eca34b4aeb2fda6dfb7f9f4b064c858a7adf64ec5c6091b6f4ed9d3c19549177cbadcf1c615c4c182688fa1cf085c8c55c3ca6eea40719a34554b0bf071d842e + languageName: node + linkType: hard + "@jest/transform@npm:^26.6.2": version: 26.6.2 resolution: "@jest/transform@npm:26.6.2" @@ -2510,6 +2936,29 @@ __metadata: languageName: node linkType: hard +"@jest/transform@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/transform@npm:29.5.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/types": ^29.5.0 + "@jridgewell/trace-mapping": ^0.3.15 + babel-plugin-istanbul: ^6.1.1 + chalk: ^4.0.0 + convert-source-map: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 + micromatch: ^4.0.4 + pirates: ^4.0.4 + slash: ^3.0.0 + write-file-atomic: ^4.0.2 + checksum: d55d604085c157cf5112e165ff5ac1fa788873b3b31265fb4734ca59892ee24e44119964cc47eb6d178dd9512bbb6c576d1e20e51a201ff4e24d31e818a1c92d + languageName: node + linkType: hard + "@jest/types@npm:^26.6.0, @jest/types@npm:^26.6.2": version: 26.6.2 resolution: "@jest/types@npm:26.6.2" @@ -2537,6 +2986,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.5.0": + version: 29.5.0 + resolution: "@jest/types@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 1811f94b19cf8a9460a289c4f056796cfc373480e0492692a6125a553cd1a63824bd846d7bb78820b7b6f758f6dd3c2d4558293bb676d541b2fa59c70fdf9d39 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -2599,6 +3062,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.17": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" + dependencies: + "@jridgewell/resolve-uri": 3.1.0 + "@jridgewell/sourcemap-codec": 1.4.14 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.17 resolution: "@jridgewell/trace-mapping@npm:0.3.17" @@ -2968,6 +3441,13 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.25.16": + version: 0.25.24 + resolution: "@sinclair/typebox@npm:0.25.24" + checksum: 10219c58f40b8414c50b483b0550445e9710d4fe7b2c4dccb9b66533dd90ba8e024acc776026cebe81e87f06fa24b07fdd7bc30dd277eb9cc386ec50151a3026 + languageName: node + linkType: hard + "@sinonjs/commons@npm:^1.7.0": version: 1.8.6 resolution: "@sinonjs/commons@npm:1.8.6" @@ -2977,6 +3457,24 @@ __metadata: languageName: node linkType: hard +"@sinonjs/commons@npm:^3.0.0": + version: 3.0.0 + resolution: "@sinonjs/commons@npm:3.0.0" + dependencies: + type-detect: 4.0.8 + checksum: b4b5b73d4df4560fb8c0c7b38c7ad4aeabedd362f3373859d804c988c725889cde33550e4bcc7cd316a30f5152a2d1d43db71b6d0c38f5feef71fd8d016763f8 + languageName: node + linkType: hard + +"@sinonjs/fake-timers@npm:^10.0.2": + version: 10.2.0 + resolution: "@sinonjs/fake-timers@npm:10.2.0" + dependencies: + "@sinonjs/commons": ^3.0.0 + checksum: 586c76e1dd90d03b0c4e754f2011325b38ac6055878c81c52434c900f36d9d245438c96ef69e08e28d9fbecf2335fb347b67850962d8b6e539dd7359d8c62802 + languageName: node + linkType: hard + "@sinonjs/fake-timers@npm:^6.0.1": version: 6.0.1 resolution: "@sinonjs/fake-timers@npm:6.0.1" @@ -3361,6 +3859,19 @@ __metadata: languageName: node linkType: hard +"@types/babel__core@npm:^7.1.14": + version: 7.20.0 + resolution: "@types/babel__core@npm:7.20.0" + dependencies: + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df + languageName: node + linkType: hard + "@types/babel__generator@npm:*": version: 7.6.4 resolution: "@types/babel__generator@npm:7.6.4" @@ -3466,6 +3977,15 @@ __metadata: languageName: node linkType: hard +"@types/graceful-fs@npm:^4.1.3": + version: 4.1.6 + resolution: "@types/graceful-fs@npm:4.1.6" + dependencies: + "@types/node": "*" + checksum: c3070ccdc9ca0f40df747bced1c96c71a61992d6f7c767e8fd24bb6a3c2de26e8b84135ede000b7e79db530a23e7e88dcd9db60eee6395d0f4ce1dae91369dd4 + languageName: node + linkType: hard + "@types/hoist-non-react-statics@npm:*": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" @@ -3518,13 +4038,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^29.4.0": - version: 29.4.0 - resolution: "@types/jest@npm:29.4.0" +"@types/jest@npm:^29.5.1": + version: 29.5.1 + resolution: "@types/jest@npm:29.5.1" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: 23760282362a252e6690314584d83a47512d4cd61663e957ed3398ecf98195fe931c45606ee2f9def12f8ed7d8aa102d492ec42d26facdaf8b78094a31e6568e + checksum: 0a22491dec86333c0e92b897be2c809c922a7b2b0aa5604ac369810d6b2360908b4a3f2c6892e8a237a54fa1f10ecefe0e823ec5fcb7915195af4dfe88d2197e languageName: node linkType: hard @@ -3570,6 +4090,13 @@ __metadata: languageName: node linkType: hard +"@types/mocha@npm:^10.0.1": + version: 10.0.1 + resolution: "@types/mocha@npm:10.0.1" + checksum: 224ea9fce7b1734ccdb9aa99a622d902a538ce1847bca7fd22c5fb38adcf3ed536f50f48f587085db988a4bb3c2eb68f4b98e1cd6a38bc5547bd3bbbedc54495 + languageName: node + linkType: hard + "@types/ms@npm:*": version: 0.7.31 resolution: "@types/ms@npm:0.7.31" @@ -3628,6 +4155,13 @@ __metadata: languageName: node linkType: hard +"@types/prettier@npm:^2.1.5": + version: 2.7.2 + resolution: "@types/prettier@npm:2.7.2" + checksum: b47d76a5252265f8d25dd2fe2a5a61dc43ba0e6a96ffdd00c594cb4fd74c1982c2e346497e3472805d97915407a09423804cc2110a0b8e1b22cffcab246479b7 + languageName: node + linkType: hard + "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -4810,6 +5344,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 138d04a51076cb085da0a7e2d000c5c0bb09f6e772ed5c65c53cb118d37f6c5f1637506d7155fb5f330f0abcf6f12fa2e489ac3f8cdab9da393bf1bb4f9a32b0 + languageName: node + linkType: hard + "ansi-colors@npm:^3.0.0": version: 3.2.4 resolution: "ansi-colors@npm:3.2.4" @@ -5198,6 +5739,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "assign-symbols@npm:^1.0.0": version: 1.0.0 resolution: "assign-symbols@npm:1.0.0" @@ -5399,6 +5947,23 @@ __metadata: languageName: node linkType: hard +"babel-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-jest@npm:29.5.0" + dependencies: + "@jest/transform": ^29.5.0 + "@types/babel__core": ^7.1.14 + babel-plugin-istanbul: ^6.1.1 + babel-preset-jest: ^29.5.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + slash: ^3.0.0 + peerDependencies: + "@babel/core": ^7.8.0 + checksum: eafb6d37deb71f0c80bf3c80215aa46732153e5e8bcd73f6ff47d92e5c0c98c8f7f75995d0efec6289c371edad3693cd8fa2367b0661c4deb71a3a7117267ede + languageName: node + linkType: hard + "babel-loader@npm:8.1.0": version: 8.1.0 resolution: "babel-loader@npm:8.1.0" @@ -5415,7 +5980,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-istanbul@npm:^6.0.0": +"babel-plugin-istanbul@npm:^6.0.0, babel-plugin-istanbul@npm:^6.1.1": version: 6.1.1 resolution: "babel-plugin-istanbul@npm:6.1.1" dependencies: @@ -5440,6 +6005,18 @@ __metadata: languageName: node linkType: hard +"babel-plugin-jest-hoist@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-plugin-jest-hoist@npm:29.5.0" + dependencies: + "@babel/template": ^7.3.3 + "@babel/types": ^7.3.3 + "@types/babel__core": ^7.1.14 + "@types/babel__traverse": ^7.0.6 + checksum: 099b5254073b6bc985b6d2d045ad26fb8ed30ff8ae6404c4fe8ee7cd0e98a820f69e3dfb871c7c65aae0f4b65af77046244c07bb92d49ef9005c90eedf681539 + languageName: node + linkType: hard + "babel-plugin-macros@npm:^3.1.0": version: 3.1.0 resolution: "babel-plugin-macros@npm:3.1.0" @@ -5576,6 +6153,18 @@ __metadata: languageName: node linkType: hard +"babel-preset-jest@npm:^29.5.0": + version: 29.5.0 + resolution: "babel-preset-jest@npm:29.5.0" + dependencies: + babel-plugin-jest-hoist: ^29.5.0 + babel-preset-current-node-syntax: ^1.0.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5566ca2762766c9319b4973d018d2fa08c0fcf6415c72cc54f4c8e7199e851ea8f5e6c6730f03ed7ed44fc8beefa959dd15911f2647dee47c615ff4faeddb1ad + languageName: node + linkType: hard + "babel-preset-react-app@npm:^10.0.0": version: 10.0.1 resolution: "babel-preset-react-app@npm:10.0.1" @@ -5966,6 +6555,13 @@ __metadata: languageName: node linkType: hard +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: b717b19b25952dd6af483e368f9bcd6b14b87740c3d226c2977a65e84666ffd67000bddea7d911f111a9b6ddc822b234de42d52ab6507bce4119a4cc003ef7b3 + languageName: node + linkType: hard + "browserify-aes@npm:^1.0.0, browserify-aes@npm:^1.0.4, browserify-aes@npm:^1.2.0": version: 1.2.0 resolution: "browserify-aes@npm:1.2.0" @@ -6498,6 +7094,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.6, chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + languageName: node + linkType: hard + "chalk-template@npm:0.4.0": version: 0.4.0 resolution: "chalk-template@npm:0.4.0" @@ -6576,6 +7187,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.2": + version: 1.0.2 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e + languageName: node + linkType: hard + "check-types@npm:^11.1.1": version: 11.2.2 resolution: "check-types@npm:11.2.2" @@ -6612,6 +7230,32 @@ __metadata: languageName: node linkType: hard +"child_process@npm:^1.0.2": + version: 1.0.2 + resolution: "child_process@npm:1.0.2" + checksum: bd814d82bc8c6e85ed6fb157878978121cd03b5296c09f6135fa3d081fd9a6a617a6d509c50397711df713af403331241a9c0397a7fad30672051485e156c2a1 + languageName: node + linkType: hard + +"chokidar@npm:3.5.3, chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: ~3.1.2 + braces: ~3.0.2 + fsevents: ~2.3.2 + glob-parent: ~5.1.2 + is-binary-path: ~2.1.0 + is-glob: ~4.0.1 + normalize-path: ~3.0.0 + readdirp: ~3.6.0 + dependenciesMeta: + fsevents: + optional: true + checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c + languageName: node + linkType: hard + "chokidar@npm:^2.1.8": version: 2.1.8 resolution: "chokidar@npm:2.1.8" @@ -6635,25 +7279,6 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.4.1, chokidar@npm:^3.4.2, chokidar@npm:^3.5.1, chokidar@npm:^3.5.2": - version: 3.5.3 - resolution: "chokidar@npm:3.5.3" - dependencies: - anymatch: ~3.1.2 - braces: ~3.0.2 - fsevents: ~2.3.2 - glob-parent: ~5.1.2 - is-binary-path: ~2.1.0 - is-glob: ~4.0.1 - normalize-path: ~3.0.0 - readdirp: ~3.6.0 - dependenciesMeta: - fsevents: - optional: true - checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c - languageName: node - linkType: hard - "chownr@npm:^1.1.1": version: 1.1.4 resolution: "chownr@npm:1.1.4" @@ -6710,6 +7335,33 @@ __metadata: languageName: node linkType: hard +"circom_runtime@npm:0.1.21": + version: 0.1.21 + resolution: "circom_runtime@npm:0.1.21" + dependencies: + ffjavascript: 0.2.56 + bin: + calcwit: calcwit.js + checksum: 3071f1e0fba9a5fb41c940454edb911ce09edfd5d0bd12156ec79045a0bf3ff2cc5b35f46e84e42902ef8bb0a4166f428b75d0ceb363c0d485f1a111b27daba1 + languageName: node + linkType: hard + +"circom_tester@npm:^0.0.19": + version: 0.0.19 + resolution: "circom_tester@npm:0.0.19" + dependencies: + chai: ^4.3.6 + child_process: ^1.0.2 + ffjavascript: ^0.2.56 + fnv-plus: ^1.3.1 + r1csfile: ^0.0.41 + snarkjs: 0.5.0 + tmp-promise: ^3.0.3 + util: ^0.12.4 + checksum: 703d7317493ddafb33462b5b0caf9b8a95bde938429e030d024fa7ac41ccb45a9ddbe8ebb93f91138dbee94bb2e0d504570c0aca070802d79ee532ba1ae5db0e + languageName: node + linkType: hard + "circomlib@npm:^2.0.3": version: 2.0.5 resolution: "circomlib@npm:2.0.5" @@ -6736,6 +7388,13 @@ __metadata: languageName: node linkType: hard +"cjs-module-lexer@npm:^1.0.0": + version: 1.2.2 + resolution: "cjs-module-lexer@npm:1.2.2" + checksum: 977f3f042bd4f08e368c890d91eecfbc4f91da0bc009a3c557bc4dfbf32022ad1141244ac1178d44de70fc9f3dea7add7cd9a658a34b9fae98a55d8f92331ce5 + languageName: node + linkType: hard + "class-utils@npm:^0.3.5": version: 0.3.6 resolution: "class-utils@npm:0.3.6" @@ -6827,6 +7486,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -7149,6 +7819,13 @@ __metadata: languageName: node linkType: hard +"convert-source-map@npm:^2.0.0": + version: 2.0.0 + resolution: "convert-source-map@npm:2.0.0" + checksum: 63ae9933be5a2b8d4509daca5124e20c14d023c820258e484e32dc324d34c2754e71297c94a05784064ad27615037ef677e3f0c00469fb55f409d2bb21261035 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -7809,6 +8486,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: b7d09b82652c39eead4d6678bb578e3bebd848add894b76d0f6b395bc45b2d692fb88d977e7cfb93c4ed6c119b05a1347cef261174916c2e75c0a8ca57da1809 + languageName: node + linkType: hard + "decimal.js@npm:^10.2.1": version: 10.4.3 resolution: "decimal.js@npm:10.4.3" @@ -7830,6 +8514,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + "deep-equal@npm:^1.0.1": version: 1.1.1 resolution: "deep-equal@npm:1.1.1" @@ -8081,6 +8774,20 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.4.3": + version: 29.4.3 + resolution: "diff-sequences@npm:29.4.3" + checksum: 28b265e04fdddcf7f9f814effe102cc95a9dec0564a579b5aed140edb24fc345c611ca52d76d725a3cab55d3888b915b5e8a4702e0f6058968a90fa5f41fcde7 + languageName: node + linkType: hard + +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -8330,8 +9037,9 @@ __metadata: "@testing-library/react": ^12.1.4 "@testing-library/user-event": ^13.5.0 "@types/atob": ^2.1.2 - "@types/jest": ^29.4.0 + "@types/jest": ^29.5.1 "@types/lodash": ^4.14.181 + "@types/mocha": ^10.0.1 "@types/node": ^18.0.6 "@types/pako": ^2.0.0 "@types/styled-components": ^5.1.24 @@ -8343,6 +9051,8 @@ __metadata: browserstack-local: ^1.5.1 browserstack-node-sdk: ^1.6.1 buffer: ^6.0.3 + chai: ^4.3.7 + circom_tester: ^0.0.19 circomlib: ^2.0.3 circomlibjs: ^0.1.2 cryo: ^0.0.6 @@ -8350,10 +9060,12 @@ __metadata: ethers: ^5.7.1 forge-std: ^1.1.2 husky: ^8.0.3 + jest: ^29.5.0 jest-junit: ^15.0.0 libmime: ^5.1.0 localforage: ^1.10.0 lodash: ^4.17.21 + mocha: ^10.2.0 msw: ^1.0.1 next: ^12.3.1 nodemon: ^2.0.19 @@ -8493,6 +9205,13 @@ __metadata: languageName: node linkType: hard +"emittery@npm:^0.13.1": + version: 0.13.1 + resolution: "emittery@npm:0.13.1" + checksum: 2b089ab6306f38feaabf4f6f02792f9ec85fc054fda79f44f6790e61bbf6bc4e1616afb9b232e0c5ec5289a8a452f79bfa6d905a6fd64e94b49981f0934001c6 + languageName: node + linkType: hard + "emittery@npm:^0.7.1": version: 0.7.2 resolution: "emittery@npm:0.7.2" @@ -8802,6 +9521,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -8809,13 +9535,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - "escodegen@npm:^2.0.0": version: 2.0.0 resolution: "escodegen@npm:2.0.0" @@ -9504,7 +10223,7 @@ __metadata: languageName: node linkType: hard -"execa@npm:^5.1.1": +"execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" dependencies: @@ -9570,6 +10289,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.5.0": + version: 29.5.0 + resolution: "expect@npm:29.5.0" + dependencies: + "@jest/expect-utils": ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + checksum: 58f70b38693df6e5c6892db1bcd050f0e518d6f785175dc53917d4fa6a7359a048e5690e19ddcb96b65c4493881dd89a3dabdab1a84dfa55c10cdbdabf37b2d7 + languageName: node + linkType: hard + "express@npm:^4.17.1": version: 4.18.2 resolution: "express@npm:4.18.2" @@ -9794,6 +10526,13 @@ __metadata: languageName: node linkType: hard +"fastfile@npm:0.0.20": + version: 0.0.20 + resolution: "fastfile@npm:0.0.20" + checksum: e5d6e5f57a9b58c9534202e477cbffbca2182c407171950695ddb5c3e6b89554bc8561fbb6e370c99e371a8f23486a23fbaca527827886cec4897d481cbd03b6 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.14.0 resolution: "fastq@npm:1.14.0" @@ -9880,6 +10619,17 @@ __metadata: languageName: node linkType: hard +"ffjavascript@npm:0.2.56": + version: 0.2.56 + resolution: "ffjavascript@npm:0.2.56" + dependencies: + wasmbuilder: 0.0.16 + wasmcurves: 0.2.0 + web-worker: ^1.2.0 + checksum: d4e02263db4a94d111cdc7c1211ae96769370f5c8c3c338331e0ef99faed7b55e640bedf23fa8a83fc9a77f0e81140ea8f32e392812a00e15ca504221b879a4f + languageName: node + linkType: hard + "ffjavascript@npm:^0.2.45": version: 0.2.57 resolution: "ffjavascript@npm:0.2.57" @@ -9891,7 +10641,7 @@ __metadata: languageName: node linkType: hard -"ffjavascript@npm:^0.2.48": +"ffjavascript@npm:^0.2.48, ffjavascript@npm:^0.2.56": version: 0.2.59 resolution: "ffjavascript@npm:0.2.59" dependencies: @@ -10039,6 +10789,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: ^6.0.0 + path-exists: ^4.0.0 + checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 + languageName: node + linkType: hard + "find-up@npm:^3.0.0": version: 3.0.0 resolution: "find-up@npm:3.0.0" @@ -10058,6 +10818,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: 12a1536ac746db74881316a181499a78ef953632ddd28050b7a3a43c62ef5462e3357c8c29d76072bb635f147f7a9a1f0c02efef6b4be28f8db62ceb3d5c7f5d + languageName: node + linkType: hard + "flatted@npm:^3.1.0": version: 3.2.7 resolution: "flatted@npm:3.2.7" @@ -10101,6 +10870,13 @@ __metadata: languageName: node linkType: hard +"fnv-plus@npm:^1.3.1": + version: 1.3.1 + resolution: "fnv-plus@npm:1.3.1" + checksum: 4d3de8026d538ffab13dfa38ac0662b045b2ad0f920efa54f1ca65f59ad1a49b4d62482c5fcdc9cce0a18d9852df1db97c618937089d85678ce03f2e76b07e8b + languageName: node + linkType: hard + "follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" @@ -10298,7 +11074,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:~2.3.2": +"fsevents@npm:^2.1.2, fsevents@npm:^2.1.3, fsevents@npm:^2.3.2, fsevents@npm:~2.3.2": version: 2.3.2 resolution: "fsevents@npm:2.3.2" dependencies: @@ -10318,7 +11094,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": +"fsevents@patch:fsevents@^2.1.2#~builtin, fsevents@patch:fsevents@^2.1.3#~builtin, fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin": version: 2.3.2 resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7" dependencies: @@ -10390,6 +11166,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3": version: 1.1.3 resolution: "get-intrinsic@npm:1.1.3" @@ -10515,6 +11298,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.2.0": + version: 7.2.0 + resolution: "glob@npm:7.2.0" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134 + languageName: node + linkType: hard + "glob@npm:^7.0.3, glob@npm:^7.0.5, glob@npm:^7.1.1, glob@npm:^7.1.2, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -10812,7 +11609,7 @@ __metadata: languageName: node linkType: hard -"he@npm:^1.2.0": +"he@npm:1.2.0, he@npm:^1.2.0": version: 1.2.0 resolution: "he@npm:1.2.0" bin: @@ -11837,6 +12634,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.3, is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -12094,7 +12898,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-instrument@npm:^5.0.4": +"istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": version: 5.2.1 resolution: "istanbul-lib-instrument@npm:5.2.1" dependencies: @@ -12129,7 +12933,7 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.0.2": +"istanbul-reports@npm:^3.0.2, istanbul-reports@npm:^3.1.3": version: 3.1.5 resolution: "istanbul-reports@npm:3.1.5" dependencies: @@ -12187,6 +12991,16 @@ __metadata: languageName: node linkType: hard +"jest-changed-files@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-changed-files@npm:29.5.0" + dependencies: + execa: ^5.0.0 + p-limit: ^3.1.0 + checksum: a67a7cb3c11f8f92bd1b7c79e84f724cbd11a9ad51f3cdadafe3ce7ee3c79ee50dbea128f920f5fddc807e9e4e83f5462143094391feedd959a77dd20ab96cf3 + languageName: node + linkType: hard + "jest-circus@npm:26.6.0": version: 26.6.0 resolution: "jest-circus@npm:26.6.0" @@ -12216,6 +13030,34 @@ __metadata: languageName: node linkType: hard +"jest-circus@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-circus@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/expect": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + co: ^4.6.0 + dedent: ^0.7.0 + is-generator-fn: ^2.0.0 + jest-each: ^29.5.0 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-runtime: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + p-limit: ^3.1.0 + pretty-format: ^29.5.0 + pure-rand: ^6.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 44ff5d06acedae6de6c866e20e3b61f83e29ab94cf9f960826e7e667de49c12dd9ab9dffd7fa3b7d1f9688a8b5bfb1ebebadbea69d9ed0d3f66af4a0ff8c2b27 + languageName: node + linkType: hard + "jest-cli@npm:^26.6.0": version: 26.6.3 resolution: "jest-cli@npm:26.6.3" @@ -12239,6 +13081,33 @@ __metadata: languageName: node linkType: hard +"jest-cli@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-cli@npm:29.5.0" + dependencies: + "@jest/core": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + chalk: ^4.0.0 + exit: ^0.1.2 + graceful-fs: ^4.2.9 + import-local: ^3.0.2 + jest-config: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + prompts: ^2.0.1 + yargs: ^17.3.1 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: 39897bbbc0f0d8a6b975ab12fd13887eaa28d92e3dee9e0173a5cb913ae8cc2ae46e090d38c6d723e84d9d6724429cd08685b4e505fa447d31ca615630c7dbba + languageName: node + linkType: hard + "jest-config@npm:^26.6.3": version: 26.6.3 resolution: "jest-config@npm:26.6.3" @@ -12270,6 +13139,44 @@ __metadata: languageName: node linkType: hard +"jest-config@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-config@npm:29.5.0" + dependencies: + "@babel/core": ^7.11.6 + "@jest/test-sequencer": ^29.5.0 + "@jest/types": ^29.5.0 + babel-jest: ^29.5.0 + chalk: ^4.0.0 + ci-info: ^3.2.0 + deepmerge: ^4.2.2 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-circus: ^29.5.0 + jest-environment-node: ^29.5.0 + jest-get-type: ^29.4.3 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-runner: ^29.5.0 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + micromatch: ^4.0.4 + parse-json: ^5.2.0 + pretty-format: ^29.5.0 + slash: ^3.0.0 + strip-json-comments: ^3.1.1 + peerDependencies: + "@types/node": "*" + ts-node: ">=9.0.0" + peerDependenciesMeta: + "@types/node": + optional: true + ts-node: + optional: true + checksum: c37c4dab964c54ab293d4e302d40b09687037ac9d00b88348ec42366970747feeaf265e12e3750cd3660b40c518d4031335eda11ac10b70b10e60797ebbd4b9c + languageName: node + linkType: hard + "jest-diff@npm:^26.6.2": version: 26.6.2 resolution: "jest-diff@npm:26.6.2" @@ -12294,6 +13201,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-diff@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.4.3 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: dfd0f4a299b5d127779c76b40106c37854c89c3e0785098c717d52822d6620d227f6234c3a9291df204d619e799e3654159213bf93220f79c8e92a55475a3d39 + languageName: node + linkType: hard + "jest-docblock@npm:^26.0.0": version: 26.0.0 resolution: "jest-docblock@npm:26.0.0" @@ -12303,6 +13222,15 @@ __metadata: languageName: node linkType: hard +"jest-docblock@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-docblock@npm:29.4.3" + dependencies: + detect-newline: ^3.0.0 + checksum: e0e9df1485bb8926e5b33478cdf84b3387d9caf3658e7dc1eaa6dc34cb93dea0d2d74797f6e940f0233a88f3dadd60957f2288eb8f95506361f85b84bf8661df + languageName: node + linkType: hard + "jest-each@npm:^26.6.0, jest-each@npm:^26.6.2": version: 26.6.2 resolution: "jest-each@npm:26.6.2" @@ -12316,6 +13244,19 @@ __metadata: languageName: node linkType: hard +"jest-each@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-each@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + jest-util: ^29.5.0 + pretty-format: ^29.5.0 + checksum: b8b297534d25834c5d4e31e4c687359787b1e402519e42664eb704cc3a12a7a91a017565a75acb02e8cf9afd3f4eef3350bd785276bec0900184641b765ff7a5 + languageName: node + linkType: hard + "jest-environment-jsdom@npm:^26.6.2": version: 26.6.2 resolution: "jest-environment-jsdom@npm:26.6.2" @@ -12345,6 +13286,20 @@ __metadata: languageName: node linkType: hard +"jest-environment-node@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-environment-node@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-mock: ^29.5.0 + jest-util: ^29.5.0 + checksum: 57981911cc20a4219b0da9e22b2e3c9f31b505e43f78e61c899e3227ded455ce1a3a9483842c69cfa4532f02cfb536ae0995bf245f9211608edacfc1e478d411 + languageName: node + linkType: hard + "jest-get-type@npm:^26.3.0": version: 26.3.0 resolution: "jest-get-type@npm:26.3.0" @@ -12359,6 +13314,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-get-type@npm:29.4.3" + checksum: 6ac7f2dde1c65e292e4355b6c63b3a4897d7e92cb4c8afcf6d397f2682f8080e094c8b0b68205a74d269882ec06bf696a9de6cd3e1b7333531e5ed7b112605ce + languageName: node + linkType: hard + "jest-haste-map@npm:^26.6.2": version: 26.6.2 resolution: "jest-haste-map@npm:26.6.2" @@ -12384,6 +13346,29 @@ __metadata: languageName: node linkType: hard +"jest-haste-map@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-haste-map@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/graceful-fs": ^4.1.3 + "@types/node": "*" + anymatch: ^3.0.3 + fb-watchman: ^2.0.0 + fsevents: ^2.3.2 + graceful-fs: ^4.2.9 + jest-regex-util: ^29.4.3 + jest-util: ^29.5.0 + jest-worker: ^29.5.0 + micromatch: ^4.0.4 + walker: ^1.0.8 + dependenciesMeta: + fsevents: + optional: true + checksum: 3828ff7783f168e34be2c63887f82a01634261f605dcae062d83f979a61c37739e21b9607ecb962256aea3fbe5a530a1acee062d0026fcb47c607c12796cf3b7 + languageName: node + linkType: hard + "jest-jasmine2@npm:^26.6.3": version: 26.6.3 resolution: "jest-jasmine2@npm:26.6.3" @@ -12432,6 +13417,16 @@ __metadata: languageName: node linkType: hard +"jest-leak-detector@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-leak-detector@npm:29.5.0" + dependencies: + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 0fb845da7ac9cdfc9b3b2e35f6f623a41c547d7dc0103ceb0349013459d00de5870b5689a625e7e37f9644934b40e8f1dcdd5422d14d57470600350364676313 + languageName: node + linkType: hard + "jest-matcher-utils@npm:^26.6.0, jest-matcher-utils@npm:^26.6.2": version: 26.6.2 resolution: "jest-matcher-utils@npm:26.6.2" @@ -12456,6 +13451,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-matcher-utils@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + pretty-format: ^29.5.0 + checksum: 1d3e8c746e484a58ce194e3aad152eff21fd0896e8b8bf3d4ab1a4e2cbfed95fb143646f4ad9fdf6e42212b9e8fc033268b58e011b044a9929df45485deb5ac9 + languageName: node + linkType: hard + "jest-message-util@npm:^26.6.0, jest-message-util@npm:^26.6.2": version: 26.6.2 resolution: "jest-message-util@npm:26.6.2" @@ -12490,6 +13497,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-message-util@npm:29.5.0" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.5.0 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.5.0 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: daddece6bbf846eb6a2ab9be9f2446e54085bef4e5cecd13d2a538fa9c01cb89d38e564c6b74fd8e12d37ed9eface8a362240ae9f21d68b214590631e7a0d8bf + languageName: node + linkType: hard + "jest-mock@npm:^26.6.2": version: 26.6.2 resolution: "jest-mock@npm:26.6.2" @@ -12500,6 +13524,17 @@ __metadata: languageName: node linkType: hard +"jest-mock@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-mock@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + jest-util: ^29.5.0 + checksum: 2a9cf07509948fa8608898c445f04fe4dd6e2049ff431e5531eee028c808d3ba3c67f226ac87b0cf383feaa1055776900d197c895e89783016886ac17a4ff10c + languageName: node + linkType: hard + "jest-pnp-resolver@npm:^1.2.2": version: 1.2.3 resolution: "jest-pnp-resolver@npm:1.2.3" @@ -12519,6 +13554,13 @@ __metadata: languageName: node linkType: hard +"jest-regex-util@npm:^29.4.3": + version: 29.4.3 + resolution: "jest-regex-util@npm:29.4.3" + checksum: 96fc7fc28cd4dd73a63c13a526202c4bd8b351d4e5b68b1a2a2c88da3308c2a16e26feaa593083eb0bac38cca1aa9dd05025412e7de013ba963fb8e66af22b8a + languageName: node + linkType: hard + "jest-resolve-dependencies@npm:^26.6.3": version: 26.6.3 resolution: "jest-resolve-dependencies@npm:26.6.3" @@ -12530,6 +13572,16 @@ __metadata: languageName: node linkType: hard +"jest-resolve-dependencies@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve-dependencies@npm:29.5.0" + dependencies: + jest-regex-util: ^29.4.3 + jest-snapshot: ^29.5.0 + checksum: 479d2e5365d58fe23f2b87001e2e0adcbffe0147700e85abdec8f14b9703b0a55758c1929a9989e3f5d5e954fb88870ea4bfa04783523b664562fcf5f10b0edf + languageName: node + linkType: hard + "jest-resolve@npm:26.6.0": version: 26.6.0 resolution: "jest-resolve@npm:26.6.0" @@ -12562,6 +13614,23 @@ __metadata: languageName: node linkType: hard +"jest-resolve@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-resolve@npm:29.5.0" + dependencies: + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + jest-pnp-resolver: ^1.2.2 + jest-util: ^29.5.0 + jest-validate: ^29.5.0 + resolve: ^1.20.0 + resolve.exports: ^2.0.0 + slash: ^3.0.0 + checksum: 9a125f3cf323ceef512089339d35f3ee37f79fe16a831fb6a26773ea6a229b9e490d108fec7af334142e91845b5996de8e7cdd85a4d8d617078737d804e29c8f + languageName: node + linkType: hard + "jest-runner@npm:^26.6.0, jest-runner@npm:^26.6.3": version: 26.6.3 resolution: "jest-runner@npm:26.6.3" @@ -12590,6 +13659,35 @@ __metadata: languageName: node linkType: hard +"jest-runner@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runner@npm:29.5.0" + dependencies: + "@jest/console": ^29.5.0 + "@jest/environment": ^29.5.0 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + emittery: ^0.13.1 + graceful-fs: ^4.2.9 + jest-docblock: ^29.4.3 + jest-environment-node: ^29.5.0 + jest-haste-map: ^29.5.0 + jest-leak-detector: ^29.5.0 + jest-message-util: ^29.5.0 + jest-resolve: ^29.5.0 + jest-runtime: ^29.5.0 + jest-util: ^29.5.0 + jest-watcher: ^29.5.0 + jest-worker: ^29.5.0 + p-limit: ^3.1.0 + source-map-support: 0.5.13 + checksum: 437dea69c5dddca22032259787bac74790d5a171c9d804711415f31e5d1abfb64fa52f54a9015bb17a12b858fd0cf3f75ef6f3c9e94255a8596e179f707229c4 + languageName: node + linkType: hard + "jest-runtime@npm:^26.6.0, jest-runtime@npm:^26.6.3": version: 26.6.3 resolution: "jest-runtime@npm:26.6.3" @@ -12627,6 +13725,36 @@ __metadata: languageName: node linkType: hard +"jest-runtime@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-runtime@npm:29.5.0" + dependencies: + "@jest/environment": ^29.5.0 + "@jest/fake-timers": ^29.5.0 + "@jest/globals": ^29.5.0 + "@jest/source-map": ^29.4.3 + "@jest/test-result": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + cjs-module-lexer: ^1.0.0 + collect-v8-coverage: ^1.0.0 + glob: ^7.1.3 + graceful-fs: ^4.2.9 + jest-haste-map: ^29.5.0 + jest-message-util: ^29.5.0 + jest-mock: ^29.5.0 + jest-regex-util: ^29.4.3 + jest-resolve: ^29.5.0 + jest-snapshot: ^29.5.0 + jest-util: ^29.5.0 + slash: ^3.0.0 + strip-bom: ^4.0.0 + checksum: 7af27bd9d54cf1c5735404cf8d76c6509d5610b1ec0106a21baa815c1aff15d774ce534ac2834bc440dccfe6348bae1885fd9a806f23a94ddafdc0f5bae4b09d + languageName: node + linkType: hard + "jest-serializer@npm:^26.6.2": version: 26.6.2 resolution: "jest-serializer@npm:26.6.2" @@ -12661,6 +13789,37 @@ __metadata: languageName: node linkType: hard +"jest-snapshot@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-snapshot@npm:29.5.0" + dependencies: + "@babel/core": ^7.11.6 + "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 + "@babel/plugin-syntax-typescript": ^7.7.2 + "@babel/traverse": ^7.7.2 + "@babel/types": ^7.3.3 + "@jest/expect-utils": ^29.5.0 + "@jest/transform": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/babel__traverse": ^7.0.6 + "@types/prettier": ^2.1.5 + babel-preset-current-node-syntax: ^1.0.0 + chalk: ^4.0.0 + expect: ^29.5.0 + graceful-fs: ^4.2.9 + jest-diff: ^29.5.0 + jest-get-type: ^29.4.3 + jest-matcher-utils: ^29.5.0 + jest-message-util: ^29.5.0 + jest-util: ^29.5.0 + natural-compare: ^1.4.0 + pretty-format: ^29.5.0 + semver: ^7.3.5 + checksum: fe5df54122ed10eed625de6416a45bc4958d5062b018f05b152bf9785ab7f355dcd55e40cf5da63895bf8278f8d7b2bb4059b2cfbfdee18f509d455d37d8aa2b + languageName: node + linkType: hard + "jest-util@npm:^26.6.0, jest-util@npm:^26.6.2": version: 26.6.2 resolution: "jest-util@npm:26.6.2" @@ -12689,6 +13848,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-util@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: fd9212950d34d2ecad8c990dda0d8ea59a8a554b0c188b53ea5d6c4a0829a64f2e1d49e6e85e812014933d17426d7136da4785f9cf76fff1799de51b88bc85d3 + languageName: node + linkType: hard + "jest-validate@npm:^26.6.2": version: 26.6.2 resolution: "jest-validate@npm:26.6.2" @@ -12703,6 +13876,20 @@ __metadata: languageName: node linkType: hard +"jest-validate@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-validate@npm:29.5.0" + dependencies: + "@jest/types": ^29.5.0 + camelcase: ^6.2.0 + chalk: ^4.0.0 + jest-get-type: ^29.4.3 + leven: ^3.1.0 + pretty-format: ^29.5.0 + checksum: 43ca5df7cb75572a254ac3e92fbbe7be6b6a1be898cc1e887a45d55ea003f7a112717d814a674d37f9f18f52d8de40873c8f084f17664ae562736c78dd44c6a1 + languageName: node + linkType: hard + "jest-watch-typeahead@npm:0.6.1": version: 0.6.1 resolution: "jest-watch-typeahead@npm:0.6.1" @@ -12735,6 +13922,22 @@ __metadata: languageName: node linkType: hard +"jest-watcher@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-watcher@npm:29.5.0" + dependencies: + "@jest/test-result": ^29.5.0 + "@jest/types": ^29.5.0 + "@types/node": "*" + ansi-escapes: ^4.2.1 + chalk: ^4.0.0 + emittery: ^0.13.1 + jest-util: ^29.5.0 + string-length: ^4.0.1 + checksum: 62303ac7bdc7e61a8b4239a239d018f7527739da2b2be6a81a7be25b74ca769f1c43ee8558ce8e72bb857245c46d6e03af331227ffb00a57280abb2a928aa776 + languageName: node + linkType: hard + "jest-worker@npm:^24.9.0": version: 24.9.0 resolution: "jest-worker@npm:24.9.0" @@ -12778,6 +13981,18 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^29.5.0": + version: 29.5.0 + resolution: "jest-worker@npm:29.5.0" + dependencies: + "@types/node": "*" + jest-util: ^29.5.0 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 1151a1ae3602b1ea7c42a8f1efe2b5a7bf927039deaa0827bf978880169899b705744e288f80a63603fb3fc2985e0071234986af7dc2c21c7a64333d8777c7c9 + languageName: node + linkType: hard + "jest@npm:26.6.0": version: 26.6.0 resolution: "jest@npm:26.6.0" @@ -12791,6 +14006,25 @@ __metadata: languageName: node linkType: hard +"jest@npm:^29.5.0": + version: 29.5.0 + resolution: "jest@npm:29.5.0" + dependencies: + "@jest/core": ^29.5.0 + "@jest/types": ^29.5.0 + import-local: ^3.0.2 + jest-cli: ^29.5.0 + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + bin: + jest: bin/jest.js + checksum: a8ff2eb0f421623412236e23cbe67c638127fffde466cba9606bc0c0553b4c1e5cb116d7e0ef990b5d1712851652c8ee461373b578df50857fe635b94ff455d5 + languageName: node + linkType: hard + "js-cookie@npm:^2.2.1": version: 2.2.1 resolution: "js-cookie@npm:2.2.1" @@ -12819,6 +14053,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -12831,17 +14076,6 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -13012,6 +14246,15 @@ __metadata: languageName: node linkType: hard +"json5@npm:^2.2.2": + version: 2.2.3 + resolution: "json5@npm:2.2.3" + bin: + json5: lib/cli.js + checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -13336,6 +14579,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: ^5.0.0 + checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a + languageName: node + linkType: hard + "lodash._reinterpolate@npm:^3.0.0": version: 3.0.0 resolution: "lodash._reinterpolate@npm:3.0.0" @@ -13418,7 +14670,7 @@ __metadata: languageName: node linkType: hard -"log-symbols@npm:^4.1.0": +"log-symbols@npm:4.1.0, log-symbols@npm:^4.1.0": version: 4.1.0 resolution: "log-symbols@npm:4.1.0" dependencies: @@ -13467,6 +14719,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -13850,6 +15111,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:5.0.1": + version: 5.0.1 + resolution: "minimatch@npm:5.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: b34b98463da4754bc526b244d680c69d4d6089451ebe512edaf6dd9eeed0279399cfa3edb19233513b8f830bf4bfcad911dddcdf125e75074100d52f724774f0 + languageName: node + linkType: hard + "minimatch@npm:^5.0.1": version: 5.1.1 resolution: "minimatch@npm:5.1.1" @@ -14003,6 +15273,38 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^10.2.0": + version: 10.2.0 + resolution: "mocha@npm:10.2.0" + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + bin: + _mocha: bin/_mocha + mocha: bin/mocha.js + checksum: 406c45eab122ffd6ea2003c2f108b2bc35ba036225eee78e0c784b6fa2c7f34e2b13f1dbacef55a4fdf523255d76e4f22d1b5aacda2394bd11666febec17c719 + languageName: node + linkType: hard + "monkeypatch@npm:^1.0.0": version: 1.0.0 resolution: "monkeypatch@npm:1.0.0" @@ -14140,6 +15442,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:3.3.3": + version: 3.3.3 + resolution: "nanoid@npm:3.3.3" + bin: + nanoid: bin/nanoid.cjs + checksum: ada019402a07464a694553c61d2dca8a4353645a7d92f2830f0d487fedff403678a0bee5323a46522752b2eab95a0bc3da98b6cccaa7c0c55cd9975130e6d6f0 + languageName: node + linkType: hard + "nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -14922,7 +16233,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^3.0.2": +"p-limit@npm:^3.0.2, p-limit@npm:^3.1.0": version: 3.1.0 resolution: "p-limit@npm:3.1.0" dependencies: @@ -14949,6 +16260,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: ^3.0.2 + checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 + languageName: node + linkType: hard + "p-map@npm:^2.0.0": version: 2.1.0 resolution: "p-map@npm:2.1.0" @@ -15048,7 +16368,7 @@ __metadata: languageName: node linkType: hard -"parse-json@npm:^5.0.0": +"parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" dependencies: @@ -15201,6 +16521,13 @@ __metadata: languageName: node linkType: hard +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "pause-stream@npm:0.0.11": version: 0.0.11 resolution: "pause-stream@npm:0.0.11" @@ -15302,7 +16629,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -16319,6 +17646,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.5.0": + version: 29.5.0 + resolution: "pretty-format@npm:29.5.0" + dependencies: + "@jest/schemas": ^29.4.3 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 4065356b558e6db25b4d41a01efb386935a6c06a0c9c104ef5ce59f2f476b8210edb8b3949b386e60ada0a6dc5ebcb2e6ccddc8c64dfd1a9943c3c3a9e7eaf89 + languageName: node + linkType: hard + "process-nextick-args@npm:~2.0.0": version: 2.0.1 resolution: "process-nextick-args@npm:2.0.1" @@ -16547,6 +17885,13 @@ __metadata: languageName: node linkType: hard +"pure-rand@npm:^6.0.0": + version: 6.0.2 + resolution: "pure-rand@npm:6.0.2" + checksum: 79de33876a4f515d759c48e98d00756bbd916b4ea260cc572d7adfa4b62cace9952e89f0241d0410214554503d25061140fe325c66f845213d2b1728ba8d413e + languageName: node + linkType: hard + "q@npm:^1.1.2": version: 1.5.1 resolution: "q@npm:1.5.1" @@ -16669,6 +18014,18 @@ __metadata: languageName: node linkType: hard +"r1csfile@npm:0.0.41, r1csfile@npm:^0.0.41": + version: 0.0.41 + resolution: "r1csfile@npm:0.0.41" + dependencies: + "@iden3/bigarray": 0.0.2 + "@iden3/binfileutils": 0.0.11 + fastfile: 0.0.20 + ffjavascript: 0.2.56 + checksum: eec689416f66f09db2d6ca66fac1ef6841b088ab29abcde487145ebd2110916c92583e11ac86f0cdcc4e8a3a7c7df9ff5352ad959e8ae385d37c3b51cec5cf4d + languageName: node + linkType: hard + "raf@npm:^3.4.1": version: 3.4.1 resolution: "raf@npm:3.4.1" @@ -17489,6 +18846,13 @@ __metadata: languageName: node linkType: hard +"resolve.exports@npm:^2.0.0": + version: 2.0.2 + resolution: "resolve.exports@npm:2.0.2" + checksum: 1c7778ca1b86a94f8ab4055d196c7d87d1874b96df4d7c3e67bbf793140f0717fd506dcafd62785b079cd6086b9264424ad634fb904409764c3509c3df1653f2 + languageName: node + linkType: hard + "resolve@npm:1.18.1": version: 1.18.1 resolution: "resolve@npm:1.18.1" @@ -18100,6 +19464,15 @@ __metadata: languageName: node linkType: hard +"serialize-javascript@npm:6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: ^2.1.0 + checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + languageName: node + linkType: hard + "serialize-javascript@npm:^4.0.0": version: 4.0.0 resolution: "serialize-javascript@npm:4.0.0" @@ -18425,6 +19798,26 @@ __metadata: languageName: node linkType: hard +"snarkjs@npm:0.5.0": + version: 0.5.0 + resolution: "snarkjs@npm:0.5.0" + dependencies: + "@iden3/binfileutils": 0.0.11 + bfj: ^7.0.2 + blake2b-wasm: ^2.4.0 + circom_runtime: 0.1.21 + ejs: ^3.1.6 + fastfile: 0.0.20 + ffjavascript: 0.2.56 + js-sha3: ^0.8.0 + logplease: ^1.2.15 + r1csfile: 0.0.41 + bin: + snarkjs: build/cli.cjs + checksum: f0233103548bcd0f75b2ff8998ba02437e5131486d126c4a6a31355cd3558c7ce4311e21d5f24ea9ca198d0556e91e63e2ec6aef8da44014c16b29b6a7086ca2 + languageName: node + linkType: hard + "sockjs-client@npm:^1.5.0": version: 1.6.1 resolution: "sockjs-client@npm:1.6.1" @@ -18513,6 +19906,16 @@ __metadata: languageName: node linkType: hard +"source-map-support@npm:0.5.13": + version: 0.5.13 + resolution: "source-map-support@npm:0.5.13" + dependencies: + buffer-from: ^1.0.0 + source-map: ^0.6.0 + checksum: 933550047b6c1a2328599a21d8b7666507427c0f5ef5eaadd56b5da0fd9505e239053c66fe181bf1df469a3b7af9d775778eee283cbb7ae16b902ddc09e93a97 + languageName: node + linkType: hard + "source-map-support@npm:^0.5.12, source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" @@ -19106,6 +20509,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 + languageName: node + linkType: hard + "strip-json-comments@npm:^2.0.0, strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -19113,13 +20523,6 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - "style-loader@npm:1.3.0": version: 1.3.0 resolution: "style-loader@npm:1.3.0" @@ -19193,6 +20596,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: ^4.0.0 + checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -19220,15 +20632,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: ^4.0.0 - checksum: c052193a7e43c6cdc741eb7f378df605636e01ad434badf7324f17fb60c69a880d8d8fcdcb562cf94c2350e57b937d7425ab5b8326c67c2adc48f7c87c1db406 - languageName: node - linkType: hard - "supports-hyperlinks@npm:^2.0.0": version: 2.3.0 resolution: "supports-hyperlinks@npm:2.3.0" @@ -19551,6 +20954,15 @@ __metadata: languageName: node linkType: hard +"tmp-promise@npm:^3.0.3": + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" + dependencies: + tmp: ^0.2.0 + checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -19560,7 +20972,7 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.1": +"tmp@npm:^0.2.0, tmp@npm:^0.2.1": version: 0.2.1 resolution: "tmp@npm:0.2.1" dependencies: @@ -19895,7 +21307,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -20480,6 +21892,17 @@ __metadata: languageName: node linkType: hard +"v8-to-istanbul@npm:^9.0.1": + version: 9.1.0 + resolution: "v8-to-istanbul@npm:9.1.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.12 + "@types/istanbul-lib-coverage": ^2.0.1 + convert-source-map: ^1.6.0 + checksum: 2069d59ee46cf8d83b4adfd8a5c1a90834caffa9f675e4360f1157ffc8578ef0f763c8f32d128334424159bb6b01f3876acd39cd13297b2769405a9da241f8d1 + languageName: node + linkType: hard + "validate-npm-package-license@npm:^3.0.1": version: 3.0.4 resolution: "validate-npm-package-license@npm:3.0.4" @@ -20558,7 +21981,7 @@ __metadata: languageName: node linkType: hard -"walker@npm:^1.0.7, walker@npm:~1.0.5": +"walker@npm:^1.0.7, walker@npm:^1.0.8, walker@npm:~1.0.5": version: 1.0.8 resolution: "walker@npm:1.0.8" dependencies: @@ -21239,6 +22662,13 @@ __metadata: languageName: node linkType: hard +"workerpool@npm:6.2.1": + version: 6.2.1 + resolution: "workerpool@npm:6.2.1" + checksum: c2c6eebbc5225f10f758d599a5c016fa04798bcc44e4c1dffb34050cd361d7be2e97891aa44419e7afe647b1f767b1dc0b85a5e046c409d890163f655028b09d + languageName: node + linkType: hard + "wrap-ansi@npm:^5.1.0": version: 5.1.0 resolution: "wrap-ansi@npm:5.1.0" @@ -21302,6 +22732,16 @@ __metadata: languageName: node linkType: hard +"write-file-atomic@npm:^4.0.2": + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" + dependencies: + imurmurhash: ^0.1.4 + signal-exit: ^3.0.7 + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + languageName: node + linkType: hard + "ws@npm:7.4.6": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -21464,6 +22904,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 + languageName: node + linkType: hard + "yargs-parser@npm:^13.1.2": version: 13.1.2 resolution: "yargs-parser@npm:13.1.2" @@ -21484,6 +22931,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 + languageName: node + linkType: hard + "yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -21491,6 +22945,33 @@ __metadata: languageName: node linkType: hard +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" + dependencies: + camelcase: ^6.0.0 + decamelize: ^4.0.0 + flat: ^5.0.2 + is-plain-obj: ^2.1.0 + checksum: 68f9a542c6927c3768c2f16c28f71b19008710abd6b8f8efbac6dcce26bbb68ab6503bed1d5994bdbc2df9a5c87c161110c1dfe04c6a3fe5c6ad1b0e15d9a8a3 + languageName: node + linkType: hard + +"yargs@npm:16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.0 + y18n: ^5.0.5 + yargs-parser: ^20.2.2 + checksum: b14afbb51e3251a204d81937c86a7e9d4bdbf9a2bcee38226c900d00f522969ab675703bee2a6f99f8e20103f608382936034e64d921b74df82b63c07c5e8f59 + languageName: node + linkType: hard + "yargs@npm:^13.2.4, yargs@npm:^13.3.2": version: 13.3.2 resolution: "yargs@npm:13.3.2"