1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-22 17:33:23 +01:00

Merge origin/develop into master-sync

This commit is contained in:
Dan J Miller 2023-08-14 12:34:43 -02:30
commit bd37b30cda
1005 changed files with 42191 additions and 32956 deletions

View File

@ -3,16 +3,16 @@ version: 2.1
executors:
node-browsers:
docker:
- image: cimg/node:16.20-browsers
- image: cimg/node:18.17-browsers
node-browsers-medium-plus:
docker:
- image: cimg/node:16.20-browsers
- image: cimg/node:18.17-browsers
resource_class: medium+
environment:
NODE_OPTIONS: --max_old_space_size=2048
node-browsers-large:
docker:
- image: cimg/node:16.20-browsers
- image: cimg/node:18.17-browsers
resource_class: large
environment:
NODE_OPTIONS: --max_old_space_size=2048
@ -101,6 +101,9 @@ workflows:
build-type: [main, beta, flask, mmi, desktop]
requires:
- prep-deps
- prep-build-mmi:
requires:
- prep-deps
- prep-build:
requires:
- prep-deps
@ -144,6 +147,9 @@ workflows:
- test-e2e-firefox:
requires:
- prep-build-test
- test-e2e-chrome-rpc:
requires:
- prep-build-test
- test-e2e-chrome-snaps:
requires:
- prep-build-test-flask
@ -186,6 +192,9 @@ workflows:
ignore: master
requires:
- prep-build-desktop
- validate-source-maps-mmi:
requires:
- prep-build-mmi
- validate-source-maps-flask:
requires:
- prep-build-flask
@ -222,6 +231,7 @@ workflows:
- validate-source-maps-beta
- validate-source-maps-desktop
- validate-source-maps-flask
- validate-source-maps-mmi
- test-mozilla-lint
- test-mozilla-lint-desktop
- test-mozilla-lint-flask
@ -245,6 +255,7 @@ workflows:
- prep-build
- trigger-beta-build
- prep-build-desktop
- prep-build-mmi
- prep-build-flask
- prep-build-storybook
- prep-build-ts-migration-dashboard
@ -261,6 +272,7 @@ workflows:
- prep-deps
- prep-build
- prep-build-desktop
- prep-build-mmi
- prep-build-flask
- all-tests-pass
- job-publish-storybook:
@ -342,29 +354,8 @@ jobs:
- dependency-cache-v1-
- gh/install
- run:
name: Set IS_DRAFT environment variable
command: |
PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}"
if [ -n "$PR_NUMBER" ]
then
echo "IS_DRAFT=$(gh pr view --json isDraft --jq '.isDraft' "$PR_NUMBER")" >> "$BASH_ENV"
source "$BASH_ENV"
else
echo "Not a PR; skipping"
fi
- run:
name: Setup registry config for using package previews on draft PRs
command: |
if [[ $IS_DRAFT == 'true' ]]
then
printf '%s\n\n%s' '@metamask:registry=https://npm.pkg.github.com' "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGE_READ_TOKEN}" > .npmrc
else
echo "Not draft; skipping GitHub registry setup"
fi
- run:
name: Install deps
command: |
.circleci/scripts/deps-install.sh
name: Install dependencies
command: .circleci/scripts/install-dependencies.sh
- save_cache:
key: dependency-cache-v1-{{ checksum "yarn.lock" }}
paths:
@ -475,6 +466,49 @@ jobs:
- dist-desktop
- builds-desktop
prep-build-mmi:
executor: node-browsers-medium-plus
steps:
- run: *shallow-git-clone
- attach_workspace:
at: .
- when:
condition:
not:
matches:
pattern: /^master$/
value: << pipeline.git.branch >>
steps:
- run:
name: build:dist
command: yarn build --build-type mmi dist
- when:
condition:
matches:
pattern: /^master$/
value: << pipeline.git.branch >>
steps:
- run:
name: build:prod
command: yarn build --build-type mmi prod
- run:
name: build:debug
command: find dist/ -type f -exec md5sum {} \; | sort -k 2
- run:
name: Move mmi build to 'dist-mmi' to avoid conflict with production build
command: mv ./dist ./dist-mmi
- run:
name: Move mmi zips to 'builds-mmi' to avoid conflict with production build
command: mv ./builds ./builds-mmi
- persist_to_workspace:
root: .
paths:
- dist-mmi
- builds-mmi
- store_artifacts:
path: builds-mmi
destination: builds-mmi
prep-build-flask:
executor: node-browsers-medium-plus
steps:
@ -660,6 +694,9 @@ jobs:
- run:
name: lockfile-lint
command: yarn lint:lockfile
- run:
name: check yarn resolutions
command: yarn --check-resolutions
test-lint-changelog:
executor: node-browsers
@ -695,7 +732,7 @@ jobs:
at: .
- run:
name: yarn audit
command: .circleci/scripts/yarn-audit.sh
command: yarn audit
test-deps-depcheck:
executor: node-browsers
@ -772,6 +809,43 @@ jobs:
path: test-artifacts
destination: test-artifacts
test-e2e-chrome-rpc:
executor: node-browsers
parallelism: 1
steps:
- checkout
- run:
name: Re-Install Chrome
command: ./.circleci/scripts/chrome-install.sh
- attach_workspace:
at: .
- run:
name: Move test build to dist
command: mv ./dist-test ./dist
- run:
name: Move test zips to builds
command: mv ./builds-test ./builds
- run:
name: test:e2e:chrome:rpc
command: |
if .circleci/scripts/test-run-e2e.sh
then
yarn test:e2e:chrome:rpc --retries 2
fi
no_output_timeout: 20m
- run:
name: Merge JUnit report
command: |
if [ "$(ls -A test/test-results/e2e)" ]; then
yarn test:e2e:report
fi
when: always
- store_artifacts:
path: test-artifacts
destination: test-artifacts
- store_test_results:
path: test/test-results/e2e.xml
test-e2e-firefox-snaps:
executor: node-browsers
parallelism: 4
@ -1191,6 +1265,22 @@ jobs:
name: Validate source maps
command: yarn validate-source-maps
validate-source-maps-mmi:
executor: node-browsers
steps:
- run: *shallow-git-clone
- attach_workspace:
at: .
- run:
name: Move mmi build to dist
command: mv ./dist-mmi ./dist
- run:
name: Move mmi zips to builds
command: mv ./builds-mmi ./builds
- run:
name: Validate source maps
command: yarn validate-source-maps
validate-source-maps-flask:
executor: node-browsers
steps:

View File

@ -1,9 +0,0 @@
#!/usr/bin/env bash
# Print commands and their arguments as they are executed.
set -x
# Exit immediately if a command exits with a non-zero status.
set -e
yarn install --frozen-lockfile

View File

@ -0,0 +1,42 @@
#!/usr/bin/env bash
set -e
set -o pipefail
IS_NON_FORK_DRAFT='false'
if [[ -n $CIRCLE_PULL_REQUEST ]] && gh auth status
then
PR_NUMBER="${CIRCLE_PULL_REQUEST##*/}"
if [ -n "$PR_NUMBER" ]
then
IS_NON_FORK_DRAFT="$(gh pr view --json isDraft --jq '.isDraft' "$PR_NUMBER")"
fi
fi
# Build query to see whether there are any "preview-like" packages in the manifest
# A "preview-like" package is a `@metamask`-scoped package with a prerelease version that has no period.
QUERY='.dependencies + .devDependencies' # Get list of all dependencies
QUERY+=' | with_entries( select(.key | startswith("@metamask") ) )' # filter to @metamask-scoped packages
QUERY+=' | to_entries[].value' # Get version ranges
QUERY+=' | select(test("^\\d+\\.\\d+\\.\\d+-[^.]+$"))' # Get pinned versions where the prerelease part has no "."
# Use `-e` flag so that exit code indicates whether any matches were found
if jq -e "${QUERY}" < ./package.json
then
echo "Preview builds detected"
HAS_PREVIEW_BUILDS='true'
else
echo "No preview builds detected"
HAS_PREVIEW_BUILDS='false'
fi
if [[ $IS_NON_FORK_DRAFT == 'true' && $HAS_PREVIEW_BUILDS == 'true' ]]
then
# Use GitHub registry on draft PRs, allowing the use of preview builds
echo "Installing with preview builds"
METAMASK_NPM_REGISTRY=https://npm.pkg.github.com yarn --immutable
else
echo "Installing without preview builds"
yarn --immutable
fi

View File

@ -1,24 +0,0 @@
#!/usr/bin/env bash
set -e
set -u
set -x
set -o pipefail
# use `improved-yarn-audit` since that allows for exclude
# exclusions are in .iyarc now
yarn run improved-yarn-audit \
--ignore-dev-deps \
--min-severity moderate \
--fail-on-missing-exclusions
audit_status="$?"
if [[ "$audit_status" != 0 ]]
then
count="$(yarn npm audit --severity moderate --environment production --json | tail -1 | jq '.data.vulnerabilities.moderate + .data.vulnerabilities.high + .data.vulnerabilities.critical')"
printf "Audit shows %s moderate or high severity advisories _in the production dependencies_\n" "$count"
exit 1
else
printf "Audit shows _zero_ moderate or high severity advisories _in the production dependencies_\n"
fi

View File

@ -45,7 +45,6 @@ ignores:
- 'playwright'
- 'wait-on'
# development tool
- 'improved-yarn-audit'
- 'nyc'
# storybook
- '@storybook/cli'

View File

@ -72,5 +72,8 @@ module.exports = {
// upgrading eslint and dependencies. This rule should be evaluated and
// if agreeable turned on upstream in @metamask/eslint-config
'import/no-named-as-default-member': 'off',
// This is necessary to run eslint on Windows and not get a thousand CRLF errors
'prettier/prettier': ['error', { endOfLine: 'auto' }],
},
};

View File

