Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4b097dcaef | ||
|
|
2a9cca5f1b | ||
|
|
8ce3a40c66 | ||
|
|
958a13384d | ||
|
|
e25545c39f | ||
|
|
bca1e0c5c4 | ||
|
|
bf36024568 | ||
|
|
1292a270e0 | ||
|
|
68fe800f63 | ||
|
|
ceb1575e1a | ||
|
|
4916d63832 | ||
|
|
d2176485b9 | ||
|
|
e9dd421b62 | ||
|
|
802c241820 | ||
|
|
a3b5ced423 | ||
|
|
b975766d35 | ||
|
|
eb460570ac | ||
|
|
a8658d5b60 | ||
|
|
fbe462e2e3 | ||
|
|
04bbf28a57 | ||
|
|
47b79675da | ||
|
|
4ed83e737c | ||
|
|
2ee863becc | ||
|
|
b343c31317 | ||
|
|
04759e563e | ||
|
|
6a5478919c | ||
|
|
ac828b31e6 | ||
|
|
86f17113e3 | ||
|
|
cb0429fae9 | ||
|
|
f23418ad84 | ||
|
|
8386a70bfe | ||
|
|
843cb3d00a | ||
|
|
3143e9df1c | ||
|
|
b76bdb5ed5 | ||
|
|
0e80e88456 | ||
|
|
46bfe643a6 |
+3
-2
@@ -1,12 +1,13 @@
|
||||
6
|
||||
|
||||
2.6.2
|
||||
2.12.2
|
||||
5.2.2
|
||||
5.2.3
|
||||
|
||||
5.4.2
|
||||
5.4.3
|
||||
5.4.4
|
||||
5.5.2
|
||||
5.6.2
|
||||
5.6.3
|
||||
5.6.3
|
||||
5.9.2
|
||||
|
||||
@@ -5,7 +5,7 @@ jobs:
|
||||
pr:
|
||||
strategy:
|
||||
matrix:
|
||||
step: ['lint', 'test', 'build', 'networks:crosscheck']
|
||||
step: ['lint', 'test', 'build']
|
||||
name: ${{ matrix.step }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
@@ -10,4 +10,4 @@ plugins:
|
||||
- path: .yarn/plugins/@yarnpkg/plugin-version.cjs
|
||||
spec: "@yarnpkg/plugin-version"
|
||||
|
||||
yarnPath: .yarn/releases/yarn-2.4.0.cjs
|
||||
yarnPath: .yarn/releases/yarn-2.4.1.cjs
|
||||
|
||||
@@ -1,5 +1,39 @@
|
||||
# CHANGELOG
|
||||
|
||||
## 6.0.1 Mar 5, 2021
|
||||
|
||||
**Important** In the 4.0 version the default package type has been changed to ESM modules by default. This should not affect usage, however since the output formats changed, a new major version is required.
|
||||
|
||||
Contributed:
|
||||
|
||||
- Add dev addresses for Frontier-based chains (Thanks to https://github.com/joelamouche)
|
||||
|
||||
Changes:
|
||||
|
||||
- Build to ESM by default (with cjs versions via export map)
|
||||
- Allow addition or raw pairs on the keyring via `{add, create}FromPair`
|
||||
- Extract re-usable json encryption/decryption functions
|
||||
|
||||
|
||||
## 5.9.2 Feb 28, 2021
|
||||
|
||||
Changes:
|
||||
|
||||
- Fix package detection for `@polkadot/networks` (no dependencies)
|
||||
|
||||
|
||||
## 5.9.1 Feb 28, 2021
|
||||
|
||||
Changes:
|
||||
|
||||
- Expand `detectPackage` with optional param allowing checks for monorepo versions
|
||||
- Export logger `format` function directly as `loggerFormat`
|
||||
- Expand tests and checks for `hdValidatePath`
|
||||
- Remove `hdEthereum` class-based approach, simplify
|
||||
- Cleanup formatting on nested conditionals in the `@polkadot/x-` packages
|
||||
- All packages now export `packageInfo` from the root
|
||||
|
||||
|
||||
## 5.8.1 Feb 26, 2021
|
||||
|
||||
Contributed:
|
||||
|
||||
@@ -32,5 +32,5 @@ module.exports = Object.assign({}, config, {
|
||||
'<rootDir>/packages/x-textencoder/build',
|
||||
'<rootDir>/packages/x-ws/build'
|
||||
],
|
||||
resolver: '@polkadot/dev/config/jest-resolver.cjs'
|
||||
transformIgnorePatterns: ['/node_modules/(?!@polkadot)']
|
||||
});
|
||||
+5
-5
@@ -7,7 +7,7 @@
|
||||
"packages/*"
|
||||
],
|
||||
"resolutions": {
|
||||
"typescript": "^4.1.5"
|
||||
"typescript": "^4.2.2"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "polkadot-dev-build-ts",
|
||||
@@ -20,10 +20,10 @@
|
||||
"test:one": "polkadot-dev-run-test"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.13.1",
|
||||
"@polkadot/dev": "^0.61.28",
|
||||
"@polkadot/ts": "^0.3.59",
|
||||
"@babel/core": "^7.13.8",
|
||||
"@polkadot/dev": "^0.62.5",
|
||||
"@polkadot/ts": "^0.3.61",
|
||||
"@types/jest": "^26.0.20"
|
||||
},
|
||||
"version": "5.8.1"
|
||||
"version": "6.0.1"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/hw-ledger-transports",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"repository": "github:polkadot-js/common",
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
@@ -11,14 +12,14 @@
|
||||
"react-native": "react-native.js",
|
||||
"sideEffects": false,
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@ledgerhq/hw-transport-webusb": "^5.43.0"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@ledgerhq/hw-transport-webusb": "^5.45.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/ledgerhq__hw-transport-node-hid": "^4.22.2",
|
||||
"@types/ledgerhq__hw-transport-webusb": "^4.70.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "^5.43.0"
|
||||
"@ledgerhq/hw-transport-node-hid-singleton": "^5.45.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,9 @@ import type { TransportDef } from './types';
|
||||
|
||||
import LedgerWebUSB from '@ledgerhq/hw-transport-webusb';
|
||||
|
||||
const transports: TransportDef[] = [
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const transports: TransportDef[] = [
|
||||
// deprecated
|
||||
// import LedgerU2F from '@ledgerhq/hw-transport-u2f';
|
||||
// {
|
||||
@@ -20,5 +22,3 @@ const transports: TransportDef[] = [
|
||||
type: 'webusb'
|
||||
}
|
||||
];
|
||||
|
||||
export { transports };
|
||||
|
||||
@@ -6,12 +6,12 @@ import type { TransportDef } from './types';
|
||||
|
||||
import LedgerHid from '@ledgerhq/hw-transport-node-hid-singleton';
|
||||
|
||||
const transports: TransportDef[] = [
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const transports: TransportDef[] = [
|
||||
{
|
||||
create: (): Promise<Transport> =>
|
||||
LedgerHid.create(),
|
||||
type: 'hid'
|
||||
}
|
||||
];
|
||||
|
||||
export { transports };
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/hw-ledger-transports authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger-transports', version: '6.0.1' };
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
|
||||
import type { TransportDef } from './types';
|
||||
|
||||
const transports: TransportDef[] = [];
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export { transports };
|
||||
export const transports: TransportDef[] = [];
|
||||
|
||||
@@ -1,17 +1,21 @@
|
||||
{
|
||||
"name": "@polkadot/hw-ledger",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"repository": "github:polkadot-js/common",
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
"contributors": [],
|
||||
"license": "Apache-2.0",
|
||||
"main": "index.js",
|
||||
"sideEffects": false,
|
||||
"sideEffects": [
|
||||
"./detectPackage.js",
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/hw-ledger-transports": "5.8.1",
|
||||
"@polkadot/util": "^5.8.1",
|
||||
"@zondax/ledger-polkadot": "^0.13.1"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/hw-ledger-transports": "6.0.1",
|
||||
"@polkadot/util": "^6.0.1",
|
||||
"@zondax/ledger-polkadot": "^0.13.4"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { packageInfo as transportInfo } from '@polkadot/hw-ledger-transports/packageInfo';
|
||||
import { detectPackage, packageInfo as utilInfo } from '@polkadot/util';
|
||||
|
||||
import { packageInfo } from './packageInfo';
|
||||
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname, [transportInfo, utilInfo]);
|
||||
@@ -1,13 +1,17 @@
|
||||
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
|
||||
import type Transport from '@ledgerhq/hw-transport';
|
||||
import type { AccountOptions, LedgerAddress, LedgerSignature, LedgerTypes, LedgerVersion } from './types';
|
||||
|
||||
import { newDockApp, newKusamaApp, newPolkadotApp, newPolymeshApp, ResponseBase, SubstrateApp } from '@zondax/ledger-polkadot';
|
||||
|
||||
import { transports } from '@polkadot/hw-ledger-transports';
|
||||
import { assert, bufferToU8a, u8aToBuffer, u8aToHex } from '@polkadot/util';
|
||||
import { assert, u8aToBuffer } from '@polkadot/util';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
|
||||
|
||||
@@ -77,7 +81,7 @@ export class Ledger {
|
||||
const { signature } = await this.#wrapError(app.sign(account + accountOffset, change, addressIndex + addressOffset, buffer));
|
||||
|
||||
return {
|
||||
signature: u8aToHex(bufferToU8a(signature))
|
||||
signature: `0x${signature.toString('hex')}`
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/hw-ledger authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/hw-ledger', version: '6.0.1' };
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/keyring",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "Keyring management",
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
@@ -9,18 +10,18 @@
|
||||
"main": "index.js",
|
||||
"sideEffects": [
|
||||
"./detectPackage.js",
|
||||
"./detectPackage.mjs"
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"repository": "github:polkadot-js/common",
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/keyring#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/util": "5.8.1",
|
||||
"@polkadot/util-crypto": "5.8.1"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/util": "6.0.1",
|
||||
"@polkadot/util-crypto": "6.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "5.8.1",
|
||||
"@polkadot/util-crypto": "5.8.1"
|
||||
"@polkadot/util": "6.0.1",
|
||||
"@polkadot/util-crypto": "6.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,12 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// default substrate dev phrase
|
||||
const DEV_PHRASE = 'bottom drive obey lake curtain smoke basket hold race lonely fit walk';
|
||||
export const DEV_PHRASE = 'bottom drive obey lake curtain smoke basket hold race lonely fit walk';
|
||||
|
||||
// seed from the above phrase
|
||||
const DEV_SEED = '0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e';
|
||||
|
||||
export {
|
||||
DEV_PHRASE,
|
||||
DEV_SEED
|
||||
};
|
||||
export const DEV_SEED = '0xfac7959dbfe72f052e5a0c3c8d6530f202b02fd8f9f5ca3580ec8deb7797479e';
|
||||
|
||||
@@ -1,25 +1,9 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
|
||||
//
|
||||
// new URL(import.meta.url).pathname)
|
||||
//
|
||||
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
|
||||
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
|
||||
// there is a complete dead end with usage thereof
|
||||
//
|
||||
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
|
||||
//
|
||||
// cjs: util.detectPackage(packageInfo, () => __dirname);
|
||||
// esm: detectPackage(packageInfo, () => import.meta.url);
|
||||
//
|
||||
// With the above we additionally need a .d.ts to just export the packageInfo
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
import { detectPackage, packageInfo as utilInfo } from '@polkadot/util';
|
||||
import { packageInfo as cryptoInfo } from '@polkadot/util-crypto/packageInfo';
|
||||
|
||||
import { packageInfo } from './packageInfo';
|
||||
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname);
|
||||
|
||||
export { packageInfo };
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname, [utilInfo, cryptoInfo]);
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { hexToU8a, stringToU8a } from '@polkadot/util';
|
||||
import { cryptoWaitReady, encodeAddress, randomAsU8a, setSS58Format } from '@polkadot/util-crypto';
|
||||
import type { KeyringPair$Json } from './types';
|
||||
|
||||
import { hexToU8a, stringToU8a } from '@polkadot/util';
|
||||
import { base64Decode, cryptoWaitReady, encodeAddress, randomAsU8a, setSS58Format } from '@polkadot/util-crypto';
|
||||
|
||||
import { decodePair } from './pair/decode';
|
||||
import Keyring from '.';
|
||||
|
||||
describe('keypair', (): void => {
|
||||
@@ -306,6 +309,7 @@ describe('keypair', (): void => {
|
||||
describe('ethereum', (): void => {
|
||||
// combine mnemonic with derivation path
|
||||
const PHRASE = 'seed sock milk update focus rotate barely fade car face mechanic mercy' + '/m/44\'/60\'/0\'/0/0';
|
||||
const PRIV_KEY_ONE = '0x070dc3117300011918e26b02176945cc15c3d548cf49fd8418d97f93af699e46';
|
||||
const ETH_ADDRESS_ONE = '0x31ea8795EE32D782C8ff41a5C68Dcbf0F5B27f6d';
|
||||
|
||||
let keyring: Keyring;
|
||||
@@ -314,6 +318,22 @@ describe('keypair', (): void => {
|
||||
keyring = new Keyring({ type: 'ethereum' });
|
||||
});
|
||||
|
||||
it('creates with dev phrase from the private key', (): void => {
|
||||
const pair = keyring.addFromSeed(hexToU8a(PRIV_KEY_ONE));
|
||||
|
||||
expect(
|
||||
pair.address
|
||||
).toEqual(ETH_ADDRESS_ONE);
|
||||
});
|
||||
|
||||
it('creates with dev phrase from the private key in createFromUri', (): void => {
|
||||
const pair = keyring.createFromUri(PRIV_KEY_ONE);
|
||||
|
||||
expect(
|
||||
pair.address
|
||||
).toEqual(ETH_ADDRESS_ONE);
|
||||
});
|
||||
|
||||
it('creates with dev phrase with derivation path specified', (): void => {
|
||||
const pair = keyring.createFromUri(PHRASE);
|
||||
|
||||
@@ -412,6 +432,30 @@ describe('keypair', (): void => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('raw pair add/create', (): void => {
|
||||
const json = JSON.parse('{"address":"5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H","encoded":"JQUl8ZpoXv2OMkL9TPylLmcIye2cYhaS9INICbFgZTsAgAAAAQAAAAgAAAAr/0hJOOzokIdBG71TstigLABX9D5xGD7L37ySxtjDrVRg26LL90jLQ47quT9o3bq6ppXMVL6USk7Q4p3WU66bojTFuCDyhpYRhNbUqU6s0rD3S4bhv9lG+pG9vQ4eD5PVQUvxdANmJpYuDg45nrTmsMC5AHGdFGkHW/LHnkmbFid1cvPYkdiBoef5CIEdoly512pxMupVxnJWF1NT","encoding":{"content":["pkcs8","sr25519"],"type":["scrypt","xsalsa20-poly1305"],"version":"3"},"meta":{"name":"hello"}}') as KeyringPair$Json;
|
||||
const decoded = decodePair('1', base64Decode(json.encoded), json.encoding.type);
|
||||
const keyring = new Keyring({ ss58Format: 44 });
|
||||
|
||||
it('creates a pair from a private/public combo', (): void => {
|
||||
const pair = keyring.createFromPair(decoded, json.meta, 'sr25519');
|
||||
|
||||
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
|
||||
expect(pair.isLocked).toEqual(false);
|
||||
expect(pair.meta.name).toEqual('hello');
|
||||
});
|
||||
|
||||
it('adds a pair from a private/public combo', (): void => {
|
||||
keyring.addFromPair(decoded, json.meta, 'sr25519');
|
||||
|
||||
const pair = keyring.getPairs()[0];
|
||||
|
||||
expect(pair.address).toEqual('5PjeoaQzCoYbSi42aQRKB3Sx18StCaEAzCbGEEbWbZyfKS3H');
|
||||
expect(pair.isLocked).toEqual(false);
|
||||
expect(pair.meta.name).toEqual('hello');
|
||||
});
|
||||
});
|
||||
|
||||
describe('util', (): void => {
|
||||
let keyring: Keyring;
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ import { Keyring } from './keyring';
|
||||
|
||||
export { decodeAddress, encodeAddress, setSS58Format } from '@polkadot/util-crypto';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export default Keyring;
|
||||
|
||||
export { Keyring };
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/json/types';
|
||||
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from './types';
|
||||
import type { KeyringInstance, KeyringOptions, KeyringPair, KeyringPair$Json, KeyringPair$Meta } from './types';
|
||||
|
||||
import { assert, hexToU8a, isHex, isUndefined, stringToU8a } from '@polkadot/util';
|
||||
import { base64Decode, decodeAddress, encodeAddress, ethereumEncode, hdEthereum, keyExtractSuri, keyFromPath, mnemonicToLegacySeed, mnemonicToMiniSecret, naclKeypairFromSeed as naclFromSeed, schnorrkelKeypairFromSeed as schnorrkelFromSeed, secp256k1KeypairFromSeed as secp256k1FromSeed } from '@polkadot/util-crypto';
|
||||
@@ -90,7 +91,7 @@ export class Keyring implements KeyringInstance {
|
||||
* of an account backup), and then generates a keyring pair from them that it passes to
|
||||
* `addPair` to stores in a keyring pair dictionary the public key of the generated pair as a key and the pair as the associated value.
|
||||
*/
|
||||
public addFromAddress (address: string | Uint8Array, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, type: KeypairType = this.type, ignoreChecksum?: boolean, encType?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
|
||||
public addFromAddress (address: string | Uint8Array, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, type: KeypairType = this.type, ignoreChecksum?: boolean, encType?: EncryptedJsonEncoding[]): KeyringPair {
|
||||
const publicKey = this.decodeAddress(address, ignoreChecksum);
|
||||
|
||||
return this.addPair(createPair({ toSS58: this.encodeAddress, type }, { publicKey, secretKey: new Uint8Array() }, meta, encoded, encType));
|
||||
@@ -119,6 +120,16 @@ export class Keyring implements KeyringInstance {
|
||||
return this.addFromUri(mnemonic, meta, type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @name addFromPair
|
||||
* @summary Stores an account created from an explicit publicKey/secreteKey combination
|
||||
*/
|
||||
public addFromPair (pair: Keypair, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
|
||||
return this.addPair(
|
||||
this.createFromPair(pair, meta, type)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @name addFromSeed
|
||||
* @summary Stores an account, given seed data, as a Key/Value (public key, pair) in Keyring Pair Dictionary
|
||||
@@ -127,7 +138,9 @@ export class Keyring implements KeyringInstance {
|
||||
* `addPair` to store in a keyring pair dictionary the public key of the generated pair as a key and the pair as the associated value.
|
||||
*/
|
||||
public addFromSeed (seed: Uint8Array, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
|
||||
return this.addPair(createPair({ toSS58: this.encodeAddress, type }, keypairFromSeed[type](seed), meta, null));
|
||||
return this.addPair(
|
||||
createPair({ toSS58: this.encodeAddress, type }, keypairFromSeed[type](seed), meta, null)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -146,13 +159,18 @@ export class Keyring implements KeyringInstance {
|
||||
* @description Creates a pair from a JSON keyfile
|
||||
*/
|
||||
public createFromJson ({ address, encoded, encoding: { content, type, version }, meta }: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair {
|
||||
assert(version !== '3' || content[0] === 'pkcs8', () => `Unable to decode non-pkcs8 type, [${content.join(',')}] found}`);
|
||||
|
||||
const cryptoType = version === '0' || !Array.isArray(content)
|
||||
? this.type
|
||||
: content[1];
|
||||
const encType = !Array.isArray(type)
|
||||
? [type]
|
||||
: type;
|
||||
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
|
||||
|
||||
assert(['ed25519', 'sr25519', 'ecdsa', 'ethereum'].includes(cryptoType), `Unknown crypto type ${cryptoType}`);
|
||||
|
||||
// Here the address and publicKey are 32 bytes and isomorphic. This is why the address field needs to be the public key for ethereum type pairs
|
||||
const publicKey = isHex(address)
|
||||
? hexToU8a(address)
|
||||
: this.decodeAddress(address, ignoreChecksum);
|
||||
@@ -160,7 +178,15 @@ export class Keyring implements KeyringInstance {
|
||||
? hexToU8a(encoded)
|
||||
: base64Decode(encoded);
|
||||
|
||||
return createPair({ toSS58: this.encodeAddress, type: cryptoType }, { publicKey, secretKey: new Uint8Array() }, meta, decoded, encType);
|
||||
return createPair({ toSS58: this.encodeAddress, type: cryptoType as KeypairType }, { publicKey, secretKey: new Uint8Array() }, meta, decoded, encType);
|
||||
}
|
||||
|
||||
/**
|
||||
* @name createFromPair
|
||||
* @summary Creates a pair from an explicit publicKey/secreteKey combination
|
||||
*/
|
||||
public createFromPair (pair: Keypair, meta: KeyringPair$Meta = {}, type: KeypairType = this.type): KeyringPair {
|
||||
return createPair({ toSS58: this.encodeAddress, type }, pair, meta, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -175,11 +201,12 @@ export class Keyring implements KeyringInstance {
|
||||
: _suri;
|
||||
const { derivePath, password, path, phrase } = keyExtractSuri(suri);
|
||||
let seed: Uint8Array;
|
||||
const isPhraseHex = isHex(phrase, 256);
|
||||
|
||||
if (isHex(phrase, 256)) {
|
||||
if (isPhraseHex) {
|
||||
seed = hexToU8a(phrase);
|
||||
} else {
|
||||
const str = phrase as string;
|
||||
const str = phrase;
|
||||
const parts = str.split(' ');
|
||||
|
||||
if ([12, 15, 18, 21, 24].includes(parts.length)) {
|
||||
@@ -194,7 +221,9 @@ export class Keyring implements KeyringInstance {
|
||||
}
|
||||
|
||||
const derived = type === 'ethereum'
|
||||
? hdEthereum(seed, derivePath.substring(1))
|
||||
? isPhraseHex
|
||||
? keypairFromSeed[type](seed) // for eth, if the private key is provided as suri, it must be derived only once
|
||||
: hdEthereum(seed, derivePath.substring(1))
|
||||
: keyFromPath(keypairFromSeed[type](seed), path, type);
|
||||
|
||||
return createPair({ toSS58: this.encodeAddress, type }, derived, meta, null);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/keyring', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/keyring', version: '6.0.1' };
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringPair$JsonEncodingTypes } from '../types';
|
||||
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/json/types';
|
||||
import type { PairInfo } from './types';
|
||||
|
||||
import { assert, stringToU8a, u8aFixLength } from '@polkadot/util';
|
||||
import { naclDecrypt, scryptEncode, scryptFromU8a } from '@polkadot/util-crypto';
|
||||
import { assert, isUndefined, u8aEq } from '@polkadot/util';
|
||||
import { jsonDecryptData } from '@polkadot/util-crypto';
|
||||
|
||||
import { ENCODING, NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH, SEED_LENGTH } from './defaults';
|
||||
|
||||
const SEED_OFFSET = PKCS8_HEADER.length;
|
||||
|
||||
@@ -15,59 +15,33 @@ type DecodeResult = PairInfo & {
|
||||
secretKey: Uint8Array;
|
||||
};
|
||||
|
||||
function decodePkcs8 (encoded: Uint8Array): DecodeResult {
|
||||
const header = encoded.subarray(0, PKCS8_HEADER.length);
|
||||
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, _encType?: EncryptedJsonEncoding | EncryptedJsonEncoding[]): DecodeResult {
|
||||
const encType = Array.isArray(_encType) || isUndefined(_encType)
|
||||
? _encType
|
||||
: [_encType];
|
||||
const decrypted = jsonDecryptData(encrypted, passphrase, encType);
|
||||
const header = decrypted.subarray(0, PKCS8_HEADER.length);
|
||||
|
||||
assert(header.toString() === PKCS8_HEADER.toString(), 'Invalid Pkcs8 header found in body');
|
||||
assert(u8aEq(header, PKCS8_HEADER), 'Invalid Pkcs8 header found in body');
|
||||
|
||||
let secretKey = encoded.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
|
||||
let secretKey = decrypted.subarray(SEED_OFFSET, SEED_OFFSET + SEC_LENGTH);
|
||||
let divOffset = SEED_OFFSET + SEC_LENGTH;
|
||||
let divider = encoded.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
||||
let divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
||||
|
||||
// old-style, we have the seed here
|
||||
if (divider.toString() !== PKCS8_DIVIDER.toString()) {
|
||||
if (!u8aEq(divider, PKCS8_DIVIDER)) {
|
||||
divOffset = SEED_OFFSET + SEED_LENGTH;
|
||||
secretKey = encoded.subarray(SEED_OFFSET, divOffset);
|
||||
divider = encoded.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
||||
secretKey = decrypted.subarray(SEED_OFFSET, divOffset);
|
||||
divider = decrypted.subarray(divOffset, divOffset + PKCS8_DIVIDER.length);
|
||||
|
||||
assert(u8aEq(divider, PKCS8_DIVIDER), 'Invalid Pkcs8 divider found in body');
|
||||
}
|
||||
|
||||
assert(divider.toString() === PKCS8_DIVIDER.toString(), 'Invalid Pkcs8 divider found in body');
|
||||
|
||||
const pubOffset = divOffset + PKCS8_DIVIDER.length;
|
||||
const publicKey = encoded.subarray(pubOffset, pubOffset + PUB_LENGTH);
|
||||
const publicKey = decrypted.subarray(pubOffset, pubOffset + PUB_LENGTH);
|
||||
|
||||
return {
|
||||
publicKey,
|
||||
secretKey
|
||||
};
|
||||
}
|
||||
|
||||
export function decodePair (passphrase?: string, encrypted?: Uint8Array | null, encType: KeyringPair$JsonEncodingTypes[] = ENCODING): DecodeResult {
|
||||
assert(encrypted, 'No encrypted data available to decode');
|
||||
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encypted data');
|
||||
|
||||
let encoded: Uint8Array | null = encrypted;
|
||||
|
||||
if (passphrase) {
|
||||
let password: Uint8Array;
|
||||
|
||||
if (encType.includes('scrypt')) {
|
||||
const { params, salt } = scryptFromU8a(encrypted);
|
||||
|
||||
password = scryptEncode(passphrase, salt, params).password;
|
||||
encrypted = encrypted.subarray(SCRYPT_LENGTH);
|
||||
} else {
|
||||
password = stringToU8a(passphrase);
|
||||
}
|
||||
|
||||
encoded = naclDecrypt(
|
||||
encrypted.subarray(NONCE_LENGTH),
|
||||
encrypted.subarray(0, NONCE_LENGTH),
|
||||
u8aFixLength(password, 256, true)
|
||||
);
|
||||
}
|
||||
|
||||
assert(encoded, 'Unable to decode using the supplied passphrase');
|
||||
|
||||
return decodePkcs8(encoded);
|
||||
}
|
||||
|
||||
@@ -1,26 +1,9 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeyringPair$JsonEncodingTypes } from '../types';
|
||||
|
||||
const ENCODING: KeyringPair$JsonEncodingTypes[] = ['scrypt', 'xsalsa20-poly1305'];
|
||||
const NONCE_LENGTH = 24;
|
||||
const PKCS8_DIVIDER = new Uint8Array([161, 35, 3, 33, 0]);
|
||||
const PKCS8_HEADER = new Uint8Array([48, 83, 2, 1, 1, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32]);
|
||||
const PUB_LENGTH = 32;
|
||||
const SALT_LENGTH = 32;
|
||||
const SEC_LENGTH = 64;
|
||||
const SEED_LENGTH = 32;
|
||||
const SCRYPT_LENGTH = SALT_LENGTH + (3 * 4);
|
||||
|
||||
export {
|
||||
ENCODING,
|
||||
NONCE_LENGTH,
|
||||
PKCS8_DIVIDER,
|
||||
PKCS8_HEADER,
|
||||
PUB_LENGTH,
|
||||
SALT_LENGTH,
|
||||
SEC_LENGTH,
|
||||
SEED_LENGTH,
|
||||
SCRYPT_LENGTH
|
||||
};
|
||||
export const PKCS8_DIVIDER = new Uint8Array([161, 35, 3, 33, 0]);
|
||||
export const PKCS8_HEADER = new Uint8Array([48, 83, 2, 1, 1, 48, 5, 6, 3, 43, 101, 112, 4, 34, 4, 32]);
|
||||
export const PUB_LENGTH = 32;
|
||||
export const SALT_LENGTH = 32;
|
||||
export const SEC_LENGTH = 64;
|
||||
export const SEED_LENGTH = 32;
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { NONCE_LENGTH, SCRYPT_LENGTH } from '@polkadot/util-crypto/json/constants';
|
||||
|
||||
import { createTestPairs } from '../testingPairs';
|
||||
import { NONCE_LENGTH, PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SCRYPT_LENGTH, SEC_LENGTH } from './defaults';
|
||||
import { PKCS8_DIVIDER, PKCS8_HEADER, PUB_LENGTH, SEC_LENGTH } from './defaults';
|
||||
|
||||
const PKCS8_LENGTH = PKCS8_DIVIDER.length + PKCS8_HEADER.length + PUB_LENGTH + SEC_LENGTH;
|
||||
const ENCODED_LENGTH = 16 + PKCS8_LENGTH + NONCE_LENGTH + SCRYPT_LENGTH;
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding } from '@polkadot/util-crypto/json/types';
|
||||
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta, SignOptions } from '../types';
|
||||
import type { KeyringPair, KeyringPair$Json, KeyringPair$Meta, SignOptions } from '../types';
|
||||
import type { PairInfo } from './types';
|
||||
|
||||
import { assert, u8aConcat, u8aEq, u8aToHex, u8aToU8a } from '@polkadot/util';
|
||||
@@ -87,7 +88,7 @@ function vrfHash (proof: Uint8Array, context?: string | Uint8Array, extra?: stri
|
||||
* an `encoded` property that is assigned with the encoded public key in hex format, and an `encoding`
|
||||
* property that indicates whether the public key value of the `encoded` property is encoded or not.
|
||||
*/
|
||||
export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: KeyringPair$JsonEncodingTypes[]): KeyringPair {
|
||||
export function createPair ({ toSS58, type }: Setup, { publicKey, secretKey }: PairInfo, meta: KeyringPair$Meta = {}, encoded: Uint8Array | null = null, encTypes?: EncryptedJsonEncoding[]): KeyringPair {
|
||||
const decodePkcs8 = (passphrase?: string, userEncoded?: Uint8Array | null): void => {
|
||||
const decoded = decodePair(passphrase, userEncoded || encoded, encTypes);
|
||||
|
||||
|
||||
@@ -2,34 +2,19 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { KeyringPair$Json, KeyringPair$JsonEncodingTypes, KeyringPair$Meta } from '../types';
|
||||
import type { KeyringPair$Json, KeyringPair$Meta } from '../types';
|
||||
|
||||
import { base64Encode } from '@polkadot/util-crypto';
|
||||
|
||||
import { ENCODING } from './defaults';
|
||||
import { jsonEncryptFormat } from '@polkadot/util-crypto';
|
||||
|
||||
interface PairStateJson {
|
||||
address: string;
|
||||
meta: KeyringPair$Meta;
|
||||
}
|
||||
|
||||
// version 2 - nonce, encoded (previous)
|
||||
// version 3 - salt, nonce, encoded
|
||||
const VERSION = '3';
|
||||
|
||||
const ENC_NONE: KeyringPair$JsonEncodingTypes[] = ['none'];
|
||||
|
||||
export function pairToJson (type: KeypairType, { address, meta }: PairStateJson, encoded: Uint8Array, isEncrypted: boolean): KeyringPair$Json {
|
||||
return {
|
||||
...jsonEncryptFormat(encoded, ['pkcs8', type], isEncrypted),
|
||||
address,
|
||||
encoded: base64Encode(encoded),
|
||||
encoding: {
|
||||
content: ['pkcs8', type],
|
||||
type: isEncrypted
|
||||
? ENCODING
|
||||
: ENC_NONE,
|
||||
version: VERSION
|
||||
},
|
||||
meta
|
||||
};
|
||||
}
|
||||
|
||||
@@ -73,6 +73,49 @@ export const PAIRSSR25519: PairDef[] = [
|
||||
];
|
||||
|
||||
export const PAIRSETHEREUM: PairDef[] = [
|
||||
{
|
||||
name: 'Alith',
|
||||
publicKey: hexToU8a('0x02509540919faacf9ab52146c9aa40db68172d83777250b28e4679176e49ccdd9f'),
|
||||
secretKey: hexToU8a('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Baltathar',
|
||||
publicKey: hexToU8a('0x033bc19e36ff1673910575b6727a974a9abd80c9a875d41ab3e2648dbfb9e4b518'),
|
||||
secretKey: hexToU8a('0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Charleth',
|
||||
publicKey: hexToU8a('0x0234637bdc0e89b5d46543bcbf8edff329d2702bc995e27e9af4b1ba009a3c2a5e'),
|
||||
secretKey: hexToU8a('0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Dorothy',
|
||||
publicKey: hexToU8a('0x02a00d60b2b408c2a14c5d70cdd2c205db8985ef737a7e55ad20ea32cc9e7c417c'),
|
||||
secretKey: hexToU8a('0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Ethan',
|
||||
publicKey: hexToU8a('0x025cdc005b752651cd3f728fb9192182acb3a9c89e19072cbd5b03f3ee1f1b3ffa'),
|
||||
secretKey: hexToU8a('0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
{
|
||||
name: 'Faith',
|
||||
publicKey: hexToU8a('0x037964b6c9d546da4646ada28a99e34acaa1d14e7aba861a9055f9bd200c8abf74'),
|
||||
secretKey: hexToU8a('0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df'),
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
},
|
||||
// Gerald will be removed when moonbeam is done changing dev addresses (should def be done by end of march 21)
|
||||
{
|
||||
name: 'Gerald',
|
||||
publicKey: new Uint8Array([3, 98, 79, 114, 14, 174, 103, 106,
|
||||
@@ -81,7 +124,7 @@ export const PAIRSETHEREUM: PairDef[] = [
|
||||
198, 190, 114, 152, 60, 235, 98, 15,
|
||||
191]),
|
||||
secretKey: hexToU8a('0x99b3c12287537e38c90a9219d4cb074a89a16e9cdb20bf85728ebd97c343e342'),
|
||||
seed: 'Gerald',
|
||||
seed: "m/44'/40'/0'/0",
|
||||
type: 'ethereum'
|
||||
}
|
||||
];
|
||||
@@ -101,7 +144,6 @@ export function createTestKeyring (options: KeyringOptions = {}, isDerived = tru
|
||||
isTesting: true,
|
||||
name: name || seed.replace('//', '_').toLowerCase()
|
||||
};
|
||||
|
||||
const pair = !isDerived && !name
|
||||
? keyring.addFromUri(seed, meta, options.type)
|
||||
: keyring.addPair(
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
// Copyright 2017-2021 @polkadot/keyring authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { u8aToHex } from '@polkadot/util';
|
||||
import { cryptoWaitReady } from '@polkadot/util-crypto';
|
||||
|
||||
import { createTestPairs } from './testingPairs';
|
||||
import Keyring from '.';
|
||||
|
||||
describe('testingPairs', (): void => {
|
||||
beforeEach(async (): Promise<void> => {
|
||||
@@ -27,4 +29,41 @@ describe('testingPairs', (): void => {
|
||||
createTestPairs({ type: 'ed25519' }).alice.address
|
||||
).toEqual('5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY');
|
||||
});
|
||||
|
||||
it('has the correct address for Alith (Eth)', (): void => {
|
||||
expect(
|
||||
createTestPairs({ type: 'ethereum' }).Alith.address
|
||||
).toEqual('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac');
|
||||
});
|
||||
|
||||
it('has the correct address for Alith (Eth), same as obtained by createFromUri', (): void => {
|
||||
const keyring = new Keyring({ type: 'ethereum' });
|
||||
const pair = keyring.createFromUri('0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133');
|
||||
|
||||
expect(
|
||||
pair && pair.address
|
||||
).toEqual('0xf24FF3a9CF04c71Dbc94D0b566f7A27B94566cac');
|
||||
});
|
||||
|
||||
it('checks eth test addresses', (): void => {
|
||||
const ring = createTestPairs({ type: 'ethereum' });
|
||||
const keyring = new Keyring({ type: 'ethereum' });
|
||||
// priv keys generated by ganache-cli --mnemonic "bottom drive obey lake curtain smoke basket hold race lonely fit walk"
|
||||
const privKeys: string[] = ['0x5fb92d6e98884f76de468fa3f6278f8807c48bebc13595d45af5bdc4da702133',
|
||||
'0x8075991ce870b93a8870eca0c0f91913d12f47948ca0fd25b49c6fa7cdbeee8b',
|
||||
'0x0b6e18cafb6ed99687ec547bd28139cafdd2bffe70e6b688025de6b445aa5c5b',
|
||||
'0x39539ab1876910bbf3a223d84a29e28f1cb4e2e456503e7e91ed39b2e7223d68',
|
||||
'0x7dce9bc8babb68fec1409be38c8e1a52650206a7ed90ff956ae8a6d15eeaaef4',
|
||||
'0xb9d2ea9a615f3165812e8d44de0d24da9bbd164b65c4f0573e1ce2c8dbd9c8df',
|
||||
'0x96b8a38e12e1a31dee1eab2fffdf9d9990045f5b37e44d8cc27766ef294acf18',
|
||||
'0x0d6dcaaef49272a5411896be8ad16c01c35d6f8c18873387b71fbc734759b0ab',
|
||||
'0x4c42532034540267bf568198ccec4cb822a025da542861fcb146a5fab6433ff8',
|
||||
'0x94c49300a58d576011096bcb006aa06f5a91b34b4383891e8029c21dc39fbb8b'];
|
||||
|
||||
delete ring.nobody;
|
||||
|
||||
Object.keys(ring).forEach((testKeyring, i) => {
|
||||
if (i < 6) { expect(u8aToHex(ring[testKeyring].publicKey)).toEqual(u8aToHex(keyring.createFromUri(privKeys[i]).publicKey)); }
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { Prefix } from '@polkadot/util-crypto/address/types';
|
||||
import type { KeypairType } from '@polkadot/util-crypto/types';
|
||||
import type { EncryptedJson } from '@polkadot/util-crypto/json/types';
|
||||
import type { Keypair, KeypairType } from '@polkadot/util-crypto/types';
|
||||
|
||||
export interface KeyringOptions {
|
||||
ss58Format?: Prefix;
|
||||
@@ -11,20 +12,8 @@ export interface KeyringOptions {
|
||||
|
||||
export type KeyringPair$Meta = Record<string, unknown>;
|
||||
|
||||
export type KeyringPair$JsonVersion = '0' | '1' | '2' | '3';
|
||||
|
||||
export type KeyringPair$JsonEncodingTypes = 'none' | 'scrypt' | 'xsalsa20-poly1305';
|
||||
|
||||
export interface KeyringPair$JsonEncoding {
|
||||
content: ['pkcs8', KeypairType];
|
||||
type: KeyringPair$JsonEncodingTypes | KeyringPair$JsonEncodingTypes[];
|
||||
version: KeyringPair$JsonVersion;
|
||||
}
|
||||
|
||||
export interface KeyringPair$Json {
|
||||
export interface KeyringPair$Json extends EncryptedJson {
|
||||
address: string;
|
||||
encoded: string;
|
||||
encoding: KeyringPair$JsonEncoding;
|
||||
meta: KeyringPair$Meta;
|
||||
}
|
||||
|
||||
@@ -73,9 +62,11 @@ export interface KeyringInstance {
|
||||
addFromAddress (address: string | Uint8Array, meta?: KeyringPair$Meta, encoded?: Uint8Array | null, type?: KeypairType, ignoreChecksum?: boolean): KeyringPair;
|
||||
addFromJson (pair: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair;
|
||||
addFromMnemonic (mnemonic: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
|
||||
addFromPair (pair: Keypair, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair
|
||||
addFromSeed (seed: Uint8Array, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
|
||||
addFromUri (suri: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
|
||||
createFromJson (json: KeyringPair$Json, ignoreChecksum?: boolean): KeyringPair;
|
||||
createFromPair (pair: Keypair, meta: KeyringPair$Meta, type: KeypairType): KeyringPair
|
||||
createFromUri (suri: string, meta?: KeyringPair$Meta, type?: KeypairType): KeyringPair;
|
||||
getPair (address: string | Uint8Array): KeyringPair;
|
||||
getPairs (): KeyringPair[];
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/networks",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A list of all available Substrate networks and their applicable prefixes",
|
||||
"main": "index.js",
|
||||
"sideEffects": false,
|
||||
@@ -12,10 +13,10 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/networks#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7"
|
||||
"@babel/runtime": "^7.13.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@polkadot/util": "5.8.1",
|
||||
"@polkadot/x-fetch": "5.8.1"
|
||||
"@polkadot/util": "6.0.1",
|
||||
"@polkadot/x-fetch": "6.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,8 @@
|
||||
|
||||
import type { Network, NetworkFromSubstrate, NetworkFromSubstrateNamed } from './types';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
// These are known prefixes that are not sorted
|
||||
const UNSORTED = [0, 2, 42];
|
||||
|
||||
@@ -27,7 +29,7 @@ const createReserved = (prefix: number, displayName: string, network: string | n
|
||||
website: null
|
||||
});
|
||||
|
||||
const all: NetworkFromSubstrate[] = [
|
||||
export const all: NetworkFromSubstrate[] = [
|
||||
{
|
||||
decimals: [10],
|
||||
displayName: 'Polkadot Relay Chain',
|
||||
@@ -490,7 +492,7 @@ const all: NetworkFromSubstrate[] = [
|
||||
// - we only include those where we have a standardAccount
|
||||
// - when no icon has been specified, default to substrate
|
||||
// - sort by name, however we keep 0, 2, 42 first in the list
|
||||
const available: Network[] = all
|
||||
export const available: Network[] = all
|
||||
.filter((n): n is NetworkFromSubstrateNamed => !n.isIgnored && !!n.network)
|
||||
.map((n) => ({ ...n, genesisHash: n.genesisHash || [], icon: n.icon || 'substrate' }))
|
||||
.sort((a, b) =>
|
||||
@@ -504,8 +506,4 @@ const available: Network[] = all
|
||||
);
|
||||
|
||||
// A filtered list of those chains we have details about (genesisHashes)
|
||||
const filtered: Network[] = available.filter((n) => n.genesisHash.length || n.prefix === 42);
|
||||
|
||||
export { all, available };
|
||||
|
||||
export default filtered;
|
||||
export default available.filter((n) => n.genesisHash.length || n.prefix === 42);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/networks authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/networks', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/networks', version: '6.0.1' };
|
||||
|
||||
@@ -1,11 +1,12 @@
|
||||
{
|
||||
"name": "@polkadot/util-crypto",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A collection of useful crypto utilities for @polkadot",
|
||||
"main": "index.js",
|
||||
"sideEffects": [
|
||||
"./detectPackage.js",
|
||||
"./detectPackage.mjs"
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
@@ -15,11 +16,11 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util-crypto#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/networks": "5.8.1",
|
||||
"@polkadot/util": "5.8.1",
|
||||
"@polkadot/wasm-crypto": "^3.2.4",
|
||||
"@polkadot/x-randomvalues": "5.8.1",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/networks": "6.0.1",
|
||||
"@polkadot/util": "6.0.1",
|
||||
"@polkadot/wasm-crypto": "^4.0.1",
|
||||
"@polkadot/x-randomvalues": "6.0.1",
|
||||
"base-x": "^3.0.8",
|
||||
"base64-js": "^1.5.1",
|
||||
"blakejs": "^1.1.0",
|
||||
@@ -40,6 +41,6 @@
|
||||
"@types/xxhashjs": "^0.2.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@polkadot/util": "5.8.1"
|
||||
"@polkadot/util": "6.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,5 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// https://github.com/multiformats/js-multibase/blob/master/src/constants.js
|
||||
const BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
|
||||
const BITS_PER_CHAR = 5;
|
||||
|
||||
export {
|
||||
BASE32_ALPHABET,
|
||||
BITS_PER_CHAR
|
||||
};
|
||||
export const BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
|
||||
export const BITS_PER_CHAR = 5;
|
||||
|
||||
@@ -4,11 +4,6 @@
|
||||
import baseX from 'base-x';
|
||||
|
||||
// https://github.com/cryptocoinjs/base-x#alphabets
|
||||
const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
||||
export const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
||||
|
||||
const bs58 = baseX(BASE58_ALPHABET);
|
||||
|
||||
export {
|
||||
BASE58_ALPHABET,
|
||||
bs58
|
||||
};
|
||||
export const bs58 = baseX(BASE58_ALPHABET);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { u8aToBuffer, u8aToU8a } from '@polkadot/util';
|
||||
import { u8aToU8a } from '@polkadot/util';
|
||||
|
||||
import { bs58 } from './bs58';
|
||||
|
||||
@@ -12,9 +12,7 @@ import { bs58 } from './bs58';
|
||||
* From the provided input, create the base58 and return the result as a string.
|
||||
*/
|
||||
export function base58Encode (value: Uint8Array | string | Buffer | number[], ipfsCompat?: boolean): string {
|
||||
const out = bs58.encode(
|
||||
u8aToBuffer(u8aToU8a(value))
|
||||
);
|
||||
const out = bs58.encode(u8aToU8a(value));
|
||||
|
||||
return ipfsCompat
|
||||
? `z${out}`
|
||||
|
||||
@@ -1,25 +1,10 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
|
||||
//
|
||||
// new URL(import.meta.url).pathname)
|
||||
//
|
||||
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
|
||||
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
|
||||
// there is a complete dead end with usage thereof
|
||||
//
|
||||
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
|
||||
//
|
||||
// cjs: util.detectPackage(packageInfo, () => __dirname);
|
||||
// esm: detectPackage(packageInfo, () => import.meta.url);
|
||||
//
|
||||
// With the above we additionally need a .d.ts to just export the packageInfo
|
||||
|
||||
import { detectPackage } from '@polkadot/util';
|
||||
import { packageInfo as netInfo } from '@polkadot/networks/packageInfo';
|
||||
import { detectPackage, packageInfo as utilInfo } from '@polkadot/util';
|
||||
import { packageInfo as randomInfo } from '@polkadot/x-randomvalues';
|
||||
|
||||
import { packageInfo } from './packageInfo';
|
||||
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname);
|
||||
|
||||
export { packageInfo };
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname, [netInfo, utilInfo, randomInfo]);
|
||||
|
||||
@@ -9,64 +9,59 @@ import { hmacSha512 } from '../../hmac';
|
||||
import { secp256k1KeypairFromSeed, secp256k1PrivateKeyTweakAdd } from '../../secp256k1';
|
||||
import { HARDENED, hdValidatePath } from '../validatePath';
|
||||
|
||||
interface CodedKeypair extends Keypair {
|
||||
chainCode: Uint8Array;
|
||||
}
|
||||
|
||||
const MASTER_SECRET = stringToU8a('Bitcoin seed');
|
||||
|
||||
export class HDKey {
|
||||
readonly chainCode: Uint8Array;
|
||||
readonly publicKey: Uint8Array;
|
||||
readonly secretKey: Uint8Array;
|
||||
function createCoded (secretKey: Uint8Array, chainCode: Uint8Array): CodedKeypair {
|
||||
return {
|
||||
chainCode,
|
||||
publicKey: secp256k1KeypairFromSeed(secretKey).publicKey,
|
||||
secretKey
|
||||
};
|
||||
}
|
||||
|
||||
constructor (secretKey: Uint8Array, chainCode: Uint8Array) {
|
||||
this.secretKey = secretKey;
|
||||
this.publicKey = secp256k1KeypairFromSeed(secretKey).publicKey;
|
||||
this.chainCode = chainCode;
|
||||
}
|
||||
function deriveChild (hd: CodedKeypair, index: number): CodedKeypair {
|
||||
const indexBuffer = bnToU8a(index, { bitLength: 32, isLe: false });
|
||||
const data = index >= HARDENED
|
||||
? u8aConcat(new Uint8Array(1), hd.secretKey, indexBuffer)
|
||||
: u8aConcat(hd.publicKey, indexBuffer);
|
||||
|
||||
public derive (path: string): HDKey {
|
||||
if (path === 'm' || path === 'M' || path === "m'" || path === "M'") {
|
||||
return this;
|
||||
}
|
||||
try {
|
||||
const I = hmacSha512(hd.chainCode, data);
|
||||
|
||||
assert(hdValidatePath(path), 'Invalid derivation path');
|
||||
|
||||
return path
|
||||
.split('/')
|
||||
.slice(1)
|
||||
.reduce((hd: HDKey, c): HDKey => hd.deriveChild(
|
||||
parseInt(c, 10) + (
|
||||
(c.length > 1) && c.endsWith("'")
|
||||
? HARDENED
|
||||
: 0
|
||||
)
|
||||
), this);
|
||||
}
|
||||
|
||||
private deriveChild (index: number): HDKey {
|
||||
const indexBuffer = bnToU8a(index, { bitLength: 32, isLe: false });
|
||||
const data = index >= HARDENED
|
||||
? u8aConcat(new Uint8Array(1), this.secretKey, indexBuffer)
|
||||
: u8aConcat(this.publicKey, indexBuffer);
|
||||
|
||||
try {
|
||||
const I = hmacSha512(this.chainCode, data);
|
||||
|
||||
return new HDKey(
|
||||
secp256k1PrivateKeyTweakAdd(this.secretKey, I.slice(0, 32)),
|
||||
I.slice(32)
|
||||
);
|
||||
} catch (err) {
|
||||
// In case parse256(IL) >= n or ki == 0, proceed with the next value for i
|
||||
return this.deriveChild(index + 1);
|
||||
}
|
||||
return createCoded(
|
||||
secp256k1PrivateKeyTweakAdd(hd.secretKey, I.slice(0, 32)),
|
||||
I.slice(32)
|
||||
);
|
||||
} catch (err) {
|
||||
// In case parse256(IL) >= n or ki == 0, proceed with the next value for i
|
||||
return deriveChild(hd, index + 1);
|
||||
}
|
||||
}
|
||||
|
||||
export function hdEthereum (seed: Uint8Array, path = ''): Keypair {
|
||||
const I = hmacSha512(MASTER_SECRET, seed);
|
||||
const hdkey = new HDKey(I.slice(0, 32), I.slice(32));
|
||||
const { publicKey, secretKey } = path
|
||||
? hdkey.derive(path)
|
||||
: hdkey;
|
||||
const hd = createCoded(I.slice(0, 32), I.slice(32));
|
||||
|
||||
return { publicKey, secretKey };
|
||||
if (!path || path === 'm' || path === 'M' || path === "m'" || path === "M'") {
|
||||
return hd;
|
||||
}
|
||||
|
||||
assert(hdValidatePath(path), 'Invalid derivation path');
|
||||
|
||||
return path
|
||||
.split('/')
|
||||
.slice(1)
|
||||
.reduce((hd: CodedKeypair, c): CodedKeypair =>
|
||||
deriveChild(
|
||||
hd, parseInt(c, 10) + (
|
||||
(c.length > 1) && c.endsWith("'")
|
||||
? HARDENED
|
||||
: 0
|
||||
)
|
||||
), hd
|
||||
);
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ const TESTS = {
|
||||
]
|
||||
},
|
||||
Polkadot: {
|
||||
slip44: 0x80000162,
|
||||
slip44: 0x0162,
|
||||
tests: [
|
||||
{
|
||||
ed25519: '0xe8c68348586d53e4e8d1a864b0e4e17c75e4eb06e0c63c1432bef2ba29e69d41',
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { hdValidatePath } from '.';
|
||||
|
||||
const VECTORS: [string, boolean][] = [
|
||||
["m/44'/60'/0'/0/0", true],
|
||||
['m/0', true],
|
||||
["m/123'", true],
|
||||
["n/44'/60'/0'/0/0", false],
|
||||
['m', false],
|
||||
['m/', false],
|
||||
["m/xyz'", false],
|
||||
['m/123x', false],
|
||||
['m/123"', false],
|
||||
["m/123''", false],
|
||||
["m/123'0'", false],
|
||||
[`m/${0x80000000}`, false],
|
||||
['m/-1', false]
|
||||
];
|
||||
|
||||
describe('hdValidatePath', (): void => {
|
||||
VECTORS.forEach(([path, result]): void => {
|
||||
it(`validates ${path} as ${result.toString()}`, (): void => {
|
||||
expect(hdValidatePath(path)).toEqual(result);
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -8,9 +8,11 @@ export function hdValidatePath (path: string): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
return !path
|
||||
.split('/')
|
||||
.slice(1)
|
||||
.map((n) => parseInt(n.replace("'", ''), 10))
|
||||
.some((n) => isNaN(n) && n < HARDENED);
|
||||
const parts = path.split('/').slice(1);
|
||||
|
||||
return parts.every((n) => /^\d+'?$/.test(n)) && (
|
||||
!parts
|
||||
.map((n) => parseInt(n.replace("'", ''), 10))
|
||||
.some((n) => isNaN(n) || (n >= HARDENED) || (n < 0))
|
||||
);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
import './cryptoInit';
|
||||
import './detectPackage';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
// all internal exports
|
||||
export * from './address';
|
||||
export * from './base32';
|
||||
@@ -14,6 +16,7 @@ export * from './crypto';
|
||||
export * from './ethereum';
|
||||
export * from './hd';
|
||||
export * from './hmac';
|
||||
export * from './json';
|
||||
export * from './keccak';
|
||||
export * from './key';
|
||||
export * from './mnemonic';
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding, EncryptedJsonVersion } from './types';
|
||||
|
||||
export const ENCODING: EncryptedJsonEncoding[] = ['scrypt', 'xsalsa20-poly1305'];
|
||||
export const ENCODING_NONE: EncryptedJsonEncoding[] = ['none'];
|
||||
export const ENCODING_VERSION: EncryptedJsonVersion = '3';
|
||||
|
||||
export const NONCE_LENGTH = 24;
|
||||
export const SCRYPT_LENGTH = 32 + (3 * 4);
|
||||
@@ -0,0 +1,23 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJson } from './types';
|
||||
|
||||
import { assert, hexToU8a, isHex } from '@polkadot/util';
|
||||
|
||||
import { base64Decode } from '../base64';
|
||||
import { jsonDecryptData } from './decryptData';
|
||||
|
||||
export function jsonDecrypt ({ encoded, encoding }: EncryptedJson, passphrase?: string | null): Uint8Array {
|
||||
assert(encoded, 'No encrypted data available to decode');
|
||||
|
||||
return jsonDecryptData(
|
||||
isHex(encoded)
|
||||
? hexToU8a(encoded)
|
||||
: base64Decode(encoded),
|
||||
passphrase,
|
||||
Array.isArray(encoding.type)
|
||||
? encoding.type
|
||||
: [encoding.type]
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJsonEncoding } from './types';
|
||||
|
||||
import { assert, stringToU8a, u8aFixLength } from '@polkadot/util';
|
||||
|
||||
import { naclDecrypt } from '../nacl';
|
||||
import { scryptEncode, scryptFromU8a } from '../scrypt';
|
||||
import { ENCODING, NONCE_LENGTH, SCRYPT_LENGTH } from './constants';
|
||||
|
||||
export function jsonDecryptData (encrypted?: Uint8Array | null, passphrase?: string | null, encType: EncryptedJsonEncoding[] = ENCODING): Uint8Array {
|
||||
assert(encrypted, 'No encrypted data available to decode');
|
||||
assert(passphrase || !encType.includes('xsalsa20-poly1305'), 'Password required to decode encypted data');
|
||||
|
||||
let encoded: Uint8Array | null = encrypted;
|
||||
|
||||
if (passphrase) {
|
||||
let password: Uint8Array;
|
||||
|
||||
if (encType.includes('scrypt')) {
|
||||
const { params, salt } = scryptFromU8a(encrypted);
|
||||
|
||||
password = scryptEncode(passphrase, salt, params).password;
|
||||
encrypted = encrypted.subarray(SCRYPT_LENGTH);
|
||||
} else {
|
||||
password = stringToU8a(passphrase);
|
||||
}
|
||||
|
||||
encoded = naclDecrypt(
|
||||
encrypted.subarray(NONCE_LENGTH),
|
||||
encrypted.subarray(0, NONCE_LENGTH),
|
||||
u8aFixLength(password, 256, true)
|
||||
);
|
||||
}
|
||||
|
||||
assert(encoded, 'Unable to decode using the supplied passphrase');
|
||||
|
||||
return encoded;
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJson } from './types';
|
||||
|
||||
import { u8aConcat } from '@polkadot/util';
|
||||
|
||||
import { naclEncrypt } from '../nacl';
|
||||
import { scryptEncode, scryptToU8a } from '../scrypt';
|
||||
import { jsonEncryptFormat } from './encryptFormat';
|
||||
|
||||
export function jsonEncrypt (data: Uint8Array, contentType: string[], passphrase?: string | null): EncryptedJson {
|
||||
let isEncrypted = false;
|
||||
let encoded = data;
|
||||
|
||||
if (passphrase) {
|
||||
const { params, password, salt } = scryptEncode(passphrase);
|
||||
const { encrypted, nonce } = naclEncrypt(encoded, password.subarray(0, 32));
|
||||
|
||||
isEncrypted = true;
|
||||
encoded = u8aConcat(scryptToU8a(salt, params), nonce, encrypted);
|
||||
}
|
||||
|
||||
return jsonEncryptFormat(encoded, contentType, isEncrypted);
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import type { EncryptedJson } from './types';
|
||||
|
||||
import { base64Encode } from '../base64';
|
||||
import { ENCODING, ENCODING_NONE, ENCODING_VERSION } from './constants';
|
||||
|
||||
export function jsonEncryptFormat (encoded: Uint8Array, contentType: string[], isEncrypted: boolean): EncryptedJson {
|
||||
return {
|
||||
encoded: base64Encode(encoded),
|
||||
encoding: {
|
||||
content: contentType,
|
||||
type: isEncrypted
|
||||
? ENCODING
|
||||
: ENCODING_NONE,
|
||||
version: ENCODING_VERSION
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { jsonDecrypt } from './decrypt';
|
||||
export { jsonDecryptData } from './decryptData';
|
||||
export { jsonEncrypt } from './encrypt';
|
||||
export { jsonEncryptFormat } from './encryptFormat';
|
||||
@@ -0,0 +1,17 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export type EncryptedJsonVersion = '0' | '1' | '2' | '3';
|
||||
|
||||
export type EncryptedJsonEncoding = 'none' | 'scrypt' | 'xsalsa20-poly1305';
|
||||
|
||||
export interface EncryptedJsonDescriptor {
|
||||
content: string[];
|
||||
type: EncryptedJsonEncoding | EncryptedJsonEncoding[];
|
||||
version: EncryptedJsonVersion;
|
||||
}
|
||||
|
||||
export interface EncryptedJson {
|
||||
encoded: string;
|
||||
encoding: EncryptedJsonDescriptor;
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/util-crypto', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/util-crypto', version: '6.0.1' };
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
// Copyright 2017-2021 @polkadot/util-crypto authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
const DEFAULT_PARAMS = {
|
||||
export const DEFAULT_PARAMS = {
|
||||
N: 1 << 15,
|
||||
p: 1,
|
||||
r: 8
|
||||
};
|
||||
|
||||
export { DEFAULT_PARAMS };
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
{
|
||||
"name": "@polkadot/util",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A collection of useful utilities for @polkadot",
|
||||
"main": "index.js",
|
||||
"sideEffects": false,
|
||||
"sideEffects": [
|
||||
"./detectPackage.js",
|
||||
"./detectPackage.cjs"
|
||||
],
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
"contributors": [],
|
||||
@@ -12,9 +16,9 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/util#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-textdecoder": "5.8.1",
|
||||
"@polkadot/x-textencoder": "5.8.1",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-textdecoder": "6.0.1",
|
||||
"@polkadot/x-textencoder": "6.0.1",
|
||||
"@types/bn.js": "^4.11.6",
|
||||
"bn.js": "^4.11.9",
|
||||
"camelcase": "^5.3.1",
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { detectPackage } from '.';
|
||||
|
||||
describe('assertSingletonPackage', (): void => {
|
||||
const PKG = '@polkadot/util';
|
||||
const VER1 = '9.8.0-beta.45';
|
||||
const VER2 = '9.7.1';
|
||||
const VER3 = '9.6.1';
|
||||
const PATH = '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/util';
|
||||
const RES2 = `Multiple instances of @polkadot/util detected, ensure that there is only one package in your dependency tree.\n\t${VER1}\t${PATH}/01\n\t${VER2} \t${PATH}/02`;
|
||||
const RES3 = `${RES2}\n\t${VER3} \t${PATH}/03`;
|
||||
|
||||
it('should not log the first time', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER1 }, `${PATH}/01`);
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('should log the second time', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER2 }, `${PATH}/02`);
|
||||
expect(spy).toHaveBeenCalledWith(RES2);
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('should allow for function use', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER3 }, () => `${PATH}/03`);
|
||||
expect(spy).toHaveBeenCalledWith(RES3);
|
||||
spy.mockRestore();
|
||||
});
|
||||
});
|
||||
@@ -1,91 +1,25 @@
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
// For esm, this should be import.meta.url or to get the same behavior as __dirname, we can use
|
||||
//
|
||||
// new URL(import.meta.url).pathname)
|
||||
//
|
||||
// The issue is the WP4 has "some" issues with import.meta.url. So because of bundlers, we can't have
|
||||
// nice things... In this case it is even worse since import.meta.url won't even make it compile, so
|
||||
// there is a complete dead end with usage thereof
|
||||
//
|
||||
// When that is fixed, a solution is to have both .js & .mjs files, with the following content -
|
||||
//
|
||||
// cjs: util.detectPackage(packageInfo, () => __dirname);
|
||||
// esm: detectPackage(packageInfo, () => import.meta.url);
|
||||
//
|
||||
// With the above we additionally need a .d.ts to just export the packageInfo
|
||||
|
||||
import { isFunction } from './is/function';
|
||||
import { isString } from './is/string';
|
||||
import { assert } from './assert';
|
||||
import { packageInfo as decoderInfo } from '@polkadot/x-textdecoder';
|
||||
import { packageInfo as encoderInfo } from '@polkadot/x-textencoder';
|
||||
|
||||
// eslint-disable-next-line no-undef
|
||||
type This = typeof globalThis;
|
||||
import { packageInfo } from './packageInfo';
|
||||
import { detectPackage } from './versionDetect';
|
||||
|
||||
interface PackageJson {
|
||||
name: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
interface VersionPath {
|
||||
path?: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
interface PjsChecks extends This {
|
||||
__polkadotjs: Record<string, VersionPath[]>;
|
||||
}
|
||||
|
||||
type PjsWindow = (Window & This) & PjsChecks;
|
||||
type FnString = () => string | undefined;
|
||||
|
||||
/** @internal */
|
||||
function expandPath (path?: string): string {
|
||||
return (!path || path.length < 5) ? '<unknown>' : path;
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function getEntry (name: string): VersionPath[] {
|
||||
const _global = xglobal as PjsWindow;
|
||||
|
||||
if (!_global.__polkadotjs) {
|
||||
_global.__polkadotjs = {};
|
||||
}
|
||||
|
||||
if (!_global.__polkadotjs[name]) {
|
||||
_global.__polkadotjs[name] = [];
|
||||
}
|
||||
|
||||
return _global.__polkadotjs[name];
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function flattenVersions (entry: VersionPath[]): string {
|
||||
const all = entry.map((version: VersionPath | string): VersionPath =>
|
||||
isString(version)
|
||||
? { version }
|
||||
: version
|
||||
);
|
||||
const verLength = all.reduce((max, { version }) => Math.max(max, version.length), 0);
|
||||
|
||||
return all
|
||||
.map(({ path, version }) => `\t${version.padEnd(verLength)}\t${expandPath(path)}`)
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function getPath (pathOrFn?: FnString | string | false): false | string | undefined {
|
||||
if (isFunction(pathOrFn)) {
|
||||
try {
|
||||
return pathOrFn();
|
||||
} catch (error) {
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
|
||||
return pathOrFn;
|
||||
}
|
||||
|
||||
/**
|
||||
* @name detectPackage
|
||||
* @summary Checks that a specific package is only imported once
|
||||
*/
|
||||
export function detectPackage ({ name, version }: PackageJson, pathOrFn?: FnString | string | false): void {
|
||||
assert(name.startsWith('@polkadot'), `Invalid package descriptor ${name}`);
|
||||
|
||||
const entry = getEntry(name);
|
||||
|
||||
entry.push({ path: getPath(pathOrFn) || '', version });
|
||||
|
||||
if (entry.length !== 1) {
|
||||
console.warn(`Multiple instances of ${name} detected, ensure that there is only one package in your dependency tree.\n${flattenVersions(entry)}`);
|
||||
}
|
||||
}
|
||||
detectPackage(packageInfo, typeof __dirname !== 'undefined' && __dirname, [decoderInfo, encoderInfo]);
|
||||
|
||||
@@ -1,24 +1,26 @@
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import './detectPackage';
|
||||
|
||||
/**
|
||||
* @summary Utility methods for this package are split into groups
|
||||
*/
|
||||
|
||||
export { assert, assertReturn } from './assert';
|
||||
export { detectPackage } from './detectPackage';
|
||||
export { extractTime } from './extractTime';
|
||||
export { logger } from './logger';
|
||||
export { memoize } from './memoize';
|
||||
export { promisify } from './promisify';
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export * from './array';
|
||||
export * from './assert';
|
||||
export * from './bn';
|
||||
export * from './buffer';
|
||||
export * from './compact';
|
||||
export * from './extractTime';
|
||||
export * from './format';
|
||||
export * from './hex';
|
||||
export * from './is';
|
||||
export * from './logger';
|
||||
export * from './memoize';
|
||||
export * from './number';
|
||||
export * from './promisify';
|
||||
export * from './string';
|
||||
export * from './u8a';
|
||||
export * from './versionDetect';
|
||||
|
||||
@@ -5,8 +5,7 @@ import type { Logger } from './types';
|
||||
|
||||
import BN from 'bn.js';
|
||||
|
||||
import { format } from './logger';
|
||||
import { logger } from '.';
|
||||
import { logger, loggerFormat } from '.';
|
||||
|
||||
describe('logger', (): void => {
|
||||
let dateMatch: unknown;
|
||||
@@ -44,13 +43,13 @@ describe('logger', (): void => {
|
||||
jest.restoreAllMocks();
|
||||
});
|
||||
|
||||
describe('format', (): void => {
|
||||
describe('loggerFormat', (): void => {
|
||||
it('returns null as-is', (): void => {
|
||||
expect(format(null)).toEqual(null);
|
||||
expect(loggerFormat(null)).toEqual(null);
|
||||
});
|
||||
|
||||
it('returns undefined as-is', (): void => {
|
||||
expect(format(undefined)).toEqual(undefined);
|
||||
expect(loggerFormat(undefined)).toEqual(undefined);
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -25,7 +25,7 @@ const logTo = {
|
||||
function formatOther (value: unknown): unknown {
|
||||
if (value && isObject(value) && value.constructor === Object) {
|
||||
return Object.keys(value).reduce((result: Record<string, unknown>, key): Record<string, unknown> => {
|
||||
result[key] = format(value[key]);
|
||||
result[key] = loggerFormat(value[key]);
|
||||
|
||||
return result;
|
||||
}, {});
|
||||
@@ -34,9 +34,9 @@ function formatOther (value: unknown): unknown {
|
||||
return value;
|
||||
}
|
||||
|
||||
export function format (value: unknown): unknown {
|
||||
export function loggerFormat (value: unknown): unknown {
|
||||
if (Array.isArray(value)) {
|
||||
return value.map(format);
|
||||
return value.map(loggerFormat);
|
||||
} else if (isBn(value)) {
|
||||
return value.toString();
|
||||
} else if (isU8a(value) || isBuffer(value)) {
|
||||
@@ -57,7 +57,7 @@ function apply (log: LogType, type: string, values: Logger$Data, maxSize = -1):
|
||||
formatDate(new Date()),
|
||||
type,
|
||||
...values
|
||||
.map(format)
|
||||
.map(loggerFormat)
|
||||
.map((v) => {
|
||||
if (maxSize <= 0) {
|
||||
return v;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/util', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/util', version: '6.0.1' };
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { detectPackage } from './versionDetect';
|
||||
|
||||
describe('detectPackage', (): void => {
|
||||
const PKG = '@polkadot/util';
|
||||
const VER1 = '9.8.0-beta.45';
|
||||
const VER2 = '9.7.1';
|
||||
const VER3 = '9.6.1';
|
||||
const PATH = '/Users/jaco/Projects/polkadot-js/api/node_modules/@polkadot/util';
|
||||
|
||||
const MISMATCH = `@polkadot/util has multiple versions, ensure that there is only one installed.
|
||||
Either remove and explicitly install matching versions or deupe using your package manager.
|
||||
The following conflicting packages were found:
|
||||
\t${VER1}\t${PATH}/01
|
||||
\t${VER2} \t${PATH}/02`;
|
||||
|
||||
it('should not log the first time', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER1 }, `${PATH}/01`);
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('should log the second time', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER2 }, `${PATH}/02`);
|
||||
expect(spy).toHaveBeenCalledWith(MISMATCH);
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('should allow for function use', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: PKG, version: VER3 }, () => `${PATH}/03`);
|
||||
expect(spy).toHaveBeenCalledWith(`${MISMATCH}
|
||||
\t${VER3} \t${PATH}/03`);
|
||||
spy.mockRestore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('detectPackageDeps', (): void => {
|
||||
const DEP0 = { name: '@polkadot/keyring', version: '1.1.1' };
|
||||
const DEP1 = { name: '@polkadot/util', version: '1.1.2' };
|
||||
const DEP2 = { name: '@polkadot/util-crypto', version: '1.1.3' };
|
||||
const DEP3 = { name: '@polkadot/networks', version: '1.1.1' };
|
||||
|
||||
it('should not log when no mismatches are found', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: '@polkadot/one', version: '1.1.1' }, false, [DEP0, DEP3]);
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.mockRestore();
|
||||
});
|
||||
|
||||
it('should log when mismatches are found', (): void => {
|
||||
const spy = jest.spyOn(console, 'warn');
|
||||
|
||||
detectPackage({ name: '@polkadot/two', version: '1.1.1' }, false, [DEP0, DEP1, DEP2, DEP3]);
|
||||
expect(spy).toHaveBeenCalledWith(`@polkadot/two requires direct dependencies exactly matching version 1.1.1.
|
||||
Either remove and explicitly install matching versions or deupe using your package manager.
|
||||
The following conflicting packages were found:
|
||||
\t1.1.2\t@polkadot/util
|
||||
\t1.1.3\t@polkadot/util-crypto`);
|
||||
spy.mockRestore();
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,106 @@
|
||||
// Copyright 2017-2021 @polkadot/util authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
import { isFunction } from './is/function';
|
||||
import { isString } from './is/string';
|
||||
import { assert } from './assert';
|
||||
|
||||
type This = typeof globalThis;
|
||||
|
||||
interface PackageJson {
|
||||
name: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
interface VersionPath {
|
||||
path?: string;
|
||||
version: string;
|
||||
}
|
||||
|
||||
interface PjsChecks extends This {
|
||||
__polkadotjs: Record<string, VersionPath[]>;
|
||||
}
|
||||
|
||||
type PjsWindow = (Window & This) & PjsChecks;
|
||||
type FnString = () => string | undefined;
|
||||
|
||||
const DEDUPE = 'Either remove and explicitly install matching versions or deupe using your package manager.\nThe following conflicting packages were found:';
|
||||
|
||||
/** @internal */
|
||||
function getEntry (name: string): VersionPath[] {
|
||||
const _global = xglobal as PjsWindow;
|
||||
|
||||
if (!_global.__polkadotjs) {
|
||||
_global.__polkadotjs = {};
|
||||
}
|
||||
|
||||
if (!_global.__polkadotjs[name]) {
|
||||
_global.__polkadotjs[name] = [];
|
||||
}
|
||||
|
||||
return _global.__polkadotjs[name];
|
||||
}
|
||||
|
||||
function getVersionLength (all: { version: string }[]): number {
|
||||
return all.reduce((max, { version }) => Math.max(max, version.length), 0);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function flattenInfos (all: PackageJson[]): string {
|
||||
const verLength = getVersionLength(all);
|
||||
|
||||
return all
|
||||
.map(({ name, version }) => `\t${version.padEnd(verLength)}\t${name}`)
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function flattenVersions (entry: VersionPath[]): string {
|
||||
const all = entry.map((version: VersionPath | string): VersionPath =>
|
||||
isString(version)
|
||||
? { version }
|
||||
: version
|
||||
);
|
||||
const verLength = getVersionLength(all);
|
||||
|
||||
return all
|
||||
.map(({ path, version }) => `\t${version.padEnd(verLength)}\t${(!path || path.length < 5) ? '<unknown>' : path}`)
|
||||
.join('\n');
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
function getPath (pathOrFn?: FnString | string | false): string {
|
||||
if (isFunction(pathOrFn)) {
|
||||
try {
|
||||
return pathOrFn() || '';
|
||||
} catch (error) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
return pathOrFn || '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @name detectPackage
|
||||
* @summary Checks that a specific package is only imported once
|
||||
*/
|
||||
export function detectPackage ({ name, version }: PackageJson, pathOrFn?: FnString | string | false, deps: PackageJson[] = []): void {
|
||||
assert(name.startsWith('@polkadot'), `Invalid package descriptor ${name}`);
|
||||
|
||||
const entry = getEntry(name);
|
||||
|
||||
entry.push({ path: getPath(pathOrFn), version });
|
||||
|
||||
if (entry.length !== 1) {
|
||||
console.warn(`${name} has multiple versions, ensure that there is only one installed.\n${DEDUPE}\n${flattenVersions(entry)}`);
|
||||
} else {
|
||||
const mismatches = deps.filter((d) => d && d.version !== version);
|
||||
|
||||
if (mismatches.length) {
|
||||
console.warn(`${name} requires direct dependencies exactly matching version ${version}.\n${DEDUPE}\n${flattenInfos(mismatches)}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-fetch",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A cross-environment fetch replacement",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
@@ -14,8 +15,8 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-fetch#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-global": "5.8.1",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-global": "6.0.1",
|
||||
"@types/node-fetch": "^2.5.8",
|
||||
"node-fetch": "^2.6.1"
|
||||
}
|
||||
|
||||
@@ -3,4 +3,6 @@
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const fetch = xglobal.fetch;
|
||||
|
||||
@@ -5,6 +5,10 @@ import nodeFetch from 'node-fetch';
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export const fetch = typeof xglobal.fetch === 'undefined'
|
||||
? nodeFetch as unknown as typeof global.fetch
|
||||
: xglobal.fetch;
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const fetch = (
|
||||
typeof xglobal.fetch === 'undefined'
|
||||
? nodeFetch as unknown as typeof global.fetch
|
||||
: xglobal.fetch
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-fetch authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-fetch', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-fetch', version: '6.0.1' };
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-fetch authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { fetch } from './browser';
|
||||
export { fetch, packageInfo } from './browser';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-global",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A cross-environment global replacement",
|
||||
"main": "index.js",
|
||||
"sideEffects": false,
|
||||
@@ -12,7 +13,7 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-global#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@types/node-fetch": "^2.5.8",
|
||||
"node-fetch": "^2.6.1"
|
||||
}
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
// Copyright 2017-2021 @polkadot/x-fetch authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export const xglobal = typeof global !== 'undefined'
|
||||
? global
|
||||
: typeof self !== 'undefined'
|
||||
? self
|
||||
: typeof window !== 'undefined'
|
||||
? window
|
||||
: this as unknown as (Window & typeof globalThis);
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const xglobal = (
|
||||
typeof global !== 'undefined'
|
||||
? global
|
||||
: typeof self !== 'undefined'
|
||||
? self
|
||||
: typeof window !== 'undefined'
|
||||
? window
|
||||
: this as unknown as (Window & typeof globalThis)
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-global authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-global', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-global', version: '6.0.1' };
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-randomvalues",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A cross-environment window.crypto.getRandomValues replacement",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
@@ -14,8 +15,8 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-randomvalues#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-global": "5.8.1"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-global": "6.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react-native": "^0.63.50"
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
// Copyright 2017-2021 @polkadot/x-randomvalues authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export function getRandomValues <T extends Uint8Array> (arr: T): T {
|
||||
return crypto.getRandomValues(arr);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
import crypto from 'crypto';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export function getRandomValues <T extends Uint8Array> (arr: T): T {
|
||||
return crypto.randomBytes(arr.length).reduce((arr, value, index) => {
|
||||
arr[index] = value;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-randomvalues authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-randomvalues', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-randomvalues', version: '6.0.1' };
|
||||
|
||||
@@ -11,6 +11,8 @@ import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
import { insecureRandomValues } from './fallback';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
interface RNExt {
|
||||
RNGetRandomValues: {
|
||||
getRandomBase64: (length: number) => string;
|
||||
@@ -31,9 +33,11 @@ function getRandomValuesGlobal <T extends Uint8Array> (arr: T): T {
|
||||
return crypto.getRandomValues(arr);
|
||||
}
|
||||
|
||||
export const getRandomValues = typeof xglobal.crypto === 'object' && typeof xglobal.crypto.getRandomValues === 'function'
|
||||
? getRandomValuesGlobal
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any
|
||||
: (typeof (xglobal as any).nativeCallSyncHook === 'undefined' || !NativeModules.ExpoRandom)
|
||||
? insecureRandomValues
|
||||
: getRandomValuesNative;
|
||||
export const getRandomValues = (
|
||||
typeof xglobal.crypto === 'object' && typeof xglobal.crypto.getRandomValues === 'function'
|
||||
? getRandomValuesGlobal
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-explicit-any
|
||||
: (typeof (xglobal as any).nativeCallSyncHook === 'undefined' || !NativeModules.ExpoRandom)
|
||||
? insecureRandomValues
|
||||
: getRandomValuesNative
|
||||
);
|
||||
|
||||
@@ -1,9 +1,18 @@
|
||||
{
|
||||
"name": "@polkadot/x-rxjs",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A pass-through interface for RxJs (allowing node + mjs usage)",
|
||||
"main": "index.js",
|
||||
"sideEffects": false,
|
||||
"exports": {
|
||||
".": {
|
||||
"node": "./index.js"
|
||||
},
|
||||
"./operators": {
|
||||
"node": "./operators.js"
|
||||
}
|
||||
},
|
||||
"author": "Jaco Greeff <jacogr@gmail.com>",
|
||||
"maintainers": [],
|
||||
"contributors": [],
|
||||
@@ -12,7 +21,7 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-rxjs#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"rxjs": "^6.6.6"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// This is not great, but while having esm files, rxjs doesn't quite play nicely with
|
||||
// Node.js mjs files. (Hopefully this improves in 7.0, although no exports map as of yet)
|
||||
//
|
||||
// Generated via s/export \{ (.*) \} from .*/exports.$1 = rxjs.$1;/ on rxjs/_esm
|
||||
|
||||
const rxjs = require('rxjs');
|
||||
|
||||
exports.Observable = rxjs.Observable;
|
||||
exports.ConnectableObservable = rxjs.ConnectableObservable;
|
||||
exports.GroupedObservable = rxjs.GroupedObservable;
|
||||
exports.observable = rxjs.observable;
|
||||
exports.Subject = rxjs.Subject;
|
||||
exports.BehaviorSubject = rxjs.BehaviorSubject;
|
||||
exports.ReplaySubject = rxjs.ReplaySubject;
|
||||
exports.AsyncSubject = rxjs.AsyncSubject;
|
||||
exports.asap = rxjs.asap;
|
||||
exports.asapScheduler = rxjs.asapScheduler;
|
||||
exports.async = rxjs.async;
|
||||
exports.asyncScheduler = rxjs.asyncScheduler;
|
||||
exports.queue = rxjs.queue;
|
||||
exports.queueScheduler = rxjs.queueScheduler;
|
||||
exports.animationFrame = rxjs.animationFrame;
|
||||
exports.animationFrameScheduler = rxjs.animationFrameScheduler;
|
||||
exports.VirtualTimeScheduler = rxjs.VirtualTimeScheduler;
|
||||
exports.VirtualAction = rxjs.VirtualAction;
|
||||
exports.Scheduler = rxjs.Scheduler;
|
||||
exports.Subscription = rxjs.Subscription;
|
||||
exports.Subscriber = rxjs.Subscriber;
|
||||
exports.Notification = rxjs.Notification;
|
||||
exports.NotificationKind = rxjs.NotificationKind;
|
||||
exports.pipe = rxjs.pipe;
|
||||
exports.noop = rxjs.noop;
|
||||
exports.identity = rxjs.identity;
|
||||
exports.isObservable = rxjs.isObservable;
|
||||
exports.ArgumentOutOfRangeError = rxjs.ArgumentOutOfRangeError;
|
||||
exports.EmptyError = rxjs.EmptyError;
|
||||
exports.ObjectUnsubscribedError = rxjs.ObjectUnsubscribedError;
|
||||
exports.UnsubscriptionError = rxjs.UnsubscriptionError;
|
||||
exports.TimeoutError = rxjs.TimeoutError;
|
||||
exports.bindCallback = rxjs.bindCallback;
|
||||
exports.bindNodeCallback = rxjs.bindNodeCallback;
|
||||
exports.combineLatest = rxjs.combineLatest;
|
||||
exports.concat = rxjs.concat;
|
||||
exports.defer = rxjs.defer;
|
||||
exports.empty = rxjs.empty;
|
||||
exports.forkJoin = rxjs.forkJoin;
|
||||
exports.from = rxjs.from;
|
||||
exports.fromEvent = rxjs.fromEvent;
|
||||
exports.fromEventPattern = rxjs.fromEventPattern;
|
||||
exports.generate = rxjs.generate;
|
||||
exports.iif = rxjs.iif;
|
||||
exports.interval = rxjs.interval;
|
||||
exports.merge = rxjs.merge;
|
||||
exports.never = rxjs.never;
|
||||
exports.of = rxjs.of;
|
||||
exports.onErrorResumeNext = rxjs.onErrorResumeNext;
|
||||
exports.pairs = rxjs.pairs;
|
||||
exports.partition = rxjs.partition;
|
||||
exports.race = rxjs.race;
|
||||
exports.range = rxjs.range;
|
||||
exports.throwError = rxjs.throwError;
|
||||
exports.timer = rxjs.timer;
|
||||
exports.using = rxjs.using;
|
||||
exports.zip = rxjs.zip;
|
||||
exports.scheduled = rxjs.scheduled;
|
||||
exports.EMPTY = rxjs.EMPTY;
|
||||
exports.NEVER = rxjs.NEVER;
|
||||
exports.config = rxjs.config;
|
||||
@@ -1,74 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// This is not great, but while having esm files, rxjs doesn't quite play nicely with
|
||||
// Node.js mjs files. (Hopefully this improves in 7.0, although no exports map as of yet)
|
||||
//
|
||||
// Generated via s/export \{ (.*) \} from .*/exports.$1 = rxjs.$1;/ on rxjs/_esm
|
||||
|
||||
// This is or our builder
|
||||
// @polkadot/dev: exports-node
|
||||
|
||||
const rxjs = require('rxjs');
|
||||
|
||||
exports.Observable = rxjs.Observable;
|
||||
exports.ConnectableObservable = rxjs.ConnectableObservable;
|
||||
exports.GroupedObservable = rxjs.GroupedObservable;
|
||||
exports.observable = rxjs.observable;
|
||||
exports.Subject = rxjs.Subject;
|
||||
exports.BehaviorSubject = rxjs.BehaviorSubject;
|
||||
exports.ReplaySubject = rxjs.ReplaySubject;
|
||||
exports.AsyncSubject = rxjs.AsyncSubject;
|
||||
exports.asap = rxjs.asap;
|
||||
exports.asapScheduler = rxjs.asapScheduler;
|
||||
exports.async = rxjs.async;
|
||||
exports.asyncScheduler = rxjs.asyncScheduler;
|
||||
exports.queue = rxjs.queue;
|
||||
exports.queueScheduler = rxjs.queueScheduler;
|
||||
exports.animationFrame = rxjs.animationFrame;
|
||||
exports.animationFrameScheduler = rxjs.animationFrameScheduler;
|
||||
exports.VirtualTimeScheduler = rxjs.VirtualTimeScheduler;
|
||||
exports.VirtualAction = rxjs.VirtualAction;
|
||||
exports.Scheduler = rxjs.Scheduler;
|
||||
exports.Subscription = rxjs.Subscription;
|
||||
exports.Subscriber = rxjs.Subscriber;
|
||||
exports.Notification = rxjs.Notification;
|
||||
exports.NotificationKind = rxjs.NotificationKind;
|
||||
exports.pipe = rxjs.pipe;
|
||||
exports.noop = rxjs.noop;
|
||||
exports.identity = rxjs.identity;
|
||||
exports.isObservable = rxjs.isObservable;
|
||||
exports.ArgumentOutOfRangeError = rxjs.ArgumentOutOfRangeError;
|
||||
exports.EmptyError = rxjs.EmptyError;
|
||||
exports.ObjectUnsubscribedError = rxjs.ObjectUnsubscribedError;
|
||||
exports.UnsubscriptionError = rxjs.UnsubscriptionError;
|
||||
exports.TimeoutError = rxjs.TimeoutError;
|
||||
exports.bindCallback = rxjs.bindCallback;
|
||||
exports.bindNodeCallback = rxjs.bindNodeCallback;
|
||||
exports.combineLatest = rxjs.combineLatest;
|
||||
exports.concat = rxjs.concat;
|
||||
exports.defer = rxjs.defer;
|
||||
exports.empty = rxjs.empty;
|
||||
exports.forkJoin = rxjs.forkJoin;
|
||||
exports.from = rxjs.from;
|
||||
exports.fromEvent = rxjs.fromEvent;
|
||||
exports.fromEventPattern = rxjs.fromEventPattern;
|
||||
exports.generate = rxjs.generate;
|
||||
exports.iif = rxjs.iif;
|
||||
exports.interval = rxjs.interval;
|
||||
exports.merge = rxjs.merge;
|
||||
exports.never = rxjs.never;
|
||||
exports.of = rxjs.of;
|
||||
exports.onErrorResumeNext = rxjs.onErrorResumeNext;
|
||||
exports.pairs = rxjs.pairs;
|
||||
exports.partition = rxjs.partition;
|
||||
exports.race = rxjs.race;
|
||||
exports.range = rxjs.range;
|
||||
exports.throwError = rxjs.throwError;
|
||||
exports.timer = rxjs.timer;
|
||||
exports.using = rxjs.using;
|
||||
exports.zip = rxjs.zip;
|
||||
exports.scheduled = rxjs.scheduled;
|
||||
exports.EMPTY = rxjs.EMPTY;
|
||||
exports.NEVER = rxjs.NEVER;
|
||||
exports.config = rxjs.config;
|
||||
export { animationFrame, animationFrameScheduler, ArgumentOutOfRangeError, asap, asapScheduler, async, asyncScheduler, AsyncSubject, BehaviorSubject, bindCallback, bindNodeCallback, combineLatest, concat, config, ConnectableObservable, defer, EMPTY, empty, EmptyError, forkJoin, from, fromEvent, fromEventPattern, generate, GroupedObservable, identity, iif, interval, isObservable, merge, NEVER, never, noop, Notification, NotificationKind, ObjectUnsubscribedError, Observable, observable, of, onErrorResumeNext, pairs, partition, pipe, queue, queueScheduler, race, range, ReplaySubject, scheduled, Scheduler, Subject, Subscriber, Subscription, throwError, TimeoutError, timer, UnsubscriptionError, using, VirtualAction, VirtualTimeScheduler, zip } from 'rxjs/_esm5/index.js';
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { animationFrame, animationFrameScheduler, ArgumentOutOfRangeError, asap, asapScheduler, async, asyncScheduler, AsyncSubject, BehaviorSubject, bindCallback, bindNodeCallback, combineLatest, concat, config, ConnectableObservable, defer, EMPTY, empty, EmptyError, forkJoin, from, fromEvent, fromEventPattern, generate, GroupedObservable, identity, iif, interval, isObservable, merge, NEVER, never, noop, Notification, NotificationKind, ObjectUnsubscribedError, Observable, observable, of, onErrorResumeNext, pairs, partition, pipe, queue, queueScheduler, race, range, ReplaySubject, scheduled, Scheduler, Subject, Subscriber, Subscription, throwError, TimeoutError, timer, UnsubscriptionError, using, VirtualAction, VirtualTimeScheduler, zip } from 'rxjs/_esm5/index.js';
|
||||
@@ -0,0 +1,114 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// This is not great, but while having esm files, rxjs doesn't quite play nicely with
|
||||
// Node.js mjs files. (Hopefully this improves in 7.0, although no exports map as of yet)
|
||||
//
|
||||
// Generated via s/export \{ (.*) \} from .*/exports.$1 = rxjs.$1;/ on rxjs/_esm
|
||||
|
||||
const operators = require('rxjs/operators');
|
||||
|
||||
exports.audit = operators.audit;
|
||||
exports.auditTime = operators.auditTime;
|
||||
exports.buffer = operators.buffer;
|
||||
exports.bufferCount = operators.bufferCount;
|
||||
exports.bufferTime = operators.bufferTime;
|
||||
exports.bufferToggle = operators.bufferToggle;
|
||||
exports.bufferWhen = operators.bufferWhen;
|
||||
exports.catchError = operators.catchError;
|
||||
exports.combineAll = operators.combineAll;
|
||||
exports.combineLatest = operators.combineLatest;
|
||||
exports.concat = operators.concat;
|
||||
exports.concatAll = operators.concatAll;
|
||||
exports.concatMap = operators.concatMap;
|
||||
exports.concatMapTo = operators.concatMapTo;
|
||||
exports.count = operators.count;
|
||||
exports.debounce = operators.debounce;
|
||||
exports.debounceTime = operators.debounceTime;
|
||||
exports.defaultIfEmpty = operators.defaultIfEmpty;
|
||||
exports.delay = operators.delay;
|
||||
exports.delayWhen = operators.delayWhen;
|
||||
exports.dematerialize = operators.dematerialize;
|
||||
exports.distinct = operators.distinct;
|
||||
exports.distinctUntilChanged = operators.distinctUntilChanged;
|
||||
exports.distinctUntilKeyChanged = operators.distinctUntilKeyChanged;
|
||||
exports.elementAt = operators.elementAt;
|
||||
exports.endWith = operators.endWith;
|
||||
exports.every = operators.every;
|
||||
exports.exhaust = operators.exhaust;
|
||||
exports.exhaustMap = operators.exhaustMap;
|
||||
exports.expand = operators.expand;
|
||||
exports.filter = operators.filter;
|
||||
exports.finalize = operators.finalize;
|
||||
exports.find = operators.find;
|
||||
exports.findIndex = operators.findIndex;
|
||||
exports.first = operators.first;
|
||||
exports.groupBy = operators.groupBy;
|
||||
exports.ignoreElements = operators.ignoreElements;
|
||||
exports.isEmpty = operators.isEmpty;
|
||||
exports.last = operators.last;
|
||||
exports.map = operators.map;
|
||||
exports.mapTo = operators.mapTo;
|
||||
exports.materialize = operators.materialize;
|
||||
exports.max = operators.max;
|
||||
exports.merge = operators.merge;
|
||||
exports.mergeAll = operators.mergeAll;
|
||||
exports.mergeMap = operators.mergeMap;
|
||||
exports.flatMap = operators.flatMap;
|
||||
exports.mergeMapTo = operators.mergeMapTo;
|
||||
exports.mergeScan = operators.mergeScan;
|
||||
exports.min = operators.min;
|
||||
exports.multicast = operators.multicast;
|
||||
exports.observeOn = operators.observeOn;
|
||||
exports.onErrorResumeNext = operators.onErrorResumeNext;
|
||||
exports.pairwise = operators.pairwise;
|
||||
exports.partition = operators.partition;
|
||||
exports.pluck = operators.pluck;
|
||||
exports.publish = operators.publish;
|
||||
exports.publishBehavior = operators.publishBehavior;
|
||||
exports.publishLast = operators.publishLast;
|
||||
exports.publishReplay = operators.publishReplay;
|
||||
exports.race = operators.race;
|
||||
exports.reduce = operators.reduce;
|
||||
exports.repeat = operators.repeat;
|
||||
exports.repeatWhen = operators.repeatWhen;
|
||||
exports.retry = operators.retry;
|
||||
exports.retryWhen = operators.retryWhen;
|
||||
exports.refCount = operators.refCount;
|
||||
exports.sample = operators.sample;
|
||||
exports.sampleTime = operators.sampleTime;
|
||||
exports.scan = operators.scan;
|
||||
exports.sequenceEqual = operators.sequenceEqual;
|
||||
exports.share = operators.share;
|
||||
exports.shareReplay = operators.shareReplay;
|
||||
exports.single = operators.single;
|
||||
exports.skip = operators.skip;
|
||||
exports.skipLast = operators.skipLast;
|
||||
exports.skipUntil = operators.skipUntil;
|
||||
exports.skipWhile = operators.skipWhile;
|
||||
exports.startWith = operators.startWith;
|
||||
exports.subscribeOn = operators.subscribeOn;
|
||||
exports.switchAll = operators.switchAll;
|
||||
exports.switchMap = operators.switchMap;
|
||||
exports.switchMapTo = operators.switchMapTo;
|
||||
exports.take = operators.take;
|
||||
exports.takeLast = operators.takeLast;
|
||||
exports.takeUntil = operators.takeUntil;
|
||||
exports.takeWhile = operators.takeWhile;
|
||||
exports.tap = operators.tap;
|
||||
exports.throttle = operators.throttle;
|
||||
exports.throttleTime = operators.throttleTime;
|
||||
exports.throwIfEmpty = operators.throwIfEmpty;
|
||||
exports.timeInterval = operators.timeInterval;
|
||||
exports.timeout = operators.timeout;
|
||||
exports.timeoutWith = operators.timeoutWith;
|
||||
exports.timestamp = operators.timestamp;
|
||||
exports.toArray = operators.toArray;
|
||||
exports.window = operators.window;
|
||||
exports.windowCount = operators.windowCount;
|
||||
exports.windowTime = operators.windowTime;
|
||||
exports.windowToggle = operators.windowToggle;
|
||||
exports.windowWhen = operators.windowWhen;
|
||||
exports.withLatestFrom = operators.withLatestFrom;
|
||||
exports.zip = operators.zip;
|
||||
exports.zipAll = operators.zipAll;
|
||||
@@ -1,117 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// This is not great, but while having esm files, rxjs doesn't quite play nicely with
|
||||
// Node.js mjs files. (Hopefully this improves in 7.0, although no exports map as of yet)
|
||||
//
|
||||
// Generated via s/export \{ (.*) \} from .*/exports.$1 = rxjs.$1;/ on rxjs/_esm
|
||||
|
||||
// This is or our builder, to add the correct exports entry
|
||||
// @polkadot/dev: exports-node
|
||||
|
||||
const operators = require('rxjs/operators');
|
||||
|
||||
exports.audit = operators.audit;
|
||||
exports.auditTime = operators.auditTime;
|
||||
exports.buffer = operators.buffer;
|
||||
exports.bufferCount = operators.bufferCount;
|
||||
exports.bufferTime = operators.bufferTime;
|
||||
exports.bufferToggle = operators.bufferToggle;
|
||||
exports.bufferWhen = operators.bufferWhen;
|
||||
exports.catchError = operators.catchError;
|
||||
exports.combineAll = operators.combineAll;
|
||||
exports.combineLatest = operators.combineLatest;
|
||||
exports.concat = operators.concat;
|
||||
exports.concatAll = operators.concatAll;
|
||||
exports.concatMap = operators.concatMap;
|
||||
exports.concatMapTo = operators.concatMapTo;
|
||||
exports.count = operators.count;
|
||||
exports.debounce = operators.debounce;
|
||||
exports.debounceTime = operators.debounceTime;
|
||||
exports.defaultIfEmpty = operators.defaultIfEmpty;
|
||||
exports.delay = operators.delay;
|
||||
exports.delayWhen = operators.delayWhen;
|
||||
exports.dematerialize = operators.dematerialize;
|
||||
exports.distinct = operators.distinct;
|
||||
exports.distinctUntilChanged = operators.distinctUntilChanged;
|
||||
exports.distinctUntilKeyChanged = operators.distinctUntilKeyChanged;
|
||||
exports.elementAt = operators.elementAt;
|
||||
exports.endWith = operators.endWith;
|
||||
exports.every = operators.every;
|
||||
exports.exhaust = operators.exhaust;
|
||||
exports.exhaustMap = operators.exhaustMap;
|
||||
exports.expand = operators.expand;
|
||||
exports.filter = operators.filter;
|
||||
exports.finalize = operators.finalize;
|
||||
exports.find = operators.find;
|
||||
exports.findIndex = operators.findIndex;
|
||||
exports.first = operators.first;
|
||||
exports.groupBy = operators.groupBy;
|
||||
exports.ignoreElements = operators.ignoreElements;
|
||||
exports.isEmpty = operators.isEmpty;
|
||||
exports.last = operators.last;
|
||||
exports.map = operators.map;
|
||||
exports.mapTo = operators.mapTo;
|
||||
exports.materialize = operators.materialize;
|
||||
exports.max = operators.max;
|
||||
exports.merge = operators.merge;
|
||||
exports.mergeAll = operators.mergeAll;
|
||||
exports.mergeMap = operators.mergeMap;
|
||||
exports.flatMap = operators.flatMap;
|
||||
exports.mergeMapTo = operators.mergeMapTo;
|
||||
exports.mergeScan = operators.mergeScan;
|
||||
exports.min = operators.min;
|
||||
exports.multicast = operators.multicast;
|
||||
exports.observeOn = operators.observeOn;
|
||||
exports.onErrorResumeNext = operators.onErrorResumeNext;
|
||||
exports.pairwise = operators.pairwise;
|
||||
exports.partition = operators.partition;
|
||||
exports.pluck = operators.pluck;
|
||||
exports.publish = operators.publish;
|
||||
exports.publishBehavior = operators.publishBehavior;
|
||||
exports.publishLast = operators.publishLast;
|
||||
exports.publishReplay = operators.publishReplay;
|
||||
exports.race = operators.race;
|
||||
exports.reduce = operators.reduce;
|
||||
exports.repeat = operators.repeat;
|
||||
exports.repeatWhen = operators.repeatWhen;
|
||||
exports.retry = operators.retry;
|
||||
exports.retryWhen = operators.retryWhen;
|
||||
exports.refCount = operators.refCount;
|
||||
exports.sample = operators.sample;
|
||||
exports.sampleTime = operators.sampleTime;
|
||||
exports.scan = operators.scan;
|
||||
exports.sequenceEqual = operators.sequenceEqual;
|
||||
exports.share = operators.share;
|
||||
exports.shareReplay = operators.shareReplay;
|
||||
exports.single = operators.single;
|
||||
exports.skip = operators.skip;
|
||||
exports.skipLast = operators.skipLast;
|
||||
exports.skipUntil = operators.skipUntil;
|
||||
exports.skipWhile = operators.skipWhile;
|
||||
exports.startWith = operators.startWith;
|
||||
exports.subscribeOn = operators.subscribeOn;
|
||||
exports.switchAll = operators.switchAll;
|
||||
exports.switchMap = operators.switchMap;
|
||||
exports.switchMapTo = operators.switchMapTo;
|
||||
exports.take = operators.take;
|
||||
exports.takeLast = operators.takeLast;
|
||||
exports.takeUntil = operators.takeUntil;
|
||||
exports.takeWhile = operators.takeWhile;
|
||||
exports.tap = operators.tap;
|
||||
exports.throttle = operators.throttle;
|
||||
exports.throttleTime = operators.throttleTime;
|
||||
exports.throwIfEmpty = operators.throwIfEmpty;
|
||||
exports.timeInterval = operators.timeInterval;
|
||||
exports.timeout = operators.timeout;
|
||||
exports.timeoutWith = operators.timeoutWith;
|
||||
exports.timestamp = operators.timestamp;
|
||||
exports.toArray = operators.toArray;
|
||||
exports.window = operators.window;
|
||||
exports.windowCount = operators.windowCount;
|
||||
exports.windowTime = operators.windowTime;
|
||||
exports.windowToggle = operators.windowToggle;
|
||||
exports.windowWhen = operators.windowWhen;
|
||||
exports.withLatestFrom = operators.withLatestFrom;
|
||||
exports.zip = operators.zip;
|
||||
exports.zipAll = operators.zipAll;
|
||||
export { audit, auditTime, buffer, bufferCount, bufferTime, bufferToggle, bufferWhen, catchError, combineAll, combineLatest, concat, concatAll, concatMap, concatMapTo, count, debounce, debounceTime, defaultIfEmpty, delay, delayWhen, dematerialize, distinct, distinctUntilChanged, distinctUntilKeyChanged, elementAt, endWith, every, exhaust, exhaustMap, expand, filter, finalize, find, findIndex, first, flatMap, groupBy, ignoreElements, isEmpty, last, map, mapTo, materialize, max, merge, mergeAll, mergeMap, mergeMapTo, mergeScan, min, multicast, observeOn, onErrorResumeNext, pairwise, partition, pluck, publish, publishBehavior, publishLast, publishReplay, race, reduce, refCount, repeat, repeatWhen, retry, retryWhen, sample, sampleTime, scan, sequenceEqual, share, shareReplay, single, skip, skipLast, skipUntil, skipWhile, startWith, subscribeOn, switchAll, switchMap, switchMapTo, take, takeLast, takeUntil, takeWhile, tap, throttle, throttleTime, throwIfEmpty, timeInterval, timeout, timeoutWith, timestamp, toArray, window, windowCount, windowTime, windowToggle, windowWhen, withLatestFrom, zip, zipAll } from 'rxjs/_esm5/operators/index.js';
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { audit, auditTime, buffer, bufferCount, bufferTime, bufferToggle, bufferWhen, catchError, combineAll, combineLatest, concat, concatAll, concatMap, concatMapTo, count, debounce, debounceTime, defaultIfEmpty, delay, delayWhen, dematerialize, distinct, distinctUntilChanged, distinctUntilKeyChanged, elementAt, endWith, every, exhaust, exhaustMap, expand, filter, finalize, find, findIndex, first, flatMap, groupBy, ignoreElements, isEmpty, last, map, mapTo, materialize, max, merge, mergeAll, mergeMap, mergeMapTo, mergeScan, min, multicast, observeOn, onErrorResumeNext, pairwise, partition, pluck, publish, publishBehavior, publishLast, publishReplay, race, reduce, refCount, repeat, repeatWhen, retry, retryWhen, sample, sampleTime, scan, sequenceEqual, share, shareReplay, single, skip, skipLast, skipUntil, skipWhile, startWith, subscribeOn, switchAll, switchMap, switchMapTo, take, takeLast, takeUntil, takeWhile, tap, throttle, throttleTime, throwIfEmpty, timeInterval, timeout, timeoutWith, timestamp, toArray, window, windowCount, windowTime, windowToggle, windowWhen, withLatestFrom, zip, zipAll } from 'rxjs/_esm5/operators/index.js';
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-rxjs authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-rxjs', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-rxjs', version: '6.0.1' };
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-textdecoder",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A TextDecoder replacement",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
@@ -14,7 +15,7 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-textdecoder#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-global": "5.8.1"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-global": "6.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@ import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
import { TextDecoder as Fallback } from './fallback';
|
||||
|
||||
export const TextDecoder = typeof xglobal.TextDecoder === 'undefined'
|
||||
? Fallback as unknown as typeof xglobal.TextDecoder
|
||||
: xglobal.TextDecoder;
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const TextDecoder = (
|
||||
typeof xglobal.TextDecoder === 'undefined'
|
||||
? Fallback as unknown as typeof xglobal.TextDecoder
|
||||
: xglobal.TextDecoder
|
||||
);
|
||||
|
||||
@@ -5,6 +5,10 @@ import util from 'util';
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export const TextDecoder = typeof xglobal.TextDecoder === 'undefined'
|
||||
? util.TextDecoder as unknown as typeof xglobal.TextDecoder
|
||||
: xglobal.TextDecoder;
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const TextDecoder = (
|
||||
typeof xglobal.TextDecoder === 'undefined'
|
||||
? util.TextDecoder as unknown as typeof xglobal.TextDecoder
|
||||
: xglobal.TextDecoder
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-textdecoder authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-textdecoder', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-textdecoder', version: '6.0.1' };
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-textencoder authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { TextDecoder } from './browser';
|
||||
export { TextDecoder, packageInfo } from './browser';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-textencoder",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A TextDecoder replacement",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
@@ -14,7 +15,7 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-textencoder#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-global": "5.8.1"
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-global": "6.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@ import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
import { TextEncoder as Fallback } from './fallback';
|
||||
|
||||
export const TextEncoder = typeof xglobal.TextEncoder === 'undefined'
|
||||
? Fallback as unknown as typeof xglobal.TextEncoder
|
||||
: xglobal.TextEncoder;
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const TextEncoder = (
|
||||
typeof xglobal.TextEncoder === 'undefined'
|
||||
? Fallback as unknown as typeof xglobal.TextEncoder
|
||||
: xglobal.TextEncoder
|
||||
);
|
||||
|
||||
@@ -5,6 +5,8 @@ import util from 'util';
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
class NodeFallback {
|
||||
#encoder: util.TextEncoder;
|
||||
|
||||
@@ -20,6 +22,8 @@ class NodeFallback {
|
||||
}
|
||||
}
|
||||
|
||||
export const TextEncoder = typeof xglobal.TextEncoder === 'undefined'
|
||||
? NodeFallback as unknown as typeof xglobal.TextEncoder
|
||||
: xglobal.TextEncoder;
|
||||
export const TextEncoder = (
|
||||
typeof xglobal.TextEncoder === 'undefined'
|
||||
? NodeFallback as unknown as typeof xglobal.TextEncoder
|
||||
: xglobal.TextEncoder
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-textencoder authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-textencoder', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-textencoder', version: '6.0.1' };
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-textencoder authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { TextEncoder } from './browser';
|
||||
export { TextEncoder, packageInfo } from './browser';
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "@polkadot/x-ws",
|
||||
"version": "5.8.1",
|
||||
"version": "6.0.1",
|
||||
"type": "module",
|
||||
"description": "A cross-environment WebSocket replacement",
|
||||
"browser": "browser.js",
|
||||
"main": "node.js",
|
||||
@@ -14,8 +15,8 @@
|
||||
"bugs": "https://github.com/polkadot-js/common/issues",
|
||||
"homepage": "https://github.com/polkadot-js/common/tree/master/packages/x-ws#readme",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.13.7",
|
||||
"@polkadot/x-global": "5.8.1",
|
||||
"@babel/runtime": "^7.13.9",
|
||||
"@polkadot/x-global": "6.0.1",
|
||||
"@types/websocket": "^1.0.1",
|
||||
"websocket": "^1.0.33"
|
||||
}
|
||||
|
||||
@@ -3,4 +3,6 @@
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const WebSocket = xglobal.WebSocket;
|
||||
|
||||
@@ -5,6 +5,10 @@ import ws from 'websocket';
|
||||
|
||||
import { xglobal } from '@polkadot/x-global';
|
||||
|
||||
export const WebSocket = typeof xglobal.WebSocket === 'undefined'
|
||||
? ws.w3cwebsocket as unknown as typeof xglobal.WebSocket
|
||||
: xglobal.WebSocket;
|
||||
export { packageInfo } from './packageInfo';
|
||||
|
||||
export const WebSocket = (
|
||||
typeof xglobal.WebSocket === 'undefined'
|
||||
? ws.w3cwebsocket as unknown as typeof xglobal.WebSocket
|
||||
: xglobal.WebSocket
|
||||
);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Copyright 2017-2021 @polkadot/dev authors & contributors
|
||||
// Copyright 2017-2021 @polkadot/x-ws authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
// Auto-generated by @polkadot/dev, do not edit
|
||||
|
||||
export const packageInfo = { name: '@polkadot/x-ws', version: '5.8.1' };
|
||||
export const packageInfo = { name: '@polkadot/x-ws', version: '6.0.1' };
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2017-2021 @polkadot/x-ws authors & contributors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
export { WebSocket } from './browser';
|
||||
export { WebSocket, packageInfo } from './browser';
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user