diff --git a/package.json b/package.json
index 6f1b69238a40..b5167d71b2f2 100644
--- a/package.json
+++ b/package.json
@@ -77,8 +77,7 @@
"prettier": "^2.5.0",
"ts-jest": "^27.0.7",
"ts-node": "^10.4.0",
- "typescript": "4.6.0-dev.20211202",
- "webpack": "5.65.0"
+ "typescript": "4.6.0-dev.20211202"
},
"engines": {
"node": ">=16.0.0",
diff --git a/packages/dashboard/.storybook/main.js b/packages/dashboard/.storybook/main.js
index 38d0e79a5b1c..c840e0f404f8 100644
--- a/packages/dashboard/.storybook/main.js
+++ b/packages/dashboard/.storybook/main.js
@@ -16,7 +16,6 @@ module.exports = {
fastRefresh: true,
},
webpackFinal: async (config) => {
- config.experiments = { asyncWebAssembly: true }
config.resolve.fallback = {
crypto: false,
stream: 'stream-browserify',
diff --git a/packages/dashboard/package.json b/packages/dashboard/package.json
index b51b5877efaf..7b273e28dc6a 100644
--- a/packages/dashboard/package.json
+++ b/packages/dashboard/package.json
@@ -62,6 +62,7 @@
"babel-loader": "^8.2.3",
"buffer": "^6.0.3",
"path-browserify": "^1.0.1",
- "stream-browserify": "^3.0.0"
+ "stream-browserify": "^3.0.0",
+ "webpack": "^5.64.4"
}
}
diff --git a/packages/dashboard/src/pages/Labs/constants.ts b/packages/dashboard/src/pages/Labs/constants.ts
index fdd9e875f6f3..84da37b752ee 100644
--- a/packages/dashboard/src/pages/Labs/constants.ts
+++ b/packages/dashboard/src/pages/Labs/constants.ts
@@ -14,7 +14,6 @@ export const PLUGIN_IDS = {
MASK_BOX: 'com.maskbook.box',
POOL_TOGETHER: 'com.pooltogether',
GOOD_GHOSTING: 'co.good_ghosting',
- CRYPTOARTAI: 'com.maskbook.cryptoartai',
}
type TUTORIAL_URLS_OPT = {
diff --git a/packages/dashboard/src/pages/Labs/index.tsx b/packages/dashboard/src/pages/Labs/index.tsx
index 983000e23de8..02f2e989c55c 100644
--- a/packages/dashboard/src/pages/Labs/index.tsx
+++ b/packages/dashboard/src/pages/Labs/index.tsx
@@ -1,4 +1,5 @@
import { useCallback, useEffect, useState } from 'react'
+import { useLocation } from 'react-router-dom'
import { Box } from '@mui/material'
import { makeStyles, MaskColorVar } from '@masknet/theme'
import { PageFrame } from '../../components/PageFrame'
@@ -20,13 +21,10 @@ import {
import { useDashboardI18N } from '../../locales'
import MarketTrendSettingDialog from './components/MarketTrendSettingDialog'
import { useAccount } from '@masknet/web3-shared-evm'
-import { PluginMessages } from '../../API'
+import { Services, PluginMessages } from '../../API'
import { useRemoteControlledDialog } from '@masknet/shared'
-import { Services } from '../../API'
import { PLUGIN_IDS, TUTORIAL_URLS_EN } from './constants'
-import { useLocation } from 'react-router-dom'
import { ContentContainer } from '../../components/ContentContainer'
-import { useLanguage } from '../Settings/api'
import { WalletStateBar } from '../Wallets/components/WalletStateBar'
import { PoolTogetherURL } from '../../assets'
import { DHEDGEIcon } from '../../../../mask/src/resources/DHEDGEIcon'
@@ -69,7 +67,6 @@ export default function Plugins() {
[PLUGIN_IDS.MASK_BOX]: true,
[PLUGIN_IDS.GOOD_GHOSTING]: true,
[PLUGIN_IDS.POOL_TOGETHER]: true,
- [PLUGIN_IDS.CRYPTOARTAI]: true,
})
const plugins = [
@@ -172,17 +169,8 @@ export default function Plugins() {
icon: ,
enabled: pluginStatus[PLUGIN_IDS.POOL_TOGETHER],
},
- {
- id: PLUGIN_IDS.POOL_TOGETHER,
- title: t.labs_cryptoartai(),
- desc: t.labs_cryptoartai_desc(),
- icon: ,
- enabled: pluginStatus[PLUGIN_IDS.CRYPTOARTAI],
- },
]
- const language = useLanguage()
-
const account = useAccount()
const { setDialog: setBuyDialog } = useRemoteControlledDialog(PluginMessages.Transak.buyTokenDialogUpdated)
const openTransakDialog = useCallback(
diff --git a/packages/encryption/package.json b/packages/encryption/package.json
index 4d35d498f2c3..df08dd65a3d5 100644
--- a/packages/encryption/package.json
+++ b/packages/encryption/package.json
@@ -6,6 +6,8 @@
"types": "./dist/index.d.ts",
"dependencies": {
"@masknet/shared-base": "workspace:*",
- "@msgpack/msgpack": "^2.7.0"
+ "@msgpack/msgpack": "^2.7.0",
+ "pvtsutils": "^1.2.0",
+ "tiny-secp256k1": "^2.1.2"
}
}
diff --git a/packages/encryption/src/payload_internal/version-38.encoder.ts b/packages/encryption/src/payload_internal/version-38.encoder.ts
index 8a896aaef9da..a2f211589210 100644
--- a/packages/encryption/src/payload_internal/version-38.encoder.ts
+++ b/packages/encryption/src/payload_internal/version-38.encoder.ts
@@ -1,11 +1,14 @@
import { encodeText, encodeArrayBuffer } from '@dimensiondev/kit'
+import { combine, Convert } from 'pvtsutils'
import { Ok, Option, Result } from 'ts-results'
import type { PayloadWellFormed, Signature } from '..'
import { AESAlgorithmEnum } from '../payload'
import { CryptoException, PayloadException } from '../types'
import { encryptWithAES, exportCryptoKeyToJWK } from '../utils'
import { get_v38PublicSharedCryptoKey } from './shared'
-import { CheckedError, compressSecp256k1Point } from '@masknet/shared-base'
+import * as secp256k1 from 'tiny-secp256k1'
+import { CheckedError } from '@masknet/shared-base'
+const { isPoint, pointCompress } = secp256k1
const enum Index {
authorPublicKey = 5,
@@ -77,9 +80,23 @@ function encodeSignature(sig: Option) {
async function compressSecp256k1Key(key: CryptoKey) {
const jwk = await exportCryptoKeyToJWK(key)
if (jwk.err) return jwk.mapErr((e) => new CheckedError(CryptoException.InvalidCryptoKey, e))
- const arr = Result.wrap(() => compressSecp256k1Point(jwk.val.x!, jwk.val.y!)).mapErr(
- (e) => new CheckedError(CryptoException.InvalidCryptoKey, e),
- )
+ const arr = compressSecp256k1Point(jwk.val.x!, jwk.val.y!)
if (arr.err) return arr
return Ok(encodeArrayBuffer(arr.val.slice()))
}
+
+/**
+ * Compress x & y into a single x
+ */
+function compressSecp256k1Point(x: string, y: string) {
+ return Result.wrap>(() => {
+ const xb = Convert.FromBase64Url(x)
+ const yb = Convert.FromBase64Url(y)
+ const point = new Uint8Array(combine(new Uint8Array([0x04]), xb, yb))
+ if (isPoint(point)) {
+ return pointCompress(point, true)
+ } else {
+ throw new CheckedError(CryptoException.InvalidCryptoKey, 'invalid secp256k1 key')
+ }
+ })
+}
diff --git a/packages/encryption/src/payload_internal/version-38.parser.ts b/packages/encryption/src/payload_internal/version-38.parser.ts
index 39a1730b9f1c..8afbb30fe76e 100644
--- a/packages/encryption/src/payload_internal/version-38.parser.ts
+++ b/packages/encryption/src/payload_internal/version-38.parser.ts
@@ -17,17 +17,12 @@ import {
importAsymmetryKeyFromJsonWebKeyOrSPKI,
JSONParseF,
} from '../utils'
+import { Convert } from 'pvtsutils'
+import { isPoint, isPointCompressed, pointCompress } from 'tiny-secp256k1'
import type { PayloadParserResult } from '.'
import { get_v38PublicSharedCryptoKey } from './shared'
import { encodeText } from '@dimensiondev/kit'
-import {
- andThenAsync,
- CheckedError,
- Identifier,
- OptionalResult,
- ProfileIdentifier,
- decompressSecp256k1Point,
-} from '@masknet/shared-base'
+import { andThenAsync, CheckedError, Identifier, OptionalResult, ProfileIdentifier } from '@masknet/shared-base'
const decodeUint8Array = decodeUint8ArrayF(PayloadException.InvalidPayload, PayloadException.DecodeFailed)
const decodeUint8ArrayCrypto = decodeUint8ArrayF(CryptoException.InvalidCryptoKey, CryptoException.InvalidCryptoKey)
@@ -134,14 +129,10 @@ async function decodePublicSharedAESKey(
async function decodeECDHPublicKey(
compressedPublic: string,
): Promise> {
- const key = decodeUint8ArrayCrypto(compressedPublic).andThen((val) =>
- Result.wrap(() => decompressSecp256k1Point(val)).mapErr(
- (e) => new CheckedError(CryptoException.InvalidCryptoKey, e),
- ),
- )
+ const key = decodeUint8ArrayCrypto(compressedPublic).andThen(decompressK256Point)
if (key.err) return key
- const { x, y } = key.val
+ const [x, y] = key.val
const jwk: JsonWebKey = {
crv: 'K-256',
ext: true,
@@ -157,3 +148,12 @@ async function decodeECDHPublicKey(
key: imported.val,
})
}
+
+function decompressK256Point(point: Uint8Array) {
+ if (!isPoint(point)) return new CheckedError(CryptoException.InvalidCryptoKey, null).toErr()
+ const uncompressed: Uint8Array = isPointCompressed(point) ? pointCompress(point, false) : point
+ const len = (uncompressed.length - 1) / 2
+ const x = uncompressed.slice(1, len + 1)
+ const y = uncompressed.slice(len + 1)
+ return Ok([Convert.ToBase64Url(x), Convert.ToBase64Url(y)] as readonly [x: string, y: string])
+}
diff --git a/packages/mask/.webpack/config.ts b/packages/mask/.webpack/config.ts
index 9602fb8f0472..a89e46c48243 100644
--- a/packages/mask/.webpack/config.ts
+++ b/packages/mask/.webpack/config.ts
@@ -39,7 +39,7 @@ export function createConfiguration(rawFlags: BuildFlags): Configuration {
devtool: sourceMapKind,
target: ['web', 'es2019'],
entry: {},
- experiments: { backCompat: false, asyncWebAssembly: true },
+ experiments: { backCompat: false },
cache: {
type: 'filesystem',
buildDependencies: { config: [__filename] },
diff --git a/packages/mask/package.json b/packages/mask/package.json
index dff57ae3c59b..2adc6f150887 100644
--- a/packages/mask/package.json
+++ b/packages/mask/package.json
@@ -49,6 +49,7 @@
"@types/react-window": "^1.8.4",
"@types/remarkable": "^2.0.3",
"@types/socket.io-client": "^1.4.36",
+ "@types/tiny-secp256k1": "^1.0.0",
"@types/use-subscription": "^1.0.0",
"@types/uuid": "^8.3.3",
"@uniswap/sdk-core": "^3.0.1",
@@ -92,6 +93,7 @@
"opensea-js": "^1.1.11",
"promievent": "^0.1.4",
"protobufjs": "^6.11.2",
+ "pvtsutils": "^1.0.14",
"react-draggable": "^4.4.4",
"react-feather": "^2.0.9",
"react-highlight-words": "^0.17.0",
@@ -108,6 +110,7 @@
"socket.io-client": "2.4.0",
"stream-browserify": "^3.0.0",
"stream-http": "^2.8.3",
+ "tiny-secp256k1": "^1.1.5",
"unstated-next": "^1.1.0",
"urlcat": "^2.0.4",
"use-subscription": "^1.5.1",
@@ -137,6 +140,7 @@
"react-refresh": "^0.11.0",
"source-map-loader": "^3.0.0",
"swc-loader": "^0.1.15",
+ "webpack": "^5.64.4",
"webpack-cli": "^4.9.1",
"webpack-dev-server": "^4.6.0",
"webpack-target-webextension": "^1.0.1"
diff --git a/packages/mask/src/crypto/crypto-alpha-40.ts b/packages/mask/src/crypto/crypto-alpha-40.ts
index f87d76868387..a7f846aa940a 100644
--- a/packages/mask/src/crypto/crypto-alpha-40.ts
+++ b/packages/mask/src/crypto/crypto-alpha-40.ts
@@ -2,7 +2,13 @@
* @deprecated This version of payload is not in use.
* Please goto Crypto alpha v38
*/
-import { encodeText, encodeArrayBuffer, decodeArrayBuffer, decodeText, concatArrayBufferSync } from '@dimensiondev/kit'
+import {
+ encodeText,
+ encodeArrayBuffer,
+ decodeArrayBuffer,
+ decodeText,
+ concatArrayBufferSync as addUint8Array,
+} from '@dimensiondev/kit'
import { memoizePromise } from '../../utils-pure'
import { i18n } from '../../shared-ui/locales_legacy'
import { CryptoWorker } from '../modules/workers'
@@ -37,15 +43,15 @@ async function deriveAESKey(
const derivedKey = await CryptoWorker.aes_to_raw(await derive_AES_GCM_256_Key_From_ECDH_256k1_Keys(pr, op))
const _salt = typeof salt === 'string' ? decodeArrayBuffer(salt) : salt
- const UntitledUint8Array = concatArrayBufferSync(new Uint8Array(derivedKey), _salt)
+ const UntitledUint8Array = addUint8Array(new Uint8Array(derivedKey), _salt)
const password = await crypto.subtle.digest(
'SHA-256',
- concatArrayBufferSync(concatArrayBufferSync(UntitledUint8Array, _salt), decodeArrayBuffer('KEY')),
+ addUint8Array(addUint8Array(UntitledUint8Array, _salt), decodeArrayBuffer('KEY')),
)
const iv_pre = new Uint8Array(
await crypto.subtle.digest(
'SHA-256',
- concatArrayBufferSync(concatArrayBufferSync(UntitledUint8Array, _salt), decodeArrayBuffer('IV')),
+ addUint8Array(addUint8Array(UntitledUint8Array, _salt), decodeArrayBuffer('IV')),
),
)
const iv = new Uint8Array(16)
diff --git a/packages/mask/src/database/Persona/helpers.ts b/packages/mask/src/database/Persona/helpers.ts
index b6a6565ca503..c0fc8e03d6f0 100644
--- a/packages/mask/src/database/Persona/helpers.ts
+++ b/packages/mask/src/database/Persona/helpers.ts
@@ -32,8 +32,8 @@ import {
type EC_Public_JsonWebKey,
type EC_Private_JsonWebKey,
type AESJsonWebKey,
- ECKeyIdentifierFromJsonWebKey,
} from '@masknet/shared-base'
+import { ECKeyIdentifierFromJsonWebKey } from '../type'
export async function profileRecordToProfile(record: ProfileRecord): Promise {
const rec = { ...record }
diff --git a/packages/mask/src/database/type.ts b/packages/mask/src/database/type.ts
new file mode 100644
index 000000000000..439c327c69a1
--- /dev/null
+++ b/packages/mask/src/database/type.ts
@@ -0,0 +1,14 @@
+import { ECKeyIdentifier, type EC_JsonWebKey } from '@masknet/shared-base'
+import { CryptoKeyToJsonWebKey } from '../utils/type-transform/CryptoKey-JsonWebKey'
+import { compressSecp256k1Key } from '../utils/type-transform/SECP256k1-Compression'
+
+export function ECKeyIdentifierFromJsonWebKey(key: EC_JsonWebKey, type: 'public' | 'private' = 'public') {
+ const x = compressSecp256k1Key(key, type)
+ return new ECKeyIdentifier('secp256k1', x)
+}
+/**
+ * @deprecated We're using JWK instead of CryptoKey
+ */
+export async function ECKeyIdentifierFromCryptoKey(key: CryptoKey) {
+ return ECKeyIdentifierFromJsonWebKey(await CryptoKeyToJsonWebKey(key))
+}
diff --git a/packages/mask/src/extension/background-script/CryptoServices/encryptTo.ts b/packages/mask/src/extension/background-script/CryptoServices/encryptTo.ts
index 66a24f822a11..eb921b0615c2 100644
--- a/packages/mask/src/extension/background-script/CryptoServices/encryptTo.ts
+++ b/packages/mask/src/extension/background-script/CryptoServices/encryptTo.ts
@@ -8,14 +8,9 @@ import { prepareRecipientDetail } from './prepareRecipientDetail'
import { getNetworkWorker } from '../../../social-network/worker'
import { createPostDB, PostRecord } from '../../../../background/database/post'
import { queryPersonaByProfileDB } from '../../../../background/database/persona/db'
+import { compressSecp256k1Key } from '../../../utils/type-transform/SECP256k1-Compression'
import { i18n } from '../../../../shared-ui/locales_legacy'
-import {
- isTypedMessageText,
- TypedMessage,
- TypedMessageText,
- PayloadLatest,
- compressSecp256k1Key,
-} from '@masknet/shared-base'
+import { isTypedMessageText, TypedMessage, TypedMessageText, PayloadLatest } from '@masknet/shared-base'
import { encodeTextPayloadWorker } from '../../../social-network/utils/text-payload-worker'
type EncryptedText = string
@@ -77,7 +72,7 @@ export async function encryptTo(
}
try {
const publicKey = (await queryPersonaByProfileDB(whoAmI))?.publicKey
- if (publicKey) payload.authorPublicKey = compressSecp256k1Key(publicKey)
+ if (publicKey) payload.authorPublicKey = compressSecp256k1Key(publicKey, 'public')
} catch {
// ignore
}
diff --git a/packages/mask/src/extension/background-script/CryptoServices/verifyOthersProve.ts b/packages/mask/src/extension/background-script/CryptoServices/verifyOthersProve.ts
index 47745da75604..21faf275de35 100644
--- a/packages/mask/src/extension/background-script/CryptoServices/verifyOthersProve.ts
+++ b/packages/mask/src/extension/background-script/CryptoServices/verifyOthersProve.ts
@@ -1,6 +1,8 @@
-import { type ProfileIdentifier, decompressSecp256k1Key, ECKeyIdentifierFromJsonWebKey } from '@masknet/shared-base'
+import { decompressSecp256k1Key } from '../../../utils/type-transform/SECP256k1-Compression'
+import type { ProfileIdentifier } from '@masknet/shared-base'
import { decodePublicKeyWorker } from '../../../social-network/utils/text-payload-worker'
import { createProfileWithPersona, queryPersonaRecord } from '../../../database'
+import { ECKeyIdentifierFromJsonWebKey } from '../../../database/type'
export async function verifyOthersProve(bio: string | { raw: string }, others: ProfileIdentifier): Promise {
const compressedX = typeof bio === 'string' ? (await decodePublicKeyWorker(others.network))(bio) : [bio.raw]
@@ -8,7 +10,7 @@ export async function verifyOthersProve(bio: string | { raw: string }, others: P
const publicKey = compressedX
.map((x) => {
try {
- return decompressSecp256k1Key(x)
+ return decompressSecp256k1Key(x, 'public')
} catch {
return null
}
diff --git a/packages/mask/src/extension/background-script/IdentityService.ts b/packages/mask/src/extension/background-script/IdentityService.ts
index 4dd516e5d58b..bbcd92e78f9a 100644
--- a/packages/mask/src/extension/background-script/IdentityService.ts
+++ b/packages/mask/src/extension/background-script/IdentityService.ts
@@ -14,19 +14,7 @@ import {
queryProfilesWithQuery,
storeAvatar,
} from '../../database'
-import {
- ECKeyIdentifier,
- Identifier,
- PersonaIdentifier,
- ProfileIdentifier,
- ECKeyIdentifierFromJsonWebKey,
- EC_JsonWebKey,
- EC_Private_JsonWebKey,
- PersonaInformation,
- ProfileInformation,
- PostIVIdentifier,
- RelationFavor,
-} from '@masknet/shared-base'
+import { ECKeyIdentifier, Identifier, PersonaIdentifier, ProfileIdentifier } from '@masknet/shared-base'
import type { Persona, Profile } from '../../database/Persona/types'
import {
attachProfileDB,
@@ -48,14 +36,18 @@ import {
import { BackupJSONFileLatest, UpgradeBackupJSONFile } from '../../utils/type-transform/BackupFormat/JSON/latest'
import { restoreBackup } from './WelcomeServices/restoreBackup'
import { restoreNewIdentityWithMnemonicWord } from './WelcomeService'
-import { convertBackupFileToObject, fixBackupFilePermission } from '../../utils/type-transform/BackupFile'
+import { decompressBackupFile } from '../../utils/type-transform/BackupFileShortRepresentation'
import { assertEnvironment, Environment } from '@dimensiondev/holoflows-kit'
+import type { EC_JsonWebKey, EC_Private_JsonWebKey, PersonaInformation, ProfileInformation } from '@masknet/shared-base'
import { getCurrentPersonaIdentifier } from './SettingsService'
import { MaskMessages } from '../../utils'
+import type { PostIVIdentifier } from '@masknet/shared-base'
+import { RelationFavor } from '@masknet/shared-base'
import { split_ec_k256_keypair_into_pub_priv } from '../../modules/CryptoAlgorithm/helper'
import { first, orderBy } from 'lodash-unified'
import { recover_ECDH_256k1_KeyPair_ByMnemonicWord } from '../../utils/mnemonic-code'
+import { ECKeyIdentifierFromJsonWebKey } from '../../database/type'
assertEnvironment(Environment.ManifestBackground)
@@ -119,7 +111,7 @@ export async function queryPersonaByMnemonic(mnemonic: string, password: '') {
}
const { key } = await recover_ECDH_256k1_KeyPair_ByMnemonicWord(mnemonic, password)
- const identifier = ECKeyIdentifierFromJsonWebKey(key.privateKey)
+ const identifier = ECKeyIdentifierFromJsonWebKey(key.privateKey, 'public')
const persona = await queryPersonaDB(identifier, undefined, true)
if (persona) {
await loginPersona(persona.identifier)
@@ -203,7 +195,7 @@ export async function restoreFromBase64(base64: string): Promise
return restoreFromObject(JSON.parse(decodeText(decodeArrayBuffer(base64))) as BackupJSONFileLatest)
}
export async function restoreFromBackup(backup: string): Promise {
- return restoreFromObject(fixBackupFilePermission(UpgradeBackupJSONFile(convertBackupFileToObject(backup))))
+ return restoreFromObject(UpgradeBackupJSONFile(decompressBackupFile(backup)))
}
//#endregion
@@ -383,7 +375,7 @@ export async function exportPersonaPrivateKey(identifier: PersonaIdentifier) {
export async function queryPersonaByPrivateKey(privateKeyString: string) {
const privateKey = decode(decodeArrayBuffer(privateKeyString)) as EC_JsonWebKey
- const identifier = ECKeyIdentifierFromJsonWebKey(privateKey)
+ const identifier = ECKeyIdentifierFromJsonWebKey(privateKey, 'public')
const persona = await queryPersonaDB(identifier, undefined, true)
if (persona) {
diff --git a/packages/mask/src/extension/background-script/IdentityServices/sign.ts b/packages/mask/src/extension/background-script/IdentityServices/sign.ts
index e0d86701e47b..b87c68c7b556 100644
--- a/packages/mask/src/extension/background-script/IdentityServices/sign.ts
+++ b/packages/mask/src/extension/background-script/IdentityServices/sign.ts
@@ -9,9 +9,10 @@ import {
ECDSASignature,
} from 'ethereumjs-util'
import { MaskMessages } from '../../../utils'
+import { Convert } from 'pvtsutils'
import { stringToBuffer } from 'arweave/web/lib/utils'
import { constructSignRequestURL } from '../../popups'
-import { delay, PersonaIdentifier, fromBase64URL } from '@masknet/shared-base'
+import { delay, PersonaIdentifier } from '@masknet/shared-base'
import { queryPersonasWithPrivateKey } from '../../../../background/database/persona/db'
export interface SignRequest {
/** The message to be signed. */
@@ -68,7 +69,7 @@ export async function signWithPersona({ message, method }: SignRequest): Promise
// will have problem with UTF-8?
const length = message.length
const messageHash = keccakFromString(`\x19Ethereum Signed Message:\n${length}${message}`, 256)
- const privateKey = Buffer.from(fromBase64URL(persona.privateKey.d!))
+ const privateKey = Buffer.from(Convert.FromBase64Url(persona.privateKey.d!))
const signature = ecsign(messageHash, privateKey)
return {
diff --git a/packages/mask/src/extension/background-script/WelcomeService.ts b/packages/mask/src/extension/background-script/WelcomeService.ts
index ff504eb80470..8aae360c5b8d 100644
--- a/packages/mask/src/extension/background-script/WelcomeService.ts
+++ b/packages/mask/src/extension/background-script/WelcomeService.ts
@@ -15,7 +15,7 @@ import {
} from '../../utils/type-transform/BackupFormat/JSON/latest'
import { assertEnvironment, Environment } from '@dimensiondev/holoflows-kit'
-import { convertBackupFileToObject, extraPermissions, fixBackupFilePermission } from '../../utils'
+import { decompressBackupFile, extraPermissions } from '../../utils'
import { v4 as uuid } from 'uuid'
import { getUnconfirmedBackup, restoreBackup, setUnconfirmedBackup } from './WelcomeServices/restoreBackup'
import { openPopupWindow } from './HelperService'
@@ -118,7 +118,7 @@ export async function openOptionsPage(route?: DashboardRoutes, search?: string)
export { createPersonaByMnemonic } from '../../database'
export function parseBackupStr(str: string) {
- const json = fixBackupFilePermission(UpgradeBackupJSONFile(convertBackupFileToObject(str)))
+ const json = UpgradeBackupJSONFile(decompressBackupFile(str))
if (json) {
const info = getBackupPreviewInfo(json)
const id = uuid()
diff --git a/packages/mask/src/extension/options-page/DashboardComponents/CollectibleList/CollectibleCard.tsx b/packages/mask/src/extension/options-page/DashboardComponents/CollectibleList/CollectibleCard.tsx
index f63db136becc..fce271edfd8b 100644
--- a/packages/mask/src/extension/options-page/DashboardComponents/CollectibleList/CollectibleCard.tsx
+++ b/packages/mask/src/extension/options-page/DashboardComponents/CollectibleList/CollectibleCard.tsx
@@ -1,15 +1,9 @@
+import { useAsyncRetry } from 'react-use'
import { Card, CircularProgress, Link } from '@mui/material'
import { makeStyles } from '@masknet/theme'
-import {
- Wallet,
- useChainId,
- ERC721TokenDetailed,
- resolveCollectibleLink,
- NonFungibleAssetProvider,
-} from '@masknet/web3-shared-evm'
+import { Wallet, ERC721TokenDetailed, resolveCollectibleLink, NonFungibleAssetProvider } from '@masknet/web3-shared-evm'
import { MaskSharpIconOfSize } from '../../../../resources/MaskIcon'
import { ActionsBarNFT } from '../ActionsBarNFT'
-import { useAsyncRetry } from 'react-use'
import { Video } from '../../../../components/shared/Video'
import { Image } from '../../../../components/shared/Image'
@@ -51,12 +45,10 @@ export interface CollectibleCardProps {
}
const videoTypeRe = /\.(mp4|mp3|m4v|ogg)$/i
-const videoMimeRe = /^video/
-const htmlMimeRe = /^text/
+
export function CollectibleCard(props: CollectibleCardProps) {
const { wallet, token, provider, readonly } = props
const { classes } = useStyles()
- const chainId = useChainId()
const mediaUrl = token.info.mediaUrl
const { loading, value } = useAsyncRetry(async () => {
@@ -78,7 +70,10 @@ export function CollectibleCard(props: CollectibleCardProps) {
) : (
-
+
{readonly || !wallet ? null : (
diff --git a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useSwapCallback.ts b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useSwapCallback.ts
index 1020e12615d1..62e2f571d1e9 100644
--- a/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useSwapCallback.ts
+++ b/packages/mask/src/plugins/ITO/SNSAdaptor/hooks/useSwapCallback.ts
@@ -21,7 +21,7 @@ import { useCallback } from 'react'
import type { TransactionReceipt } from 'web3-core'
import Web3Utils from 'web3-utils'
import { useI18N } from '../../../../utils'
-import { fromHex, toHex } from '@masknet/shared-base'
+import { HexStringToUint8Array as hex2buf, Uint8ArrayToHexString as buf2hex } from '../../../../../utils-pure'
import { useITO_Contract } from './useITO_Contract'
import { useQualificationContract } from './useQualificationContract'
import type { JSON_PayloadInMask } from '../../types'
@@ -147,7 +147,7 @@ export function useSwapCallback(
const swapParamsV1 = [
pid,
Web3Utils.soliditySha3(
- Web3Utils.hexToNumber(`0x${toHex(fromHex(Web3Utils.sha3(password) ?? '').slice(0, 5))}`),
+ Web3Utils.hexToNumber(`0x${buf2hex(hex2buf(Web3Utils.sha3(password) ?? '').slice(0, 5))}`),
account,
)!,
Web3Utils.sha3(account)!,
@@ -158,7 +158,7 @@ export function useSwapCallback(
const swapParamsV2 = [
pid,
Web3Utils.soliditySha3(
- Web3Utils.hexToNumber(`0x${toHex(fromHex(Web3Utils.sha3(password) ?? '').slice(0, 5))}`),
+ Web3Utils.hexToNumber(`0x${buf2hex(hex2buf(Web3Utils.sha3(password) ?? '').slice(0, 5))}`),
account,
)!,
swapTokenAt,
diff --git a/packages/mask/src/plugins/Wallet/services/legacyWallet.ts b/packages/mask/src/plugins/Wallet/services/legacyWallet.ts
index fc1b1637e4de..d49d30480fb0 100644
--- a/packages/mask/src/plugins/Wallet/services/legacyWallet.ts
+++ b/packages/mask/src/plugins/Wallet/services/legacyWallet.ts
@@ -6,7 +6,7 @@ import { first } from 'lodash-unified'
import { createTransaction } from '../../../../background/database/utils/openDB'
import { createWalletDBAccess } from '../database/Wallet.db'
import type { LegacyWalletRecord } from '../database/types'
-import { fromHex, toHex } from '@masknet/shared-base'
+import { HexStringToUint8Array as hex2buf, Uint8ArrayToHexString as buf2hex } from '../../../../utils-pure'
import { currySameAddress, isSameAddress, ProviderType } from '@masknet/web3-shared-evm'
import { LegacyWalletRecordOutDB } from './helpers'
import { currentAccountSettings, currentProviderSettings } from '../settings'
@@ -92,7 +92,7 @@ async function makePrivateKey(record: LegacyWalletRecord) {
const { privateKey } = record._private_key_
? await recoverWalletFromPrivateKey(record._private_key_)
: await recoverWalletFromMnemonicWords(record.mnemonic, record.passphrase, record.path)
- return `0x${toHex(privateKey)}`
+ return `0x${buf2hex(privateKey)}`
}
export async function freezeLegacyWallet(address: string) {
@@ -125,7 +125,7 @@ async function recoverWalletFromMnemonicWords(
address: EthereumAddress.from(walletPublicKey).address,
privateKey: walletPrivateKey,
privateKeyValid: true,
- privateKeyInHex: `0x${toHex(walletPrivateKey)}`,
+ privateKeyInHex: `0x${buf2hex(walletPrivateKey)}`,
path,
mnemonic,
passphrase,
@@ -138,7 +138,7 @@ async function recoverWalletFromPrivateKey(privateKey: string) {
const key = ec.keyFromPrivate(privateKey_)
return {
address: EthereumAddress.from(key.getPublic(false, 'array') as any).address,
- privateKey: fromHex(privateKey_),
+ privateKey: hex2buf(privateKey_),
privateKeyValid: privateKeyVerify(privateKey_),
privateKeyInHex: privateKey.startsWith('0x') ? privateKey : `0x${privateKey}`,
mnemonic: [],
diff --git a/packages/mask/src/utils/mnemonic-code/index.ts b/packages/mask/src/utils/mnemonic-code/index.ts
index a474bc0e6cf3..f7e33f48d880 100644
--- a/packages/mask/src/utils/mnemonic-code/index.ts
+++ b/packages/mask/src/utils/mnemonic-code/index.ts
@@ -1,14 +1,10 @@
import * as bip39 from 'bip39'
import * as wallet from 'wallet.ts'
+import { decompressSecp256k1Key } from '../type-transform/SECP256k1-Compression'
+import { Convert } from 'pvtsutils'
import { encodeArrayBuffer } from '@dimensiondev/kit'
import type { PersonaRecord } from '../../../background/database/persona/db'
-import {
- EC_Private_JsonWebKey,
- EC_Public_JsonWebKey,
- JsonWebKeyPair,
- toBase64URL,
- decompressSecp256k1Key,
-} from '@masknet/shared-base'
+import type { EC_Private_JsonWebKey, EC_Public_JsonWebKey, JsonWebKeyPair } from '@masknet/shared-base'
import { split_ec_k256_keypair_into_pub_priv } from '../../modules/CryptoAlgorithm/helper'
// Private key at m/44'/coinType'/account'/change/addressIndex
@@ -63,7 +59,7 @@ export async function recover_ECDH_256k1_KeyPair_ByMnemonicWord(
export const validateMnemonic = bip39.validateMnemonic
function HDKeyToJwk(hdk: wallet.HDKey): JsonWebKey {
- const jwk = decompressSecp256k1Key(encodeArrayBuffer(hdk.publicKey))
- jwk.d = hdk.privateKey ? toBase64URL(hdk.privateKey) : undefined
+ const jwk = decompressSecp256k1Key(encodeArrayBuffer(hdk.publicKey), 'public')
+ jwk.d = hdk.privateKey ? Convert.ToBase64Url(hdk.privateKey) : undefined
return jwk
}
diff --git a/packages/mask/src/utils/type-transform/BackupFile.ts b/packages/mask/src/utils/type-transform/BackupFile.ts
deleted file mode 100644
index 0067a9154519..000000000000
--- a/packages/mask/src/utils/type-transform/BackupFile.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import type { BackupJSONFileLatest } from './BackupFormat/JSON/latest'
-
-export function fixBackupFilePermission(backup: BackupJSONFileLatest): BackupJSONFileLatest
-export function fixBackupFilePermission(backup: null | BackupJSONFileLatest): BackupJSONFileLatest | null
-export function fixBackupFilePermission(backup: null | BackupJSONFileLatest): BackupJSONFileLatest | null {
- if (!backup) return null
- return {
- ...backup,
- grantedHostPermissions: backup.grantedHostPermissions.filter((url) => /^(http|)/.test(url)),
- }
-}
-
-export function convertBackupFileToObject(short: string): BackupJSONFileLatest {
- const compressed = JSON.parse(short)
- // TODO: maybe schema validate?
- if (typeof compressed !== 'object') throw new TypeError('Invalid backup')
- return compressed
-}
diff --git a/packages/mask/src/utils/type-transform/BackupFileShortRepresentation.ts b/packages/mask/src/utils/type-transform/BackupFileShortRepresentation.ts
new file mode 100644
index 000000000000..d643f52a9a44
--- /dev/null
+++ b/packages/mask/src/utils/type-transform/BackupFileShortRepresentation.ts
@@ -0,0 +1,130 @@
+import { ECKeyIdentifierFromJsonWebKey } from '../../database/type'
+import { compressSecp256k1Key, decompressSecp256k1Key } from './SECP256k1-Compression'
+import type { BackupJSONFileLatest } from './BackupFormat/JSON/latest'
+import type { ProfileRecord } from '../../../background/database/persona/db'
+import { ProfileIdentifier, type PersonaIdentifier, Identifier, type AESJsonWebKey } from '@masknet/shared-base'
+
+export type BackupJSONFileLatestShort = [
+ string, // version, should be "1"
+ // network and userId may be empty string for unconnected persona!
+ ProfileIdentifier['network'],
+ ProfileIdentifier['userId'],
+ ProfileRecord['nickname'],
+ // LocalKey, this field may be empty!
+ JsonWebKey['k'],
+ // Compressed privateKey
+ // ! We can recover pub from priv on ec, but if you want to support other type
+ // ! Please change this back to pub/priv pattern
+ string,
+ // BackupJSONFileLatest['grantedHostPermissions'].join(';'),
+ string,
+]
+
+export function sanitizeBackupFile(backup: BackupJSONFileLatest): BackupJSONFileLatest {
+ return {
+ ...backup,
+ grantedHostPermissions: backup.grantedHostPermissions.filter((url) => /^(http|)/.test(url)),
+ }
+}
+
+export function compressBackupFile(
+ file: BackupJSONFileLatest,
+ {
+ profileIdentifier,
+ personaIdentifier,
+ }: {
+ profileIdentifier?: ProfileIdentifier
+ personaIdentifier?: PersonaIdentifier
+ } = {},
+): string {
+ const { grantedHostPermissions, profiles, personas } = file
+ const personaIdentifier_ =
+ personaIdentifier?.toText() ?? profiles.find((x) => x.identifier === profileIdentifier?.toText())?.linkedPersona
+ const persona = personas.find((x) => x.identifier === personaIdentifier_)
+ if (!persona || !persona.privateKey) throw new Error('Target persona not found')
+ const linkedProfile = persona.linkedProfiles[0]?.[0]
+ const profileIdentifier_ =
+ profileIdentifier ?? linkedProfile
+ ? Identifier.fromString(linkedProfile, ProfileIdentifier).unwrap()
+ : undefined
+ const { localKey, nickname, privateKey } = persona
+ return (
+ [
+ '1',
+ profileIdentifier_?.network,
+ profileIdentifier_?.userId,
+ nickname,
+ localKey?.k ||
+ profiles.filter((x) => x.identifier === profileIdentifier_?.toText()).filter((x) => x.localKey)[0]
+ ?.localKey?.k ||
+ '',
+ compressSecp256k1Key(privateKey, 'private'),
+ grantedHostPermissions.join(';'),
+ ] as BackupJSONFileLatestShort
+ ).join('🤔')
+}
+export function decompressBackupFile(short: string): BackupJSONFileLatest {
+ let compressed: string
+ try {
+ compressed = JSON.parse(short)
+ if (typeof compressed === 'object') return sanitizeBackupFile(compressed)
+ } catch {
+ if (!short.includes('🤔')) throw new Error('This backup is not a compressed string')
+ compressed = short
+ }
+ const [version, network, userID, nickname, localKey, privateKey, grantedHostPermissions] = compressed.split(
+ '🤔',
+ ) as BackupJSONFileLatestShort
+
+ if (version !== '1') throw new Error(`QR Code cannot be shared between different version of Mask`)
+
+ const localKeyJWK = {
+ alg: 'A256GCM',
+ ext: true,
+ k: localKey,
+ key_ops: ['encrypt', 'decrypt'],
+ kty: 'oct',
+ } as AESJsonWebKey
+ const publicJWK = decompressSecp256k1Key(privateKey, 'public')
+ const privateJWK = decompressSecp256k1Key(privateKey, 'private')
+
+ const profileID = network && userID ? new ProfileIdentifier(network, userID) : undefined
+ const ECID = ECKeyIdentifierFromJsonWebKey(publicJWK)
+ return sanitizeBackupFile({
+ _meta_: {
+ createdAt: 0,
+ maskbookVersion: browser.runtime.getManifest().version,
+ version: 2,
+ type: 'maskbook-backup',
+ },
+ grantedHostPermissions: grantedHostPermissions.split(';').filter(Boolean),
+ posts: [],
+ wallets: [],
+ relations: [],
+ userGroups: [],
+ personas: [
+ {
+ createdAt: 0,
+ updatedAt: 0,
+ privateKey: privateJWK,
+ publicKey: publicJWK,
+ identifier: ECID.toText(),
+ linkedProfiles: profileID ? [[profileID.toText(), { connectionConfirmState: 'confirmed' }]] : [],
+ nickname,
+ localKey: localKeyJWK,
+ },
+ ],
+ profiles: profileID
+ ? [
+ {
+ createdAt: 0,
+ identifier: profileID.toText(),
+ updatedAt: 0,
+ linkedPersona: ECID.toText(),
+ nickname: nickname,
+ localKey: localKeyJWK,
+ },
+ ]
+ : [],
+ })
+}
diff --git a/packages/mask/src/utils/type-transform/BackupFormat/JSON/version-2.ts b/packages/mask/src/utils/type-transform/BackupFormat/JSON/version-2.ts
index 394e5bd124d3..b7917e07d16f 100644
--- a/packages/mask/src/utils/type-transform/BackupFormat/JSON/version-2.ts
+++ b/packages/mask/src/utils/type-transform/BackupFormat/JSON/version-2.ts
@@ -1,6 +1,7 @@
/* eslint-disable import/no-deprecated */
import type { LinkedProfileDetails } from '../../../../../background/database/persona/db'
import type { BackupJSONFileVersion1 } from './version-1'
+import { ECKeyIdentifierFromJsonWebKey } from '../../../../database/type'
import {
type AESJsonWebKey,
type EC_Public_JsonWebKey,
@@ -9,7 +10,7 @@ import {
} from '@masknet/shared-base'
import { twitterBase } from '../../../../social-network-adaptor/twitter.com/base'
import { facebookBase } from '../../../../social-network-adaptor/facebook.com/base'
-import { type RelationFavor, ECKeyIdentifierFromJsonWebKey } from '@masknet/shared-base'
+import type { RelationFavor } from '@masknet/shared-base'
export type RecipientReasonJSON = (
| { type: 'auto-share' }
diff --git a/packages/mask/src/utils/type-transform/SECP256k1-Compression.ts b/packages/mask/src/utils/type-transform/SECP256k1-Compression.ts
new file mode 100644
index 000000000000..0591af8c929b
--- /dev/null
+++ b/packages/mask/src/utils/type-transform/SECP256k1-Compression.ts
@@ -0,0 +1,54 @@
+import secp256k1 from 'tiny-secp256k1'
+import { Convert, combine } from 'pvtsutils'
+import { encodeArrayBuffer, decodeArrayBuffer } from '@dimensiondev/kit'
+import { Buffer } from 'buffer'
+import type { EC_JsonWebKey, EC_Public_JsonWebKey, EC_Private_JsonWebKey } from '@masknet/shared-base'
+/**
+ * Compress x & y into a single x
+ */
+function compressSecp256k1Point(x: string, y: string): Buffer {
+ const xb = Convert.FromBase64Url(x)
+ const yb = Convert.FromBase64Url(y)
+ const point = Buffer.from(combine(new Uint8Array([0x04]), xb, yb))
+ if (secp256k1.isPoint(point)) {
+ return secp256k1.pointCompress(point, true)
+ } else {
+ throw new TypeError('Not a point on secp256k1!')
+ }
+}
+/**
+ * Decompress x into x & y
+ */
+function decompressSecp256k1Point(point: ArrayBuffer): { x: string; y: string } {
+ const p = Buffer.from(point)
+ if (!secp256k1.isPoint(p)) throw new TypeError('Not a point on secp256k1!')
+ const uncompressed = secp256k1.isPointCompressed(p) ? secp256k1.pointCompress(p, false) : p
+ const len = (uncompressed.length - 1) / 2
+ const x = uncompressed.slice(1, len + 1)
+ const y = uncompressed.slice(len + 1)
+ return { x: Convert.ToBase64Url(x), y: Convert.ToBase64Url(y) }
+}
+
+export function compressSecp256k1Key(key: EC_JsonWebKey, type: 'public' | 'private'): string {
+ if (type === 'private' && !key.d) throw new Error('Private key does not contain secret')
+ const arr = compressSecp256k1Point(key.x!, key.y!)
+ return encodeArrayBuffer(arr) + (type === 'private' ? '🙈' + key.d! : '')
+}
+export function decompressSecp256k1Key(compressed: string, type: 'public'): EC_Public_JsonWebKey
+export function decompressSecp256k1Key(compressed: string, type: 'private'): EC_Private_JsonWebKey
+export function decompressSecp256k1Key(compressed: string, type: 'public' | 'private'): EC_JsonWebKey {
+ const [compressedPublic, privateKey] = compressed.split('🙈')
+ if (type === 'private' && privateKey.length < 1) throw new Error('Private key does not contain secret')
+ const arr = decodeArrayBuffer(compressedPublic)
+ const key = decompressSecp256k1Point(arr)
+ const jwk: JsonWebKey = {
+ crv: 'K-256',
+ ext: true,
+ x: key.x,
+ y: key.y,
+ key_ops: ['deriveKey', 'deriveBits'],
+ kty: 'EC',
+ d: type === 'private' ? privateKey : undefined,
+ }
+ return jwk as EC_JsonWebKey
+}
diff --git a/packages/mask/src/utils/type-transform/SECP256k1-ETH.ts b/packages/mask/src/utils/type-transform/SECP256k1-ETH.ts
index d18ea1810fed..91c659b6c737 100644
--- a/packages/mask/src/utils/type-transform/SECP256k1-ETH.ts
+++ b/packages/mask/src/utils/type-transform/SECP256k1-ETH.ts
@@ -1,15 +1,9 @@
+import secp256k1 from 'tiny-secp256k1'
import { ec as EC } from 'elliptic'
import { EthereumAddress } from 'wallet.ts'
-import {
- toBase64URL,
- fromBase64URL,
- EC_Public_JsonWebKey,
- EC_Private_JsonWebKey,
- EC_JsonWebKey,
- isSecp256k1Point,
- isSecp256k1PrivateKey,
-} from '@masknet/shared-base'
-import { concatArrayBufferSync } from '@dimensiondev/kit'
+import { Convert, combine } from 'pvtsutils'
+import { Buffer } from 'buffer'
+import type { EC_Public_JsonWebKey, EC_Private_JsonWebKey, EC_JsonWebKey } from '@masknet/shared-base'
export function keyToJWK(key: string, type: 'public'): EC_Public_JsonWebKey
export function keyToJWK(key: string, type: 'private'): EC_Private_JsonWebKey
@@ -29,23 +23,26 @@ export function keyToJWK(key: string, type: 'public' | 'private'): JsonWebKey {
d: type === 'private' ? base64(privKey.toArray()) : undefined,
}
function base64(nums: number[]) {
- return toBase64URL(new Uint8Array(nums).buffer)
+ return Convert.ToBase64Url(new Uint8Array(nums).buffer)
}
}
export function JWKToKey(jwk: EC_JsonWebKey, type: 'public' | 'private'): string {
const ec = new EC('secp256k1')
if (type === 'public' && jwk.x && jwk.y) {
- const xb = fromBase64URL(jwk.x)
- const yb = fromBase64URL(jwk.y)
- const point = new Uint8Array(concatArrayBufferSync(new Uint8Array([0x04]), xb, yb))
- if (isSecp256k1Point(point)) return `0x${ec.keyFromPublic(point).getPublic(false, 'hex')}`
+ const xb = ab(jwk.x)
+ const yb = ab(jwk.y)
+ const point = Buffer.from(combine(new Uint8Array([0x04]), xb, yb))
+ if (secp256k1.isPoint(point)) return `0x${ec.keyFromPublic(point).getPublic(false, 'hex')}`
}
if (type === 'private' && jwk.d) {
- const db = fromBase64URL(jwk.d)
- if (isSecp256k1PrivateKey(db)) return `0x${ec.keyFromPrivate(db).getPrivate('hex')}`
+ const db = Buffer.from(ab(jwk.d))
+ if (secp256k1.isPrivate(db)) return `0x${ec.keyFromPrivate(db).getPrivate('hex')}`
}
throw new Error('invalid private key')
+ function ab(base64: string) {
+ return Convert.FromBase64Url(base64)
+ }
}
export function keyToAddr(key: string, type: 'public' | 'private'): string {
diff --git a/packages/mask/src/utils/type-transform/index.ts b/packages/mask/src/utils/type-transform/index.ts
index f19d98fa2759..7dc6a744d8c3 100644
--- a/packages/mask/src/utils/type-transform/index.ts
+++ b/packages/mask/src/utils/type-transform/index.ts
@@ -1,6 +1,7 @@
export * from './asyncIteratorHelpers'
-export * from './BackupFile'
+export * from './BackupFileShortRepresentation'
export * from './BackupFormat'
export * from './CryptoKey-JsonWebKey'
export * from './Payload'
+export * from './SECP256k1-Compression'
export * from './SECP256k1-ETH'
diff --git a/packages/mask/utils-pure/convert/index.ts b/packages/mask/utils-pure/convert/index.ts
new file mode 100644
index 000000000000..510746eb4c8d
--- /dev/null
+++ b/packages/mask/utils-pure/convert/index.ts
@@ -0,0 +1,12 @@
+export function Uint8ArrayToHexString(buffer: ArrayBuffer) {
+ return Array.prototype.map.call(new Uint8Array(buffer), (x) => ('00' + x.toString(16)).slice(-2)).join('')
+}
+
+export function HexStringToUint8Array(hex: string) {
+ let hex_ = hex
+ hex_ = hex.replace(/^0x/, '') // strip 0x
+ if (hex_.length % 2) hex_ = `0${hex_}` // pad even zero
+ const buf: number[] = []
+ for (let i = 0; i < hex_.length; i += 2) buf.push(Number.parseInt(hex_.substring(i, i + 2), 16))
+ return new Uint8Array(buf)
+}
diff --git a/packages/mask/utils-pure/crypto/index.ts b/packages/mask/utils-pure/crypto/index.ts
index 832c110720d4..7cf6d80c2a90 100644
--- a/packages/mask/utils-pure/crypto/index.ts
+++ b/packages/mask/utils-pure/crypto/index.ts
@@ -8,7 +8,6 @@ import type {
EC_Private_JsonWebKey,
EC_Public_JsonWebKey,
} from '@masknet/shared-base'
-
export async function CryptoKeyToJsonWebKey(key: EC_Public_CryptoKey): Promise
export async function CryptoKeyToJsonWebKey(key: EC_Private_CryptoKey): Promise
export async function CryptoKeyToJsonWebKey(key: AESCryptoKey): Promise
diff --git a/packages/mask/utils-pure/index.ts b/packages/mask/utils-pure/index.ts
index 68cd8f99c2d1..ccdb08b91043 100644
--- a/packages/mask/utils-pure/index.ts
+++ b/packages/mask/utils-pure/index.ts
@@ -1,3 +1,4 @@
+export * from './convert'
export * from './type'
export * from './assertion'
export * from './memoize'
diff --git a/packages/shared-base/package.json b/packages/shared-base/package.json
index 953373e52b9c..8b31e5e48d85 100644
--- a/packages/shared-base/package.json
+++ b/packages/shared-base/package.json
@@ -18,9 +18,7 @@
"bignumber.js": "^9.0.1",
"immer": "^9.0.7",
"lodash-es": "^4.17.21",
- "pvtsutils": "^1.2.1",
"react": "../empty",
- "tiny-secp256k1": "^2.1.2",
"typeson": "^6.1.0",
"typeson-registry": "^1.0.0-alpha.38",
"use-subscription": "^1.5.1"
diff --git a/packages/shared-base/src/convert/index.ts b/packages/shared-base/src/convert/index.ts
deleted file mode 100644
index 9fad970b0ffd..000000000000
--- a/packages/shared-base/src/convert/index.ts
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Convert } from 'pvtsutils'
-
-export function fromBase64URL(x: string) {
- return new Uint8Array(Convert.FromBase64Url(x))
-}
-export function toBase64URL(x: BufferSource) {
- return Convert.ToBase64Url(x)
-}
-export function toHex(x: BufferSource) {
- return Convert.ToHex(x)
-}
-export function fromHex(x: string) {
- if (x.startsWith('0x')) x = x.slice(2)
- return new Uint8Array(Convert.FromHex(x))
-}
diff --git a/packages/shared-base/src/crypto/index.ts b/packages/shared-base/src/crypto/index.ts
deleted file mode 100644
index f4a5f8d3ba7c..000000000000
--- a/packages/shared-base/src/crypto/index.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export * from './CryptoType'
-export * from './JWKType'
-export * from './secp256k1'
diff --git a/packages/shared-base/src/crypto/secp256k1.ts b/packages/shared-base/src/crypto/secp256k1.ts
deleted file mode 100644
index 47423faae372..000000000000
--- a/packages/shared-base/src/crypto/secp256k1.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import * as secp256k1 from 'tiny-secp256k1'
-import { encodeArrayBuffer, decodeArrayBuffer, concatArrayBufferSync } from '@dimensiondev/kit'
-import type { EC_JsonWebKey, EC_Public_JsonWebKey } from './JWKType'
-import { fromBase64URL, toBase64URL } from '../convert'
-import { ECKeyIdentifier } from '../Identifier/type'
-import type { EC_CryptoKey } from '.'
-
-/**
- * Compress x & y into a single x
- */
-export function compressSecp256k1Point(x: string, y: string): Uint8Array {
- const xb = fromBase64URL(x)
- const yb = fromBase64URL(y)
- const point = new Uint8Array(concatArrayBufferSync(new Uint8Array([0x04]), xb, yb))
- if (secp256k1.isPoint(point)) {
- return secp256k1.pointCompress(point, true)
- } else {
- throw new TypeError('Not a point on secp256k1!')
- }
-}
-/**
- * Decompress x into x & y
- */
-export function decompressSecp256k1Point(point: Uint8Array): { x: string; y: string } {
- if (!secp256k1.isPoint(point)) throw new TypeError('Not a point on secp256k1!')
- const uncompressed = secp256k1.isPointCompressed(point) ? secp256k1.pointCompress(point, false) : point
- const len = (uncompressed.length - 1) / 2
- const x = uncompressed.slice(1, len + 1)
- const y = uncompressed.slice(len + 1)
- return { x: toBase64URL(x), y: toBase64URL(y) }
-}
-
-export function compressSecp256k1Key(key: EC_JsonWebKey): string {
- const arr = compressSecp256k1Point(key.x!, key.y!)
- return encodeArrayBuffer(arr)
-}
-export function decompressSecp256k1Key(compressedPublic: string): EC_Public_JsonWebKey {
- const arr = decodeArrayBuffer(compressedPublic)
- const key = decompressSecp256k1Point(new Uint8Array(arr))
- const jwk: JsonWebKey = {
- crv: 'K-256',
- ext: true,
- x: key.x,
- y: key.y,
- key_ops: ['deriveKey', 'deriveBits'],
- kty: 'EC',
- }
- return jwk as EC_Public_JsonWebKey
-}
-
-export function isSecp256k1Point(x: Uint8Array) {
- return secp256k1.isPoint(x)
-}
-
-export function isSecp256k1PrivateKey(d: Uint8Array) {
- return secp256k1.isPrivate(d)
-}
-
-export function ECKeyIdentifierFromJsonWebKey(key: EC_JsonWebKey) {
- const x = compressSecp256k1Key(key)
- return new ECKeyIdentifier('secp256k1', x)
-}
-
-export async function ECKeyIdentifierFromCryptoKey(key: EC_CryptoKey) {
- const k = (await crypto.subtle.exportKey('jwk', key)) as EC_JsonWebKey
- return ECKeyIdentifierFromJsonWebKey(k)
-}
diff --git a/packages/shared-base/src/index.ts b/packages/shared-base/src/index.ts
index 347dfe9de26b..83c3497d8de3 100644
--- a/packages/shared-base/src/index.ts
+++ b/packages/shared-base/src/index.ts
@@ -7,7 +7,8 @@ export * from './i18n'
export * from './TypedMessage'
export * from './utils'
export * from './kv-storage'
-export * from './crypto'
+export * from './crypto/CryptoType'
+export * from './crypto/JWKType'
export * from './Persona/type'
export * from './Post/type'
export * from './Persona/type'
@@ -15,4 +16,3 @@ export { PopupRoutes } from './Routes/PopupRoutes'
export { DashboardRoutes } from './Routes/DashboardRoutes'
export * from './Messages/Mask'
export * from './Results'
-export * from './convert'
diff --git a/packages/theme/.storybook/main.cjs b/packages/theme/.storybook/main.cjs
index 2d744209ac2c..99d5b45214de 100644
--- a/packages/theme/.storybook/main.cjs
+++ b/packages/theme/.storybook/main.cjs
@@ -15,7 +15,6 @@ module.exports = {
fastRefresh: true,
},
webpackFinal: async (config) => {
- config.experiments = { asyncWebAssembly: true }
config.module.rules.push({
test: /\.m?js$/,
type: 'javascript/auto',
diff --git a/packages/theme/package.json b/packages/theme/package.json
index ba65f6f1b8a3..0db307e6cb8d 100644
--- a/packages/theme/package.json
+++ b/packages/theme/package.json
@@ -43,6 +43,7 @@
"@storybook/builder-webpack5": "^6.4.9",
"@storybook/manager-webpack5": "^6.4.9",
"@storybook/react": "^6.4.9",
- "babel-loader": "^8.2.3"
+ "babel-loader": "^8.2.3",
+ "webpack": "^5.64.4"
}
}
diff --git a/patches/webpack+5.65.0.patch b/patches/webpack+5.65.0.patch
deleted file mode 100644
index 2c183ddbb9da..000000000000
--- a/patches/webpack+5.65.0.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-# generated by patch-package 6.5.0 on 2021-12-15 10:34:26
-#
-# command:
-# npx patch-package webpack
-#
-# declared package:
-# webpack: 5.65.0
-#
-diff --git a/node_modules/webpack/lib/async-modules/AwaitDependenciesInitFragment.js b/node_modules/webpack/lib/async-modules/AwaitDependenciesInitFragment.js
-index ec7974d..ad0f543 100644
---- a/node_modules/webpack/lib/async-modules/AwaitDependenciesInitFragment.js
-+++ b/node_modules/webpack/lib/async-modules/AwaitDependenciesInitFragment.js
-@@ -50,7 +50,7 @@ class AwaitDependenciesInitFragment extends InitFragment {
- if (promises.size === 1) {
- for (const p of promises) {
- return Template.asString([
-- `var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${p}]);`,
-+ `var ${p}, __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${p}]);`,
- `${p} = (__webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__)[0];`,
- ""
- ]);
-@@ -59,7 +59,7 @@ class AwaitDependenciesInitFragment extends InitFragment {
- const sepPromises = Array.from(promises).join(", ");
- // TODO check if destructuring is supported
- return Template.asString([
-- `var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${sepPromises}]);`,
-+ `var ${sepPromises}, __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${sepPromises}]);`,
- `([${sepPromises}] = __webpack_async_dependencies__.then ? await __webpack_async_dependencies__ : __webpack_async_dependencies__);`,
- ""
- ]);
-diff --git a/node_modules/webpack/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js b/node_modules/webpack/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js
-index 90364d0..4599e95 100644
---- a/node_modules/webpack/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js
-+++ b/node_modules/webpack/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js
-@@ -161,7 +161,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
- const source = new RawSource(
- promises.length > 0
- ? Template.asString([
-- `var __webpack_instantiate__ = ${runtimeTemplate.basicFunction(
-+ `var ${promises.join(", ")}, __webpack_instantiate__ = ${runtimeTemplate.basicFunction(
- `[${promises.join(", ")}]`,
- `${importsCompatCode}return ${instantiateCall};`
- )}`,
-@@ -171,7 +171,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
- "__webpack_handle_async_dependencies__",
- [
- importsCode,
-- `var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${promises.join(
-+ `var ${promises.join(", ")}, __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${promises.join(
- ", "
- )}]);`,
- "return __webpack_async_dependencies__.then ? __webpack_async_dependencies__.then(__webpack_instantiate__) : __webpack_instantiate__(__webpack_async_dependencies__);"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 93fdb91640ef..7f4c3110badf 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -61,7 +61,6 @@ importers:
typescript: 4.6.0-dev.20211202
web3-core: 1.5.2
web3-core-method: 1.5.2
- webpack: 5.65.0
dependencies:
'@dimensiondev/kit': 0.0.0-20211118134922-42648c0_903ac568566cb9483e6a82070d95c042
'@emotion/cache': 11.6.0
@@ -117,7 +116,6 @@ importers:
ts-jest: 27.0.7_b2c58650c6f25cbfcbffe6700ea42d1a
ts-node: 10.4.0_typescript@4.6.0-dev.20211202
typescript: 4.6.0-dev.20211202
- webpack: 5.65.0
packages/backup-format:
specifiers:
@@ -178,6 +176,7 @@ importers:
wallet.ts: ^1.0.1
web3-core-helpers: 1.5.2
web3-utils: ^1.5.3
+ webpack: ^5.64.4
zod: ^3.11.6
dependencies:
'@dimensiondev/holoflows-kit': 0.9.0-20210902104757-7c3d0d0
@@ -224,15 +223,16 @@ importers:
devDependencies:
'@babel/core': 7.16.0
'@storybook/addon-actions': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
- '@storybook/addon-essentials': 6.4.9_afd9df8826c4a2d1477ed0decd132221
+ '@storybook/addon-essentials': 6.4.9_912b43caff9bfd829e368c43d0770ca1
'@storybook/addon-links': 6.4.9_757a802188413a36d4f24237d13b8e90
'@storybook/builder-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
'@storybook/manager-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
'@storybook/react': 6.4.9_b3b0e4ec79ecd1161d9324158ad5d26d
- babel-loader: 8.2.3_8dd2b11efd9b7265f9b7da54f0e73ab1
+ babel-loader: 8.2.3_d888b76bb52891dbb46d1b9f7384ff34
buffer: 6.0.3
path-browserify: 1.0.1
stream-browserify: 3.0.0
+ webpack: 5.64.4
packages/empty:
specifiers: {}
@@ -241,9 +241,13 @@ importers:
specifiers:
'@masknet/shared-base': workspace:*
'@msgpack/msgpack': ^2.7.0
+ pvtsutils: ^1.2.0
+ tiny-secp256k1: ^2.1.2
dependencies:
'@masknet/shared-base': link:../shared-base
'@msgpack/msgpack': 2.7.1
+ pvtsutils: 1.2.1
+ tiny-secp256k1: 2.1.2
packages/external-plugin-previewer:
specifiers:
@@ -323,6 +327,7 @@ importers:
'@types/react-window': ^1.8.4
'@types/remarkable': ^2.0.3
'@types/socket.io-client': ^1.4.36
+ '@types/tiny-secp256k1': ^1.0.0
'@types/use-subscription': ^1.0.0
'@types/uuid': ^8.3.3
'@types/webpack-dev-server': ^4.5.0
@@ -371,6 +376,7 @@ importers:
opensea-js: ^1.1.11
promievent: ^0.1.4
protobufjs: ^6.11.2
+ pvtsutils: ^1.0.14
react-devtools-core: ^4.21.0
react-draggable: ^4.4.4
react-feather: ^2.0.9
@@ -391,6 +397,7 @@ importers:
stream-browserify: ^3.0.0
stream-http: ^2.8.3
swc-loader: ^0.1.15
+ tiny-secp256k1: ^1.1.5
unstated-next: ^1.1.0
urlcat: ^2.0.4
use-subscription: ^1.5.1
@@ -403,6 +410,7 @@ importers:
web3-eth-contract: 1.5.2
web3-utils: 1.5.2
webextension-polyfill: ^0.8.0
+ webpack: ^5.64.4
webpack-cli: ^4.9.1
webpack-dev-server: ^4.6.0
webpack-target-webextension: ^1.0.1
@@ -454,6 +462,7 @@ importers:
'@types/react-window': 1.8.5
'@types/remarkable': 2.0.3
'@types/socket.io-client': 1.4.36
+ '@types/tiny-secp256k1': 1.0.0
'@types/use-subscription': 1.0.0
'@types/uuid': 8.3.3
'@uniswap/sdk-core': 3.0.1
@@ -497,6 +506,7 @@ importers:
opensea-js: 1.1.11
promievent: 0.1.5
protobufjs: 6.11.2
+ pvtsutils: 1.1.7
react-draggable: 4.4.4_757a802188413a36d4f24237d13b8e90
react-feather: 2.0.9_react@18.0.0-rc.0
react-highlight-words: 0.17.0_react@18.0.0-rc.0
@@ -513,6 +523,7 @@ importers:
socket.io-client: 2.4.0
stream-browserify: 3.0.0
stream-http: 2.8.3
+ tiny-secp256k1: 1.1.6
unstated-next: 1.1.0
urlcat: 2.0.4
use-subscription: 1.5.1_react@18.0.0-rc.0
@@ -529,21 +540,22 @@ importers:
zod: 3.11.6
devDependencies:
'@dimensiondev/webextension-shim': 0.0.3-20210823035705-4257e12_typescript@4.6.0-dev.20211202
- '@nice-labs/emit-file-webpack-plugin': 1.1.2_webpack@5.65.0
- '@pmmmwh/react-refresh-webpack-plugin': 0.5.2_8e59b3f0e87318c463eedd29023ab4ad
+ '@nice-labs/emit-file-webpack-plugin': 1.1.2_webpack@5.64.4
+ '@pmmmwh/react-refresh-webpack-plugin': 0.5.2_e7696c31560350b53940c3b92a64e90e
'@swc/core': 1.2.112
'@types/webpack-dev-server': 4.5.0_93fbbb02a3bda170b039a49a61f47e0a
'@typescript-eslint/eslint-plugin': 5.4.0_53c7d699d271d8da5cf62c4ca51f6b9e
'@typescript-eslint/parser': 5.4.0_50ca58de175a3bed05c547bae00c50b3
- copy-webpack-plugin: 10.0.0_webpack@5.65.0
- html-webpack-plugin: 5.5.0_webpack@5.65.0
+ copy-webpack-plugin: 10.0.0_webpack@5.64.4
+ html-webpack-plugin: 5.5.0_webpack@5.64.4
react-devtools-core: 4.21.0
react-refresh: 0.11.0
- source-map-loader: 3.0.0_webpack@5.65.0
- swc-loader: 0.1.15_@swc+core@1.2.112+webpack@5.65.0
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
- webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.65.0
- webpack-target-webextension: 1.0.1_webpack@5.65.0
+ source-map-loader: 3.0.0_webpack@5.64.4
+ swc-loader: 0.1.15_@swc+core@1.2.112+webpack@5.64.4
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
+ webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.64.4
+ webpack-target-webextension: 1.0.1_webpack@5.64.4
packages/mask-sdk:
specifiers:
@@ -749,9 +761,7 @@ importers:
bignumber.js: ^9.0.1
immer: ^9.0.7
lodash-es: ^4.17.21
- pvtsutils: ^1.2.1
react: ../empty
- tiny-secp256k1: ^2.1.2
typeson: ^6.1.0
typeson-registry: ^1.0.0-alpha.38
use-subscription: ^1.5.1
@@ -769,9 +779,7 @@ importers:
bignumber.js: 9.0.1
immer: 9.0.7
lodash-es: 4.17.21
- pvtsutils: 1.2.1
react: link:../empty
- tiny-secp256k1: 2.1.2
typeson: 6.1.0
typeson-registry: 1.0.0-alpha.39
use-subscription: 1.5.1_react@18.0.0-rc.0
@@ -810,6 +818,7 @@ importers:
tss-react: ^2.1.1
unstated-next: ^1.1.0
use-subscription: ^1.5.1
+ webpack: ^5.64.4
dependencies:
'@masknet/icons': link:../icons
'@masknet/storybook-shared': link:../storybook-shared
@@ -827,12 +836,13 @@ importers:
devDependencies:
'@babel/core': 7.16.0
'@storybook/addon-actions': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
- '@storybook/addon-essentials': 6.4.9_afd9df8826c4a2d1477ed0decd132221
+ '@storybook/addon-essentials': 6.4.9_912b43caff9bfd829e368c43d0770ca1
'@storybook/addon-links': 6.4.9_757a802188413a36d4f24237d13b8e90
'@storybook/builder-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
'@storybook/manager-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
'@storybook/react': 6.4.9_b3b0e4ec79ecd1161d9324158ad5d26d
- babel-loader: 8.2.3_8dd2b11efd9b7265f9b7da54f0e73ab1
+ babel-loader: 8.2.3_d888b76bb52891dbb46d1b9f7384ff34
+ webpack: 5.64.4
packages/web3-constants:
specifiers: {}
@@ -4079,7 +4089,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
jest-message-util: 27.3.1
jest-util: 27.3.1
@@ -4100,7 +4110,7 @@ packages:
'@jest/test-result': 27.3.1
'@jest/transform': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
ansi-escapes: 4.3.2
chalk: 4.1.2
emittery: 0.8.1
@@ -4137,7 +4147,7 @@ packages:
dependencies:
'@jest/fake-timers': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
jest-mock: 27.3.0
dev: true
@@ -4147,7 +4157,7 @@ packages:
dependencies:
'@jest/types': 27.2.5
'@sinonjs/fake-timers': 8.0.1
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
jest-message-util: 27.3.1
jest-mock: 27.3.0
jest-util: 27.3.1
@@ -4176,7 +4186,7 @@ packages:
'@jest/test-result': 27.3.1
'@jest/transform': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
collect-v8-coverage: 1.0.1
exit: 0.1.2
@@ -4294,7 +4304,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.3
'@types/istanbul-reports': 3.0.1
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
'@types/yargs': 16.0.4
chalk: 4.1.2
dev: true
@@ -4642,13 +4652,13 @@ packages:
resolution: {integrity: sha512-jDJTpta+P4p1NZTFVLHJ/TLFVYVcOqv6l8xwOeBKNPMgY/zDYH/YH7SJbvrr/h1RcS9GzbPcLKGzpuK9cV56UA==}
dev: true
- /@nice-labs/emit-file-webpack-plugin/1.1.2_webpack@5.65.0:
+ /@nice-labs/emit-file-webpack-plugin/1.1.2_webpack@5.64.4:
resolution: {integrity: sha512-sa5df1UnX/Gej9C/jvLAF2u0rxZ5A0oPlwRHh3Y7Qdf+laHssT6AtAntsxKwRbEEZ1KZr9m90K5LTA7j59LtEw==}
engines: {node: '>= 12'}
peerDependencies:
webpack: '>= 5'
dependencies:
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
/@nice-labs/git-rev/3.5.0:
@@ -4806,7 +4816,7 @@ packages:
randombytes: 2.1.0
dev: false
- /@pmmmwh/react-refresh-webpack-plugin/0.5.2_8e59b3f0e87318c463eedd29023ab4ad:
+ /@pmmmwh/react-refresh-webpack-plugin/0.5.2_e7696c31560350b53940c3b92a64e90e:
resolution: {integrity: sha512-BWOG6opI9+L5HjQIj6znFLwVXkjDS98PKfRDlbPFvinTz4wQ7ZSXxV0lLOfRW12HXcqk4DEzrphjRMJFXuihNg==}
engines: {node: '>= 10.13'}
peerDependencies:
@@ -4842,8 +4852,8 @@ packages:
react-refresh: 0.11.0
schema-utils: 3.1.1
source-map: 0.7.3
- webpack: 5.65.0
- webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.64.4
dev: true
/@pmmmwh/react-refresh-webpack-plugin/0.5.3_40197ac6d9ae665387b5bc70002c2da9:
@@ -5153,7 +5163,7 @@ packages:
- webpack-command
dev: true
- /@storybook/addon-docs/6.4.9_afd698850d2d5c6c0cc397f84e2dfd0a:
+ /@storybook/addon-docs/6.4.9_d4c491b35386671e59d33258b349a562:
resolution: {integrity: sha512-sJvnbp6Z+e7B1+vDE8gZVhCg1eNotIa7bx9LYd1Y2QwJ4PEv9hE2YxnzmWt3NZJGtrn4gdGaMCk7pmksugHi7g==}
peerDependencies:
'@storybook/angular': 6.4.9
@@ -5214,7 +5224,7 @@ packages:
'@storybook/builder-webpack4': 6.4.9_2307e25715604594707d4f7b1e69ebcd
'@storybook/client-logger': 6.4.9
'@storybook/components': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
- '@storybook/core': 6.4.9_89e9964e2c42436aae8c7cf07e91cb15
+ '@storybook/core': 6.4.9_2609309ece4ec1d4d050f9747fae6848
'@storybook/core-events': 6.4.9
'@storybook/csf': 0.0.2--canary.87bc651.0
'@storybook/csf-tools': 6.4.9
@@ -5249,7 +5259,7 @@ packages:
remark-slug: 6.1.0
ts-dedent: 2.2.0
util-deprecate: 1.0.2
- webpack: 5.65.0
+ webpack: 5.64.4
transitivePeerDependencies:
- '@storybook/builder-webpack5'
- '@storybook/manager-webpack5'
@@ -5264,7 +5274,7 @@ packages:
- webpack-command
dev: true
- /@storybook/addon-essentials/6.4.9_afd9df8826c4a2d1477ed0decd132221:
+ /@storybook/addon-essentials/6.4.9_912b43caff9bfd829e368c43d0770ca1:
resolution: {integrity: sha512-3YOtGJsmS7A4aIaclnEqTgO+fUEX63pHq2CvqIKPGLVPgLmn6MnEhkkV2j30MfAkoe3oynLqFBvkCdYwzwJxNQ==}
peerDependencies:
'@babel/core': ^7.9.6
@@ -5293,7 +5303,7 @@ packages:
'@storybook/addon-actions': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
'@storybook/addon-backgrounds': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
'@storybook/addon-controls': 6.4.9_f34427d7dbc706e5de14aabe8c678add
- '@storybook/addon-docs': 6.4.9_afd698850d2d5c6c0cc397f84e2dfd0a
+ '@storybook/addon-docs': 6.4.9_d4c491b35386671e59d33258b349a562
'@storybook/addon-measure': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
'@storybook/addon-outline': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
'@storybook/addon-toolbars': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
@@ -5301,13 +5311,13 @@ packages:
'@storybook/addons': 6.4.9_757a802188413a36d4f24237d13b8e90
'@storybook/api': 6.4.9_757a802188413a36d4f24237d13b8e90
'@storybook/node-logger': 6.4.9
- babel-loader: 8.2.3_8dd2b11efd9b7265f9b7da54f0e73ab1
+ babel-loader: 8.2.3_d888b76bb52891dbb46d1b9f7384ff34
core-js: 3.19.3
react: 18.0.0-rc.0
react-dom: 18.0.0-rc.0_react@18.0.0-rc.0
regenerator-runtime: 0.13.9
ts-dedent: 2.2.0
- webpack: 5.65.0
+ webpack: 5.64.4
transitivePeerDependencies:
- '@storybook/angular'
- '@storybook/builder-webpack5'
@@ -5919,6 +5929,45 @@ packages:
- '@types/react'
dev: true
+ /@storybook/core-client/6.4.9_9d5715f587493b93934801754da3185f:
+ resolution: {integrity: sha512-LZSpTtvBlpcn+Ifh0jQXlm/8wva2zZ2v13yxYIxX6tAwQvmB54U0N4VdGVmtkiszEp7TQUAzA8Pcyp4GWE+UMA==}
+ peerDependencies:
+ react: ^16.8.0 || ^17.0.0
+ react-dom: ^16.8.0 || ^17.0.0
+ typescript: '*'
+ webpack: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@storybook/addons': 6.4.9_757a802188413a36d4f24237d13b8e90
+ '@storybook/channel-postmessage': 6.4.9
+ '@storybook/channel-websocket': 6.4.9
+ '@storybook/client-api': 6.4.9_757a802188413a36d4f24237d13b8e90
+ '@storybook/client-logger': 6.4.9
+ '@storybook/core-events': 6.4.9
+ '@storybook/csf': 0.0.2--canary.87bc651.0
+ '@storybook/preview-web': 6.4.9_757a802188413a36d4f24237d13b8e90
+ '@storybook/store': 6.4.9_757a802188413a36d4f24237d13b8e90
+ '@storybook/ui': 6.4.9_7ce4a32944558e8f076f30caab2f5a44
+ airbnb-js-shims: 2.2.1
+ ansi-to-html: 0.6.15
+ core-js: 3.19.3
+ global: 4.4.0
+ lodash: 4.17.21
+ qs: 6.10.2
+ react: 18.0.0-rc.0
+ react-dom: 18.0.0-rc.0_react@18.0.0-rc.0
+ regenerator-runtime: 0.13.9
+ ts-dedent: 2.2.0
+ typescript: 4.6.0-dev.20211202
+ unfetch: 4.2.0
+ util-deprecate: 1.0.2
+ webpack: 5.64.4
+ transitivePeerDependencies:
+ - '@types/react'
+ dev: true
+
/@storybook/core-client/6.4.9_d5ff8c61916f982659a39d4f350620cd:
resolution: {integrity: sha512-LZSpTtvBlpcn+Ifh0jQXlm/8wva2zZ2v13yxYIxX6tAwQvmB54U0N4VdGVmtkiszEp7TQUAzA8Pcyp4GWE+UMA==}
peerDependencies:
@@ -6257,7 +6306,7 @@ packages:
- webpack-command
dev: true
- /@storybook/core/6.4.9_81a8a21f1e6a8cead0c51780960f149f:
+ /@storybook/core/6.4.9_2609309ece4ec1d4d050f9747fae6848:
resolution: {integrity: sha512-Mzhiy13loMSd3PCygK3t7HIT3X3L35iZmbe6+2xVbVmc/3ypCmq4PQALCUoDOGk37Ifrhop6bo6sl4s9YQ6UFw==}
peerDependencies:
'@storybook/builder-webpack5': 6.4.9
@@ -6271,12 +6320,13 @@ packages:
typescript:
optional: true
dependencies:
- '@storybook/core-client': 6.4.9_4a3c9ea574ac0b932e10866721e9f661
- '@storybook/core-server': 6.4.9_f34427d7dbc706e5de14aabe8c678add
+ '@storybook/builder-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
+ '@storybook/core-client': 6.4.9_9d5715f587493b93934801754da3185f
+ '@storybook/core-server': 6.4.9_9fdaaf12e5af1c0610a85f6a0bc97de8
react: 18.0.0-rc.0
react-dom: 18.0.0-rc.0_react@18.0.0-rc.0
typescript: 4.6.0-dev.20211202
- webpack: 4.46.0
+ webpack: 5.64.4
transitivePeerDependencies:
- '@storybook/manager-webpack5'
- '@types/react'
@@ -6290,7 +6340,7 @@ packages:
- webpack-command
dev: true
- /@storybook/core/6.4.9_89e9964e2c42436aae8c7cf07e91cb15:
+ /@storybook/core/6.4.9_81a8a21f1e6a8cead0c51780960f149f:
resolution: {integrity: sha512-Mzhiy13loMSd3PCygK3t7HIT3X3L35iZmbe6+2xVbVmc/3ypCmq4PQALCUoDOGk37Ifrhop6bo6sl4s9YQ6UFw==}
peerDependencies:
'@storybook/builder-webpack5': 6.4.9
@@ -6304,13 +6354,12 @@ packages:
typescript:
optional: true
dependencies:
- '@storybook/builder-webpack5': 6.4.9_f34427d7dbc706e5de14aabe8c678add
- '@storybook/core-client': 6.4.9_d5ff8c61916f982659a39d4f350620cd
- '@storybook/core-server': 6.4.9_9fdaaf12e5af1c0610a85f6a0bc97de8
+ '@storybook/core-client': 6.4.9_4a3c9ea574ac0b932e10866721e9f661
+ '@storybook/core-server': 6.4.9_f34427d7dbc706e5de14aabe8c678add
react: 18.0.0-rc.0
react-dom: 18.0.0-rc.0_react@18.0.0-rc.0
typescript: 4.6.0-dev.20211202
- webpack: 5.65.0
+ webpack: 4.46.0
transitivePeerDependencies:
- '@storybook/manager-webpack5'
- '@types/react'
@@ -7106,7 +7155,7 @@ packages:
resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
dependencies:
'@types/connect': 3.4.35
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
dev: true
/@types/bonjour/3.5.9:
@@ -7146,7 +7195,7 @@ packages:
/@types/connect/3.4.35:
resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
dev: true
/@types/d3-array/1.2.9:
@@ -7382,7 +7431,7 @@ packages:
/@types/express-serve-static-core/4.17.25:
resolution: {integrity: sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: true
@@ -7473,7 +7522,7 @@ packages:
/@types/http-proxy/1.17.7:
resolution: {integrity: sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
dev: true
/@types/is-function/1.0.1:
@@ -7587,7 +7636,7 @@ packages:
/@types/pbkdf2/3.1.0:
resolution: {integrity: sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
/@types/prettier/2.3.2:
resolution: {integrity: sha512-eI5Yrz3Qv4KPUa/nSIAi0h+qX0XyewOliug5F2QAtuRg6Kjg6jfmxe1GIwoIRhZspD1A0RP8ANrPwvEXXtRFog==}
@@ -7752,7 +7801,7 @@ packages:
/@types/secp256k1/4.0.3:
resolution: {integrity: sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.10
/@types/serve-index/1.9.1:
resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==}
@@ -7783,6 +7832,12 @@ packages:
resolution: {integrity: sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==}
dev: true
+ /@types/tiny-secp256k1/1.0.0:
+ resolution: {integrity: sha512-IW3dFGNyVkVLC1MCMogVWQaKH/ZtjPQdOW9c3X128o5lVpFYNsq/l3Qo1pV7sfTmvDzWEXR3QTxg1TMy1pyaAQ==}
+ dependencies:
+ '@types/node': 16.11.10
+ dev: false
+
/@types/tinycolor2/1.4.3:
resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==}
dev: false
@@ -8393,14 +8448,14 @@ packages:
'@xtuc/long': 4.2.2
dev: true
- /@webpack-cli/configtest/1.1.0_webpack-cli@4.9.1+webpack@5.65.0:
+ /@webpack-cli/configtest/1.1.0_webpack-cli@4.9.1+webpack@5.64.4:
resolution: {integrity: sha512-ttOkEkoalEHa7RaFYpM0ErK1xc4twg3Am9hfHhL7MVqlHebnkYd2wuI/ZqTDj0cVzZho6PdinY0phFZV3O0Mzg==}
peerDependencies:
webpack: 4.x.x || 5.x.x
webpack-cli: 4.x.x
dependencies:
- webpack: 5.65.0
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
dev: true
/@webpack-cli/info/1.4.0_webpack-cli@4.9.1:
@@ -8409,7 +8464,7 @@ packages:
webpack-cli: 4.x.x
dependencies:
envinfo: 7.8.1
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
dev: true
/@webpack-cli/serve/1.6.0_69695c7c9cf22b2285138f704ba481b9:
@@ -8421,8 +8476,8 @@ packages:
webpack-dev-server:
optional: true
dependencies:
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
- webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.65.0
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
+ webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.64.4
dev: true
/@xobotyi/scrollbar-width/1.9.5:
@@ -8576,7 +8631,7 @@ packages:
resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
engines: {node: '>= 6.0.0'}
dependencies:
- debug: 4.3.3
+ debug: 4.3.2
transitivePeerDependencies:
- supports-color
@@ -9412,6 +9467,21 @@ packages:
webpack: 5.65.0
dev: true
+ /babel-loader/8.2.3_d888b76bb52891dbb46d1b9f7384ff34:
+ resolution: {integrity: sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==}
+ engines: {node: '>= 8.9'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ webpack: '>=2'
+ dependencies:
+ '@babel/core': 7.16.0
+ find-cache-dir: 3.3.2
+ loader-utils: 1.4.0
+ make-dir: 3.1.0
+ schema-utils: 2.7.1
+ webpack: 5.64.4
+ dev: true
+
/babel-messages/6.23.0:
resolution: {integrity: sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=}
dependencies:
@@ -10073,7 +10143,6 @@ packages:
requiresBuild: true
dependencies:
file-uri-to-path: 1.0.0
- optional: true
/bintrees/1.0.2:
resolution: {integrity: sha1-SfiW1uhYpKSZ34XDj7OZua/4QPg=}
@@ -10283,8 +10352,8 @@ packages:
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001286
- electron-to-chromium: 1.4.16
+ caniuse-lite: 1.0.30001283
+ electron-to-chromium: 1.4.3
escalade: 3.1.1
node-releases: 2.0.1
picocolors: 1.0.0
@@ -10540,6 +10609,9 @@ packages:
engines: {node: '>=10'}
dev: true
+ /caniuse-lite/1.0.30001283:
+ resolution: {integrity: sha512-9RoKo841j1GQFSJz/nCXOj0sD7tHBtlowjYlrqIUS812x9/emfBLBt6IyMz1zIaYc/eRL8Cs6HPUVi2Hzq4sIg==}
+
/caniuse-lite/1.0.30001286:
resolution: {integrity: sha512-zaEMRH6xg8ESMi2eQ3R4eZ5qw/hJiVsO/HlLwniIwErij0JDr9P+8V4dtx1l+kLq6j3yy8l8W4fst1lBnat5wQ==}
@@ -11191,7 +11263,7 @@ packages:
dependencies:
toggle-selection: 1.0.6
- /copy-webpack-plugin/10.0.0_webpack@5.65.0:
+ /copy-webpack-plugin/10.0.0_webpack@5.64.4:
resolution: {integrity: sha512-tuCVuFMBbRsb7IH0q1CUb50/Skv+7a6c7DJ+xi4fAbOzNLTYVMUTPnf8uGvKPtmqTvzYBrfEFo7YgP4TsUWmtg==}
engines: {node: '>= 12.20.0'}
peerDependencies:
@@ -11203,7 +11275,7 @@ packages:
normalize-path: 3.0.0
schema-utils: 4.0.0
serialize-javascript: 6.0.0
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
/core-js-builder/3.19.1:
@@ -11943,6 +12015,7 @@ packages:
optional: true
dependencies:
ms: 2.1.2
+ dev: true
/decamelize-keys/1.1.0:
resolution: {integrity: sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=}
@@ -12392,6 +12465,9 @@ packages:
/electron-to-chromium/1.4.16:
resolution: {integrity: sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==}
+ /electron-to-chromium/1.4.3:
+ resolution: {integrity: sha512-hfpppjYhqIZB8jrNb0rNceQRkSnBN7QJl3W26O1jUv3F3BkQknqy1YTqVXkFnIcFtBc3Qnv5M7r5Lez2iOLgZA==}
+
/element-resize-detector/1.2.3:
resolution: {integrity: sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ==}
dependencies:
@@ -13819,7 +13895,6 @@ packages:
/file-uri-to-path/1.0.0:
resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
requiresBuild: true
- optional: true
/filesize/6.1.0:
resolution: {integrity: sha512-LpCHtPQ3sFx67z+uh2HnSyWSLLu5Jxo21795uRDuar/EOuYWXib5EmPaGIBuSnRqH2IODiKA2k5re/K9OnN/Yg==}
@@ -15161,6 +15236,20 @@ packages:
webpack: 4.46.0
dev: true
+ /html-webpack-plugin/5.5.0_webpack@5.64.4:
+ resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ webpack: ^5.20.0
+ dependencies:
+ '@types/html-minifier-terser': 6.0.0
+ html-minifier-terser: 6.0.2
+ lodash: 4.17.21
+ pretty-error: 4.0.0
+ tapable: 2.2.1
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ dev: true
+
/html-webpack-plugin/5.5.0_webpack@5.65.0:
resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==}
engines: {node: '>=10.13.0'}
@@ -15246,7 +15335,7 @@ packages:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.3.3
+ debug: 4.3.2
transitivePeerDependencies:
- supports-color
dev: false
@@ -15292,7 +15381,7 @@ packages:
engines: {node: '>= 6'}
dependencies:
agent-base: 6.0.2
- debug: 4.3.3
+ debug: 4.3.2
transitivePeerDependencies:
- supports-color
@@ -16144,7 +16233,7 @@ packages:
'@jest/environment': 27.3.1
'@jest/test-result': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
co: 4.6.0
dedent: 0.7.0
@@ -16267,7 +16356,7 @@ packages:
'@jest/environment': 27.3.1
'@jest/fake-timers': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
jest-mock: 27.3.0
jest-util: 27.3.1
jsdom: 16.7.0
@@ -16285,7 +16374,7 @@ packages:
'@jest/environment': 27.3.1
'@jest/fake-timers': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
jest-mock: 27.3.0
jest-util: 27.3.1
dev: true
@@ -16322,7 +16411,7 @@ packages:
dependencies:
'@jest/types': 27.2.5
'@types/graceful-fs': 4.1.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
anymatch: 3.1.2
fb-watchman: 2.0.1
graceful-fs: 4.2.8
@@ -16345,7 +16434,7 @@ packages:
'@jest/source-map': 27.0.6
'@jest/test-result': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
co: 4.6.0
expect: 27.3.1
@@ -16400,7 +16489,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
dev: true
/jest-pnp-resolver/1.2.2_jest-resolve@27.3.1:
@@ -16461,7 +16550,7 @@ packages:
'@jest/test-result': 27.3.1
'@jest/transform': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
emittery: 0.8.1
exit: 0.1.2
@@ -16476,7 +16565,7 @@ packages:
jest-runtime: 27.3.1
jest-util: 27.3.1
jest-worker: 27.3.1
- source-map-support: 0.5.21
+ source-map-support: 0.5.20
throat: 6.0.1
transitivePeerDependencies:
- bufferutil
@@ -16531,7 +16620,7 @@ packages:
resolution: {integrity: sha512-PtGdVK9EGC7dsaziskfqaAPib6wTViY3G8E5wz9tLVPhHyiDNTZn/xjZ4khAw+09QkoOVpn7vF5nPSN6dtBexA==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
graceful-fs: 4.2.8
dev: true
@@ -16584,7 +16673,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
chalk: 4.1.2
ci-info: 3.2.0
graceful-fs: 4.2.8
@@ -16609,7 +16698,7 @@ packages:
dependencies:
'@jest/test-result': 27.3.1
'@jest/types': 27.2.5
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
ansi-escapes: 4.3.2
chalk: 4.1.2
jest-util: 27.3.1
@@ -16629,7 +16718,7 @@ packages:
resolution: {integrity: sha512-ks3WCzsiZaOPJl/oMsDjaf0TRiSv7ctNgs0FqRr2nARsovz6AWWy4oLElwcquGSz692DzgZQrCLScPNs5YlC4g==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 16.11.12
+ '@types/node': 16.11.6
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@@ -18030,6 +18119,10 @@ packages:
thenify-all: 1.6.0
dev: true
+ /nan/2.14.2:
+ resolution: {integrity: sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==}
+ dev: false
+
/nan/2.15.0:
resolution: {integrity: sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==}
requiresBuild: true
@@ -21227,7 +21320,7 @@ packages:
engines: {node: '>=0.10.0'}
dev: true
- /source-map-loader/3.0.0_webpack@5.65.0:
+ /source-map-loader/3.0.0_webpack@5.64.4:
resolution: {integrity: sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw==}
engines: {node: '>= 12.13.0'}
peerDependencies:
@@ -21236,7 +21329,7 @@ packages:
abab: 2.0.5
iconv-lite: 0.6.3
source-map-js: 0.6.2
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
/source-map-resolve/0.5.3:
@@ -21327,7 +21420,7 @@ packages:
/spdy-transport/3.0.0:
resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==}
dependencies:
- debug: 4.3.3
+ debug: 4.3.2
detect-node: 2.1.0
hpack.js: 2.1.6
obuf: 1.1.2
@@ -21807,7 +21900,7 @@ packages:
xhr-request: 1.1.0
dev: false
- /swc-loader/0.1.15_@swc+core@1.2.112+webpack@5.65.0:
+ /swc-loader/0.1.15_@swc+core@1.2.112+webpack@5.64.4:
resolution: {integrity: sha512-cn1WPIeQJvXM4bbo3OwdEIapsQ4uUGOfyFj0h2+2+brT0k76DCGnZXDE2KmcqTd2JSQ+b61z2NPMib7eEwMYYw==}
peerDependencies:
'@swc/core': ^1.2.52
@@ -21815,7 +21908,7 @@ packages:
dependencies:
'@swc/core': 1.2.112
loader-utils: 2.0.0
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
/symbol-tree/3.2.4:
@@ -22011,6 +22104,32 @@ packages:
- acorn
dev: true
+ /terser-webpack-plugin/5.2.5_acorn@8.6.0+webpack@5.64.4:
+ resolution: {integrity: sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+ dependencies:
+ jest-worker: 27.3.1
+ schema-utils: 3.1.1
+ serialize-javascript: 6.0.0
+ source-map: 0.6.1
+ terser: 5.10.0_acorn@8.6.0
+ webpack: 5.64.4
+ transitivePeerDependencies:
+ - acorn
+ dev: true
+
/terser-webpack-plugin/5.2.5_acorn@8.6.0+webpack@5.65.0:
resolution: {integrity: sha512-3luOVHku5l0QBeYS8r4CdHYWEGMmIj3H1U64jgkdZzECcSOJAyJ9TjuqcQZvw1Y+4AOBN9SeYJPJmFn2cM4/2g==}
engines: {node: '>= 10.13.0'}
@@ -22137,7 +22256,7 @@ packages:
dependencies:
commander: 2.20.3
source-map: 0.7.3
- source-map-support: 0.5.21
+ source-map-support: 0.5.20
dev: true
/test-exclude/6.0.0:
@@ -22253,6 +22372,18 @@ packages:
resolution: {integrity: sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==}
dev: false
+ /tiny-secp256k1/1.1.6:
+ resolution: {integrity: sha512-FmqJZGduTyvsr2cF3375fqGHUovSwDi/QytexX1Se4BPuPZpTE5Ftp5fg+EFSuEf3lhZqgCRjEG3ydUQ/aNiwA==}
+ engines: {node: '>=6.0.0'}
+ requiresBuild: true
+ dependencies:
+ bindings: 1.5.0
+ bn.js: 4.12.0
+ create-hmac: 1.1.7
+ elliptic: 6.5.4
+ nan: 2.14.2
+ dev: false
+
/tiny-secp256k1/2.1.2:
resolution: {integrity: sha512-8qPw7zDK6Hco2tVGYGQeOmOPp/hZnREwy2iIkcq0ygAuqc9WHo29vKN94lNymh1QbB3nthtAMF6KTIrdbsIotA==}
engines: {node: '>=14.0.0'}
@@ -22534,7 +22665,7 @@ packages:
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
- source-map-support: 0.5.21
+ source-map-support: 0.5.20
typescript: 4.5.2
yn: 3.1.1
dev: true
@@ -23831,7 +23962,7 @@ packages:
engines: {node: '>=12'}
dev: false
- /webpack-cli/4.9.1_311ee83d262c84b540260d22b1747cb3:
+ /webpack-cli/4.9.1_1007153fc50135f3f883eec27a3e61a8:
resolution: {integrity: sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==}
engines: {node: '>=10.13.0'}
hasBin: true
@@ -23852,7 +23983,7 @@ packages:
optional: true
dependencies:
'@discoveryjs/json-ext': 0.5.5
- '@webpack-cli/configtest': 1.1.0_webpack-cli@4.9.1+webpack@5.65.0
+ '@webpack-cli/configtest': 1.1.0_webpack-cli@4.9.1+webpack@5.64.4
'@webpack-cli/info': 1.4.0_webpack-cli@4.9.1
'@webpack-cli/serve': 1.6.0_69695c7c9cf22b2285138f704ba481b9
colorette: 2.0.16
@@ -23862,8 +23993,8 @@ packages:
import-local: 3.0.3
interpret: 2.2.0
rechoir: 0.7.1
- webpack: 5.65.0
- webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ webpack-dev-server: 4.6.0_webpack-cli@4.9.1+webpack@5.64.4
webpack-merge: 5.8.0
dev: true
@@ -23896,7 +24027,7 @@ packages:
webpack: 5.65.0
dev: true
- /webpack-dev-middleware/5.2.2_webpack@5.65.0:
+ /webpack-dev-middleware/5.2.2_webpack@5.64.4:
resolution: {integrity: sha512-DjZyYrsHhkikAFNvSNKrpnziXukU1EChFAh9j4LAm6ndPLPW8cN0KhM7T+RAiOqsQ6ABfQ8hoKIs9IWMTjov+w==}
engines: {node: '>= 12.13.0'}
peerDependencies:
@@ -23907,10 +24038,10 @@ packages:
mime-types: 2.1.34
range-parser: 1.2.1
schema-utils: 4.0.0
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
- /webpack-dev-server/4.6.0_webpack-cli@4.9.1+webpack@5.65.0:
+ /webpack-dev-server/4.6.0_webpack-cli@4.9.1+webpack@5.64.4:
resolution: {integrity: sha512-oojcBIKvx3Ya7qs1/AVWHDgmP1Xml8rGsEBnSobxU/UJSX1xP1GPM3MwsAnDzvqcVmVki8tV7lbcsjEjk0PtYg==}
engines: {node: '>= 12.13.0'}
hasBin: true
@@ -23944,9 +24075,9 @@ packages:
spdy: 4.0.2
strip-ansi: 7.0.1
url: 0.11.0
- webpack: 5.65.0
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
- webpack-dev-middleware: 5.2.2_webpack@5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
+ webpack-dev-middleware: 5.2.2_webpack@5.64.4
ws: 8.3.0
transitivePeerDependencies:
- bufferutil
@@ -24000,13 +24131,13 @@ packages:
engines: {node: '>=10.13.0'}
dev: true
- /webpack-target-webextension/1.0.1_webpack@5.65.0:
+ /webpack-target-webextension/1.0.1_webpack@5.64.4:
resolution: {integrity: sha512-S2wnCYD74gHVn7DgHuGeZMcRZhAWKg3uDkuPch3YsnDyhhSyM4zHlVWYd0nx6y6XrdpQimrtQMJmYtLJxmTY9w==}
engines: {node: '>=14.17.6'}
peerDependencies:
webpack: ^5.0.0
dependencies:
- webpack: 5.65.0
+ webpack: 5.64.4_93fbbb02a3bda170b039a49a61f47e0a
dev: true
/webpack-virtual-modules/0.2.2:
@@ -24086,6 +24217,46 @@ packages:
webpack-sources: 1.4.3
dev: true
+ /webpack/5.64.4:
+ resolution: {integrity: sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+ dependencies:
+ '@types/eslint-scope': 3.7.1
+ '@types/estree': 0.0.50
+ '@webassemblyjs/ast': 1.11.1
+ '@webassemblyjs/wasm-edit': 1.11.1
+ '@webassemblyjs/wasm-parser': 1.11.1
+ acorn: 8.6.0
+ acorn-import-assertions: 1.8.0_acorn@8.6.0
+ browserslist: 4.18.1
+ chrome-trace-event: 1.0.3
+ enhanced-resolve: 5.8.3
+ es-module-lexer: 0.9.3
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.8
+ json-parse-better-errors: 1.0.2
+ loader-runner: 4.2.0
+ mime-types: 2.1.34
+ neo-async: 2.6.2
+ schema-utils: 3.1.1
+ tapable: 2.2.1
+ terser-webpack-plugin: 5.2.5_acorn@8.6.0+webpack@5.64.4
+ watchpack: 2.3.0
+ webpack-sources: 3.2.2
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+ dev: true
+
/webpack/5.64.4_93fbbb02a3bda170b039a49a61f47e0a:
resolution: {integrity: sha512-LWhqfKjCLoYJLKJY8wk2C3h77i8VyHowG3qYNZiIqD6D0ZS40439S/KVuc/PY48jp2yQmy0mhMknq8cys4jFMw==}
engines: {node: '>=10.13.0'}
@@ -24119,7 +24290,7 @@ packages:
tapable: 2.2.1
terser-webpack-plugin: 5.2.5_30e1ca02d5697180a7a3162c0e819dbf
watchpack: 2.3.0
- webpack-cli: 4.9.1_311ee83d262c84b540260d22b1747cb3
+ webpack-cli: 4.9.1_1007153fc50135f3f883eec27a3e61a8
webpack-sources: 3.2.2
transitivePeerDependencies:
- '@swc/core'