Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
84c36c5c68 | ||
|
|
4a71023452 | ||
|
|
359230bfb3 | ||
|
|
19fa38e441 | ||
|
|
e6105e19a5 | ||
|
|
e8b9f2aafc | ||
|
|
bcdd6e42ec | ||
|
|
b14dc3bcc3 | ||
|
|
798a9fb453 | ||
|
|
c81c08271b | ||
|
|
0957599bdb | ||
|
|
4ec2f6730b | ||
|
|
701439d6bc | ||
|
|
cade4a9051 | ||
|
|
d4bec36fa7 | ||
|
|
b83073f588 | ||
|
|
f36a80ad8b | ||
|
|
e2f16b8e2e | ||
|
|
8470b347a4 | ||
|
|
24f1cf7e17 | ||
|
|
aac0aa43d0 | ||
|
|
2c5db364ba | ||
|
|
bbf77d7b84 | ||
|
|
3250187fbb | ||
|
|
e3168c8231 | ||
|
|
6d98c56e7a | ||
|
|
bf986c079f | ||
|
|
f0d21fa985 |
@@ -13,13 +13,13 @@ jobs:
|
|||||||
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
|
- uses: dessant/lock-threads@c1b35aecc5cdb1a34539d14196df55838bb2f836
|
||||||
with:
|
with:
|
||||||
github-token: ${{ secrets.GH_PAT_BOT }}
|
github-token: ${{ secrets.GH_PAT_BOT }}
|
||||||
issue-lock-inactive-days: '7'
|
issue-inactive-days: '7'
|
||||||
issue-lock-comment: >
|
issue-comment: >
|
||||||
This thread has been automatically locked since there has not been
|
This thread has been automatically locked since there has not been
|
||||||
any recent activity after it was closed. Please open a new issue
|
any recent activity after it was closed. Please open a new issue
|
||||||
if you think you have a related problem or query.
|
if you think you have a related problem or query.
|
||||||
pr-lock-inactive-days: '2'
|
pr-inactive-days: '2'
|
||||||
pr-lock-comment: >
|
pr-comment: >
|
||||||
This pull request has been automatically locked since there
|
This pull request has been automatically locked since there
|
||||||
has not been any recent activity after it was closed.
|
has not been any recent activity after it was closed.
|
||||||
Please open a new issue for related bugs.
|
Please open a new issue for related bugs.
|
||||||
|
|||||||
@@ -1,5 +1,43 @@
|
|||||||
# CHANGELOG
|
# CHANGELOG
|
||||||
|
|
||||||
|
## 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
|
## 3.1.1 Mar 19, 2023
|
||||||
|
|
||||||
Changes:
|
Changes:
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
696 Jaco 3.1.1 (#739)
|
710 Jaco 3.2.2 (#754)
|
||||||
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
|
7 YJ fix #224: decrease frame size to 1024, set multipart bool (#225)
|
||||||
4 Antoine Estienne Refactor logic to better use prefix (#491)
|
4 Antoine Estienne Refactor logic to better use prefix (#491)
|
||||||
4 kwingram25 fix ff api url issue (#289)
|
4 kwingram25 fix ff api url issue (#289)
|
||||||
|
|||||||
+9
-9
@@ -2,7 +2,7 @@
|
|||||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=18.14"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui#readme",
|
"homepage": "https://github.com/polkadot-js/ui#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -14,10 +14,10 @@
|
|||||||
},
|
},
|
||||||
"sideEffects": false,
|
"sideEffects": false,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"versions": {
|
"versions": {
|
||||||
"git": "3.1.1",
|
"git": "3.2.2",
|
||||||
"npm": "3.1.1"
|
"npm": "3.2.2"
|
||||||
},
|
},
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
"packages/*"
|
"packages/*"
|
||||||
@@ -33,15 +33,15 @@
|
|||||||
"test:one": "polkadot-dev-run-test --env browser"
|
"test:one": "polkadot-dev-run-test --env browser"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@polkadot/dev": "^0.72.15",
|
"@polkadot/dev": "^0.73.6",
|
||||||
"@polkadot/x-bundle": "^11.1.1",
|
"@polkadot/x-bundle": "^12.1.1",
|
||||||
"@types/node": "^18.15.3",
|
"@types/node": "^18.16.3",
|
||||||
"react": "^18.2.0",
|
"react": "^18.2.0",
|
||||||
"react-dom": "^18.2.0",
|
"react-dom": "^18.2.0",
|
||||||
"react-is": "^18.2.0",
|
"react-is": "^18.2.0",
|
||||||
"react-native": "^0.71.4"
|
"react-native": "^0.71.7"
|
||||||
},
|
},
|
||||||
"resolutions": {
|
"resolutions": {
|
||||||
"typescript": "^5.0.2"
|
"typescript": "^5.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Renders an SVG picture representing an address",
|
"description": "Renders an SVG picture representing an address",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-identicon#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,25 +18,24 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/keyring": "^11.1.1",
|
"@polkadot/keyring": "^12.1.1",
|
||||||
"@polkadot/ui-settings": "3.1.1",
|
"@polkadot/ui-settings": "3.2.2",
|
||||||
"@polkadot/ui-shared": "3.1.1",
|
"@polkadot/ui-shared": "3.2.2",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"ethereum-blockies-base64": "^1.0.2",
|
"ethereum-blockies-base64": "^1.0.2",
|
||||||
"jdenticon": "3.2.0",
|
"jdenticon": "3.2.0",
|
||||||
"react-copy-to-clipboard": "^5.1.0",
|
"react-copy-to-clipboard": "^5.1.0",
|
||||||
"styled-components": "^5.3.9",
|
"styled-components": "^5.3.10",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/react-copy-to-clipboard": "^5.0.4",
|
"@types/react-copy-to-clipboard": "^5.0.4",
|
||||||
"@types/react-dom": "^18.0.11",
|
"@types/react-dom": "^18.2.1",
|
||||||
"@types/styled-components": "^5.1.26",
|
"@types/styled-components": "^5.1.26",
|
||||||
"styled-components": "^5.3.9",
|
|
||||||
"xmlserializer": "^0.6.1"
|
"xmlserializer": "^0.6.1"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
@@ -45,7 +44,6 @@
|
|||||||
"@polkadot/util-crypto": "*",
|
"@polkadot/util-crypto": "*",
|
||||||
"react": "*",
|
"react": "*",
|
||||||
"react-dom": "*",
|
"react-dom": "*",
|
||||||
"react-is": "*",
|
"react-is": "*"
|
||||||
"styled-components": "*"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,23 +6,13 @@ import type { IdentityProps as Props, Props as ComponentProps } from './types.js
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import CopyToClipboard from 'react-copy-to-clipboard';
|
import CopyToClipboard from 'react-copy-to-clipboard';
|
||||||
import styledComponents, { StyledInterface } from 'styled-components';
|
|
||||||
|
|
||||||
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
|
import { ICON_DEFAULT_HOST, settings } from '@polkadot/ui-settings';
|
||||||
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
||||||
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
|
import { decodeAddress, encodeAddress, ethereumEncode } from '@polkadot/util-crypto';
|
||||||
|
|
||||||
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js';
|
import { Beachball, Empty, Ethereum, Jdenticon, Polkadot } from './icons/index.js';
|
||||||
|
import { styled } from './styled.js';
|
||||||
// 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: StyledInterface }).styled ||
|
|
||||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
|
||||||
styledComponents as unknown as StyledInterface
|
|
||||||
);
|
|
||||||
|
|
||||||
const Fallback = Beachball;
|
const Fallback = Beachball;
|
||||||
|
|
||||||
@@ -99,7 +89,7 @@ class BaseIcon extends React.PureComponent<Props, State> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private getWrapped ({ address, publicKey }: State, { Custom }: Props): React.ReactNode {
|
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
|
const Component = !address
|
||||||
? Empty
|
? Empty
|
||||||
: Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback;
|
: Custom || Components[theme === 'default' ? ICON_DEFAULT_HOST : theme] || Fallback;
|
||||||
|
|||||||
@@ -2,6 +2,5 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export * from './icons/index.js';
|
export * from './icons/index.js';
|
||||||
|
|
||||||
export { Identicon } from './Identicon.js';
|
export { Identicon } from './Identicon.js';
|
||||||
export { packageInfo } from './packageInfo.js';
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import React, { useCallback } from 'react';
|
|||||||
|
|
||||||
import { beachballIcon } from '@polkadot/ui-shared';
|
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(
|
const updateElem = useCallback(
|
||||||
(node: HTMLDivElement): void => {
|
(node: HTMLDivElement): void => {
|
||||||
node && node.appendChild(
|
node && node.appendChild(
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import type { Props } from '../types.js';
|
|||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
function Identicon ({ className = '', size, style }: Props): React.ReactElement<Props> {
|
function Identicon ({ className = '', size, style = {} }: Props): React.ReactElement<Props> {
|
||||||
return (
|
return (
|
||||||
<svg
|
<svg
|
||||||
className={className}
|
className={className}
|
||||||
|
|||||||
@@ -5,23 +5,14 @@ import type { Props } from '../types.js';
|
|||||||
|
|
||||||
import makeBlockie from 'ethereum-blockies-base64';
|
import makeBlockie from 'ethereum-blockies-base64';
|
||||||
import React, { useMemo } from 'react';
|
import React, { useMemo } from 'react';
|
||||||
import styledComponents, { StyledInterface } from 'styled-components';
|
|
||||||
|
|
||||||
// In styled-components v6, there is a named export which can be used
|
import { styled } from '../styled.js';
|
||||||
// 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: StyledInterface }).styled ||
|
|
||||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
|
||||||
styledComponents as unknown as StyledInterface
|
|
||||||
);
|
|
||||||
|
|
||||||
interface ImgProps {
|
interface ImgProps {
|
||||||
size: number;
|
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(
|
const imgSrc = useMemo(
|
||||||
() => makeBlockie(address),
|
() => makeBlockie(address),
|
||||||
[address]
|
[address]
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import type { Props } from '../types.js';
|
|||||||
import * as jdenticon from 'jdenticon';
|
import * as jdenticon from 'jdenticon';
|
||||||
import React, { useMemo } from 'react';
|
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(
|
const html = useMemo(
|
||||||
() => ({ __html: jdenticon.toSvg(publicKey.substring(2), size) }),
|
() => ({ __html: jdenticon.toSvg(publicKey.substring(2), size) }),
|
||||||
[publicKey, size]
|
[publicKey, size]
|
||||||
|
|||||||
@@ -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(
|
const circles = useMemo(
|
||||||
() => polkadotIcon(address, { isAlternative }),
|
() => polkadotIcon(address, { isAlternative }),
|
||||||
[address, isAlternative]
|
[address, isAlternative]
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/react-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2017-2023 @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
|
||||||
|
);
|
||||||
@@ -1,10 +1,9 @@
|
|||||||
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
|
// Copyright 2018-2023 @polkadot/react-identicon authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type React from 'react';
|
||||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||||
|
|
||||||
import React from 'react';
|
|
||||||
|
|
||||||
export interface BaseProps {
|
export interface BaseProps {
|
||||||
className?: string;
|
className?: string;
|
||||||
style?: React.CSSProperties;
|
style?: React.CSSProperties;
|
||||||
@@ -12,11 +11,9 @@ export interface BaseProps {
|
|||||||
|
|
||||||
export interface Props extends BaseProps {
|
export interface Props extends BaseProps {
|
||||||
address: string;
|
address: string;
|
||||||
isAlternative?: boolean;
|
isAlternative?: boolean | undefined;
|
||||||
className?: string;
|
|
||||||
publicKey: string;
|
publicKey: string;
|
||||||
size: number;
|
size: number;
|
||||||
style?: React.CSSProperties;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IdentityProps extends BaseProps {
|
export interface IdentityProps extends BaseProps {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Generates and reads QR codes",
|
"description": "Generates and reads QR codes",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/react-qr#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,15 +18,15 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/ui-settings": "3.1.1",
|
"@polkadot/ui-settings": "3.2.2",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"qrcode-generator": "^1.4.4",
|
"qrcode-generator": "^1.4.4",
|
||||||
"react-qr-reader": "^2.2.1",
|
"react-qr-reader": "^2.2.1",
|
||||||
"styled-components": "^5.3.9",
|
"styled-components": "^5.3.10",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -38,6 +38,6 @@
|
|||||||
"@polkadot/util-crypto": "*",
|
"@polkadot/util-crypto": "*",
|
||||||
"react": "*",
|
"react": "*",
|
||||||
"react-dom": "*",
|
"react-dom": "*",
|
||||||
"styled-components": "*"
|
"react-is": "*"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,30 +2,20 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import styledComponents, { StyledInterface } from 'styled-components';
|
|
||||||
|
|
||||||
import { objectSpread } from '@polkadot/util';
|
import { objectSpread } from '@polkadot/util';
|
||||||
import { xxhashAsHex } from '@polkadot/util-crypto';
|
import { xxhashAsHex } from '@polkadot/util-crypto';
|
||||||
|
|
||||||
import { qrcode } from './qrcode.js';
|
import { qrcode } from './qrcode.js';
|
||||||
|
import { styled } from './styled.js';
|
||||||
import { createFrames, createImgSize } from './util.js';
|
import { createFrames, createImgSize } from './util.js';
|
||||||
|
|
||||||
// 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: StyledInterface }).styled ||
|
|
||||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
|
||||||
styledComponents as unknown as StyledInterface
|
|
||||||
);
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
className?: string;
|
className?: string | undefined;
|
||||||
size?: string | number;
|
size?: string | number | undefined;
|
||||||
skipEncoding?: boolean;
|
skipEncoding?: boolean;
|
||||||
style?: React.CSSProperties;
|
style?: React.CSSProperties | undefined;
|
||||||
timerDelay?: number;
|
timerDelay?: number | undefined;
|
||||||
value: Uint8Array;
|
value: Uint8Array;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,7 +45,7 @@ function getDataUrl (value: Uint8Array): string {
|
|||||||
return qr.createDataURL(16, 0);
|
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 [{ image }, setFrameState] = useState<FrameState>({ frameIdx: 0, frames: [], image: null, valueHash: null });
|
||||||
const timerRef = useRef<TimerState>({ timerDelay, timerId: null });
|
const timerRef = useRef<TimerState>({ timerDelay, timerId: null });
|
||||||
|
|
||||||
|
|||||||
@@ -3,27 +3,17 @@
|
|||||||
|
|
||||||
import React, { useCallback, useMemo } from 'react';
|
import React, { useCallback, useMemo } from 'react';
|
||||||
import Reader from 'react-qr-reader';
|
import Reader from 'react-qr-reader';
|
||||||
import styledComponents, { StyledInterface } from 'styled-components';
|
|
||||||
|
|
||||||
|
import { styled } from './styled.js';
|
||||||
import { createImgSize } from './util.js';
|
import { createImgSize } from './util.js';
|
||||||
|
|
||||||
// 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: StyledInterface }).styled ||
|
|
||||||
(styledComponents as unknown as { default: StyledInterface }).default ||
|
|
||||||
styledComponents as unknown as StyledInterface
|
|
||||||
);
|
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
className?: string;
|
className?: string | undefined;
|
||||||
delay?: number;
|
delay?: number;
|
||||||
onError?: (error: Error) => void;
|
onError?: undefined | ((error: Error) => void);
|
||||||
onScan: (data: string) => void;
|
onScan: (data: string) => void;
|
||||||
size?: string | number;
|
size?: string | number | undefined;
|
||||||
style?: React.CSSProperties;
|
style?: React.CSSProperties | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DEFAULT_DELAY = 150;
|
const DEFAULT_DELAY = 150;
|
||||||
@@ -32,7 +22,7 @@ const DEFAULT_ERROR = (error: Error): void => {
|
|||||||
console.error('@polkadot/react-qr:Scan', error.message);
|
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(
|
const containerStyle = useMemo(
|
||||||
() => createImgSize(size),
|
() => createImgSize(size),
|
||||||
[size]
|
[size]
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
import React, { useCallback } from 'react';
|
import React, { useCallback } from 'react';
|
||||||
|
|
||||||
import { assert } from '@polkadot/util';
|
|
||||||
import { decodeAddress } from '@polkadot/util-crypto';
|
import { decodeAddress } from '@polkadot/util-crypto';
|
||||||
|
|
||||||
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
|
import { ADDRESS_PREFIX, SEED_PREFIX } from './constants.js';
|
||||||
@@ -13,7 +12,7 @@ interface ScanType {
|
|||||||
isAddress: boolean;
|
isAddress: boolean;
|
||||||
content: string;
|
content: string;
|
||||||
genesisHash: string;
|
genesisHash: string;
|
||||||
name?: string;
|
name?: string | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -43,7 +42,9 @@ function ScanAddress ({ className, isEthereum, onError, onScan, size, style }: P
|
|||||||
const expectedPrefix = (isEthereum ? 'ethereum' : ADDRESS_PREFIX);
|
const expectedPrefix = (isEthereum ? 'ethereum' : ADDRESS_PREFIX);
|
||||||
const isValidPrefix = (prefix === expectedPrefix) || (prefix === SEED_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;
|
const isAddress = prefix === expectedPrefix;
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
export { QrDisplayAddress } from './DisplayAddress.js';
|
export { QrDisplayAddress } from './DisplayAddress.js';
|
||||||
export { QrDisplayPayload } from './DisplayPayload.js';
|
export { QrDisplayPayload } from './DisplayPayload.js';
|
||||||
export { QrScanAddress } from './ScanAddress.js';
|
|
||||||
export { QrScanSignature } from './ScanSignature.js';
|
|
||||||
export { QrNetworkSpecs } from './NetworkSpecs.js';
|
export { QrNetworkSpecs } from './NetworkSpecs.js';
|
||||||
export { packageInfo } from './packageInfo.js';
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
export { QrScanAddress } from './ScanAddress.js';
|
||||||
|
export { QrScanSignature } from './ScanSignature.js';
|
||||||
|
|||||||
@@ -1,24 +1,12 @@
|
|||||||
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
|
// Copyright 2017-2023 @polkadot/react-qr authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
const ADDRESS_PREFIX = 'substrate';
|
export const ADDRESS_PREFIX = 'substrate';
|
||||||
const SEED_PREFIX = 'secret';
|
export const SEED_PREFIX = 'secret';
|
||||||
const FRAME_SIZE = 1024;
|
export const FRAME_SIZE = 1024;
|
||||||
const SUBSTRATE_ID = new Uint8Array([0x53]);
|
export const SUBSTRATE_ID = new Uint8Array([0x53]);
|
||||||
const CRYPTO_SR25519 = new Uint8Array([0x01]);
|
export const CRYPTO_SR25519 = new Uint8Array([0x01]);
|
||||||
const CMD_SIGN_TX = new Uint8Array([0]);
|
export const CMD_SIGN_TX = new Uint8Array([0]);
|
||||||
const CMD_SIGN_TX_HASH = new Uint8Array([1]);
|
export const CMD_SIGN_TX_HASH = new Uint8Array([1]);
|
||||||
const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
|
export const CMD_SIGN_IMMORTAL_TX = new Uint8Array([2]);
|
||||||
const CMD_SIGN_MSG = new Uint8Array([3]);
|
export 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
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/react-qr', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
// Copyright 2017-2023 @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
|
||||||
|
);
|
||||||
@@ -13,9 +13,10 @@ export function encodeNumber (value: number): Uint8Array {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function encodeString (value: string): 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);
|
u8a[i] = value.charCodeAt(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Renders an SVG picture representing an address",
|
"description": "Renders an SVG picture representing an address",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/reactnative-identicon#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,17 +18,17 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/ui-shared": "3.1.1",
|
"@polkadot/ui-shared": "3.2.2",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"react-native-svg": "^12.5.1",
|
"react-native-svg": "^12.5.1",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/react-native": "^0.71.3"
|
"@types/react-native": "^0.71.6"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@polkadot/util": "*",
|
"@polkadot/util": "*",
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/reactnative-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-keyring#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -17,20 +17,20 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/keyring": "^11.1.1",
|
"@polkadot/keyring": "^12.1.1",
|
||||||
"@polkadot/ui-settings": "3.1.1",
|
"@polkadot/ui-settings": "3.2.2",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"mkdirp": "^2.1.5",
|
"mkdirp": "^2.1.6",
|
||||||
"rxjs": "^7.8.0",
|
"rxjs": "^7.8.1",
|
||||||
"store": "^2.0.12",
|
"store": "^2.0.12",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/mkdirp": "^1.0.2",
|
"@types/mkdirp": "^2.0.0",
|
||||||
"@types/store": "^2.0.2"
|
"@types/store": "^2.0.2"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
|
|||||||
@@ -22,11 +22,13 @@ export class Base {
|
|||||||
|
|
||||||
#contracts: AddressSubject;
|
#contracts: AddressSubject;
|
||||||
|
|
||||||
|
#isEthereum: boolean;
|
||||||
|
|
||||||
#keyring?: KeyringInstance;
|
#keyring?: KeyringInstance;
|
||||||
|
|
||||||
protected _store: KeyringStore;
|
protected _store: KeyringStore;
|
||||||
|
|
||||||
protected _genesisHash?: string;
|
protected _genesisHash?: string | undefined;
|
||||||
|
|
||||||
protected _genesisHashAdd: string[] = [];
|
protected _genesisHashAdd: string[] = [];
|
||||||
|
|
||||||
@@ -34,6 +36,7 @@ export class Base {
|
|||||||
this.#accounts = accounts;
|
this.#accounts = accounts;
|
||||||
this.#addresses = addresses;
|
this.#addresses = addresses;
|
||||||
this.#contracts = contracts;
|
this.#contracts = contracts;
|
||||||
|
this.#isEthereum = false;
|
||||||
this._store = new BrowserStore();
|
this._store = new BrowserStore();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -49,6 +52,10 @@ export class Base {
|
|||||||
return this.#contracts;
|
return this.#contracts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public get isEthereum (): boolean {
|
||||||
|
return this.#isEthereum;
|
||||||
|
}
|
||||||
|
|
||||||
public get keyring (): KeyringInstance {
|
public get keyring (): KeyringInstance {
|
||||||
if (this.#keyring) {
|
if (this.#keyring) {
|
||||||
return this.#keyring;
|
return this.#keyring;
|
||||||
@@ -117,6 +124,9 @@ export class Base {
|
|||||||
this.setDevMode(options.isDevelopment);
|
this.setDevMode(options.isDevelopment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set Ethereum state
|
||||||
|
this.#isEthereum = keyring.type === 'ethereum';
|
||||||
|
|
||||||
this.#keyring = keyring;
|
this.#keyring = keyring;
|
||||||
this._genesisHash = options.genesisHash && (
|
this._genesisHash = options.genesisHash && (
|
||||||
isString(options.genesisHash)
|
isString(options.genesisHash)
|
||||||
|
|||||||
@@ -46,10 +46,20 @@ export class Keyring extends Base implements KeyringStruct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public addMultisig (addresses: (string | Uint8Array)[], threshold: bigint | BN | number, meta: KeyringPair$Meta = {}): CreateResult {
|
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%
|
// 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 }));
|
return this.addExternal(address, objectSpread<KeyringPair$Meta>({}, meta, { isMultisig: true, threshold: bnToBn(threshold).toNumber(), who }));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ import { Keyring } from './Keyring.js';
|
|||||||
|
|
||||||
export { packageInfo } from './packageInfo.js';
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
const keyring = new Keyring();
|
export const keyring = new Keyring();
|
||||||
|
|
||||||
export { Keyring, keyring };
|
export { Keyring };
|
||||||
|
|||||||
@@ -15,26 +15,20 @@ function toHex (address: string): string {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const accountKey = (address: string): string =>
|
export function accountKey (address: string): string {
|
||||||
`${ACCOUNT_PREFIX}${toHex(address)}`;
|
return `${ACCOUNT_PREFIX}${toHex(address)}`;
|
||||||
|
}
|
||||||
|
|
||||||
const addressKey = (address: string): string =>
|
export function addressKey (address: string): string {
|
||||||
`${ADDRESS_PREFIX}${toHex(address)}`;
|
return `${ADDRESS_PREFIX}${toHex(address)}`;
|
||||||
|
}
|
||||||
|
|
||||||
const contractKey = (address: string): string =>
|
export function contractKey (address: string): string {
|
||||||
`${CONTRACT_PREFIX}${toHex(address)}`;
|
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 const contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
|
||||||
|
|
||||||
export {
|
|
||||||
accountKey,
|
|
||||||
accountRegex,
|
|
||||||
addressKey,
|
|
||||||
addressRegex,
|
|
||||||
contractKey,
|
|
||||||
contractRegex
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
import { accountKey } from '../defaults.js';
|
import { accountKey } from '../defaults.js';
|
||||||
import { genericSubject } from './genericSubject.js';
|
import { genericSubject } from './genericSubject.js';
|
||||||
|
|
||||||
export const accounts = genericSubject(accountKey, true);
|
export const accounts = /*#__PURE__*/ genericSubject(accountKey, true);
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
import { addressKey } from '../defaults.js';
|
import { addressKey } from '../defaults.js';
|
||||||
import { genericSubject } from './genericSubject.js';
|
import { genericSubject } from './genericSubject.js';
|
||||||
|
|
||||||
export const addresses = genericSubject(addressKey);
|
export const addresses = /*#__PURE__*/ genericSubject(addressKey);
|
||||||
|
|||||||
@@ -4,4 +4,4 @@
|
|||||||
import { contractKey } from '../defaults.js';
|
import { contractKey } from '../defaults.js';
|
||||||
import { genericSubject } from './genericSubject.js';
|
import { genericSubject } from './genericSubject.js';
|
||||||
|
|
||||||
export const contracts = genericSubject(contractKey);
|
export const contracts = /*#__PURE__*/ genericSubject(contractKey);
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ interface Result {
|
|||||||
contracts: SubjectInfo;
|
contracts: SubjectInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const obervableAll = combineLatest([
|
export const obervableAll = /*#__PURE__*/ combineLatest([
|
||||||
accounts.subject,
|
accounts.subject,
|
||||||
addresses.subject,
|
addresses.subject,
|
||||||
contracts.subject
|
contracts.subject
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import type { KeyringJson, KeyringStore } from '../types.js';
|
|||||||
export interface SingleAddress {
|
export interface SingleAddress {
|
||||||
json: KeyringJson;
|
json: KeyringJson;
|
||||||
option: KeyringSectionOption;
|
option: KeyringSectionOption;
|
||||||
type?: KeypairType;
|
type?: KeypairType | undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SubjectInfo {
|
export interface SubjectInfo {
|
||||||
|
|||||||
@@ -7,18 +7,21 @@ import type { KeyringStruct } from '../types.js';
|
|||||||
|
|
||||||
import { KeyringOption } from './index.js';
|
import { KeyringOption } from './index.js';
|
||||||
|
|
||||||
const keyringOption = new KeyringOption();
|
|
||||||
|
|
||||||
describe('KeyringOption', (): void => {
|
describe('KeyringOption', (): void => {
|
||||||
it('should not allow initOptions to be called more than once', (): 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.
|
||||||
const state: Partial<KeyringStruct> = {};
|
it.skip('should not allow initOptions to be called more than once', (): void => {
|
||||||
|
const keyringOption = new KeyringOption();
|
||||||
|
const state = {} as KeyringStruct;
|
||||||
|
|
||||||
// first call
|
// first call
|
||||||
keyringOption.init(state as KeyringStruct);
|
keyringOption.init(state);
|
||||||
|
|
||||||
// second call
|
// second call
|
||||||
expect(
|
expect(
|
||||||
() => keyringOption.init(state as KeyringStruct)
|
() => keyringOption.init(state)
|
||||||
).toThrow('Unable to initialise options more than once');
|
).toThrow('Unable to initialise options more than once');
|
||||||
|
|
||||||
|
// cleanup?
|
||||||
|
keyringOption.clear();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,14 +1,13 @@
|
|||||||
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
// Copyright 2017-2023 @polkadot/ui-keyring authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { Subscription } from 'rxjs';
|
||||||
import type { SingleAddress } from '../observable/types.js';
|
import type { SingleAddress } from '../observable/types.js';
|
||||||
import type { KeyringStruct } from '../types.js';
|
import type { KeyringStruct } from '../types.js';
|
||||||
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types.js';
|
import type { KeyringOptionInstance, KeyringOptions, KeyringSectionOption, KeyringSectionOptions } from './types.js';
|
||||||
|
|
||||||
import { BehaviorSubject } from 'rxjs';
|
import { BehaviorSubject } from 'rxjs';
|
||||||
|
|
||||||
import { assert } from '@polkadot/util';
|
|
||||||
|
|
||||||
import { obervableAll } from '../observable/index.js';
|
import { obervableAll } from '../observable/index.js';
|
||||||
|
|
||||||
let hasCalledInitOptions = false;
|
let hasCalledInitOptions = false;
|
||||||
@@ -36,6 +35,8 @@ const sortByCreated = (a: SingleAddress, b: SingleAddress): number => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export class KeyringOption implements KeyringOptionInstance {
|
export class KeyringOption implements KeyringOptionInstance {
|
||||||
|
#allSub: Subscription | null = null;
|
||||||
|
|
||||||
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
|
public readonly optionsSubject: BehaviorSubject<KeyringOptions> = new BehaviorSubject(this.emptyOptions());
|
||||||
|
|
||||||
public createOptionHeader (name: string): KeyringSectionOption {
|
public createOptionHeader (name: string): KeyringSectionOption {
|
||||||
@@ -47,9 +48,11 @@ export class KeyringOption implements KeyringOptionInstance {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public init (keyring: KeyringStruct): void {
|
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();
|
const opts = this.emptyOptions();
|
||||||
|
|
||||||
this.addAccounts(keyring, opts);
|
this.addAccounts(keyring, opts);
|
||||||
@@ -68,6 +71,12 @@ export class KeyringOption implements KeyringOptionInstance {
|
|||||||
hasCalledInitOptions = true;
|
hasCalledInitOptions = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public clear (): void {
|
||||||
|
if (this.#allSub) {
|
||||||
|
this.#allSub.unsubscribe();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
|
private linkItems (items: { [index: string]: KeyringSectionOptions }): KeyringSectionOptions {
|
||||||
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
|
return Object.keys(items).reduce((result, header): KeyringSectionOptions => {
|
||||||
const options = items[header];
|
const options = items[header];
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/ui-keyring', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import mkdirp from 'mkdirp';
|
|||||||
import fs from 'node:fs';
|
import fs from 'node:fs';
|
||||||
import path from 'node:path';
|
import path from 'node:path';
|
||||||
|
|
||||||
import { assert } from '@polkadot/util';
|
|
||||||
|
|
||||||
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
|
// NOTE untested and unused by any known apps, probably broken in various mysterious ways
|
||||||
export class FileStore implements KeyringStore {
|
export class FileStore implements KeyringStore {
|
||||||
#path: string;
|
#path: string;
|
||||||
@@ -35,7 +33,9 @@ export class FileStore implements KeyringStore {
|
|||||||
public get (key: string, fn: (value: KeyringJson) => void): void {
|
public get (key: string, fn: (value: KeyringJson) => void): void {
|
||||||
const value = this._readKey(key);
|
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);
|
fn(value);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ export interface ContractMeta {
|
|||||||
|
|
||||||
export interface KeyringJson$Meta {
|
export interface KeyringJson$Meta {
|
||||||
contract?: ContractMeta;
|
contract?: ContractMeta;
|
||||||
genesisHash?: string | null;
|
genesisHash?: string | null | undefined;
|
||||||
hardwareType?: 'ledger';
|
hardwareType?: 'ledger';
|
||||||
isHardware?: boolean;
|
isHardware?: boolean;
|
||||||
isInjected?: boolean;
|
isInjected?: boolean;
|
||||||
@@ -70,7 +70,7 @@ export interface KeyringStruct {
|
|||||||
readonly addresses: AddressSubject;
|
readonly addresses: AddressSubject;
|
||||||
readonly contracts: AddressSubject;
|
readonly contracts: AddressSubject;
|
||||||
readonly keyring: BaseKeyringInstance | undefined;
|
readonly keyring: BaseKeyringInstance | undefined;
|
||||||
readonly genesisHash?: string;
|
readonly genesisHash?: string | undefined;
|
||||||
|
|
||||||
addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult;
|
addExternal: (publicKey: Uint8Array, meta?: KeyringPair$Meta) => CreateResult;
|
||||||
addPair: (pair: KeyringPair, password: string) => CreateResult;
|
addPair: (pair: KeyringPair, password: string) => CreateResult;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Manages app settings",
|
"description": "Manages app settings",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-settings#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,12 +18,12 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/networks": "^11.1.1",
|
"@polkadot/networks": "^12.1.1",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"eventemitter3": "^4.0.7",
|
"eventemitter3": "^5.0.0",
|
||||||
"store": "^2.0.12",
|
"store": "^2.0.12",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
|
import type { Endpoint, EndpointType, Option, SettingsStruct } from './types.js';
|
||||||
|
|
||||||
import EventEmitter from 'eventemitter3';
|
import { EventEmitter } from 'eventemitter3';
|
||||||
import store from 'store';
|
import store from 'store';
|
||||||
|
|
||||||
import { hasProcess, isUndefined } from '@polkadot/util';
|
import { hasProcess, isUndefined } from '@polkadot/util';
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
import { Settings, settings } from './Settings.js';
|
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/index.js';
|
|
||||||
export { chains } from './defaults/chains.js';
|
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 { packageInfo } from './packageInfo.js';
|
||||||
|
|
||||||
export { settings, Settings };
|
export { Settings, settings };
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import { objectSpread } from '@polkadot/util';
|
|||||||
|
|
||||||
type ChainDef = string[];
|
type ChainDef = string[];
|
||||||
|
|
||||||
const chains: Record <string, ChainDef> = selectableNetworks
|
export const chains: Record <string, ChainDef> = /*#__PURE__*/ selectableNetworks
|
||||||
.filter((n) => n.genesisHash.length)
|
.filter((n) => n.genesisHash.length)
|
||||||
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
|
.reduce((chains, { genesisHash, network }) => objectSpread(chains, { [network]: genesisHash }), {});
|
||||||
|
|
||||||
export { chains };
|
|
||||||
|
|||||||
@@ -3,10 +3,12 @@
|
|||||||
|
|
||||||
import type { Option } from '../types.js';
|
import type { Option } from '../types.js';
|
||||||
|
|
||||||
export const ENDPOINTS: Option[] = [{
|
export const ENDPOINTS: Option[] = [
|
||||||
info: 'local',
|
{
|
||||||
text: 'Local Node (Own, 127.0.0.1:9944)',
|
info: 'local',
|
||||||
value: 'ws://127.0.0.1:9944/'
|
text: 'Local Node (Own, 127.0.0.1:9944)',
|
||||||
}];
|
value: 'ws://127.0.0.1:9944/'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
export const ENDPOINT_DEFAULT = ENDPOINTS[0];
|
export const ENDPOINT_DEFAULT = ENDPOINTS[0];
|
||||||
|
|||||||
@@ -3,15 +3,15 @@
|
|||||||
|
|
||||||
import type { Option } from '../types.js';
|
import type { Option } from '../types.js';
|
||||||
|
|
||||||
import { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
|
export { CRYPTOS, CRYPTOS_ETH, CRYPTOS_LEDGER } from './crypto.js';
|
||||||
import { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
|
export { ENDPOINT_DEFAULT, ENDPOINTS } from './endpoints.js';
|
||||||
import { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
|
export { LEDGER_CONN, LEDGER_CONN_DEFAULT } from './ledger.js';
|
||||||
import { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
|
export { PREFIX_DEFAULT, PREFIXES } from './ss58.js';
|
||||||
import { ICON_DEFAULT, ICON_DEFAULT_HOST, ICONS, NOTIFICATION_DEFAULT, UIMODE_DEFAULT, UIMODES, UITHEME_DEFAULT, UITHEMES } from './ui.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',
|
info: 'on',
|
||||||
text: 'Allow camera access',
|
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',
|
info: 'session',
|
||||||
text: 'Once per 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',
|
info: 'off',
|
||||||
text: 'Do not auto-update extension metadata',
|
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',
|
info: 'on',
|
||||||
text: 'Allow local in-browser account storage',
|
text: 'Allow local in-browser account storage',
|
||||||
@@ -70,32 +70,3 @@ const STORAGE: Option[] = [
|
|||||||
value: 'off'
|
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
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -5,13 +5,13 @@ import type { Option } from '../types.js';
|
|||||||
|
|
||||||
import { isPolkadot } from './type.js';
|
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'
|
? 'light'
|
||||||
: 'full';
|
: 'full';
|
||||||
|
|
||||||
const UIMODES: Option[] = [
|
export const UIMODES: Option[] = [
|
||||||
{
|
{
|
||||||
info: 'full',
|
info: 'full',
|
||||||
text: 'Fully featured',
|
text: 'Fully featured',
|
||||||
@@ -24,11 +24,11 @@ const UIMODES: Option[] = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const UITHEME_DEFAULT = isPolkadot
|
export const UITHEME_DEFAULT = isPolkadot
|
||||||
? 'polkadot'
|
? 'polkadot'
|
||||||
: 'substrate';
|
: 'substrate';
|
||||||
|
|
||||||
const UITHEMES: Option[] = [
|
export const UITHEMES: Option[] = [
|
||||||
{
|
{
|
||||||
info: 'polkadot',
|
info: 'polkadot',
|
||||||
text: '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'
|
? 'polkadot'
|
||||||
: 'substrate';
|
: 'substrate';
|
||||||
|
|
||||||
const ICONS: Option[] = [
|
export const ICONS: Option[] = [
|
||||||
{
|
{
|
||||||
info: 'default',
|
info: 'default',
|
||||||
text: 'Default for the connected node',
|
text: 'Default for the connected node',
|
||||||
@@ -70,16 +70,4 @@ const ICONS: Option[] = [
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
const NOTIFICATION_DEFAULT = 'popup';
|
export const NOTIFICATION_DEFAULT = 'popup';
|
||||||
|
|
||||||
export {
|
|
||||||
ICON_DEFAULT,
|
|
||||||
ICON_DEFAULT_HOST,
|
|
||||||
ICONS,
|
|
||||||
LANGUAGE_DEFAULT,
|
|
||||||
NOTIFICATION_DEFAULT,
|
|
||||||
UIMODE_DEFAULT,
|
|
||||||
UIMODES,
|
|
||||||
UITHEME_DEFAULT,
|
|
||||||
UITHEMES
|
|
||||||
};
|
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/ui-settings', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Shared logic that is usable accross all frameworks-specific areas",
|
"description": "Shared logic that is usable accross all frameworks-specific areas",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/ui-shared#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,15 +18,15 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"colord": "^2.9.3",
|
"colord": "^2.9.3",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"@types/xmlserializer": "^0.6.3",
|
"@types/xmlserializer": "^0.6.3",
|
||||||
"xmlserializer": "^0.6.1"
|
"xmlserializer": "^0.6.1"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -13,27 +13,26 @@ import { blake2AsU8a, decodeAddress } from '@polkadot/util-crypto';
|
|||||||
|
|
||||||
interface Scheme {
|
interface Scheme {
|
||||||
freq: number;
|
freq: number;
|
||||||
colors: number[];
|
colors: readonly number[];
|
||||||
}
|
}
|
||||||
|
|
||||||
const blake2 = (value: Uint8Array): Uint8Array =>
|
|
||||||
blake2AsU8a(value, 512);
|
|
||||||
|
|
||||||
const S = 64;
|
const S = 64;
|
||||||
const C = S / 2;
|
const C = S / 2;
|
||||||
const Z = S / 64 * 5;
|
const Z = S / 64 * 5;
|
||||||
|
|
||||||
/* eslint-disable sort-keys */
|
const SCHEMES: readonly Scheme[] = [
|
||||||
const SCHEMA: { [index: string]: Scheme } = {
|
/* target */ { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
|
||||||
target: { colors: [0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 0, 28, 0, 1], freq: 1 },
|
/* cube */ { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
|
||||||
cube: { colors: [0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 0, 1, 3, 2, 4, 3, 5], freq: 20 },
|
/* quazar */ { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
|
||||||
quazar: { colors: [1, 2, 3, 1, 2, 4, 5, 5, 4, 1, 2, 3, 1, 2, 4, 5, 5, 4, 0], freq: 16 },
|
/* flower */ { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
|
||||||
flower: { colors: [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 3], freq: 32 },
|
/* cyclic */ { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
|
||||||
cyclic: { colors: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 6], freq: 32 },
|
/* vmirror */ { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
|
||||||
vmirror: { colors: [0, 1, 2, 3, 4, 5, 3, 4, 2, 0, 1, 6, 7, 8, 9, 7, 8, 6, 10], freq: 128 },
|
/* hmirror */ { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
|
||||||
hmirror: { colors: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 8, 6, 7, 5, 3, 4, 2, 11], freq: 128 }
|
];
|
||||||
};
|
|
||||||
/* eslint-enable sort-keys */
|
const SCHEMES_TOTAL = SCHEMES
|
||||||
|
.map((s): number => s.freq)
|
||||||
|
.reduce((a, b): number => a + b);
|
||||||
|
|
||||||
const OUTER_CIRCLE: Circle = {
|
const OUTER_CIRCLE: Circle = {
|
||||||
cx: C,
|
cx: C,
|
||||||
@@ -85,7 +84,7 @@ function getCircleXY (isSixPoint = false): [number, number][] {
|
|||||||
|
|
||||||
function findScheme (d: number): Scheme {
|
function findScheme (d: number): Scheme {
|
||||||
let cum = 0;
|
let cum = 0;
|
||||||
const schema = Object.values(SCHEMA).find((schema): boolean => {
|
const schema = SCHEMES.find((schema): boolean => {
|
||||||
cum += schema.freq;
|
cum += schema.freq;
|
||||||
|
|
||||||
return d < cum;
|
return d < cum;
|
||||||
@@ -100,16 +99,15 @@ function findScheme (d: number): Scheme {
|
|||||||
|
|
||||||
function addressToId (address: string): Uint8Array {
|
function addressToId (address: string): Uint8Array {
|
||||||
if (!zeroHash.length) {
|
if (!zeroHash.length) {
|
||||||
zeroHash = blake2(new Uint8Array(32));
|
zeroHash = blake2AsU8a(new Uint8Array(32), 512);
|
||||||
}
|
}
|
||||||
|
|
||||||
return blake2(decodeAddress(address)).map((x, i) => (x + 256 - zeroHash[i]) % 256);
|
return blake2AsU8a(decodeAddress(address), 512).map((x, i) => (x + 256 - zeroHash[i]) % 256);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getColors (address: string): string[] {
|
function getColors (address: string): string[] {
|
||||||
const total = Object.values(SCHEMA).map((s): number => s.freq).reduce((a, b): number => a + b);
|
|
||||||
const id = addressToId(address);
|
const id = addressToId(address);
|
||||||
const d = Math.floor((id[30] + id[31] * 256) % total);
|
const d = Math.floor((id[30] + id[31] * 256) % SCHEMES_TOTAL);
|
||||||
const rot = (id[28] % 6) * 3;
|
const rot = (id[28] % 6) * 3;
|
||||||
const sat = (Math.floor(id[29] * 70 / 256 + 26) % 80) + 30;
|
const sat = (Math.floor(id[29] * 70 / 256 + 26) % 80) + 30;
|
||||||
const scheme = findScheme(d);
|
const scheme = findScheme(d);
|
||||||
@@ -134,7 +132,7 @@ function getColors (address: string): string[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description Generate a array of the circles that make up an identicon
|
* @description Generates an array of the circles that make up an identicon
|
||||||
*/
|
*/
|
||||||
export function polkadotIcon (address: string, { isAlternative }: Options): Circle[] {
|
export function polkadotIcon (address: string, { isAlternative }: Options): Circle[] {
|
||||||
const xy = getCircleXY(isAlternative);
|
const xy = getCircleXY(isAlternative);
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/ui-shared', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"bugs": "https://github.com/polkadot-js/ui/issues",
|
"bugs": "https://github.com/polkadot-js/ui/issues",
|
||||||
"description": "Renders an SVG picture representing an address",
|
"description": "Renders an SVG picture representing an address",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14"
|
"node": ">=16"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/vue-identicon#readme",
|
"homepage": "https://github.com/polkadot-js/ui/tree/master/packages/vue-identicon#readme",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
@@ -18,12 +18,12 @@
|
|||||||
"./detectPackage.cjs"
|
"./detectPackage.cjs"
|
||||||
],
|
],
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"version": "3.1.1",
|
"version": "3.2.2",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@polkadot/ui-shared": "3.1.1",
|
"@polkadot/ui-shared": "3.2.2",
|
||||||
"@polkadot/util": "^11.1.1",
|
"@polkadot/util": "^12.1.1",
|
||||||
"@polkadot/util-crypto": "^11.1.1",
|
"@polkadot/util-crypto": "^12.1.1",
|
||||||
"jdenticon": "3.2.0",
|
"jdenticon": "3.2.0",
|
||||||
"tslib": "^2.5.0"
|
"tslib": "^2.5.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { VNode } from 'vue';
|
||||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||||
|
|
||||||
import { defineComponent, VNode } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
import { isHex, isU8a, u8aToHex } from '@polkadot/util';
|
||||||
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
|
import { decodeAddress, encodeAddress } from '@polkadot/util-crypto';
|
||||||
|
|||||||
@@ -2,5 +2,4 @@
|
|||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
export { Identicon } from './Identicon.js';
|
export { Identicon } from './Identicon.js';
|
||||||
|
|
||||||
export { packageInfo } from './packageInfo.js';
|
export { packageInfo } from './packageInfo.js';
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { defineComponent, VNode } from 'vue';
|
import type { VNode } from 'vue';
|
||||||
|
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
import { beachballIcon } from '@polkadot/ui-shared';
|
import { beachballIcon } from '@polkadot/ui-shared';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import type { VNode } from 'vue';
|
||||||
|
|
||||||
import * as jdenticon from 'jdenticon';
|
import * as jdenticon from 'jdenticon';
|
||||||
import { defineComponent, VNode } from 'vue';
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
type PropsType = {
|
type PropsType = {
|
||||||
publicKey: string,
|
publicKey: string,
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
// Copyright 2017-2023 @polkadot/vue-identicon authors & contributors
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
import { defineComponent, VNode } from 'vue';
|
import type { VNode } from 'vue';
|
||||||
|
|
||||||
|
import { defineComponent } from 'vue';
|
||||||
|
|
||||||
import { polkadotIcon } from '@polkadot/ui-shared';
|
import { polkadotIcon } from '@polkadot/ui-shared';
|
||||||
|
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
|
|
||||||
// Do not edit, auto-generated by @polkadot/dev
|
// Do not edit, auto-generated by @polkadot/dev
|
||||||
|
|
||||||
export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.1.1' };
|
export const packageInfo = { name: '@polkadot/vue-identicon', path: 'auto', type: 'auto', version: '3.2.2' };
|
||||||
|
|||||||
Reference in New Issue
Block a user