Compare commits

...
96 Commits
Author SHA1 Message Date
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
github-actions[bot] 84c36c5c68 [CI Skip] release/stable 3.2.2
skip-checks: true
2023-04-29 06:49:06 +00:00
Jaco 4a71023452 3.2.2 (#754) 2023-04-29 09:47:02 +03:00
github-actions[bot] 359230bfb3 [CI Skip] bump/beta 3.2.2-0-x
skip-checks: true
2023-04-24 10:50:36 +00:00
Jaco 19fa38e441 Update dependencies (w/ react-is as peer) (#753)
* Update dependencies (w/ react-is as peer)

* Update styled-components deps
2023-04-24 13:48:24 +03:00
github-actions[bot] e6105e19a5 [CI Skip] release/stable 3.2.1
skip-checks: true
2023-04-22 09:32:36 +00:00
Jaco e8b9f2aafc 3.2.1 (#752) 2023-04-22 12:30:25 +03:00
github-actions[bot] bcdd6e42ec [CI Skip] bump/beta 3.1.5-4-x
skip-checks: true
2023-04-14 09:22:19 +00:00
Jaco b14dc3bcc3 Bump deps (#751) 2023-04-14 12:20:04 +03:00
github-actions[bot] 798a9fb453 [CI Skip] bump/beta 3.1.5-3-x
skip-checks: true
2023-04-10 07:23:33 +00:00
Jaco c81c08271b Bump dev (w/ eslint adjustments) (#750) 2023-04-10 10:21:15 +03:00
github-actions[bot] 0957599bdb [CI Skip] bump/beta 3.1.5-2-x
skip-checks: true
2023-04-08 07:06:11 +00:00
Jaco 4ec2f6730b Bump TypeScript (#749) 2023-04-08 10:03:58 +03:00
github-actions[bot] 701439d6bc [CI Skip] bump/beta 3.1.5-1-x
skip-checks: true
2023-04-04 05:31:11 +00:00
Jaco cade4a9051 Update lock wf (#748) 2023-04-04 08:27:57 +03:00
github-actions[bot] d4bec36fa7 [CI Skip] bump/beta 3.1.5-0-x
skip-checks: true
2023-04-02 08:54:33 +00:00
Jaco b83073f588 Move type-only imports (w/ verbatimModuleSyntax) (#746) 2023-04-02 11:51:38 +03:00
github-actions[bot] f36a80ad8b [CI Skip] release/stable 3.1.4
skip-checks: true
2023-04-01 07:31:31 +00:00
Jaco e2f16b8e2e 3.1.4 (#745) 2023-04-01 10:29:22 +03:00
github-actions[bot] 8470b347a4 [CI Skip] bump/beta 3.1.4-0-x
skip-checks: true
2023-03-25 15:43:07 +00:00
Jaco 24f1cf7e17 Add repo dev req. for Node.js (#744) 2023-03-25 17:40:48 +02:00
github-actions[bot] aac0aa43d0 [CI Skip] release/stable 3.1.3
skip-checks: true
2023-03-25 10:59:42 +00:00
Jaco 2c5db364ba Bump dev (w/ some node:test adjustments) (#743)
* Bump dev (w/ some node:test adjustments)

* Adjust EventEmitter import

* 3.1.3
2023-03-25 12:57:09 +02:00
github-actions[bot] bbf77d7b84 [CI Skip] release/stable 3.1.2
skip-checks: true
2023-03-25 08:06:33 +00:00
Jaco 3250187fbb 3.1.2 (#742)
* 3.1.2

* Remove assert usage

* Unsubscribe on open observable

* Attempt a clear

* Final attempt before skip

* .skip for problematic
2023-03-25 10:04:20 +02:00
github-actions[bot] e3168c8231 [CI Skip] bump/beta 3.1.2-1-x
skip-checks: true
2023-03-23 10:45:06 +00:00
Jaco 6d98c56e7a Small adjustments to icon calculations (#741)
* Small adjustments to icon calculations

* Keep original naming
2023-03-23 12:42:16 +02:00
github-actions[bot] bf986c079f [CI Skip] bump/beta 3.1.2-0-x
skip-checks: true
2023-03-23 09:09:10 +00:00
Jaco f0d21fa985 Cater for Ethereum-compatible multisig addresses (#740) 2023-03-23 11:06:46 +02:00
github-actions[bot] aad690bfda [CI Skip] release/stable 3.1.1
skip-checks: true
2023-03-19 08:12:45 +00:00
Jaco 6e30befa0f 3.1.1 (#739) 2023-03-19 10:10:29 +02:00
github-actions[bot] 4217c67acd [CI Skip] bump/beta 3.0.3-7-x
skip-checks: true
2023-03-18 10:42:30 +00:00
Jaco b181da4919 Bump dev deps (#738) 2023-03-18 12:39:38 +02:00
github-actions[bot] 6907d0c30a [CI Skip] bump/beta 3.0.3-6-x
skip-checks: true
2023-03-17 06:00:24 +00:00
Jaco 22c8d7ac0c Bump to TS 5.0 (#737)
* Bump to TS 5.0

* Adjust global dev-test imports
2023-03-17 07:58:03 +02:00
github-actions[bot] a3a918b2cb [CI Skip] bump/beta 3.0.3-5-x
skip-checks: true
2023-03-15 15:16:52 +00:00
Jaco 656be6550a Bump dev (#736)
* Bump dev

* Adjust types ref
2023-03-15 17:14:16 +02:00
github-actions[bot] fa8697331b [CI Skip] bump/beta 3.0.3-4-x
skip-checks: true
2023-03-14 10:55:42 +00:00
Jaco e392d52924 Remove stale workflow (#735) 2023-03-14 12:53:13 +02:00
github-actions[bot] 975b0a9fa2 [CI Skip] bump/beta 3.0.3-3-x
skip-checks: true
2023-03-13 12:58:31 +00:00
Jaco 8bd9b7b908 Adjust default.ts exports (#734) 2023-03-13 14:56:04 +02:00
github-actions[bot] 1a230f95f6 [CI Skip] bump/beta 3.0.3-2-x
skip-checks: true
2023-03-13 10:57:53 +00:00
Jaco c1b3cc87ee Swap from color to colord for color manipulation (#733) 2023-03-13 12:55:30 +02:00
github-actions[bot] e1f96f1fcf [CI Skip] bump/beta 3.0.3-1-x
skip-checks: true
2023-03-12 11:32:18 +00:00
Jaco 45b330aa90 Swap to using defineComponent for Vue (req. 2.7+) (#732)
* Swap to using definedComponent for Vue (req. 2.7+)

* Adjust

* Adjust

* CHANGELOG
2023-03-12 13:29:49 +02:00
github-actions[bot] 172051cedc [CI Skip] bump/beta 3.0.3-0-x
skip-checks: true
2023-03-12 10:03:45 +00:00
Jaco 0310baa9ee Bump dev (#731)
* Bump dev

* Adjust dev/node/test/node.d.ts imports

* Node resolution

* Revert dev/node/test/node.d.ts import
2023-03-12 12:01:20 +02:00
github-actions[bot] 78029388e5 [CI Skip] release/stable 3.0.2
skip-checks: true
2023-03-11 09:25:49 +00:00
Jaco b9b1b296a3 3.0.2 (#730) 2023-03-11 11:23:35 +02:00
github-actions[bot] 32086c0fc7 [CI Skip] bump/beta 3.0.2-4-x
skip-checks: true
2023-03-10 06:23:20 +00:00
Jaco 01d7661a5f Update GH actions (#729) 2023-03-10 08:19:48 +02:00
github-actions[bot] 6e97f75824 [CI Skip] bump/beta 3.0.2-3-x
skip-checks: true
2023-03-09 14:56:44 +00:00
Jaco 86281dca3a Align tsconfig to allow moduleResolution: nodenext (#728)
* Align tsconfig to allow moduleResolution: nodenext

* Adjust

* Default target flag
2023-03-09 16:53:32 +02:00
github-actions[bot] faed5b1474 [CI Skip] bump/beta 3.0.2-2-x
skip-checks: true
2023-03-09 08:46:02 +00:00
Jaco 0e0de28da4 Use .js imports in src (#727)
* Use .js in src imports

* Bump dev
2023-03-09 10:43:31 +02:00
github-actions[bot] 2e99e0154f [CI Skip] bump/beta 3.0.2-1-x
skip-checks: true
2023-03-06 12:12:52 +00:00
Jaco 0cbf187979 Bump dev deps (#726) 2023-03-06 14:10:28 +02:00
github-actions[bot] 0aee857525 [CI Skip] bump/beta 3.0.2-0-x
skip-checks: true
2023-03-05 11:40:46 +00:00
Jaco 306f30d2b5 Update dev 2023-03-05 13:38:19 +02:00
143 changed files with 3729 additions and 4034 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'
]
}
};
+5 -5
View File
@@ -10,16 +10,16 @@ jobs:
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: dessant/lock-threads@f1a42f0f44eb83361d617a014663e1a76cf282d2
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
with:
github-token: ${{ secrets.GH_PAT_BOT }}
issue-lock-inactive-days: '7'
issue-lock-comment: >
issue-inactive-days: '7'
issue-comment: >
This thread has been automatically locked since there has not been
any recent activity after it was closed. Please open a new issue
if you think you have a related problem or query.
pr-lock-inactive-days: '2'
pr-lock-comment: >
pr-inactive-days: '2'
pr-comment: >
This pull request has been automatically locked since there
has not been any recent activity after it was closed.
Please open a new issue for related bugs.
+1 -1
View File
@@ -17,5 +17,5 @@ jobs:
node-version: 'lts/*'
- name: ${{ matrix.step }}
run: |
yarn install --immutable | grep -v 'YN0013'
yarn install --immutable
yarn ${{ matrix.step }}
+1 -1
View File
@@ -27,5 +27,5 @@ jobs:
node-version: 'lts/*'
- name: ${{ matrix.step }}
run: |
yarn install --immutable | grep -v 'YN0013'
yarn install --immutable
yarn ${{ matrix.step }}
-19
View File
@@ -1,19 +0,0 @@
name: 'Close stale issues and PRs'
on:
schedule:
- cron: '40 2/3 * * *'
jobs:
stale:
runs-on: ubuntu-latest
env:
YARN_ENABLE_SCRIPTS: false
steps:
- uses: actions/stale@98ed4cb500039dbcccf4bd9bedada4d0187f2757
with:
repo-token: ${{ secrets.GH_PAT_BOT }}
stale-issue-message: 'This issue has been open for 21 days with no activity and is not labelled as an enhancement. It will be closed in 7 days.'
stale-issue-label: 'stale'
exempt-issue-labels: '-size-l,-size-m,-size-s,-size-xl,-size-xs,[bug]'
days-before-stale: 21
days-before-close: 7
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/ui authors & contributors
// Copyright 2017-2023 @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
}
+5
View File
@@ -2,6 +2,11 @@ enableImmutableInstalls: false
enableProgressBars: false
logFilters:
# Discard any "cannot be found in cache" messages
- code: YN0013
level: discard
nodeLinker: node-modules
plugins:
+102
View File
@@ -1,5 +1,107 @@
# CHANGELOG
## 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:
- Add missing `react-is` peer dependency for `styled-components`
- Adjust compilation output for `__internal__` class fields
- Bump to `@polkadot/util` 12.1.1
## 3.2.1 Apr 22, 2023
Changes:
- Bump to `@polkadot/util` 12.0.1
## 3.1.4 Apr 1, 2023
Changes:
- Bump to `@polkadot/util` 11.1.3
## 3.1.3 Mar 25, 2023
Changes:
- Align `eventemitter` version with `@polkadot/api`
## 3.1.2 Mar 25, 2023
Changes:
- Cater for Ethereum-compatible multisig addresses
- Bump to `@polkadot/util` 11.1.2
## 3.1.1 Mar 19, 2023
Changes:
- Swap `vue-identitycon` to use `defineComponent` (requires vue 2.7+)
- Swap `BeachballIcon` to use `colord` library (ESM + CJS, smaller)
- Bump to `@polkadot/util` 11.1.1
## 3.0.2 Mar 11, 2023
Changes:
- Use consistent `.js` imports in source files (TS moduleResolution)
- Bump to `@polkadot/util` 11.0.2
## 3.0.1 Mar 5, 2023
Changes:
+3 -1
View File
@@ -1,4 +1,4 @@
681 Jaco 3.0.1 (#725)
727 Jaco 3.6.2 (#773)
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)
@@ -21,6 +21,7 @@
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)
@@ -33,4 +34,5 @@
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-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
import baseConfig from '@polkadot/dev/config/eslint';
export default [
...baseConfig
];
+11 -8
View File
@@ -1,6 +1,9 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"engines": {
"node": ">=18.14"
},
"homepage": "https://github.com/polkadot-js/ui#readme",
"license": "Apache-2.0",
"packageManager": "yarn@3.2.0",
@@ -11,10 +14,10 @@
},
"sideEffects": false,
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"versions": {
"git": "3.0.1",
"npm": "3.0.1"
"git": "3.6.2",
"npm": "3.6.2"
},
"workspaces": [
"packages/*"
@@ -30,15 +33,15 @@
"test:one": "polkadot-dev-run-test --env browser"
},
"devDependencies": {
"@polkadot/dev": "^0.69.27",
"@polkadot/x-bundle": "^11.0.1",
"@types/node": "^18.14.6",
"@polkadot/dev": "^0.76.18",
"@polkadot/x-bundle": "^12.4.2",
"@types/node": "^20.5.3",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-is": "^18.2.0",
"react-native": "^0.71.3"
"react-native": "^0.72.4"
},
"resolutions": {
"typescript": "^4.9.5"
"typescript": "^5.1.6"
}
}
+13 -16
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/react-identicon",
"repository": {
"directory": "packages/react-identicon",
@@ -17,26 +18,23 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.1",
"@polkadot/ui-settings": "3.0.1",
"@polkadot/ui-shared": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"color": "^3.2.1",
"@polkadot/keyring": "^12.4.2",
"@polkadot/ui-settings": "3.6.2",
"@polkadot/ui-shared": "3.6.2",
"@polkadot/util": "^12.4.2",
"@polkadot/util-crypto": "^12.4.2",
"ethereum-blockies-base64": "^1.0.2",
"jdenticon": "3.2.0",
"react-copy-to-clipboard": "^5.1.0",
"styled-components": "^5.3.8",
"tslib": "^2.5.0"
"styled-components": "^6.0.7",
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/react-copy-to-clipboard": "^5.0.4",
"@types/react-dom": "^18.0.11",
"@types/styled-components": "^5.1.26",
"styled-components": "^5.3.8",
"@types/react-dom": "^18.2.7",
"xmlserializer": "^0.6.1"
},
"peerDependencies": {
@@ -45,7 +43,6 @@
"@polkadot/util-crypto": "*",
"react": "*",
"react-dom": "*",
"react-is": "*",
"styled-components": "*"
"react-is": "*"
}
}
+5 -15
View File
@@ -2,27 +2,17 @@
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { IdentityProps as Props, Props as ComponentProps } from './types';
import type { IdentityProps as Props, Props as ComponentProps } from './types.js';
import React from 'react';
import CopyToClipboard from 'react-copy-to-clipboard';
import styledComponents from 'styled-components';
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons';
// 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
const styled = (
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
);
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js';
import { styled } from './styled.js';
const Fallback = Beachball;
@@ -74,7 +64,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
address,
publicKey
};
} catch (error) {
} catch {
return {
address: '',
publicKey: '0x'
@@ -99,7 +89,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
}
private getWrapped ({ address, publicKey }: State, { Custom }: Props): React.ReactNode {
const { className = '', isAlternative, isHighlight, size = DEFAULT_SIZE, style, theme = settings.icon } = this.props;
const { className = '', isAlternative, isHighlight, size = DEFAULT_SIZE, style = {}, theme = settings.icon } = this.props;
const Component = !address
? Empty
: Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback;
+3 -4
View File
@@ -1,7 +1,6 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export { Identicon } from './Identicon';
export { packageInfo } from './packageInfo';
export * from './icons/index.js';
export { Identicon } from './Identicon.js';
export { packageInfo } from './packageInfo.js';
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
@@ -1,16 +1,16 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import React, { useCallback } from 'react';
import { beachballIcon } from '@polkadot/ui-shared';
function Identicon ({ address, className = '', size, style }: Props): React.ReactElement<Props> {
function Identicon ({ address, className = '', size, style = {} }: Props): React.ReactElement<Props> {
const updateElem = useCallback(
(node: HTMLDivElement): void => {
node && node.appendChild(
node?.appendChild(
beachballIcon(address, { isAlternative: false, size })
);
},
+2 -2
View File
@@ -1,11 +1,11 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import React from 'react';
function Identicon ({ className = '', size, style }: Props): React.ReactElement<Props> {
function Identicon ({ className = '', size, style = {} }: Props): React.ReactElement<Props> {
return (
<svg
className={className}
@@ -1,27 +1,18 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import makeBlockie from 'ethereum-blockies-base64';
import React, { useMemo } from 'react';
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
const styled = (
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
);
import { styled } from '../styled.js';
interface ImgProps {
size: number;
}
function Identicon ({ address, className = '', size, style }: Props): React.ReactElement<Props> {
function Identicon ({ address, className = '', size, style = {} }: Props): React.ReactElement<Props> {
const imgSrc = useMemo(
() => makeBlockie(address),
[address]
@@ -37,7 +28,7 @@ function Identicon ({ address, className = '', size, style }: Props): React.Reac
);
}
const StyledImg = styled.img(({ size }: ImgProps) => `
const StyledImg = styled.img<ImgProps>(({ size }) => `
display: block;
height: ${size}px;
width: ${size}px;
@@ -1,12 +1,12 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import * as jdenticon from 'jdenticon';
import React, { useMemo } from 'react';
function Identicon ({ className = '', publicKey, size, style }: Props): React.ReactElement<Props> {
function Identicon ({ className = '', publicKey, size, style = {} }: Props): React.ReactElement<Props> {
const html = useMemo(
() => ({ __html: jdenticon.toSvg(publicKey.substring(2), size) }),
[publicKey, size]
@@ -17,7 +17,7 @@
// - Overall it is now just a static component, expecting an address as an input value
import type { Circle } from '@polkadot/ui-shared/icons/types';
import type { Props } from '../types';
import type { Props } from '../types.js';
import React, { useMemo } from 'react';
@@ -35,7 +35,7 @@ function renderCircle ({ cx, cy, fill, r }: Circle, key: number): React.ReactNod
);
}
function Identicon ({ address, className = '', isAlternative = false, size, style }: Props): React.ReactElement<Props> {
function Identicon ({ address, className = '', isAlternative = false, size, style = {} }: Props): React.ReactElement<Props> {
const circles = useMemo(
() => polkadotIcon(address, { isAlternative }),
[address, isAlternative]
+5 -5
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { Beachball } from './Beachball';
export { Empty } from './Empty';
export { Ethereum } from './Ethereum';
export { Jdenticon } from './Jdenticon';
export { Polkadot } from './Polkadot';
export { Beachball } from './Beachball.js';
export { Empty } from './Empty.js';
export { Ethereum } from './Ethereum.js';
export { Jdenticon } from './Jdenticon.js';
export { Polkadot } from './Polkadot.js';
+3 -3
View File
@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import { Identicon } from './bundle';
import { Identicon } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default Identicon;
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.0.1' };
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.6.2' };
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { styled } from 'styled-components';
+2 -5
View File
@@ -1,10 +1,9 @@
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type React from 'react';
import type { Prefix } from '@polkadot/util-crypto/address/types';
import React from 'react';
export interface BaseProps {
className?: string;
style?: React.CSSProperties;
@@ -12,11 +11,9 @@ export interface BaseProps {
export interface Props extends BaseProps {
address: string;
isAlternative?: boolean;
className?: string;
isAlternative?: boolean | undefined;
publicKey: string;
size: number;
style?: React.CSSProperties;
}
export interface IdentityProps extends BaseProps {
+11 -11
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Generates and reads QR codes",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/react-qr",
"repository": {
"directory": "packages/react-qr",
@@ -17,26 +18,25 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-settings": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@polkadot/ui-settings": "3.6.2",
"@polkadot/util": "^12.4.2",
"@polkadot/util-crypto": "^12.4.2",
"qrcode-generator": "^1.4.4",
"react-qr-reader": "^2.2.1",
"styled-components": "^5.3.8",
"tslib": "^2.5.0"
"styled-components": "^6.0.7",
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/react-qr-reader": "^2.1.4",
"@types/styled-components": "^5.1.26"
"@types/react-qr-reader": "^2.1.4"
},
"peerDependencies": {
"@polkadot/util": "*",
"@polkadot/util-crypto": "*",
"react": "*",
"react-dom": "*",
"styled-components": "*"
"react-is": "*"
}
}
+8 -18
View File
@@ -2,30 +2,20 @@
// SPDX-License-Identifier: Apache-2.0
import React, { useEffect, useMemo, useRef, useState } from 'react';
import styledComponents from 'styled-components';
import { objectSpread } from '@polkadot/util';
import { xxhashAsHex } from '@polkadot/util-crypto';
import { qrcode } from './qrcode';
import { createFrames, createImgSize } from './util';
// 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
const styled = (
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
);
import { qrcode } from './qrcode.js';
import { styled } from './styled.js';
import { createFrames, createImgSize } from './util.js';
interface Props {
className?: string;
size?: string | number;
className?: string | undefined;
size?: string | number | undefined;
skipEncoding?: boolean;
style?: React.CSSProperties;
timerDelay?: number;
style?: React.CSSProperties | undefined;
timerDelay?: number | undefined;
value: Uint8Array;
}
@@ -55,7 +45,7 @@ function getDataUrl (value: Uint8Array): string {
return qr.createDataURL(16, 0);
}
function Display ({ className, size, skipEncoding, style, timerDelay = DEFAULT_FRAME_DELAY, value }: Props): React.ReactElement<Props> | null {
function Display ({ className = '', size, skipEncoding, style = {}, timerDelay = DEFAULT_FRAME_DELAY, value }: Props): React.ReactElement<Props> | null {
const [{ image }, setFrameState] = useState<FrameState>({ frameIdx: 0, frames: [], image: null, valueHash: null });
const timerRef = useRef<TimerState>({ timerDelay, timerId: null });
+2 -2
View File
@@ -3,8 +3,8 @@
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { createAddressPayload } from './util';
import { QrDisplay } from './Display.js';
import { createAddressPayload } from './util.js';
interface Props {
address: string;
+2 -2
View File
@@ -3,8 +3,8 @@
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { createSignPayload } from './util';
import { QrDisplay } from './Display.js';
import { createSignPayload } from './util.js';
interface Props {
address: string;
+2 -2
View File
@@ -5,8 +5,8 @@ import type { NetworkSpecsStruct } from '@polkadot/ui-settings/types';
import React, { useMemo } from 'react';
import { QrDisplay } from './Display';
import { encodeString } from './util';
import { QrDisplay } from './Display.js';
import { encodeString } from './util.js';
interface Props {
className?: string;
+7 -17
View File
@@ -3,27 +3,17 @@
import React, { useCallback, useMemo } from 'react';
import Reader from 'react-qr-reader';
import styledComponents from 'styled-components';
import { createImgSize } from './util';
// 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
const styled = (
(styledComponents as unknown as { styled: typeof styledComponents }).styled ||
(styledComponents as unknown as { default: typeof styledComponents }).default ||
styledComponents
);
import { styled } from './styled.js';
import { createImgSize } from './util.js';
interface Props {
className?: string;
className?: string | undefined;
delay?: number;
onError?: (error: Error) => void;
onError?: undefined | ((error: Error) => void);
onScan: (data: string) => void;
size?: string | number;
style?: React.CSSProperties;
size?: string | number | undefined;
style?: React.CSSProperties | undefined;
}
const DEFAULT_DELAY = 150;
@@ -32,7 +22,7 @@ const DEFAULT_ERROR = (error: Error): void => {
console.error('@polkadot/react-qr:Scan', error.message);
};
function Scan ({ className, delay = DEFAULT_DELAY, onError = DEFAULT_ERROR, onScan, size, style }: Props): React.ReactElement<Props> {
function Scan ({ className = '', delay = DEFAULT_DELAY, onError = DEFAULT_ERROR, onScan, size, style = {} }: Props): React.ReactElement<Props> {
const containerStyle = useMemo(
() => createImgSize(size),
[size]
+15 -9
View File
@@ -1,19 +1,20 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { HexString } from '@polkadot/util/types';
import React, { useCallback } from 'react';
import { assert } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants';
import { QrScan } from './Scan';
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
import { QrScan } from './Scan.js';
interface ScanType {
isAddress: boolean;
content: string;
genesisHash: string;
name?: string;
genesisHash: HexString | null;
name?: string | undefined;
}
interface Props {
@@ -30,20 +31,25 @@ 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);
}
const expectedPrefix = (isEthereum ? 'ethereum' : ADDRESS_PREFIX);
const isValidPrefix = (prefix === expectedPrefix) || (prefix === SEED_PREFIX);
assert(isValidPrefix, `Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
if (!isValidPrefix) {
throw new Error(`Invalid prefix received, expected '${expectedPrefix} or ${SEED_PREFIX}' , found '${prefix}'`);
}
const isAddress = prefix === expectedPrefix;
@@ -51,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
@@ -5,7 +5,7 @@ import type { HexString } from '@polkadot/util/types';
import React, { useCallback } from 'react';
import { QrScan } from './Scan';
import { QrScan } from './Scan.js';
interface ScanType {
signature: HexString;
+6 -6
View File
@@ -1,9 +1,9 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { QrDisplayAddress } from './DisplayAddress';
export { QrDisplayPayload } from './DisplayPayload';
export { QrScanAddress } from './ScanAddress';
export { QrScanSignature } from './ScanSignature';
export { QrNetworkSpecs } from './NetworkSpecs';
export { packageInfo } from './packageInfo';
export { QrDisplayAddress } from './DisplayAddress.js';
export { QrDisplayPayload } from './DisplayPayload.js';
export { QrNetworkSpecs } from './NetworkSpecs.js';
export { packageInfo } from './packageInfo.js';
export { QrScanAddress } from './ScanAddress.js';
export { QrScanSignature } from './ScanSignature.js';
+9 -21
View File
@@ -1,24 +1,12 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
const ADDRESS_PREFIX = 'substrate';
const SEED_PREFIX = 'secret';
const FRAME_SIZE = 1024;
const SUBSTRATE_ID = new Uint8Array([0x53]);
const CRYPTO_SR25519 = new Uint8Array([0x01]);
const CMD_SIGN_TX = new Uint8Array([0]);
const CMD_SIGN_TX_HASH = new Uint8Array([1]);
const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
const CMD_SIGN_MSG = new Uint8Array([3]);
export {
ADDRESS_PREFIX,
CMD_SIGN_TX,
CMD_SIGN_TX_HASH,
CMD_SIGN_IMMORTAL_TX,
CMD_SIGN_MSG,
CRYPTO_SR25519,
FRAME_SIZE,
SEED_PREFIX,
SUBSTRATE_ID
};
export const ADDRESS_PREFIX = 'substrate';
export const SEED_PREFIX = 'secret';
export const FRAME_SIZE = 1024;
export const SUBSTRATE_ID = new Uint8Array([0x53]);
export const CRYPTO_SR25519 = new Uint8Array([0x01]);
export const CMD_SIGN_TX = new Uint8Array([0]);
export const CMD_SIGN_TX_HASH = new Uint8Array([1]);
export const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
export const CMD_SIGN_MSG = new Uint8Array([3]);
+2 -2
View File
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
+2 -2
View File
@@ -1,6 +1,6 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
export * from './bundle';
export * from './bundle.js';
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.0.1' };
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.6.2' };
+4
View File
@@ -0,0 +1,4 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { styled } from 'styled-components';
+2 -3
View File
@@ -1,13 +1,12 @@
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { u8aConcat, u8aToHex, u8aToString } from '@polkadot/util';
import { randomAsU8a } from '@polkadot/util-crypto';
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util';
import { createAddressPayload, createFrames, createSignPayload, decodeString, encodeNumber, encodeString } from './util.js';
describe('util', (): void => {
describe('Uint8Array <-> string', (): void => {
+4 -3
View File
@@ -4,7 +4,7 @@
import { isString, u8aConcat, u8aToU8a } from '@polkadot/util';
import { decodeAddress } from '@polkadot/util-crypto';
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants';
import { ADDRESS_PREFIX, CRYPTO_SR25519, FRAME_SIZE, SUBSTRATE_ID } from './constants.js';
const MULTIPART = new Uint8Array([0]);
@@ -13,9 +13,10 @@ export function encodeNumber (value: number): Uint8Array {
}
export function encodeString (value: string): Uint8Array {
const u8a = new Uint8Array(value.length);
const count = value.length;
const u8a = new Uint8Array(count);
for (let i = 0; i < value.length; i++) {
for (let i = 0; i < count; i++) {
u8a[i] = value.charCodeAt(i);
}
+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" }
]
}
+9 -8
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Renders an SVG picture representing an address",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/reactnative-identicon",
"repository": {
"directory": "packages/reactnative-identicon",
@@ -17,17 +18,17 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"@polkadot/ui-shared": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@polkadot/ui-shared": "3.6.2",
"@polkadot/util": "^12.4.2",
"@polkadot/util-crypto": "^12.4.2",
"react-native-svg": "^12.5.1",
"tslib": "^2.5.0"
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/react-native": "^0.71.3"
"@types/react-native": "^0.72.2"
},
"peerDependencies": {
"@polkadot/util": "*",
@@ -2,14 +2,14 @@
// SPDX-License-Identifier: Apache-2.0
import type { Prefix } from '@polkadot/util-crypto/address/types';
import type { Props as ComponentProps } from './types';
import type { Props as ComponentProps } from './types.js';
import React from 'react';
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
import { Empty, Polkadot } from './icons';
import { Empty, Polkadot } from './icons/index.js';
const Fallback = Polkadot;
@@ -54,7 +54,7 @@ export default class IdentityIcon extends React.PureComponent<Props, State> {
return address === prevState.address
? null
: { address, publicKey };
} catch (error) {
} catch {
return {
address: '',
publicKey: '0x'
+2 -2
View File
@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export { packageInfo } from './packageInfo';
export * from './icons/index.js';
export { packageInfo } from './packageInfo.js';
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
@@ -1,11 +1,11 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Props } from '../types';
import type { Props } from '../types.js';
import React from 'react';
import { View } from 'react-native';
import Svg, { Circle } from 'react-native-svg';
import { Circle, Svg } from 'react-native-svg';
export default function Empty ({ size }: Props): React.ReactElement<Props> {
return (
@@ -2,11 +2,11 @@
// SPDX-License-Identifier: Apache-2.0
import type { Circle as CircleType } from '@polkadot/ui-shared/icons/types';
import type { Props } from '../types';
import type { Props } from '../types.js';
import React, { useMemo } from 'react';
import { View } from 'react-native';
import Svg, { Circle as SvgCircle } from 'react-native-svg';
import { Circle as SvgCircle, Svg } from 'react-native-svg';
import { polkadotIcon } from '@polkadot/ui-shared';
@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { default as Empty } from './Empty';
export { default as Polkadot } from './Polkadot';
export { default as Empty } from './Empty.js';
export { default as Polkadot } from './Polkadot.js';
+3 -3
View File
@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/reactnative-identicon authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import Identicon from './Identicon';
import Identicon from './Identicon.js';
export * from './bundle';
export * from './bundle.js';
export default Identicon;
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.0.1' };
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.6.2' };
+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
@@ -1,10 +1,11 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-keyring",
"repository": {
"directory": "packages/ui-keyring",
@@ -16,20 +17,20 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"@polkadot/keyring": "^11.0.1",
"@polkadot/ui-settings": "3.0.1",
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"mkdirp": "^2.1.5",
"rxjs": "^7.8.0",
"@polkadot/keyring": "^12.4.2",
"@polkadot/ui-settings": "3.6.2",
"@polkadot/util": "^12.4.2",
"@polkadot/util-crypto": "^12.4.2",
"mkdirp": "^3.0.1",
"rxjs": "^7.8.1",
"store": "^2.0.12",
"tslib": "^2.5.0"
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/mkdirp": "^1.0.2",
"@types/mkdirp": "^2.0.0",
"@types/store": "^2.0.2"
},
"peerDependencies": {
+23 -12
View File
@@ -2,18 +2,19 @@
// 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';
import type { KeyringOptions, KeyringStore } from './types';
import type { AddressSubject } from './observable/types.js';
import type { KeyringOptions, KeyringStore } from './types.js';
import { createTestKeyring } from '@polkadot/keyring';
import { isBoolean, isNumber, isString } from '@polkadot/util';
import { accounts } from './observable/accounts';
import { addresses } from './observable/addresses';
import { contracts } from './observable/contracts';
import { env } from './observable/env';
import { BrowserStore } from './stores/Browser'; // direct import (skip index with all)
import { accounts } from './observable/accounts.js';
import { addresses } from './observable/addresses.js';
import { contracts } from './observable/contracts.js';
import { env } from './observable/env.js';
import { BrowserStore } from './stores/Browser.js'; // direct import (skip index with all)
export class Base {
#accounts: AddressSubject;
@@ -22,18 +23,21 @@ export class Base {
#contracts: AddressSubject;
#isEthereum: boolean;
#keyring?: KeyringInstance;
protected _store: KeyringStore;
protected _genesisHash?: string;
protected _genesisHash?: HexString | undefined;
protected _genesisHashAdd: string[] = [];
protected _genesisHashAdd: HexString[] = [];
constructor () {
this.#accounts = accounts;
this.#addresses = addresses;
this.#contracts = contracts;
this.#isEthereum = false;
this._store = new BrowserStore();
}
@@ -49,6 +53,10 @@ export class Base {
return this.#contracts;
}
public get isEthereum (): boolean {
return this.#isEthereum;
}
public get keyring (): KeyringInstance {
if (this.#keyring) {
return this.#keyring;
@@ -57,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];
@@ -117,10 +125,13 @@ export class Base {
this.setDevMode(options.isDevelopment);
}
// set Ethereum state
this.#isEthereum = keyring.type === 'ethereum';
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 || [];
+36 -18
View File
@@ -5,18 +5,18 @@ import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta } from '@polkadot/
import type { BN } from '@polkadot/util';
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { AddressSubject, SingleAddress } from './observable/types';
import type { CreateResult, KeyringAddress, KeyringAddressType, KeyringItemType, KeyringJson, KeyringJson$Meta, KeyringOptions, KeyringPairs$Json, KeyringStruct } from './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 { env } from './observable/env';
import { Base } from './Base';
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults';
import { KeyringOption } from './options';
import { env } from './observable/env.js';
import { KeyringOption } from './options/index.js';
import { Base } from './Base.js';
import { accountKey, accountRegex, addressKey, addressRegex, contractKey, contractRegex } from './defaults.js';
const RECENT_EXPIRY = 24 * 60 * 60;
@@ -46,10 +46,20 @@ export class Keyring extends Base implements KeyringStruct {
}
public addMultisig (addresses: (string | Uint8Array)[], threshold: bigint | BN | number, meta: KeyringPair$Meta = {}): CreateResult {
const address = createKeyMulti(addresses, threshold);
let address = createKeyMulti(addresses, threshold);
// For Ethereum chains, the first 20 bytes of the hash indicates the actual address
// Testcases via creation and on-chain events:
// - input: 0x7a1671a0224c8927b08f978027d586ab6868de0d31bb5bc956b625ced2ab18c4
// - output: 0x7a1671a0224c8927b08f978027d586ab6868de0d
if (this.isEthereum) {
address = address.slice(0, 20);
}
// we could use `sortAddresses`, but rather use internal encode/decode so we are 100%
const who = u8aSorted(addresses.map((who) => this.decodeAddress(who))).map((who) => this.encodeAddress(who));
const who = u8aSorted(
addresses.map((who) => this.decodeAddress(who))
).map((who) => this.encodeAddress(who));
return this.addExternal(address, objectSpread<KeyringPair$Meta>({}, meta, { isMultisig: true, threshold: bnToBn(threshold).toNumber(), who }));
}
@@ -142,8 +152,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 {
@@ -170,7 +186,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 {
@@ -185,11 +202,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;
}
@@ -242,7 +260,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);
@@ -259,7 +277,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];
@@ -289,7 +307,7 @@ export class Keyring extends Base implements KeyringStruct {
this.loadContract(json, key);
}
}
} catch (error) {
} catch {
console.warn(`Keyring: Unable to load ${key}:${stringify(json)}`);
}
}
@@ -299,7 +317,7 @@ export class Keyring extends Base implements KeyringStruct {
if (this.allowGenesis(account)) {
try {
this.loadInjected(account.address, account.meta, account.type);
} catch (error) {
} catch {
console.warn(`Keyring: Unable to inject ${stringify(account)}`);
}
}
@@ -360,7 +378,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,
+4 -4
View File
@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Keyring } from './Keyring';
import { Keyring } from './Keyring.js';
export { packageInfo } from './packageInfo';
export { packageInfo } from './packageInfo.js';
const keyring = new Keyring();
export const keyring = new Keyring();
export { Keyring, keyring };
export { Keyring };
+12 -18
View File
@@ -15,26 +15,20 @@ function toHex (address: string): string {
);
}
const accountKey = (address: string): string =>
`${ACCOUNT_PREFIX}${toHex(address)}`;
export function accountKey (address: string): string {
return `${ACCOUNT_PREFIX}${toHex(address)}`;
}
const addressKey = (address: string): string =>
`${ADDRESS_PREFIX}${toHex(address)}`;
export function addressKey (address: string): string {
return `${ADDRESS_PREFIX}${toHex(address)}`;
}
const contractKey = (address: string): string =>
`${CONTRACT_PREFIX}${toHex(address)}`;
export function contractKey (address: string): string {
return `${CONTRACT_PREFIX}${toHex(address)}`;
}
const accountRegex = new RegExp(`^${ACCOUNT_PREFIX}0x[0-9a-f]*`, '');
export const accountRegex = new RegExp(`^${ACCOUNT_PREFIX}0x[0-9a-f]*`, '');
const addressRegex = new RegExp(`^${ADDRESS_PREFIX}0x[0-9a-f]*`, '');
export const addressRegex = new RegExp(`^${ADDRESS_PREFIX}0x[0-9a-f]*`, '');
const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
export {
accountKey,
accountRegex,
addressKey,
addressRegex,
contractKey,
contractRegex
};
export const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
+2 -2
View File
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
+3 -3
View File
@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import './detectPackage';
import './detectPackage.js';
import { keyring } from './bundle';
import { keyring } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default keyring;
+1 -1
View File
@@ -1,4 +1,4 @@
// Copyright 2017-2023 @polkadot/util authors & contributors
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// Be able to import json in TS
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { accountKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { accountKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const accounts = genericSubject(accountKey, true);
export const accounts = /*#__PURE__*/ genericSubject(accountKey, true);
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { addressKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { addressKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const addresses = genericSubject(addressKey);
export const addresses = /*#__PURE__*/ genericSubject(addressKey);
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { contractKey } from '../defaults';
import { genericSubject } from './genericSubject';
import { contractKey } from '../defaults.js';
import { genericSubject } from './genericSubject.js';
export const contracts = genericSubject(contractKey);
export const contracts = /*#__PURE__*/ genericSubject(contractKey);
@@ -2,15 +2,15 @@
// SPDX-License-Identifier: Apache-2.0
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringJson, KeyringStore } from '../types';
import type { AddressSubject, SingleAddress, SubjectInfo } from './types';
import type { KeyringJson, KeyringStore } from '../types.js';
import type { AddressSubject, SingleAddress, SubjectInfo } from './types.js';
import { BehaviorSubject } from 'rxjs';
import { objectCopy, objectSpread } from '@polkadot/util';
import { createOptionItem } from '../options/item';
import { env } from './env';
import { createOptionItem } from '../options/item.js';
import { env } from './env.js';
function callNext (current: SubjectInfo, subject: BehaviorSubject<SubjectInfo>, withTest: boolean): void {
const isDevMode = env.isDevelopment();
+5 -5
View File
@@ -1,13 +1,13 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { SubjectInfo } from './types';
import type { SubjectInfo } from './types.js';
import { combineLatest, map } from 'rxjs';
import { accounts } from './accounts';
import { addresses } from './addresses';
import { contracts } from './contracts';
import { accounts } from './accounts.js';
import { addresses } from './addresses.js';
import { contracts } from './contracts.js';
interface Result {
accounts: SubjectInfo;
@@ -15,7 +15,7 @@ interface Result {
contracts: SubjectInfo;
}
export const obervableAll = combineLatest([
export const obervableAll = /*#__PURE__*/ combineLatest([
accounts.subject,
addresses.subject,
contracts.subject
+4 -6
View File
@@ -3,18 +3,16 @@
import type { BehaviorSubject } from 'rxjs';
import type { KeypairType } from '@polkadot/util-crypto/types';
import type { KeyringSectionOption } from '../options/types';
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringSectionOption } from '../options/types.js';
import type { KeyringJson, KeyringStore } from '../types.js';
export interface SingleAddress {
json: KeyringJson;
option: KeyringSectionOption;
type?: KeypairType;
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,25 +0,0 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
import type { KeyringStruct } from '../types';
import { KeyringOption } from '.';
const keyringOption = new KeyringOption();
describe('KeyringOption', (): void => {
it('should not allow initOptions to be called more than once', (): void => {
const state: Partial<KeyringStruct> = {};
// first call
keyringOption.init(state as KeyringStruct);
// second call
expect(
() => keyringOption.init(state as KeyringStruct)
).toThrow('Unable to initialise options more than once');
});
});
+19 -10
View File
@@ -1,15 +1,14 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { SingleAddress } from '../observable/types';
import type { KeyringStruct } from '../types';
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types';
import type { Subscription } from 'rxjs';
import type { SingleAddress } from '../observable/types.js';
import type { KeyringStruct } from '../types.js';
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types.js';
import { BehaviorSubject } from 'rxjs';
import { assert } from '@polkadot/util';
import { obervableAll } from '../observable';
import { obervableAll } from '../observable/index.js';
let hasCalledInitOptions = false;
@@ -36,7 +35,9 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
};
export class KeyringOption implements KeyringOptionInstance {
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
#allSub: Subscription | null = null;
public readonly optionsSubject = new BehaviorSubject<KeyringOptions>(this.emptyOptions());
public createOptionHeader (name: string): KeyringSectionOption {
return {
@@ -47,9 +48,11 @@ export class KeyringOption implements KeyringOptionInstance {
}
public init (keyring: KeyringStruct): void {
assert(!hasCalledInitOptions, 'Unable to initialise options more than once');
if (hasCalledInitOptions) {
throw new Error('Unable to initialise options more than once');
}
obervableAll.subscribe((): void => {
this.#allSub = obervableAll.subscribe((): void => {
const opts = this.emptyOptions();
this.addAccounts(keyring, opts);
@@ -68,7 +71,13 @@ export class KeyringOption implements KeyringOptionInstance {
hasCalledInitOptions = true;
}
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
public clear (): void {
if (this.#allSub) {
this.#allSub.unsubscribe();
}
}
private linkItems (items: Record<string, KeyringSectionOptions>): KeyringSectionOptions {
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
const options = items[header];
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringSectionOption } from './types';
import type { KeyringSectionOption } from './types.js';
import { isUndefined } from '@polkadot/util';
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringItemType, KeyringStruct } from '../types';
import type { KeyringItemType, KeyringStruct } from '../types.js';
export interface KeyringSectionOption {
key: string | null;
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.0.1' };
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.6.2' };
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringJson, KeyringStore } from '../types.js';
import store from 'store';
+8 -8
View File
@@ -1,13 +1,11 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { KeyringJson, KeyringStore } from '../types';
import type { KeyringJson, KeyringStore } from '../types.js';
import fs from 'fs';
import mkdirp from 'mkdirp';
import path from 'path';
import { assert } from '@polkadot/util';
import { mkdirpSync } from 'mkdirp';
import fs from 'node:fs';
import path from 'node:path';
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
export class FileStore implements KeyringStore {
@@ -15,7 +13,7 @@ export class FileStore implements KeyringStore {
constructor (path: string) {
if (!fs.existsSync(path)) {
mkdirp.sync(path);
mkdirpSync(path);
}
this.#path = path;
@@ -35,7 +33,9 @@ export class FileStore implements KeyringStore {
public get (key: string, fn: (value: KeyringJson) => void): void {
const value = this._readKey(key);
assert(value?.address, `Invalid JSON found for ${key}`);
if (!value?.address) {
throw new Error(`Invalid JSON found for ${key}`);
}
fn(value);
}
+2 -2
View File
@@ -1,5 +1,5 @@
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
// SPDX-License-Identifier: Apache-2.0
export { BrowserStore } from './Browser';
export { FileStore } from './File';
export { BrowserStore } from './Browser.js';
export { FileStore } from './File.js';
+7 -22
View File
@@ -2,29 +2,14 @@
// 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';
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;
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;
}
@@ -70,7 +55,7 @@ export interface KeyringStruct {
readonly addresses: AddressSubject;
readonly contracts: AddressSubject;
readonly keyring: BaseKeyringInstance | undefined;
readonly genesisHash?: string;
readonly genesisHash?: string | undefined;
addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult;
addPair: (pair: KeyringPair, password: string) => CreateResult;
+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" }
]
}
+8 -7
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Manages app settings",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-settings",
"repository": {
"directory": "packages/ui-settings",
@@ -17,14 +18,14 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"@polkadot/networks": "^11.0.1",
"@polkadot/util": "^11.0.1",
"eventemitter3": "^4.0.7",
"@polkadot/networks": "^12.4.2",
"@polkadot/util": "^12.4.2",
"eventemitter3": "^5.0.1",
"store": "^2.0.12",
"tslib": "^2.5.0"
"tslib": "^2.6.2"
},
"devDependencies": {
"@types/store": "^2.0.2"
+4 -4
View File
@@ -1,14 +1,14 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types';
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
import EventEmitter from 'eventemitter3';
import { EventEmitter } from 'eventemitter3';
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';
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';
type ChangeCallback = (settings: SettingsStruct) => void;
type OnTypes = 'change';
@@ -57,7 +57,7 @@ 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.#ledgerConn = withDefault(LEDGER_CONN, settings.ledgerConn, LEDGER_CONN_DEFAULT);
+5 -5
View File
@@ -1,10 +1,10 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { Settings, settings } from './Settings';
import { Settings, settings } from './Settings.js';
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults';
export { chains } from './defaults/chains';
export { packageInfo } from './packageInfo';
export { chains } from './defaults/chains.js';
export { ENDPOINT_DEFAULT, ICON_DEFAULT, ICON_DEFAULT_HOST, LANGUAGE_DEFAULT, LOCKING_DEFAULT, PREFIX_DEFAULT, UIMODE_DEFAULT, UITHEME_DEFAULT } from './defaults/index.js';
export { packageInfo } from './packageInfo.js';
export { settings, Settings };
export { Settings, settings };
+1 -3
View File
@@ -6,8 +6,6 @@ import { objectSpread } from '@polkadot/util';
type ChainDef = string[];
const chains: Record <string, ChainDef> = selectableNetworks
export const chains: Record <string, ChainDef> = /*#__PURE__*/ selectableNetworks
.filter((n) => n.genesisHash.length)
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
export { chains };
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const CRYPTOS: Option[] = [
{
@@ -1,12 +1,14 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const ENDPOINTS: Option[] = [{
info: 'local',
text: 'Local Node (Own, 127.0.0.1:9944)',
value: 'ws://127.0.0.1:9944/'
}];
export const ENDPOINTS: Option[] = [
{
info: 'local',
text: 'Local Node (Own, 127.0.0.1:9944)',
value: 'ws://127.0.0.1:9944/'
}
];
export const ENDPOINT_DEFAULT = ENDPOINTS[0];
+15 -44
View File
@@ -1,17 +1,17 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto';
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints';
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger';
import { PREFIX_DEFAULT, PREFIXES } from './ss58';
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui';
export { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
export { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
export { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
export { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
export { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.js';
const CAMERA_DEFAULT = 'off';
export const CAMERA_DEFAULT = 'off';
const CAMERA: Option[] = [
export const CAMERA: Option[] = [
{
info: 'on',
text: 'Allow camera access',
@@ -24,11 +24,11 @@ const CAMERA: Option[] = [
}
];
const LANGUAGE_DEFAULT = 'default';
export const LANGUAGE_DEFAULT = 'default';
const LOCKING_DEFAULT = 'session';
export const LOCKING_DEFAULT = 'session';
const LOCKING: Option[] = [
export const LOCKING: Option[] = [
{
info: 'session',
text: 'Once per session',
@@ -41,9 +41,9 @@ const LOCKING: Option[] = [
}
];
const METADATA_UP_DEFAULT = 'off';
export const METADATA_UP_DEFAULT = 'off';
const METADATA_UP: Option[] = [
export const METADATA_UP: Option[] = [
{
info: 'off',
text: 'Do not auto-update extension metadata',
@@ -56,9 +56,9 @@ const METADATA_UP: Option[] = [
}
];
const STORAGE_DEFAULT = 'off';
export const STORAGE_DEFAULT = 'off';
const STORAGE: Option[] = [
export const STORAGE: Option[] = [
{
info: 'on',
text: 'Allow local in-browser account storage',
@@ -70,32 +70,3 @@ const STORAGE: Option[] = [
value: 'off'
}
];
export {
CAMERA_DEFAULT,
CAMERA,
CRYPTOS,
CRYPTOS_ETH,
CRYPTOS_LEDGER,
ENDPOINT_DEFAULT,
ENDPOINTS,
ICON_DEFAULT,
ICON_DEFAULT_HOST,
ICONS,
LANGUAGE_DEFAULT,
LEDGER_CONN_DEFAULT,
LEDGER_CONN,
LOCKING_DEFAULT,
LOCKING,
METADATA_UP,
METADATA_UP_DEFAULT,
NOTIFICATION_DEFAULT,
PREFIX_DEFAULT,
PREFIXES,
STORAGE,
STORAGE_DEFAULT,
UIMODE_DEFAULT,
UIMODES,
UITHEME_DEFAULT,
UITHEMES
};
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
export const LEDGER_CONN_DEFAULT = 'none';
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { availableNetworks } from '@polkadot/networks';
+11 -23
View File
@@ -1,17 +1,17 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { Option } from '../types';
import type { Option } from '../types.js';
import { isPolkadot } from './type';
import { isPolkadot } from './type.js';
const LANGUAGE_DEFAULT = 'default';
export const LANGUAGE_DEFAULT = 'default';
const UIMODE_DEFAULT = !isPolkadot && typeof window !== 'undefined' && window.location.host.includes('ui-light')
export const UIMODE_DEFAULT = !isPolkadot && typeof window !== 'undefined' && window.location.host.includes('ui-light')
? 'light'
: 'full';
const UIMODES: Option[] = [
export const UIMODES: Option[] = [
{
info: 'full',
text: 'Fully featured',
@@ -24,11 +24,11 @@ const UIMODES: Option[] = [
}
];
const UITHEME_DEFAULT = isPolkadot
export const UITHEME_DEFAULT = isPolkadot
? 'polkadot'
: 'substrate';
const UITHEMES: Option[] = [
export const UITHEMES: Option[] = [
{
info: 'polkadot',
text: 'Polkadot',
@@ -41,13 +41,13 @@ const UITHEMES: Option[] = [
}
];
const ICON_DEFAULT = 'default';
export const ICON_DEFAULT = 'default';
const ICON_DEFAULT_HOST = isPolkadot
export const ICON_DEFAULT_HOST = isPolkadot
? 'polkadot'
: 'substrate';
const ICONS: Option[] = [
export const ICONS: Option[] = [
{
info: 'default',
text: 'Default for the connected node',
@@ -70,16 +70,4 @@ const ICONS: Option[] = [
}
];
const NOTIFICATION_DEFAULT = 'popup';
export {
ICON_DEFAULT,
ICON_DEFAULT_HOST,
ICONS,
LANGUAGE_DEFAULT,
NOTIFICATION_DEFAULT,
UIMODE_DEFAULT,
UIMODES,
UITHEME_DEFAULT,
UITHEMES
};
export const NOTIFICATION_DEFAULT = 'popup';
+2 -2
View File
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
+2 -2
View File
@@ -1,8 +1,8 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
import { settings } from './bundle';
import { settings } from './bundle.js';
export * from './bundle';
export * from './bundle.js';
export default settings;
+1 -1
View File
@@ -3,4 +3,4 @@
// Do not edit, auto-generated by @polkadot/dev
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.0.1' };
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.6.2' };
+1 -1
View File
@@ -1,7 +1,7 @@
// Copyright 2017-2023 @polkadot/ui-settings authors & contributors
// SPDX-License-Identifier: Apache-2.0
export type Option = {
export interface Option {
disabled?: boolean;
info: string;
text: string;
+8 -8
View File
@@ -1,11 +1,12 @@
{
"author": "Jaco Greeff <jacogr@gmail.com>",
"bugs": "https://github.com/polkadot-js/ui/issues",
"contributors": [],
"description": "Shared logic that is usable accross all frameworks-specific areas",
"engines": {
"node": ">=16"
},
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
"license": "Apache-2.0",
"maintainers": [],
"name": "@polkadot/ui-shared",
"repository": {
"directory": "packages/ui-shared",
@@ -17,16 +18,15 @@
"./detectPackage.cjs"
],
"type": "module",
"version": "3.0.1",
"version": "3.6.2",
"main": "index.js",
"dependencies": {
"color": "^3.2.1",
"tslib": "^2.5.0"
"colord": "^2.9.3",
"tslib": "^2.6.2"
},
"devDependencies": {
"@polkadot/util": "^11.0.1",
"@polkadot/util-crypto": "^11.0.1",
"@types/color": "^3.0.3",
"@polkadot/util": "^12.4.2",
"@polkadot/util-crypto": "^12.4.2",
"@types/xmlserializer": "^0.6.3",
"xmlserializer": "^0.6.1"
},
+2 -2
View File
@@ -1,5 +1,5 @@
// Copyright 2018-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
export * from './icons';
export { packageInfo } from './packageInfo';
export * from './icons/index.js';
export { packageInfo } from './packageInfo.js';
+2 -2
View File
@@ -5,7 +5,7 @@
import { detectPackage } from '@polkadot/util';
import others from './detectOther';
import { packageInfo } from './packageInfo';
import others from './detectOther.js';
import { packageInfo } from './packageInfo.js';
detectPackage(packageInfo, null, others);
@@ -1,13 +1,12 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import type { ColorGen } from './types';
import type { ColorGen } from './types.js';
import { colors as newColors } from './colors';
import { seeder as newSeeder } from './seeder';
import { colors as newColors } from './colors.js';
import { seeder as newSeeder } from './seeder.js';
describe('colors', (): void => {
let colors: ColorGen;
@@ -20,8 +19,9 @@ describe('colors', (): void => {
expect(
colors()
).toEqual(
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.9)'
'hsl(37.19999999999999, 100%, 54.9%)'
// with original color ...
// 'hsl(37.19999999999999, 100%, 54.9%)'
'hsl(37, 100%, 55%)'
);
});
@@ -29,17 +29,22 @@ describe('colors', (): void => {
expect(
colors(0.5)
).toEqual(
// 'hsla(166.70000000000005, 98.6%, 27.6%, 0.5)'
'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
// with original color ...
// 'hsla(37.19999999999999, 100%, 54.9%, 0.5)'
'hsla(37, 100%, 55%, 0.5)'
);
});
it('rolates colors', (): void => {
colors();
const orig = colors();
expect(
orig
).toEqual('hsl(37, 100%, 55%)');
expect(
colors()
).not.toEqual('hsla(166.70000000000005, 98.6%, 27.6%, 0.9)');
).not.toEqual(orig);
});
it('works in edge conditions (0xff)', (): void => {
@@ -54,8 +59,9 @@ describe('colors', (): void => {
expect(
colors()
).toEqual(
// 'hsla(234.39999999999998, 75.9%, 51.2%, 0.9)'
'hsl(15, 0%, 100%)'
// with original color ...
// 'hsl(15, 0%, 100%)'
'hsl(0, 0%, 100%)'
);
});
});
@@ -3,18 +3,19 @@
// Copyright 2016 Dan Finlay
import type { ColorGen, Seeder } from './types';
import type { Colord } from 'colord';
import type { ColorGen, Seeder } from './types.js';
import Color from 'color';
import { colord } from 'colord';
import { COLORS } from './defaults';
import { COLORS } from './defaults.js';
const WOBBLE = 30;
export function colors (seeder: Seeder): ColorGen {
const amount = (seeder() * WOBBLE) - (WOBBLE / 2);
const all = COLORS.map((hex): Color =>
Color(hex).rotate(amount)
const all = COLORS.map((hex): Colord =>
colord(hex).rotate(amount)
);
return (alpha = 1): string => {
@@ -22,6 +23,6 @@ export function colors (seeder: Seeder): ColorGen {
return all.splice(index, 1)[0]
.alpha(alpha)
.string();
.toHslString();
};
}
@@ -1,10 +1,9 @@
// Copyright 2017-2023 @polkadot/ui-shared authors & contributors
// SPDX-License-Identifier: Apache-2.0
// eslint-disable-next-line spaced-comment
/// <reference types="@polkadot/dev/node/test/node" />
/// <reference types="@polkadot/dev-test/globals.d.ts" />
import { container } from './container';
import { container } from './container.js';
describe('container', (): void => {
it('applies default styles', (): void => {

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