diff --git a/.github/workflows/test-all.yml b/.github/workflows/test-all.yml index d38691576..e42e67190 100644 --- a/.github/workflows/test-all.yml +++ b/.github/workflows/test-all.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: "22.10.0" + node-version: "22.18.0" cache: "yarn" - run: yarn install - run: yarn build:all diff --git a/.github/workflows/test-swap.yml b/.github/workflows/test-swap.yml index 5fcc50756..6c505d6c0 100644 --- a/.github/workflows/test-swap.yml +++ b/.github/workflows/test-swap.yml @@ -9,7 +9,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: "22.10.0" + node-version: "22.18.0" cache: "yarn" - run: yarn install - run: yarn build:all diff --git a/.nvmrc b/.nvmrc index bb8c76c68..32cfab636 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.11.0 +v22.18.0 diff --git a/.vscode/settings.json b/.vscode/settings.json index 54e9b2be6..1017f72c9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,5 +9,6 @@ "source.fixAll": "explicit" }, "editor.formatOnSave": true, - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.inlineSuggest.enabled": false } diff --git a/Dockerfile b/Dockerfile index 914be81b9..a67e7066a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:22.11-bookworm +FROM node:22.18-bookworm RUN apt-get update RUN apt-get install build-essential zip -y ENV HOME /home diff --git a/README.md b/README.md index 45a39b14d..80a7a630c 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,8 @@ Enkrypt is a web3 wallet built from the ground up to support the multi-chain fut - Gravity - Unit Zero - Unit Zero Testnet +- Nibiru +- Nibiru Testnet - More coming soon! Looking to add your project? [Contact us!](https://mewwallet.typeform.com/enkrypt-inquiry?typeform-source=www.enkrypt.com) @@ -226,4 +228,4 @@ Email - info@enkrypt.com Homepage - [https://www.enkrypt.com/](https://www.enkrypt.com/) -
+ \ No newline at end of file diff --git a/package.json b/package.json index 75b7a1a3a..8f27872f0 100644 --- a/package.json +++ b/package.json @@ -32,14 +32,15 @@ "prepare": "husky" }, "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-conventional": "^19.8.1", - "@swc/core": "^1.13.2", - "concurrently": "^9.2.0", + "@commitlint/cli": "^20.1.0", + "@commitlint/config-conventional": "^20.0.0", + "@swc/core": "^1.15.2", + "concurrently": "^9.2.1", "husky": "^9.1.7", "node-notifier": "^10.0.1", - "nodemon": "^3.1.10", - "ultra-runner": "^3.10.5" + "nodemon": "^3.1.11", + "ultra-runner": "^3.10.5", + "vite-plugin-node-polyfills": "0.24.0" }, "resolutions": { "@zondax/ledger-cosmos-js/vue": "^3.5.12", diff --git a/packages/extension-bridge/package.json b/packages/extension-bridge/package.json index 70a76b200..8622489b2 100644 --- a/packages/extension-bridge/package.json +++ b/packages/extension-bridge/package.json @@ -44,12 +44,12 @@ "webextension-polyfill": "^0.12.0" }, "devDependencies": { - "@types/node": "^22.16.5", - "@types/webextension-polyfill": "^0.12.3", - "@typescript-eslint/eslint-plugin": "^8.38.0", - "@typescript-eslint/parser": "^8.38.0", - "bumpp": "^10.2.0", - "eslint": "^9.32.0", + "@types/node": "^22.19.1", + "@types/webextension-polyfill": "^0.12.4", + "@typescript-eslint/eslint-plugin": "^8.47.0", + "@typescript-eslint/parser": "^8.47.0", + "bumpp": "^10.3.1", + "eslint": "^9.39.1", "eslint-config-airbnb-base": "^15.0.0", "eslint-config-prettier": "^10.1.8", "eslint-import-resolver-alias": "^1.1.2", @@ -58,9 +58,9 @@ "prettier": "^3.6.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "tsup": "^8.5.0", - "type-fest": "^4.41.0", - "typescript": "^5.8.3", - "typescript-eslint": "8.38.0" + "tsup": "^8.5.1", + "type-fest": "^5.2.0", + "typescript": "^5.9.3", + "typescript-eslint": "8.47.0" } } diff --git a/packages/extension/configs/vitest.config.mts b/packages/extension/configs/vitest.config.mts index 90f0d6bd8..a39b3a10f 100644 --- a/packages/extension/configs/vitest.config.mts +++ b/packages/extension/configs/vitest.config.mts @@ -6,23 +6,26 @@ export default defineConfig({ plugins: [ tsconfigPaths() as any, nodePolyfills({ - include: [ - 'crypto', - // ... include other Node.js modules if needed - ], + include: ['crypto'], }), ], define: { - // setting __VERSION__ here blows it up for some reason - // __VERSION__: 'testing', __IS_OPERA__: false, }, test: { environment: 'jsdom', setupFiles: ['./tests/setup.ts'], - include: [ - 'src/**/*.{test,spec}.ts', - 'tests/**/*.{test,spec}.ts', + include: ['src/**/*.{test,spec}.ts', 'tests/**/*.{test,spec}.ts'], + }, + resolve: { + alias: [ + { + find: /^(vite-plugin-node-polyfills\/shims\/.+)/, + replacement: '$1', + customResolver(source) { + return import.meta.resolve(source).replace(/^file:\/\//, ''); + }, + }, ], }, }); diff --git a/packages/extension/package.json b/packages/extension/package.json index 8218c3344..e337636e5 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -1,6 +1,6 @@ { "name": "@enkryptcom/extension", - "version": "2.10.0", + "version": "2.14.0", "private": true, "type": "module", "scripts": { @@ -16,14 +16,14 @@ "build:chrome": "yarn prebuild && cross-env BROWSER='chrome' MINIFY='true' vite build", "build:firefox": "yarn prebuild && cross-env BROWSER='firefox' MINIFY='true' vite build && node configs/get-system-info.js", "build:opera": "yarn prebuild && cross-env BROWSER='opera' MINIFY='true' vite build", - "kadena:prebuild": "pactjs contract-generate --contract=coin --api https://api.chainweb.com/chainweb/0.0/mainnet01/chain/1/pact", + "kadena:prebuild": "pactjs contract-generate --contract=coin --api https://api.chainweb-community.org/chainweb/0.0/mainnet01/chain/1/pact", "test": "vitest run -c ./configs/vitest.config.mts", "watch": "yarn dev", "watch:chrome": "yarn dev", "watch:firefox": "yarn prebuild && cross-env BROWSER='firefox' vite" }, "dependencies": { - "@amplitude/analytics-browser": "^2.20.1", + "@amplitude/analytics-browser": "^2.31.1", "@enkryptcom/extension-bridge": "workspace:^", "@enkryptcom/hw-wallets": "workspace:^", "@enkryptcom/keyring": "workspace:^", @@ -36,34 +36,35 @@ "@ethereumjs/tx": "^5.4.0", "@ethereumjs/util": "^9.1.0", "@ethereumjs/wallet": "^2.0.4", - "@kadena/client": "^1.18.0", - "@kadena/pactjs-cli": "^1.18.0", - "@ledgerhq/hw-transport-webusb": "^6.29.8", + "@kadena/client": "^1.18.3", + "@kadena/pactjs-cli": "^1.18.3", + "@ledgerhq/hw-transport-webusb": "^6.29.13", + "@massalabs/massa-web3": "^5.3.0", "@metamask/eth-sig-util": "^8.2.0", "@metaplex-foundation/mpl-bubblegum": "^5.0.2", - "@metaplex-foundation/umi": "^1.2.0", - "@metaplex-foundation/umi-bundle-defaults": "^1.2.0", - "@polkadot/api": "^16.4.2", - "@polkadot/extension-inject": "^0.61.4", - "@polkadot/keyring": "^13.5.3", - "@polkadot/rpc-provider": "^16.4.2", - "@polkadot/types": "^16.4.2", - "@polkadot/types-known": "^16.4.2", - "@polkadot/ui-shared": "^3.15.2", - "@polkadot/util": "^13.5.3", - "@polkadot/wasm-crypto": "^7.4.1", + "@metaplex-foundation/umi": "^1.4.1", + "@metaplex-foundation/umi-bundle-defaults": "^1.4.1", + "@polkadot/api": "^16.5.2", + "@polkadot/extension-inject": "^0.62.5", + "@polkadot/keyring": "^13.5.8", + "@polkadot/rpc-provider": "^16.5.2", + "@polkadot/types": "^16.5.2", + "@polkadot/types-known": "^16.5.2", + "@polkadot/ui-shared": "^3.16.3", + "@polkadot/util": "^13.5.8", + "@polkadot/wasm-crypto": "^7.5.2", "@solana-developers/helpers": "2.8.0", - "@solana/spl-token": "^0.4.13", + "@solana/spl-token": "^0.4.14", "@solana/wallet-standard-features": "^1.3.0", - "@solana/web3.js": "^1.98.2", + "@solana/web3.js": "^1.98.4", "@wallet-standard/base": "^1.1.0", "add": "^2.0.6", "bignumber.js": "^9.3.1", "bip39": "^3.1.0", "bitcoinjs-lib": "^6.1.7", "bs58": "^6.0.0", - "concurrently": "^9.2.0", - "echarts": "^5.6.0", + "concurrently": "^9.2.1", + "echarts": "^6.0.0", "ethereum-cryptography": "^2.2.1", "ethereumjs-abi": "^0.6.8", "eventemitter3": "^5.0.1", @@ -73,14 +74,14 @@ "moment": "^2.30.1", "nanoevents": "^9.1.0", "pact-lang-api": "^4.3.6", - "pinia": "^3.0.3", + "pinia": "^3.0.4", "qrcode.vue": "^3.6.0", "switch-ts": "^1.1.1", "url-parse": "^1.5.10", - "uuid": "^11.1.0", - "vue": "^3.5.18", - "vue-echarts": "7.0.3", - "vue-router": "^4.5.1", + "uuid": "^13.0.0", + "vue": "^3.5.24", + "vue-echarts": "8.0.1", + "vue-router": "^4.6.3", "vue3-lottie": "^3.3.1", "vuedraggable": "^4.1.0", "web3-eth": "^1.10.4", @@ -89,56 +90,56 @@ "zxcvbn": "^4.4.2" }, "devDependencies": { - "@crxjs/vite-plugin": "^2.0.0-beta.32", - "@rollup/plugin-commonjs": "^28.0.6", + "@crxjs/vite-plugin": "^2.2.1", + "@rollup/plugin-commonjs": "^29.0.0", "@rollup/plugin-inject": "^5.0.5", "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.1", - "@rollup/plugin-replace": "^6.0.2", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-replace": "^6.0.3", "@rollup/plugin-terser": "^0.4.4", - "@rollup/plugin-typescript": "^12.1.4", - "@tsconfig/node20": "^20.1.6", + "@rollup/plugin-typescript": "^12.3.0", + "@tsconfig/node20": "^20.1.8", "@types/bs58": "^5.0.0", - "@types/chrome": "^0.1.1", + "@types/chrome": "^0.1.31", "@types/ethereumjs-abi": "^0.6.5", "@types/events": "^3.0.3", "@types/fs-extra": "^11.0.4", "@types/less": "^3.0.8", "@types/lodash": "^4.17.20", - "@types/node": "^22.16.5", - "@types/semver": "^7.7.0", + "@types/node": "^22.19.1", + "@types/semver": "^7.7.1", "@types/url-parse": "^1.4.11", "@types/utf-8-validate": "^5.0.2", - "@types/uuid": "^10.0.0", + "@types/uuid": "^11.0.0", "@types/wif": "^2.0.5", "@types/zxcvbn": "^4.4.5", - "@vitejs/plugin-vue": "^5.2.4", + "@vitejs/plugin-vue": "^6.0.2", "@vue/eslint-config-prettier": "^10.2.0", "@vue/eslint-config-typescript": "^14.6.0", - "@vue/tsconfig": "^0.7.0", - "@vueuse/core": "^13.5.0", - "cross-env": "^7.0.3", - "eslint": "^9.32.0", - "eslint-plugin-vue": "^10.3.0", - "fs-extra": "^11.3.0", + "@vue/tsconfig": "^0.8.1", + "@vueuse/core": "^14.0.0", + "cross-env": "^10.1.0", + "eslint": "^9.39.1", + "eslint-plugin-vue": "^10.5.1", + "fs-extra": "^11.3.2", "jsdom": "^26.1.0", - "less": "^4.4.0", + "less": "^4.4.2", "less-loader": "^12.3.0", "npm-run-all2": "^8.0.4", "prettier": "^3.6.2", - "rimraf": "^6.0.1", - "rollup": "^4.45.1", - "rollup-plugin-visualizer": "^6.0.3", - "semver": "^7.7.2", - "systeminformation": "^5.27.7", - "tsup": "^8.5.0", - "typescript": "~5.8.3", + "rimraf": "^6.1.2", + "rollup": "^4.53.3", + "rollup-plugin-visualizer": "^6.0.5", + "semver": "^7.7.3", + "systeminformation": "^5.27.11", + "tsup": "^8.5.1", + "typescript": "~5.9.3", "url": "^0.11.4", - "vite": "^6.3.5", + "vite": "^7.2.2", "vite-plugin-node-polyfills": "0.24.0", "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4", - "vue-tsc": "^2.2.12", + "vitest": "^4.0.10", + "vue-tsc": "^3.1.4", "webextension-polyfill": "^0.12.0" }, "installConfig": { diff --git a/packages/extension/src/libs/background/index.ts b/packages/extension/src/libs/background/index.ts index d00f28109..a888c2290 100644 --- a/packages/extension/src/libs/background/index.ts +++ b/packages/extension/src/libs/background/index.ts @@ -28,6 +28,7 @@ import { } from './internal'; import { handlePersistentEvents } from './external'; import SettingsState from '../settings-state'; +import { isGeoRestricted } from '../utils/screening'; class BackgroundHandler { #keyring: KeyRingBase; @@ -36,6 +37,7 @@ class BackgroundHandler { #persistentEvents: PersistentEvents; #domainState: DomainState; #settingsState: SettingsState; + #geoRestricted: boolean | undefined; constructor() { this.#keyring = new KeyRingBase(); @@ -48,8 +50,13 @@ class BackgroundHandler { [ProviderName.bitcoin]: {}, [ProviderName.kadena]: {}, [ProviderName.solana]: {}, + [ProviderName.massa]: {}, }; this.#providers = Providers; + this.#geoRestricted = undefined; + isGeoRestricted().then(restricted => { + this.#geoRestricted = restricted; + }); } async init(): PromiseTo:
+From:
+ ++ {{ balance ? $filters.formatFloatingPointValue(balance).value : '~' }} + {{ token.symbol }} +
++ {{ errorMsg }} +
++ Double check the information and confirm transaction +
+
+ Transaction sent!
Operation ID:
+ {{ operationIdRef }}
+
+ Your wallet address or IP has been flagged as originating from a + restricted jurisdiction. Under our platform policies, access to our + platform is therefore restricted. Please refer to our geographic policies + page for more details. +
++ If this address has been incorrectly flagged, you can contact us at + support@myetherwallet.com. +
+ More info ++ Use this phrase to restore access to your funds in another wallet. + Don't show this to anyone +
+
@@ -43,6 +47,10 @@ import { MnemonicWithExtraWord } from '@enkryptcom/types';
import { computed, PropType } from 'vue';
const props = defineProps({
+ hasBack: {
+ type: Boolean,
+ default: true,
+ },
mnemonic: {
type: Object as PropType
+
Follow further instructions on your hardware wallet device
+ Waiting for Transactions to be mined, this can take upto 30
+ seconds
+
Offer {{ swapNumber }}
++ {{ + props.provider + ? PROVIDER_INFO[props.provider].name + : 'Unknown Provider' + }} +
@@ -41,6 +45,14 @@ />
+ Provider:
+
+ {{ PROVIDER_INFO[props.pickedTrade.provider].name }}
+
Rate: 1 {{ fromToken.symbol.toUpperCase() }} ≈
{{ $filters.formatFloatingPointValue(ratio).value }}
@@ -89,6 +101,7 @@ import {
SwapToken,
} from '@enkryptcom/swap';
import { imageLoadError } from '@/ui/action/utils/misc';
+import { PROVIDER_INFO } from '@enkryptcom/swap';
interface SwapBestOfferProps {
trades: ProviderSwapResponse[];
@@ -178,6 +191,11 @@ const toggleOffers = () => {
letter-spacing: 0.15px;
color: @primaryLabel;
margin: 0 0 8px 0;
+
+ img {
+ margin-left: 2px;
+ width: 15px;
+ }
}
&__for {
diff --git a/packages/extension/src/ui/action/views/swap/views/swap-best-offer/index.vue b/packages/extension/src/ui/action/views/swap/views/swap-best-offer/index.vue
index 1e6e582f3..96ad92c2e 100644
--- a/packages/extension/src/ui/action/views/swap/views/swap-best-offer/index.vue
+++ b/packages/extension/src/ui/action/views/swap/views/swap-best-offer/index.vue
@@ -93,6 +93,7 @@
:is-error="isTXSendError"
:error-message="TXSendErrorMessage"
:network="network"
+ :waiting-to-be-mined="waitingToBeMined"
@update:close="close"
@update:try-again="sendAction"
/>
@@ -137,13 +138,14 @@ import { SwapBestOfferWarnings } from '../../types';
import { NATIVE_TOKEN_ADDRESS } from '@/providers/ethereum/libs/common';
import { EnkryptAccount, NetworkNames } from '@enkryptcom/types';
import { getNetworkByName } from '@/libs/utils/networks';
-import {
+import Swap, {
getNetworkInfoByName,
NetworkType,
ProviderSwapResponse,
SupportedNetworkName,
SwapToken,
} from '@enkryptcom/swap';
+import { TypedMessageSigner as EvmTypedMessageSigner } from '@/providers/ethereum/ui/libs/signer';
import PublicKeyRing from '@/libs/keyring/public-keyring';
import { SwapData, ProviderResponseWithStatus } from '../../types';
import { getSwapTransactions } from '../../libs/swap-txs';
@@ -159,6 +161,8 @@ import { getSolanaTransactionFees } from '../../libs/solana-gasvals';
import { SolanaNetwork } from '@/providers/solana/types/sol-network';
import RateState from '@/libs/rate-state';
import { useRateStore } from '@action/store/rate-store';
+import { SwapType, WalletIdentifier } from '@enkryptcom/swap/src/types';
+import waitForReceipt from '../../libs/evm-waitreceipt';
/** -------------------
* Rate
@@ -209,6 +213,8 @@ const isTXSendLoading = ref
Click on
@@ -31,11 +28,25 @@ import ArrowBack from '@action/icons/common/arrow-back.vue'; import ExtensionIcon from '@action/icons/tip/extension-icon.vue'; import OnlineIcon from '@action/icons/tip/online-icon.vue'; import PinIcon from '@action/icons/tip/pin-icon.vue'; +import { onMounted } from 'vue'; import { useRoute, useRouter } from 'vue-router'; +import { isGeoRestricted } from '@/libs/utils/screening'; const route = useRoute(); const router = useRouter(); +onMounted(async () => { + isGeoRestricted().then(restricted => { + if (restricted) { + window.open( + 'https://help.myetherwallet.com/en/articles/12897302-geographic-restrictions-for-mew', + '_blank', + 'noopener', + ); + window.close(); + } + }); +}); const isShowBackButton = () => { return ( route.name && @@ -61,8 +72,7 @@ const wrapClassObject = () => {