@ -246,6 +246,7 @@ module.exports = {
'shared/**/*.test.js',
'ui/**/*.test.js',
'ui/__mocks__/*.js',
'test/e2e/helpers.test.js',
],
extends: ['@metamask/eslint-config-mocha'],
rules: {
@ -271,10 +272,12 @@ module.exports = {
'app/scripts/migrations/*.test.js',
'app/scripts/platforms/*.test.js',
'development/**/*.test.js',
'development/**/*.test.ts',
'shared/**/*.test.js',
'shared/**/*.test.ts',
'test/helpers/*.js',
'test/jest/*.js',
'test/e2e/helpers.test.js',
'ui/**/*.test.js',
'ui/__mocks__/*.js',
'shared/lib/error-utils.test.js',

View File

@ -20,5 +20,6 @@ When you're done with your project / bugfix / feature and ready to submit a PR,
- [ ] **Keep it simple**: Try not to include multiple features in a single PR, and don't make extraneous changes outside the scope of your contribution. All those touched files make things harder to review ;)
- [ ] **PR against `develop`**: Submit your PR against the `develop` branch. This is where we merge new features so they get some time to receive extra testing before being pushed to `master` for production. If your PR is a hot-fix that needs to be published urgently, you may submit a PR against the `master` branch, but this PR will receive tighter scrutiny before merging.
- [ ] **Get reviewed by a core contributor**: Make sure you get a `:thumbsup`, `:+1`, or `LGTM` from a user with a `Member` badge before merging.
- [ ] **Ensure the PR is correctly labeled.**: More detail about labels definitions can be found [here](https://github.com/MetaMask/metamask-extension/blob/develop/.github/LABELING_GUIDELINES.md).
And that's it! Thanks for helping out.

24
.github/LABELING_GUIDELINES.md vendored Normal file
View File

@ -0,0 +1,24 @@
# PR Labeling Guidelines
To maintain a consistent and efficient development workflow, we have set specific label guidelines for all pull requests (PRs). Please ensure you adhere to the following instructions:
### Mandatory Labels:
- **Internal Developers**: Every PR raised by an internal developer must include a label prefixed with `team-` (e.g., `team-extension-ux`, `team-extension-platform`, etc.). This indicates the respective internal team responsible for the PR.
- **External Contributors**: PRs from contributors outside the organization must have the `external-contributor` label.
It's essential to ensure that PRs have the appropriate labels before they are considered for merging.
### Prohibited Labels:
Any PR that includes one of the following labels can not be merged:
- **needs-qa**: The PR requires a full manual QA prior to being added to a release.
- **QA'd but questions**: The PR has been checked by QA, but there are pending questions or clarifications needed on minor issues that were found.
- **issues-found**: The PR has been checked by QA or other reviewers, and appeared to include issues that need to be addressed.
- **need-ux-ds-review**: The PR requires a review from the User Experience or Design System teams.
- **blocked**: There are unresolved dependencies or other issues blocking the progress of this PR.
- **stale**: The PR has not had recent activity in the last 90 days. It will be closed in 7 days.
- **DO-NOT-MERGE**: The PR should not be merged under any circumstances.
To maintain code quality and project integrity, it's crucial to respect these label guidelines. Please ensure you review and update labels appropriately throughout the PR lifecycle.
Thank you for your cooperation!

View File

@ -0,0 +1,97 @@
import * as core from '@actions/core';
import { context, getOctokit } from '@actions/github';
import { GitHub } from '@actions/github/lib/utils';
main().catch((error: Error): void => {
console.error(error);
process.exit(1);
});
async function main(): Promise<void> {
// "GITHUB_TOKEN" is an automatically generated, repository-specific access token provided by GitHub Actions.
const githubToken = process.env.GITHUB_TOKEN;
if (!githubToken) {
core.setFailed('GITHUB_TOKEN not found');
process.exit(1);
}
// Initialise octokit, required to call Github GraphQL API
const octokit: InstanceType<typeof GitHub> = getOctokit(githubToken);
// Retrieve pull request info from context
const prRepoOwner = context.repo.owner;
const prRepoName = context.repo.repo;
const prNumber = context.payload.pull_request?.number;
if (!prNumber) {
core.setFailed('Pull request number not found');
process.exit(1);
}
// Retrieve pull request labels
const prLabels = await retrievePullRequestLabels(octokit, prRepoOwner, prRepoName, prNumber);
const preventMergeLabels = ["needs-qa", "QA'd but questions", "issues-found", "need-ux-ds-review", "blocked", "stale", "DO-NOT-MERGE"];
let hasTeamLabel = false;
// Check pull request has at least required QA label and team label
for (const label of prLabels) {
if (label.startsWith("team-") || label === "external-contributor") {
console.log(`PR contains a team label as expected: ${label}`);
hasTeamLabel = true;
}
if (preventMergeLabels.includes(label)) {
throw new Error(`PR cannot be merged because it still contains this label: ${label}`);
}
if (hasTeamLabel) {
return;
}
}
// Otherwise, throw an arror to prevent from merging
let errorMessage = '';
if (!hasTeamLabel) {
errorMessage += 'No team labels found on the PR. ';
}
errorMessage += `Please make sure the PR is appropriately labeled before merging it.\n\nSee labeling guidelines for more detail: https://github.com/MetaMask/metamask-extension/blob/develop/.github/LABELING_GUIDELINES.md`;
throw new Error(errorMessage);
}
// This function retrieves the pull request on a specific repo
async function retrievePullRequestLabels(octokit: InstanceType<typeof GitHub>, repoOwner: string, repoName: string, prNumber: number): Promise<string[]> {
const retrievePullRequestLabelsQuery = `
query RetrievePullRequestLabels($repoOwner: String!, $repoName: String!, $prNumber: Int!) {
repository(owner: $repoOwner, name: $repoName) {
pullRequest(number: $prNumber) {
labels(first: 100) {
nodes {
name
}
}
}
}
}
`;
const retrievePullRequestLabelsResult: {
repository: {
pullRequest: {
labels: {
nodes: {
name: string;
}[];
}
};
};
} = await octokit.graphql(retrievePullRequestLabelsQuery, {
repoOwner,
repoName,
prNumber,
});
const pullRequestLabels = retrievePullRequestLabelsResult?.repository?.pullRequest?.labels?.nodes?.map(labelObject => labelObject?.name);
return pullRequestLabels || [];
}

38
.github/workflows/check-pr-labels.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: "Check PR has required labels"
on:
pull_request:
branches:
- develop
types:
- opened
- reopened
- synchronize
- labeled
- unlabeled
jobs:
check-pr-labels:
runs-on: ubuntu-latest
permissions:
pull-requests: read
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
fetch-depth: 0 # This is needed to checkout all branches
- name: Set up Node.js
uses: actions/setup-node@v3
with:
node-version-file: '.nvmrc'
cache: yarn
- name: Install dependencies
run: yarn --immutable
- name: Check PR has required labels
id: check-pr-has-required-labels
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: npm run check-pr-has-required-labels

View File

@ -1,17 +0,0 @@
# Fails the pull request if it has the "DO-NOT-MERGE" label
name: Check "DO-NOT-MERGE" label
on:
pull_request:
types: [opened, reopened, labeled, unlabeled, synchronize]
jobs:
do-not-merge:
runs-on: ubuntu-latest
if: ${{ contains(github.event.pull_request.labels.*.name, 'DO-NOT-MERGE') }}
steps:
- name: 'Check for label "DO-NOT-MERGE"'
run: |
echo 'This check fails PRs with the "DO-NOT-MERGE" label to block merging'
exit 1

29
.github/workflows/stale-issues-pr.yml vendored Normal file
View File

@ -0,0 +1,29 @@
name: 'Close stale issues and PRs'
# run every 2 hours
on:
schedule:
- cron: '0 */2 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@72afbce2b0dbd1d903bb142cebe2d15dc307ae57
with:
stale-issue-label: 'stale'
only-issue-labels: 'type-bug'
exempt-issue-labels: 'type-security'
days-before-issue-stale: 90
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity in the last 90 days. It will be closed in 45 days if there is no further activity. The MetaMask team intends on reviewing this issue before close, and removing the stale label if it is still a bug. We welcome new comments on this issue. We do not intend on closing issues if they report bugs that are still reproducible. Thank you for your contributions.'
days-before-issue-close: 45
close-issue-message: 'This issue was closed because there has been no follow up activity in the last 45 days. If you feel this was closed in error, please reopen and provide evidence on the latest release of the extension. Thank you for your contributions.'
stale-pr-label: 'stale'
days-before-pr-stale: 60
stale-pr-message: 'This PR has been automatically marked as stale because it has not had recent activity in the last 60 days. It will be closed in 14 days. Thank you for your contributions.'
days-before-pr-close: 14
close-pr-message: 'This PR was closed because there has been no follow up activity in the last 14 days. Thank you for your contributions.'
operations-per-run: 600

View File

@ -48,6 +48,8 @@ jobs:
needs: is-fork-pull-request
# Early exit if this is a fork, since later steps are skipped for forks
if: ${{ needs.is-fork-pull-request.outputs.IS_FORK == 'false' }}
outputs:
COMMIT_SHA: ${{ steps.commit-sha.outputs.COMMIT_SHA }}
steps:
- name: Checkout repository
uses: actions/checkout@v3
@ -63,6 +65,9 @@ jobs:
cache: 'yarn'
- name: Install Yarn dependencies
run: yarn --immutable
- name: Get commit SHA
id: commit-sha
run: echo "COMMIT_SHA=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
update-lavamoat-build-policy:
name: Update LavaMoat build policy
@ -90,7 +95,7 @@ jobs:
uses: actions/cache/save@v3
with:
path: lavamoat/build-system
key: cache-build-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-build-${{ needs.prepare.outputs.COMMIT_SHA }}
update-lavamoat-webapp-policy:
strategy:
@ -125,12 +130,13 @@ jobs:
uses: actions/cache/save@v3
with:
path: lavamoat/browserify/${{ matrix.build-type }}
key: cache-${{ matrix.build-type }}-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-${{ matrix.build-type }}-${{ needs.prepare.outputs.COMMIT_SHA }}
commit-updated-policies:
name: Commit the updated LavaMoat policies
runs-on: ubuntu-latest
needs:
- prepare
- is-fork-pull-request
- update-lavamoat-build-policy
- update-lavamoat-webapp-policy
@ -147,11 +153,14 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.LAVAMOAT_UPDATE_TOKEN }}
PR_NUMBER: ${{ github.event.issue.number }}
- name: Get commit SHA
id: commit-sha
run: echo "COMMIT_SHA=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
- name: Restore build policy
uses: actions/cache/restore@v3
with:
path: lavamoat/build-system
key: cache-build-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-build-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
# One restore step per build type: [main, beta, flask, mmi, desktop]
# Ensure this is synchronized with the list above in the "update-lavamoat-webapp-policy" job
@ -160,31 +169,31 @@ jobs:
uses: actions/cache/restore@v3
with:
path: lavamoat/browserify/main
key: cache-main-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-main-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
- name: Restore beta application policy
uses: actions/cache/restore@v3
with:
path: lavamoat/browserify/beta
key: cache-beta-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-beta-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
- name: Restore flask application policy
uses: actions/cache/restore@v3
with:
path: lavamoat/browserify/flask
key: cache-flask-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-flask-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
- name: Restore mmi application policy
uses: actions/cache/restore@v3
with:
path: lavamoat/browserify/mmi
key: cache-mmi-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-mmi-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
- name: Restore desktop application policy
uses: actions/cache/restore@v3
with:
path: lavamoat/browserify/desktop
key: cache-desktop-${{ github.run_id }}-${{ github.run_attempt }}
key: cache-desktop-${{ needs.prepare.outputs.COMMIT_SHA }}
fail-on-cache-miss: true
- name: Check whether there are policy changes
id: policy-changes
@ -214,3 +223,37 @@ jobs:
HAS_CHANGES: ${{ steps.policy-changes.outputs.HAS_CHANGES }}
GITHUB_TOKEN: ${{ secrets.LAVAMOAT_UPDATE_TOKEN }}
PR_NUMBER: ${{ github.event.issue.number }}
check-status:
name: Check whether the policy update succeeded
runs-on: ubuntu-latest
needs:
- commit-updated-policies
outputs:
PASSED: ${{ steps.set-output.outputs.PASSED }}
steps:
- name: Set PASSED output
id: set-output
run: echo "PASSED=true" >> "$GITHUB_OUTPUT"
failure-comment:
name: Comment about the policy update failure
if: ${{ always() && needs.is-fork-pull-request.outputs.IS_FORK == 'false' }}
runs-on: ubuntu-latest
needs:
- is-fork-pull-request
- check-status
steps:
- uses: actions/checkout@v3
with:
token: ${{ secrets.LAVAMOAT_UPDATE_TOKEN }}
- name: Post comment if the update failed
run: |
passed="${{ needs.check-status.outputs.PASSED }}"
if [[ $passed != "true" ]]; then
gh pr comment "${PR_NUMBER}" --body "Policy update failed. You can [review the logs or retry the policy update here](${ACTION_RUN_URL})"
fi
env:
GITHUB_TOKEN: ${{ secrets.LAVAMOAT_UPDATE_TOKEN }}
PR_NUMBER: ${{ github.event.issue.number }}
ACTION_RUN_URL: "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"

11
.iyarc
View File

@ -1,11 +0,0 @@
# improved-yarn-audit advisory exclusions
GHSA-257v-vj4p-3w2h
# request library is subject to SSRF.
# addressed by temporary patch in .yarn/patches/request-npm-2.88.2-f4a57c72c4.patch
GHSA-p8p7-x288-28g6
# Prototype pollution
# Not easily patched
# Minimal risk to us because we're using lockdown which also prevents this case of prototype pollution
GHSA-h755-8qp9-cq85

View File

@ -12,3 +12,5 @@ INFURA_PROJECT_ID=00000000000
; Set this to test changes to the phishing warning page.
;PHISHING_WARNING_PAGE_URL=
BLOCKAID_FILE_CDN=
BLOCKAID_PUBLIC_KEY=

View File

@ -9,6 +9,8 @@ module.exports = {
'./app/scripts/controllers/permissions/**/*.test.js',
'./app/scripts/controllers/mmi-controller.test.js',
'./app/scripts/constants/error-utils.test.js',
'./development/fitness-functions/**/*.test.ts',
'./test/e2e/helpers.test.js',
],
recursive: true,
require: ['test/env.js', 'test/setup.js'],

2
.nvmrc
View File

@ -1 +1 @@
v16
v18

View File

@ -1,2 +1,5 @@
# All of these are defaults except singleQuote and endOfLine, but we specify them
# for explicitness
endOfLine: auto
singleQuote: true
trailingComma: all

View File

@ -50,7 +50,13 @@ Theme colors are color agnostic, semantically neutral and theme compatible desig
```css
/** Backgrounds */
var(--color-background-default)
var(--color-background-default-hover)
var(--color-background-default-pressed)
var(--color-background-alternative)
var(--color-background-alternative-hover)
var(--color-background-alternative-pressed)
var(--color-background-hover)
var(--color-background-pressed)
/** Text */
var(--color-text-default)

View File

@ -1,5 +1,7 @@
import { draftTransactionInitialState } from '../ui/ducks/send';
import { KeyringType } from '../shared/constants/keyring';
import { NetworkType } from '@metamask/controller-utils';
import { NetworkStatus } from '@metamask/network-controller';
const state = {
invalidCustomNetwork: {
@ -17,6 +19,15 @@ const state = {
url: 'https://metamask.github.io/test-dapp/',
},
metamask: {
announcements: {
22: {
id: 22,
date: null,
image: {
src: 'images/global-menu-block-explorer.svg',
},
}
},
tokenList: {
'0x514910771af9ca656af840dff83e8264ecf986ca': {
address: '0x514910771af9ca656af840dff83e8264ecf986ca',
@ -164,6 +175,15 @@ const state = {
1559: true,
},
},
selectedNetworkClientId: NetworkType.mainnet,
networksMetadata: {
[NetworkType.mainnet]: {
EIPS: {
1559: true,
},
status: NetworkStatus.Available,
},
},
gasFeeEstimates: '0x5208',
swapsState: {
quotes: {},
@ -1599,7 +1619,7 @@ const state = {
},
};
export const networkList = [
export const networkList = [
{
blockExplorerUrl: 'https://etherscan.io',
chainId: '0x1',
@ -1673,6 +1693,6 @@ export const networkList = [
rpcUrl: 'https://polygon-rpc.com',
ticker: 'MATIC',
},
]
];
export default state;

View File

@ -0,0 +1,46 @@
diff --git a/dist/KeyringController.d.ts b/dist/KeyringController.d.ts
index 82de83a7bb1ad14bb23f3b6274e0c4d5bb773382..86a09b3f604f6feb26e2c7edbdcb0abebd4bae20 100644
--- a/dist/KeyringController.d.ts
+++ b/dist/KeyringController.d.ts
@@ -1,10 +1,11 @@
import type { TxData, TypedTransaction } from '@ethereumjs/tx';
-import { type MetaMaskKeyring as QRKeyring, type IKeyringState as IQRKeyringState } from '@keystonehq/metamask-airgapped-keyring';
+import type { MetaMaskKeyring as QRKeyring, IKeyringState as IQRKeyringState } from '@keystonehq/metamask-airgapped-keyring';
import type { RestrictedControllerMessenger } from '@metamask/base-controller';
import { BaseControllerV2 } from '@metamask/base-controller';
import type { PersonalMessageParams, TypedMessageParams } from '@metamask/message-manager';
import type { PreferencesController } from '@metamask/preferences-controller';
-import { type Hex, type Keyring, type Json } from '@metamask/utils';
+import type { Hex, Keyring, Json } from '@metamask/utils';
+import type { KeyringController as EthKeyringController } from '@metamask/eth-keyring-controller';
import type { Patch } from 'immer';
declare const name = "KeyringController";
/**
@@ -135,6 +136,10 @@ export declare class KeyringController extends BaseControllerV2<typeof name, Key
* @param opts.state - Initial state to set on this controller.
*/
constructor({ removeIdentity, syncIdentities, updateIdentities, setSelectedAddress, setAccountLabel, encryptor, keyringBuilders, cacheEncryptionKey, messenger, state, }: KeyringControllerOptions);
+ /**
+ * Gets the internal keyring controller.
+ */
+ getEthKeyringController(): EthKeyringController;
/**
* Adds a new account to the default (first) HD seed phrase keyring.
*
diff --git a/dist/KeyringController.js b/dist/KeyringController.js
index 54d39d266425b45ed1008cecb16e78cf831c75d7..0ddded415bf71716c27ed3bf7bd1c5a79b11be13 100644
--- a/dist/KeyringController.js
+++ b/dist/KeyringController.js
@@ -153,6 +153,12 @@ class KeyringController extends base_controller_1.BaseControllerV2 {
this.setSelectedAddress = setSelectedAddress;
this.setAccountLabel = setAccountLabel;
}
+ /**
+ * Gets the internal keyring controller.
+ */
+ getEthKeyringController() {
+ return __classPrivateFieldGet(this, _KeyringController_keyring, "f");
+ }
/**
* Adds a new account to the default (first) HD seed phrase keyring.
*

View File

@ -1,17 +0,0 @@
diff --git a/dist/SignatureController.js b/dist/SignatureController.js
index b58b27e84aa84393afb366d4585c084d0380d21d..0629bcf517db744ccfa40e4d7d8f2829fa95559e 100644
--- a/dist/SignatureController.js
+++ b/dist/SignatureController.js
@@ -237,8 +237,11 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE
yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_requestApproval).call(this, messageParamsWithId, approvalType);
}
catch (error) {
+ signaturePromise.catch(() => {
+ // Expecting reject error but throwing manually rather than waiting
+ });
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
- throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest('User rejected the request.');
+ throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest(`MetaMask ${messageName} Signature: User denied message signature.`);
}
yield signMessage(messageParamsWithId, version, signingOpts);
return signaturePromise;

View File

@ -0,0 +1,26 @@
diff --git a/dist/SignatureController.js b/dist/SignatureController.js
index a2f064efa2a2700db00767daa4ce6bd22b1932c4..17edb51b6c526f27fb4c19f2d2fda3d7140c66b4 100644
--- a/dist/SignatureController.js
+++ b/dist/SignatureController.js
@@ -283,8 +283,11 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE
resultCallbacks = acceptResult.resultCallbacks;
}
catch (_a) {
+ signaturePromise.catch(() => {
+ // Expecting reject error but throwing manually rather than waiting
+ });
__classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_cancelAbstractMessage).call(this, messageManager, messageId);
- throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest('User rejected the request.');
+ throw eth_rpc_errors_1.ethErrors.provider.userRejectedRequest(`MetaMask ${messageName} Signature: User denied message signature.`);
}
yield signMessage(messageParamsWithId, signingOpts);
const signatureResult = yield signaturePromise;
@@ -305,7 +308,7 @@ _SignatureController_keyringController = new WeakMap(), _SignatureController_isE
return __awaiter(this, void 0, void 0, function* () {
return yield __classPrivateFieldGet(this, _SignatureController_instances, "m", _SignatureController_signAbstractMessage).call(this, __classPrivateFieldGet(this, _SignatureController_personalMessageManager, "f"), controller_utils_1.ApprovalType.PersonalSign, msgParams, (cleanMsgParams) => __awaiter(this, void 0, void 0, function* () { return yield __classPrivateFieldGet(this, _SignatureController_keyringController, "f").signPersonalMessage(cleanMsgParams); }));
});
-}, _SignatureController_signTypedMessage = function _SignatureController_signTypedMessage(msgParams,
+}, _SignatureController_signTypedMessage = function _SignatureController_signTypedMessage(msgParams,
/* istanbul ignore next */
opts = { parseJsonData: true }) {
return __awaiter(this, void 0, void 0, function* () {

View File

@ -1,69 +0,0 @@
# Improved yarn audit is patched to work with yarn version 2+. The primary need
# is to retool the script to first use yarn's new audit command and parameters
# as well as to change the process for how it reads the result due to an update
# in returned shape of audit command's data.
diff --git a/bin/improved-yarn-audit b/bin/improved-yarn-audit
index 52df548151aa28289565e3335b2cd7a92fa38325..7e058df6a4a159596df72c9475a36b747580cd98 100755
--- a/bin/improved-yarn-audit
+++ b/bin/improved-yarn-audit
@@ -15,6 +15,7 @@ const { tmpdir } = require("os")
const path = require("path")
const { env, exit, platform } = require("process")
const { createInterface } = require("readline")
+const { Stream } = require("stream")
const GITHUB_ADVISORY_CODE = "GHSA"
@@ -250,7 +251,15 @@ async function iterateOverAuditResults(action) {
const auditResultsFileStream = getAuditResultsFileStream("r")
const iterator = createInterface(auditResultsFileStream)
- iterator.on("line", action)
+ iterator.on("line", async (result) => {
+ const parsed = parseAuditJson(result);
+ const advisories = Stream.Readable.from(
+ Object.values(parsed.advisories).map(advisory => JSON.stringify(advisory))
+ );
+ for await (const data of advisories) {
+ action(data);
+ }
+ });
await new Promise((resolve) => iterator.on("close", resolve))
@@ -305,10 +314,10 @@ async function streamYarnAuditOutput(auditParams, auditResultsFileStream) {
}
async function invokeYarnAudit() {
- const auditParams = ["audit", "--json", `--level=${minSeverityName}`]
+ const auditParams = ["npm", "audit", "--recursive", "--json", `--severity=${minSeverityName}`]
if (ignoreDevDependencies) {
- auditParams.push("--groups=dependencies")
+ auditParams.push("--environment=production")
}
cleanupAuditResultsFile()
@@ -420,17 +429,17 @@ async function runAuditReport() {
let devDependencyAdvisories = []
let devDependencyAdvisoryIds = []
- await iterateOverAuditResults((resultJson) => {
- const potentialResult = parseAuditJson(resultJson)
+ await iterateOverAuditResults((resultJsonString) => {
+ const potentialResult = parseAuditJson(resultJsonString);
if (
- typeof potentialResult.type !== "string" ||
- potentialResult.type !== "auditAdvisory"
+ typeof potentialResult.github_advisory_id !== "string"
) {
return
}
- const result = potentialResult.data.advisory
+
+ const result = potentialResult;
allAdvisories.push(result)

View File

@ -0,0 +1,80 @@
diff --git a/lib/jsdom/browser/Window.js b/lib/jsdom/browser/Window.js
index 9b2d75f55050f865382e2f0e8a88f066e0bff2da..d4a635da8eae02eaf0543693356f1252f8b6bac0 100644
--- a/lib/jsdom/browser/Window.js
+++ b/lib/jsdom/browser/Window.js
@@ -24,7 +24,6 @@ const External = require("../living/generated/External");
const Navigator = require("../living/generated/Navigator");
const Performance = require("../living/generated/Performance");
const Screen = require("../living/generated/Screen");
-const Storage = require("../living/generated/Storage");
const Selection = require("../living/generated/Selection");
const reportException = require("../living/helpers/runtime-script-errors");
const { getCurrentEventHandlerValue } = require("../living/helpers/create-event-accessor.js");
@@ -285,40 +284,6 @@ function Window(options) {
this._pretendToBeVisual = options.pretendToBeVisual;
this._storageQuota = options.storageQuota;
- // Some properties (such as localStorage and sessionStorage) share data
- // between windows in the same origin. This object is intended
- // to contain such data.
- if (options.commonForOrigin && options.commonForOrigin[documentOrigin]) {
- this._commonForOrigin = options.commonForOrigin;
- } else {
- this._commonForOrigin = {
- [documentOrigin]: {
- localStorageArea: new Map(),
- sessionStorageArea: new Map(),
- windowsInSameOrigin: [this]
- }
- };
- }
-
- this._currentOriginData = this._commonForOrigin[documentOrigin];
-
- // ### WEB STORAGE
-
- this._localStorage = Storage.create(window, [], {
- associatedWindow: this,
- storageArea: this._currentOriginData.localStorageArea,
- type: "localStorage",
- url: this._document.documentURI,
- storageQuota: this._storageQuota
- });
- this._sessionStorage = Storage.create(window, [], {
- associatedWindow: this,
- storageArea: this._currentOriginData.sessionStorageArea,
- type: "sessionStorage",
- url: this._document.documentURI,
- storageQuota: this._storageQuota
- });
-
// ### SELECTION
// https://w3c.github.io/selection-api/#dfn-selection
@@ -416,26 +381,6 @@ function Window(options) {
configurable: true
});
},
- get localStorage() {
- if (idlUtils.implForWrapper(this._document)._origin === "null") {
- throw DOMException.create(window, [
- "localStorage is not available for opaque origins",
- "SecurityError"
- ]);
- }
-
- return this._localStorage;
- },
- get sessionStorage() {
- if (idlUtils.implForWrapper(this._document)._origin === "null") {
- throw DOMException.create(window, [
- "sessionStorage is not available for opaque origins",
- "SecurityError"
- ]);
- }
-
- return this._sessionStorage;
- },
get customElements() {
return customElementRegistry;
},

View File

@ -0,0 +1,18 @@
diff --git a/src/loadPolicy.js b/src/loadPolicy.js
index ef71923f9282d6a5e9f74e6ec6fa0516f28f508b..0118fda7e1b0fa461ec01ceff8d7112d072f3dfb 100644
--- a/src/loadPolicy.js
+++ b/src/loadPolicy.js
@@ -33,10 +33,9 @@ async function loadPolicyAndApplyOverrides({ debugMode, policyPath, policyOverri
}
const policyOverride = await readPolicyFile({ debugMode, policyPath: policyOverridePath })
lavamoatPolicy = mergePolicy(policy, policyOverride)
- // TODO: Only write if merge results in changes.
- // Would have to make a deep equal check on whole policy, which is a waste of time.
- // mergePolicy() should be able to do it in one pass.
- fs.writeFileSync(policyPath, jsonStringify(lavamoatPolicy, { space: 2 }))
+ // Skip policy write step to prevent intermittent build failures
+ // The extension validates the policy in a separate step, we don't need it
+ // to be written to disk here.
}
return lavamoatPolicy
}

View File

@ -1,48 +0,0 @@
# Lockfile lint's current version does not work with the updated structure of the yarn v2 lockfile
# This patch updates it so that it can parse and read the lockfile entries.
diff --git a/src/ParseLockfile.js b/src/ParseLockfile.js
index 0f0c951027ec83c61769bb6a48943420dff133b8..bad2d251cf376bf3ef4b444a0d49f03a602d7a6e 100644
--- a/src/ParseLockfile.js
+++ b/src/ParseLockfile.js
@@ -21,13 +21,13 @@ const {
* @return boolean
*/
function checkSampleContent (lockfile) {
- const [sampleKey, sampleValue] = Object.entries(lockfile)[0]
+ const [sampleKey, sampleValue] = Object.entries(lockfile)[1]
return (
sampleKey.match(/.*@.*/) &&
(sampleValue &&
typeof sampleValue === 'object' &&
sampleValue.hasOwnProperty('version') &&
- sampleValue.hasOwnProperty('resolved'))
+ sampleValue.hasOwnProperty('resolution'))
)
}
/**
@@ -41,7 +41,24 @@ function yarnParseAndVerify (lockfileBuffer) {
if (!hasSensibleContent) {
throw Error('Lockfile does not seem to contain a valid dependency list')
}
- return {type: 'success', object: lockfile}
+ const normalized = Object.fromEntries(Object.entries(lockfile).map(([packageName, packageDetails]) => {
+ const resolution = packageDetails.resolution;
+ if (!resolution) {
+ return [packageName, packageDetails];
+ }
+ const splitByAt = resolution.split('@');
+ let resolvedPackageName;
+ let host;
+ if (splitByAt.length > 2 && resolution[0] === '@') {
+ resolvedPackageName = `@${splitByAt[1]}`;
+ host = splitByAt[2];
+ } else {
+ [resolvedPackageName, host] = splitByAt;
+ }
+
+ return [packageName, { ...packageDetails, resolved: host}]
+ }))
+ return {type: 'success', object: normalized}
}
class ParseLockfile {
/**

View File

@ -1,8 +1,8 @@
diff --git a/dist/index.d.ts b/dist/index.d.ts
index 81253d38280bb25de1e36443d919f0e95b3e023c..d2333bf6796ff3ec94f5857d23ef34cc39c9729a 100644
index 66eb3236059f88f73355d4fddef9e06a0169b407..04f067d2bda8af760c0a95ca6b5d85bcdfb2421a 100644
--- a/dist/index.d.ts
+++ b/dist/index.d.ts
@@ -1,10 +1,10 @@
@@ -1,11 +1,12 @@
-import { type ParserOptions } from './parser/index.js';
+import { ParserOptions } from './parser/index.js';
import type { DefaultTreeAdapterMap } from './tree-adapters/default.js';
@ -12,12 +12,15 @@ index 81253d38280bb25de1e36443d919f0e95b3e023c..d2333bf6796ff3ec94f5857d23ef34cc
export type { TreeAdapter, TreeAdapterTypeMap } from './tree-adapters/interface.js';
-export { type ParserOptions, /** @internal */ Parser } from './parser/index.js';
-export { serialize, serializeOuter, type SerializerOptions } from './serializer/index.js';
-export { ERR as ErrorCodes, type ParserError } from './common/error-codes.js';
+export { ParserOptions, /** @internal */ Parser } from './parser/index.js';
+export { serialize, serializeOuter, SerializerOptions } from './serializer/index.js';
export type { ParserError } from './common/error-codes.js';
+export type { ParserError } from './common/error-codes.js';
+export { ERR as ErrorCodes } from './common/error-codes.js';
/** @internal */
export * as foreignContent from './common/foreign-content.js';
@@ -13,7 +13,7 @@ export * as html from './common/html.js';
/** @internal */
@@ -13,7 +14,7 @@ export * as html from './common/html.js';
/** @internal */
export * as Token from './common/token.js';
/** @internal */
@ -27,7 +30,7 @@ index 81253d38280bb25de1e36443d919f0e95b3e023c..d2333bf6796ff3ec94f5857d23ef34cc
* Parses an HTML string.
*
diff --git a/dist/parser/index.d.ts b/dist/parser/index.d.ts
index 50a9bd0c73649e4a78edd0d18b4ee44ae9cdf3b7..df1863e335e64269298dea42a7481b26b9e77581 100644
index 50a9bd0c73649e4a78edd0d18b4ee44ae9cdf3b7..85cc630db81d7a4ebd01691223d81187cdd8adcb 100644
--- a/dist/parser/index.d.ts
+++ b/dist/parser/index.d.ts
@@ -1,10 +1,10 @@
@ -46,18 +49,18 @@ index 50a9bd0c73649e4a78edd0d18b4ee44ae9cdf3b7..df1863e335e64269298dea42a7481b26
INITIAL = 0,
BEFORE_HTML = 1,
diff --git a/dist/serializer/index.d.ts b/dist/serializer/index.d.ts
index d944fae103a245cb84623fd733c91cc7e79f72f1..432464c9e05ecfd93c66526bcf4f0c81f09bf00d 100644
index bf759e63ba1be31a2ab14884fcfd6bd3e8ecd2d7..839e21e45dc13e678c9874c51524a8ed1a463591 100644
--- a/dist/serializer/index.d.ts
+++ b/dist/serializer/index.d.ts
@@ -1,5 +1,5 @@
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface';
import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js';
-import { type DefaultTreeAdapterMap } from '../tree-adapters/default.js';
+import { DefaultTreeAdapterMap } from '../tree-adapters/default.js';
export interface SerializerOptions<T extends TreeAdapterTypeMap> {
/**
* Specifies input tree format.
diff --git a/dist/tokenizer/index.d.ts b/dist/tokenizer/index.d.ts
index de6e234cfb36bb3a4b928c47ab0d0fdf0b4311e1..89e2484b43f3487f3f157435a283ba932a879210 100644
index 5afab96d6499bb0bba706aee7d2f153647db8713..3680d732d8a3570b6a1d9336c0ebdf8fe4f392db 100644
--- a/dist/tokenizer/index.d.ts
+++ b/dist/tokenizer/index.d.ts
@@ -1,6 +1,6 @@
@ -69,8 +72,18 @@ index de6e234cfb36bb3a4b928c47ab0d0fdf0b4311e1..89e2484b43f3487f3f157435a283ba93
declare const enum State {
DATA = 0,
RCDATA = 1,
diff --git a/dist/tree-adapters/default.d.ts b/dist/tree-adapters/default.d.ts
index 547d714bdc5a664ba1414c16bdfc9247c71ab4de..d96a23d6ce3e80d78da21d958c059de194bb5146 100644
--- a/dist/tree-adapters/default.d.ts
+++ b/dist/tree-adapters/default.d.ts
@@ -1,4 +1,4 @@
-import { DOCUMENT_MODE, type NS } from '../common/html.js';
+import { DOCUMENT_MODE, NS } from '../common/html.js';
import type { Attribute, Location, ElementLocation } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from './interface.js';
export interface Document {
diff --git a/dist/tokenizer/preprocessor.d.ts b/dist/tokenizer/preprocessor.d.ts
index e74a590783b4688fb6498b019c1a75cfd9ac23e7..d145dcce97b104830e5b3d7f57f3a63377bbf89c 100644
index e74a590783b4688fb6498b019c1a75cfd9ac23e7..7350e44b4ed952bcb8f167e30a94958e9fcf743a 100644
--- a/dist/tokenizer/preprocessor.d.ts
+++ b/dist/tokenizer/preprocessor.d.ts
@@ -1,4 +1,4 @@
@ -79,13 +92,3 @@ index e74a590783b4688fb6498b019c1a75cfd9ac23e7..d145dcce97b104830e5b3d7f57f3a633
export declare class Preprocessor {
private handler;
html: string;
diff --git a/dist/tree-adapters/default.d.ts b/dist/tree-adapters/default.d.ts
index cccdf8f86d2295b3059c42943d896e81691c8419..d70b8fa2562f4dc6415d7ebaaba6cb322f66e9cb 100644
--- a/dist/tree-adapters/default.d.ts
+++ b/dist/tree-adapters/default.d.ts
@@ -1,4 +1,4 @@
-import { DOCUMENT_MODE, type NS } from '../common/html.js';
+import { DOCUMENT_MODE, NS } from '../common/html.js';
import type { Attribute, Location, ElementLocation } from '../common/token.js';
import type { TreeAdapter, TreeAdapterTypeMap } from './interface.js';
export declare enum NodeType {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

881
.yarn/releases/yarn-4.0.0-rc.48.cjs vendored Executable file

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,7 @@
compressionLevel: mixed
enableGlobalCache: false
enableScripts: false
enableTelemetry: false
@ -8,12 +12,101 @@ logFilters:
nodeLinker: node-modules
npmAuditIgnoreAdvisories:
### Advisories:
# Issue: yargs-parser Vulnerable to Prototype Pollution
# URL - https://github.com/advisories/GHSA-p9pc-299p-vxgp
# The affected version (<5.0.0) is only included via @ensdomains/ens via
# 'solc' which is not used in the imports we use from this package.
- 1088783
# Issue: protobufjs Prototype Pollution vulnerability
# URL - https://github.com/advisories/GHSA-h755-8qp9-cq85
# Not easily patched. Minimally effects the extension due to usage of
# LavaMoat lockdown.
- 1092429
# Issue: Regular Expression Denial of Service (ReDOS)
# URL: https://github.com/advisories/GHSA-257v-vj4p-3w2h
# color-string is listed as a dependency of 'color' which is brought in by
# @metamask/jazzicon v2.0.0 but there is work done on that repository to
# remove the color dependency. We should upgrade
- 1089718
# Issue: semver vulnerable to Regular Expression Denial of Service
# URL: https://github.com/advisories/GHSA-c2qf-rxjj-qqgw
# semver is used in the solidity compiler portion of @truffle/codec that does
# not appear to be used.
- 1092461
### Package Deprecations:
# React-tippy brings in popper.js and react-tippy has not been updated in
# three years.
- 'popper.js (deprecation)'
# React-router is out of date and brings in the following deprecated package
- 'mini-create-react-context (deprecation)'
# The affected version, which is less than 7.0.0, is brought in by
# ethereumjs-wallet version 0.6.5 used in the extension but only in a single
# file app/scripts/account-import-strategies/index.js, which may be easy to
# upgrade.
- 'uuid (deprecation)'
# @npmcli/move-file is brought in via CopyWebpackPlugin used in the storybook
# main.js file, which can be upgraded to remove this dependency in favor of
# @npmcli/fs
- '@npmcli/move-file (deprecation)'
# Upgrading babel will result in the following deprecated packages being
# updated:
- 'core-js (deprecation)'
# Material UI dependencies are planned for removal
- '@material-ui/core (deprecation)'
- '@material-ui/styles (deprecation)'
- '@material-ui/system (deprecation)'
# @ensdomains/ens should be explored for upgrade. The following packages are
# deprecated and would be resolved by upgrading to newer versions of
# ensdomains packages:
- '@ensdomains/ens (deprecation)'
- '@ensdomains/resolver (deprecation)'
- 'testrpc (deprecation)'
# Dependencies brought in by @truffle/decoder that are deprecated:
- 'cids (deprecation)' # via @ensdomains/content-hash
- 'multibase (deprecation)' # via cids
- 'multicodec (deprecation)' # via cids
# MetaMask owned repositories brought in by other MetaMask dependencies that
# can be resolved by updating the versions throughout the dependency tree
- 'eth-sig-util (deprecation)' # via @metamask/eth-ledger-bridge-keyring
- '@metamask/controller-utils (deprecation)' # via @metamask/phishin-controller
- 'safe-event-emitter (deprecation)' # via eth-block-tracker and others
# @metamask-institutional relies upon crypto which is deprecated
- 'crypto (deprecation)'
# @metamask/providers uses webextension-polyfill-ts which has been moved to
# @types/webextension-polyfill
- 'webextension-polyfill-ts (deprecation)'
npmRegistries:
'https://npm.pkg.github.com':
npmAlwaysAuth: true
npmAuthToken: '${GITHUB_PACKAGE_READ_TOKEN-}'
npmScopes:
metamask:
npmRegistryServer: '${METAMASK_NPM_REGISTRY:-https://registry.yarnpkg.com}'
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-allow-scripts.cjs
spec: "https://raw.githubusercontent.com/LavaMoat/LavaMoat/main/packages/yarn-plugin-allow-scripts/bundles/@yarnpkg/plugin-allow-scripts.js"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
spec: 'https://raw.githubusercontent.com/LavaMoat/LavaMoat/main/packages/yarn-plugin-allow-scripts/bundles/@yarnpkg/plugin-allow-scripts.js'
- path: .yarn/plugins/@yarnpkg/plugin-engines.cjs
spec: "https://raw.githubusercontent.com/devoto13/yarn-plugin-engines/main/bundles/%40yarnpkg/plugin-engines.js"
spec: 'https://raw.githubusercontent.com/devoto13/yarn-plugin-engines/main/bundles/%40yarnpkg/plugin-engines.js'
yarnPath: .yarn/releases/yarn-3.2.4.cjs
yarnPath: .yarn/releases/yarn-4.0.0-rc.48.cjs

View File

@ -14,11 +14,11 @@ To learn how to contribute to the MetaMask project itself, visit our [Internal D
## Building locally
- Install [Node.js](https://nodejs.org) version 16
- Install [Node.js](https://nodejs.org) version 18
- If you are using [nvm](https://github.com/nvm-sh/nvm#installing-and-updating) (recommended) running `nvm use` will automatically choose the right node version for you.
- Install [Yarn v3](https://yarnpkg.com/getting-started/install)
- ONLY follow the steps in the "Install Corepack" and "Updating the global Yarn version" sections
- DO NOT take any of the steps in the "Initializing your project", "Updating to the latest versions" or "Installing the latest build fresh from master" sections. These steps could result in your repo being reset or installing the wrong yarn version, which can break your build.
- ONLY follow the steps in the "Install Corepack" and "Updating the global Yarn version" sections
- DO NOT take any of the steps in the "Initializing your project", "Updating to the latest versions" or "Installing the latest build fresh from master" sections. These steps could result in your repo being reset or installing the wrong yarn version, which can break your build.
- Duplicate `.metamaskrc.dist` within the root and rename it to `.metamaskrc`
- Replace the `INFURA_PROJECT_ID` value with your own personal [Infura Project ID](https://infura.io/docs).
- If debugging MetaMetrics, you'll need to add a value for `SEGMENT_WRITE_KEY` [Segment write key](https://segment.com/docs/connections/find-writekey/), see [Developing on MetaMask - Segment](./development/README.md#segment).

View File

@ -205,9 +205,6 @@
"deleteNetwork": {
"message": "አውታረ መረብ ይሰረዝ?"
},
"deleteNetworkDescription": {
"message": "ይህን አውታረ መረብ ለመሰረዝ እንደሚፈልጉ እርግጠኛ ነዎት?"
},
"details": {
"message": "ዝርዝሮች"
},
@ -545,9 +542,6 @@
"privateNetwork": {
"message": "የግል አውታረ መረብ"
},
"queue": {
"message": "ወረፋ"
},
"readdToken": {
"message": "በመለያ አማራጮችዎ ምናሌ ውስጥ ወደ “ተለዋጭ ስም አክል” በመግባት ለወደፊቱ ይህን ተለዋጭ ስም መልሰው ማከል ይችላሉ።"
},

View File

@ -218,9 +218,6 @@
"deleteNetwork": {
"message": "هل تريد حذف الشبكة؟"
},
"deleteNetworkDescription": {
"message": "هل أنت متأكد أنك تريد حذف هذه الشبكة؟"
},
"details": {
"message": "التفاصيل"
},
@ -557,9 +554,6 @@
"privateNetwork": {
"message": "شبكة خاصة"
},
"queue": {
"message": "اللائحة"
},
"readdToken": {
"message": "يمكنك إضافة هذه العملة الرمزية مرة أخرى في المستقبل من خلال الانتقال إلى \"إضافة عملة رمزية\" في قائمة خيارات الحسابات الخاصة بك."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Да се изтрие ли мрежата?"
},
"deleteNetworkDescription": {
"message": "Наистина ли искате да изтриете тази мрежа?"
},
"details": {
"message": "Подробности"
},
@ -556,9 +553,6 @@
"privateNetwork": {
"message": "Частна мрежа"
},
"queue": {
"message": "Опашка"
},
"readdToken": {
"message": "Можете да добавите този жетон в бъдеще, като отидете на „Добавяне на жетон“ в менюто с опции на акаунти."
},

View File

@ -211,9 +211,6 @@
"deleteNetwork": {
"message": "নেটওয়ার্ক মুছবেন?"
},
"deleteNetworkDescription": {
"message": "আপনি কি এই নেটওয়ার্কটি মোছার বিষয়ে নিশ্চিত?"
},
"details": {
"message": "বিশদ বিবরণ"
},
@ -554,9 +551,6 @@
"privateNetwork": {
"message": "ব্যক্তিগত নেটওয়ার্ক"
},
"queue": {
"message": "অপেক্ষমাণ"
},
"readdToken": {
"message": "আপনি আপনার অ্যাকাউন্টস বিকল্পের মেনুতে \"টোকেনগুলি যোগ করুন\" এ গিয়ে ভবিষ্যতে আবার এই টোকেনটি যোগ করতে পারবেন। "
},

View File

@ -211,9 +211,6 @@
"deleteNetwork": {
"message": "Esborrar Xarxa?"
},
"deleteNetworkDescription": {
"message": "Estàs segur que vols eliminar aquesta xarxa?"
},
"details": {
"message": "Detalls"
},
@ -541,9 +538,6 @@
"privateNetwork": {
"message": "Xarxa privada"
},
"queue": {
"message": "Cua"
},
"readdToken": {
"message": "Pots tornar a afegir aquesta fitxa en el futur anant a \"Afegir fitxa\" al menu d'opcions dels teus comptes."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Slet Netværk?"
},
"deleteNetworkDescription": {
"message": "Er du sikker på, at du vil slette dette netværk?"
},
"details": {
"message": "Detaljer"
},
@ -541,9 +538,6 @@
"privateNetwork": {
"message": "Privat netværk"
},
"queue": {
"message": "Kø"
},
"readdToken": {
"message": "Du kan tilføje denne token i fremtiden, ved at gå til \"Tilføj token\" under dine valgmenuen for dine konti."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Kontakt hinzufügen"
},
"addCustomIPFSGateway": {
"message": "Benutzerdefiniertes IPFS-Gateway hinzufügen"
},
"addCustomIPFSGatewayDescription": {
"message": "Das IPFS-Gateway ermöglicht es, auf von Dritten gehostete Daten zuzugreifen und diese einzusehen. Sie können ein benutzerdefiniertes IPFS-Gateway hinzufügen oder weiterhin das Standard-Gateway verwenden."
},
"addCustomNetwork": {
"message": "Benutzerdefiniertes Netzwerk hinzufügen"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Netzwerk löschen?"
},
"deleteNetworkDescription": {
"message": "Sind Sie sicher, dass Sie dieses Netzwerk löschen möchten?"
},
"deposit": {
"message": "Einzahlung"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " In den Einstellungen aktivieren."
},
"enableOpenSeaAPI": {
"message": "OpenSea API aktivieren"
},
"enableOpenSeaAPIDescription": {
"message": "Verwenden Sie die OpenSea's API, um NFT-Daten abzurufen. Die NFT-Auto-Erkennung basiert auf der OpenSea's API und wird nicht verfügbar sein, wenn diese deaktiviert ist."
},
"enableToken": {
"message": "$1 aktivieren",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Öffentliche Adresse"
},
"queue": {
"message": "Warteschlange"
},
"queued": {
"message": "In Warteschlange"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Seed-Phrase anzeigen"
},
"reviewSpendingCap": {
"message": "Überprüfen SIe Ihre Ausgabegrenze"
},
"revokeAllTokensTitle": {
"message": "Erlaubnis zum Zugriff auf alle Ihre $1 sowie deren Übertragung entziehen?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "$1 ohne Ausgabenlimit genehmigen",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Eine Ausgabegrenze für Ihr $1 einrichten",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Einstellungen"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Hoppla! Da hat etwas nicht geklappt."
},
"source": {
"message": "Quelle"
},
"speedUp": {
"message": "Beschleunigen"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Diese URL wird derzeit vom $1-Netzwerk verwendet."
},
"useDefault": {
"message": "Standardeinstellungen verwenden"
},
"useMultiAccountBalanceChecker": {
"message": "Kontoguthaben-Anfragen sammeln"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Wir sammeln Konten und fragen bei Infura an, um Ihr Guthaben anzuzeigen. Wenn Sie dies deaktivieren, werden nur aktive Konten abgefragt. Einige Dapps funktionieren nicht, wenn Sie Ihr Wallet nicht verbinden."
},
"useNftDetection": {
"message": "NFTs automatisch erkennen"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Προσθήκη επαφής"
},
"addCustomIPFSGateway": {
"message": "Προσθήκη προσαρμοσμένης πύλης IPFS"
},
"addCustomIPFSGatewayDescription": {
"message": "Η πύλη IPFS επιτρέπει την πρόσβαση και την προβολή δεδομένων που φιλοξενούνται από τρίτους. Μπορείτε να προσθέσετε μια προσαρμοσμένη πύλη IPFS ή να συνεχίσετε να χρησιμοποιείτε την προεπιλεγμένη."
},
"addCustomNetwork": {
"message": "Προσθήκη προσαρμοσμένου δικτύου"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Διαγραφή Δικτύου;"
},
"deleteNetworkDescription": {
"message": "Θέλετε σίγουρα να διαγράψετε αυτό το δίκτυο;"
},
"deposit": {
"message": "Κατάθεση"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Ενεργοποίηση του από τις Ρυθμίσεις."
},
"enableOpenSeaAPI": {
"message": "Ενεργοποίηση OpenSea API"
},
"enableOpenSeaAPIDescription": {
"message": "Χρησιμοποιήστε το API OpenSea για λήψη δεδομένων NFT. Η αυτόματη ανίχνευση NFT βασίζεται στο API του OpenSea, και δεν θα είναι διαθέσιμη όταν αυτό είναι απενεργοποιημένο."
},
"enableToken": {
"message": "ενεργοποίηση $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Δημόσια Διεύθυνση"
},
"queue": {
"message": "Ουρά"
},
"queued": {
"message": "Σε Αναμονή"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Αποκάλυψη φράσης ανάκτησης"
},
"reviewSpendingCap": {
"message": "Επανεξετάστε το όριο δαπανών σας"
},
"revokeAllTokensTitle": {
"message": "Ανάκληση άδειας πρόσβασης σε όλα σας τα $1;",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3137,10 +3116,6 @@
"message": "Έγκριση $1 χωρίς όριο δαπανών",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Ορίστε ένα ανώτατο όριο δαπανών για το $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Ρυθμίσεις"
},
@ -3268,9 +3243,6 @@
"somethingWentWrong": {
"message": "Ουπς! Κάτι πήγε στραβά."
},
"source": {
"message": "Πηγή"
},
"speedUp": {
"message": "Επιτάχυνση"
},
@ -4164,15 +4136,9 @@
"urlExistsErrorMsg": {
"message": "Αυτό το URL χρησιμοποιείται επί του παρόντος από το δίκτυο $1."
},
"useDefault": {
"message": "Χρήση προκαθορισμένου"
},
"useMultiAccountBalanceChecker": {
"message": "Μαζικά αιτήματα υπολοίπου λογαριασμού"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Συγκεντρώνουμε τους λογαριασμούς και ζητάμε από την Infura να εμφανίσει το υπόλοιπό σας. Αν το απενεργοποιήσετε αυτό, θα ζητηθούν μόνο οι ενεργοί λογαριασμοί. Ορισμένες αποκεντρωμένες εφαρμογές δεν θα λειτουργούν αν δεν συνδέσετε το πορτοφόλι σας."
},
"useNftDetection": {
"message": "Αυτόματη Ανίχνευση NFT"
},

View File

@ -153,9 +153,6 @@
"accountSelectionRequired": {
"message": "You need to select an account!"
},
"activated": {
"message": "Active"
},
"active": {
"message": "Active"
},
@ -192,12 +189,6 @@
"addContact": {
"message": "Add contact"
},
"addCustomIPFSGateway": {
"message": "Add custom IPFS gateway"
},
"addCustomIPFSGatewayDescription": {
"message": "The IPFS gateway makes it possible to access and view data hosted by third parties. You can add a custom IPFS gateway or continue using the default."
},
"addCustomNetwork": {
"message": "Add custom network"
},
@ -249,6 +240,12 @@
"addFromAListOfPopularNetworks": {
"message": "Add from a list of popular networks or add a network manually. Only interact with the entities you trust."
},
"addHardwareWallet": {
"message": "Add hardware wallet"
},
"addIPFSGateway": {
"message": "Add your preferred IPFS gateway"
},
"addMemo": {
"message": "Add memo"
},
@ -366,13 +363,13 @@
"allowThisSiteTo": {
"message": "Allow this site to:"
},
"allowThisSnapTo": {
"message": "Allow this snap to:"
},
"allowWithdrawAndSpend": {
"message": "Allow $1 to withdraw and spend up to the following amount:",
"description": "The url of the site that requested permission to 'withdraw and spend'"
},
"amlCompliance": {
"message": "AML/CFT Compliance"
},
"amount": {
"message": "Amount"
},
@ -525,6 +522,9 @@
"message": "This is a beta version. Please report bugs $1",
"description": "$1 represents the word 'here' in a hyperlink"
},
"betaMetamaskInstitutionalVersion": {
"message": "MetaMask Institutional Beta Version"
},
"betaMetamaskVersion": {
"message": "MetaMask Beta Version"
},
@ -562,6 +562,30 @@
"blockaid": {
"message": "Blockaid"
},
"blockaidDescriptionApproveFarming": {
"message": "If you approve this request, a third party known for scams might take all your assets."
},
"blockaidDescriptionBlurFarming": {
"message": "If you approve this request, someone can steal your assets listed on Blur."
},
"blockaidDescriptionMaliciousDomain": {
"message": "You're interacting with a malicious domain. If you approve this request, you might lose your assets."
},
"blockaidDescriptionMightLoseAssets": {
"message": "If you approve this request, you might lose your assets."
},
"blockaidDescriptionSeaportFarming": {
"message": "If you approve this request, someone can steal your assets listed on OpenSea."
},
"blockaidDescriptionTransferFarming": {
"message": "If you approve this request, a third party known for scams will take all your assets."
},
"blockaidTitleDeceptive": {
"message": "This is a deceptive request"
},
"blockaidTitleSuspicious": {
"message": "This is a suspicious request"
},
"blockies": {
"message": "Blockies"
},
@ -587,6 +611,10 @@
"message": "Buy $1",
"description": "$1 is the ticker symbol of a an asset the user is being prompted to purchase"
},
"buyMoreAsset": {
"message": "Buy more $1",
"description": "$1 is the ticker symbol of a an asset the user is being prompted to purchase"
},
"buyNow": {
"message": "Buy Now"
},
@ -667,45 +695,9 @@
"close": {
"message": "Close"
},
"codefiCompliance": {
"message": "Codefi Compliance"
},
"coingecko": {
"message": "CoinGecko"
},
"complianceActivatedDesc": {
"message": "You can now use compliance in MetaMask Institutional. Receiving AML/CFT analysis within the confirmation screen on all the addresses you interact with."
},
"complianceActivatedTitle": {
"message": "Your compliance feature is activated"
},
"complianceBlurb0": {
"message": "DeFi raises AML/CFT risk for institutions, given the decentralised pools and pseudonymous counterparties."
},
"complianceBlurb1": {
"message": "Codefi Compliance is the only product capable of running AML/CFT analysis on DeFi pools. This allows you to identify and avoid pools and counterparties that fail your risk setting."
},
"complianceBlurbStep1": {
"message": "Sign up to Codefi Compliance below"
},
"complianceBlurbStep2": {
"message": "Create an organisation"
},
"complianceBlurbStep3": {
"message": "Create a project"
},
"complianceBlurbStep4": {
"message": "Set your compliance settings"
},
"complianceBlurbStep5": {
"message": "Click the \"Enable Compliance in MMI\" button"
},
"complianceBlurpStep0": {
"message": "Steps to enable AML/CFT Compliance:"
},
"complianceSettingsExplanation": {
"message": "Change your settings or view reports by opening up Codefi Compliance or disconnect below."
},
"configureSnapPopupDescription": {
"message": "You're now leaving MetaMask to configure this snap."
},
@ -829,9 +821,6 @@
"connectingToSepolia": {
"message": "Connecting to Sepolia test network"
},
"connectionError": {
"message": "Connection error"
},
"connectionFailed": {
"message": "Connection failed"
},
@ -979,6 +968,12 @@
"custodianAccount": {
"message": "Custodian account"
},
"custodianAccountAddedDesc": {
"message": "You can now use your custodian accounts in MetaMask Institutional."
},
"custodianAccountAddedTitle": {
"message": "Selected custodian accounts have been added."
},
"custodianReplaceRefreshTokenChangedFailed": {
"message": "Please go to $1 and click the 'Connect to MMI' button within their user interface to connect your accounts to MMI again."
},
@ -1052,6 +1047,9 @@
"customerSupport": {
"message": "customer support"
},
"dappRequestedSpendingCap": {
"message": "Site requested spending cap"
},
"dappSuggested": {
"message": "Site suggested"
},
@ -1122,8 +1120,12 @@
"deleteNetwork": {
"message": "Delete network?"
},
"deleteNetworkDescription": {
"message": "Are you sure you want to delete this network?"
"deleteNetworkIntro": {
"message": "If you delete this network, you will need to add it again to view your assets in this network"
},
"deleteNetworkTitle": {
"message": "Delete $1 network?",
"description": "$1 represents the name of the network"
},
"deposit": {
"message": "Deposit"
@ -1271,6 +1273,12 @@
"dismissReminderField": {
"message": "Dismiss Secret Recovery Phrase backup reminder"
},
"displayNftMedia": {
"message": "Display NFT media"
},
"displayNftMediaDescription": {
"message": "Displaying NFT media and data exposes your IP address to OpenSea or other third parties. This can allow attackers to associate your IP address with your Ethereum address. NFT autodetection relies on this setting, and won't be available when this is turned off."
},
"domain": {
"message": "Domain"
},
@ -1393,15 +1401,12 @@
"enableAutoDetect": {
"message": " Enable autodetect"
},
"enableForAllNetworks": {
"message": "Enable for all networks"
},
"enableFromSettings": {
"message": " Enable it from Settings."
},
"enableOpenSeaAPI": {
"message": "Enable OpenSea API"
},
"enableOpenSeaAPIDescription": {
"message": "Use OpenSea's API to fetch NFT data. NFT auto-detection relies on OpenSea's API, and will not be available when this is turned off."
},
"enableSmartSwaps": {
"message": "Enable smart swaps"
},
@ -1429,6 +1434,24 @@
"enhancedTokenDetectionAlertMessage": {
"message": "Enhanced token detection is currently available on $1. $2"
},
"ensDomainsSettingDescriptionIntro": {
"message": "MetaMask lets you see ENS domains like \"https://metamask.eth\" right in your browser's address bar. Here's how it works:"
},
"ensDomainsSettingDescriptionOutro": {
"message": "Regular browsers don't usually handle ENS or IPFS addresses, but MetaMask helps with that. Using this feature might share your IP address with IPFS third-party services."
},
"ensDomainsSettingDescriptionPoint1": {
"message": "MetaMask checks with Ethereum's ENS contract to find the code connected to the ENS name."
},
"ensDomainsSettingDescriptionPoint2": {
"message": "If the code is linked to IPFS, it gets the content from the IPFS network."
},
"ensDomainsSettingDescriptionPoint3": {
"message": "Then, you can see the content, usually a website or something similar."
},
"ensDomainsSettingTitle": {
"message": "Show ENS domains in address bar"
},
"ensIllegalCharacter": {
"message": "Illegal character for ENS."
},
@ -1743,9 +1766,6 @@
"hardware": {
"message": "Hardware"
},
"hardwareWallet": {
"message": "Hardware wallet"
},
"hardwareWalletConnected": {
"message": "Hardware wallet connected"
},
@ -1759,8 +1779,11 @@
"hardwareWallets": {
"message": "Connect a hardware wallet"
},
"hardwareWalletsInfo": {
"message": "Hardware wallet integrations use API calls to external servers, which can see your IP address and the smart contract addresses you interact with."
},
"hardwareWalletsMsg": {
"message": "Select a hardware wallet you'd like to use with MetaMask."
"message": "Select a hardware wallet you would like to use with MetaMask."
},
"here": {
"message": "here",
@ -1959,9 +1982,6 @@
"message": "Installed on $1",
"description": "$1 is the date when the snap has been installed"
},
"institutionalFeatures": {
"message": "Institutional Features"
},
"insufficientBalance": {
"message": "Insufficient balance."
},
@ -2042,6 +2062,22 @@
"invalidSeedPhraseCaseSensitive": {
"message": "Invalid input! Secret Recovery Phrase is case sensitive."
},
"ipfsGateway": {
"message": "IPFS gateway"
},
"ipfsGatewayDescription": {
"message": "MetaMask uses third-party services to show images of your NFTs stored on IPFS, display information related to ENS addresses entered in your browser's address bar, and fetch icons for different tokens. Your IP address may be exposed to these services when youre using them."
},
"ipfsToggleModalDescriptionOne": {
"message": "We use third-party services to show images of your NFTs stored on IPFS, display information related to ENS addresses entered in your browser's address bar, and fetch icons for different tokens. Your IP address may be exposed to these services when youre using them."
},
"ipfsToggleModalDescriptionTwo": {
"message": "Selecting Confirm turns on IPFS resolution. You can turn it off in $1 at any time.",
"description": "$1 is the method to turn off ipfs"
},
"ipfsToggleModalSettings": {
"message": "Settings > Security and privacy"
},
"jazzAndBlockies": {
"message": "Jazzicons and Blockies are two different styles of unique icons that help you identify an account at a glance."
},
@ -2256,6 +2292,9 @@
"metaMaskConnectStatusParagraphTwo": {
"message": "The connection status button shows if the website youre visiting is connected to your currently selected account."
},
"metamaskInstitutionalVersion": {
"message": "MetaMask Institutional Version"
},
"metamaskSwapsOfflineDescription": {
"message": "MetaMask Swaps is undergoing maintenance. Please check back later."
},
@ -2297,14 +2336,14 @@
"mmiAddToken": {
"message": "The page at $1 would like to authorise the following custodian token in MetaMask Institutional"
},
"mmiAuthenticate": {
"message": "The page at $1 would like to authorise the following projects compliance settings in MetaMask Institutional"
"mmiBuiltAroundTheWorld": {
"message": "MetaMask Institutional is designed and built around the world."
},
"more": {
"message": "more"
},
"moreComingSoon": {
"message": "More coming soon..."
"message": "More providers coming soon"
},
"multipleSnapConnectionWarning": {
"message": "$1 wants to connect with $2 snaps. Only proceed if you trust this website.",
@ -2523,8 +2562,8 @@
"noNFTs": {
"message": "No NFTs yet"
},
"noReport": {
"message": "No Report"
"noNetworksFound": {
"message": "No networks found for the given search query"
},
"noSnaps": {
"message": "You don't have any snaps installed."
@ -2731,6 +2770,21 @@
"notifications22Title": {
"message": "Looking for your account details or the block explorer URL?"
},
"notifications23ActionText": {
"message": "Enable security alerts"
},
"notifications23DescriptionOne": {
"message": "Steer clear of known scams while still preserving your privacy with security alerts powered by Blockaid."
},
"notifications23DescriptionThree": {
"message": "If you enabled security alerts from OpenSea, we've moved you over to this feature."
},
"notifications23DescriptionTwo": {
"message": "Always do your own due diligence before approving requests."
},
"notifications23Title": {
"message": "Stay safe with security alerts"
},
"notifications3ActionText": {
"message": "Read more",
"description": "The 'call to action' on the button, or link, of the 'Stay secure' notification. Upon clicking, users will be taken to a page about security on the metamask support website."
@ -2976,9 +3030,6 @@
"onlyConnectTrust": {
"message": "Only connect with sites you trust."
},
"openCodefiCompliance": {
"message": "Open Codefi Compliance"
},
"openFullScreenForLedgerWebHid": {
"message": "Go to full screen to connect your Ledger.",
"description": "Shown to the user on the confirm screen when they are viewing MetaMask in a popup window but need to connect their ledger via webhid."
@ -3074,9 +3125,6 @@
"message": "You have (1) pending transaction.",
"description": "$1 is count of pending transactions"
},
"percentage": {
"message": "$1%"
},
"permissionRequest": {
"message": "Permission request"
},
@ -3145,6 +3193,14 @@
"message": "Allow the snap to derive arbitrary keys unique to this snap, without exposing them. These keys are separate from your MetaMask account(s) and not related to your private keys or Secret Recovery Phrase. Other snaps cannot access this information.",
"description": "An extended description for the `snap_getEntropy` permission"
},
"permission_lifecycleHooks": {
"message": "Use lifecycle hooks.",
"description": "The description for the `endowment:lifecycle-hooks` permission"
},
"permission_lifecycleHooksDescription": {
"message": "Allow the snap to use lifecycle hooks to run code at specific times during its lifecycle.",
"description": "An extended description for the `endowment:lifecycle-hooks` permission"
},
"permission_longRunning": {
"message": "Run indefinitely.",
"description": "The description for the `endowment:long-running` permission"
@ -3269,9 +3325,6 @@
"portfolioDashboard": {
"message": "Portfolio Dashboard"
},
"portfolioView": {
"message": "Portfolio view"
},
"preferredLedgerConnectionType": {
"message": "Preferred Ledger connection type",
"description": "A header for a dropdown in Settings > Advanced. Appears above the ledgerConnectionPreferenceDescription message"
@ -3317,12 +3370,6 @@
"proceedWithTransaction": {
"message": "I want to proceed anyway"
},
"projectIdInvalid": {
"message": "Provided Project ID is invalid"
},
"projectName": {
"message": "Project Name"
},
"proposedApprovalLimit": {
"message": "Proposed approval limit"
},
@ -3332,9 +3379,6 @@
"publicAddress": {
"message": "Public address"
},
"queue": {
"message": "Queue"
},
"queued": {
"message": "Queued"
},
@ -3444,12 +3488,6 @@
"replace": {
"message": "replace"
},
"reportLastRun": {
"message": "Report last run"
},
"reportLastRunTooltip": {
"message": "The date and time of when the last AML/CFT report was run"
},
"requestFlaggedAsMaliciousFallbackCopyReason": {
"message": "The security provider has not shared additional details"
},
@ -3507,6 +3545,18 @@
"restoreUserDataDescription": {
"message": "You can restore user settings containing preferences and account addresses from a previously backed up JSON file."
},
"resultPageError": {
"message": "Error"
},
"resultPageErrorDefaultMessage": {
"message": "The operation failed."
},
"resultPageSuccess": {
"message": "Success"
},
"resultPageSuccessDefaultMessage": {
"message": "The operation completed successfully."
},
"retryTransaction": {
"message": "Retry transaction"
},
@ -3550,9 +3600,6 @@
"revealTheSeedPhrase": {
"message": "Reveal seed phrase"
},
"reviewSpendingCap": {
"message": "Review the spending cap for your"
},
"revokeAllTokensTitle": {
"message": "Revoke permission to access and transfer all of your $1?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3569,6 +3616,9 @@
"message": "This revokes the permission for a third party to access and transfer all of your NFTs from $1 without further notice.",
"description": "$1 is a link to contract on the block explorer when we're not able to retrieve a erc721 or erc1155 name"
},
"revokePermission": {
"message": "Revoke permission"
},
"revokeSpendingCap": {
"message": "Revoke spending cap for your $1",
"description": "$1 is a token symbol"
@ -3576,18 +3626,9 @@
"revokeSpendingCapTooltipText": {
"message": "This third party will be unable to spend any more of your current or future tokens."
},
"riskRating": {
"message": "Risk rating"
},
"riskRatingTooltip": {
"message": "The risk rating of the address you are interacting with based on your risk settings"
},
"rpcUrl": {
"message": "New RPC URL"
},
"runReport": {
"message": "Run report"
},
"safeTransferFrom": {
"message": "Safe transfer from"
},
@ -3627,9 +3668,25 @@
"securityAlert": {
"message": "Security alert from $1 and $2"
},
"securityAlerts": {
"message": "Security alerts"
},
"securityAlertsDescription1": {
"message": "This feature alerts you to malicious activity by locally reviewing your transactions and signature requests. Your data isn't shared with the third parties providing this service. Always do your own due diligence before approving any requests. There's no guarantee that this feature will detect all malicious activity."
},
"securityAlertsDescription2": {
"message": "Always be sure to do your own due diligence before approving any requests. There's no guarantee all mailcious activity will be detected by this feature."
},
"securityAndPrivacy": {
"message": "Security & privacy"
},
"securityProviderAdviceBy": {
"message": "Security advice by $1",
"description": "The security provider that is providing data"
},
"seeDetails": {
"message": "See details"
},
"seedPhraseConfirm": {
"message": "Confirm Secret Recovery Phrase"
},
@ -3690,6 +3747,9 @@
"selectAccounts": {
"message": "Select the account(s) to use on this site"
},
"selectAccountsForSnap": {
"message": "Select the account(s) to use with this snap"
},
"selectAll": {
"message": "Select all"
},
@ -3766,10 +3826,6 @@
"message": "Approve $1 with no spend limit",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Set a spending cap for your $1",
"description": "$1 is a token symbol"
},
"settingAddSnapAccount": {
"message": "Add snap account"
},
@ -3779,10 +3835,6 @@
"settingsSearchMatchingNotFound": {
"message": "No matching results found."
},
"shortVersion": {
"message": "v$1",
"description": "$1 is the version number to show"
},
"show": {
"message": "Show"
},
@ -3805,9 +3857,15 @@
"message": "This relies on $1 which will have access to your Ethereum address and your IP address. $2",
"description": "$1 is the link to etherscan url and $2 is the link to the privacy policy of consensys APIs"
},
"showIncomingTransactionsInformation": {
"message": "This relies on each network which will have access to your Ethereum address and your IP address."
},
"showMore": {
"message": "Show more"
},
"showNft": {
"message": "Show NFT"
},
"showPermissions": {
"message": "Show permissions"
},
@ -3817,9 +3875,6 @@
"showPrivateKeys": {
"message": "Show Private Keys"
},
"showReport": {
"message": "Show report"
},
"showTestnetNetworks": {
"message": "Show test networks"
},
@ -3859,6 +3914,9 @@
"skipAccountSecurityDetails": {
"message": "I understand that until I back up my Secret Recovery Phrase, I may lose my accounts and all of their assets."
},
"smartContracts": {
"message": "Smart contracts"
},
"smartSwap": {
"message": "Smart swap"
},
@ -4049,9 +4107,6 @@
"somethingWentWrong": {
"message": "Oops! Something went wrong."
},
"source": {
"message": "Source"
},
"speedUp": {
"message": "Speed up"
},
@ -4096,6 +4151,9 @@
"message": "Only enter a number that you're comfortable with $1 accessing now or in the future. You can always increase the token limit later.",
"description": "$1 is origin of the site requesting the token limit"
},
"spendingCapRequest": {
"message": "Spending cap request for your $1"
},
"srpInputNumberOfWords": {
"message": "I have a $1-word phrase",
"description": "This is the text for each option in the dropdown where a user selects how many words their secret recovery phrase has during import. The $1 is the number of words (either 12, 15, 18, 21, or 24)."
@ -4447,6 +4505,10 @@
"message": "Includes a $1% MetaMask fee.",
"description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number."
},
"swapIncludesMetaMaskFeeViewAllQuotes": {
"message": "Includes a $1% MetaMask fee $2",
"description": "Provides information about the fee that metamask takes for swaps. $1 is a decimal number and $2 is a link to view all quotes."
},
"swapLearnMore": {
"message": "Learn more about Swaps"
},
@ -5145,14 +5207,17 @@
"urlExistsErrorMsg": {
"message": "This URL is currently used by the $1 network."
},
"useDefault": {
"message": "Use default"
"use4ByteResolution": {
"message": "Decode smart contracts"
},
"use4ByteResolutionDescription": {
"message": "To improve user experience, we customize the activity tab with messages based on the smart contracts you interact with. MetaMask uses a service called 4byte.directory to decode data and show you a version of a smart contact that's easier to read. This helps reduce your chances of approving malicious smart contract actions, but can result in your IP address being shared."
},
"useMultiAccountBalanceChecker": {
"message": "Batch account balance requests"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "We batch accounts and query Infura to responsively show your balances. If you turn this off, only active accounts will be queried. Some dapps won't work unless you connect your wallet."
"useMultiAccountBalanceCheckerSettingDescription": {
"message": "Get faster balance updates by batching account balance requests. This lets us fetch your account balances together, so you get quicker updates for an improved experience. When this feature is off, third parties may be less likely to associate your accounts with each other."
},
"useNftDetection": {
"message": "Autodetect NFTs"
@ -5178,6 +5243,9 @@
"usePhishingDetectionDescription": {
"message": "Display a warning for phishing domains targeting Ethereum users"
},
"useSiteSuggestion": {
"message": "Use site suggestion"
},
"useTokenDetectionPrivacyDesc": {
"message": "Automatically displaying tokens sent to your account involves communication with third party servers to fetch tokens images. Those serves will have access to your IP address."
},
@ -5211,6 +5279,9 @@
"viewAllDetails": {
"message": "View all details"
},
"viewAllQuotes": {
"message": "view all quotes"
},
"viewContact": {
"message": "View contact"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Agregar contacto"
},
"addCustomIPFSGateway": {
"message": "Agregar puerta de enlace IPFS personalizada"
},
"addCustomIPFSGatewayDescription": {
"message": "La puerta de enlace de IPFS permite acceder y visualizar datos alojados por terceros. Puede agregar una puerta de enlace de IPFS personalizada o continuar usando la predeterminada."
},
"addCustomNetwork": {
"message": "Agregar red personalizada"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "¿Eliminar red?"
},
"deleteNetworkDescription": {
"message": "¿Está seguro de que quiere eliminar esta red?"
},
"deposit": {
"message": "Depositar"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Actívela en Configuración."
},
"enableOpenSeaAPI": {
"message": "Habilite el API de OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Utilice la API de OpenSea para obtener los datos de NFT. La autodetección de NFT depende de la API de OpenSea y no estará disponible si la API está desactivada."
},
"enableToken": {
"message": "activar $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Dirección pública"
},
"queue": {
"message": "Cola"
},
"queued": {
"message": "En cola"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Revelar frase semilla"
},
"reviewSpendingCap": {
"message": "Revise su límite de gasto"
},
"revokeAllTokensTitle": {
"message": "¿Revocar el permiso para acceder y transferir todos sus $1?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Aprobar $1 sin límite preestablecido",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Establecer un límite de gasto para su $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Configuración"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Lo lamentamos, se produjo un error."
},
"source": {
"message": "Fuente"
},
"speedUp": {
"message": "Acelerar"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "En este momento, la red $1 está utilizando esta dirección URL."
},
"useDefault": {
"message": "Uso por defecto"
},
"useMultiAccountBalanceChecker": {
"message": "Solicitudes de saldo de cuenta por lotes"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Procesamos cuentas por lotes y consultamos a Infura para mostrar sus saldos de manera receptiva. Si desactiva esta opción, solo se consultarán las cuentas activas. Algunas dapps no funcionarán a menos que conecte su biletera."
},
"useNftDetection": {
"message": "Detección automática de NFT"
},

View File

@ -584,9 +584,6 @@
"deleteNetwork": {
"message": "¿Eliminar red?"
},
"deleteNetworkDescription": {
"message": "¿Está seguro de que quiere eliminar esta red?"
},
"description": {
"message": "Descripción"
},
@ -740,12 +737,6 @@
"enableFromSettings": {
"message": " Actívela en Configuración."
},
"enableOpenSeaAPI": {
"message": "Activar API de OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Utilice la API de OpenSea para obtener los datos de NFT. La autodetección de NFT depende de la API de OpenSea y no estará disponible si la API está desactivada."
},
"enableToken": {
"message": "activar $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -1767,9 +1758,6 @@
"publicAddress": {
"message": "Dirección pública"
},
"queue": {
"message": "Cola"
},
"queued": {
"message": "En cola"
},
@ -2074,9 +2062,6 @@
"somethingWentWrong": {
"message": "Lo lamentamos, se produjo un error."
},
"source": {
"message": "Fuente"
},
"speedUp": {
"message": "Acelerar"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Võrk kustutada?"
},
"deleteNetworkDescription": {
"message": "Olete kindel, et soovite selle võrgu kustutada?"
},
"details": {
"message": "Üksikasjad"
},
@ -550,9 +547,6 @@
"privateNetwork": {
"message": "Privaatvõrk"
},
"queue": {
"message": "Järjekord"
},
"readdToken": {
"message": "Saate selle loa tulevikus tagasi lisada, kui lähete oma kontovalikute menüüs vahelehele „Lisa luba“."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "شبکه حذف شود؟"
},
"deleteNetworkDescription": {
"message": "آیا مطمئن هستید که این شبکه حذف شود؟"
},
"details": {
"message": "جزئیات"
},
@ -560,9 +557,6 @@
"privateNetwork": {
"message": "شبکه شخصی"
},
"queue": {
"message": "صف"
},
"readdToken": {
"message": "شما میتوانید این رمزیاب را دوباره برای آینده با رفتن به گزینه \"Add token\" در مینوی تنظیمات حساب ها، اضافه نمایید."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Poistetaanko verkko?"
},
"deleteNetworkDescription": {
"message": "Haluatko varmasti poistaa tämän verkon?"
},
"details": {
"message": "Tiedot"
},
@ -557,9 +554,6 @@
"privateNetwork": {
"message": "Yksityinen verkko"
},
"queue": {
"message": "Jono"
},
"readdToken": {
"message": "Voit lisätä tämän tietueen myöhemmin takaisin siirtymällä tilisi vaihtoehtovalikon kohtaan ”Lisää tietue”."
},

View File

@ -190,9 +190,6 @@
"deleteNetwork": {
"message": "I-delete ang Network?"
},
"deleteNetworkDescription": {
"message": "Sigurado ka bang gusto mong i-delete ang network na ito?"
},
"details": {
"message": "Mga Detalye"
},
@ -484,9 +481,6 @@
"privateNetwork": {
"message": "Pribadong Network"
},
"queue": {
"message": "I-queue"
},
"readdToken": {
"message": "Puwede mong idagdag ulit ang token na ito sa hinaharap sa pamamagitan ng pagpunta sa “Magdagdag ng token” sa menu ng mga opsyon ng iyong mga accounts."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Ajouter un contact"
},
"addCustomIPFSGateway": {
"message": "Ajouter une passerelle IPFS personnalisée"
},
"addCustomIPFSGatewayDescription": {
"message": "La passerelle IPFS vous permet daccéder aux données hébergées par des tiers et de les visualiser. Vous pouvez ajouter une passerelle IPFS personnalisée ou continuer à utiliser la passerelle par défaut."
},
"addCustomNetwork": {
"message": "Ajouter un réseau personnalisé"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Supprimer le réseau ?"
},
"deleteNetworkDescription": {
"message": "Souhaitez-vous vraiment supprimer ce réseau ?"
},
"deposit": {
"message": "Effectuez un dépôt"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Activez-la depuis les Paramètres."
},
"enableOpenSeaAPI": {
"message": "Activer lAPI OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Utilisez lAPI OpenSea pour récupérer les données de NFT. La détection automatique de NFT repose sur lAPI OpenSea et ne sera pas disponible si elle est désactivée."
},
"enableToken": {
"message": "activer $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Adresse publique"
},
"queue": {
"message": "File dattente"
},
"queued": {
"message": "En attente"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Révéler la phrase mnémonique"
},
"reviewSpendingCap": {
"message": "Modifiez votre plafond de dépenses"
},
"revokeAllTokensTitle": {
"message": "Révoquer lautorisation daccès et de transfert de tous vos $1 ?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Approuver $1 sans limite de dépenses",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Fixez un plafond de dépenses pour vos $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Paramètres"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Oups ! Quelque chose a mal tourné. "
},
"source": {
"message": "Source"
},
"speedUp": {
"message": "Accélérer"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Cette URL est actuellement utilisée par le réseau $1."
},
"useDefault": {
"message": "Utiliser par défaut"
},
"useMultiAccountBalanceChecker": {
"message": "Demandes dinformations concernant le solde de plusieurs comptes"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Nous regroupons vos comptes et demandons à Infura de fournir des informations sur le solde de chacun de vos comptes. Si vous désactivez cette fonction, Infura ne fournira que des informations sur le solde des comptes actifs. Certaines applications décentralisées (dapps) ne fonctionneront pas si vous ne connectez pas votre portefeuille."
},
"useNftDetection": {
"message": "Détection automatique des NFT"
},

View File

@ -103,9 +103,6 @@
"password": {
"message": "પાસવર્ડ"
},
"queue": {
"message": "કતારમાં"
},
"reject": {
"message": "નકારો"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "למחוק את הרשת?"
},
"deleteNetworkDescription": {
"message": "הנך בטוח/ה שברצונך למחוק רשת זו?"
},
"details": {
"message": "פרטים"
},
@ -557,9 +554,6 @@
"privateNetwork": {
"message": "רשת פרטית"
},
"queue": {
"message": "תור"
},
"readdToken": {
"message": "באפשרותך להוסיף טוקן זה בחזרה בעתיד על ידי מעבר אל \"הוסף טוקן\" בתפריט אפשרויות החשבונות שלך."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "संपर्क जोड़ें"
},
"addCustomIPFSGateway": {
"message": "कस्टम IPFS गेटवे जोड़ें"
},
"addCustomIPFSGatewayDescription": {
"message": "IPFS (आईपीएफएस) गेटवे तृतीय पक्षों द्वारा होस्ट किए गए डेटा को एक्सेस करना और देखना संभव बनाता है। आप एक कस्टम IPFS गेटवे जोड़ सकते हैं या डिफॉल्ट का उपयोग जारी रख सकते हैं।"
},
"addCustomNetwork": {
"message": "कस्टम नेटवर्क जोड़ें"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "नेटवर्क हटाएं?"
},
"deleteNetworkDescription": {
"message": "क्या आप वाकई इस नेटवर्क को हटाना चाहते हैं?"
},
"deposit": {
"message": "जमा करें"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " इसे सेटिंग्स से इनेबल करें।"
},
"enableOpenSeaAPI": {
"message": "OpenSea API इनेबल करें"
},
"enableOpenSeaAPIDescription": {
"message": "NFT डेटा लाने के लिए OpenSea के API का उपयोग करें। NFT ऑटो-डिटेक्शन OpenSea के API पर निर्भर करता है, और इसके बंद होने पर उपलब्ध नहीं होगा।"
},
"enableToken": {
"message": "$1 इनेबल करें",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "सार्वजनिक पता"
},
"queue": {
"message": "कतार"
},
"queued": {
"message": "कतारबद्ध"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "सीड फ़्रेज़ दिखाएं"
},
"reviewSpendingCap": {
"message": "अपनी खर्च के सीमा की समीक्षा करें"
},
"revokeAllTokensTitle": {
"message": "आपके सभी $1 को एक्सेस और स्थानांतरित करने की अनुमति निरस्त करें?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "बिना किसी खर्च सीमा के $1 स्वीकृत करें",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "अपने $1 के लिए खर्च की सीमा को निर्धारित करें",
"description": "$1 is a token symbol"
},
"settings": {
"message": "सेटिंग"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "ओह! कुछ गलत हो गया।"
},
"source": {
"message": "स्रोत"
},
"speedUp": {
"message": "जल्दी करें"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "यह URL वर्तमान में $1 नेटवर्क द्वारा उपयोग किया जाता है।"
},
"useDefault": {
"message": "डिफॉल्ट का उपयोग करें"
},
"useMultiAccountBalanceChecker": {
"message": "खाता के शेष राशि के अनुरोधों को बैच करें"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "हम खातों को बैच करते हैं और Infura से आपकी शेष राशि को प्रतिक्रियात्मक रूप से दिखाने के लिए पूछताछ करते हैं। यदि आप इसे बंद कर देते हैं, तो केवल सक्रिय खातों के बारे में पूछताछ की जाएगी। कुछ डैप तब तक काम नहीं करेंगे जब तक आप अपने वॉलेट को कनेक्ट नहीं करते।"
},
"useNftDetection": {
"message": "एनएफटी को ऑटो-डिटेक्ट करें"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Izbrisati mrežu?"
},
"deleteNetworkDescription": {
"message": "Sigurno želite izbrisati ovu mrežu?"
},
"details": {
"message": "Detalji"
},
@ -553,9 +550,6 @@
"privateNetwork": {
"message": "Privatna mreža"
},
"queue": {
"message": "Red čekanja"
},
"readdToken": {
"message": "Ovaj token možete dodati kasnije odlaskom pod stavku „Dodaj token” u izborniku mogućnosti računa. "
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Törli a hálózatot?"
},
"deleteNetworkDescription": {
"message": "Biztosan törli ezt a hálózatot?"
},
"details": {
"message": "Részletek"
},
@ -553,9 +550,6 @@
"privateNetwork": {
"message": "Magánhálózat"
},
"queue": {
"message": "Nyomtatólista"
},
"readdToken": {
"message": "Ezt a tokent a jövőben is hozzáadhatja, ha a fiókbeállítások menü „Token hozzáadása” elemére lép."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Tambah kontak"
},
"addCustomIPFSGateway": {
"message": "Tambahkan gerbang IPFS khusus"
},
"addCustomIPFSGatewayDescription": {
"message": "Gerbang IPFS memungkinkan untuk mengakses dan melihat data yang diselenggarakan oleh pihak ketiga. Anda dapat menambahkan gerbang IPFS khusus atau melanjutkan menggunakan yang awal."
},
"addCustomNetwork": {
"message": "Tambahkan jaringan khusus"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Hapus jaringan?"
},
"deleteNetworkDescription": {
"message": "Anda yakin ingin menghapus jaringan ini?"
},
"deposit": {
"message": "Deposit"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Aktifkan dari Pengaturan."
},
"enableOpenSeaAPI": {
"message": "Aktifkan API OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Gunakan API OpenSea untuk mengambil data NFT. Deteksi otomatis NFT bergantung pada API OpenSea, dan tidak akan tersedia saat API ditutup."
},
"enableToken": {
"message": "aktifkan $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Alamat publik"
},
"queue": {
"message": "Antrean"
},
"queued": {
"message": "Antrean"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Ungkap frasa seed"
},
"reviewSpendingCap": {
"message": "Tinjau batas pengeluaran Anda"
},
"revokeAllTokensTitle": {
"message": "Cabut izin untuk mengakses dan mentransfer seluruh $1 Anda?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Setujui $1 tanpa batas penggunaan",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Tetapkan batas pengeluaran untuk $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Pengaturan"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Ups! Ada yang salah."
},
"source": {
"message": "Sumber"
},
"speedUp": {
"message": "Percepat"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "URL ini saat ini digunakan oleh jaringan $1."
},
"useDefault": {
"message": "Gunakan default"
},
"useMultiAccountBalanceChecker": {
"message": "Kelompokkan permintaan saldo akun"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Kami mengelompokkan akun dan meminta Infura untuk menunjukkan saldo Anda secara responsif. Jika Anda menonaktifkannya, hanya akun aktif yang akan diminta. Beberapa aplikasi terdesentralisasi (dapp) tidak akan berfungsi kecuali dompet Anda terhubung."
},
"useNftDetection": {
"message": "Deteksi otomatis NFT"
},

View File

@ -719,9 +719,6 @@
"deleteNetwork": {
"message": "Cancella la rete?"
},
"deleteNetworkDescription": {
"message": "Sei sicuro di voler eliminare questa rete?"
},
"deprecatedTestNetworksLink": {
"message": "Scopri di più"
},
@ -1301,9 +1298,6 @@
"provide": {
"message": "Fornisci"
},
"queue": {
"message": "Coda"
},
"queued": {
"message": "In coda"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "連絡先を追加"
},
"addCustomIPFSGateway": {
"message": "カスタム IPFS ゲートウェイを追加"
},
"addCustomIPFSGatewayDescription": {
"message": "IPFS ゲートウェイにより、第三者がホスティングしているデータへのアクセスと表示が可能になります。カスタム IPFS ゲートウェイを追加するか、デフォルトを引き続き使用できます。"
},
"addCustomNetwork": {
"message": "カスタムネットワークを追加"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "ネットワークを削除しますか?"
},
"deleteNetworkDescription": {
"message": "このネットワークを削除しますか?"
},
"deposit": {
"message": "入金"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " 設定で有効にします。"
},
"enableOpenSeaAPI": {
"message": "OpenSea APIを有効にする"
},
"enableOpenSeaAPIDescription": {
"message": "OpenSea APIを使用してNFTデータを取得します。NFT自動検出はOpenSea APIを使用するため、この設定をオフにすると利用できなくなります。"
},
"enableToken": {
"message": "$1を有効にする",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "パブリックアドレス"
},
"queue": {
"message": "キュー"
},
"queued": {
"message": "キュー待ち"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "シードフレーズを表示"
},
"reviewSpendingCap": {
"message": "使用上限を確認してください"
},
"revokeAllTokensTitle": {
"message": "すべての $1 へのアクセスおよび転送許可を取り消しますか?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "使用限度額なしで $1 を承認",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "$1 の使用上限を設定",
"description": "$1 is a token symbol"
},
"settings": {
"message": "設定"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "申し訳ありません。問題が発生しました。"
},
"source": {
"message": "ソース"
},
"speedUp": {
"message": "スピードアップ"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "このURLは現在$1ネットワークで使用されています。"
},
"useDefault": {
"message": "既定値を使用"
},
"useMultiAccountBalanceChecker": {
"message": "アカウント残高の一括リクエスト"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "当社は残高を素早く表示できるよう、アカウントをまとめて Infura にクエリを送ります。この機能をオフにすると、アクティブなアカウントのみクエリの対象となります。Dapps によっては、ウォレットを接続しないと機能しないものもあります。"
},
"useNftDetection": {
"message": "NFTを自動検出"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "ನೆಟ್‌ವರ್ಕ್ ಅಳಿಸುವುದೇ?"
},
"deleteNetworkDescription": {
"message": "ನೀವು ಈ ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಖಚಿತವಾಗಿ ಅಳಿಸಲು ಬಯಸುತ್ತೀರಾ?"
},
"details": {
"message": "ವಿವರಗಳು"
},
@ -560,9 +557,6 @@
"privateNetwork": {
"message": "ಖಾಸಗಿ ನೆಟ್‌ವರ್ಕ್"
},
"queue": {
"message": "ಸರತಿ"
},
"readdToken": {
"message": "ನಿಮ್ಮ ಖಾತೆಗಳ ಆಯ್ಕೆಗಳ ಮೆನುವಿನಲ್ಲಿ \"ಟೋಕನ್ ಸೇರಿಸು\" ಗೆ ಹೋಗುವ ಮೂಲಕ ನೀವು ಈ ಟೋಕನ್ ಅನ್ನು ಭವಿಷ್ಯದಲ್ಲಿ ಮರಳಿ ಸೇರಿಸಬಹುದು."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "연락처 추가"
},
"addCustomIPFSGateway": {
"message": "사용자 지정 IPFS 게이트웨이 추가"
},
"addCustomIPFSGatewayDescription": {
"message": "IPFS 게이트웨이를 사용하면 타사 호스팅 데이터에 액세스하여 이를 볼 수 있습니다. 사용자 지정 IPFS 게이트웨이를 추가하셔도 좋고 기본 설정을 계속 사용하셔도 됩니다."
},
"addCustomNetwork": {
"message": "커스텀 네트워크 추가"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "네트워크를 삭제할까요?"
},
"deleteNetworkDescription": {
"message": "이 네트워크를 삭제할까요?"
},
"deposit": {
"message": "예치"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " 설정에서 이 기능을 활성화합니다."
},
"enableOpenSeaAPI": {
"message": "OpenSea API 활성화"
},
"enableOpenSeaAPIDescription": {
"message": "OpenSea의 API를 사용하여 NFT 데이터를 가져옵니다. NFT 자동 감지는 OpenSea의 API에 의존하며 이 API가 꺼져 있으면 사용할 수 없습니다."
},
"enableToken": {
"message": "$1 활성화",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "공개 주소"
},
"queue": {
"message": "대기열"
},
"queued": {
"message": "대기열에 지정됨"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "시드 구문 보기"
},
"reviewSpendingCap": {
"message": "지출 한도 검토"
},
"revokeAllTokensTitle": {
"message": "모든 $1에 액세스할 수 있는 권한을 철회할까요?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "$1 무제한 지출 승인",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "$1에 대한 지출 한도 설정",
"description": "$1 is a token symbol"
},
"settings": {
"message": "설정"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "죄송합니다! 문제가 생겼습니다."
},
"source": {
"message": "소스"
},
"speedUp": {
"message": "가속화"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "이 URL은 현재 $1 네트워크에서 사용됩니다."
},
"useDefault": {
"message": "기본값 사용"
},
"useMultiAccountBalanceChecker": {
"message": "일괄 계정 잔액 요청"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "모든 계정을 일괄 처리하여 잔액을 신속하게 표시하도록 Infura에 요청합니다. 이 기능을 끄면 활성 계정에 대한 잔액만 요청합니다. 일부 dapp은 지갑을 연결하지 않으면 작동하지 않습니다."
},
"useNftDetection": {
"message": "NFT 자동 감지"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Panaikinti tinklą?"
},
"deleteNetworkDescription": {
"message": "Ar tikrai norite panaikinti šį tinklą?"
},
"details": {
"message": "Išsami informacija"
},
@ -560,9 +557,6 @@
"privateNetwork": {
"message": "Privatus tinklas"
},
"queue": {
"message": "Eilė"
},
"readdToken": {
"message": "Šį žetoną galite bet kada galite įtraukti ir vėl, tiesiog savo paskyros parinkčių meniu nueikite į „Įtraukti žetoną“."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Dzēst tīklu?"
},
"deleteNetworkDescription": {
"message": "Vai tiešām vēlaties dzēst šo tīklu?"
},
"details": {
"message": "Informācija"
},
@ -556,9 +553,6 @@
"privateNetwork": {
"message": "Privātais tīkls"
},
"queue": {
"message": "Rinda"
},
"readdToken": {
"message": "Jūs varat šo marķieri iestatīt atpakaļ nākotnē, konta opciju izvēlnē atverot \"Pievienot marķieri\"."
},

View File

@ -103,9 +103,6 @@
"password": {
"message": "പാസ്‌വേഡ്"
},
"queue": {
"message": "ക്യൂവിൽ"
},
"reject": {
"message": "നിരസിക്കുക"
},

View File

@ -103,9 +103,6 @@
"password": {
"message": "पासवर्ड"
},
"queue": {
"message": "रांग"
},
"reject": {
"message": "नाकारा"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Padamkan Rangkaian?"
},
"deleteNetworkDescription": {
"message": "Anda pasti anda ingin padamkan rangkaian ini?"
},
"details": {
"message": "Butiran"
},
@ -540,9 +537,6 @@
"privateNetwork": {
"message": "Rangkaian Persendirian"
},
"queue": {
"message": "Baris Gilir"
},
"readdToken": {
"message": "Anda boleh tambah token ini kembali pada masa depan dengan pergi ke \"Tambah token\" di dalam menu pilihan akaun anda."
},

View File

@ -211,9 +211,6 @@
"deleteNetwork": {
"message": "Slette nettverk? "
},
"deleteNetworkDescription": {
"message": "Er du sikker på at du vil slette dette nettverket?"
},
"details": {
"message": "Detaljer"
},
@ -544,9 +541,6 @@
"privateNetwork": {
"message": "Privat nettverk "
},
"queue": {
"message": "Kø"
},
"readdToken": {
"message": "Du kan legge til dette tokenet igjen i fremtiden ved å gå til \"Legg til token\" i menyen for kontoalternativer."
},

View File

@ -409,9 +409,6 @@
"deleteNetwork": {
"message": "I-delete ang Network?"
},
"deleteNetworkDescription": {
"message": "Sigurado ka bang gusto mong i-delete ang network na ito?"
},
"details": {
"message": "Mga Detalye"
},
@ -1105,9 +1102,6 @@
"publicAddress": {
"message": "Pampublikong Address"
},
"queue": {
"message": "Queue"
},
"queued": {
"message": "Naka-queue"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Usunąć sieć?"
},
"deleteNetworkDescription": {
"message": "Czy na pewno chcesz usunąć tę sieć?"
},
"details": {
"message": "Szczegóły"
},
@ -554,9 +551,6 @@
"privateNetwork": {
"message": "Sieć prywatna"
},
"queue": {
"message": "Kolejka"
},
"readdToken": {
"message": "Możesz później ponownie dodać ten token poprzez \"Dodaj token\" w opcjach menu swojego konta."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Adicionar contato"
},
"addCustomIPFSGateway": {
"message": "Adicionar gateway IPFS personalizado"
},
"addCustomIPFSGatewayDescription": {
"message": "O gateway IPFS possibilita acessar e visualizar dados hospedados por terceiros. Você pode adicionar um gateway IPFS personalizado ou continuar usando o padrão."
},
"addCustomNetwork": {
"message": "Adicionar rede personalizada"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Excluir rede?"
},
"deleteNetworkDescription": {
"message": "Quer mesmo excluir essa rede?"
},
"deposit": {
"message": "Depositar"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Habilite-a nas configurações."
},
"enableOpenSeaAPI": {
"message": "Habilitar API do OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Use a API OpenSea para recuperar dados de NFTs. A detecção automática de NFTs depende da API OpenSea e não estará disponível quando essa opção estiver desativada."
},
"enableToken": {
"message": "ativar $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Endereço público"
},
"queue": {
"message": "Fila"
},
"queued": {
"message": "Na fila"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Revelar a frase de recuperação"
},
"reviewSpendingCap": {
"message": "Revise seu limite de gastos"
},
"revokeAllTokensTitle": {
"message": "Revogar permissão de acesso e transferência de todos os seus $1?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Aprovar $1 sem limite de gastos",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Definir um limite de gastos para seu $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Definições"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Ops! Algo deu errado."
},
"source": {
"message": "Origem"
},
"speedUp": {
"message": "Acelerar"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "O ID da cadeia está sendo usado pela rede $1."
},
"useDefault": {
"message": "Usar padrão"
},
"useMultiAccountBalanceChecker": {
"message": "Agrupar solicitações de saldo de contas"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Agrupamos as contas e consultamos a Infura para exibir seus saldos de forma responsiva. Se isso for desativado, somente contas ativas serão consultadas. Alguns dapps só funcionam se você conecta a sua carteira."
},
"useNftDetection": {
"message": "Detectar NFTs automaticamente"
},

View File

@ -584,9 +584,6 @@
"deleteNetwork": {
"message": "Excluir rede?"
},
"deleteNetworkDescription": {
"message": "Quer mesmo excluir essa rede?"
},
"description": {
"message": "Descrição"
},
@ -740,12 +737,6 @@
"enableFromSettings": {
"message": " Ative nas Configurações."
},
"enableOpenSeaAPI": {
"message": "Ativar a API OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Use a API OpenSea para recuperar dados de NFTs. A detecção automática de NFTs depende da API OpenSea e não estará disponível quando essa opção estiver desativada."
},
"enableToken": {
"message": "ativar $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -1767,9 +1758,6 @@
"publicAddress": {
"message": "Endereço público"
},
"queue": {
"message": "Fila"
},
"queued": {
"message": "Na fila"
},
@ -2074,9 +2062,6 @@
"somethingWentWrong": {
"message": "Opa! Ocorreu algum erro."
},
"source": {
"message": "Fonte"
},
"speedUp": {
"message": "Acelerar"
},

View File

@ -113,9 +113,6 @@
"privacyMsg": {
"message": "Política de Privacidade"
},
"queue": {
"message": "Fila"
},
"reject": {
"message": "Rejeitar"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Ștergeți rețeaua?"
},
"deleteNetworkDescription": {
"message": "Sigur vreți să ștergeți această rețea?"
},
"details": {
"message": "Detalii"
},
@ -547,9 +544,6 @@
"privateNetwork": {
"message": "Rețea privată"
},
"queue": {
"message": "Coadă"
},
"readdToken": {
"message": "Puteți adăuga din nou acest indicativ în viitor accesând „Adăugați indicativ” din meniul de opțiuni al contului dvs."
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Добавить контакт"
},
"addCustomIPFSGateway": {
"message": "Добавить пользовательский шлюз IPFS"
},
"addCustomIPFSGatewayDescription": {
"message": "Шлюз IPFS позволяет получать доступ к данным, размещенным третьими сторонами, и просматривать их. Вы можете добавить пользовательский шлюз IPFS или продолжить использовать шлюз по умолчанию."
},
"addCustomNetwork": {
"message": "Добавить пользовательскую сеть"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Удалить сеть?"
},
"deleteNetworkDescription": {
"message": "Уверены, что хотите удалить эту сеть?"
},
"deposit": {
"message": "Внести деньги"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Включите его в Настройках."
},
"enableOpenSeaAPI": {
"message": "Включить API OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Используйте API OpenSea для получения данных NFT. Для автоматического обнаружения NFT используется API OpenSea, и такое обнаружение будет недоступно, если этот API отключен."
},
"enableToken": {
"message": "активирует для $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Открытый адрес"
},
"queue": {
"message": "Очередь"
},
"queued": {
"message": "В очереди"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Показать сид-фразу"
},
"reviewSpendingCap": {
"message": "Проверьте свой лимит расходов"
},
"revokeAllTokensTitle": {
"message": "Отозвать разрешение на доступ ко всем вашим $1 и их перевод?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Одобрить $1 без ограничений по расходам",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Установить верхний лимит расходов для вашего $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Настройки"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Ой! Что-то пошло не так."
},
"source": {
"message": "Источник"
},
"speedUp": {
"message": "Ускорить"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Это URL-адрес в настоящее время используется сетью $1."
},
"useDefault": {
"message": "Использовать значения по умолчанию"
},
"useMultiAccountBalanceChecker": {
"message": "Пакетные запросы баланса счета"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Мы создаем пакет счетов и запрашиваем Infura, чтобы оперативно отображать ваши остатки. Если вы отключите это, запрос будет отправляться только в отношении активных счетов. Некоторые dapps не будут работать, пока вы не подключите свой кошелек."
},
"useNftDetection": {
"message": "Автообнаружение NFT"
},

View File

@ -208,9 +208,6 @@
"deleteNetwork": {
"message": "Odstrániť sieť?"
},
"deleteNetworkDescription": {
"message": "Naozaj chcete túto sieť odstrániť?"
},
"details": {
"message": "Podrobnosti"
},
@ -532,9 +529,6 @@
"privateNetwork": {
"message": "Soukromá síť"
},
"queue": {
"message": "Poradie"
},
"readdToken": {
"message": "Tento token můžete v budoucnu přidat zpět s „Přidat token“ v nastavení účtu."
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Izbrišem to omrežje?"
},
"deleteNetworkDescription": {
"message": "Ali ste prepričani, da želite izbrisati to omrežje?"
},
"details": {
"message": "Podrobnosti"
},
@ -548,9 +545,6 @@
"privateNetwork": {
"message": "Zasebno omrežje"
},
"queue": {
"message": "Čakalna vrsta"
},
"readdToken": {
"message": "Ta žeton lahko dodate tudi kasneje z uporabo gumba “Dodaj žeton” v možnostih vašega računa."
},

View File

@ -211,9 +211,6 @@
"deleteNetwork": {
"message": "Da li želite da obrišete mrežu?"
},
"deleteNetworkDescription": {
"message": "Da li ste sigurni da želite da izbrišete ovu mrežu?"
},
"details": {
"message": "Детаљи"
},
@ -551,9 +548,6 @@
"privateNetwork": {
"message": "Privatna mreža"
},
"queue": {
"message": "Ред"
},
"readdToken": {
"message": "U budućnosti možete vratiti ovaj token tako što ćete otvoriti „Dodaj token“ u meniju opcija vašeg naloga."
},

View File

@ -208,9 +208,6 @@
"deleteNetwork": {
"message": "Radera nätverk?"
},
"deleteNetworkDescription": {
"message": "Är du säker på att du vill ta bort detta nätverk?"
},
"details": {
"message": "Info"
},
@ -544,9 +541,6 @@
"privateNetwork": {
"message": "Privat nätverk"
},
"queue": {
"message": "Utskriftskö"
},
"readdToken": {
"message": "Du kan lägga till denna token i framtiden genom att välja \"Lägg till token\" i kontots alternativmeny."
},

View File

@ -208,9 +208,6 @@
"deleteNetwork": {
"message": "Futa Mtandao?"
},
"deleteNetworkDescription": {
"message": "Una uhakika unataka kufuta mtandao huu?"
},
"details": {
"message": "Maelezo"
},
@ -538,9 +535,6 @@
"privateNetwork": {
"message": "Mtandao Binafsi"
},
"queue": {
"message": "Foleni"
},
"readdToken": {
"message": "Unaweza kuongeza tena kianzio hiki hapo baadaye kwa kwenda kwenye \"Ongeza kianzio\" kwenye machaguo yako ya menyu ya akaunti."
},

View File

@ -322,9 +322,6 @@
"privateNetwork": {
"message": "தனியார் நெட்வொர்க்"
},
"queue": {
"message": "வரிசை"
},
"readdToken": {
"message": "உங்கள் கணக்கு விருப்பங்கள் மெனுவில் \"டோக்கனைச் சேர்\" என்பதன் மூலம் நீங்கள் எதிர்காலத்தில் இந்த டோக்கனை மீண்டும் சேர்க்கலாம்."
},

View File

@ -103,9 +103,6 @@
"password": {
"message": "పాస్‌వర్డ్"
},
"queue": {
"message": "క్రమ వరుస"
},
"reject": {
"message": "తిరస్కరించు"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Magdagdag ng contact"
},
"addCustomIPFSGateway": {
"message": "Magdagdag ng custom na IPFS gateway"
},
"addCustomIPFSGatewayDescription": {
"message": "Ginagawang posible ng IPFS gateway na ma-access at makita ang datos na pinangangasiwaan ng mga third party. Maaari kang magdagdag ng custom na IPFS gateway o magpatuloy sa paggamit ng default."
},
"addCustomNetwork": {
"message": "Magdagdag ng custom na network"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "I-delete ang network?"
},
"deleteNetworkDescription": {
"message": "Sigurado ka bang gusto mong i-delete ang network na ito?"
},
"deposit": {
"message": "Deposito"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Paganahin ito mula sa Settings."
},
"enableOpenSeaAPI": {
"message": "Paganahin sa OpenSea API"
},
"enableOpenSeaAPIDescription": {
"message": "Gamitin ang API ng Opensea upang kunin ang NFT data. ang NFT auto-detection ay umaasa sa API ng OpenSea, at hindi magiging available kapag ito ay isinara."
},
"enableToken": {
"message": "paganahin ang $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Pampublikong Address"
},
"queue": {
"message": "Pila"
},
"queued": {
"message": "Naka-queue"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Ipakita ang seed phrase"
},
"reviewSpendingCap": {
"message": "I-review ang iyong limitasyon sa paggastos"
},
"revokeAllTokensTitle": {
"message": "Bawiin ang pahintulot na i-access at ilipat ang lahat ng iyong $1?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Aprubahan ang $1 nang walang limitasyon sa paggastos",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Magtakda ng limitasyon sa paggastos para sa iyong $1",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Mga Setting"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Oops! Nagkaproblema."
},
"source": {
"message": "Pinagmulan"
},
"speedUp": {
"message": "Pabilisin"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Nasa kasalukuyang listahan ng mga network na ang URL."
},
"useDefault": {
"message": "Gamitin ang default"
},
"useMultiAccountBalanceChecker": {
"message": "Mga kahilingan sa balanse ng batch account"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Pinagsasama-sama namin ang mga account at tanong sa Infura para maipakita ang inyong balanse. Kung io-off mo ito, ang mga aktibong account lamang ang makakapagtanong. Ang ilan sa dapps ay hindi gagana maliban kung nakakonekta ang iyongg wallet."
},
"useNftDetection": {
"message": "Awtomatikong tuklasin ang mga NFT"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Kişi ekle"
},
"addCustomIPFSGateway": {
"message": "Özel IPFS ağ geçidi ekle"
},
"addCustomIPFSGatewayDescription": {
"message": "IPFS ağ geçidi üçüncü tarafların barındırdığı veriler için erişim ve görüntülemeyi mümkün kılar. Özel bir IPFS ağ geçidi ekleyebilir veya varsayılanı kullanmaya devam edebilirsiniz."
},
"addCustomNetwork": {
"message": "Özel ağ ekle"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Ağı Sil?"
},
"deleteNetworkDescription": {
"message": "Bu ağı silmek istediğinizden emin misiniz?"
},
"deposit": {
"message": "Para Yatır"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Ayarlardan etkinleştir."
},
"enableOpenSeaAPI": {
"message": "OpenSea API'yi etkinleştir"
},
"enableOpenSeaAPIDescription": {
"message": "NFT verilerini almak için OpenSea API'sini kullanın. NFT otomatik algılama OpenSea API'ye dayalıdır ve bu kapatılırsa mevcut olmayacaktır."
},
"enableToken": {
"message": "şunu etkinleştir: $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Genel adres"
},
"queue": {
"message": "Kuyruğa al"
},
"queued": {
"message": "Kuyruğa alındı"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Tohum ifadesini ortaya çıkar"
},
"reviewSpendingCap": {
"message": "Harcama üst limitinize göz atın"
},
"revokeAllTokensTitle": {
"message": "Tüm $1 için izin erişim ve transfer izni geri çekilsin mi?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "$1 için harcama limiti olmadan onay ver",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "$1 için harcama üst limiti belirle",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Ayarlar"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Eyvah! Bir şeyler ters gitti."
},
"source": {
"message": "Kaynak"
},
"speedUp": {
"message": "Hızlandır"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Bu URL şu anda $1 ağı tarafından kullanılıyor."
},
"useDefault": {
"message": "Varsayılanı kullan"
},
"useMultiAccountBalanceChecker": {
"message": "Toplu hesap bakiyesi talepleri"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Hesapları toplarız ve bakiyelerinizi göstermek için Infura'yı sorgularız. Bunu kapattığınız takdirde sadece aktif hesaplar sorgulanır. Bazı merkeziyetsiz uygulamalar siz cüzdanınızı bağlamadığınız sürece çalışmaz."
},
"useNftDetection": {
"message": "NFT'leri otomatik algıla"
},

View File

@ -214,9 +214,6 @@
"deleteNetwork": {
"message": "Видалити мережу?"
},
"deleteNetworkDescription": {
"message": "Ви впевнені, що хочете видалити цю мережу?"
},
"details": {
"message": "Деталі"
},
@ -560,9 +557,6 @@
"privateNetwork": {
"message": "Приватна мережа"
},
"queue": {
"message": "Черга"
},
"readdToken": {
"message": "Ви можете знову додати цей токен у меню облікового запису у розділі “Додати токен”. "
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "Thêm địa chỉ liên hệ"
},
"addCustomIPFSGateway": {
"message": "Thêm cổng IPFS tùy chỉnh"
},
"addCustomIPFSGatewayDescription": {
"message": "Cổng IPFS cho phép truy cập và xem dữ liệu do bên thứ ba lưu trữ. Bạn có thể thêm cổng IPFS tùy chỉnh hoặc tiếp tục sử dụng cổng mặc định."
},
"addCustomNetwork": {
"message": "Thêm mạng tùy chỉnh"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "Xóa mạng?"
},
"deleteNetworkDescription": {
"message": "Bạn có chắc chắn muốn xóa mạng này không?"
},
"deposit": {
"message": "Nạp"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " Bật lên trong Cài Đặt."
},
"enableOpenSeaAPI": {
"message": "Bật API OpenSea"
},
"enableOpenSeaAPIDescription": {
"message": "Sử dụng API của OpenSea để tìm nạp dữ liệu NFT. Tính năng tự động phát hiện NFT dựa vào API của OpenSea và sẽ không khả dụng nếu tính năng này bị tắt."
},
"enableToken": {
"message": "bật $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "Địa chỉ công khai"
},
"queue": {
"message": "Hàng đợi"
},
"queued": {
"message": "Đã đưa vào hàng đợi"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "Hiện cụm từ khôi phục bí mật"
},
"reviewSpendingCap": {
"message": "Xem lại hạn mức chi tiêu của bạn"
},
"revokeAllTokensTitle": {
"message": "Thu hồi quyền truy cập và chuyển tất cả $1 của bạn?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "Phê duyệt $1 không có giới hạn chi tiêu",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "Đặt hạn mức chi tiêu cho $1 của bạn",
"description": "$1 is a token symbol"
},
"settings": {
"message": "Cài đặt"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "Rất tiếc! Đã xảy ra sự cố."
},
"source": {
"message": "Nguồn"
},
"speedUp": {
"message": "Tăng tốc"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "Mạng $1 hiện đang sử dụng URL này."
},
"useDefault": {
"message": "Sử dụng mặc định"
},
"useMultiAccountBalanceChecker": {
"message": "Xử lý hàng loạt yêu cầu số dư tài khoản"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "Chúng tôi xử lý hàng loạt tài khoản và kiểm tra với Infura để hiển thị các số dư tài khoản của bạn một cách nhanh chóng. Nếu bạn tắt tính năng này, chỉ những tài khoản đang hoạt động mới được truy vấn. Một số dapp sẽ không hoạt động trừ khi bạn kết nối với ví của mình."
},
"useNftDetection": {
"message": "Tự động phát hiện NFT"
},

View File

@ -183,12 +183,6 @@
"addContact": {
"message": "添加联系信息"
},
"addCustomIPFSGateway": {
"message": "添加自定义IPFS网关"
},
"addCustomIPFSGatewayDescription": {
"message": "IPFS 网关使访问和查看第三方托管的数据成为可能。您可以添加自定义 IPFS 网关或继续使用默认网关。"
},
"addCustomNetwork": {
"message": "添加自定义网络"
},
@ -914,9 +908,6 @@
"deleteNetwork": {
"message": "删除网络?"
},
"deleteNetworkDescription": {
"message": "您确定要删除该网络吗?"
},
"deposit": {
"message": "存入"
},
@ -1184,12 +1175,6 @@
"enableFromSettings": {
"message": " 从设置中启用它。"
},
"enableOpenSeaAPI": {
"message": "启用 OpenSea API"
},
"enableOpenSeaAPIDescription": {
"message": "使用 OpenSea 的 API 获取 NFT 数据。NFT 自动检测依赖于 OpenSea 的 API在后者关闭时自动检测将不可用。"
},
"enableToken": {
"message": "启用 $1",
"description": "$1 is a token symbol, e.g. ETH"
@ -2753,9 +2738,6 @@
"publicAddress": {
"message": "公共地址"
},
"queue": {
"message": "队列"
},
"queued": {
"message": "队列中"
},
@ -2956,9 +2938,6 @@
"revealTheSeedPhrase": {
"message": "显示助记词"
},
"reviewSpendingCap": {
"message": "检查您的支出上限"
},
"revokeAllTokensTitle": {
"message": "撤销访问和转移您的所有 $1 的权限?",
"description": "$1 is the symbol of the token for which the user is revoking approval"
@ -3140,10 +3119,6 @@
"message": "批准$1且无消费限制",
"description": "The token symbol that is being approved"
},
"setSpendingCap": {
"message": "为 $1 设置支出上限",
"description": "$1 is a token symbol"
},
"settings": {
"message": "设置"
},
@ -3271,9 +3246,6 @@
"somethingWentWrong": {
"message": "哎呀!出了点问题。"
},
"source": {
"message": "来源"
},
"speedUp": {
"message": "加速"
},
@ -4167,15 +4139,9 @@
"urlExistsErrorMsg": {
"message": "此 URL 目前已被 $1 网络使用。"
},
"useDefault": {
"message": "使用默认值"
},
"useMultiAccountBalanceChecker": {
"message": "账户余额分批请求"
},
"useMultiAccountBalanceCheckerDescription": {
"message": "我们会将账户分批并向 Infura 查询以对应地显示您的余额。如果禁用此选项将仅查询活动账户。必须连接钱包否则有一些去中心化应用程序dapp将无法工作。"
},
"useNftDetection": {
"message": "自动检测NFT"
},

View File

@ -411,9 +411,6 @@
"deleteNetwork": {
"message": "刪除網路?"
},
"deleteNetworkDescription": {
"message": "你確定要刪除網路嗎?"
},
"details": {
"message": "詳情"
},
@ -1051,9 +1048,6 @@
"publicAddress": {
"message": "公開位址"
},
"queue": {
"message": "佇列"
},
"queued": {
"message": "已排入佇列"
},

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 240 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

View File

@ -1,6 +0,0 @@
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
<path
d="M12.36 6L12.76 8H18V14H14.64L14.24 12H7V6H12.36ZM14 4H5V21H7V14H12.6L13 16H20V6H14.4L14 4Z"
fill="black"
/>
</svg>

Before

Width:  |  Height:  |  Size: 231 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
app/images/default_nft.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

47
app/images/gnosis.svg Normal file
View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="1080" height="1080" viewBox="0 0 1080 1080" xml:space="preserve">
<desc>Created with Fabric.js 5.2.4</desc>
<defs>
</defs>
<g transform="matrix(1 0 0 1 540 540)" id="6d236122-bb3d-4e42-9c6b-8d2a0958998c" >
</g>
<g transform="matrix(1 0 0 1 540 540)" id="e68d71f6-858d-496f-973e-8d82de5e6bfb" >
<rect style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(255,255,255); fill-rule: nonzero; opacity: 1; visibility: hidden;" vector-effect="non-scaling-stroke" x="-540" y="-540" rx="0" ry="0" width="1080" height="1080" />
</g>
<g transform="matrix(12.89 0 0 12.89 539.9 539.9)" id="fc2f5ed2-9b97-4553-a90e-ba5317325e12" >
<circle style="stroke: rgb(0,0,0); stroke-opacity: 0; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(240,235,222); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" cx="0" cy="0" r="35" />
</g>
<g transform="matrix(1 0 0 1 540 540)" >
<g style="" vector-effect="non-scaling-stroke" >
<g transform="matrix(1 0 0 1 -184.84 -28.38)" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(19,54,41); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-215.27, -371.55)" d="M 131.685 352.096 C 131.319 328.91 138.859 306.291 153.063 287.962 L 298.861 433.76 C 280.484 447.873 257.897 455.402 234.727 455.138 C 207.433 455.025 181.289 444.133 161.989 424.833 C 142.69 405.534 131.797 379.39 131.685 352.096 Z" stroke-linecap="round" />
</g>
<g transform="matrix(1 0 0 1 185.45 -28.86)" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(19,54,41); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-585.54, -371.07)" d="M 565.443 455.03 C 579.094 455.087 592.621 452.441 605.245 447.247 C 617.869 442.052 629.34 434.411 638.997 424.763 C 648.655 415.116 656.308 403.652 661.516 391.034 C 666.723 378.415 669.383 364.891 669.34 351.24 C 669.596 328.071 662.068 305.487 647.962 287.106 L 501.736 433.332 C 519.913 447.55 542.367 455.198 565.443 455.03 Z" stroke-linecap="round" />
</g>
<g transform="matrix(1 0 0 1 0 96.31)" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(19,54,41); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-400.1, -496.24)" d="M 678.219 257.499 C 700.697 283.894 713.049 317.427 713.065 352.097 C 713.037 391.086 697.528 428.47 669.948 456.03 C 642.369 483.589 604.974 499.071 565.984 499.071 C 531.496 499.109 498.103 486.956 471.707 464.759 L 400.946 535.52 L 330.184 464.759 C 303.77 486.996 270.329 499.153 235.8 499.071 C 216.449 499.141 197.275 495.392 179.376 488.039 C 161.476 480.685 145.204 469.872 131.491 456.219 C 117.778 442.566 106.893 426.34 99.4623 408.473 C 92.0311 390.606 88.1987 371.448 88.1848 352.097 C 88.2124 317.587 100.356 284.183 122.497 257.713 L 89.4674 224.684 L 57.9353 192.616 C 19.9503 255.069 -0.0950739 326.78 0.000339029 399.877 C -0.0137127 452.416 10.3265 504.443 30.4292 552.985 C 50.532 601.526 80.0034 645.631 117.159 682.777 C 154.315 719.923 198.428 749.382 246.975 769.472 C 295.521 789.562 347.551 799.888 400.09 799.86 C 506.118 799.832 607.802 757.729 682.815 682.796 C 757.828 607.863 800.04 506.225 800.181 400.197 C 800.841 327.112 780.991 255.307 742.887 192.937 L 678.219 257.499 Z" stroke-linecap="round" />
</g>
<g transform="matrix(1 0 0 1 0 -162.9)" >
<path style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-dashoffset: 0; stroke-linejoin: miter; stroke-miterlimit: 4; fill: rgb(19,54,41); fill-rule: nonzero; opacity: 1;" vector-effect="non-scaling-stroke" transform=" translate(-400.09, -237.03)" d="M 689.873 123.993 C 652.563 84.7656 607.659 53.5429 557.896 32.2262 C 508.132 10.9095 454.551 -0.0550433 400.414 0.000207773 C 346.266 -0.0259924 292.677 10.9513 242.9 32.2658 C 193.123 53.5803 148.197 84.7874 110.848 123.993 C 101.121 134.682 91.6082 145.371 82.7363 156.808 L 400.093 474.058 L 717.45 156.488 C 709.071 144.991 699.854 134.13 689.873 123.993 L 689.873 123.993 Z M 400.414 399.984 L 154.566 154.136 C 186.709 121.65 225.008 95.8997 267.221 78.3905 C 309.434 60.8813 354.714 51.9648 400.414 52.1627 C 446.121 51.9109 491.418 60.8027 533.638 78.3151 C 575.859 95.8274 614.151 121.607 646.261 154.136 L 400.414 399.984 Z" stroke-linecap="round" />
</g>
</g>
</g>
<g transform="matrix(0 0 0 0 0 0)" >
<g style="" >
</g>
</g>
<g transform="matrix(0 0 0 0 0 0)" >
<g style="" >
</g>
</g>
<g transform="matrix(NaN NaN NaN NaN 0 0)" >
<g style="" >
</g>
</g>
<g transform="matrix(NaN NaN NaN NaN 0 0)" >
<g style="" >
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="m412 145c12 12 12 32 0 45l-185 183c-12 12-32 12-45 0l-81-80c-13-13-13-33 0-46 12-12 32-12 45 0l59 58 161-161c13-12 33-12 46 1z"/></svg>

After

Width:  |  Height:  |  Size: 207 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="m93 224l320 0c18 0 32 14 32 32 0 18-14 32-32 32l-320 0c-18 0-32-14-32-32 0-18 14-32 32-32z"/></svg>

After

Width:  |  Height:  |  Size: 171 B

View File

@ -1,5 +1,5 @@
{
"content_security_policy": "frame-ancestors 'none'; script-src 'self'; object-src 'self'",
"content_security_policy": "frame-ancestors 'none'; script-src 'self' 'wasm-unsafe-eval'; object-src 'self'",
"externally_connectable": {
"matches": ["https://metamask.io/*"],
"ids": ["*"]

View File

@ -470,6 +470,9 @@ export function setupController(
getIpfsGateway: controller.preferencesController.getIpfsGateway.bind(
controller.preferencesController,
),
getUseAddressBarEnsResolution: () =>
controller.preferencesController.store.getState()
.useAddressBarEnsResolution,
provider: controller.provider,
});
@ -798,6 +801,13 @@ export function setupController(
});
}
///: END:ONLY_INCLUDE_IN
///: BEGIN:ONLY_INCLUDE_IN(snaps)
// Updates the snaps registry and check for newly blocked snaps to block if the user has at least one snap installed.
if (Object.keys(controller.snapController.state.snaps).length > 0) {
controller.snapController.updateBlockedSnaps();
}
///: END:ONLY_INCLUDE_IN
}
//

View File

@ -615,6 +615,12 @@ function redirectToPhishingWarning() {
const querystring = new URLSearchParams({ hostname, href });
window.location.href = `${baseUrl}#${querystring}`;
// eslint-disable-next-line no-constant-condition
while (1) {
console.log(
'MetaMask: Locking js execution, redirection will complete shortly',
);
}
}
const start = () => {

View File

@ -452,7 +452,6 @@ export default class AppStateController extends EventEmitter {
_acceptApproval() {
if (!this._approvalRequestId) {
log.error('Attempted to accept missing unlock approval request');
return;
}
try {
@ -461,7 +460,7 @@ export default class AppStateController extends EventEmitter {
this._approvalRequestId,
);
} catch (error) {
log.error('Failed to accept transaction approval request', error);
log.error('Failed to unlock approval request', error);
}
this._approvalRequestId = null;

View File

@ -1,10 +1,7 @@
import { ObservableStore } from '@metamask/obs-store';
import log from 'loglevel';
import { ORIGIN_METAMASK } from '../../../shared/constants/app';
import AppStateController from './app-state';
jest.mock('loglevel');
let appStateController, mockStore;
describe('AppStateController', () => {
@ -147,52 +144,6 @@ describe('AppStateController', () => {
expect.any(String),
);
});
it('logs if rejecting approval request throws', async () => {
appStateController._approvalRequestId = 'mock-approval-request-id';
appStateController = new AppStateController({
addUnlockListener: jest.fn(),
isUnlocked: jest.fn(() => true),
onInactiveTimeout: jest.fn(),
showUnlockRequest: jest.fn(),
preferencesStore: {
subscribe: jest.fn(),
getState: jest.fn(() => ({
preferences: {
autoLockTimeLimit: 0,
},
})),
},
qrHardwareStore: {
subscribe: jest.fn(),
},
messenger: {
call: jest.fn(() => {
throw new Error('mock error');
}),
},
});
appStateController.handleUnlock();
expect(log.error).toHaveBeenCalledTimes(1);
expect(log.error).toHaveBeenCalledWith(
'Attempted to accept missing unlock approval request',
);
});
it('returns without call messenger if no approval request in pending', async () => {
const emitSpy = jest.spyOn(appStateController, 'emit');
appStateController.handleUnlock();
expect(emitSpy).toHaveBeenCalledTimes(0);
expect(appStateController.messagingSystem.call).toHaveBeenCalledTimes(0);
expect(log.error).toHaveBeenCalledTimes(1);
expect(log.error).toHaveBeenCalledWith(
'Attempted to accept missing unlock approval request',
);
});
});
describe('setDefaultHomeActiveTabName', () => {

View File

@ -19,7 +19,7 @@ const messageIdMock2 = '456';
const stateMock = { test: 123 };
const addressMock = '0xc38bf1ad06ef69f0c04e29dbeb4152b4175f0a8d';
const publicKeyMock = '32762347862378feb87123781623a=';
const keyringMock = { type: KeyringType.hdKeyTree };
const keyringTypeMock = KeyringType.hdKeyTree;
const messageParamsMock = {
from: addressMock,
@ -73,11 +73,6 @@ const createEncryptionPublicKeyManagerMock = <T>() =>
},
} as any as jest.Mocked<T>);
const createKeyringControllerMock = () => ({
getKeyringForAccount: jest.fn(),
getEncryptionPublicKey: jest.fn(),
});
describe('EncryptionPublicKeyController', () => {
let encryptionPublicKeyController: EncryptionPublicKeyController;
@ -88,7 +83,8 @@ describe('EncryptionPublicKeyController', () => {
const encryptionPublicKeyManagerMock =
createEncryptionPublicKeyManagerMock<EncryptionPublicKeyManager>();
const messengerMock = createMessengerMock();
const keyringControllerMock = createKeyringControllerMock();
const getEncryptionPublicKeyMock = jest.fn();
const getAccountKeyringTypeMock = jest.fn();
const getStateMock = jest.fn();
const metricsEventMock = jest.fn();
@ -101,7 +97,8 @@ describe('EncryptionPublicKeyController', () => {
encryptionPublicKeyController = new EncryptionPublicKeyController({
messenger: messengerMock as any,
keyringController: keyringControllerMock as any,
getEncryptionPublicKey: getEncryptionPublicKeyMock as any,
getAccountKeyringType: getAccountKeyringTypeMock as any,
getState: getStateMock as any,
metricsEvent: metricsEventMock as any,
} as EncryptionPublicKeyControllerOptions);
@ -203,9 +200,7 @@ describe('EncryptionPublicKeyController', () => {
])(
'throws if keyring is not supported',
async (keyringName, keyringType) => {
keyringControllerMock.getKeyringForAccount.mockResolvedValueOnce({
type: keyringType,
});
getAccountKeyringTypeMock.mockResolvedValueOnce(keyringType);
await expect(
encryptionPublicKeyController.newRequestEncryptionPublicKey(
@ -219,9 +214,7 @@ describe('EncryptionPublicKeyController', () => {
);
it('adds message to message manager', async () => {
keyringControllerMock.getKeyringForAccount.mockResolvedValueOnce(
keyringMock,
);
getAccountKeyringTypeMock.mockResolvedValueOnce(keyringTypeMock);
await encryptionPublicKeyController.newRequestEncryptionPublicKey(
addressMock,
@ -243,9 +236,7 @@ describe('EncryptionPublicKeyController', () => {
from: messageParamsMock.data,
});
keyringControllerMock.getEncryptionPublicKey.mockResolvedValueOnce(
publicKeyMock,
);
getEncryptionPublicKeyMock.mockResolvedValueOnce(publicKeyMock);
});
it('approves message and signs', async () => {
@ -253,10 +244,8 @@ describe('EncryptionPublicKeyController', () => {
messageParamsMock,
);
expect(
keyringControllerMock.getEncryptionPublicKey,
).toHaveBeenCalledTimes(1);
expect(keyringControllerMock.getEncryptionPublicKey).toHaveBeenCalledWith(
expect(getEncryptionPublicKeyMock).toHaveBeenCalledTimes(1);
expect(getEncryptionPublicKeyMock).toHaveBeenCalledWith(
messageParamsMock.data,
);
@ -294,10 +283,8 @@ describe('EncryptionPublicKeyController', () => {
});
it('rejects message on error', async () => {
keyringControllerMock.getEncryptionPublicKey.mockReset();
keyringControllerMock.getEncryptionPublicKey.mockRejectedValue(
new Error('Test Error'),
);
getEncryptionPublicKeyMock.mockReset();
getEncryptionPublicKeyMock.mockRejectedValue(new Error('Test Error'));
await expect(
encryptionPublicKeyController.encryptionPublicKey(messageParamsMock),
@ -312,10 +299,8 @@ describe('EncryptionPublicKeyController', () => {
});
it('rejects approval on error', async () => {
keyringControllerMock.getEncryptionPublicKey.mockReset();
keyringControllerMock.getEncryptionPublicKey.mockRejectedValue(
new Error('Test Error'),
);
getEncryptionPublicKeyMock.mockReset();
getEncryptionPublicKeyMock.mockRejectedValue(new Error('Test Error'));
await expect(
encryptionPublicKeyController.encryptionPublicKey(messageParamsMock),

Some files were not shown because too many files have changed in this diff Show More