Compare commits

...
195 Commits
Author SHA1 Message Date
grenadeandClaude Opus 5 160d97c19b build: declare @quantus/crypto as a ui-keyring dev dependency
Lock Threads / lock (push) Has been cancelled
The ML-DSA restore spec imports contextForSpec from it, and polkadot-dev's
build refuses a package whose sources import something undeclared.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-16 21:13:56 +03:00
grenadeandClaude Opus 5 c7c23b7958 feat!: ui-keyring holds post-quantum keys only
Follows quantus/common#6, which removed ed25519, sr25519, ecdsa and ethereum
from the keyring (forks at 14.0.3-quantus.3).

- restoreAccount now goes through keyring.createFromJson instead of building
  the pair itself. A restored backup therefore gets the same refusal as every
  other entry point: a polkadot{.js} export of an sr25519 or ed25519 account is
  told "<type> keys are not quantum-safe and cannot be held here", not decoded.
- Version-0 JSON, which does not record its key type and so cannot be ML-DSA,
  is refused. Upstream guessed ed25519.
- isEthereum is always false; it's kept so callers written against upstream
  still read a boolean.
- loadAll already skips, with a warning, any stored account the keyring
  refuses, so a profile holding an old classical account still starts.

The spec that pinned sr25519 restore as unchanged is replaced by the two
refusals. ui-keyring 3.16.7-quantus.3, on the quantus.3 forks. yarn test 47
passing; lint clean.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-16 21:13:01 +03:00
grenadeandClaude Opus 5 2d6a9ad1b3 build: consume the forks at 14.0.3-quantus.2
Lock Threads / lock (push) Has been cancelled
Picks up the networks fix (the quantum-safe gate moving out of the library list,
which made @polkadot/api importable again) and Heisenberg's corrected HEI symbol.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-15 14:15:02 +03:00
rob thijssenandClaude Opus 5 18105d3ced build: pin the forked packages at 14.0.3-quantus.1
Follows the rename in quantus/common. The point is not tidiness: with the forks
numbered 14.0.3, a missing resolution here would have been satisfied from npm by
the unforked upstream package, installing cleanly and silently dropping Quantus
support. Now it fails with "No candidates found" — verified by removing the
@polkadot/networks resolution and running an install.

Refs quantus/extension#2

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-15 11:28:03 +03:00
rob thijssenandClaude Opus 5 f2a1ab3a72 build: consume the forked @polkadot packages from the registry, drop the scaffolding
Removes every workaround the symlink approach needed, and reverts tsconfig to
upstream's exactly.

The three forked packages — @polkadot/{networks,util-crypto,keyring} — are now
pinned to Gitea tarball URLs in resolutions. @polkadot/util is not, because this
fork does not modify it; it comes from npm like the rest of the scope.

Tarball URLs rather than routing the @polkadot scope to Gitea, because the scope
is mostly *not* forked: routing it would send yarn looking for dozens of packages
that are not there. @quantus is routed as a whole scope in .yarnrc.yml, which is
safe because we own every name in it.

