diff --git a/.env.sample b/.env.sample index 1782786..54acacd 100644 --- a/.env.sample +++ b/.env.sample @@ -1,4 +1,5 @@ VITE_APP_ENV=YOUR_APP_ENV ( local, dev, staging, prod ) VITE_APP_DYNAMIC_ENV_ID=YOUR_DYNAMIC_ENV_ID VITE_APP_BACKEND_URL=http://localhost:3000 -VITE_DEV_MODE="localhost" \ No newline at end of file +VITE_DEV_MODE="localhost" +VITE_APP_RPC_URL=YOUR_RPC_URL \ No newline at end of file diff --git a/package.json b/package.json index 0e57b53..aba1747 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,7 @@ "@fortawesome/react-fontawesome": "^0.2.2", "@metamask/sdk": "^0.32.0", "@noble/hashes": "^1.0.0", - "@pushchain/devnet": "^1.0.14", - "@pushprotocol/push-chain": "0.1.7", + "@pushchain/devnet": "1.0.16", "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-switch": "^1.1.0", diff --git a/src/config/config-dev.ts b/src/config/config-dev.ts index 6e356f8..4e9b478 100644 --- a/src/config/config-dev.ts +++ b/src/config/config-dev.ts @@ -1,10 +1,12 @@ +import { ENV } from "@pushchain/devnet/src/lib/constants"; + export const config = { /** * APP INFO */ APP_NAME: "Push Devnet Wallet", NODE_ENV: "dev", - APP_ENV: "dev", + APP_ENV: ENV.DEVNET, /** * CHAIN INFO */ diff --git a/src/config/config-local.ts b/src/config/config-local.ts index f351001..1ce03b8 100644 --- a/src/config/config-local.ts +++ b/src/config/config-local.ts @@ -1,10 +1,12 @@ +import { ENV } from "@pushchain/devnet/src/lib/constants"; + export const config = { /** * APP INFO */ APP_NAME: 'Push Local Wallet', NODE_ENV: 'local', - APP_ENV: 'local', + APP_ENV: ENV.LOCAL, /** * CHAIN INFO */ diff --git a/src/config/config-prod.ts b/src/config/config-prod.ts index 24705ce..a04ef24 100644 --- a/src/config/config-prod.ts +++ b/src/config/config-prod.ts @@ -1,10 +1,12 @@ +import { ENV } from "@pushchain/devnet/src/lib/constants"; + export const config = { /** * APP INFO */ APP_NAME: 'Push Wallet', NODE_ENV: 'prod', - APP_ENV: 'prod', + APP_ENV: ENV.MAINNET, /** * CHAIN INFO diff --git a/src/config/config-staging.ts b/src/config/config-staging.ts index 851658e..f1134f6 100644 --- a/src/config/config-staging.ts +++ b/src/config/config-staging.ts @@ -1,10 +1,12 @@ +import { ENV } from "@pushchain/devnet/src/lib/constants"; + export const config = { /** * APP INFO */ APP_NAME: 'Push Testnet Wallet', NODE_ENV: 'staging', - APP_ENV: 'staging', + APP_ENV: ENV.TESTNET, /** * CHAIN INFO diff --git a/src/config/config.types.ts b/src/config/config.types.ts index 5bdfaac..71728d9 100644 --- a/src/config/config.types.ts +++ b/src/config/config.types.ts @@ -1,8 +1,10 @@ +import { ENV } from "@pushchain/devnet/src/lib/constants" + export interface Config { // App-specific Configuration APP_NAME: string NODE_ENV: string - APP_ENV: string + APP_ENV: ENV // Chain Information ALLOWED_NETWORKS: number[] diff --git a/src/modules/wallet/Wallet.tsx b/src/modules/wallet/Wallet.tsx index 203f076..f6f6b8a 100644 --- a/src/modules/wallet/Wallet.tsx +++ b/src/modules/wallet/Wallet.tsx @@ -165,7 +165,6 @@ const Wallet: FC = () => { // Only single or no share is found directly ask user if they want to create a new wallet or go back const hasAnyShare = share1 || share2 || share3; - console.log("Has any share >>", hasAnyShare); if (hasAnyShare) { setShowReconstructionErrorModal(true); diff --git a/src/modules/wallet/components/WalletActivityList.tsx b/src/modules/wallet/components/WalletActivityList.tsx index bffbd80..c440ac0 100644 --- a/src/modules/wallet/components/WalletActivityList.tsx +++ b/src/modules/wallet/components/WalletActivityList.tsx @@ -1,11 +1,11 @@ import { FC, useCallback, useEffect, useRef, useState } from "react"; import { Box, Text, Spinner } from "../../../blocks"; -import { Tx as PushTx } from "@pushprotocol/push-chain"; -import config from "../../../config"; -import { ENV } from "../../../constants"; -import { BlockType } from "@pushprotocol/push-chain/src/lib/block/block.types"; import { WalletActivityListItem } from "./WalletActivityListItem"; +import { PushChain } from "@pushchain/devnet"; +import { ORDER } from '@pushchain/devnet/src/lib/constants' +import { BlockType } from "@pushchain/devnet/src/lib/block/block.types"; +import config from "../../../config"; export type WalletActivityListProps = { address: string; @@ -24,14 +24,19 @@ const WalletActivityList: FC = ({ address }) => { if (isLoading) return; setIsLoading(true); try { - const pushTx = await PushTx.initialize(config.APP_ENV as ENV); - const response = await pushTx.get( - Math.floor(Date.now()), - "DESC", - 20, - pageNumber, - address || null - ); + const pushChain = await PushChain.initialize(null, { + network: config.APP_ENV, + rpcUrl: import.meta.env.VITE_APP_RPC_URL, + }); + + const universalAccount = PushChain.utils.account.toUniversal(address) + + const response = await pushChain.tx.get(universalAccount, { + startTime: Math.floor(Date.now()), + order: ORDER.DESC, + page: pageNumber, + limit: 20, + }) const transactions = response.blocks .map((tx) => tx.transactions) @@ -86,7 +91,7 @@ const WalletActivityList: FC = ({ address }) => { > {activities.map((transaction, index) => ( diff --git a/src/modules/wallet/components/WalletActivityListItem.tsx b/src/modules/wallet/components/WalletActivityListItem.tsx index eda4926..6e43f8e 100644 --- a/src/modules/wallet/components/WalletActivityListItem.tsx +++ b/src/modules/wallet/components/WalletActivityListItem.tsx @@ -2,8 +2,15 @@ import { Box, DefaultChainMonotone, ExternalLinkIcon, InternalLink, PushMonotone import { css } from 'styled-components'; import { convertCaipToObject, formatWalletCategory, getFixedTime } from '../Wallet.utils'; import { centerMaskWalletAddress, CHAIN_LOGO } from '../../../common'; +import { TxResponse } from '@pushchain/devnet/src/lib/tx/tx.types'; +import { FC } from 'react'; -const WalletActivityListItem = ({ +type WalletActivityListItemProps = { + transaction: TxResponse + address: string +} + +const WalletActivityListItem: FC = ({ transaction, address }) => { @@ -20,18 +27,18 @@ const WalletActivityListItem = ({ } } - function fetchChainFromAddress(transaction) { + function fetchChainFromAddress(transaction: TxResponse) { let displayAddress = ''; let additionalRecipients = 0; - if (address === transaction.sender) { + if (address === transaction.from) { // Address is the sender - const recipients = transaction.recipients.recipients; - displayAddress = recipients[0]?.address; // Show first recipient + const recipients = transaction.recipients; + displayAddress = recipients[0]; // Show first recipient additionalRecipients = recipients.length - 1; // Count additional recipients - } else if (transaction.recipients.recipients.some(recipient => recipient.address === address)) { + } else if (transaction.recipients.some(recipient => recipient === address)) { // Address is in recipients - displayAddress = transaction.sender; // Show sender address + displayAddress = transaction.from; // Show sender address } @@ -95,19 +102,19 @@ const WalletActivityListItem = ({ width="32px" height="32px" > - {address === transaction.sender ? : transaction.recipients.recipients.some(recipient => recipient.address === address) && } + {address === transaction.from ? : transaction.recipients.some(recipient => recipient === address) && } - {address === transaction.sender ? 'Send' : transaction.recipients.recipients.some(recipient => recipient.address === address) ? 'Receive' : null} + {address === transaction.from ? 'Send' : transaction.recipients.some(recipient => recipient === address) ? 'Receive' : null} {fetchChainFromAddress(transaction)} {formatWalletCategory(transaction.category)} - {getFixedTime(transaction.ts)} + {getFixedTime(transaction.timestamp)} diff --git a/src/queries/hooks/index.ts b/src/queries/hooks/index.ts deleted file mode 100644 index ff58fb3..0000000 --- a/src/queries/hooks/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './useGetUserTransactions'; \ No newline at end of file diff --git a/src/queries/hooks/useGetUserTransactions.ts b/src/queries/hooks/useGetUserTransactions.ts deleted file mode 100644 index 7c24a6c..0000000 --- a/src/queries/hooks/useGetUserTransactions.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { userTransactions } from "../queryKeys"; -import { getUserTransactions } from "../services"; -import { useQuery } from "@tanstack/react-query"; -import { Tx as PushTx } from "@pushprotocol/push-chain"; -import config from "../../config"; -import { ENV } from "../../constants"; - -export const useGetUserTransactions = async ( - address: string, - page: number, - limit: number, - direction: "ASC" | "DESC", - startTime: number -) => { - const pushTx = await PushTx.initialize(config.APP_ENV as ENV); - console.debug(pushTx, "selectedWallet"); - const query = useQuery({ - queryKey: [userTransactions, address, pushTx], - queryFn: () => - getUserTransactions({ - address, - page, - limit, - startTime, - direction, - pushTx, - }), - enabled: !!address && !!pushTx, // This is required to avoid extra func calls - }); - return query; -}; diff --git a/src/queries/index.ts b/src/queries/index.ts deleted file mode 100644 index 9ee505d..0000000 --- a/src/queries/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from './queryKeys'; -export * from './hooks'; -export * from './models'; diff --git a/src/queries/models/getUserTransactionsModelCreator.ts b/src/queries/models/getUserTransactionsModelCreator.ts deleted file mode 100644 index 41baa4a..0000000 --- a/src/queries/models/getUserTransactionsModelCreator.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { BlockResponse } from '@pushprotocol/push-chain/src/lib/block/block.types'; - - -//add type -//any remodelling needed in the response can be done here -export const getUserTransactionsModelCreator = (response: BlockResponse): any => - response; diff --git a/src/queries/models/index.ts b/src/queries/models/index.ts deleted file mode 100644 index 9742cdc..0000000 --- a/src/queries/models/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './getUserTransactionsModelCreator'; \ No newline at end of file diff --git a/src/queries/queryKeys.ts b/src/queries/queryKeys.ts deleted file mode 100644 index caabc4b..0000000 --- a/src/queries/queryKeys.ts +++ /dev/null @@ -1 +0,0 @@ -export const userTransactions = 'userTransactions'; \ No newline at end of file diff --git a/src/queries/services/getUserTransactions.ts b/src/queries/services/getUserTransactions.ts deleted file mode 100644 index d421bc1..0000000 --- a/src/queries/services/getUserTransactions.ts +++ /dev/null @@ -1,21 +0,0 @@ - -import { getUserTransactionsModelCreator } from "../models"; - - -type GetUserTransactionsParams = { - address: string, - page: number, - limit: number, - direction: "ASC" | "DESC", - startTime: number, - pushTx: any; - }; -export const getUserTransactions = ({address,page,limit,startTime,direction,pushTx}):GetUserTransactionsParams => - pushTx.get( - startTime, - direction, - limit, - page, - address - ).then(getUserTransactionsModelCreator) - diff --git a/src/queries/services/index.ts b/src/queries/services/index.ts deleted file mode 100644 index f7f3f65..0000000 --- a/src/queries/services/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './getUserTransactions'; \ No newline at end of file diff --git a/src/services/pushWallet/pushWallet.ts b/src/services/pushWallet/pushWallet.ts index 7491eec..3929019 100644 --- a/src/services/pushWallet/pushWallet.ts +++ b/src/services/pushWallet/pushWallet.ts @@ -1,11 +1,6 @@ import * as bip39 from '@scure/bip39' import { wordlist } from '@scure/bip39/wordlists/english' import { bytesToHex } from '@noble/hashes/utils' -import { Tx as PushTx, Address } from '@pushprotocol/push-chain' -import { - InitDid, - EncryptedText, -} from '@pushprotocol/push-chain/src/lib/generated/txData/init_did' import { hexToBytes, stringToBytes } from 'viem' import { sha256 } from '@noble/hashes/sha256' import { ENV } from '../../constants' @@ -17,8 +12,10 @@ import { PushChain, UniversalSigner, } from '@pushchain/devnet' -import { CHAIN, CHAIN_ID } from '@pushchain/devnet/src/lib/constants' +import { CHAIN, CHAIN_ID, ENV as DevnetENV } from '@pushchain/devnet/src/lib/constants' import { chainSignerRegistry } from './signerRegistry' +import { TxCategory } from '@pushchain/devnet/src/lib/tx/tx.types' +import { EncryptedText } from '@pushchain/devnet/src/lib/generated/txData/init_did' export class PushWallet { private static unRegisteredProfile = false @@ -86,6 +83,7 @@ export class PushWallet { PushWallet.unRegisteredProfile = true // 2. Generate Push Wallet const pushWallet = await PushWallet.generatePushWallet() + // 3. Clear Local Storage localStorage.removeItem('appConnections') // 4. Create Universal Signer @@ -94,6 +92,7 @@ export class PushWallet { chain, chainId ) + // 5. Initialize return new PushWallet( pushWallet.did, @@ -111,21 +110,27 @@ export class PushWallet { ) => { const seed = await bip39.mnemonicToSeed(mnemonic) const masterNode = HDKey.fromMasterSeed(seed) - const address = privateKeyToAccount( + const account = privateKeyToAccount( `0x${bytesToHex(masterNode.privateKey as Uint8Array)}` - ).address + ) const did = `PUSH_DID:${bytesToHex(sha256(masterNode.publicKey))}` const universalSigner = await PushWallet.createUniSigner( mnemonic, chain, chainId ) + // 1. Registration Check - exit if wallet ( created by this mnemonic ) is not registered const pushChain = await PushChain.initialize(universalSigner) - const account = Address.toPushCAIP(address, env) + const universalAccount = { + chain: CHAIN.PUSH, + chainId: CHAIN_ID.PUSH.DEVNET, + address: PushChain.utils.account.evmToPushAddress(account.address) + } + const res = await pushChain.tx.get( - PushChain.utils.account.toUniversal(account), + universalAccount, { category: 'INIT_DID' } ) if (res.blocks.length === 0) return null @@ -207,39 +212,48 @@ export class PushWallet { throw Error('Only Allowed for Unregistered Profile') // 1. Create Init_did tx - const seed = await bip39.mnemonicToSeed(this.mnemonic as string) - + const seed = await bip39.mnemonicToSeed(this.mnemonic) const masterNode = HDKey.fromMasterSeed(seed) + const derivedNode = await PushWallet.generateDerivedNode(masterNode) - const txData: InitDid = { + + const account = privateKeyToAccount( + `0x${bytesToHex(masterNode.privateKey as Uint8Array)}` + ) + + const txData = { masterPubKey: bytesToHex(masterNode.publicKey as Uint8Array), derivedKeyIndex: derivedNode.index, derivedPubKey: bytesToHex(derivedNode.publicKey as Uint8Array), walletToEncDerivedKey: this.walletToEncDerivedKey, } - const pushTx = await PushTx.initialize(this.env) - const initDIDTx = pushTx.createUnsigned( - 'INIT_DID', - [], - // eslint-disable-next-line @typescript-eslint/no-explicit-any - PushTx.serializeData(txData, 'INIT_DID' as any) - ) - - // 2. Send Tx - const account = privateKeyToAccount( - `0x${bytesToHex(masterNode.privateKey as Uint8Array)}` - ) const signer = { - account: Address.toPushCAIP(account.address, this.env), + address: PushChain.utils.account.evmToPushAddress(account.address), signMessage: async (dataToBeSigned: Uint8Array) => { const signature = await account.signMessage({ message: { raw: dataToBeSigned }, }) return hexToBytes(signature) }, + chain: CHAIN.PUSH, + chainId: CHAIN_ID.PUSH.DEVNET, } - await pushTx.send(initDIDTx, signer) + + const pushChain = await PushChain.initialize(signer, { + network: DevnetENV.DEVNET, + rpcUrl: import.meta.env.VITE_APP_RPC_URL, + }) + + const serializedData = PushChain.utils.tx.serializeData(txData, TxCategory.INIT_DID); + + await pushChain.tx.send([], { + category: TxCategory.INIT_DID, + data: Buffer.from(serializedData).toString( + 'base64' + ), + }) + PushWallet.unRegisteredProfile = false } @@ -357,36 +371,24 @@ export class PushWallet { ]) // Do a Custom transaction on pushChain - const txInstance = await PushTx.initialize(this.env) const recipients = [] - const tx = txInstance.createUnsigned( - 'CUSTOM:MNEMONIC_SHARE_REGISTRATION', - recipients, - combinedData - ) - - const seed = await bip39.mnemonicToSeed(mnemonic as string) - const masterNode = HDKey.fromMasterSeed(seed) - const account = privateKeyToAccount( - `0x${bytesToHex(masterNode.privateKey as Uint8Array)}` - ) + // 1. Registration Check - exit if wallet ( created by this mnemonic ) is not registered + const pushChain = await PushChain.initialize(this.universalSigner, { + network: DevnetENV.DEVNET, + rpcUrl: import.meta.env.VITE_APP_RPC_URL, + }) - const signer = { - account: Address.toPushCAIP(account.address, this.env), - signMessage: async (dataToBeSigned: Uint8Array) => { - const signature = await account.signMessage({ - message: { raw: dataToBeSigned }, - }) - return hexToBytes(signature) - }, - } + const hexData = bytesToHex(combinedData); - const res = await txInstance.send(tx, signer) + const tx = await pushChain.tx.send(recipients, { + category: 'CUSTOM:MNEMONIC_SHARE_REGISTRATION', + data: hexData, + }) - console.log('::::::::::::::::Tx Response::::::::::', res) + console.log('::::::::::::::::Tx Response::::::::::', tx) await api.put(`/auth/passkey/transaction/${userId}`, { - transactionHash: res, + transactionHash: tx.txHash, iv: PushWallet.bufferToBase64URL(iv), }) } catch (error) { @@ -403,28 +405,26 @@ export class PushWallet { const txDataResponse = await api.get( `/auth/passkey/transaction/${userId}` ) + if (!txDataResponse?.data?.transactionHash) { throw new Error('No transaction hash found') } - // 2. Retrieve encrypted data from blockchain - const txInstance = await PushTx.initialize(env) - const txSearchResult = await txInstance.search( - txDataResponse.data.transactionHash - ) + const pushChain = await PushChain.initialize(null, { + network: DevnetENV.DEVNET, + rpcUrl: import.meta.env.VITE_APP_RPC_URL, + }); + + const txSearchResult = await pushChain.tx.get(txDataResponse.data.transactionHash, { raw: true }); + + const txData = txSearchResult.blocks[0]?.transactions[0].data - const txData = - txSearchResult.blocks[0]?.blockDataAsJson.txobjList[0]?.tx.data if (!txData) { throw new Error('Transaction data not found') } // 3. Decode encrypted data from base64 - const encryptedData = new Uint8Array( - atob(txData) - .split('') - .map((char) => char.charCodeAt(0)) - ) + const encryptedData = hexToBytes(`0x${txData}`); // Get authentication challenge from server const challengeResponse = await api.get( @@ -443,6 +443,7 @@ export class PushWallet { publicKey: options, })) as PublicKeyCredential + if (!credential) { throw new Error('Failed to get PassKey credential') } diff --git a/yarn.lock b/yarn.lock index b4900f7..85fca6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3475,9 +3475,9 @@ __metadata: languageName: node linkType: hard -"@pushchain/devnet@npm:^1.0.14": - version: 1.0.14 - resolution: "@pushchain/devnet@npm:1.0.14" +"@pushchain/devnet@npm:1.0.16": + version: 1.0.16 + resolution: "@pushchain/devnet@npm:1.0.16" dependencies: "@bufbuild/protobuf": "npm:^2.0.0" "@noble/hashes": "npm:^1.5.0" @@ -3485,35 +3485,15 @@ __metadata: "@types/ws": "npm:8.5.14" axios: "npm:^1.7.7" bech32: "npm:^2.0.0" - bs58: "npm:^6.0.0" + bs58: "npm:6.0.0" protobufjs-cli: "npm:1.1.3" ts-proto: "npm:2.6.1" tslib: "npm:^2.3.0" - tweetnacl: "npm:^1.0.3" - uuid: "npm:^10.0.0" - viem: "npm:^2.21.5" - ws: "npm:8.18.0" - checksum: 10/4079a49deeb699a4d48a2a74dbe63edbae4d9d8e5407aec7d3ba3a3028f23f21fa37663569c563dcc5b1e1cb7c40ed81a012b967f4fe92d4e63a9ec2b17b220d - languageName: node - linkType: hard - -"@pushprotocol/push-chain@npm:0.1.7": - version: 0.1.7 - resolution: "@pushprotocol/push-chain@npm:0.1.7" - dependencies: - "@bufbuild/protobuf": "npm:^2.0.0" - "@noble/hashes": "npm:^1.5.0" - "@types/uuid": "npm:10.0.0" - axios: "npm:^1.7.7" - bech32: "npm:^2.0.0" - bs58: "npm:^6.0.0" - protobufjs-cli: "npm:1.1.3" - ts-proto: "npm:2.2.4" - tslib: "npm:^2.3.0" - tweetnacl: "npm:^1.0.3" + tweetnacl: "npm:1.0.3" uuid: "npm:^10.0.0" viem: "npm:^2.21.5" - checksum: 10/a6189301318ffb1f580147aad7aa6d241cd74165daed7ea29919b4b3ab9b9cf685255398dd93b74df2351c13867633b3343f291b44f38a91f5035f859327125b + ws: "npm:^8.18.1" + checksum: 10/80a83b63a9f1da9f8c56521cd35535ef01f8f04122074ec1c527c21134dbabc9a112e6c25551c5f792fa3525803c509df3de8252afe2f931d09daf32dcbf15be languageName: node linkType: hard @@ -7752,6 +7732,15 @@ __metadata: languageName: node linkType: hard +"bs58@npm:6.0.0": + version: 6.0.0 + resolution: "bs58@npm:6.0.0" + dependencies: + base-x: "npm:^5.0.0" + checksum: 10/7c9bb2b2d93d997a8c652de3510d89772007ac64ee913dc4e16ba7ff47624caad3128dcc7f360763eb6308760c300b3e9fd91b8bcbd489acd1a13278e7949c4e + languageName: node + linkType: hard + "bs58@npm:^4.0.0, bs58@npm:^4.0.1": version: 4.0.1 resolution: "bs58@npm:4.0.1" @@ -7761,15 +7750,6 @@ __metadata: languageName: node linkType: hard -"bs58@npm:^6.0.0": - version: 6.0.0 - resolution: "bs58@npm:6.0.0" - dependencies: - base-x: "npm:^5.0.0" - checksum: 10/7c9bb2b2d93d997a8c652de3510d89772007ac64ee913dc4e16ba7ff47624caad3128dcc7f360763eb6308760c300b3e9fd91b8bcbd489acd1a13278e7949c4e - languageName: node - linkType: hard - "bs58check@npm:3.0.1, bs58check@npm:^3.0.1": version: 3.0.1 resolution: "bs58check@npm:3.0.1" @@ -13570,8 +13550,7 @@ __metadata: "@fortawesome/react-fontawesome": "npm:^0.2.2" "@metamask/sdk": "npm:^0.32.0" "@noble/hashes": "npm:^1.0.0" - "@pushchain/devnet": "npm:^1.0.14" - "@pushprotocol/push-chain": "npm:0.1.7" + "@pushchain/devnet": "npm:1.0.16" "@radix-ui/react-dialog": "npm:^1.1.1" "@radix-ui/react-dropdown-menu": "npm:^2.1.1" "@radix-ui/react-switch": "npm:^1.1.0" @@ -15739,20 +15718,6 @@ __metadata: languageName: node linkType: hard -"ts-proto@npm:2.2.4": - version: 2.2.4 - resolution: "ts-proto@npm:2.2.4" - dependencies: - "@bufbuild/protobuf": "npm:^2.0.0" - case-anything: "npm:^2.1.13" - ts-poet: "npm:^6.7.0" - ts-proto-descriptors: "npm:2.0.0" - bin: - protoc-gen-ts_proto: protoc-gen-ts_proto - checksum: 10/e9df05e12dbfeb4c80a530cd6f75760564eff0b2cbac8f647cece80213120f81c1af3e46528bd18bc9f2c060b923e6cbd43135aabe66f36ac82bf57236b03657 - languageName: node - linkType: hard - "ts-proto@npm:2.6.1": version: 2.6.1 resolution: "ts-proto@npm:2.6.1" @@ -15816,7 +15781,7 @@ __metadata: languageName: node linkType: hard -"tweetnacl@npm:1.0.3, tweetnacl@npm:^1.0.3": +"tweetnacl@npm:1.0.3": version: 1.0.3 resolution: "tweetnacl@npm:1.0.3" checksum: 10/ca122c2f86631f3c0f6d28efb44af2a301d4a557a62a3e2460286b08e97567b258c2212e4ad1cfa22bd6a57edcdc54ba76ebe946847450ab0999e6d48ccae332 @@ -16832,7 +16797,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.18.1": +"ws@npm:8.18.1, ws@npm:^8.18.1": version: 8.18.1 resolution: "ws@npm:8.18.1" peerDependencies: