diff --git a/commitlint.config.js b/commitlint.config.js index 8597e53f1..956644057 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -21,6 +21,7 @@ const scopeEnumValues = [ "utils", "runner", "e2e-test", + "crypto", ]; const Configuration = { extends: ["@commitlint/config-conventional"], diff --git a/devtools/.gitignore b/devtools/.gitignore new file mode 100644 index 000000000..849db4de5 --- /dev/null +++ b/devtools/.gitignore @@ -0,0 +1,2 @@ +lib +stats.json diff --git a/devtools/bundler/README.md b/devtools/bundler/README.md new file mode 100644 index 000000000..1f291b716 --- /dev/null +++ b/devtools/bundler/README.md @@ -0,0 +1,10 @@ +# Bundler + +A Lumos bundler playground to test, check and analyze the bundled code. + +## Usage + +```bash +npm run bundle-stats +npm run bundle-analyze +``` diff --git a/devtools/bundler/package.json b/devtools/bundler/package.json new file mode 100644 index 000000000..7f1d5523e --- /dev/null +++ b/devtools/bundler/package.json @@ -0,0 +1,29 @@ +{ + "name": "@ckb-lumos/bundler", + "version": "0.20.0", + "homepage": "https://github.com/ckb-js/lumos#readme", + "bugs": { + "url": "https://github.com/ckb-js/lumos/issues" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ckb-js/lumos.git" + }, + "license": "MIT", + "author": "", + "scripts": { + "bundle-stats": "webpack --profile --json > stats.json", + "bundle-analyze": "webpack-bundle-analyzer stats.json" + }, + "dependencies": { + "@ckb-lumos/lumos": "0.20.0", + "@types/webpack-bundle-analyzer": "^4.6.0", + "buffer": "^5.6.0", + "fork-ts-checker-webpack-plugin": "^6.4.0", + "ts-loader": "^9.4.3", + "unminified-webpack-plugin": "^3.0.0", + "webpack": "^5.64.1", + "webpack-bundle-analyzer": "^4.9.0", + "webpack-cli": "^4.9.1" + } +} diff --git a/devtools/bundler/src/index.ts b/devtools/bundler/src/index.ts new file mode 100644 index 000000000..5d1b89dd7 --- /dev/null +++ b/devtools/bundler/src/index.ts @@ -0,0 +1 @@ +export * from "@ckb-lumos/lumos"; diff --git a/devtools/bundler/tsconfig.json b/devtools/bundler/tsconfig.json new file mode 100644 index 000000000..310cf31e9 --- /dev/null +++ b/devtools/bundler/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src" + }, + "include": ["src"] +} diff --git a/devtools/bundler/webpack.config.js b/devtools/bundler/webpack.config.js new file mode 100644 index 000000000..7c283abea --- /dev/null +++ b/devtools/bundler/webpack.config.js @@ -0,0 +1,39 @@ +const path = require("path"); +const webpack = require("webpack"); +const ForkTsCheckerWebpackPlugin = require("fork-ts-checker-webpack-plugin"); + +module.exports = { + mode: "production", + devtool: "source-map", + entry: { output: "./src/index.ts" }, + output: { + path: path.join(__dirname, "lib"), + filename: "lumos.min.js", + library: "lumos", + libraryTarget: "umd", + globalObject: "this", + }, + module: { + rules: [ + { + test: /\.tsx?$/, + loader: "ts-loader", + options: {}, + }, + ], + }, + resolve: { + extensions: [".ts", ".js", ".json"], + fallback: { + // https://www.npmjs.com/package/buffer#usage + buffer: require.resolve("buffer/"), + path: false, + fs: false, + stream: false, + }, + }, + plugins: [ + new ForkTsCheckerWebpackPlugin({ async: false }), + new webpack.ProvidePlugin({ Buffer: ["buffer", "Buffer"] }), + ], +}; diff --git a/packages/base/package.json b/packages/base/package.json index 9576457e2..f38ec744e 100644 --- a/packages/base/package.json +++ b/packages/base/package.json @@ -48,10 +48,8 @@ "@ckb-lumos/codec": "0.20.0", "@ckb-lumos/toolkit": "0.20.0", "@types/blake2b": "^2.1.0", - "@types/lodash.isequal": "^4.5.5", "blake2b": "^2.1.3", - "js-xxhash": "^1.0.4", - "lodash.isequal": "^4.5.0" + "js-xxhash": "^1.0.4" }, "devDependencies": { "jsbi": "^4.1.0" diff --git a/packages/base/src/utils.ts b/packages/base/src/utils.ts index 770aa2759..004de2ca4 100644 --- a/packages/base/src/utils.ts +++ b/packages/base/src/utils.ts @@ -1,5 +1,4 @@ import blake2b, { Blake2b } from "blake2b"; -import isEqual from "lodash.isequal"; import { xxHash32 } from "js-xxhash"; import { bytes, number, BytesLike } from "@ckb-lumos/codec"; import { BI, BIish } from "@ckb-lumos/bi"; @@ -170,10 +169,6 @@ function assertHexadecimal(debugPath: string, str: string): void { } } -// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types -function isDeepEqual(a: any, b: any): boolean { - return isEqual(a, b); -} // Buffer.from('TYPE_ID') const TYPE_ID_CODE_HASH = "0x00000000000000000000000000000000000000000000000000545950455f4944"; @@ -287,6 +282,5 @@ export { hashCode, assertHexString, assertHexadecimal, - isDeepEqual, generateTypeIdScript, }; diff --git a/packages/base/tests/since.test.js b/packages/base/tests/since.test.js index bfff204a9..d5e049e66 100644 --- a/packages/base/tests/since.test.js +++ b/packages/base/tests/since.test.js @@ -1,7 +1,7 @@ const test = require("ava"); const { BI } = require("@ckb-lumos/bi"); -const { since, utils } = require("../src"); +const { since } = require("../src"); const { parseSinceCompatible, @@ -91,7 +91,11 @@ test.before(() => { test("parsedSince", (t) => { fixtrues.forEach((v) => { const parsed = parseSinceCompatible(v.since); - t.true(utils.isDeepEqual(parsed, v.parsed)); + t.is(parsed.type, v.parsed.type); + t.is(parsed.relative, v.parsed.relative); + BI.isBI(parsed.value) + ? t.true(parsed.value.eq(v.parsed.value)) + : t.deepEqual(parsed.value, v.parsed.value); }); }); diff --git a/packages/crypto/.gitignore b/packages/crypto/.gitignore new file mode 100644 index 000000000..a65b41774 --- /dev/null +++ b/packages/crypto/.gitignore @@ -0,0 +1 @@ +lib diff --git a/packages/crypto/README.md b/packages/crypto/README.md new file mode 100644 index 000000000..5f9ee998e --- /dev/null +++ b/packages/crypto/README.md @@ -0,0 +1,20 @@ +# @ckb-lumos/crypto + +Low-level cryptographic primitives for Lumos, works in both Node.js and browsers. The API is compatible with `node:crypto` + +## Usage + +The `package.json` defined the entry point for both Node.js and browsers. You can just import + +```ts +import { createHash } from "@ckb-lumos/crypto"; +``` + +### Manually + +```typescript +// In Node.js +import { createHash } from "@ckb-lumos/crypto"; +// In browsers +import { createHash } from "@ckb-lumos/crypto/lib/crypto-browser"; +``` diff --git a/packages/crypto/package.json b/packages/crypto/package.json new file mode 100644 index 000000000..4c43df44d --- /dev/null +++ b/packages/crypto/package.json @@ -0,0 +1,58 @@ +{ + "name": "@ckb-lumos/crypto", + "version": "0.20.0", + "description": "Crypto library for Lumos", + "author": "", + "homepage": "https://github.com/ckb-js/lumos#readme", + "license": "MIT", + "browser": "./lib/crypto-browser.js", + "types": "lib/crypto.d.ts", + "main": "./lib/crypto.js", + "sideEffects": false, + "engines": { + "node": ">=12.0.0" + }, + "directories": { + "lib": "lib", + "test": "tests" + }, + "files": [ + "lib", + "src" + ], + "dependencies": { + "@noble/hashes": "1.3.1", + "@noble/secp256k1": "2.0.0", + "@types/aes-js": "^3.1.1", + "browserify-aes": "^1.2.0", + "scrypt-js": "^3.0.1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ckb-js/lumos.git" + }, + "scripts": { + "fmt": "prettier --write \"{src,tests,examples}/**/*.ts\" package.json", + "lint": "eslint -c ../../.eslintrc.js \"{src,tests,examples}/**/*.ts\"", + "build": "npm run build:types && npm run build:js", + "build:types": "tsc --declaration --emitDeclarationOnly", + "build:js": "babel --root-mode upward src --out-dir lib --extensions .ts -s", + "clean": "rm -rf lib", + "prepublishOnly": "npm run clean && npm run build", + "release": "npm publish" + }, + "bugs": { + "url": "https://github.com/ckb-js/lumos/issues" + }, + "ava": { + "extensions": [ + "ts" + ], + "require": [ + "ts-node/register" + ] + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/crypto/src/crypto-browser.ts b/packages/crypto/src/crypto-browser.ts new file mode 100644 index 000000000..912c46ab1 --- /dev/null +++ b/packages/crypto/src/crypto-browser.ts @@ -0,0 +1,67 @@ +// eslint-disable-next-line @typescript-eslint/triple-slash-reference +/// +import { hmac } from "@noble/hashes/hmac"; +import { sha512 } from "@noble/hashes/sha512"; +import { sha256 } from "@noble/hashes/sha256"; +import { ripemd160 } from "@noble/hashes/ripemd160"; +// the noble/hashes is not compatible with the https://ethereum.org/en/developers/docs/data-structures-and-encoding/web3-secret-storage/#scrypt +// import { scrypt } from "@noble/hashes/scrypt"; +import { randomBytes as _randomBytes } from "@noble/hashes/utils"; +import { pbkdf2 as _pbkdf2 } from "@noble/hashes/pbkdf2"; +import type { Hash, HashAlgo } from "./types"; +// TODO may replace with the crypto.subtle API +import { + createCipheriv as _createCipheriv, + createDecipheriv as _createDecipheriv, +} from "browserify-aes"; +import { Cipher } from "./types"; + +function _createHash(algorithm: HashAlgo) { + if (algorithm === "sha512") return sha512; + if (algorithm === "sha256") return sha256; + if (algorithm === "ripemd160") return ripemd160; + throw new Error(`Unknown hash algorithm ${algorithm}`); +} + +export function createHash(algorithm: HashAlgo): Hash { + return _createHash(algorithm).create(); +} + +export function createHmac(algorithm: HashAlgo, key: Uint8Array): Hash { + return hmac.create(_createHash(algorithm), key); +} + +export function randomBytes(bytesLen: number): Uint8Array { + return _randomBytes(bytesLen); +} + +export function createCipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array +): Cipher { + return _createCipheriv(algorithm, key, iv); +} + +export function createDecipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array +): Cipher { + return _createDecipheriv(algorithm, key, iv); +} + +export function pbkdf2Sync( + password: Uint8Array, + salt: Uint8Array, + iterations: number, + keyLen: number, + digest: HashAlgo +): Uint8Array { + return _pbkdf2(_createHash(digest), password, salt, { + dkLen: keyLen, + c: iterations, + }); +} + +export { scryptSync, scrypt } from "./scrypt"; diff --git a/packages/crypto/src/crypto.ts b/packages/crypto/src/crypto.ts new file mode 100644 index 000000000..59a8cde88 --- /dev/null +++ b/packages/crypto/src/crypto.ts @@ -0,0 +1,50 @@ +import { + createHmac as _createHmac, + createHash as _createHash, + scryptSync as _scryptSync, + randomBytes as _randomBytes, + createCipheriv as _createCipheriv, + createDecipheriv as _createDecipheriv, + pbkdf2Sync as _pbkdf2Sync, +} from "node:crypto"; +import type { Cipher, Hash, HashAlgo } from "./types"; + +export function createHash(algorithm: HashAlgo): Hash { + return _createHash(algorithm); +} + +export function createHmac(algorithm: HashAlgo, key: Uint8Array): Hash { + return _createHmac(algorithm, key); +} + +export function randomBytes(bytesLen: number): Uint8Array { + return _randomBytes(bytesLen); +} + +export function createCipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array +): Cipher { + return _createCipheriv(algorithm, key, iv); +} + +export function createDecipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array +): Cipher { + return _createDecipheriv(algorithm, key, iv); +} + +export function pbkdf2Sync( + password: Uint8Array, + salt: Uint8Array, + iterations: number, + keyLen: number, + digest: HashAlgo +): Uint8Array { + return _pbkdf2Sync(password, salt, iterations, keyLen, digest); +} + +export { scryptSync, scrypt } from "./scrypt"; diff --git a/packages/crypto/src/scrypt.ts b/packages/crypto/src/scrypt.ts new file mode 100644 index 000000000..118716d17 --- /dev/null +++ b/packages/crypto/src/scrypt.ts @@ -0,0 +1,32 @@ +import { syncScrypt as _scryptSync, scrypt as _scrypt } from "scrypt-js"; +import { ScryptOptions } from "./types"; + +function assertOptions( + options: ScryptOptions +): asserts options is Required { + if (!options.r || !options.p || !options.N) { + throw new Error( + `Invalid scrypt options ${JSON.stringify(options)}, r, p, N are required` + ); + } +} + +export function scryptSync( + password: Uint8Array, + salt: Uint8Array, + dkLen: number, + options: ScryptOptions +): Uint8Array { + assertOptions(options); + return _scryptSync(password, salt, options.N, options.r, options.p, dkLen); +} + +export function scrypt( + password: Uint8Array, + salt: Uint8Array, + dkLen: number, + options: ScryptOptions +): Promise { + assertOptions(options); + return _scrypt(password, salt, options.N, options.r, options.p, dkLen); +} diff --git a/packages/crypto/src/third.d.ts b/packages/crypto/src/third.d.ts new file mode 100644 index 000000000..d0bfa53d8 --- /dev/null +++ b/packages/crypto/src/third.d.ts @@ -0,0 +1,18 @@ +declare module "browserify-aes" { + interface Cipher { + update(data: Uint8Array): Uint8Array; + final(): Uint8Array; + } + + export function createCipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array + ): Cipher; + + export function createDecipheriv( + algorithm: string, + key: Uint8Array, + iv: Uint8Array + ): Cipher; +} diff --git a/packages/crypto/src/types.ts b/packages/crypto/src/types.ts new file mode 100644 index 000000000..7e118a9ae --- /dev/null +++ b/packages/crypto/src/types.ts @@ -0,0 +1,22 @@ +export interface Hash { + update(data: Uint8Array): Hash; + digest(): Uint8Array; +} + +export type HashAlgo = "sha512" | "sha256" | "ripemd160"; + +export type CreateHmac = (algorithm: HashAlgo, bytes: Uint8Array) => Hash; + +export type ScryptOptions = { + // cost factor + N?: number; + // block size + r?: number; + // parallelization + p?: number; +}; + +export interface Cipher { + update(data: Uint8Array): Uint8Array; + final(): Uint8Array; +} diff --git a/packages/crypto/tsconfig.json b/packages/crypto/tsconfig.json new file mode 100644 index 000000000..1b551f4e9 --- /dev/null +++ b/packages/crypto/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "lib" + }, + "include": ["src"] +} diff --git a/packages/crypto/typedoc.json b/packages/crypto/typedoc.json new file mode 100644 index 000000000..f593f276c --- /dev/null +++ b/packages/crypto/typedoc.json @@ -0,0 +1,4 @@ +{ + "extends": ["../../typedoc.base.json"], + "entryPoints": ["src/index.ts"] +} diff --git a/packages/hd/README.md b/packages/hd/README.md index 264546714..4ea891eb8 100644 --- a/packages/hd/README.md +++ b/packages/hd/README.md @@ -44,7 +44,6 @@ resolve: { buffer: require.resolve('buffer/'), stream: require.resolve('stream-browserify'), path: require.resolve('path-browserify'), - crypto: require.resolve('crypto-browserify'), }, plugins: [ new webpack.ProvidePlugin({ @@ -55,4 +54,4 @@ resolve: { } ``` -You'll need to install `buffer`, `stream-browserify`, `path-browserify` and `crypto-browserify` also. +You'll need to install `buffer`, `stream-browserify`, `path-browserify` also. diff --git a/packages/hd/package.json b/packages/hd/package.json index af86b8720..4848874f4 100644 --- a/packages/hd/package.json +++ b/packages/hd/package.json @@ -21,9 +21,10 @@ "dependencies": { "@ckb-lumos/base": "0.20.0", "@ckb-lumos/bi": "0.20.0", - "bn.js": "^5.1.3", + "@ckb-lumos/codec": "0.20.0", + "@ckb-lumos/crypto": "0.20.0", + "bn.js": "^4.11.6", "elliptic": "^6.5.4", - "scrypt-js": "^3.0.1", "sha3": "^2.1.3", "uuid": "^8.3.0" }, @@ -34,8 +35,10 @@ "scripts": { "fmt": "prettier --write \"{src,tests}/**/*.ts\" package.json", "lint": "eslint -c ../../.eslintrc.js \"{src,tests}/**/*.ts\"", - "test": "ava **/*.test.ts --timeout=5m", - "build": "pnpm run build:types && pnpm run build:js", + "test": "npm run test:node && npm run test:browser", + "test:node": "ava **/*.test.ts --timeout=5m", + "test:browser": "echo 'export * from \"@ckb-lumos/crypto/lib/crypto-browser\"' > src/crypto.ts && ava **/*.test.ts --timeout=5m && echo 'export * from \"@ckb-lumos/crypto\"' > src/crypto.ts", + "build": "npm run build:types && npm run build:js", "build:types": "tsc --declaration --emitDeclarationOnly", "build:js": "babel --root-mode upward src --out-dir lib --extensions .ts -s", "clean": "rm -rf lib" diff --git a/packages/hd/src/crypto.ts b/packages/hd/src/crypto.ts new file mode 100644 index 000000000..c398ab84f --- /dev/null +++ b/packages/hd/src/crypto.ts @@ -0,0 +1 @@ +export * from "@ckb-lumos/crypto"; diff --git a/packages/hd/src/keychain.ts b/packages/hd/src/keychain.ts index 9e65f88b2..dbc202efa 100644 --- a/packages/hd/src/keychain.ts +++ b/packages/hd/src/keychain.ts @@ -1,7 +1,7 @@ -import crypto from "crypto"; import { ec as EC } from "elliptic"; import BN from "bn.js"; import { privateToPublic } from "./key"; +import { createHash, createHmac } from "./crypto"; const ec = new EC("secp256k1"); @@ -12,11 +12,11 @@ export default class Keychain { privateKey: Buffer = EMPTY_BUFFER; publicKey: Buffer = EMPTY_BUFFER; chainCode: Buffer = EMPTY_BUFFER; - index: number = 0; - depth: number = 0; + index = 0; + depth = 0; identifier: Buffer = EMPTY_BUFFER; - fingerprint: number = 0; - parentFingerprint: number = 0; + fingerprint = 0; + parentFingerprint = 0; constructor(privateKey: Buffer, chainCode: Buffer) { this.privateKey = privateKey; @@ -33,11 +33,13 @@ export default class Keychain { } public static fromSeed(seed: Buffer): Keychain { - const i = crypto - .createHmac("sha512", Buffer.from("Bitcoin seed", "utf8")) + const i = createHmac("sha512", Buffer.from("Bitcoin seed", "utf8")) .update(seed) .digest(); - const keychain = new Keychain(i.slice(0, 32), i.slice(32)); + const keychain = new Keychain( + Buffer.from(i.slice(0, 32)), + Buffer.from(i.slice(32)) + ); keychain.calculateFingerprint(); return keychain; } @@ -47,7 +49,7 @@ export default class Keychain { public static fromPublicKey( publicKey: Buffer, chainCode: Buffer, - path: String + path: string ): Keychain { const keychain = new Keychain(EMPTY_BUFFER, chainCode); keychain.publicKey = publicKey; @@ -74,7 +76,9 @@ export default class Keychain { data = Buffer.concat([this.publicKey, indexBuffer]); } - const i = crypto.createHmac("sha512", this.chainCode).update(data).digest(); + const i = Buffer.from( + createHmac("sha512", this.chainCode).update(data).digest() + ); const il = i.slice(0, 32); const ir = i.slice(32); @@ -102,6 +106,7 @@ export default class Keychain { return this; } + // eslint-disable-next-line @typescript-eslint/no-this-alias let bip32: Keychain = this; let entries = path.split("/"); @@ -117,13 +122,13 @@ export default class Keychain { return bip32; } - isNeutered(): Boolean { + isNeutered(): boolean { return this.privateKey === EMPTY_BUFFER; } hash160(data: Buffer): Buffer { - const sha256 = crypto.createHash("sha256").update(data).digest(); - return crypto.createHash("ripemd160").update(sha256).digest(); + const sha256 = createHash("sha256").update(data).digest(); + return Buffer.from(createHash("ripemd160").update(sha256).digest()); } private static privateKeyAdd(privateKey: Buffer, factor: Buffer): Buffer { diff --git a/packages/hd/src/keystore.ts b/packages/hd/src/keystore.ts index f3c2f87c4..6480a2cac 100644 --- a/packages/hd/src/keystore.ts +++ b/packages/hd/src/keystore.ts @@ -1,9 +1,13 @@ -import crypto from "crypto"; import { Keccak } from "sha3"; import { v4 as uuid } from "uuid"; import { ExtendedPrivateKey } from "./extended_key"; import { HexString } from "@ckb-lumos/base"; -import { syncScrypt } from "scrypt-js"; +import { + createCipheriv, + createDecipheriv, + randomBytes, + scryptSync, +} from "./crypto"; export type HexStringWithoutPrefix = string; @@ -123,8 +127,8 @@ export default class Keystore { // Create an empty keystore object that contains empty private key static createEmpty(): Keystore { - const salt: Buffer = crypto.randomBytes(32); - const iv: Buffer = crypto.randomBytes(16); + const salt: Buffer = Buffer.from(randomBytes(32)); + const iv: Buffer = Buffer.from(randomBytes(16)); const kdfparams: KdfParams = { dklen: 32, salt: salt.toString("hex"), @@ -152,8 +156,8 @@ export default class Keystore { password: string, options: { salt?: Buffer; iv?: Buffer } = {} ): Keystore { - const salt: Buffer = options.salt || crypto.randomBytes(32); - const iv: Buffer = options.iv || crypto.randomBytes(16); + const salt: Buffer = options.salt || Buffer.from(randomBytes(32)); + const iv: Buffer = options.iv || Buffer.from(randomBytes(16)); const kdfparams: KdfParams = { dklen: 32, salt: salt.toString("hex"), @@ -162,21 +166,14 @@ export default class Keystore { p: 1, }; const derivedKey: Buffer = Buffer.from( - syncScrypt( - Buffer.from(password), - salt, - kdfparams.n, - kdfparams.r, - kdfparams.p, - kdfparams.dklen - ) + scryptSync(Buffer.from(password), salt, kdfparams.dklen, { + N: kdfparams.n, + r: kdfparams.r, + p: kdfparams.p, + }) ); - const cipher: crypto.Cipher = crypto.createCipheriv( - CIPHER, - derivedKey.slice(0, 16), - iv - ); + const cipher = createCipheriv(CIPHER, derivedKey.slice(0, 16), iv); if (!cipher) { throw new UnsupportedCipher(); } @@ -214,7 +211,7 @@ export default class Keystore { if (Keystore.mac(derivedKey, ciphertext) !== this.crypto.mac) { throw new IncorrectPassword(); } - const decipher = crypto.createDecipheriv( + const decipher = createDecipheriv( this.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(this.crypto.cipherparams.iv, "hex") @@ -240,13 +237,15 @@ export default class Keystore { derivedKey(password: string): Buffer { const { kdfparams } = this.crypto; return Buffer.from( - syncScrypt( + scryptSync( Buffer.from(password), Buffer.from(kdfparams.salt, "hex"), - kdfparams.n, - kdfparams.r, - kdfparams.p, - kdfparams.dklen + kdfparams.dklen, + { + N: kdfparams.n, + r: kdfparams.r, + p: kdfparams.p, + } ) ); } @@ -257,7 +256,7 @@ export default class Keystore { .digest("hex"); } - static scryptOptions(kdfparams: KdfParams): crypto.ScryptOptions { + static scryptOptions(kdfparams: KdfParams): ScryptOptions { return { N: kdfparams.n, r: kdfparams.r, @@ -266,3 +265,13 @@ export default class Keystore { }; } } + +interface ScryptOptions { + cost?: number | undefined; + blockSize?: number | undefined; + parallelization?: number | undefined; + N?: number | undefined; + r?: number | undefined; + p?: number | undefined; + maxmem?: number | undefined; +} diff --git a/packages/hd/src/mnemonic/index.ts b/packages/hd/src/mnemonic/index.ts index 0b3f956a4..11bf7a7b7 100644 --- a/packages/hd/src/mnemonic/index.ts +++ b/packages/hd/src/mnemonic/index.ts @@ -1,6 +1,7 @@ -import crypto from "crypto"; import wordList from "./word_list"; import { HexString } from "@ckb-lumos/base"; +import { createHash, pbkdf2Sync, randomBytes } from "../crypto"; +import { bytes } from "@ckb-lumos/codec"; const RADIX = 2048; const PBKDF2_ROUNDS = 2048; @@ -28,7 +29,7 @@ if (wordList.length !== RADIX) { ); } -function bytesToBinary(bytes: Buffer): string { +function bytesToBinary(bytes: Uint8Array): string { return bytes.reduce((binary, byte) => { return binary + byte.toString(2).padStart(8, "0"); }, ""); @@ -37,57 +38,35 @@ function bytesToBinary(bytes: Buffer): string { function deriveChecksumBits(entropyBuffer: Buffer): string { const ENT = entropyBuffer.length * 8; const CS = ENT / 32; - const hash = crypto.createHash("sha256").update(entropyBuffer).digest(); + const hash = createHash("sha256").update(entropyBuffer).digest(); return bytesToBinary(hash).slice(0, CS); } -function salt(password: string = ""): string { +function salt(password = ""): string { return `mnemonic${password}`; } -export function mnemonicToSeedSync( - mnemonic: string = "", - password: string = "" -): Buffer { +export function mnemonicToSeedSync(mnemonic = "", password = ""): Buffer { const mnemonicBuffer = Buffer.from(mnemonic.normalize("NFKD"), "utf8"); const saltBuffer = Buffer.from(salt(password.normalize("NFKD")), "utf8"); - return crypto.pbkdf2Sync( - mnemonicBuffer, - saltBuffer, - PBKDF2_ROUNDS, - KEY_LEN, - "sha512" + return Buffer.from( + pbkdf2Sync(mnemonicBuffer, saltBuffer, PBKDF2_ROUNDS, KEY_LEN, "sha512") ); } -export function mnemonicToSeed( - mnemonic: string = "", - password: string = "" -): Promise { +export function mnemonicToSeed(mnemonic = "", password = ""): Promise { return new Promise((resolve, reject) => { try { const mnemonicBuffer = Buffer.from(mnemonic.normalize("NFKD"), "utf8"); const saltBuffer = Buffer.from(salt(password.normalize("NFKD")), "utf8"); - crypto.pbkdf2( - mnemonicBuffer, - saltBuffer, - PBKDF2_ROUNDS, - KEY_LEN, - "sha512", - (err, data) => { - if (err) { - reject(err); - } - resolve(data); - } - ); + pbkdf2Sync(mnemonicBuffer, saltBuffer, PBKDF2_ROUNDS, KEY_LEN, "sha512"); } catch (error) { reject(error); } }); } -export function mnemonicToEntropy(mnemonic: string = ""): HexString { +export function mnemonicToEntropy(mnemonic = ""): HexString { const words = mnemonic.normalize("NFKD").split(" "); if (words.length < MIN_WORDS_SIZE) { throw new Error(WORDS_TOO_SHORT); @@ -172,8 +151,7 @@ export function validateMnemonic(mnemonic: string): boolean { // Generate 12 words mnemonic code export function generateMnemonic(): string { const entropySize = 16; - const entropy: HexString = - "0x" + crypto.randomBytes(entropySize).toString("hex"); + const entropy: HexString = bytes.hexify(randomBytes(entropySize)); return entropyToMnemonic(entropy); } diff --git a/packages/lumos/package.json b/packages/lumos/package.json index 64b612924..7710707b7 100644 --- a/packages/lumos/package.json +++ b/packages/lumos/package.json @@ -46,7 +46,6 @@ }, "devDependencies": { "buffer": "^6.0.3", - "crypto-browserify": "^3.12.0", "fork-ts-checker-webpack-plugin": "^6.4.0", "ts-loader": "^9.2.6", "unminified-webpack-plugin": "^3.0.0", diff --git a/packages/lumos/webpack.config.js b/packages/lumos/webpack.config.js index 43c7918e6..032a1d14c 100644 --- a/packages/lumos/webpack.config.js +++ b/packages/lumos/webpack.config.js @@ -32,7 +32,6 @@ module.exports = { fallback: { // https://www.npmjs.com/package/buffer#usage buffer: require.resolve("buffer/"), - crypto: require.resolve("crypto-browserify"), path: false, fs: false, stream: false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 773b6d655..19a8e7498 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -99,6 +99,36 @@ importers: specifier: 5.0.4 version: 5.0.4 + devtools/bundler: + dependencies: + '@ckb-lumos/lumos': + specifier: 0.20.0 + version: link:../../packages/lumos + '@types/webpack-bundle-analyzer': + specifier: ^4.6.0 + version: 4.6.0(webpack-cli@4.9.1) + buffer: + specifier: ^5.6.0 + version: 5.6.0 + fork-ts-checker-webpack-plugin: + specifier: ^6.4.0 + version: 6.4.0(eslint@8.40.0)(typescript@4.9.5)(webpack@5.64.1) + ts-loader: + specifier: ^9.4.3 + version: 9.4.3(typescript@4.9.5)(webpack@5.64.1) + unminified-webpack-plugin: + specifier: ^3.0.0 + version: 3.0.0(webpack@5.64.1) + webpack: + specifier: ^5.64.1 + version: 5.64.1(webpack-cli@4.9.1) + webpack-bundle-analyzer: + specifier: ^4.9.0 + version: 4.9.0 + webpack-cli: + specifier: ^4.9.1 + version: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) + devtools/changelog: dependencies: '@changesets/get-github-info': @@ -125,18 +155,12 @@ importers: '@types/blake2b': specifier: ^2.1.0 version: 2.1.0 - '@types/lodash.isequal': - specifier: ^4.5.5 - version: 4.5.5 blake2b: specifier: ^2.1.3 version: 2.1.3 js-xxhash: specifier: ^1.0.4 version: 1.0.4 - lodash.isequal: - specifier: ^4.5.0 - version: 4.5.0 devDependencies: jsbi: specifier: ^4.1.0 @@ -268,6 +292,24 @@ importers: specifier: ^1.1.1 version: 1.1.1 + packages/crypto: + dependencies: + '@noble/hashes': + specifier: 1.3.1 + version: 1.3.1 + '@noble/secp256k1': + specifier: 2.0.0 + version: 2.0.0 + '@types/aes-js': + specifier: ^3.1.1 + version: 3.1.1 + browserify-aes: + specifier: ^1.2.0 + version: 1.2.0 + scrypt-js: + specifier: ^3.0.1 + version: 3.0.1 + packages/debugger: dependencies: '@ckb-lumos/base': @@ -413,15 +455,18 @@ importers: '@ckb-lumos/bi': specifier: 0.20.0 version: link:../bi + '@ckb-lumos/codec': + specifier: 0.20.0 + version: link:../codec + '@ckb-lumos/crypto': + specifier: 0.20.0 + version: link:../crypto bn.js: - specifier: ^5.1.3 - version: 5.1.3 + specifier: ^4.11.6 + version: 4.12.0 elliptic: specifier: ^6.5.4 version: 6.5.4 - scrypt-js: - specifier: ^3.0.1 - version: 3.0.1 sha3: specifier: ^2.1.3 version: 2.1.3 @@ -558,9 +603,6 @@ importers: buffer: specifier: ^6.0.3 version: 6.0.3 - crypto-browserify: - specifier: ^3.12.0 - version: 3.12.0 fork-ts-checker-webpack-plugin: specifier: ^6.4.0 version: 6.4.0(eslint@8.40.0)(typescript@4.9.5)(webpack@5.64.1) @@ -575,7 +617,7 @@ importers: version: 5.64.1(webpack-cli@4.9.1) webpack-cli: specifier: ^4.9.1 - version: 4.9.1(webpack@5.64.1) + version: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) packages/molecule: dependencies: @@ -3769,8 +3811,8 @@ packages: update-notifier: 5.1.0 url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.0) wait-on: 6.0.1 - webpack: 5.82.0 - webpack-bundle-analyzer: 4.8.0 + webpack: 5.82.0(webpack-cli@4.9.1) + webpack-bundle-analyzer: 4.9.0 webpack-dev-server: 4.15.0(webpack@5.82.0) webpack-merge: 5.8.0 webpackbar: 5.0.2(webpack@5.82.0) @@ -3836,7 +3878,7 @@ packages: unified: 9.2.2 unist-util-visit: 2.0.3 url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.0) - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -3892,7 +3934,7 @@ packages: tslib: 2.5.0 unist-util-visit: 2.0.3 utility-types: 3.10.0 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -3935,7 +3977,7 @@ packages: react-dom: 17.0.2(react@17.0.2) tslib: 2.5.0 utility-types: 3.10.0 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -3970,7 +4012,7 @@ packages: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) tslib: 2.5.0 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - '@parcel/css' - '@swc/core' @@ -4369,7 +4411,7 @@ packages: react-dom: 17.0.2(react@17.0.2) react-helmet-async: 1.3.0(react-dom@17.0.2)(react@17.0.2) utility-types: 3.10.0 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) webpack-merge: 5.8.0 transitivePeerDependencies: - '@swc/core' @@ -4433,7 +4475,7 @@ packages: shelljs: 0.8.5 tslib: 2.5.0 url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.82.0) - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -5160,6 +5202,15 @@ packages: dev: true optional: true + /@noble/hashes@1.3.1: + resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} + engines: {node: '>= 16'} + dev: false + + /@noble/secp256k1@2.0.0: + resolution: {integrity: sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5180,7 +5231,6 @@ packages: /@polka/url@1.0.0-next.21: resolution: {integrity: sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==} - dev: false /@popperjs/core@2.11.7: resolution: {integrity: sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==} @@ -5464,6 +5514,10 @@ packages: resolution: {integrity: sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==} dev: true + /@types/aes-js@3.1.1: + resolution: {integrity: sha512-SDSGgXT3LRCH6qMWk8OHT1vLSVNuHNvCpKCx2/TYtQMbMGGgxJC9fspwSkQjqzRagrWnCrxuLL3jMNXLXHHvSw==} + dev: false + /@types/babel__core@7.20.0: resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} dependencies: @@ -5704,12 +5758,6 @@ packages: shell-exec: 1.0.2 dev: false - /@types/lodash.isequal@4.5.5: - resolution: {integrity: sha512-4IKbinG7MGP131wRfceK6W4E/Qt3qssEFLF30LnJbjYiSfHGGRU/Io8YxXrZX109ir+iDETC8hw8QsDijukUVg==} - dependencies: - '@types/lodash': 4.14.194 - dev: false - /@types/lodash.uniqby@4.7.7: resolution: {integrity: sha512-sv2g6vkCIvEUsK5/Vq17haoZaisfj2EWW8mP7QWlnKi6dByoNmeuHDDXHR7sabuDqwO4gvU7ModIL22MmnOocg==} dependencies: @@ -5952,6 +6000,19 @@ packages: resolution: {integrity: sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==} dev: true + /@types/webpack-bundle-analyzer@4.6.0(webpack-cli@4.9.1): + resolution: {integrity: sha512-XeQmQCCXdZdap+A/60UKmxW5Mz31Vp9uieGlHB3T4z/o2OLVLtTI3bvTuS6A2OWd/rbAAQiGGWIEFQACu16szA==} + dependencies: + '@types/node': 20.1.0 + tapable: 2.2.1 + webpack: 5.82.0(webpack-cli@4.9.1) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + - webpack-cli + dev: false + /@types/ws@8.5.4: resolution: {integrity: sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==} dependencies: @@ -6109,7 +6170,6 @@ packages: dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - dev: true /@webassemblyjs/ast@1.11.5: resolution: {integrity: sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==} @@ -6119,21 +6179,18 @@ packages: /@webassemblyjs/floating-point-hex-parser@1.11.1: resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} - dev: true /@webassemblyjs/floating-point-hex-parser@1.11.5: resolution: {integrity: sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==} /@webassemblyjs/helper-api-error@1.11.1: resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} - dev: true /@webassemblyjs/helper-api-error@1.11.5: resolution: {integrity: sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==} /@webassemblyjs/helper-buffer@1.11.1: resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} - dev: true /@webassemblyjs/helper-buffer@1.11.5: resolution: {integrity: sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==} @@ -6144,7 +6201,6 @@ packages: '@webassemblyjs/floating-point-hex-parser': 1.11.1 '@webassemblyjs/helper-api-error': 1.11.1 '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/helper-numbers@1.11.5: resolution: {integrity: sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==} @@ -6155,7 +6211,6 @@ packages: /@webassemblyjs/helper-wasm-bytecode@1.11.1: resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} - dev: true /@webassemblyjs/helper-wasm-bytecode@1.11.5: resolution: {integrity: sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==} @@ -6167,7 +6222,6 @@ packages: '@webassemblyjs/helper-buffer': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 '@webassemblyjs/wasm-gen': 1.11.1 - dev: true /@webassemblyjs/helper-wasm-section@1.11.5: resolution: {integrity: sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==} @@ -6181,7 +6235,6 @@ packages: resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} dependencies: '@xtuc/ieee754': 1.2.0 - dev: true /@webassemblyjs/ieee754@1.11.5: resolution: {integrity: sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==} @@ -6192,7 +6245,6 @@ packages: resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} dependencies: '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/leb128@1.11.5: resolution: {integrity: sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==} @@ -6201,7 +6253,6 @@ packages: /@webassemblyjs/utf8@1.11.1: resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} - dev: true /@webassemblyjs/utf8@1.11.5: resolution: {integrity: sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==} @@ -6217,7 +6268,6 @@ packages: '@webassemblyjs/wasm-opt': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 '@webassemblyjs/wast-printer': 1.11.1 - dev: true /@webassemblyjs/wasm-edit@1.11.5: resolution: {integrity: sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==} @@ -6239,7 +6289,6 @@ packages: '@webassemblyjs/ieee754': 1.11.1 '@webassemblyjs/leb128': 1.11.1 '@webassemblyjs/utf8': 1.11.1 - dev: true /@webassemblyjs/wasm-gen@1.11.5: resolution: {integrity: sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==} @@ -6257,7 +6306,6 @@ packages: '@webassemblyjs/helper-buffer': 1.11.1 '@webassemblyjs/wasm-gen': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - dev: true /@webassemblyjs/wasm-opt@1.11.5: resolution: {integrity: sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==} @@ -6276,7 +6324,6 @@ packages: '@webassemblyjs/ieee754': 1.11.1 '@webassemblyjs/leb128': 1.11.1 '@webassemblyjs/utf8': 1.11.1 - dev: true /@webassemblyjs/wasm-parser@1.11.5: resolution: {integrity: sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==} @@ -6293,7 +6340,6 @@ packages: dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 - dev: true /@webassemblyjs/wast-printer@1.11.5: resolution: {integrity: sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==} @@ -6308,8 +6354,7 @@ packages: webpack-cli: 4.x.x dependencies: webpack: 5.64.1(webpack-cli@4.9.1) - webpack-cli: 4.9.1(webpack@5.64.1) - dev: true + webpack-cli: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) /@webpack-cli/info@1.5.0(webpack-cli@4.9.1): resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==} @@ -6317,8 +6362,7 @@ packages: webpack-cli: 4.x.x dependencies: envinfo: 7.8.1 - webpack-cli: 4.9.1(webpack@5.64.1) - dev: true + webpack-cli: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) /@webpack-cli/serve@1.7.0(webpack-cli@4.9.1): resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==} @@ -6329,8 +6373,7 @@ packages: webpack-dev-server: optional: true dependencies: - webpack-cli: 4.9.1(webpack@5.64.1) - dev: true + webpack-cli: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) /@xtuc/ieee754@1.2.0: resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} @@ -6639,15 +6682,6 @@ packages: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: false - /asn1.js@5.4.1: - resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - dependencies: - bn.js: 4.12.0 - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - safer-buffer: 2.1.2 - dev: true - /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: @@ -6811,7 +6845,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.0 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /babel-plugin-apply-mdx-type-prop@1.6.22(@babel/core@7.12.9): @@ -7040,9 +7074,7 @@ packages: /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} - - /bn.js@5.1.3: - resolution: {integrity: sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==} + dev: false /body-parser@1.19.0: resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} @@ -7183,6 +7215,7 @@ packages: /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: false /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} @@ -7193,45 +7226,7 @@ packages: evp_bytestokey: 1.0.3 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true - - /browserify-cipher@1.0.1: - resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} - dependencies: - browserify-aes: 1.2.0 - browserify-des: 1.0.2 - evp_bytestokey: 1.0.3 - dev: true - - /browserify-des@1.0.2: - resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} - dependencies: - cipher-base: 1.0.4 - des.js: 1.0.1 - inherits: 2.0.4 - safe-buffer: 5.2.1 - dev: true - - /browserify-rsa@4.1.0: - resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} - dependencies: - bn.js: 5.1.3 - randombytes: 2.1.0 - dev: true - - /browserify-sign@4.2.1: - resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} - dependencies: - bn.js: 5.1.3 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - create-hmac: 1.1.7 - elliptic: 6.5.4 - inherits: 2.0.4 - parse-asn1: 5.1.6 - readable-stream: 3.6.2 - safe-buffer: 5.2.1 - dev: true + dev: false /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} @@ -7273,7 +7268,7 @@ packages: /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} - dev: true + dev: false /buffer@5.6.0: resolution: {integrity: sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==} @@ -7512,7 +7507,7 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true + dev: false /cjs-module-lexer@1.2.2: resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} @@ -7885,7 +7880,7 @@ packages: normalize-path: 3.0.0 schema-utils: 4.0.1 serialize-javascript: 6.0.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /core-js-compat@3.30.2: @@ -7958,13 +7953,6 @@ packages: path-type: 4.0.0 dev: false - /create-ecdh@4.0.4: - resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} - dependencies: - bn.js: 4.12.0 - elliptic: 6.5.4 - dev: true - /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: @@ -7973,18 +7961,7 @@ packages: md5.js: 1.3.5 ripemd160: 2.0.2 sha.js: 2.4.11 - dev: true - - /create-hmac@1.1.7: - resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} - dependencies: - cipher-base: 1.0.4 - create-hash: 1.2.0 - inherits: 2.0.4 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true + dev: false /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -8025,22 +8002,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /crypto-browserify@3.12.0: - resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} - dependencies: - browserify-cipher: 1.0.1 - browserify-sign: 4.2.1 - create-ecdh: 4.0.4 - create-hash: 1.2.0 - create-hmac: 1.1.7 - diffie-hellman: 5.0.3 - inherits: 2.0.4 - pbkdf2: 3.1.2 - public-encrypt: 4.0.3 - randombytes: 2.1.0 - randomfill: 1.0.4 - dev: true - /crypto-random-string@2.0.0: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} @@ -8067,8 +8028,8 @@ packages: postcss-modules-scope: 3.0.0(postcss@8.4.23) postcss-modules-values: 4.0.0(postcss@8.4.23) postcss-value-parser: 4.2.0 - semver: 7.5.0 - webpack: 5.82.0 + semver: 7.5.4 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.2)(webpack@5.82.0): @@ -8103,7 +8064,7 @@ packages: schema-utils: 4.0.1 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /css-select@4.3.0: @@ -8478,13 +8439,6 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - /des.js@1.0.1: - resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} - dependencies: - inherits: 2.0.4 - minimalistic-assert: 1.0.1 - dev: true - /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -8550,14 +8504,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /diffie-hellman@5.0.3: - resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} - dependencies: - bn.js: 4.12.0 - miller-rabin: 4.0.1 - randombytes: 2.1.0 - dev: true - /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -8700,7 +8646,6 @@ packages: /duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - dev: false /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -8728,6 +8673,7 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: false /emittery@0.10.2: resolution: {integrity: sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==} @@ -8795,7 +8741,6 @@ packages: resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} engines: {node: '>=4'} hasBin: true - dev: true /equal-length@1.0.1: resolution: {integrity: sha512-TK2m7MvWPt/v3dan0BCNp99pytIE5UGrUj7F0KZirNX8xz8fDFUAZfgm8uB5FuQq9u0sMeDocYBfEhsd1nwGoA==} @@ -8849,7 +8794,6 @@ packages: /es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: true /es-module-lexer@1.2.1: resolution: {integrity: sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==} @@ -9147,7 +9091,7 @@ packages: dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 - dev: true + dev: false /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} @@ -9343,7 +9287,6 @@ packages: /fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} - dev: true /fastq@1.15.0: resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} @@ -9423,7 +9366,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.2 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /file-type@11.1.0: @@ -9617,11 +9560,10 @@ packages: memfs: 3.5.1 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.5.0 + semver: 7.5.4 tapable: 1.1.3 typescript: 4.9.5 webpack: 5.64.1(webpack-cli@4.9.1) - dev: true /fork-ts-checker-webpack-plugin@6.5.3(eslint@8.40.0)(typescript@4.9.5)(webpack@5.82.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} @@ -9649,10 +9591,10 @@ packages: memfs: 3.5.1 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.5.0 + semver: 7.5.4 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /form-data@2.3.3: @@ -10047,7 +9989,6 @@ packages: engines: {node: '>=10'} dependencies: duplexer: 0.1.2 - dev: false /handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -10132,13 +10073,14 @@ packages: inherits: 2.0.4 readable-stream: 3.6.2 safe-buffer: 5.2.1 - dev: true + dev: false /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 + dev: false /hast-to-hyperscript@9.0.1: resolution: {integrity: sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==} @@ -10230,6 +10172,7 @@ packages: hash.js: 1.1.7 minimalistic-assert: 1.0.1 minimalistic-crypto-utils: 1.0.1 + dev: false /hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} @@ -10304,7 +10247,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /htmlparser2@6.1.0: @@ -10484,7 +10427,6 @@ packages: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - dev: true /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -10549,7 +10491,6 @@ packages: /interpret@2.2.0: resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} engines: {node: '>= 0.10'} - dev: true /into-stream@3.1.0: resolution: {integrity: sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==} @@ -11528,7 +11469,6 @@ packages: /json-parse-better-errors@1.0.2: resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} - dev: true /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -11820,10 +11760,6 @@ packages: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} dev: true - /lodash.isequal@4.5.0: - resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} - dev: false - /lodash.islength@4.0.1: resolution: {integrity: sha512-FlJtdcHNU8YEXbzZXYWMEHLkQOpvmlnGr5o2N1iQKB7hNyr6qPkWAe+Ceczz6JYlIzD4AlTD2igvt/2/0Pb3Zw==} dev: true @@ -12002,7 +11938,7 @@ packages: hash-base: 3.1.0 inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true + dev: false /mdast-squeeze-paragraphs@4.0.0: resolution: {integrity: sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==} @@ -12119,14 +12055,6 @@ packages: braces: 3.0.2 picomatch: 2.3.1 - /miller-rabin@4.0.1: - resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} - hasBin: true - dependencies: - bn.js: 4.12.0 - brorand: 1.1.0 - dev: true - /mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -12179,14 +12107,16 @@ packages: webpack: ^5.0.0 dependencies: schema-utils: 4.0.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: false /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -12224,7 +12154,6 @@ packages: /mrmime@1.0.1: resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} engines: {node: '>=10'} - dev: false /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} @@ -12554,7 +12483,6 @@ packages: /opener@1.5.2: resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} hasBin: true - dev: false /optionator@0.9.1: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} @@ -12717,16 +12645,6 @@ packages: dependencies: callsites: 3.1.0 - /parse-asn1@5.1.6: - resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} - dependencies: - asn1.js: 5.4.1 - browserify-aes: 1.2.0 - evp_bytestokey: 1.0.3 - pbkdf2: 3.1.2 - safe-buffer: 5.2.1 - dev: true - /parse-entities@2.0.0: resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: @@ -12843,17 +12761,6 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pbkdf2@3.1.2: - resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} - engines: {node: '>=0.12'} - dependencies: - create-hash: 1.2.0 - create-hmac: 1.1.7 - ripemd160: 2.0.2 - safe-buffer: 5.2.1 - sha.js: 2.4.11 - dev: true - /pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} dev: false @@ -13024,8 +12931,8 @@ packages: jiti: 1.18.2 klona: 2.0.6 postcss: 8.4.23 - semver: 7.5.0 - webpack: 5.82.0 + semver: 7.5.4 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /postcss-merge-idents@5.1.1(postcss@8.4.23): @@ -13475,17 +13382,6 @@ packages: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /public-encrypt@4.0.3: - resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} - dependencies: - bn.js: 4.12.0 - browserify-rsa: 4.1.0 - create-hash: 1.2.0 - parse-asn1: 5.1.6 - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: @@ -13579,13 +13475,6 @@ packages: dependencies: safe-buffer: 5.2.1 - /randomfill@1.0.4: - resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} - dependencies: - randombytes: 2.1.0 - safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.0: resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} engines: {node: '>= 0.6'} @@ -13679,7 +13568,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) transitivePeerDependencies: - eslint - supports-color @@ -13768,7 +13657,7 @@ packages: dependencies: '@babel/runtime': 7.21.5 react-loadable: /@docusaurus/react-loadable@5.5.2(react@17.0.2) - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /react-router-config@5.1.1(react-router@5.3.4)(react@17.0.2): @@ -13928,7 +13817,6 @@ packages: engines: {node: '>= 0.10'} dependencies: resolve: 1.22.2 - dev: true /recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} @@ -14128,7 +14016,6 @@ packages: engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - dev: true /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} @@ -14137,7 +14024,6 @@ packages: /resolve-from@5.0.0: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - dev: true /resolve-global@1.0.0: resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==} @@ -14219,7 +14105,7 @@ packages: dependencies: hash-base: 3.1.0 inherits: 2.0.4 - dev: true + dev: false /rtl-detect@1.0.4: resolution: {integrity: sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==} @@ -14364,7 +14250,6 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 - dev: true /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} @@ -14460,7 +14345,7 @@ packages: dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 - dev: true + dev: false /sha3@2.1.3: resolution: {integrity: sha512-Io53D4o9qOmf3Ow9p/DoGLQiQHhtuR0ulbyambvRSG+OX5yXExk2yYfvjHtb7AtOyk6K6+sPeK/qaowWc/E/GA==} @@ -14567,7 +14452,6 @@ packages: '@polka/url': 1.0.0-next.21 mrmime: 1.0.1 totalist: 1.1.0 - dev: false /sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -15132,7 +15016,6 @@ packages: serialize-javascript: 6.0.1 terser: 5.17.1 webpack: 5.64.1(webpack-cli@4.9.1) - dev: true /terser-webpack-plugin@5.3.8(webpack@5.82.0): resolution: {integrity: sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==} @@ -15155,7 +15038,7 @@ packages: schema-utils: 3.1.2 serialize-javascript: 6.0.1 terser: 5.17.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) /terser@5.17.1: resolution: {integrity: sha512-hVl35zClmpisy6oaoKALOpS0rDYLxRFLHhRuDlEGTKey9qHjS1w9GMORjuwIMt70Wan4lwsLYyWDVnWgF+KUEw==} @@ -15256,7 +15139,6 @@ packages: /totalist@1.1.0: resolution: {integrity: sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==} engines: {node: '>=6'} - dev: false /tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} @@ -15314,6 +15196,21 @@ packages: webpack: 5.64.1(webpack-cli@4.9.1) dev: true + /ts-loader@9.4.3(typescript@4.9.5)(webpack@5.64.1): + resolution: {integrity: sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.13.0 + micromatch: 4.0.5 + semver: 7.5.4 + typescript: 4.9.5 + webpack: 5.64.1(webpack-cli@4.9.1) + dev: false + /ts-node@10.9.1(@types/node@20.1.0)(typescript@4.9.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true @@ -15666,7 +15563,6 @@ packages: webpack: ^5.36.2 dependencies: webpack: 5.64.1(webpack-cli@4.9.1) - dev: true /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -15716,7 +15612,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.5.0 + semver: 7.5.4 semver-diff: 3.1.1 xdg-basedir: 4.0.0 dev: false @@ -15740,7 +15636,7 @@ packages: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.1.2 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /url-parse-lax@3.0.0: @@ -15948,8 +15844,8 @@ packages: /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - /webpack-bundle-analyzer@4.8.0: - resolution: {integrity: sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==} + /webpack-bundle-analyzer@4.9.0: + resolution: {integrity: sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw==} engines: {node: '>= 10.13.0'} hasBin: true dependencies: @@ -15966,9 +15862,8 @@ packages: transitivePeerDependencies: - bufferutil - utf-8-validate - dev: false - /webpack-cli@4.9.1(webpack@5.64.1): + /webpack-cli@4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1): resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==} engines: {node: '>=10.13.0'} hasBin: true @@ -16000,8 +15895,8 @@ packages: interpret: 2.2.0 rechoir: 0.7.1 webpack: 5.64.1(webpack-cli@4.9.1) + webpack-bundle-analyzer: 4.9.0 webpack-merge: 5.8.0 - dev: true /webpack-dev-middleware@5.3.3(webpack@5.82.0): resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} @@ -16014,7 +15909,7 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.1 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /webpack-dev-server@4.15.0(webpack@5.82.0): @@ -16058,7 +15953,7 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) webpack-dev-middleware: 5.3.3(webpack@5.82.0) ws: 8.13.0 transitivePeerDependencies: @@ -16112,15 +16007,14 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.8(webpack@5.64.1) watchpack: 2.4.0 - webpack-cli: 4.9.1(webpack@5.64.1) + webpack-cli: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /webpack@5.82.0: + /webpack@5.82.0(webpack-cli@4.9.1): resolution: {integrity: sha512-iGNA2fHhnDcV1bONdUu554eZx+XeldsaeQ8T67H6KKHl2nUSwX8Zm7cmzOA46ox/X1ARxf7Bjv8wQ/HsB5fxBg==} engines: {node: '>=10.13.0'} hasBin: true @@ -16153,6 +16047,7 @@ packages: tapable: 2.2.1 terser-webpack-plugin: 5.3.8(webpack@5.82.0) watchpack: 2.4.0 + webpack-cli: 4.9.1(webpack-bundle-analyzer@4.9.0)(webpack@5.64.1) webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' @@ -16169,7 +16064,7 @@ packages: consola: 2.15.3 pretty-time: 1.1.0 std-env: 3.3.3 - webpack: 5.82.0 + webpack: 5.82.0(webpack-cli@4.9.1) dev: false /websocket-driver@0.7.4: @@ -16320,7 +16215,6 @@ packages: optional: true utf-8-validate: optional: true - dev: false /ws@8.13.0: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} diff --git a/typedoc.json b/typedoc.json index 83ba24de0..ba85a9744 100644 --- a/typedoc.json +++ b/typedoc.json @@ -9,7 +9,8 @@ "packages/e2e-test", "packages/testkit", "packages/molecule", - "packages/toolkit" + "packages/toolkit", + "packages/crypto" ], "logLevel": "Verbose", "skipErrorChecking": true, diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 36fc0051e..215d3e59d 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -67,7 +67,6 @@ const config = { return { resolve: { fallback: { - crypto: require.resolve("crypto-browserify"), buffer: require.resolve("buffer/"), path: false, fs: false,