mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-11-29 23:58:06 +01:00
4447727eb6
This commit allows developers to write TypeScript files and lint them (either via a language server in their editor of choice or through the `yarn lint` command). The new TypeScript configuration as well as the updated ESLint configuration not only includes support for parsing TypeScript files, but also provides some compatibility between JavaScript and TypeScript. That is, it makes it possible for a TypeScript file that imports a JavaScript file or a JavaScript file that imports a TypeScript file to be linted. Note that this commit does not integrate TypeScript into the build system yet, so we cannot start converting files to TypeScript and pushing them to the repo until that final step is complete.
1831 lines
57 KiB
Diff
1831 lines
57 KiB
Diff
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/Bytes.ts b/node_modules/@keystonehq/bc-ur-registry/src/Bytes.ts
|
|
deleted file mode 100644
|
|
index a5f9f7d..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/Bytes.ts
|
|
+++ /dev/null
|
|
@@ -1,34 +0,0 @@
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-export class Bytes extends RegistryItem {
|
|
- getRegistryType = () => {
|
|
- return RegistryTypes.BYTES;
|
|
- };
|
|
-
|
|
- constructor(private bytes: Buffer) {
|
|
- super();
|
|
- }
|
|
-
|
|
- getData = () => this.bytes;
|
|
-
|
|
- toDataItem = () => {
|
|
- return new DataItem(this.bytes);
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const bytes = dataItem.getData();
|
|
- if (!bytes) {
|
|
- throw new Error(
|
|
- `#[ur-registry][Bytes][fn.fromDataItem]: decoded [dataItem][#data] is undefined: ${dataItem}`,
|
|
- );
|
|
- }
|
|
- return new Bytes(bytes);
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return Bytes.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoAccount.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoAccount.ts
|
|
deleted file mode 100644
|
|
index 753e535..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoAccount.ts
|
|
+++ /dev/null
|
|
@@ -1,57 +0,0 @@
|
|
-import { CryptoOutput } from '.';
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- masterFingerprint = 1,
|
|
- outputDescriptors,
|
|
-}
|
|
-
|
|
-export class CryptoAccount extends RegistryItem {
|
|
- getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_ACCOUNT;
|
|
- };
|
|
-
|
|
- constructor(
|
|
- private masterFingerprint: Buffer,
|
|
- private outputDescriptors: CryptoOutput[],
|
|
- ) {
|
|
- super();
|
|
- }
|
|
-
|
|
- public getMasterFingerprint = () => this.masterFingerprint;
|
|
- public getOutputDescriptors = () => this.outputDescriptors;
|
|
-
|
|
- public toDataItem = () => {
|
|
- const map = {};
|
|
- if (this.masterFingerprint) {
|
|
- map[Keys.masterFingerprint] = this.masterFingerprint.readUInt32BE(0);
|
|
- }
|
|
- if (this.outputDescriptors) {
|
|
- map[Keys.outputDescriptors] = this.outputDescriptors.map((item) =>
|
|
- item.toDataItem(),
|
|
- );
|
|
- }
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const map = dataItem.getData();
|
|
- const masterFingerprint = Buffer.alloc(4);
|
|
- const _masterFingerprint = map[Keys.masterFingerprint];
|
|
- if (_masterFingerprint) {
|
|
- masterFingerprint.writeUInt32BE(_masterFingerprint, 0);
|
|
- }
|
|
- const outputDescriptors = map[Keys.outputDescriptors] as DataItem[];
|
|
- const cryptoOutputs = outputDescriptors.map((item) =>
|
|
- CryptoOutput.fromDataItem(item),
|
|
- );
|
|
- return new CryptoAccount(masterFingerprint, cryptoOutputs);
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoAccount.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoCoinInfo.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoCoinInfo.ts
|
|
deleted file mode 100644
|
|
index 0201682..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoCoinInfo.ts
|
|
+++ /dev/null
|
|
@@ -1,58 +0,0 @@
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- type = '1',
|
|
- network = '2',
|
|
-}
|
|
-
|
|
-export enum Type {
|
|
- bitcoin = 0,
|
|
-}
|
|
-
|
|
-export enum Network {
|
|
- mainnet,
|
|
- testnet,
|
|
-}
|
|
-
|
|
-export class CryptoCoinInfo extends RegistryItem {
|
|
- getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_COIN_INFO;
|
|
- };
|
|
-
|
|
- constructor(private type?: Type, private network?: Network) {
|
|
- super();
|
|
- }
|
|
-
|
|
- public getType = () => {
|
|
- return this.type || Type.bitcoin;
|
|
- };
|
|
-
|
|
- public getNetwork = () => {
|
|
- return this.network || Network.mainnet;
|
|
- };
|
|
-
|
|
- public toDataItem = () => {
|
|
- const map = {};
|
|
- if (this.type) {
|
|
- map[Keys.type] = this.type;
|
|
- }
|
|
- if (this.network) {
|
|
- map[Keys.network] = this.network;
|
|
- }
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const map = dataItem.getData();
|
|
- const type = map[Keys.type];
|
|
- const network = map[Keys.network];
|
|
- return new CryptoCoinInfo(type, network);
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoCoinInfo.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoECKey.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoECKey.ts
|
|
deleted file mode 100644
|
|
index 1e964fc..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoECKey.ts
|
|
+++ /dev/null
|
|
@@ -1,59 +0,0 @@
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- curve = 1,
|
|
- private,
|
|
- data,
|
|
-}
|
|
-
|
|
-export class CryptoECKey extends RegistryItem {
|
|
- private data: Buffer;
|
|
- private curve: number;
|
|
- private privateKey: boolean;
|
|
- constructor(args: { data: Buffer; curve?: number; privateKey?: boolean }) {
|
|
- super();
|
|
- this.data = args.data;
|
|
- this.curve = args.curve;
|
|
- this.privateKey = args.privateKey;
|
|
- }
|
|
-
|
|
- public getCurve = () => this.curve || 0;
|
|
- public isPrivateKey = () => this.privateKey || false;
|
|
- public getData = () => this.data;
|
|
-
|
|
- getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_ECKEY;
|
|
- };
|
|
-
|
|
- toDataItem = () => {
|
|
- const map = {};
|
|
- if (this.curve) {
|
|
- map[Keys.curve] = this.curve;
|
|
- }
|
|
- if (this.privateKey !== undefined) {
|
|
- map[Keys.private] = this.privateKey;
|
|
- }
|
|
- map[Keys.data] = this.data;
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- static fromDataItem = (dataItem: DataItem) => {
|
|
- const map = dataItem.getData();
|
|
- const curve = map[Keys.curve];
|
|
- const privateKey = map[Keys.private];
|
|
- const data = map[Keys.data];
|
|
- if (!data) {
|
|
- throw new Error(
|
|
- `#[ur-registry][CryptoECKey][fn.fromDataItem]: decoded [dataItem][#data.data] is undefined: ${dataItem}`,
|
|
- );
|
|
- }
|
|
- return new CryptoECKey({ data, curve, privateKey });
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoECKey.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoHDKey.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoHDKey.ts
|
|
deleted file mode 100644
|
|
index bbfd331..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoHDKey.ts
|
|
+++ /dev/null
|
|
@@ -1,210 +0,0 @@
|
|
-import { encode } from 'bs58check';
|
|
-import { CryptoCoinInfo } from './CryptoCoinInfo';
|
|
-import { CryptoKeypath } from './CryptoKeypath';
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- is_master = 1,
|
|
- is_private,
|
|
- key_data,
|
|
- chain_code,
|
|
- use_info,
|
|
- origin,
|
|
- children,
|
|
- parent_fingerprint,
|
|
- name,
|
|
- note,
|
|
-}
|
|
-
|
|
-type MasterKeyProps = {
|
|
- isMaster: true;
|
|
- key: Buffer;
|
|
- chainCode: Buffer;
|
|
-};
|
|
-
|
|
-type DeriveKeyProps = {
|
|
- isMaster: false;
|
|
- isPrivateKey?: boolean;
|
|
- key: Buffer;
|
|
- chainCode?: Buffer;
|
|
- useInfo?: CryptoCoinInfo;
|
|
- origin?: CryptoKeypath;
|
|
- children?: CryptoKeypath;
|
|
- parentFingerprint?: Buffer;
|
|
- name?: string;
|
|
- note?: string;
|
|
-};
|
|
-export class CryptoHDKey extends RegistryItem {
|
|
- private master: boolean;
|
|
- private privateKey: boolean;
|
|
- private key: Buffer;
|
|
- private chainCode: Buffer;
|
|
- private useInfo: CryptoCoinInfo;
|
|
- private origin: CryptoKeypath;
|
|
- private children: CryptoKeypath;
|
|
- private parentFingerprint: Buffer;
|
|
- private name: string;
|
|
- private note: string;
|
|
-
|
|
- public getKey = () => this.key;
|
|
- public getChainCode = () => this.chainCode;
|
|
- public isMaster = () => this.master;
|
|
- public isPrivateKey = () => !!this.privateKey;
|
|
- public getUseInfo = () => this.useInfo;
|
|
- public getOrigin = () => this.origin;
|
|
- public getChildren = () => this.children;
|
|
- public getParentFingerprint = () => this.parentFingerprint;
|
|
- public getName = () => this.name;
|
|
- public getNote = () => this.note;
|
|
- public getBip32Key = () => {
|
|
- let version: Buffer;
|
|
- let depth: number;
|
|
- let index: number;
|
|
- let parentFingerprint: Buffer = Buffer.alloc(4).fill(0);
|
|
- if(this.isMaster()) {
|
|
- // version bytes defined on https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#serialization-format
|
|
- version = Buffer.from("0488ADE4", "hex")
|
|
- depth = 0;
|
|
- index = 0;
|
|
- } else {
|
|
- depth = this.getOrigin().getComponents().length || this.getOrigin().getDepth();
|
|
- const paths = this.getOrigin().getComponents();
|
|
- const lastPath = paths[paths.length - 1];
|
|
- if(lastPath) {
|
|
- index = lastPath.isHardened() ? lastPath.getIndex()! + 0x80000000 : lastPath.getIndex()!;
|
|
- parentFingerprint = this.getParentFingerprint();
|
|
- }
|
|
- if(this.isPrivateKey()) {
|
|
- version = Buffer.from('0488ADE4', 'hex');
|
|
- } else {
|
|
- version = Buffer.from('0488B21E', 'hex');
|
|
- }
|
|
- }
|
|
- const depthBuffer = Buffer.alloc(1);
|
|
- depthBuffer.writeUInt8(depth, 0);
|
|
- const indexBuffer = Buffer.alloc(4);
|
|
- indexBuffer.writeUInt32BE(index, 0);
|
|
- const chainCode = this.getChainCode();
|
|
- const key = this.getKey();
|
|
- return encode(Buffer.concat([version, depthBuffer, parentFingerprint, indexBuffer, chainCode, key]));
|
|
- }
|
|
-
|
|
- public getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_HDKEY;
|
|
- };
|
|
-
|
|
- constructor(args: DeriveKeyProps | MasterKeyProps) {
|
|
- super();
|
|
- if (args.isMaster) {
|
|
- this.setupMasterKey(args);
|
|
- } else {
|
|
- this.setupDeriveKey(args as DeriveKeyProps);
|
|
- }
|
|
- }
|
|
-
|
|
- private setupMasterKey = (args: MasterKeyProps) => {
|
|
- this.master = true;
|
|
- this.key = args.key;
|
|
- this.chainCode = args.chainCode;
|
|
- };
|
|
-
|
|
- private setupDeriveKey = (args: DeriveKeyProps) => {
|
|
- this.master = false;
|
|
- this.privateKey = args.isPrivateKey;
|
|
- this.key = args.key;
|
|
- this.chainCode = args.chainCode;
|
|
- this.useInfo = args.useInfo;
|
|
- this.origin = args.origin;
|
|
- this.children = args.children;
|
|
- this.parentFingerprint = args.parentFingerprint;
|
|
- this.name = args.name;
|
|
- this.note = args.note;
|
|
- };
|
|
-
|
|
- public toDataItem = () => {
|
|
- const map = {};
|
|
- if (this.master) {
|
|
- map[Keys.is_master] = true;
|
|
- map[Keys.key_data] = this.key;
|
|
- map[Keys.chain_code] = this.chainCode;
|
|
- } else {
|
|
- if (this.privateKey !== undefined) {
|
|
- map[Keys.is_private] = this.privateKey;
|
|
- }
|
|
- map[Keys.key_data] = this.key;
|
|
- if (this.chainCode) {
|
|
- map[Keys.chain_code] = this.chainCode;
|
|
- }
|
|
- if (this.useInfo) {
|
|
- const useInfo = this.useInfo.toDataItem();
|
|
- useInfo.setTag(this.useInfo.getRegistryType().getTag());
|
|
- map[Keys.use_info] = useInfo;
|
|
- }
|
|
- if (this.origin) {
|
|
- const origin = this.origin.toDataItem();
|
|
- origin.setTag(this.origin.getRegistryType().getTag());
|
|
- map[Keys.origin] = origin;
|
|
- }
|
|
- if (this.children) {
|
|
- const children = this.children.toDataItem();
|
|
- children.setTag(this.children.getRegistryType().getTag());
|
|
- map[Keys.children] = children;
|
|
- }
|
|
- if (this.parentFingerprint) {
|
|
- map[Keys.parent_fingerprint] = this.parentFingerprint.readUInt32BE(0);
|
|
- }
|
|
- if (this.name !== undefined) {
|
|
- map[Keys.name] = this.name;
|
|
- }
|
|
- if (this.note !== undefined) {
|
|
- map[Keys.note] = this.note;
|
|
- }
|
|
- }
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const map = dataItem.getData();
|
|
- const isMaster = !!map[Keys.is_master];
|
|
- const isPrivateKey = map[Keys.is_private];
|
|
- const key = map[Keys.key_data];
|
|
- const chainCode = map[Keys.chain_code];
|
|
- const useInfo = map[Keys.use_info]
|
|
- ? CryptoCoinInfo.fromDataItem(map[Keys.use_info])
|
|
- : undefined;
|
|
- const origin = map[Keys.origin]
|
|
- ? CryptoKeypath.fromDataItem(map[Keys.origin])
|
|
- : undefined;
|
|
- const children = map[Keys.children]
|
|
- ? CryptoKeypath.fromDataItem(map[Keys.children])
|
|
- : undefined;
|
|
- let _parentFingerprint = map[Keys.parent_fingerprint];
|
|
- let parentFingerprint: Buffer;
|
|
- if (_parentFingerprint) {
|
|
- parentFingerprint = Buffer.alloc(4);
|
|
- parentFingerprint.writeUInt32BE(_parentFingerprint, 0);
|
|
- }
|
|
- const name = map[Keys.name];
|
|
- const note = map[Keys.note];
|
|
-
|
|
- return new CryptoHDKey({
|
|
- isMaster,
|
|
- isPrivateKey,
|
|
- key,
|
|
- chainCode,
|
|
- useInfo,
|
|
- origin,
|
|
- children,
|
|
- parentFingerprint,
|
|
- name,
|
|
- note,
|
|
- });
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoHDKey.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoKeypath.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoKeypath.ts
|
|
deleted file mode 100644
|
|
index 4babe91..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoKeypath.ts
|
|
+++ /dev/null
|
|
@@ -1,95 +0,0 @@
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { PathComponent } from './PathComponent';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- components = 1,
|
|
- source_fingerprint,
|
|
- depth,
|
|
-}
|
|
-
|
|
-export class CryptoKeypath extends RegistryItem {
|
|
- getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_KEYPATH;
|
|
- };
|
|
-
|
|
- constructor(
|
|
- private components: PathComponent[] = [],
|
|
- private sourceFingerprint?: Buffer,
|
|
- private depth?: number,
|
|
- ) {
|
|
- super();
|
|
- }
|
|
-
|
|
- public getPath = () => {
|
|
- if (this.components.length === 0) {
|
|
- return undefined;
|
|
- }
|
|
-
|
|
- const components = this.components.map((component) => {
|
|
- return `${component.isWildcard() ? '*' : component.getIndex()}${
|
|
- component.isHardened() ? "'" : ''
|
|
- }`;
|
|
- });
|
|
- return components.join('/');
|
|
- };
|
|
-
|
|
- public getComponents = () => this.components;
|
|
- public getSourceFingerprint = () => this.sourceFingerprint;
|
|
- public getDepth = () => this.depth;
|
|
-
|
|
- toDataItem = () => {
|
|
- const map: Record<string, any> = {};
|
|
- const components = [];
|
|
- this.components &&
|
|
- this.components.forEach((component) => {
|
|
- if (component.isWildcard()) {
|
|
- components.push([]);
|
|
- } else {
|
|
- components.push(component.getIndex());
|
|
- }
|
|
- components.push(component.isHardened() ? true : false);
|
|
- });
|
|
- map[Keys.components] = components;
|
|
- if (this.sourceFingerprint) {
|
|
- map[Keys.source_fingerprint] = this.sourceFingerprint.readUInt32BE(0);
|
|
- }
|
|
- if (this.depth !== undefined) {
|
|
- map[Keys.depth] = this.depth;
|
|
- }
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- static fromDataItem = (dataItem: DataItem) => {
|
|
- const map: Record<string, any> = dataItem.getData();
|
|
- const pathComponents: PathComponent[] = [];
|
|
- const components = map[Keys.components] as any[];
|
|
- if (components) {
|
|
- for (let i = 0; i < components.length; i += 2) {
|
|
- const isHardened = components[i + 1];
|
|
- const path = components[i];
|
|
- if (typeof path === 'number') {
|
|
- pathComponents.push(
|
|
- new PathComponent({ index: path, hardened: isHardened }),
|
|
- );
|
|
- } else {
|
|
- pathComponents.push(new PathComponent({ hardened: isHardened }));
|
|
- }
|
|
- }
|
|
- }
|
|
- const _sourceFingerprint = map[Keys.source_fingerprint];
|
|
- let sourceFingerprint: Buffer;
|
|
- if (_sourceFingerprint) {
|
|
- sourceFingerprint = Buffer.alloc(4);
|
|
- sourceFingerprint.writeUInt32BE(_sourceFingerprint, 0);
|
|
- }
|
|
- const depth = map[Keys.depth];
|
|
- return new CryptoKeypath(pathComponents, sourceFingerprint, depth);
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoKeypath.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoOutput.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoOutput.ts
|
|
deleted file mode 100644
|
|
index cd3009c..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoOutput.ts
|
|
+++ /dev/null
|
|
@@ -1,114 +0,0 @@
|
|
-import { CryptoECKey } from './CryptoECKey';
|
|
-import { CryptoHDKey } from './CryptoHDKey';
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { MultiKey } from './MultiKey';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-import { ScriptExpression, ScriptExpressions } from './ScriptExpression';
|
|
-
|
|
-export class CryptoOutput extends RegistryItem {
|
|
- public getRegistryType = () => {
|
|
- return RegistryTypes.CRYPTO_OUTPUT;
|
|
- };
|
|
-
|
|
- constructor(
|
|
- private scriptExpressions: ScriptExpression[],
|
|
- private cryptoKey: CryptoHDKey | CryptoECKey | MultiKey,
|
|
- ) {
|
|
- super();
|
|
- }
|
|
-
|
|
- public getCryptoKey = () => this.cryptoKey;
|
|
- public getHDKey = () => {
|
|
- if (this.cryptoKey instanceof CryptoHDKey) {
|
|
- return this.cryptoKey as CryptoHDKey;
|
|
- } else {
|
|
- return undefined;
|
|
- }
|
|
- };
|
|
- public getECKey = () => {
|
|
- if (this.cryptoKey instanceof CryptoECKey) {
|
|
- return this.cryptoKey as CryptoECKey;
|
|
- } else {
|
|
- return undefined;
|
|
- }
|
|
- };
|
|
-
|
|
- public getMultiKey = () => {
|
|
- if (this.cryptoKey instanceof MultiKey) {
|
|
- return this.cryptoKey as MultiKey;
|
|
- } else {
|
|
- return undefined;
|
|
- }
|
|
- };
|
|
-
|
|
- public getScriptExpressions = () => this.scriptExpressions;
|
|
-
|
|
- toDataItem = () => {
|
|
- let dataItem = this.cryptoKey.toDataItem();
|
|
- if (
|
|
- this.cryptoKey instanceof CryptoECKey ||
|
|
- this.cryptoKey instanceof CryptoHDKey
|
|
- ) {
|
|
- dataItem.setTag(this.cryptoKey.getRegistryType().getTag());
|
|
- }
|
|
-
|
|
- const clonedSe = [...this.scriptExpressions];
|
|
-
|
|
- clonedSe.reverse().forEach((se) => {
|
|
- const tagValue = se.getTag();
|
|
- if (dataItem.getTag() === undefined) {
|
|
- dataItem.setTag(tagValue);
|
|
- } else {
|
|
- dataItem = new DataItem(dataItem, tagValue);
|
|
- }
|
|
- });
|
|
-
|
|
- return dataItem;
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const scriptExpressions: ScriptExpression[] = [];
|
|
- let _dataItem = dataItem;
|
|
- while (true) {
|
|
- let _tag = _dataItem.getTag() || undefined;
|
|
- const se = ScriptExpression.fromTag(_tag);
|
|
- if (se) {
|
|
- scriptExpressions.push(se);
|
|
- if (_dataItem.getData() instanceof DataItem) {
|
|
- _dataItem = _dataItem.getData();
|
|
- _tag = _dataItem.getTag();
|
|
- } else {
|
|
- break;
|
|
- }
|
|
- } else {
|
|
- break;
|
|
- }
|
|
- }
|
|
- const seLength = scriptExpressions.length;
|
|
- const isMultiKey =
|
|
- seLength > 0 &&
|
|
- (scriptExpressions[seLength - 1].getExpression() ===
|
|
- ScriptExpressions.MULTISIG.getExpression() ||
|
|
- scriptExpressions[seLength - 1].getExpression() ===
|
|
- ScriptExpressions.SORTED_MULTISIG.getExpression());
|
|
- //TODO: judge is multi key by scriptExpressions
|
|
- if (isMultiKey) {
|
|
- const multiKey = MultiKey.fromDataItem(_dataItem);
|
|
- return new CryptoOutput(scriptExpressions, multiKey);
|
|
- }
|
|
-
|
|
- if (_dataItem.getTag() === RegistryTypes.CRYPTO_HDKEY.getTag()) {
|
|
- const cryptoHDKey = CryptoHDKey.fromDataItem(_dataItem);
|
|
- return new CryptoOutput(scriptExpressions, cryptoHDKey);
|
|
- } else {
|
|
- const cryptoECKey = CryptoECKey.fromDataItem(_dataItem);
|
|
- return new CryptoOutput(scriptExpressions, cryptoECKey);
|
|
- }
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoOutput.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/CryptoPSBT.ts b/node_modules/@keystonehq/bc-ur-registry/src/CryptoPSBT.ts
|
|
deleted file mode 100644
|
|
index 626b647..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/CryptoPSBT.ts
|
|
+++ /dev/null
|
|
@@ -1,32 +0,0 @@
|
|
-import { decodeToDataItem, DataItem } from './lib';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-
|
|
-export class CryptoPSBT extends RegistryItem {
|
|
- getRegistryType = () => RegistryTypes.CRYPTO_PSBT;
|
|
-
|
|
- constructor(private psbt: Buffer) {
|
|
- super();
|
|
- }
|
|
-
|
|
- public getPSBT = () => this.psbt;
|
|
-
|
|
- public toDataItem = () => {
|
|
- return new DataItem(this.psbt);
|
|
- };
|
|
-
|
|
- public static fromDataItem = (dataItem: DataItem) => {
|
|
- const psbt = dataItem.getData();
|
|
- if (!psbt) {
|
|
- throw new Error(
|
|
- `#[ur-registry][CryptoPSBT][fn.fromDataItem]: decoded [dataItem][#data] is undefined: ${dataItem}`,
|
|
- );
|
|
- }
|
|
- return new CryptoPSBT(psbt);
|
|
- };
|
|
-
|
|
- public static fromCBOR = (_cborPayload: Buffer) => {
|
|
- const dataItem = decodeToDataItem(_cborPayload);
|
|
- return CryptoPSBT.fromDataItem(dataItem);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/Decoder/index.ts b/node_modules/@keystonehq/bc-ur-registry/src/Decoder/index.ts
|
|
deleted file mode 100644
|
|
index 0460694..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/Decoder/index.ts
|
|
+++ /dev/null
|
|
@@ -1,40 +0,0 @@
|
|
-import { URDecoder } from '@ngraveio/bc-ur';
|
|
-import {
|
|
- Bytes,
|
|
- CryptoAccount,
|
|
- CryptoCoinInfo,
|
|
- CryptoECKey,
|
|
- CryptoHDKey,
|
|
- CryptoKeypath,
|
|
- CryptoOutput,
|
|
- CryptoPSBT,
|
|
-} from '..';
|
|
-import { RegistryTypes } from '../RegistryType';
|
|
-
|
|
-export class URRegistryDecoder extends URDecoder {
|
|
- public resultRegistryType = () => {
|
|
- const ur = this.resultUR();
|
|
- switch (ur.type) {
|
|
- case RegistryTypes.BYTES.getType():
|
|
- return Bytes.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_HDKEY.getType():
|
|
- return CryptoHDKey.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_KEYPATH.getType():
|
|
- return CryptoKeypath.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_COIN_INFO.getType():
|
|
- return CryptoCoinInfo.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_ECKEY.getType():
|
|
- return CryptoECKey.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_OUTPUT.getType():
|
|
- return CryptoOutput.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_PSBT.getType():
|
|
- return CryptoPSBT.fromCBOR(ur.cbor);
|
|
- case RegistryTypes.CRYPTO_ACCOUNT.getType():
|
|
- return CryptoAccount.fromCBOR(ur.cbor);
|
|
- default:
|
|
- throw new Error(
|
|
- `#[ur-registry][Decoder][fn.resultRegistryType]: registry type ${ur.type} is not supported now`,
|
|
- );
|
|
- }
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/MultiKey.ts b/node_modules/@keystonehq/bc-ur-registry/src/MultiKey.ts
|
|
deleted file mode 100644
|
|
index 0522fbd..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/MultiKey.ts
|
|
+++ /dev/null
|
|
@@ -1,54 +0,0 @@
|
|
-import { CryptoECKey } from './CryptoECKey';
|
|
-import { CryptoHDKey } from './CryptoHDKey';
|
|
-import { DataItem } from './lib/DataItem';
|
|
-import { RegistryItem } from './RegistryItem';
|
|
-import { RegistryType, RegistryTypes } from './RegistryType';
|
|
-
|
|
-enum Keys {
|
|
- threshold = 1,
|
|
- keys,
|
|
-}
|
|
-
|
|
-export class MultiKey extends RegistryItem {
|
|
- getRegistryType: () => RegistryType;
|
|
-
|
|
- constructor(
|
|
- private threshold: number,
|
|
- private ecKeys: CryptoECKey[],
|
|
- private hdKeys: CryptoHDKey[],
|
|
- ) {
|
|
- super();
|
|
- }
|
|
-
|
|
- getThreshold = () => this.threshold;
|
|
- getEcKeys = () => this.ecKeys as CryptoECKey[];
|
|
- getHdKeys = () => this.hdKeys as CryptoHDKey[];
|
|
-
|
|
- toDataItem = () => {
|
|
- const map = {};
|
|
- map[Keys.threshold] = this.threshold;
|
|
- const keys: DataItem[] = [...this.ecKeys, ...this.hdKeys].map((k) => {
|
|
- const dataItem = k.toDataItem();
|
|
- dataItem.setTag(k.getRegistryType().getTag());
|
|
- return dataItem;
|
|
- });
|
|
- map[Keys.keys] = keys;
|
|
- return new DataItem(map);
|
|
- };
|
|
-
|
|
- static fromDataItem = (dataItem: DataItem) => {
|
|
- const map = dataItem.getData();
|
|
- const threshold = map[Keys.threshold];
|
|
- const keys = map[Keys.keys] as DataItem[];
|
|
- const ecKeys = [];
|
|
- const hdKeys = [];
|
|
- keys.forEach((k) => {
|
|
- if (k.getTag() === RegistryTypes.CRYPTO_HDKEY.getTag()) {
|
|
- hdKeys.push(CryptoHDKey.fromDataItem(k));
|
|
- } else if (k.getTag() === RegistryTypes.CRYPTO_ECKEY.getTag()) {
|
|
- ecKeys.push(CryptoECKey.fromDataItem(k));
|
|
- }
|
|
- });
|
|
- return new MultiKey(threshold, ecKeys, hdKeys);
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/PathComponent.ts b/node_modules/@keystonehq/bc-ur-registry/src/PathComponent.ts
|
|
deleted file mode 100644
|
|
index d41cb06..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/PathComponent.ts
|
|
+++ /dev/null
|
|
@@ -1,28 +0,0 @@
|
|
-export class PathComponent {
|
|
- public static readonly HARDENED_BIT = 0x80000000;
|
|
-
|
|
- private index?: number;
|
|
- private wildcard: boolean;
|
|
- private hardened: boolean;
|
|
-
|
|
- constructor(args: { index?: number; hardened: boolean }) {
|
|
- this.index = args.index;
|
|
- this.hardened = args.hardened;
|
|
-
|
|
- if (this.index !== undefined) {
|
|
- this.wildcard = false;
|
|
- } else {
|
|
- this.wildcard = true;
|
|
- }
|
|
-
|
|
- if (this.index && (this.index & PathComponent.HARDENED_BIT) !== 0) {
|
|
- throw new Error(
|
|
- `#[ur-registry][PathComponent][fn.constructor]: Invalid index ${this.index} - most significant bit cannot be set`,
|
|
- );
|
|
- }
|
|
- }
|
|
-
|
|
- public getIndex = () => this.index;
|
|
- public isWildcard = () => this.wildcard;
|
|
- public isHardened = () => this.hardened;
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/RegistryItem.ts b/node_modules/@keystonehq/bc-ur-registry/src/RegistryItem.ts
|
|
deleted file mode 100644
|
|
index 99139f7..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/RegistryItem.ts
|
|
+++ /dev/null
|
|
@@ -1,35 +0,0 @@
|
|
-import { UR, UREncoder } from '@ngraveio/bc-ur';
|
|
-import { encodeDataItem, DataItem } from './lib';
|
|
-import { RegistryType } from './RegistryType';
|
|
-
|
|
-export abstract class RegistryItem {
|
|
- abstract getRegistryType: () => RegistryType;
|
|
- abstract toDataItem: () => DataItem;
|
|
- public toCBOR = () => {
|
|
- if (this.toDataItem() === undefined) {
|
|
- throw new Error(
|
|
- `#[ur-registry][RegistryItem][fn.toCBOR]: registry ${this.getRegistryType()}'s method toDataItem returns undefined`,
|
|
- );
|
|
- }
|
|
- return encodeDataItem(this.toDataItem());
|
|
- };
|
|
-
|
|
- public toUR = () => {
|
|
- return new UR(this.toCBOR(), this.getRegistryType().getType());
|
|
- };
|
|
-
|
|
- public toUREncoder = (
|
|
- maxFragmentLength?: number,
|
|
- firstSeqNum?: number,
|
|
- minFragmentLength?: number,
|
|
- ) => {
|
|
- const ur = this.toUR();
|
|
- const urEncoder = new UREncoder(
|
|
- ur,
|
|
- maxFragmentLength,
|
|
- firstSeqNum,
|
|
- minFragmentLength,
|
|
- );
|
|
- return urEncoder;
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/RegistryType.ts b/node_modules/@keystonehq/bc-ur-registry/src/RegistryType.ts
|
|
deleted file mode 100644
|
|
index 64637bc..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/RegistryType.ts
|
|
+++ /dev/null
|
|
@@ -1,20 +0,0 @@
|
|
-// cbor registry types: https://github.com/BlockchainCommons/Research/blob/master/papers/bcr-2020-006-urtypes.md
|
|
-// Map<name, tag>
|
|
-
|
|
-export class RegistryType {
|
|
- constructor(private type: string, private tag?: number) {}
|
|
- getTag = () => this.tag;
|
|
- getType = () => this.type;
|
|
-}
|
|
-
|
|
-export const RegistryTypes = {
|
|
- UUID: new RegistryType('uuid', 37),
|
|
- BYTES: new RegistryType('bytes', undefined),
|
|
- CRYPTO_HDKEY: new RegistryType('crypto-hdkey', 303),
|
|
- CRYPTO_KEYPATH: new RegistryType('crypto-keypath', 304),
|
|
- CRYPTO_COIN_INFO: new RegistryType('crypto-coin-info', 305),
|
|
- CRYPTO_ECKEY: new RegistryType('crypto-eckey', 306),
|
|
- CRYPTO_OUTPUT: new RegistryType('crypto-output', 308),
|
|
- CRYPTO_PSBT: new RegistryType('crypto-psbt', 310),
|
|
- CRYPTO_ACCOUNT: new RegistryType('crypto-account', 311),
|
|
-};
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/ScriptExpression.ts b/node_modules/@keystonehq/bc-ur-registry/src/ScriptExpression.ts
|
|
deleted file mode 100644
|
|
index fdd3f05..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/ScriptExpression.ts
|
|
+++ /dev/null
|
|
@@ -1,26 +0,0 @@
|
|
-export class ScriptExpression {
|
|
- constructor(private tag: number, private expression: string) {}
|
|
-
|
|
- public getTag = () => this.tag;
|
|
- public getExpression = () => this.expression;
|
|
-
|
|
- public static fromTag = (tag: number) => {
|
|
- const se = Object.values(ScriptExpressions).find(
|
|
- (se) => se.getTag() === tag,
|
|
- );
|
|
- return se;
|
|
- };
|
|
-}
|
|
-
|
|
-export const ScriptExpressions = {
|
|
- SCRIPT_HASH: new ScriptExpression(400, 'sh'),
|
|
- WITNESS_SCRIPT_HASH: new ScriptExpression(401, 'wsh'),
|
|
- PUBLIC_KEY: new ScriptExpression(402, 'pk'),
|
|
- PUBLIC_KEY_HASH: new ScriptExpression(403, 'pkh'),
|
|
- WITNESS_PUBLIC_KEY_HASH: new ScriptExpression(404, 'wpkh'),
|
|
- COMBO: new ScriptExpression(405, 'combo'),
|
|
- MULTISIG: new ScriptExpression(406, 'multi'),
|
|
- SORTED_MULTISIG: new ScriptExpression(407, 'sorted'),
|
|
- ADDRESS: new ScriptExpression(307, 'addr'),
|
|
- RAW_SCRIPT: new ScriptExpression(408, 'raw'),
|
|
-};
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/index.ts b/node_modules/@keystonehq/bc-ur-registry/src/index.ts
|
|
deleted file mode 100644
|
|
index 172a1e5..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/index.ts
|
|
+++ /dev/null
|
|
@@ -1,89 +0,0 @@
|
|
-import './patchCBOR';
|
|
-
|
|
-import { CryptoHDKey } from './CryptoHDKey';
|
|
-import { CryptoKeypath } from './CryptoKeypath';
|
|
-import {
|
|
- CryptoCoinInfo,
|
|
- Type as CryptoCoinInfoType,
|
|
- Network as CryptoCoinInfoNetwork,
|
|
-} from './CryptoCoinInfo';
|
|
-import { CryptoECKey } from './CryptoECKey';
|
|
-import { Bytes } from './Bytes';
|
|
-import { CryptoOutput } from './CryptoOutput';
|
|
-import { CryptoPSBT } from './CryptoPSBT';
|
|
-import { CryptoAccount } from './CryptoAccount';
|
|
-import { URRegistryDecoder } from './Decoder';
|
|
-
|
|
-import { MultiKey } from './MultiKey';
|
|
-
|
|
-import { ScriptExpressions } from './ScriptExpression';
|
|
-import { PathComponent } from './PathComponent';
|
|
-
|
|
-import { RegistryTypes, RegistryType } from './RegistryType';
|
|
-
|
|
-import {
|
|
- addReader,
|
|
- addSemanticDecode,
|
|
- addSemanticEncode,
|
|
- addWriter,
|
|
- decodeToDataItem,
|
|
- encodeDataItem,
|
|
-} from './lib';
|
|
-
|
|
-export { DataItem } from './lib';
|
|
-export { RegistryItem } from './RegistryItem';
|
|
-
|
|
-import { patchTags } from './utils';
|
|
-
|
|
-const URlib = {
|
|
- URRegistryDecoder,
|
|
- Bytes,
|
|
- CryptoAccount,
|
|
- CryptoHDKey,
|
|
- CryptoKeypath,
|
|
- CryptoCoinInfo,
|
|
- CryptoCoinInfoType,
|
|
- CryptoCoinInfoNetwork,
|
|
- CryptoECKey,
|
|
- CryptoOutput,
|
|
- CryptoPSBT,
|
|
- MultiKey,
|
|
- ScriptExpressions,
|
|
- PathComponent,
|
|
-};
|
|
-
|
|
-const cbor = {
|
|
- addReader,
|
|
- addSemanticDecode,
|
|
- addSemanticEncode,
|
|
- addWriter,
|
|
- patchTags,
|
|
-};
|
|
-
|
|
-const extend = {
|
|
- RegistryTypes,
|
|
- RegistryType,
|
|
- decodeToDataItem,
|
|
- encodeDataItem,
|
|
- cbor,
|
|
-};
|
|
-
|
|
-export {
|
|
- URRegistryDecoder,
|
|
- Bytes,
|
|
- CryptoAccount,
|
|
- CryptoHDKey,
|
|
- CryptoKeypath,
|
|
- CryptoCoinInfo,
|
|
- CryptoCoinInfoType,
|
|
- CryptoCoinInfoNetwork,
|
|
- CryptoECKey,
|
|
- CryptoOutput,
|
|
- CryptoPSBT,
|
|
- MultiKey,
|
|
- ScriptExpressions,
|
|
- PathComponent,
|
|
- extend,
|
|
-};
|
|
-
|
|
-export default URlib;
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/lib/DataItem.ts b/node_modules/@keystonehq/bc-ur-registry/src/lib/DataItem.ts
|
|
deleted file mode 100644
|
|
index 9727f7e..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/lib/DataItem.ts
|
|
+++ /dev/null
|
|
@@ -1,25 +0,0 @@
|
|
-export class DataItem {
|
|
- private tag?: number;
|
|
- private data: any;
|
|
-
|
|
- constructor(data: any, tag?: number) {
|
|
- this.data = data;
|
|
- this.tag = tag;
|
|
- }
|
|
-
|
|
- public setTag = (tag?: number) => {
|
|
- this.tag = tag;
|
|
- };
|
|
-
|
|
- public clearTag = () => {
|
|
- this.tag = undefined;
|
|
- };
|
|
-
|
|
- public getTag = () => {
|
|
- return this.tag;
|
|
- };
|
|
-
|
|
- public getData = () => {
|
|
- return this.data;
|
|
- };
|
|
-}
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/lib/cbor-sync.js b/node_modules/@keystonehq/bc-ur-registry/src/lib/cbor-sync.js
|
|
deleted file mode 100644
|
|
index 63e5b3a..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/lib/cbor-sync.js
|
|
+++ /dev/null
|
|
@@ -1,695 +0,0 @@
|
|
-(function (global, factory) {
|
|
- if (typeof define === 'function' && define.amd) {
|
|
- define([], factory);
|
|
- } else if (typeof module !== 'undefined' && module.exports) {
|
|
- module.exports = factory();
|
|
- } else {
|
|
- global.CBOR = factory();
|
|
- }
|
|
-})(this, function () {
|
|
- const { DataItem } = require('./DataItem');
|
|
- var CBOR = (function () {
|
|
- function BinaryHex(hex) {
|
|
- this.$hex = hex;
|
|
- }
|
|
- BinaryHex.prototype = {
|
|
- length: function () {
|
|
- return this.$hex.length / 2;
|
|
- },
|
|
- toString: function (format) {
|
|
- if (!format || format === 'hex' || format === 16) return this.$hex;
|
|
- if (format === 'utf-8') {
|
|
- var encoded = '';
|
|
- for (var i = 0; i < this.$hex.length; i += 2) {
|
|
- encoded += '%' + this.$hex.substring(i, i + 2);
|
|
- }
|
|
- return decodeURIComponent(encoded);
|
|
- }
|
|
- if (format === 'latin') {
|
|
- var encoded = [];
|
|
- for (var i = 0; i < this.$hex.length; i += 2) {
|
|
- encoded.push(parseInt(this.$hex.substring(i, i + 2), 16));
|
|
- }
|
|
- return String.fromCharCode.apply(String, encoded);
|
|
- }
|
|
- throw new Error('Unrecognised format: ' + format);
|
|
- },
|
|
- };
|
|
- BinaryHex.fromLatinString = function (latinString) {
|
|
- var hex = '';
|
|
- for (var i = 0; i < latinString.length; i++) {
|
|
- var pair = latinString.charCodeAt(i).toString(16);
|
|
- if (pair.length === 1) pair = '0' + pair;
|
|
- hex += pair;
|
|
- }
|
|
- return new BinaryHex(hex);
|
|
- };
|
|
- BinaryHex.fromUtf8String = function (utf8String) {
|
|
- var encoded = encodeURIComponent(utf8String);
|
|
- var hex = '';
|
|
- for (var i = 0; i < encoded.length; i++) {
|
|
- if (encoded.charAt(i) === '%') {
|
|
- hex += encoded.substring(i + 1, i + 3);
|
|
- i += 2;
|
|
- } else {
|
|
- var hexPair = encoded.charCodeAt(i).toString(16);
|
|
- if (hexPair.length < 2) hexPair = '0' + hexPair;
|
|
- hex += hexPair;
|
|
- }
|
|
- }
|
|
- return new BinaryHex(hex);
|
|
- };
|
|
-
|
|
- var semanticEncoders = [];
|
|
- var semanticDecoders = {};
|
|
-
|
|
- var notImplemented = function (label) {
|
|
- return function () {
|
|
- throw new Error(label + ' not implemented');
|
|
- };
|
|
- };
|
|
-
|
|
- function Reader() {}
|
|
- Reader.prototype = {
|
|
- peekByte: notImplemented('peekByte'),
|
|
- readByte: notImplemented('readByte'),
|
|
- readChunk: notImplemented('readChunk'),
|
|
- readFloat16: function () {
|
|
- var half = this.readUint16();
|
|
- var exponent = (half & 0x7fff) >> 10;
|
|
- var mantissa = half & 0x3ff;
|
|
- var negative = half & 0x8000;
|
|
- if (exponent === 0x1f) {
|
|
- if (mantissa === 0) {
|
|
- return negative ? -Infinity : Infinity;
|
|
- }
|
|
- return NaN;
|
|
- }
|
|
- var magnitude = exponent
|
|
- ? Math.pow(2, exponent - 25) * (1024 + mantissa)
|
|
- : Math.pow(2, -24) * mantissa;
|
|
- return negative ? -magnitude : magnitude;
|
|
- },
|
|
- readFloat32: function () {
|
|
- var intValue = this.readUint32();
|
|
- var exponent = (intValue & 0x7fffffff) >> 23;
|
|
- var mantissa = intValue & 0x7fffff;
|
|
- var negative = intValue & 0x80000000;
|
|
- if (exponent === 0xff) {
|
|
- if (mantissa === 0) {
|
|
- return negative ? -Infinity : Infinity;
|
|
- }
|
|
- return NaN;
|
|
- }
|
|
- var magnitude = exponent
|
|
- ? Math.pow(2, exponent - 23 - 127) * (8388608 + mantissa)
|
|
- : Math.pow(2, -23 - 126) * mantissa;
|
|
- return negative ? -magnitude : magnitude;
|
|
- },
|
|
- readFloat64: function () {
|
|
- var int1 = this.readUint32(),
|
|
- int2 = this.readUint32();
|
|
- var exponent = (int1 >> 20) & 0x7ff;
|
|
- var mantissa = (int1 & 0xfffff) * 4294967296 + int2;
|
|
- var negative = int1 & 0x80000000;
|
|
- if (exponent === 0x7ff) {
|
|
- if (mantissa === 0) {
|
|
- return negative ? -Infinity : Infinity;
|
|
- }
|
|
- return NaN;
|
|
- }
|
|
- var magnitude = exponent
|
|
- ? Math.pow(2, exponent - 52 - 1023) * (4503599627370496 + mantissa)
|
|
- : Math.pow(2, -52 - 1022) * mantissa;
|
|
- return negative ? -magnitude : magnitude;
|
|
- },
|
|
- readUint16: function () {
|
|
- return this.readByte() * 256 + this.readByte();
|
|
- },
|
|
- readUint32: function () {
|
|
- return this.readUint16() * 65536 + this.readUint16();
|
|
- },
|
|
- readUint64: function () {
|
|
- return this.readUint32() * 4294967296 + this.readUint32();
|
|
- },
|
|
- };
|
|
- function Writer() {}
|
|
- Writer.prototype = {
|
|
- writeByte: notImplemented('writeByte'),
|
|
- result: notImplemented('result'),
|
|
- writeFloat16: notImplemented('writeFloat16'),
|
|
- writeFloat32: notImplemented('writeFloat32'),
|
|
- writeFloat64: notImplemented('writeFloat64'),
|
|
- writeUint16: function (value) {
|
|
- this.writeByte((value >> 8) & 0xff);
|
|
- this.writeByte(value & 0xff);
|
|
- },
|
|
- writeUint32: function (value) {
|
|
- this.writeUint16((value >> 16) & 0xffff);
|
|
- this.writeUint16(value & 0xffff);
|
|
- },
|
|
- writeUint64: function (value) {
|
|
- if (value >= 9007199254740992 || value <= -9007199254740992) {
|
|
- throw new Error(
|
|
- 'Cannot encode Uint64 of: ' +
|
|
- value +
|
|
- ' magnitude to big (floating point errors)',
|
|
- );
|
|
- }
|
|
- this.writeUint32(Math.floor(value / 4294967296));
|
|
- this.writeUint32(value % 4294967296);
|
|
- },
|
|
- writeString: notImplemented('writeString'),
|
|
- canWriteBinary: function (chunk) {
|
|
- return false;
|
|
- },
|
|
- writeBinary: notImplemented('writeChunk'),
|
|
- };
|
|
-
|
|
- function readHeaderRaw(reader) {
|
|
- var firstByte = reader.readByte();
|
|
- var majorType = firstByte >> 5,
|
|
- value = firstByte & 0x1f;
|
|
- return { type: majorType, value: value };
|
|
- }
|
|
-
|
|
- function valueFromHeader(header, reader) {
|
|
- var value = header.value;
|
|
- if (value < 24) {
|
|
- return value;
|
|
- } else if (value == 24) {
|
|
- return reader.readByte();
|
|
- } else if (value == 25) {
|
|
- return reader.readUint16();
|
|
- } else if (value == 26) {
|
|
- return reader.readUint32();
|
|
- } else if (value == 27) {
|
|
- return reader.readUint64();
|
|
- } else if (value == 31) {
|
|
- // special value for non-terminating arrays/objects
|
|
- return null;
|
|
- }
|
|
- notImplemented('Additional info: ' + value)();
|
|
- }
|
|
-
|
|
- function writeHeaderRaw(type, value, writer) {
|
|
- writer.writeByte((type << 5) | value);
|
|
- }
|
|
-
|
|
- function writeHeader(type, value, writer) {
|
|
- var firstByte = type << 5;
|
|
- if (value < 24) {
|
|
- writer.writeByte(firstByte | value);
|
|
- } else if (value < 256) {
|
|
- writer.writeByte(firstByte | 24);
|
|
- writer.writeByte(value);
|
|
- } else if (value < 65536) {
|
|
- writer.writeByte(firstByte | 25);
|
|
- writer.writeUint16(value);
|
|
- } else if (value < 4294967296) {
|
|
- writer.writeByte(firstByte | 26);
|
|
- writer.writeUint32(value);
|
|
- } else {
|
|
- writer.writeByte(firstByte | 27);
|
|
- writer.writeUint64(value);
|
|
- }
|
|
- }
|
|
-
|
|
- var stopCode = new Error(); // Just a unique object, that won't compare strictly equal to anything else
|
|
-
|
|
- function decodeReader(reader) {
|
|
- var header = readHeaderRaw(reader);
|
|
- switch (header.type) {
|
|
- case 0:
|
|
- return valueFromHeader(header, reader);
|
|
- case 1:
|
|
- return -1 - valueFromHeader(header, reader);
|
|
- case 2:
|
|
- return reader.readChunk(valueFromHeader(header, reader));
|
|
- case 3:
|
|
- var buffer = reader.readChunk(valueFromHeader(header, reader));
|
|
- return buffer.toString('utf-8');
|
|
- case 4:
|
|
- case 5:
|
|
- var arrayLength = valueFromHeader(header, reader);
|
|
- var result = [];
|
|
- if (arrayLength !== null) {
|
|
- if (header.type === 5) {
|
|
- arrayLength *= 2;
|
|
- }
|
|
- for (var i = 0; i < arrayLength; i++) {
|
|
- result[i] = decodeReader(reader);
|
|
- }
|
|
- } else {
|
|
- var item;
|
|
- while ((item = decodeReader(reader)) !== stopCode) {
|
|
- result.push(item);
|
|
- }
|
|
- }
|
|
- if (header.type === 5) {
|
|
- var objResult = {};
|
|
- for (var i = 0; i < result.length; i += 2) {
|
|
- objResult[result[i]] = result[i + 1];
|
|
- }
|
|
- return objResult;
|
|
- } else {
|
|
- return result;
|
|
- }
|
|
- case 6:
|
|
- var tag = valueFromHeader(header, reader);
|
|
- var decoder = semanticDecoders[tag];
|
|
- var result = decodeReader(reader);
|
|
- return decoder ? decoder(result) : result;
|
|
- case 7:
|
|
- if (header.value === 25) {
|
|
- return reader.readFloat16();
|
|
- } else if (header.value === 26) {
|
|
- return reader.readFloat32();
|
|
- } else if (header.value === 27) {
|
|
- return reader.readFloat64();
|
|
- }
|
|
- switch (valueFromHeader(header, reader)) {
|
|
- case 20:
|
|
- return false;
|
|
- case 21:
|
|
- return true;
|
|
- case 22:
|
|
- return null;
|
|
- case 23:
|
|
- return undefined;
|
|
- case null:
|
|
- return stopCode;
|
|
- default:
|
|
- throw new Error('Unknown fixed value: ' + header.value);
|
|
- }
|
|
- default:
|
|
- throw new Error('Unsupported header: ' + JSON.stringify(header));
|
|
- }
|
|
- throw new Error('not implemented yet');
|
|
- }
|
|
-
|
|
- function encodeWriter(data, writer) {
|
|
- for (var i = 0; i < semanticEncoders.length; i++) {
|
|
- var replacement = semanticEncoders[i].fn(data);
|
|
- if (replacement !== undefined) {
|
|
- writeHeader(6, semanticEncoders[i].tag, writer);
|
|
- return encodeWriter(replacement, writer);
|
|
- }
|
|
- }
|
|
-
|
|
- if (data && typeof data.toCBOR === 'function') {
|
|
- data = data.toCBOR();
|
|
- }
|
|
-
|
|
- if (data === false) {
|
|
- writeHeader(7, 20, writer);
|
|
- } else if (data === true) {
|
|
- writeHeader(7, 21, writer);
|
|
- } else if (data === null) {
|
|
- writeHeader(7, 22, writer);
|
|
- } else if (data === undefined) {
|
|
- writeHeader(7, 23, writer);
|
|
- } else if (typeof data === 'number') {
|
|
- if (
|
|
- Math.floor(data) === data &&
|
|
- data < 9007199254740992 &&
|
|
- data > -9007199254740992
|
|
- ) {
|
|
- // Integer
|
|
- if (data < 0) {
|
|
- writeHeader(1, -1 - data, writer);
|
|
- } else {
|
|
- writeHeader(0, data, writer);
|
|
- }
|
|
- } else {
|
|
- writeHeaderRaw(7, 27, writer);
|
|
- writer.writeFloat64(data);
|
|
- }
|
|
- } else if (typeof data === 'string') {
|
|
- writer.writeString(data, function (length) {
|
|
- writeHeader(3, length, writer);
|
|
- });
|
|
- } else if (writer.canWriteBinary(data)) {
|
|
- writer.writeBinary(data, function (length) {
|
|
- writeHeader(2, length, writer);
|
|
- });
|
|
- } else if (typeof data === 'object') {
|
|
- if (api.config.useToJSON && typeof data.toJSON === 'function') {
|
|
- data = data.toJSON();
|
|
- }
|
|
- if (Array.isArray(data)) {
|
|
- writeHeader(4, data.length, writer);
|
|
- for (var i = 0; i < data.length; i++) {
|
|
- encodeWriter(data[i], writer);
|
|
- }
|
|
- } else {
|
|
- var keys = Object.keys(data);
|
|
- writeHeader(5, keys.length, writer);
|
|
- for (var i = 0; i < keys.length; i++) {
|
|
- const number = parseInt(keys[i]);
|
|
- if (isNaN(number)) {
|
|
- encodeWriter(keys[i], writer);
|
|
- encodeWriter(data[keys[i]], writer);
|
|
- } else {
|
|
- encodeWriter(number, writer);
|
|
- encodeWriter(data[keys[i]], writer);
|
|
- }
|
|
- }
|
|
- }
|
|
- } else {
|
|
- throw new Error('CBOR encoding not supported: ' + data);
|
|
- }
|
|
- }
|
|
-
|
|
- var readerFunctions = [];
|
|
- var writerFunctions = [];
|
|
-
|
|
- var api = {
|
|
- config: {
|
|
- useToJSON: true,
|
|
- },
|
|
- addWriter: function (format, writerFunction) {
|
|
- if (typeof format === 'string') {
|
|
- writerFunctions.push(function (f) {
|
|
- if (format === f) return writerFunction(f);
|
|
- });
|
|
- } else {
|
|
- writerFunctions.push(format);
|
|
- }
|
|
- },
|
|
- addReader: function (format, readerFunction) {
|
|
- if (typeof format === 'string') {
|
|
- readerFunctions.push(function (data, f) {
|
|
- if (format === f) return readerFunction(data, f);
|
|
- });
|
|
- } else {
|
|
- readerFunctions.push(format);
|
|
- }
|
|
- },
|
|
- encode: function (data, format) {
|
|
- for (var i = 0; i < writerFunctions.length; i++) {
|
|
- var func = writerFunctions[i];
|
|
- var writer = func(format);
|
|
- if (writer) {
|
|
- encodeWriter(data, writer);
|
|
- return writer.result();
|
|
- }
|
|
- }
|
|
- throw new Error('Unsupported output format: ' + format);
|
|
- },
|
|
- // DataItem: {getData: () => any}
|
|
- encodeDataItem: function (data, format) {
|
|
- for (var i = 0; i < writerFunctions.length; i++) {
|
|
- var func = writerFunctions[i];
|
|
- var writer = func(format);
|
|
- if (writer) {
|
|
- if (data.getTag() !== undefined) {
|
|
- encodeWriter(data, writer);
|
|
- return writer.result();
|
|
- } else {
|
|
- encodeWriter(data.getData(), writer);
|
|
- return writer.result();
|
|
- }
|
|
- }
|
|
- }
|
|
- throw new Error('Unsupported output format: ' + format);
|
|
- },
|
|
- decode: function (data, format) {
|
|
- for (var i = 0; i < readerFunctions.length; i++) {
|
|
- var func = readerFunctions[i];
|
|
- var reader = func(data, format);
|
|
- if (reader) {
|
|
- return decodeReader(reader);
|
|
- }
|
|
- }
|
|
- throw new Error('Unsupported input format: ' + format);
|
|
- },
|
|
- decodeToDataItem: function (data, format) {
|
|
- for (var i = 0; i < readerFunctions.length; i++) {
|
|
- var func = readerFunctions[i];
|
|
- var reader = func(data, format);
|
|
- if (reader) {
|
|
- const result = decodeReader(reader);
|
|
- if (result instanceof DataItem) {
|
|
- return result;
|
|
- } else {
|
|
- return new DataItem(result);
|
|
- }
|
|
- }
|
|
- }
|
|
- throw new Error('Unsupported input format: ' + format);
|
|
- },
|
|
- addSemanticEncode: function (tag, fn) {
|
|
- if (typeof tag !== 'number' || tag % 1 !== 0 || tag < 0) {
|
|
- throw new Error('Tag must be a positive integer');
|
|
- }
|
|
- semanticEncoders.push({ tag: tag, fn: fn });
|
|
- return this;
|
|
- },
|
|
- addSemanticDecode: function (tag, fn) {
|
|
- if (typeof tag !== 'number' || tag % 1 !== 0 || tag < 0) {
|
|
- throw new Error('Tag must be a positive integer');
|
|
- }
|
|
- semanticDecoders[tag] = fn;
|
|
- return this;
|
|
- },
|
|
- Reader: Reader,
|
|
- Writer: Writer,
|
|
- };
|
|
-
|
|
- /** Node.js Buffers **/
|
|
- function BufferReader(buffer) {
|
|
- this.buffer = buffer;
|
|
- this.pos = 0;
|
|
- }
|
|
- BufferReader.prototype = Object.create(Reader.prototype);
|
|
- BufferReader.prototype.peekByte = function () {
|
|
- return this.buffer[this.pos];
|
|
- };
|
|
- BufferReader.prototype.readByte = function () {
|
|
- return this.buffer[this.pos++];
|
|
- };
|
|
- BufferReader.prototype.readUint16 = function () {
|
|
- var result = this.buffer.readUInt16BE(this.pos);
|
|
- this.pos += 2;
|
|
- return result;
|
|
- };
|
|
- BufferReader.prototype.readUint32 = function () {
|
|
- var result = this.buffer.readUInt32BE(this.pos);
|
|
- this.pos += 4;
|
|
- return result;
|
|
- };
|
|
- BufferReader.prototype.readFloat32 = function () {
|
|
- var result = this.buffer.readFloatBE(this.pos);
|
|
- this.pos += 4;
|
|
- return result;
|
|
- };
|
|
- BufferReader.prototype.readFloat64 = function () {
|
|
- var result = this.buffer.readDoubleBE(this.pos);
|
|
- this.pos += 8;
|
|
- return result;
|
|
- };
|
|
- BufferReader.prototype.readChunk = function (length) {
|
|
- var result = Buffer.alloc(length);
|
|
- this.buffer.copy(result, 0, this.pos, (this.pos += length));
|
|
- return result;
|
|
- };
|
|
-
|
|
- function BufferWriter(stringFormat) {
|
|
- this.byteLength = 0;
|
|
- this.defaultBufferLength = 16384; // 16k
|
|
- this.latestBuffer = Buffer.alloc(this.defaultBufferLength);
|
|
- this.latestBufferOffset = 0;
|
|
- this.completeBuffers = [];
|
|
- this.stringFormat = stringFormat;
|
|
- }
|
|
- BufferWriter.prototype = Object.create(Writer.prototype);
|
|
- BufferWriter.prototype.writeByte = function (value) {
|
|
- this.latestBuffer[this.latestBufferOffset++] = value;
|
|
- if (this.latestBufferOffset >= this.latestBuffer.length) {
|
|
- this.completeBuffers.push(this.latestBuffer);
|
|
- this.latestBuffer = Buffer.alloc(this.defaultBufferLength);
|
|
- this.latestBufferOffset = 0;
|
|
- }
|
|
- this.byteLength++;
|
|
- };
|
|
- BufferWriter.prototype.writeFloat32 = function (value) {
|
|
- var buffer = Buffer.alloc(4);
|
|
- buffer.writeFloatBE(value, 0);
|
|
- this.writeBuffer(buffer);
|
|
- };
|
|
- BufferWriter.prototype.writeFloat64 = function (value) {
|
|
- var buffer = Buffer.alloc(8);
|
|
- buffer.writeDoubleBE(value, 0);
|
|
- this.writeBuffer(buffer);
|
|
- };
|
|
- BufferWriter.prototype.writeString = function (string, lengthFunc) {
|
|
- var buffer = Buffer.from(string, 'utf-8');
|
|
- lengthFunc(buffer.length);
|
|
- this.writeBuffer(buffer);
|
|
- };
|
|
- BufferWriter.prototype.canWriteBinary = function (data) {
|
|
- return data instanceof Buffer;
|
|
- };
|
|
- BufferWriter.prototype.writeBinary = function (buffer, lengthFunc) {
|
|
- lengthFunc(buffer.length);
|
|
- this.writeBuffer(buffer);
|
|
- };
|
|
- BufferWriter.prototype.writeBuffer = function (chunk) {
|
|
- if (!(chunk instanceof Buffer))
|
|
- throw new TypeError('BufferWriter only accepts Buffers');
|
|
- if (!this.latestBufferOffset) {
|
|
- this.completeBuffers.push(chunk);
|
|
- } else if (
|
|
- this.latestBuffer.length - this.latestBufferOffset >=
|
|
- chunk.length
|
|
- ) {
|
|
- chunk.copy(this.latestBuffer, this.latestBufferOffset);
|
|
- this.latestBufferOffset += chunk.length;
|
|
- if (this.latestBufferOffset >= this.latestBuffer.length) {
|
|
- this.completeBuffers.push(this.latestBuffer);
|
|
- this.latestBuffer = Buffer.alloc(this.defaultBufferLength);
|
|
- this.latestBufferOffset = 0;
|
|
- }
|
|
- } else {
|
|
- this.completeBuffers.push(
|
|
- this.latestBuffer.slice(0, this.latestBufferOffset),
|
|
- );
|
|
- this.completeBuffers.push(chunk);
|
|
- this.latestBuffer = Buffer.alloc(this.defaultBufferLength);
|
|
- this.latestBufferOffset = 0;
|
|
- }
|
|
- this.byteLength += chunk.length;
|
|
- };
|
|
- BufferWriter.prototype.result = function () {
|
|
- // Copies them all into a single Buffer
|
|
- var result = Buffer.alloc(this.byteLength);
|
|
- var offset = 0;
|
|
- for (var i = 0; i < this.completeBuffers.length; i++) {
|
|
- var buffer = this.completeBuffers[i];
|
|
- buffer.copy(result, offset, 0, buffer.length);
|
|
- offset += buffer.length;
|
|
- }
|
|
- if (this.latestBufferOffset) {
|
|
- this.latestBuffer.copy(result, offset, 0, this.latestBufferOffset);
|
|
- }
|
|
-
|
|
- if (this.stringFormat) return result.toString(this.stringFormat);
|
|
- return result;
|
|
- };
|
|
-
|
|
- if (typeof Buffer === 'function') {
|
|
- api.addReader(function (data, format) {
|
|
- if (data instanceof Buffer) {
|
|
- return new BufferReader(data);
|
|
- }
|
|
- if (format === 'hex' || format === 'base64') {
|
|
- var buffer = Buffer.from(data, format);
|
|
- return new BufferReader(buffer);
|
|
- }
|
|
- });
|
|
- api.addWriter(function (format) {
|
|
- if (!format || format === 'buffer') {
|
|
- return new BufferWriter();
|
|
- } else if (format === 'hex' || format === 'base64') {
|
|
- return new BufferWriter(format);
|
|
- }
|
|
- });
|
|
- }
|
|
-
|
|
- /** Hex-encoding (and Latin1) for browser **/
|
|
- function HexReader(hex) {
|
|
- this.hex = hex;
|
|
- this.pos = 0;
|
|
- }
|
|
- HexReader.prototype = Object.create(Reader.prototype);
|
|
- HexReader.prototype.peekByte = function () {
|
|
- var pair = this.hex.substring(this.pos, 2);
|
|
- return parseInt(pair, 16);
|
|
- };
|
|
- HexReader.prototype.readByte = function () {
|
|
- var pair = this.hex.substring(this.pos, this.pos + 2);
|
|
- this.pos += 2;
|
|
- return parseInt(pair, 16);
|
|
- };
|
|
- HexReader.prototype.readChunk = function (length) {
|
|
- var hex = this.hex.substring(this.pos, this.pos + length * 2);
|
|
- this.pos += length * 2;
|
|
- if (typeof Buffer === 'function') return Buffer.from(hex, 'hex');
|
|
- return new BinaryHex(hex);
|
|
- };
|
|
-
|
|
- function HexWriter(finalFormat) {
|
|
- this.$hex = '';
|
|
- this.finalFormat = finalFormat || 'hex';
|
|
- }
|
|
- HexWriter.prototype = Object.create(Writer.prototype);
|
|
- HexWriter.prototype.writeByte = function (value) {
|
|
- if (value < 0 || value > 255)
|
|
- throw new Error('Byte value out of range: ' + value);
|
|
- var hex = value.toString(16);
|
|
- if (hex.length == 1) {
|
|
- hex = '0' + hex;
|
|
- }
|
|
- this.$hex += hex;
|
|
- };
|
|
- HexWriter.prototype.canWriteBinary = function (chunk) {
|
|
- return (
|
|
- chunk instanceof BinaryHex ||
|
|
- (typeof Buffer === 'function' && chunk instanceof Buffer)
|
|
- );
|
|
- };
|
|
- HexWriter.prototype.writeBinary = function (chunk, lengthFunction) {
|
|
- if (chunk instanceof BinaryHex) {
|
|
- lengthFunction(chunk.length());
|
|
- this.$hex += chunk.$hex;
|
|
- } else if (typeof Buffer === 'function' && chunk instanceof Buffer) {
|
|
- lengthFunction(chunk.length);
|
|
- this.$hex += chunk.toString('hex');
|
|
- } else {
|
|
- throw new TypeError('HexWriter only accepts BinaryHex or Buffers');
|
|
- }
|
|
- };
|
|
- HexWriter.prototype.result = function () {
|
|
- if (this.finalFormat === 'buffer' && typeof Buffer === 'function') {
|
|
- return Buffer.from(this.$hex, 'hex');
|
|
- }
|
|
- return new BinaryHex(this.$hex).toString(this.finalFormat);
|
|
- };
|
|
- HexWriter.prototype.writeString = function (string, lengthFunction) {
|
|
- var buffer = BinaryHex.fromUtf8String(string);
|
|
- lengthFunction(buffer.length());
|
|
- this.$hex += buffer.$hex;
|
|
- };
|
|
-
|
|
- api.addReader(function (data, format) {
|
|
- if (data instanceof BinaryHex || data.$hex) {
|
|
- return new HexReader(data.$hex);
|
|
- }
|
|
- if (format === 'hex') {
|
|
- return new HexReader(data);
|
|
- }
|
|
- });
|
|
- api.addWriter(function (format) {
|
|
- if (format === 'hex') {
|
|
- return new HexWriter();
|
|
- }
|
|
- });
|
|
-
|
|
- return api;
|
|
- })();
|
|
-
|
|
- CBOR.addSemanticEncode(0, function (data) {
|
|
- if (data instanceof Date) {
|
|
- return data.toISOString();
|
|
- }
|
|
- })
|
|
- .addSemanticDecode(0, function (isoString) {
|
|
- return new Date(isoString);
|
|
- })
|
|
- .addSemanticDecode(1, function (isoString) {
|
|
- return new Date(isoString);
|
|
- });
|
|
-
|
|
- return CBOR;
|
|
-});
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/lib/index.ts b/node_modules/@keystonehq/bc-ur-registry/src/lib/index.ts
|
|
deleted file mode 100644
|
|
index deb0156..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/lib/index.ts
|
|
+++ /dev/null
|
|
@@ -1,9 +0,0 @@
|
|
-export {
|
|
- encodeDataItem,
|
|
- decodeToDataItem,
|
|
- addSemanticDecode,
|
|
- addSemanticEncode,
|
|
- addReader,
|
|
- addWriter,
|
|
-} from './cbor-sync';
|
|
-export { DataItem } from './DataItem';
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/patchCBOR.ts b/node_modules/@keystonehq/bc-ur-registry/src/patchCBOR.ts
|
|
deleted file mode 100644
|
|
index b9909a7..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/patchCBOR.ts
|
|
+++ /dev/null
|
|
@@ -1,11 +0,0 @@
|
|
-import { patchTags } from './utils';
|
|
-import { RegistryTypes } from './RegistryType';
|
|
-import { ScriptExpressions } from './ScriptExpression';
|
|
-
|
|
-const registryTags = Object.values(RegistryTypes)
|
|
- .filter((r) => !!r.getTag())
|
|
- .map((r) => r.getTag());
|
|
-const scriptExpressionTags = Object.values(ScriptExpressions).map((se) =>
|
|
- se.getTag(),
|
|
-);
|
|
-patchTags(registryTags.concat(scriptExpressionTags));
|
|
diff --git a/node_modules/@keystonehq/bc-ur-registry/src/utils.ts b/node_modules/@keystonehq/bc-ur-registry/src/utils.ts
|
|
deleted file mode 100644
|
|
index ee39b78..0000000
|
|
--- a/node_modules/@keystonehq/bc-ur-registry/src/utils.ts
|
|
+++ /dev/null
|
|
@@ -1,19 +0,0 @@
|
|
-import { addSemanticDecode, addSemanticEncode, DataItem } from './lib';
|
|
-
|
|
-const alreadyPatchedTag = [];
|
|
-export const patchTags = (tags: number[]) => {
|
|
- tags.forEach((tag) => {
|
|
- if (alreadyPatchedTag.find((i) => i === tag)) return;
|
|
- addSemanticEncode(tag, (data: any) => {
|
|
- if (data instanceof DataItem) {
|
|
- if (data.getTag() === tag) {
|
|
- return data.getData();
|
|
- }
|
|
- }
|
|
- });
|
|
- addSemanticDecode(tag, (data: any) => {
|
|
- return new DataItem(data, tag);
|
|
- });
|
|
- alreadyPatchedTag.push(tag);
|
|
- });
|
|
-};
|