Four things go away, all of which existed for one reason — node resolves a portal
or link symlink to its realpath, after which @polkadot/util-crypto resolved inside
*common's* tree, where it is a workspace source directory with no exports map:

  - resolutions pointing four packages at ../common/packages/*/build
  - tsconfig.base.json `*.d.ts` path mappings, needed because NodeNext will not
    infer an extension for a bare path and looked for a `types` directory
  - tsconfig.json overriding those with a runtime `.js` view, because
    @polkadot/dev-ts reads that file and tried to import a declaration file as a
    module
  - --preserve-symlinks in the test scripts

Also drops fflate and @quantus/crypto from ui-keyring's devDependencies; they were
there only because `link:` does not install its target's dependencies.

`yarn lint` now reports 0 errors, down from 25 on pristine upstream. Those were
no-unsafe-assignment and no-unsafe-argument on values that were `any` purely
because the types did not resolve.

Refs quantus/extension#2, quantus/ui#1

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-15 11:08:43 +03:00
rob thijssenandClaude Opus 5 ec1399f3f3 fix(ui-keyring): restoreAccount cannot rebuild an ML-DSA public key from an address
The mirror of the same mistake in keyring.createFromJson, fixed the same way.

restoreAccount passed `decodeAddress(json.address)` as the public key. For the
curve schemes that is correct — the address *is* the public key. An ML-DSA
account id is a one-way Poseidon2 hash, so this constructed a pair whose "public
key" was a hash of the public key. It did not throw; it produced a pair that was
simply wrong.

The public key is in `json.encoded`, still encrypted, and the pair is returned
*locked* with callers reading `pair.address` off it long before a password
appears. So it now passes an accountId — carried as data, used for the address
while locked, and checked against the real key once decodePkcs8 supplies one.
That check matters here as much as in the keyring: the address field sits outside
the encrypted blob, so a tampered one decodes cleanly and yields an account
displaying an address its key cannot sign for.

The 'ed25519' fallback for version-0 JSON is left alone. Those files predate the
crypto type being recorded and are by definition not Quantus, so the guess is
safe — but it is commented, because quantus/common#6 removes ed25519 from
KeypairType and this becomes a refusal.

Build plumbing, all of it dev-time only and all replaced by publishing these
packages to a registry (quantus/extension#2):

Resolutions point @polkadot/{keyring,util-crypto,networks,util} at the sibling
`common` checkout's build output, and @quantus/crypto at `wasm`.

tsconfig.base.json gains `*.d.ts` path mappings for them. Without these, node
resolves the portal symlink to its realpath and `@polkadot/util-crypto` then
resolves inside *common's* tree, where it is the workspace source directory with
no exports map — so EncryptedJson silently fails to resolve and KeyringPair$Json
loses `encoded` and `encoding`. The `*.d.ts` substitution has to come first
because NodeNext will not infer an extension for a bare path, and looks for a
`types` directory instead of `types.d.ts`.

tsconfig.json overrides those with the runtime `.js` view, because
@polkadot/dev-ts reads that file and would otherwise import a declaration file as
a module ("Debug Failure. Output generation failed"). tsc reads
tsconfig.build.json, which extends the base directly, so each gets the view it
needs.

The test script sets --preserve-symlinks, which yarn itself warns is required for
portals: without it the realpath problem above recurs at runtime.

Incidentally, `yarn lint` errors drop from 25 to 8 — resolving those types
removed a pile of `any`. The remaining 8 are upstream's own, in loadContract and
allowGenesis, and are left alone.

Refs quantus/ui#1

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012uDUodEcRbBwNRi3UCmw8f
2026-09-15 10:40:52 +03:00
github-actions[bot] 1d667d4dc0 [CI Skip] release/stable 3.16.7
Lock Threads / lock (push) Has been cancelled
skip-checks: true
2026-03-26 19:24:07 +00:00
Tarik Gul c60975d532 3.16.7 (#861)
* 3.16.7

* Update Changelog
2026-03-26 21:22:47 +02:00
github-actions[bot] 816d22019b [CI Skip] bump/beta 3.16.7-1-x
skip-checks: true
2026-03-26 13:29:51 +00:00
Tarik Gul ddca14ece2 Bump common to 14.0.3 (#860) 2026-03-26 15:28:34 +02:00
github-actions[bot] f5e26741da [CI Skip] bump/beta 3.16.7-0-x
skip-checks: true
2026-03-13 13:57:53 +00:00
Tarik Gul c5ab15118d Set headers for 2026 (#859)
* Set headers for 2026

* remaining headers
2026-03-13 15:56:35 +02:00
github-actions[bot] 2e00b6e4e4 [CI Skip] release/stable 3.16.6
skip-checks: true
2025-12-10 06:42:02 +00:00
Arjun Porwal 8b483c6a1a 3.16.6 (#857) 2025-12-10 12:10:43 +05:30
github-actions[bot] 1339b6291b [CI Skip] release/stable 3.16.5
skip-checks: true
2025-12-10 04:58:38 +00:00
Arjun Porwal 0b69a66b73 3.16.5 (#856) 2025-12-10 10:27:22 +05:30
github-actions[bot] ccb870aec2 [CI Skip] bump/beta 3.16.5-0-x
skip-checks: true
2025-12-10 04:49:08 +00:00
Arjun Porwal 73221469a3 chore: bump polkadot-js deps (#855) 2025-12-10 10:17:49 +05:30
github-actions[bot] 95fccdfc30 [CI Skip] release/stable 3.16.4
skip-checks: true
2025-11-25 11:56:32 +00:00
Arjun Porwal 078133bc5a 3.16.4 (#854) 2025-11-25 17:25:15 +05:30
github-actions[bot] c2c4b1a89a [CI Skip] bump/beta 3.16.4-0-x
skip-checks: true
2025-11-25 11:36:11 +00:00
Arjun Porwal f52e4e5096 chore: bump deps (#853) 2025-11-25 17:04:53 +05:30
github-actions[bot] 292cb319c3 [CI Skip] release/stable 3.16.3
skip-checks: true
2025-11-12 06:32:14 +00:00
Arjun Porwal c16d40d3b7 3.16.3 (#851) 2025-11-12 12:00:59 +05:30
github-actions[bot] 9dd1a86b19 [CI Skip] bump/beta 3.16.3-0-x
skip-checks: true
2025-11-12 06:22:10 +00:00
Arjun Porwal e9dea3bb8a chore: bump deps (#850) 2025-11-12 11:50:51 +05:30
github-actions[bot] b1f6ca7b95 [CI Skip] release/stable 3.16.2
skip-checks: true
2025-10-22 12:19:51 +00:00
Arjun Porwal 06449c3ecb 3.16.2 (#849) 2025-10-22 09:18:33 -03:00
github-actions[bot] 62f6cb363e [CI Skip] bump/beta 3.16.2-0-x
skip-checks: true
2025-10-22 12:11:49 +00:00
Arjun Porwal 062d88d9a6 chore: upgrade deps (#848) 2025-10-22 17:40:20 +05:30
github-actions[bot] 9697a311cc [CI Skip] release/stable 3.16.1
skip-checks: true
2025-08-27 12:53:15 +00:00
Arjun Porwal f125830e2c 3.16.1 (#847)
* 3.16.1

* 3.16.1
2025-08-27 09:52:00 -03:00
Arjun Porwal 4b5d6b7205 3.15.5 (#846) 2025-08-27 17:45:12 +05:30
github-actions[bot] c92ff8e3c7 [CI Skip] bump/beta 3.15.5-0-x
skip-checks: true
2025-08-27 12:07:51 +00:00
Arjun Porwal d974af4c00 chore: upgrade polkadot deps (#845) 2025-08-27 17:36:27 +05:30
github-actions[bot] 50eb62c6dc [CI Skip] release/stable 3.15.4
skip-checks: true
2025-08-13 14:41:42 +00:00
Arjun Porwal ae0d6235f9 3.15.4 (#844)
* 3.15.4

* 3.15.4
2025-08-13 20:10:22 +05:30
github-actions[bot] 76e1273188 [CI Skip] bump/beta 3.15.4-0-x
skip-checks: true
2025-08-13 14:31:05 +00:00
Arjun Porwal 15c05ebecb chore: upgrade polkadot dependencies (#843) 2025-08-13 19:59:40 +05:30
github-actions[bot] 6d6ca2326f [CI Skip] release/stable 3.15.3
skip-checks: true
2025-07-30 05:00:25 +00:00
Arjun Porwal 5a96a6a9bc 3.15.3 (#842) 2025-07-30 10:29:09 +05:30
github-actions[bot] 73e6fcf492 [CI Skip] bump/beta 3.15.3-1-x
skip-checks: true
2025-07-30 04:38:56 +00:00
Arjun Porwal 60bd0a908b chore: bump deps (#841) 2025-07-30 10:07:38 +05:30
github-actions[bot] 0ee31f4005 [CI Skip] bump/beta 3.15.3-0-x
skip-checks: true
2025-07-23 03:47:39 +00:00
Niklas P 9a99507b98 Update Beachball.tsx to remove duplication in strict mode (#840)
in strict mode the beachball gets rendered twice
2025-07-23 09:16:19 +05:30
github-actions[bot] 2b2ec1c6af [CI Skip] release/stable 3.15.2
skip-checks: true
2025-07-02 12:40:44 +00:00
Arjun Porwal e16ef30a07 3.15.2 (#839) 2025-07-02 18:09:19 +05:30
github-actions[bot] f3e23345a5 [CI Skip] bump/beta 3.15.2-0-x
skip-checks: true
2025-07-02 12:32:25 +00:00
Arjun Porwal 61d7383408 chore: upgraded polkadot deps (#838) 2025-07-02 18:00:57 +05:30
github-actions[bot] 54a6be04ca [CI Skip] release/stable 3.15.1
skip-checks: true
2025-06-18 12:35:16 +00:00
Arjun Porwal 86fb5edec7 3.15.1 (#837) 2025-06-18 18:03:57 +05:30
github-actions[bot] d5ab7e64aa [CI Skip] bump/beta 3.14.2-0-x
skip-checks: true
2025-06-18 12:28:42 +00:00
Arjun Porwal 421ccb322a Upgrade polkadot deps (#836)
* chore: upgrade deps

* fix: correct capitalization of "Overview" in README

* fix: correct capitalization of "overview" in README

* fix: update typescript version in package.json and yarn.lock

* fix: downgrade typescript version to 5.5.4
2025-06-18 17:57:21 +05:30
github-actions[bot] 648c379c28 [CI Skip] release/stable 3.14.1
skip-checks: true
2025-05-23 15:27:16 +00:00
Tarik Gul 8541e93c8d 3.14.1 (#835) 2025-05-23 18:25:59 +03:00
github-actions[bot] d94ab0f523 [CI Skip] bump/beta 3.13.2-1-x
skip-checks: true
2025-05-23 15:10:03 +00:00
Tarik Gul 9ceb37eacf Upgrade polkadot-js/common to 13.5.1 (#834) 2025-05-23 18:08:41 +03:00
github-actions[bot] 9bab143e63 [CI Skip] bump/beta 3.13.2-0-x
skip-checks: true
2025-05-23 14:46:53 +00:00
Tarik Gul 2071d3a7d8 Add the type field to external keypair accounts (#833) 2025-05-23 17:45:29 +03:00
github-actions[bot] 36a18e7621 [CI Skip] release/stable 3.13.1
skip-checks: true
2025-04-16 13:01:27 +00:00
Arjun Porwal 41c35eaa37 3.13.1 (#832)
* 3.13.1

* 3.13.1
2025-04-16 18:30:08 +05:30
github-actions[bot] 090ed57255 [CI Skip] bump/beta 3.12.3-1-x
skip-checks: true
2025-04-16 12:00:38 +00:00
Arjun Porwal 905ef46b1f chore: upgrade polkadot deps (#831) 2025-04-16 17:29:16 +05:30
github-actions[bot] 2022f0e3ec [CI Skip] bump/beta 3.12.3-0-x
skip-checks: true
2025-04-02 14:02:33 +00:00
Tarik Gul 1a6fde78fd Add key validation for FileStore (#830) 2025-04-02 17:01:11 +03:00
github-actions[bot] 4dc82926f2 [CI Skip] release/stable 3.12.2
skip-checks: true
2025-02-18 14:14:03 +00:00
Valentin Fernandez 2c3566cad5 3.12.2 2025-02-18 11:12:39 -03:00
github-actions[bot] 146f63fd96 [CI Skip] bump/beta 3.12.2-1-x
skip-checks: true
2025-02-18 13:56:13 +00:00
Valentin Fernandez 12a496bf7b bump common 13.4.3 (#828) 2025-02-18 10:54:45 -03:00
github-actions[bot] 9c4f3b204b [CI Skip] bump/beta 3.12.2-0-x
skip-checks: true
2025-01-17 20:58:59 +00:00
Tarik Gul 5a8666ca0d Bump dev to 0.83.2 (#827) 2025-01-17 22:57:34 +02:00
github-actions[bot] 2e4eaf5c08 [CI Skip] release/stable 3.12.1
skip-checks: true
2025-01-08 16:37:39 +00:00
Tarik Gul 882984d2b3 3.12.1 (#825) 2025-01-08 18:36:13 +02:00
github-actions[bot] 3fde3865d5 [CI Skip] bump/beta 3.11.4-2-x
skip-checks: true
2025-01-08 16:28:49 +00:00
Tarik Gul aa3b0e806a Upgrade common to 13.3.1 (#824) 2025-01-08 18:27:18 +02:00
github-actions[bot] 14ca62de7a [CI Skip] bump/beta 3.11.4-1-x
skip-checks: true
2025-01-08 16:22:05 +00:00
Tarik Gul d9ffc2e697 Bump dev w/ ts (#823) 2025-01-08 18:20:38 +02:00
github-actions[bot] 0986382e72 [CI Skip] bump/beta 3.11.4-0-x
skip-checks: true
2025-01-02 23:08:34 +00:00
Tarik Gul caa0ceea23 2025 (#822)
* 2025

* update License
2025-01-03 01:07:08 +02:00
github-actions[bot] 0b6c1028a7 [CI Skip] release/stable 3.11.3
skip-checks: true
2024-11-12 15:31:31 +00:00
Tarik Gul 0a8c410387 3.11.3 (#820) 2024-11-12 17:29:57 +02:00
github-actions[bot] 80a19f1797 [CI Skip] bump/beta 3.11.3-1-x
skip-checks: true
2024-11-12 14:44:40 +00:00
Tarik Gul a2bfdaaacc Bump common to 13.2.3 (#817) 2024-11-12 16:43:14 +02:00
github-actions[bot] 97a288dbe0 [CI Skip] bump/beta 3.11.3-0-x
skip-checks: true
2024-11-12 14:35:36 +00:00
Tarik Gul 4f5a7d01fd Bump dev to 0.82.1 w/ tslib (#816) 2024-11-12 16:34:07 +02:00
github-actions[bot] 34a0e5a4cc [CI Skip] release/stable 3.11.2
skip-checks: true
2024-10-30 13:39:23 +00:00
Tarik Gul 066f9445b4 3.11.2 (#815) 2024-10-30 15:38:02 +02:00
github-actions[bot] 3bf9a3091b [CI Skip] bump/beta 3.11.2-0-x
skip-checks: true
2024-10-30 13:31:35 +00:00
Tarik Gul 146f6ff5d7 Upgrade common to 13.2.2 (#814) 2024-10-30 15:30:08 +02:00
github-actions[bot] 7faab2b89f [CI Skip] release/stable 3.11.1
skip-checks: true
2024-10-23 12:47:59 +00:00
Tarik Gul f4281ec6d9 3.11.1 (#813) 2024-10-23 15:46:28 +03:00
github-actions[bot] f46de4a524 [CI Skip] bump/beta 3.10.2-2-x
skip-checks: true
2024-10-23 00:49:10 +00:00
Tarik Gul 69e99c95bc Bump yarn to 4.5.1 (#812) 2024-10-23 03:47:43 +03:00
github-actions[bot] 3befcc2e69 [CI Skip] bump/beta 3.10.2-1-x
skip-checks: true
2024-10-23 00:23:35 +00:00
Tarik Gul e5a2337a14 Update polkadot common to 13.2.1 (#811) 2024-10-23 03:22:09 +03:00
github-actions[bot] 8410d5062e [CI Skip] bump/beta 3.10.2-0-x
skip-checks: true
2024-10-22 20:21:58 +00:00
Tarik Gul defe24c202 Bump dev to 0.81.2 (#810) 2024-10-22 23:20:33 +03:00
github-actions[bot] b5713564f6 [CI Skip] release/stable 3.10.1
skip-checks: true
2024-09-20 13:00:22 +00:00
Tarik Gul ec861d8314 3.10.1 (#809) 2024-09-20 15:58:56 +03:00
github-actions[bot] def96e5862 [CI Skip] bump/beta 3.9.2-1-x
skip-checks: true
2024-09-19 00:09:55 +00:00
Tarik Gul 45f4619995 Upgrade polkadot/common to 13.1.1 (#808) 2024-09-19 03:08:25 +03:00
github-actions[bot] 16ca4b0233 [CI Skip] bump/beta 3.9.2-0-x
skip-checks: true
2024-08-13 14:07:33 +00:00
Tarik Gul 43b5831e87 Bump yarn to 4.4.0 (#806) 2024-08-13 17:06:06 +03:00
github-actions[bot] 4952af75b0 [CI Skip] release/stable 3.9.1
skip-checks: true
2024-08-13 13:42:09 +00:00
Tarik Gul 41bab9b8c9 3.9.1 (#805) 2024-08-13 16:40:45 +03:00
github-actions[bot] 9fd024b4d8 [CI Skip] bump/beta 3.8.4-1-x
skip-checks: true
2024-08-13 13:19:55 +00:00
Tarik Gul 8d05c67577 Add chainSpecific option for ledger (#804) 2024-08-13 09:18:28 -04:00
github-actions[bot] 61a28eb333 [CI Skip] bump/beta 3.8.4-0-x
skip-checks: true
2024-08-08 01:52:37 +00:00
Tarik Gul 9930b83e87 Upgrade @polkadot/dev (#803) 2024-08-08 04:51:09 +03:00
github-actions[bot] 616b5d945c [CI Skip] release/stable 3.8.3
skip-checks: true
2024-08-01 00:30:40 +00:00
Tarik Gul b81fc14777 3.8.3 (#802)
* 3.8.3

* credit
2024-07-31 20:29:16 -04:00
github-actions[bot] 7d252ec039 [CI Skip] bump/beta 3.8.3-0-x
skip-checks: true
2024-08-01 00:13:20 +00:00
Ryan Lee 3c890a3e59 fix: qr-code (#801)
* fix: qr-code

* fix: linter warning
2024-07-31 20:11:51 -04:00
github-actions[bot] f08670ba14 [CI Skip] release/stable 3.8.2
skip-checks: true
2024-07-23 22:55:14 +00:00
Tarik Gul 62f86ab9d8 3.8.2 (#799) 2024-07-24 01:53:55 +03:00
github-actions[bot] 5cc4d12685 [CI Skip] bump/beta 3.8.2-0-x
skip-checks: true
2024-07-23 22:45:28 +00:00
Tarik Gul 04c00c675f Fix ledgerApp bug, and remove legacy (#798) 2024-07-23 18:44:03 -04:00
github-actions[bot] 482dcc0ddf [CI Skip] release/stable 3.8.1
skip-checks: true
2024-07-22 20:55:18 +00:00
Tarik Gul 37f22ae0de 3.8.1 (#797) 2024-07-22 23:53:58 +03:00
github-actions[bot] 940bbdf949 [CI Skip] bump/beta 3.7.2-0-x
skip-checks: true
2024-07-22 20:29:20 +00:00
Tarik Gul 0f03a8c2bf Add new ledger app settings (#796)
* Add ledger app settings

* Add ledgerApp

* Add to setting struct

* add available ledger apps

* fix info
2024-07-22 16:27:58 -04:00
github-actions[bot] b61b7f25b8 [CI Skip] release/stable 3.7.1
skip-checks: true
2024-07-13 23:21:58 +00:00
Tarik Gul f887590fec 3.7.1 (#795) 2024-07-14 02:20:38 +03:00
github-actions[bot] f3473159ac [CI Skip] bump/beta 3.6.7-1-x
skip-checks: true
2024-07-13 23:11:38 +00:00
Tarik Gul 248a5c2208 Bump yarn to 4.3.1 (#794) 2024-07-14 02:10:18 +03:00
github-actions[bot] 7e98a6727d [CI Skip] bump/beta 3.6.7-0-x
skip-checks: true
2024-07-13 23:02:47 +00:00
Tarik Gul 4724ddee1f Upgrade common to 13.0.2 (#793) 2024-07-14 02:01:21 +03:00
github-actions[bot] 06c2fe0463 [CI Skip] release/stable 3.6.6
skip-checks: true
2024-04-17 19:24:26 +00:00
Tarik Gul 31c6e597ea 3.6.6 (#790) 2024-04-17 22:23:07 +03:00
github-actions[bot] 0a70f8b412 [CI Skip] bump/beta 3.6.6-2-x
skip-checks: true
2024-04-17 17:02:48 +00:00
Viki Val a694afc240 Add compatibility layer for H160 addresses (#789)
*  compatibilty layer for H160 addresses

* :broom linter

* 🧼 space before (
2024-04-17 13:01:24 -04:00
github-actions[bot] c77e8d3c4a [CI Skip] bump/beta 3.6.6-1-x
skip-checks: true
2024-04-08 16:50:48 +00:00
Tarik Gul 7511d4c27f Update ci checkout and setup_node to v4 (#788) 2024-04-08 19:49:15 +03:00
github-actions[bot] 66d0d632df [CI Skip] bump/beta 3.6.6-0-x
skip-checks: true
2024-03-26 01:32:02 +00:00
Tarik Gul 76e77cfc2e Bump yarn to 4.1.1 (#787) 2024-03-26 03:30:38 +02:00
github-actions[bot] 91f8cddb3c [CI Skip] release/stable 3.6.5
skip-checks: true
2024-02-28 16:47:06 +00:00
Tarik Gul 254409f486 3.6.5 (#785) 2024-02-28 18:45:49 +02:00
github-actions[bot] 607abcbd86 [CI Skip] bump/beta 3.6.5-6-x
skip-checks: true
2024-02-17 13:44:01 +00:00
Tarik Gul b2126c3db6 chore(yarn): update yarn to 4.1.0 (#783) 2024-02-17 15:42:40 +02:00
github-actions[bot] 3313bd38ca [CI Skip] bump/beta 3.6.5-5-x
skip-checks: true
2024-02-17 01:57:34 +00:00
Tarik Gul 062f9f37f7 ci: add user (TarikGul) to auto-approve (#784) 2024-02-17 03:56:11 +02:00
github-actions[bot] 143cce1cb8 [CI Skip] bump/beta 3.6.5-4-x
skip-checks: true
2024-01-12 10:45:05 +00:00
Jaco 9ec68688d6 Adjust Vue peerDependency, >= 2.7 for defineComponent (#782)
* Adjust Vue peerDependency, >= 2.7 for defineComponent

* Bump to dev dep to vue 2.7.16
2024-01-12 12:43:40 +02:00
github-actions[bot] 6670bf75f6 [CI Skip] bump/beta 3.6.5-3-x
skip-checks: true
2024-01-08 13:06:43 +00:00
Jaco d2029bdf5b 2024 (#781) 2024-01-08 15:05:20 +02:00
github-actions[bot] 64c4abe645 [CI Skip] bump/beta 3.6.5-2-x
skip-checks: true
2023-12-19 08:57:33 +00:00
Jaco c3b826c3a4 Bump dev w/ packageDetect adjustments (#779) 2023-12-19 10:56:09 +02:00
github-actions[bot] 90a87ebb5b [CI Skip] bump/beta 3.6.5-1-x
skip-checks: true
2023-12-19 06:17:09 +00:00
Jaco 3937b36260 Bump deps (#778) 2023-12-19 08:15:36 +02:00
github-actions[bot] 8557dfd53a [CI Skip] bump/beta 3.6.5-0-x
skip-checks: true
2023-12-18 08:26:32 +00:00
Jaco aef29db995 Bump yarn berry, bump deps (#777) 2023-12-18 10:25:09 +02:00
github-actions[bot] 8d762218b4 [CI Skip] release/stable 3.6.4
skip-checks: true
2023-11-18 08:38:49 +00:00
Jaco 63be1a965b 3.6.4 (#776) 2023-11-18 10:37:12 +02:00
github-actions[bot] 0837376d00 [CI Skip] bump/beta 3.6.4-0-x
skip-checks: true
2023-10-15 10:43:44 +00:00
Jaco 1fbb4d67bb Bump TS (#775) 2023-10-15 13:41:12 +03:00
github-actions[bot] dd83ad69a9 [CI Skip] release/stable 3.6.3
skip-checks: true
2023-09-15 06:58:37 +00:00
Jaco ff73cc86fb 3.6.3 (#774) 2023-09-15 09:56:27 +03:00
github-actions[bot] c93438754f [CI Skip] release/stable 3.6.2
skip-checks: true
2023-08-23 10:37:54 +00:00
Jaco 3b542acc47 3.6.2 (#773) 2023-08-23 13:35:47 +03:00
github-actions[bot] 473b455373 [CI Skip] bump/beta 3.6.2-0-x
skip-checks: true
2023-08-22 11:40:56 +00:00
Jeeyong Um 4ecdd4d803 Fix outdated links in README.md (#772) 2023-08-22 14:38:40 +03:00
github-actions[bot] 9a67ff2fc1 [CI Skip] release/stable 3.6.1
skip-checks: true
2023-08-21 07:48:06 +00:00
Jaco eebe754c92 3.6.1 (#771) 2023-08-21 10:45:53 +03:00
github-actions[bot] f285f2ff58 [CI Skip] bump/beta 3.5.2-3-x
skip-checks: true
2023-08-20 06:49:25 +00:00
Jaco cf28882540 Bump deps (#770) 2023-08-20 09:47:09 +03:00
github-actions[bot] fc08babdaf [CI Skip] bump/beta 3.5.2-2-x
skip-checks: true
2023-08-18 07:24:30 +00:00
Jaco 666fc8f702 Bump deps (#769) 2023-08-18 10:22:13 +03:00
github-actions[bot] d2a28ca315 [CI Skip] bump/beta 3.5.2-1-x
skip-checks: true
2023-07-06 07:46:28 +00:00
Jaco 67e867a72e Bump deps (#768)
* Bump deps

* Fix build
2023-07-06 10:44:14 +03:00
github-actions[bot] abe4e5b340 [CI Skip] bump/beta 3.5.2-0-x
skip-checks: true
2023-06-18 08:40:11 +00:00
Jaco a5fdaf1f1c Bump deps (#767) 2023-06-18 11:37:13 +03:00
github-actions[bot] 3b7b85e835 [CI Skip] release/stable 3.5.1
skip-checks: true
2023-06-11 14:32:41 +00:00
Jaco 6119c57d46 3.5.1 (#766) 2023-06-11 17:30:29 +03:00
github-actions[bot] 6279b3b926 [CI Skip] bump/beta 3.4.3-0-x
skip-checks: true
2023-06-11 07:19:04 +00:00
Jaco 50b4e2bd07 Adjust object index typings (#765)
* Adjust object index typings

* CHANGELOG

* Bump common
2023-06-11 10:16:28 +03:00
github-actions[bot] 252a8a8554 [CI Skip] release/stable 3.4.2
skip-checks: true
2023-06-05 04:55:41 +00:00
Jaco 83fd6ad0c0 3.4.2 (#764)
* 3.4.2

* Correct CHANGELOG
2023-06-05 07:53:12 +03:00
github-actions[bot] 420f8f095b [CI Skip] bump/beta 3.4.2-3-x
skip-checks: true
2023-06-02 10:22:02 +00:00
Jaco 8a3ee3588d Bump deps (w/ TS 5.1) (#763) 2023-06-02 13:19:08 +03:00
github-actions[bot] 62e5e5e23e [CI Skip] bump/beta 3.4.2-2-x
skip-checks: true
2023-05-25 07:27:44 +00:00
Jaco a456a4c9df jg-bump-deps (#762) 2023-05-25 10:25:30 +03:00
github-actions[bot] 9a9c1f50ee [CI Skip] bump/beta 3.4.2-1-x
skip-checks: true
2023-05-21 09:41:53 +00:00
Jaco 7ad8333f2e Bump dev (w/ eslint config adj) (#761) 2023-05-21 12:39:43 +03:00
github-actions[bot] ec99102a78 [CI Skip] bump/beta 3.4.2-0-x
skip-checks: true
2023-05-18 09:13:06 +00:00
Jaco 36c7da623b Adjust tsconfig usage (#760) 2023-05-18 12:10:56 +03:00
github-actions[bot] 7bb148eea9 [CI Skip] release/stable 3.4.1
skip-checks: true
2023-05-13 08:55:51 +00:00
Jaco ee039545be 3.4.1 (#759) 2023-05-13 11:53:20 +03:00
github-actions[bot] e15651ac9c [CI Skip] bump/beta 3.3.2-0-x
skip-checks: true
2023-05-09 06:06:40 +00:00
Jaco f92e276a0d Bump deps (#758) 2023-05-09 09:04:24 +03:00
github-actions[bot] a51ef7bccc [CI Skip] release/stable 3.3.1
skip-checks: true
2023-05-07 11:13:05 +00:00
Jaco bf8a295d64 3.3.1 (#757) 2023-05-07 14:10:54 +03:00
github-actions[bot] d2bbf6bb0e [CI Skip] bump/beta 3.2.3-1-x
skip-checks: true
2023-05-05 06:31:40 +00:00
Jaco 60cc5fbd4b Bump deps & adjust CHANGELOG (#756) 2023-05-05 09:29:17 +03:00
github-actions[bot] dae851297b [CI Skip] bump/beta 3.2.3-0-x
skip-checks: true
2023-05-05 06:00:24 +00:00
Zenandgithub-actions[bot] fa9eef757a feat: adapt Vue 3.x (#755)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2023-05-05 08:57:35 +03:00
164 changed files with 7590 additions and 7861 deletions
-19
View File
@@ -1,19 +0,0 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors
// SPDX-License-Identifier: Apache-2.0
const base = require('@polkadot/dev/config/eslint.cjs');
module.exports = {
...base,
ignorePatterns: [
...base.ignorePatterns,
'jest/**/*',
'**/*.d.ts'
],
parserOptions: {
...base.parserOptions,
project: [
'./tsconfig.eslint.json'
]
}
};
+1 -1
View File
@@ -11,6 +11,6 @@ jobs:
steps:
- uses: jacogr/action-approve@795afd1dd096a2071d7ec98740661af4e853b7da
with:
authors: jacogr
authors: jacogr, TarikGul
labels: -auto
token: ${{ secrets.GH_PAT_BOT }}
+3 -3
View File
@@ -11,11 +11,11 @@ jobs:
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
- name: ${{ matrix.step }}
run: |
yarn install --immutable | grep -v 'YN0013'
yarn install --immutable
yarn ${{ matrix.step }}
+3 -3
View File
@@ -18,14 +18,14 @@ jobs:
GH_RELEASE_GITHUB_API_TOKEN: ${{ secrets.GH_PAT_BOT }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GH_PAT_BOT }}
- uses: actions/setup-node@v3
- uses: actions/setup-node@v4
with:
node-version: 'lts/*'
- name: ${{ matrix.step }}
run: |
yarn install --immutable | grep -v 'YN0013'
yarn install --immutable
yarn ${{ matrix.step }}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors
// Copyright 2017-2026 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
module.exports = require('@polkadot/dev/config/prettier.cjs');
+4
View File
@@ -0,0 +1,4 @@
{
"eslint.enable": true,
"eslint.experimental.useFlatConfig": true
}
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-785
View File
File diff suppressed because one or more lines are too long
+934
View File
File diff suppressed because one or more lines are too long
+16 -6
View File
@@ -1,13 +1,23 @@
compressionLevel: mixed
enableGlobalCache: false
enableImmutableInstalls: false
enableProgressBars: false
logFilters:
- code: YN0013
level: discard
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
spec: "@yarnpkg/plugin-version"
yarnPath: .yarn/releases/yarn-4.5.1.cjs
yarnPath: .yarn/releases/yarn-3.2.0.cjs
# @quantus packages come from the Gitea registry — safe as a whole-scope route
# because we own every name in it. The forked @polkadot packages cannot be routed
# the same way (most of that scope is unforked and lives on npm), so they are
# pinned to tarball URLs in package.json resolutions instead.
npmScopes:
quantus:
npmRegistryServer: "https://git.lair.cafe/api/packages/quantus/npm/"
+265
View File
@@ -1,5 +1,270 @@
# CHANGELOG
## 3.16.7 Mar 25, 2026
Changes:
- Bump common to 14.0.3 ([#860](https://github.com/polkadot-js/ui/pull/860))
- Set headers for 2026 ([#859](https://github.com/polkadot-js/ui/pull/859))
## 3.16.6 Dec 10, 2025
Changes:
- Upgraded polkadot-js dependencies ([#855](https://github.com/polkadot-js/ui/pull/855))
## 3.16.5 Dec 10, 2025
Changes:
- Upgraded polkadot-js dependencies ([#855](https://github.com/polkadot-js/ui/pull/855))
## 3.16.4 Nov 25, 2025
Changes:
- Upgraded polkadot-js dependencies ([#853](https://github.com/polkadot-js/ui/pull/853))
## 3.16.3 Nov 12, 2025
Changes:
- Upgraded polkadot-js dependencies ([#850](https://github.com/polkadot-js/ui/pull/850))
## 3.16.2 Oct 22, 2025
Changes:
- Upgraded polkadot-js dependencies ([#848](https://github.com/polkadot-js/ui/pull/848))
## 3.16.1 Aug 27, 2025
Changes:
- 3.15.5 ([#846](https://github.com/polkadot-js/ui/pull/846))
- Upgraded polkadot deps ([#845](https://github.com/polkadot-js/ui/pull/845))
## 3.15.4 Aug 13, 2025
Changes:
- Upgraded polkadot deps ([#843](https://github.com/polkadot-js/ui/pull/843))
## 3.15.3 July 30, 2025
Changes:
- Update Beachball.tsx to remove duplication in strict mode ([#840](https://github.com/polkadot-js/ui/pull/840))
- Bump polkadot deps ([#841](https://github.com/polkadot-js/ui/pull/841))
## 3.15.2 July 2, 2025
Changes:
- Upgraded polkadot deps ([#838](https://github.com/polkadot-js/ui/pull/838))
## 3.15.1 Jun 18, 2025
Changes:
- Upgraded polkadot deps ([#831](https://github.com/polkadot-js/ui/pull/831))
## 3.14.1 May 23, 2025
Changes:
- Add the type field to external keypair accounts ([#833](https://github.com/polkadot-js/ui/pull/833))
- Upgrade polkadot-js/common to 13.5.1 ([#834](https://github.com/polkadot-js/ui/pull/834))
## 3.13.1 Apr 16, 2025
Changes:
- Add key validation for FileStore ([#830](https://github.com/polkadot-js/ui/pull/830))
- Upgraded polkadot deps ([#831](https://github.com/polkadot-js/ui/pull/831))
## 3.12.2 Feb 18, 2025
Changes:
- Bump dev to v0.83.2 ([#827](https://github.com/polkadot-js/ui/pull/827))
- Bump common to v13.4.3 ([#828](https://github.com/polkadot-js/ui/pull/828))
## 3.12.1 Jan 8, 2025
Changes:
- Upgrade common to 13.3.1 ([#824](https://github.com/polkadot-js/ui/pull/824))
- Bump dev w/ ts ([#823](https://github.com/polkadot-js/ui/pull/823))
- Update headers to 2025 ([#822](https://github.com/polkadot-js/ui/pull/822))
## 3.11.3 Nov 12, 2024
Changes:
- Upgrade polkadot/common to 13.2.3 ([817](https://github.com/polkadot-js/ui/pull/#))
- Bump dev to 0.82.1 w/ tslib ([#816](https://github.com/polkadot-js/ui/pull/816))
## 3.11.2 Oct 30, 2024
Changes:
- Upgrade polkadot/common to 13.2.2 ([#814](https://github.com/polkadot-js/ui/pull/814))
## 3.11.1 Oct 23, 2024
Changes:
- Upgrade polkadot/common to 13.2.1 ([#811](https://github.com/polkadot-js/ui/pull/811))
- Bump yarn to 4.5.1 ([#812](https://github.com/polkadot-js/ui/pull/812))
- Bump dev 0.81.2 ([#810](https://github.com/polkadot-js/ui/pull/810))
- Correctly exports CJS and ESM
## 3.10.1 Sep 20, 2024
Changes:
- Upgrade polkadot/common to 13.1.1 ([#808](https://github.com/polkadot-js/ui/pull/808))
- Bump yarn to 4.4.0 ([#806](https://github.com/polkadot-js/ui/pull/806))
## 3.9.1 Aug 13, 2024
Changes:
- Upgrade @polkadot/dev to 0.79.3 ([#803](https://github.com/polkadot-js/ui/pull/803))
- Add chainSpecific option for ledger ([#804](https://github.com/polkadot-js/ui/pull/804))
## 3.8.3 July 31, 2024
Changes:
- Fix Qr Scanner (Thanks to https://github.com/ryanleecode)
## 3.8.2 July 22, 2024
Changes:
- Fix ledgerApp bug, and remove legacy
## 3.8.1 July 22, 2024
Changes:
- Add new ledger app settings
## 3.7.1 July 13, 2024
Changes:
- Upgrade polkadot/common 13.0.2
- Bump yarn to 4.3.1
## 3.6.6 Apr 17, 2024
Contributed:
- Add compatibility layer for H160 addresses (Thanks to https://github.com/vikiival)
Changes:
- Update ci checkout and setup_node to v4
- Bump yarn to 4.1.1
## 3.6.5 Feb 28, 2024
Changes
- Bump to `@polkadot/util` 12.6.2
- Bump to `react-native-svg` 14.1.0
- Adjust `Vue` peerDependency, >= 2.7 for defineComponent
## 3.6.4 Nov 18, 2023
Changes:
- Bump to `@polkadot/util` 12.6.1
## 3.6.3 Sep 15, 2023
Changes:
- Bump to `@polkadot/util` 12.5.1
## 3.6.2 Aug 23, 2023
Changes:
- Bump to `@polkadot/util` 12.4.2
## 3.6.1 Aug 21, 2023
Changes:
- Update to latest React `styled-components`
- Bump to `@polkadot/util` 12.4.1
## 3.5.1 Jun 11, 2023
Changes:
- Adjust object index access for stricter tsconfig settings
- Bump to `@polkadot/util` 12.3.1
## 3.4.2 Jun 5, 2023
- Bump to `@polkadot/util` 12.2.2
## 3.4.1 May 13, 2023
Changes:
- Add `module` to `package.json` export map (ESM-only)
- Bump to `@polkadot/util` 12.2.1
## 3.3.1 May 7, 2023
Contributed:
- Adjust `vue-identicon` to be Vue 3 compatible (Thanks to https://github.com/Gavin-Gong)
Changes:
- Bump to `@polkadot/util` 12.1.2
## 3.2.2 Apr 29, 2023
Changes:
+9 -2
View File
@@ -1,4 +1,6 @@
710 Jaco 3.2.2 (#754)
735 Jaco Adjust Vue peerDependency, >= 2.7 for defineComponent (#782)
41 Tarik Gul 3.16.7 (#861)
22 Arjun Porwal 3.16.6 (#857)
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
4 Antoine Estienne Refactor logic to better use prefix (#491)
4 kwingram25 fix ff api url issue (#289)
@@ -8,6 +10,8 @@
2 Drew Stone Add Edgeware testnet and mainnet updated endpoints (#274)
2 Hanwen Cheng allow qr to scan seed qr (#330)
2 Nikos Kontakis Fix undefined process error that may appear when using ui (#524)
2 Valentin Fernandez 3.12.2
2 Viki Val Add compatibility layer for H160 addresses (#789)
2 Vlad Proshchavaiev Add Subsocial to ss58 defaults (#358)
2 Xiliang Chen Update UNfrastructure node label (#160)
2 雪霁 Batch export patch up (#455)
@@ -21,16 +25,19 @@
1 Derek Colley Remove redundant `div` wrappers in vue-identicon (#643)
1 Harry Liu Update README.md (#166)
1 Jake Naviasky Add Edgeware chain prefix to settings. (#317)
1 Jeeyong Um Fix outdated links in README.md (#772)
1 Logan Saether Propose W3F node (#188)
1 Lovesh Harchandani Allow Ledger support for Dock (#425)
1 Luke Schoen Fix typo in heading (#114)
1 Nantian fix bigint type (#510)
1 Nikhil Ranjan Updated to valid javascript (#271)
1 Niklas P Update Beachball.tsx to remove duplication in strict mode (#840)
1 omahs Fix: typos (#709)
1 Ryan Lee fix: qr-code (#801)
1 Shawn Tabrizi Add a new `notification` setting (#498)
1 Viki Val :bug: identicon has isAlternative both as data and prop (#668)
1 Wei Tang Add Kulupu to the network selection list (#254)
1 WoeOm add darwinia ss58 (#379)
1 yuhui1208 [Stores] make FileStroe read key safely (#338)
1 Yuri Add webpack 5 support (#557)
1 Zen feat: adapt Vue 3.x (#755)
1 菩提 fix some bugs (#260)
+1 -1
View File
@@ -13,6 +13,6 @@ The following UI components are currently available -
Additionally some shared libraries, that are not dependent on any framework -
- [ui-keyring](packages/ui-keyring/) A browser-specific wrapper around the base [@polkadot/util-keyring](https://github.com/polkadot-js/util/) library
- [ui-keyring](packages/ui-keyring/) A browser-specific wrapper around the base [@polkadot/keyring](https://github.com/polkadot-js/common/) library
- [ui-settings](packages/ui-settings/) A browser local storage wrapper for app settings & configuration
- [ui-shared](packages/ui-shared) Shared logic that is used across UI components, e.g. for icon generation
+8
View File
@@ -0,0 +1,8 @@
// Copyright 2017-2026 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import baseConfig from '@polkadot/dev/config/eslint';
export default [
...baseConfig
];
+12 -9
View File
@@ -6,7 +6,7 @@
},
"homepage": "https://github.com/polkadot-js/ui#readme",
"license": "Apache-2.0",
"packageManager": "yarn@3.2.0",
"packageManager": "yarn@4.5.1",
"private": true,
"repository": {
"type": "git",
@@ -14,10 +14,10 @@
},
"sideEffects": false,
"type": "module",
"version": "3.2.2",
"version": "3.16.7",
"versions": {
"git": "3.2.2",
"npm": "3.2.2"
"git": "3.16.7",
"npm": "3.16.7"
},
"workspaces": [
"packages/*"
@@ -33,15 +33,18 @@
"test:one": "polkadot-dev-run-test --env browser"
},
"devDependencies": {
"@polkadot/dev": "^0.73.6",
"@polkadot/x-bundle": "^12.1.1",
"@types/node": "^18.16.3",
"@polkadot/dev": "^0.83.3",
"@polkadot/x-bundle": "^14.0.3",
"@types/node": "^22.10.5",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-is": "^18.2.0",
"react-native": "^0.71.7"
"react-native": "^0.73.1"
},
"resolutions": {
"typescript": "^5.0.4"
"@polkadot/keyring": "https://git.lair.cafe/api/packages/quantus/npm/%40polkadot%2Fkeyring/-/14.0.3-quantus.3/keyring-14.0.3-quantus.3.tgz",
"@polkadot/networks": "https://git.lair.cafe/api/packages/quantus/npm/%40polkadot%2Fnetworks/-/14.0.3-quantus.3/networks-14.0.3-quantus.3.tgz",
"@polkadot/util-crypto": "https://git.lair.cafe/api/packages/quantus/npm/%40polkadot%2Futil-crypto/-/14.0.3-quantus.3/util-crypto-14.0.3-quantus.3.tgz",
"typescript": "5.5.4"
}
}
+13 -14
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
"node": ">=18"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
"license": "Apache-2.0",
@@ -14,28 +14,27 @@
"url": "https://github.com/polkadot-js/ui.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./packageDetect.js",
"./packageDetect.cjs"
],
"type": "module",
"version": "3.2.2",
"version": "3.16.7",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^12.1.1",
"@polkadot/ui-settings": "3.2.2",
"@polkadot/ui-shared": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"@polkadot/keyring": "^14.0.3",
"@polkadot/ui-settings": "3.16.7",
"@polkadot/ui-shared": "3.16.7",
"@polkadot/util": "^14.0.3",
"@polkadot/util-crypto": "^14.0.3",
"ethereum-blockies-base64": "^1.0.2",
"jdenticon": "3.2.0",
"react-copy-to-clipboard": "^5.1.0",
"styled-components": "^5.3.10",
"tslib": "^2.5.0"
"styled-components": "^6.1.1",
"tslib": "^2.8.1"
},
"devDependencies": {
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.2.1",
"@types/styled-components": "^5.1.26",
"@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-dom": "^18.2.18",
"xmlserializer": "^0.6.1"
},
"peerDependencies": {
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons/index.js';
@@ -1,7 +0,0 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { packageInfo as settingsInfo } from '@polkadot/ui-settings/packageInfo';
import { packageInfo as sharedInfo } from '@polkadot/ui-shared/packageInfo';
export default [settingsInfo, sharedInfo];
@@ -1,11 +0,0 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types.js';
@@ -10,9 +10,12 @@ import { beachballIcon } from '@polkadot/ui-shared';
function Identicon ({ address, className = '', size, style = {} }: Props): React.ReactElement<Props> {
const updateElem = useCallback(
(node: HTMLDivElement): void => {
node && node.appendChild(
beachballIcon(address, { isAlternative: false, size })
);
if (node) {
node.innerHTML = '';
node.appendChild(
beachballIcon(address, { isAlternative: false, size })
);
}
},
[address, size]
);
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types.js';
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types.js';
@@ -28,7 +28,7 @@ function Identicon ({ address, className = '', size, style = {} }: Props): React
);
}
const StyledImg = styled.img(({ size }: ImgProps) => `
const StyledImg = styled.img<ImgProps>(({ size }) => `
display: block;
height: ${size}px;
width: ${size}px;
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types.js';
@@ -1,4 +1,4 @@
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
// Copyright 2018-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Copyright 2018 Paritytech via paritytech/oo7/polkadot-identicon
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { Beachball } from './Beachball.js';
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage.js';
import './packageDetect.js';
import { Identicon } from './bundle.js';
@@ -0,0 +1,13 @@
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
// (packageInfo imports will be kept as-is, user-editable)
import { packageInfo as settingsInfo } from '@polkadot/ui-settings/packageInfo';
import { packageInfo as sharedInfo } from '@polkadot/ui-shared/packageInfo';
import { detectPackage } from '@polkadot/util';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, [settingsInfo, sharedInfo]);
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.16.7' };
+2 -14
View File
@@ -1,16 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// Copyright 2017-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { StyledInterface } from 'styled-components';
import styledComponents from 'styled-components';
// In styled-components v6, there is a named export which can be used
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
export const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
export { styled } from 'styled-components';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
// Copyright 2018-2026 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type React from 'react';
+11 -14
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Generates and reads QR codes",
"engines": {
"node": ">=16"
"node": ">=18"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
"license": "Apache-2.0",
@@ -14,24 +14,21 @@
"url": "https://github.com/polkadot-js/ui.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./packageDetect.js",
"./packageDetect.cjs"
],
"type": "module",
"version": "3.2.2",
"version": "3.16.7",
"main": "index.js",
"dependencies": {
"@polkadot/ui-settings": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"@polkadot/ui-settings": "3.16.7",
"@polkadot/util": "^14.0.3",
"@polkadot/util-crypto": "^14.0.3",
"@zxing/browser": "^0.1.5",
"@zxing/library": "^0.21.2",
"qrcode-generator": "^1.4.4",
"react-qr-reader": "^2.2.1",
"styled-components": "^5.3.10",
"tslib": "^2.5.0"
},
"devDependencies": {
"@types/react-qr-reader": "^2.1.4",
"@types/styled-components": "^5.1.26"
"styled-components": "^6.1.1",
"tslib": "^2.8.1"
},
"peerDependencies": {
"@polkadot/util": "*",
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useMemo, useRef, useState } from 'react';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React, { useMemo } from 'react';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React, { useMemo } from 'react';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { NetworkSpecsStruct } from '@polkadot/ui-settings/types';
+45 -15
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import React, { useCallback, useMemo } from 'react';
import Reader from 'react-qr-reader';
import { BrowserQRCodeReader, type IScannerControls } from '@zxing/browser';
import React, { useCallback, useEffect, useMemo, useRef } from 'react';
import { styled } from './styled.js';
import { createImgSize } from './util.js';
@@ -23,6 +23,9 @@ const DEFAULT_ERROR = (error: Error): void => {
};
function Scan ({ className = '', delay = DEFAULT_DELAY, onError = DEFAULT_ERROR, onScan, size, style = {} }: Props): React.ReactElement<Props> {
const videoRef = useRef<HTMLVideoElement>(null);
const controlsRef = useRef<IScannerControls | null>(null);
const containerStyle = useMemo(
() => createImgSize(size),
[size]
@@ -33,21 +36,52 @@ function Scan ({ className = '', delay = DEFAULT_DELAY, onError = DEFAULT_ERROR,
[onError]
);
const _onScan = useCallback(
(data: string | null) => data && onScan(data),
[onScan]
);
useEffect(() => {
const codeReader = new BrowserQRCodeReader();
const startScanning = async () => {
try {
const videoInputDevices = await BrowserQRCodeReader.listVideoInputDevices();
const selectedDeviceId = videoInputDevices[0].deviceId;
controlsRef.current = await codeReader.decodeFromVideoDevice(
selectedDeviceId,
videoRef.current ?? undefined,
(result, error) => {
if (result) {
onScan(result.getText());
}
if (error && !(error instanceof Error)) {
_onError(new Error(error));
}
}
);
} catch (error) {
_onError(error instanceof Error ? error : new Error('Unknown error occurred'));
}
};
// eslint-disable-next-line @typescript-eslint/no-misused-promises
const timeoutId = setTimeout(startScanning, delay);
return () => {
clearTimeout(timeoutId);
if (controlsRef.current) {
controlsRef.current.stop();
}
};
}, [onScan, _onError, delay]);
return (
<StyledDiv
className={className}
style={containerStyle}
>
<Reader
<video
className='ui--qr-Scan'
delay={delay}
onError={_onError}
onScan={_onScan}
ref={videoRef}
style={style}
/>
</StyledDiv>
@@ -60,10 +94,6 @@ const StyledDiv = styled.div`
height: 100%;
transform: matrix(-1, 0, 0, 1, 0, 0);
width: 100%;
video {
margin: 0;
}
}
`;
+10 -5
View File
@@ -1,6 +1,8 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import React, { useCallback } from 'react';
import { decodeAddress } from '@polkadot/util-crypto';
@@ -11,7 +13,7 @@ import { QrScan } from './Scan.js';
interface ScanType {
isAddress: boolean;
content: string;
genesisHash: string;
genesisHash: HexString | null;
name?: string | undefined;
}
@@ -29,13 +31,16 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
(data: string | null): void => {
if (data) {
try {
let prefix: string, content: string, genesisHash: string, name: string[];
let prefix: string;
let content: string;
let genesisHash: string | null;
let name: string[];
if (!isEthereum) {
[prefix, content, genesisHash, ...name] = data.split(':');
} else {
[prefix, content, ...name] = data.split(':');
genesisHash = '';
genesisHash = null;
content = content.substring(0, 42);
}
@@ -52,7 +57,7 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
decodeAddress(content);
}
onScan({ content, genesisHash, isAddress, name: name?.length ? name.join(':') : undefined });
onScan({ content, genesisHash: genesisHash as HexString, isAddress, name: name?.length ? name.join(':') : undefined });
} catch (error) {
onError && onError(error as Error);
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { QrDisplayAddress } from './DisplayAddress.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export const ADDRESS_PREFIX = 'substrate';
-6
View File
@@ -1,6 +0,0 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Empty template, auto-generated by @polkadot/dev
export default [];
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage.js';
import './packageDetect.js';
export * from './bundle.js';
@@ -1,11 +1,11 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
// (packageInfo imports will be kept as-is, user-editable)
import { detectPackage } from '@polkadot/util';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
detectPackage(packageInfo, null, []);
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.2.2' };
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.16.7' };
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import _qrcode from 'qrcode-generator';
+2 -14
View File
@@ -1,16 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { StyledInterface } from 'styled-components';
import styledComponents from 'styled-components';
// In styled-components v6, there is a named export which can be used
// directly, i.e. "import { styled } from ..." with no more magic. Until
// such time the cjs vs esm import here is problematic, so we hack around
// the various shapes below
export const styled = (
(styledComponents as unknown as { styled: StyledInterface }).styled ||
(styledComponents as unknown as { default: StyledInterface }).default ||
styledComponents as unknown as StyledInterface
);
export { styled } from 'styled-components';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev-test/globals.d.ts" />
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// Copyright 2017-2026 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { isString, u8aConcat, u8aToU8a } from '@polkadot/util';
+3
View File
@@ -5,6 +5,9 @@
"outDir": "./build",
"rootDir": "./src"
},
"exclude": [
"**/*.spec.ts"
],
"references": [
{ "path": "../ui-settings/tsconfig.build.json" }
]
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../react-qr/tsconfig.build.json" }
]
}
+10 -10
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
"node": ">=18"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
"license": "Apache-2.0",
@@ -14,21 +14,21 @@
"url": "https://github.com/polkadot-js/ui.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./packageDetect.js",
"./packageDetect.cjs"
],
"type": "module",
"version": "3.2.2",
"version": "3.16.7",
"main": "index.js",
"dependencies": {
"@polkadot/ui-shared": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"react-native-svg": "^12.5.1",
"tslib": "^2.5.0"
"@polkadot/ui-shared": "3.16.7",
"@polkadot/util": "^14.0.3",
"@polkadot/util-crypto": "^14.0.3",
"react-native-svg": "^14.1.0",
"tslib": "^2.8.1"
},
"devDependencies": {
"@types/react-native": "^0.71.6"
"@types/react-native": "^0.72.8"
},
"peerDependencies": {
"@polkadot/util": "*",
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons/index.js';
@@ -1,6 +0,0 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { packageInfo as sharedInfo } from '@polkadot/ui-shared/packageInfo';
export default [sharedInfo];
@@ -1,11 +0,0 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types.js';
@@ -1,4 +1,4 @@
// Copyright 2018-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2018-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Circle as CircleType } from '@polkadot/ui-shared/icons/types';
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as Empty } from './Empty.js';
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage.js';
import './packageDetect.js';
import Identicon from './Identicon.js';
@@ -0,0 +1,12 @@
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
// (packageInfo imports will be kept as-is, user-editable)
import { packageInfo as sharedInfo } from '@polkadot/ui-shared/packageInfo';
import { detectPackage } from '@polkadot/util';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, [sharedInfo]);
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2017-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.16.7' };
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2018-2023 @polkadot/reactnative-identicon authors & contributors
// Copyright 2018-2026 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export interface Props {
+1 -1
View File
@@ -123,7 +123,7 @@ class MyReactComponent extends React.PureComponent<State> {
- What are 'external' accounts, i.e. when to set the `isExternal` meta key to true?
- An external account is one where the keys are not managed by keyring, e.g. in Parity Signer or Ledger Nano.
- SS58 Encode / Decode?
- SS58 is a simple address format designed for Substrate based chains. You can read about its specification in more detail in the [Parity Wiki](https://wiki.parity.io/External-Address-Format-(SS58)).
- SS58 is a simple address format designed for Substrate based chains. You can read about its specification in more detail in the [Substrate Documentation](https://docs.substrate.io/reference/address-formats/).
**If you have any unanswered/undocumented questions, please raise an issue [here](https://github.com/polkadot-js/ui/issues).**
+12 -11
View File
@@ -2,7 +2,7 @@
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"engines": {
"node": ">=16"
"node": ">=18"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
"license": "Apache-2.0",
@@ -13,25 +13,26 @@
"url": "https://github.com/polkadot-js/ui.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./packageDetect.js",
"./packageDetect.cjs"
],
"type": "module",
"version": "3.2.2",
"version": "3.16.7-quantus.3",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^12.1.1",
"@polkadot/ui-settings": "3.2.2",
"@polkadot/util": "^12.1.1",
"@polkadot/util-crypto": "^12.1.1",
"mkdirp": "^2.1.6",
"@polkadot/keyring": "14.0.3-quantus.3",
"@polkadot/ui-settings": "3.16.7",
"@polkadot/util": "^14.0.3",
"@polkadot/util-crypto": "14.0.3-quantus.3",
"mkdirp": "^3.0.1",
"rxjs": "^7.8.1",
"store": "^2.0.12",
"tslib": "^2.5.0"
"tslib": "^2.8.1"
},
"devDependencies": {
"@quantus/crypto": "^0.3.0",
"@types/mkdirp": "^2.0.0",
"@types/store": "^2.0.2"
"@types/store": "^2.0.5"
},
"peerDependencies": {
"@polkadot/keyring": "*",
+10 -8
View File
@@ -1,7 +1,8 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringInstance, KeyringPair } from '@polkadot/keyring/types';
import type { HexString } from '@polkadot/util/types';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { AddressSubject } from './observable/types.js';
import type { KeyringOptions, KeyringStore } from './types.js';
@@ -28,9 +29,9 @@ export class Base {
protected _store: KeyringStore;
protected _genesisHash?: string | undefined;
protected _genesisHash?: HexString | undefined;
protected _genesisHashAdd: string[] = [];
protected _genesisHashAdd: HexString[] = [];
constructor () {
this.#accounts = accounts;
@@ -64,11 +65,11 @@ export class Base {
throw new Error('Keyring should be initialised via \'loadAll\' before use');
}
public get genesisHash (): string | undefined {
public get genesisHash (): HexString | undefined {
return this._genesisHash;
}
public get genesisHashes (): string[] {
public get genesisHashes (): HexString[] {
return this._genesisHash
? [this._genesisHash, ...this._genesisHashAdd]
: [...this._genesisHashAdd];
@@ -124,13 +125,14 @@ export class Base {
this.setDevMode(options.isDevelopment);
}
// set Ethereum state
this.#isEthereum = keyring.type === 'ethereum';
// Never Ethereum: the keyring holds only ML-DSA keys (quantus/common#6). Kept
// as a property so callers written against upstream still read a boolean.
this.#isEthereum = false;
this.#keyring = keyring;
this._genesisHash = options.genesisHash && (
isString(options.genesisHash)
? options.genesisHash.toString()
? options.genesisHash.toString() as HexString
: options.genesisHash.toHex()
);
this._genesisHashAdd = options.genesisHashAdd || [];
@@ -0,0 +1,94 @@
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { KeyringPair$Json } from '@polkadot/keyring/types';
import { contextForSpec } from '@quantus/crypto';
import { Keyring as BaseKeyring } from '@polkadot/keyring';
import { dilithiumVerify } from '@polkadot/util-crypto';
import { Keyring } from './Keyring.js';
// crystal_alice, from the chain's dev genesis — a raw 32-byte seed straight into
// ML-DSA-87 keygen. The address is what `quantus developer create-test-wallets`
// prints, i.e. an independent implementation.
const ALICE = 'qzk1Nxai3dZD9Cn5kwGcgL6mKxsfxwqdis7kDQJ52aJS2vSn7';
const PASSWORD = 'not a good password';
const MESSAGE = new Uint8Array([0x75, 0x69]);
function backup (): KeyringPair$Json {
const base = new BaseKeyring({ ss58Format: 189, type: 'dilithium87' });
return base
.addFromSeed(new Uint8Array(32), { name: 'crystal_alice' }, 'dilithium87')
.toJson(PASSWORD);
}
// `loadAll` initialises `@polkadot/ui-settings`, which is a module singleton, so
// it may be called once per *process* — not per instance. One keyring for the
// whole file, loaded once.
const uiKeyring = new Keyring();
uiKeyring.loadAll({ ss58Format: 189, store: undefined, type: 'dilithium87' });
describe('ui-keyring restoreAccount', (): void => {
// Before the fix this constructed a pair whose "public key" was
// decodeAddress(json.address) — i.e. a Poseidon2 hash of the public key, passed
// off as the key itself. It did not throw; it produced a pair that was simply
// wrong.
it('restores an ML-DSA account to the right address', (): void => {
const pair = uiKeyring.restoreAccount(backup(), PASSWORD);
expect(pair.address).toEqual(ALICE);
expect(pair.publicKey.length).toEqual(2592);
expect(pair.addressRaw.length).toEqual(32);
});
it('restores an account that can sign for its own address', (): void => {
const pair = uiKeyring.restoreAccount(backup(), PASSWORD);
pair.decodePkcs8(PASSWORD);
const context = contextForSpec(148);
const signature = pair.sign(MESSAGE, { context });
expect(dilithiumVerify(MESSAGE, signature, pair.addressRaw, 'dilithium87', context)).toEqual(true);
});
it('fails on a wrong password without half-restoring', (): void => {
expect(() => uiKeyring.restoreAccount(backup(), 'wrong')).toThrow();
});
// The address field sits outside the encrypted blob. For the curve schemes a
// tampered one cannot decode at all; here it decodes cleanly and would yield an
// account displaying an address its key does not control.
it('rejects JSON whose address does not match its key', (): void => {
const base = new BaseKeyring({ ss58Format: 189, type: 'dilithium87' });
const other = base.addFromSeed(new Uint8Array(32).fill(3), {}, 'dilithium87');
expect(() => uiKeyring.restoreAccount({ ...backup(), address: other.address }, PASSWORD)).toThrow(/does not match the address/);
});
// quantus/common#6: a backup of a quantum-unsafe key is refused with the
// reason, not decoded. This is the JSON a polkadot{.js} export of an ed25519
// account carries.
it('refuses a polkadot{.js} backup of a quantum-unsafe key, saying why', (): void => {
const json = {
address: '5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY',
encoded: '0x00',
encoding: { content: ['pkcs8', 'sr25519'], type: ['scrypt', 'xsalsa20-poly1305'], version: '3' },
meta: { name: 'polkadot account' }
} as unknown as KeyringPair$Json;
expect(() => uiKeyring.restoreAccount(json, PASSWORD)).toThrow(/sr25519 keys are not quantum-safe and cannot be held here/);
});
it('refuses a file that does not record its key type', (): void => {
const json = { ...backup(), encoding: { content: 'pkcs8', type: 'none', version: '0' } } as unknown as KeyringPair$Json;
expect(() => uiKeyring.restoreAccount(json, PASSWORD)).toThrow(/does not record its key type/);
});
});
+32 -22
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types';
@@ -8,10 +8,9 @@ import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types.js';
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './types.js';
import { createPair } from '@polkadot/keyring';
import { chains } from '@polkadot/ui-settings';
import { bnToBn, hexToU8a, isFunction, isHex, isString, objectSpread, stringify, stringToU8a, u8aSorted, u8aToString } from '@polkadot/util';
import { base64Decode, createKeyMulti, jsonDecrypt, jsonEncrypt } from '@polkadot/util-crypto';
import { createKeyMulti, jsonDecrypt, jsonEncrypt } from '@polkadot/util-crypto';
import { env } from './observable/env.js';
import { KeyringOption } from './options/index.js';
@@ -21,7 +20,7 @@ import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contra
const RECENT_EXPIRY = 24 * 60 * 60;
// No accounts (or test accounts) should be loaded until after the chain determination.
// Chain determination occurs outside of Keyring. Loading `keyring.loadAll({ type: 'ed25519' | 'sr25519' })` is triggered
// Chain determination occurs outside of Keyring. Loading `keyring.loadAll({ type: 'dilithium65' | 'dilithium87' })` is triggered
// from the API after the chain is received
export class Keyring extends Base implements KeyringStruct {
public readonly keyringOption = new KeyringOption();
@@ -33,7 +32,7 @@ export class Keyring extends Base implements KeyringStruct {
};
public addExternal (address: string | Uint8Array, meta: KeyringPair$Meta = {}): CreateResult {
const pair = this.keyring.addFromAddress(address, objectSpread<KeyringJson$Meta>({}, meta, { isExternal: true }), null);
const pair = this.keyring.addFromAddress(address, objectSpread<KeyringJson$Meta>({}, meta, { isExternal: true }), null, meta?.type);
return {
json: this.saveAccount(pair),
@@ -152,8 +151,14 @@ export class Keyring extends Base implements KeyringStruct {
return Object
.keys(available)
.map((address): KeyringAddress => this.getAddress(address, 'account') as KeyringAddress)
.filter((account) => env.isDevelopment() || account.meta.isTesting !== true);
.map((address) => this.getAddress(address, 'account'))
.filter((account): account is KeyringAddress =>
!!account &&
(
env.isDevelopment() ||
account.meta.isTesting !== true
)
);
}
public getAddress (_address: string | Uint8Array, type: KeyringItemType | null = null): KeyringAddress | undefined {
@@ -180,7 +185,8 @@ export class Keyring extends Base implements KeyringStruct {
return Object
.keys(available)
.map((address): KeyringAddress => this.getAddress(address) as KeyringAddress);
.map((address) => this.getAddress(address))
.filter((account): account is KeyringAddress => !!account);
}
public getContract (address: string | Uint8Array): KeyringAddress | undefined {
@@ -195,11 +201,12 @@ export class Keyring extends Base implements KeyringStruct {
.filter(([, { json: { meta: { contract } } }]): boolean =>
!!contract && contract.genesisHash === this.genesisHash
)
.map(([address]) => this.getContract(address) as KeyringAddress);
.map(([address]) => this.getContract(address))
.filter((account): account is KeyringAddress => !!account);
}
private rewriteKey (json: KeyringJson, key: string, hexAddr: string, creator: (addr: string) => string): void {
if (hexAddr.substring(0, 2) === '0x') {
if (hexAddr.startsWith('0x')) {
return;
}
@@ -252,7 +259,7 @@ export class Keyring extends Base implements KeyringStruct {
const [, hexAddr] = key.split(':');
// move genesisHash to top-level (TODO Remove from contracts section?)
json.meta.genesisHash = json.meta.genesisHash || (json.meta.contract && json.meta.contract.genesisHash);
json.meta.genesisHash = json.meta.genesisHash || (json.meta.contract?.genesisHash);
this.contracts.add(this._store, address, json);
this.rewriteKey(json, key, hexAddr, contractKey);
@@ -269,7 +276,7 @@ export class Keyring extends Base implements KeyringStruct {
}
private allowGenesis (json?: KeyringJson | { meta: KeyringJson$Meta } | null): boolean {
if (json && json.meta && this.genesisHash) {
if (json?.meta && this.genesisHash) {
const hashes: (string | null | undefined)[] = Object.values(chains).find((hashes): boolean =>
hashes.includes(this.genesisHash || '')
) || [this.genesisHash];
@@ -319,15 +326,18 @@ export class Keyring extends Base implements KeyringStruct {
}
public restoreAccount (json: KeyringPair$Json, password: string): KeyringPair {
const cryptoType = Array.isArray(json.encoding.content) ? json.encoding.content[1] : 'ed25519';
const encType = Array.isArray(json.encoding.type) ? json.encoding.type : [json.encoding.type];
const pair = createPair(
{ toSS58: this.encodeAddress, type: cryptoType as KeypairType },
{ publicKey: this.decodeAddress(json.address, true) },
json.meta,
isHex(json.encoded) ? hexToU8a(json.encoded) : base64Decode(json.encoded),
encType
);
// Version-0 JSON predates recording the key type, so it cannot be an ML-DSA
// account. Upstream guessed ed25519; this keyring cannot hold one.
if (!Array.isArray(json.encoding.content)) {
throw new Error('This account file does not record its key type, so it is not an ML-DSA account and cannot be restored here');
}
// Through the keyring rather than createPair directly, so a restore gets the
// same refusal as every other entry point: a polkadot{.js} backup of an
// sr25519 or ed25519 account is told it is not quantum-safe, not decoded.
// createFromJson also carries the address as an account id until the real
// public key is decrypted, and checks the two agree when it is.
const pair = this.keyring.createFromJson(json, true);
// unlock, save account and then lock (locking cleans secretKey, so needs to be last)
pair.decodePkcs8(password);
@@ -370,7 +380,7 @@ export class Keyring extends Base implements KeyringStruct {
public saveAddress (address: string, meta: KeyringPair$Meta, type: KeyringAddressType = 'address'): KeyringPair$Json {
const available = this.addresses.subject.getValue();
const json = (available[address] && available[address].json) || {
const json = available[address]?.json || {
address,
meta: {
isRecent: undefined,
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keyring } from './Keyring.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { decodeAddress } from '@polkadot/keyring';
-6
View File
@@ -1,6 +0,0 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { packageInfo as settingsInfo } from '@polkadot/ui-settings/packageInfo';
export default [settingsInfo];
-11
View File
@@ -1,11 +0,0 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
import { detectPackage } from '@polkadot/util';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
+2 -2
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage.js';
import './packageDetect.js';
import { keyring } from './bundle.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Be able to import json in TS
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { accountKey } from '../defaults.js';
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { addressKey } from '../defaults.js';
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { contractKey } from '../defaults.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { BehaviorSubject } from 'rxjs';
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeypairType } from '@polkadot/util-crypto/types';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { SubjectInfo } from './types.js';
+2 -4
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BehaviorSubject } from 'rxjs';
@@ -12,9 +12,7 @@ export interface SingleAddress {
type?: KeypairType | undefined;
}
export interface SubjectInfo {
[index: string]: SingleAddress;
}
export type SubjectInfo = Record<string, SingleAddress>;
export interface AddressSubject {
add: (store: KeyringStore, address: string, json: KeyringJson, type?: KeypairType) => SingleAddress;
@@ -1,27 +0,0 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { KeyringStruct } from '../types.js';
import { KeyringOption } from './index.js';
describe('KeyringOption', (): void => {
// Warning: Test "should not allow initOptions to be called more than once" generated asynchronous activity after the test ended. This activity created the error "TypeError: Cannot read properties of undefined (reading 'subject')" and would have caused the test to fail, but instead triggered an uncaughtException event.
it.skip('should not allow initOptions to be called more than once', (): void => {
const keyringOption = new KeyringOption();
const state = {} as KeyringStruct;
// first call
keyringOption.init(state);
// second call
expect(
() => keyringOption.init(state)
).toThrow('Unable to initialise options more than once');
// cleanup?
keyringOption.clear();
});
});
+3 -3
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Subscription } from 'rxjs';
@@ -37,7 +37,7 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
export class KeyringOption implements KeyringOptionInstance {
#allSub: Subscription | null = null;
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
public readonly optionsSubject = new BehaviorSubject<KeyringOptions>(this.emptyOptions());
public createOptionHeader (name: string): KeyringSectionOption {
return {
@@ -77,7 +77,7 @@ export class KeyringOption implements KeyringOptionInstance {
}
}
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
private linkItems (items: Record<string, KeyringSectionOptions>): KeyringSectionOptions {
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
const options = items[header];
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringSectionOption } from './types.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringItemType, KeyringStruct } from '../types.js';
+12
View File
@@ -0,0 +1,12 @@
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
// (packageInfo imports will be kept as-is, user-editable)
import { packageInfo as settingsInfo } from '@polkadot/ui-settings/packageInfo';
import { detectPackage } from '@polkadot/util';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, [settingsInfo]);
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.2.2' };
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.16.7-quantus.3' };
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types.js';
+29 -3
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types.js';
import mkdirp from 'mkdirp';
import { mkdirpSync } from 'mkdirp';
import fs from 'node:fs';
import path from 'node:path';
@@ -13,12 +13,34 @@ export class FileStore implements KeyringStore {
constructor (path: string) {
if (!fs.existsSync(path)) {
mkdirp.sync(path);
mkdirpSync(path);
}
this.#path = path;
}
private validateKey (key: string): boolean {
// Make sure the key has a .json extension
if (!key.endsWith('.json')) {
console.error('Non-JSON file requested: ', key);
return false;
}
// Remove '.json'
const keyWithoutExtension = key.slice(0, -5);
// Only allow alphanumeric characters, hyphens, and underscores in the base filename
const safeKeyRegex = /^[a-zA-Z0-9_-]+$/;
if (!safeKeyRegex.test(keyWithoutExtension)) {
console.error('Invalid key format detected: ', key);
return false;
}
return true;
}
public all (fn: (key: string, value: KeyringJson) => void): void {
fs
.readdirSync(this.#path)
@@ -51,6 +73,10 @@ export class FileStore implements KeyringStore {
}
private _getPath (key: string): string {
if (!this.validateKey(key)) {
throw new Error('Invalid key format');
}
return path.join(this.#path, key);
}
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { BrowserStore } from './Browser.js';
+6 -21
View File
@@ -1,30 +1,15 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// Copyright 2017-2026 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringInstance as BaseKeyringInstance, KeyringOptions as KeyringOptionsBase, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/keyring/types';
import type { HexString } from '@polkadot/util/types';
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types.js';
export interface ContractMeta {
abi: string;
genesisHash?: string | null;
}
export type ContractMeta = NonNullable<KeyringPair$Meta['contract']>;
export interface KeyringJson$Meta {
contract?: ContractMeta;
genesisHash?: string | null | undefined;
hardwareType?: 'ledger';
isHardware?: boolean;
isInjected?: boolean;
isRecent?: boolean;
isTesting?: boolean;
name?: string;
whenCreated?: number;
whenEdited?: number;
whenUsed?: number;
[index: string]: unknown;
}
export type KeyringJson$Meta = KeyringPair$Meta;
export interface KeyringJson {
address: string;
@@ -44,8 +29,8 @@ export interface KeyringStore {
export interface KeyringOptions extends KeyringOptionsBase {
filter?: (json: KeyringJson) => boolean;
genesisHash?: string | { toHex: () => string };
genesisHashAdd?: string[];
genesisHash?: HexString | { toHex: () => HexString };
genesisHashAdd?: HexString[];
isDevelopment?: boolean;
store?: KeyringStore;
}
+3
View File
@@ -5,6 +5,9 @@
"outDir": "./build",
"rootDir": "./src"
},
"exclude": [
"**/*.spec.ts"
],
"references": [
{ "path": "../ui-settings/tsconfig.build.json" }
]
+16
View File
@@ -0,0 +1,16 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "..",
"outDir": "./build",
"rootDir": "./src",
"emitDeclarationOnly": false,
"noEmit": true
},
"include": [
"**/*.spec.ts"
],
"references": [
{ "path": "../ui-keyring/tsconfig.build.json" }
]
}
+9 -9
View File
@@ -3,7 +3,7 @@
"bugs": "https://github.com/polkadot-js/ui/issues",
"description": "Manages app settings",
"engines": {
"node": ">=16"
"node": ">=18"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
"license": "Apache-2.0",
@@ -14,21 +14,21 @@
"url": "https://github.com/polkadot-js/ui.git"
},
"sideEffects": [
"./detectPackage.js",
"./detectPackage.cjs"
"./packageDetect.js",
"./packageDetect.cjs"
],
"type": "module",
"version": "3.2.2",
"version": "3.16.7",
"main": "index.js",
"dependencies": {
"@polkadot/networks": "^12.1.1",
"@polkadot/util": "^12.1.1",
"eventemitter3": "^5.0.0",
"@polkadot/networks": "^14.0.3",
"@polkadot/util": "^14.0.3",
"eventemitter3": "^5.0.1",
"store": "^2.0.12",
"tslib": "^2.5.0"
"tslib": "^2.8.1"
},
"devDependencies": {
"@types/store": "^2.0.2"
"@types/store": "^2.0.5"
},
"peerDependencies": {
"@polkadot/networks": "*",
+16 -3
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// Copyright 2017-2026 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
@@ -8,7 +8,7 @@ import store from 'store';
import { hasProcess, isUndefined } from '@polkadot/util';
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
import { CAMERA, CAMERA_DEFAULT, CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER, ENDPOINT_DEFAULT, ENDPOINTS, ICON_DEFAULT, ICONS, LANGUAGE_DEFAULT, LEDGER_APP, LEDGER_APP_DEFAULT, LEDGER_CONN, LEDGER_CONN_DEFAULT, LOCKING, LOCKING_DEFAULT, METADATA_UP, METADATA_UP_DEFAULT, NOTIFICATION_DEFAULT, PREFIX_DEFAULT, PREFIXES, STORAGE, STORAGE_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './defaults/index.js';
type ChangeCallback = (settings: SettingsStruct) => void;
type OnTypes = 'change';
@@ -35,6 +35,8 @@ export class Settings implements SettingsStruct {
#icon: string;
#ledgerApp: string;
#ledgerConn: string;
#locking: string;
@@ -57,9 +59,10 @@ export class Settings implements SettingsStruct {
this.#emitter = new EventEmitter();
// will become deprecated for supporting substrate connect light clients. apiType structure should be used instead
this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env && process.env.WS_URL) || (ENDPOINT_DEFAULT.value as string);
this.#apiUrl = (typeof settings.apiUrl === 'string' && settings.apiUrl) || (hasProcess && process.env?.['WS_URL']) || (ENDPOINT_DEFAULT.value as string);
this.#apiType = { param: this.#apiUrl, type: 'json-rpc' as EndpointType };
this.#camera = withDefault(CAMERA, settings.camera, CAMERA_DEFAULT);
this.#ledgerApp = withDefault(LEDGER_APP, settings.ledgerApp, LEDGER_APP_DEFAULT);
this.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT);
this.#i18nLang = settings.i18nLang || LANGUAGE_DEFAULT;
this.#icon = settings.icon || ICON_DEFAULT;
@@ -96,6 +99,10 @@ export class Settings implements SettingsStruct {
return this.#notification;
}
public get ledgerApp (): string {
return this.#ledgerApp;
}
public get ledgerConn (): string {
return this.#ledgerConn;
}
@@ -144,6 +151,10 @@ export class Settings implements SettingsStruct {
return ICONS;
}
public get availableLedgerApp (): Option[] {
return LEDGER_APP;
}
public get availableLedgerConn (): Option[] {
return LEDGER_CONN;
}
@@ -183,6 +194,7 @@ export class Settings implements SettingsStruct {
camera: this.#camera,
i18nLang: this.#i18nLang,
icon: this.#icon,
ledgerApp: this.#ledgerApp,
ledgerConn: this.#ledgerConn,
locking: this.#locking,
metadataUp: this.#metadataUp,
@@ -199,6 +211,7 @@ export class Settings implements SettingsStruct {
this.#apiUrl = settings.apiUrl || this.#apiUrl;
this.#camera = settings.camera || this.#camera;
this.#ledgerConn = settings.ledgerConn || this.#ledgerConn;
this.#ledgerApp = settings.ledgerApp || this.#ledgerApp;
this.#i18nLang = settings.i18nLang || this.#i18nLang;
this.#icon = settings.icon || this.#icon;
this.#locking = settings.locking || this.#locking;
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// Copyright 2017-2026 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Settings, settings } from './Settings.js';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// Copyright 2017-2026 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { selectableNetworks } from '@polkadot/networks';
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// Copyright 2017-2026 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types.js';

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