Files
pezkuwi-common/packages/hw-ledger/bundle-pezkuwi-hw-ledger.js

9474 lines
301 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@pezkuwi/util')) :
typeof define === 'function' && define.amd ? define(['exports', '@pezkuwi/util'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.pezkuwiHwLedger = {}, global.pezkuwiUtil));
})(this, (function (exports, util$1) { 'use strict';
const global = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : window;
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function getDefaultExportFromCjs (x) {
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
}
function getAugmentedNamespace(n) {
if (n.__esModule) return n;
var f = n.default;
if (typeof f == "function") {
var a = function a () {
if (this instanceof a) {
return Reflect.construct(f, arguments, this.constructor);
}
return f.apply(this, arguments);
};
a.prototype = f.prototype;
} else a = {};
Object.defineProperty(a, '__esModule', {value: true});
Object.keys(n).forEach(function (k) {
var d = Object.getOwnPropertyDescriptor(n, k);
Object.defineProperty(a, k, d.get ? d : {
enumerable: true,
get: function () {
return n[k];
}
});
});
return a;
}
var dist$1 = {};
var legacy_apps = {};
var supported_apps = {};
var substrate_app = {};
var common$1 = {};
(function (exports$1) {
Object.defineProperty(exports$1, "__esModule", { value: true });
exports$1.ERROR_DESCRIPTION = exports$1.ECDSA_PUBKEY_LEN = exports$1.ED25519_PUBKEY_LEN = exports$1.CHUNK_SIZE = void 0;
exports$1.errorCodeToString = errorCodeToString;
exports$1.processErrorResponse = processErrorResponse;
exports$1.getVersion = getVersion;
exports$1.serializePath = serializePath;
exports$1.CHUNK_SIZE = 250;
exports$1.ED25519_PUBKEY_LEN = 32;
exports$1.ECDSA_PUBKEY_LEN = 33;
exports$1.ERROR_DESCRIPTION = {
1: 'U2F: Unknown',
2: 'U2F: Bad request',
3: 'U2F: Configuration unsupported',
4: 'U2F: Device Ineligible',
5: 'U2F: Timeout',
14: 'Timeout',
0x9000: 'No errors',
0x9001: 'Device is busy',
0x6802: 'Error deriving keys',
0x6400: 'Execution Error',
0x6700: 'Wrong Length',
0x6982: 'Empty Buffer',
0x6983: 'Output buffer too small',
0x6984: 'Data is invalid',
0x6985: 'Conditions not satisfied',
0x6986: 'Transaction rejected',
0x6a80: 'Bad key handle',
0x6b00: 'Invalid P1/P2',
0x6d00: 'Instruction not supported',
0x6e01: 'App does not seem to be open',
0x6f00: 'Unknown error',
0x6f01: 'Sign/verify error',
};
function errorCodeToString(statusCode) {
if (statusCode in exports$1.ERROR_DESCRIPTION)
return exports$1.ERROR_DESCRIPTION[statusCode];
return `Unknown Status Code: ${statusCode}`;
}
function isDict(v) {
return typeof v === 'object' && v !== null && !(v instanceof Array) && !(v instanceof Date);
}
function processErrorResponse(response) {
if (response != null) {
if (isDict(response)) {
if (Object.prototype.hasOwnProperty.call(response, 'returnCode')) {
return {
return_code: response.returnCode,
error_message: errorCodeToString(response.returnCode),
};
}
if (Object.prototype.hasOwnProperty.call(response, 'statusCode')) {
return {
return_code: response.statusCode,
error_message: errorCodeToString(response.statusCode),
};
}
if (Object.prototype.hasOwnProperty.call(response, 'return_code') &&
Object.prototype.hasOwnProperty.call(response, 'error_message')) {
return response;
}
}
return {
return_code: 0xffff,
error_message: response.toString(),
};
}
return {
return_code: 0xffff,
error_message: response.toString(),
};
}
async function getVersion(transport, cla) {
try {
const response = await transport.send(cla, 0 , 0, 0);
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
if (response.length !== 14 && response.length !== 20) {
return {
return_code: 27012 ,
error_message: errorCodeToString(27012 ),
};
}
let major, minor, patch, deviceLocked, targetId;
if (response.length === 14) {
major = response.readUInt16BE(1);
minor = response.readUInt16BE(3);
patch = response.readUInt16BE(5);
deviceLocked = response[7] === 1;
targetId = (response[8] << 24) + (response[9] << 16) + (response[10] << 8) + (response[11] << 0);
}
else {
major = response.readUInt32BE(1);
minor = response.readUInt32BE(5);
patch = response.readUInt32BE(9);
deviceLocked = response[13] === 1;
targetId = (response[14] << 24) + (response[15] << 16) + (response[16] << 8) + (response[17] << 0);
}
return {
return_code: returnCode,
error_message: errorCodeToString(returnCode),
test_mode: response[0] !== 0,
major,
minor,
patch,
deviceLocked,
target_id: targetId.toString(16),
};
}
catch (e) {
return processErrorResponse(e);
}
}
function serializePath(slip0044, account, change, addressIndex) {
if (!Number.isInteger(account))
throw new Error('Input must be an integer');
if (!Number.isInteger(change))
throw new Error('Input must be an integer');
if (!Number.isInteger(addressIndex))
throw new Error('Input must be an integer');
const buf = Buffer.alloc(20);
buf.writeUInt32LE(0x8000002c, 0);
buf.writeUInt32LE(slip0044, 4);
buf.writeUInt32LE(account, 8);
buf.writeUInt32LE(change, 12);
buf.writeUInt32LE(addressIndex, 16);
return buf;
}
} (common$1));
getDefaultExportFromCjs(common$1);
Object.defineProperty(substrate_app, "__esModule", { value: true });
substrate_app.SubstrateApp = void 0;
const common_1$2 = common$1;
class SubstrateApp {
constructor(transport, cla, slip0044) {
if (transport == null) {
throw new Error('Transport has not been defined');
}
this.transport = transport;
this.cla = cla;
this.slip0044 = slip0044;
}
static serializePath(slip0044, account, change, addressIndex) {
if (!Number.isInteger(account))
throw new Error('Input must be an integer');
if (!Number.isInteger(change))
throw new Error('Input must be an integer');
if (!Number.isInteger(addressIndex))
throw new Error('Input must be an integer');
const buf = Buffer.alloc(20);
buf.writeUInt32LE(0x8000002c, 0);
buf.writeUInt32LE(slip0044, 4);
buf.writeUInt32LE(account, 8);
buf.writeUInt32LE(change, 12);
buf.writeUInt32LE(addressIndex, 16);
return buf;
}
static GetChunks(message) {
const chunks = [];
const buffer = Buffer.from(message);
for (let i = 0; i < buffer.length; i += common_1$2.CHUNK_SIZE) {
let end = i + common_1$2.CHUNK_SIZE;
if (i > buffer.length) {
end = buffer.length;
}
chunks.push(buffer.subarray(i, end));
}
return chunks;
}
static signGetChunks(slip0044, account, change, addressIndex, message) {
const chunks = [];
const bip44Path = SubstrateApp.serializePath(slip0044, account, change, addressIndex);
chunks.push(bip44Path);
chunks.push(...SubstrateApp.GetChunks(message));
return chunks;
}
async getVersion() {
try {
return await (0, common_1$2.getVersion)(this.transport, this.cla);
}
catch (e) {
return (0, common_1$2.processErrorResponse)(e);
}
}
async appInfo() {
return await this.transport.send(0xb0, 0x01, 0, 0).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
let appName = '';
let appVersion = '';
let flagLen = 0;
let flagsValue = 0;
if (response[0] !== 1) {
return {
return_code: 0x9001,
error_message: 'response format ID not recognized',
};
}
else {
const appNameLen = response[1];
appName = response.subarray(2, 2 + appNameLen).toString('ascii');
let idx = 2 + appNameLen;
const appVersionLen = response[idx];
idx += 1;
appVersion = response.subarray(idx, idx + appVersionLen).toString('ascii');
idx += appVersionLen;
const appFlagsLen = response[idx];
idx += 1;
flagLen = appFlagsLen;
flagsValue = response[idx];
}
return {
return_code: returnCode,
error_message: (0, common_1$2.errorCodeToString)(returnCode),
appName: appName === '' || 'err',
appVersion: appVersion === '' || 'err',
flagLen,
flagsValue,
flag_recovery: (flagsValue & 1) !== 0,
flag_signed_mcu_code: (flagsValue & 2) !== 0,
flag_onboarded: (flagsValue & 4) !== 0,
flag_pin_validated: (flagsValue & 128) !== 0,
};
}, common_1$2.processErrorResponse);
}
async getAddress(account, change, addressIndex, requireConfirmation = false, scheme = 0 ) {
const bip44Path = SubstrateApp.serializePath(this.slip0044, account, change, addressIndex);
let p1 = 0;
if (requireConfirmation)
p1 = 1;
let p2 = 0;
if (!isNaN(scheme))
p2 = scheme;
return await this.transport.send(this.cla, 1 , p1, p2, bip44Path).then(response => {
const errorCodeData = response.subarray(-2);
const errorCode = errorCodeData[0] * 256 + errorCodeData[1];
let pubkeyLen = 32;
if (scheme == 2 ) {
pubkeyLen = 33;
}
return {
pubKey: response.subarray(0, pubkeyLen).toString('hex'),
address: response.subarray(pubkeyLen, response.length - 2).toString('ascii'),
return_code: errorCode,
error_message: (0, common_1$2.errorCodeToString)(errorCode),
};
}, common_1$2.processErrorResponse);
}
async signSendChunk(chunkIdx, chunkNum, chunk, scheme = 0 , ins = 2 ) {
let payloadType = 1 ;
if (chunkIdx === 1) {
payloadType = 0 ;
}
if (chunkIdx === chunkNum) {
payloadType = 2 ;
}
let p2 = 0;
if (!isNaN(scheme))
p2 = scheme;
return await this.transport.send(this.cla, ins, payloadType, p2, chunk, [36864 , 0x6984, 0x6a80]).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
let errorMessage = (0, common_1$2.errorCodeToString)(returnCode);
let signature = null;
if (returnCode === 0x6a80 || returnCode === 0x6984) {
errorMessage = response.subarray(0, response.length - 2).toString('ascii');
}
else if (response.length > 2) {
signature = response.subarray(0, response.length - 2);
}
return {
signature,
return_code: returnCode,
error_message: errorMessage,
};
}, common_1$2.processErrorResponse);
}
async signImpl(account, change, addressIndex, message, ins, scheme = 0 ) {
const chunks = SubstrateApp.signGetChunks(this.slip0044, account, change, addressIndex, message);
return await this.signSendChunk(1, chunks.length, chunks[0], scheme, ins).then(async () => {
let result;
for (let i = 1; i < chunks.length; i += 1) {
result = await this.signSendChunk(1 + i, chunks.length, chunks[i], scheme, ins);
if (result.return_code !== 36864 ) {
break;
}
}
return {
return_code: result.return_code,
error_message: result.error_message,
signature: result.signature,
};
}, common_1$2.processErrorResponse);
}
async sign(account, change, addressIndex, message, scheme = 0 ) {
return await this.signImpl(account, change, addressIndex, message, 2 , scheme);
}
async signRaw(account, change, addressIndex, message, scheme = 0 ) {
return await this.signImpl(account, change, addressIndex, message, 3 , scheme);
}
async getAllowlistPubKey() {
return await this.transport.send(this.cla, 144 , 0, 0).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
console.log(response);
const pubkey = response.subarray(0, 32);
if (response.length !== 34) {
return {
return_code: 0x6984,
error_message: (0, common_1$2.errorCodeToString)(0x6984),
};
}
return {
return_code: returnCode,
error_message: (0, common_1$2.errorCodeToString)(returnCode),
pubkey,
};
}, common_1$2.processErrorResponse);
}
async setAllowlistPubKey(pk) {
return await this.transport.send(this.cla, 145 , 0, 0, pk).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
return {
return_code: returnCode,
error_message: (0, common_1$2.errorCodeToString)(returnCode),
};
}, common_1$2.processErrorResponse);
}
async getAllowlistHash() {
return await this.transport.send(this.cla, 146 , 0, 0).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
console.log(response);
const hash = response.subarray(0, 32);
if (response.length !== 34) {
return {
return_code: 0x6984,
error_message: (0, common_1$2.errorCodeToString)(0x6984),
};
}
return {
return_code: returnCode,
error_message: (0, common_1$2.errorCodeToString)(returnCode),
hash,
};
}, common_1$2.processErrorResponse);
}
async uploadSendChunk(chunkIdx, chunkNum, chunk) {
let payloadType = 1 ;
if (chunkIdx === 1) {
payloadType = 0 ;
}
if (chunkIdx === chunkNum) {
payloadType = 2 ;
}
return await this.transport.send(this.cla, 147 , payloadType, 0, chunk, [36864 ]).then(response => {
const errorCodeData = response.subarray(-2);
const returnCode = errorCodeData[0] * 256 + errorCodeData[1];
const errorMessage = (0, common_1$2.errorCodeToString)(returnCode);
return {
return_code: returnCode,
error_message: errorMessage,
};
}, common_1$2.processErrorResponse);
}
async uploadAllowlist(message) {
const chunks = [];
chunks.push(Buffer.from([0]));
chunks.push(...SubstrateApp.GetChunks(message));
return await this.uploadSendChunk(1, chunks.length, chunks[0]).then(async (result) => {
if (result.return_code !== 36864 ) {
return {
return_code: result.return_code,
error_message: result.error_message,
};
}
for (let i = 1; i < chunks.length; i += 1) {
result = await this.uploadSendChunk(1 + i, chunks.length, chunks[i]);
if (result.return_code !== 36864 ) {
break;
}
}
return {
return_code: result.return_code,
error_message: result.error_message,
};
}, common_1$2.processErrorResponse);
}
}
substrate_app.SubstrateApp = SubstrateApp;
(function (exports$1) {
Object.defineProperty(exports$1, "__esModule", { value: true });
exports$1.supportedApps = void 0;
exports$1.newSubstrateApp = newSubstrateApp;
exports$1.getAppParams = getAppParams;
const substrate_app_1 = substrate_app;
function newSubstrateApp(transport, chainName) {
const requestedApp = exports$1.supportedApps.find((app) => {
return app.name.toLowerCase() === chainName.toLowerCase();
});
if (requestedApp != null) {
return new substrate_app_1.SubstrateApp(transport, requestedApp.cla, requestedApp.slip0044);
}
throw new Error(`Error: ${chainName} not supported`);
}
function getAppParams(chainName) {
const params = exports$1.supportedApps.find((app) => {
return app.name.toLowerCase() === chainName.toLowerCase();
});
return params;
}
exports$1.supportedApps = [
{
name: 'Polkadot',
cla: 0x90,
slip0044: 0x80000162,
ss58_addr_type: 0,
},
{
name: 'Polymesh',
cla: 0x91,
slip0044: 0x80000253,
ss58_addr_type: 12,
},
{
name: 'Dock',
cla: 0x92,
slip0044: 0x80000252,
ss58_addr_type: 22,
},
{
name: 'Centrifuge',
cla: 0x93,
slip0044: 0x800002eb,
ss58_addr_type: 36,
},
{
name: 'Edgeware',
cla: 0x94,
slip0044: 0x8000020b,
ss58_addr_type: 7,
},
{
name: 'Equilibrium',
cla: 0x95,
slip0044: 0x85f5e0fd,
ss58_addr_type: 67,
},
{
name: 'Statemint',
cla: 0x96,
slip0044: 0x80000162,
ss58_addr_type: 0,
},
{
name: 'Statemine',
cla: 0x97,
slip0044: 0x800001b2,
ss58_addr_type: 2,
},
{
name: 'Nodle',
cla: 0x98,
slip0044: 0x800003eb,
ss58_addr_type: 37,
},
{
name: 'Kusama',
cla: 0x99,
slip0044: 0x800001b2,
ss58_addr_type: 2,
},
{
name: 'Karura',
cla: 0x9a,
slip0044: 0x800002ae,
ss58_addr_type: 8,
},
{
name: 'Acala',
cla: 0x9b,
slip0044: 0x80000313,
ss58_addr_type: 10,
},
{
name: 'VTB',
cla: 0x9c,
slip0044: 0x800002b6,
ss58_addr_type: 42,
},
{
name: 'Peer',
cla: 0x9d,
slip0044: 0x800002ce,
ss58_addr_type: 42,
},
{
name: 'Genshiro',
cla: 0x9e,
slip0044: 0x85f5e0fc,
ss58_addr_type: 67,
},
{
name: 'Sora',
cla: 0x9f,
slip0044: 0x80000269,
ss58_addr_type: 69,
},
{
name: 'Polkadex',
cla: 0xa0,
slip0044: 0x8000031f,
ss58_addr_type: 88,
},
{
name: 'Bifrost',
cla: 0xa1,
slip0044: 0x80000314,
ss58_addr_type: 6,
},
{
name: 'Reef',
cla: 0xa2,
slip0044: 0x80000333,
ss58_addr_type: 42,
},
{
name: 'XXNetwork',
cla: 0xa3,
slip0044: 0x800007a3,
ss58_addr_type: 55,
},
{
name: 'AlephZero',
cla: 0xa4,
slip0044: 0x80000283,
ss58_addr_type: 42,
},
{
name: 'Interlay',
cla: 0xa5,
slip0044: 0x80000162,
ss58_addr_type: 2032,
},
{
name: 'Parallel',
cla: 0xa6,
slip0044: 0x80000162,
ss58_addr_type: 172,
},
{
name: 'Picasso',
cla: 0xa7,
slip0044: 0x800001b2,
ss58_addr_type: 49,
},
{
name: 'Composable',
cla: 0xa8,
slip0044: 0x80000162,
ss58_addr_type: 49,
},
{
name: 'Astar',
cla: 0xa9,
slip0044: 0x8000032a,
ss58_addr_type: 5,
},
{
name: 'OriginTrail',
cla: 0xaa,
slip0044: 0x80000162,
ss58_addr_type: 101,
},
{
name: 'HydraDX',
cla: 0xab,
slip0044: 0x80000162,
ss58_addr_type: 63,
},
{
name: 'Stafi',
cla: 0xac,
slip0044: 0x8000038b,
ss58_addr_type: 20,
},
{
name: 'Unique',
cla: 0xad,
slip0044: 0x80000295,
ss58_addr_type: 7391,
},
{
name: 'BifrostKusama',
cla: 0xae,
slip0044: 0x80000314,
ss58_addr_type: 6,
},
{
name: 'Phala',
cla: 0xaf,
slip0044: 0x80000162,
ss58_addr_type: 30,
},
{
name: 'Khala',
cla: 0xb1,
slip0044: 0x800001b2,
ss58_addr_type: 30,
},
{
name: 'Darwinia',
cla: 0xb2,
slip0044: 0x80000162,
ss58_addr_type: 18,
},
{
name: 'Ajuna',
cla: 0xb3,
slip0044: 0x80000162,
ss58_addr_type: 1328,
},
{
name: 'Bittensor',
cla: 0xb4,
slip0044: 0x800003ed,
ss58_addr_type: 42,
},
{
name: 'Ternoa',
cla: 0xb5,
slip0044: 0x800003e3,
ss58_addr_type: 42,
},
{
name: 'Pendulum',
cla: 0xb6,
slip0044: 0x80000162,
ss58_addr_type: 56,
},
{
name: 'Zeitgeist',
cla: 0xb7,
slip0044: 0x80000162,
ss58_addr_type: 73,
},
{
name: 'Joystream',
cla: 0xb8,
slip0044: 0x80000219,
ss58_addr_type: 126,
},
{
name: 'Enjin',
cla: 0xb9,
slip0044: 0x80000483,
ss58_addr_type: 2135,
},
{
name: 'Matrixchain',
cla: 0xba,
slip0044: 0x80000483,
ss58_addr_type: 1110,
},
{
name: 'Quartz',
cla: 0xbb,
slip0044: 0x80000277,
ss58_addr_type: 255,
},
{
name: 'Avail',
cla: 0xbc,
slip0044: 0x800002c5,
ss58_addr_type: 42,
},
{
name: 'Entropy',
cla: 0xbd,
slip0044: 0x80000520,
ss58_addr_type: 42,
},
{
name: 'Peaq',
cla: 0x61,
slip0044: 0x8000003c,
ss58_addr_type: 42,
},
{
name: 'AvailRecovery',
cla: 0xbe,
slip0044: 0x80000162,
ss58_addr_type: 42,
},
];
} (supported_apps));
getDefaultExportFromCjs(supported_apps);
Object.defineProperty(legacy_apps, "__esModule", { value: true });
legacy_apps.newKusamaApp = newKusamaApp;
legacy_apps.newPolkadotApp = newPolkadotApp;
legacy_apps.newPolymeshApp = newPolymeshApp;
legacy_apps.newDockApp = newDockApp;
legacy_apps.newCentrifugeApp = newCentrifugeApp;
legacy_apps.newEdgewareApp = newEdgewareApp;
legacy_apps.newEquilibriumApp = newEquilibriumApp;
legacy_apps.newGenshiroApp = newGenshiroApp;
legacy_apps.newStatemintApp = newStatemintApp;
legacy_apps.newStatemineApp = newStatemineApp;
legacy_apps.newNodleApp = newNodleApp;
legacy_apps.newSoraApp = newSoraApp;
legacy_apps.newPolkadexApp = newPolkadexApp;
legacy_apps.newBifrostApp = newBifrostApp;
legacy_apps.newKaruraApp = newKaruraApp;
legacy_apps.newReefApp = newReefApp;
legacy_apps.newAcalaApp = newAcalaApp;
legacy_apps.newXXNetworkApp = newXXNetworkApp;
legacy_apps.newParallelApp = newParallelApp;
legacy_apps.newAstarApp = newAstarApp;
legacy_apps.newComposableApp = newComposableApp;
legacy_apps.newStafiApp = newStafiApp;
legacy_apps.newAlephZeroApp = newAlephZeroApp;
legacy_apps.newInterlayApp = newInterlayApp;
legacy_apps.newUniqueApp = newUniqueApp;
legacy_apps.newBifrostKusamaApp = newBifrostKusamaApp;
const supported_apps_1 = supported_apps;
function newKusamaApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Kusama');
}
function newPolkadotApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Polkadot');
}
function newPolymeshApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Polymesh');
}
function newDockApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Dock');
}
function newCentrifugeApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Centrifuge');
}
function newEdgewareApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Edgeware');
}
function newEquilibriumApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Equilibrium');
}
function newGenshiroApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Genshiro');
}
function newStatemintApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Statemint');
}
function newStatemineApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Statemine');
}
function newNodleApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Nodle');
}
function newSoraApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Sora');
}
function newPolkadexApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Polkadex');
}
function newBifrostApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Bifrost');
}
function newKaruraApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Karura');
}
function newReefApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Reef');
}
function newAcalaApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Acala');
}
function newXXNetworkApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'XXNetwork');
}
function newParallelApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Parallel');
}
function newAstarApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Astar');
}
function newComposableApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Composable');
}
function newStafiApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Stafi');
}
function newAlephZeroApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'AlephZero');
}
function newInterlayApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Interlay');
}
function newUniqueApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'Unique');
}
function newBifrostKusamaApp(transport) {
return (0, supported_apps_1.newSubstrateApp)(transport, 'BifrostKusama');
}
var generic_app = {};
/*! Axios v1.13.2 Copyright (c) 2025 Matt Zabriskie and contributors */
/**
* Create a bound version of a function with a specified `this` context
*
* @param {Function} fn - The function to bind
* @param {*} thisArg - The value to be passed as the `this` parameter
* @returns {Function} A new function that will call the original function with the specified `this` context
*/
function bind(fn, thisArg) {
return function wrap() {
return fn.apply(thisArg, arguments);
};
}
// utils is a library of generic helper functions non-specific to axios
const {toString} = Object.prototype;
const {getPrototypeOf} = Object;
const {iterator, toStringTag} = Symbol;
const kindOf = (cache => thing => {
const str = toString.call(thing);
return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
})(Object.create(null));
const kindOfTest = (type) => {
type = type.toLowerCase();
return (thing) => kindOf(thing) === type
};
const typeOfTest = type => thing => typeof thing === type;
/**
* Determine if a value is an Array
*
* @param {Object} val The value to test
*
* @returns {boolean} True if value is an Array, otherwise false
*/
const {isArray} = Array;
/**
* Determine if a value is undefined
*
* @param {*} val The value to test
*
* @returns {boolean} True if the value is undefined, otherwise false
*/
const isUndefined = typeOfTest('undefined');
/**
* Determine if a value is a Buffer
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a Buffer, otherwise false
*/
function isBuffer(val) {
return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
&& isFunction$1(val.constructor.isBuffer) && val.constructor.isBuffer(val);
}
/**
* Determine if a value is an ArrayBuffer
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is an ArrayBuffer, otherwise false
*/
const isArrayBuffer = kindOfTest('ArrayBuffer');
/**
* Determine if a value is a view on an ArrayBuffer
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
*/
function isArrayBufferView(val) {
let result;
if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
result = ArrayBuffer.isView(val);
} else {
result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
}
return result;
}
/**
* Determine if a value is a String
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a String, otherwise false
*/
const isString = typeOfTest('string');
/**
* Determine if a value is a Function
*
* @param {*} val The value to test
* @returns {boolean} True if value is a Function, otherwise false
*/
const isFunction$1 = typeOfTest('function');
/**
* Determine if a value is a Number
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a Number, otherwise false
*/
const isNumber = typeOfTest('number');
/**
* Determine if a value is an Object
*
* @param {*} thing The value to test
*
* @returns {boolean} True if value is an Object, otherwise false
*/
const isObject$1 = (thing) => thing !== null && typeof thing === 'object';
/**
* Determine if a value is a Boolean
*
* @param {*} thing The value to test
* @returns {boolean} True if value is a Boolean, otherwise false
*/
const isBoolean = thing => thing === true || thing === false;
/**
* Determine if a value is a plain Object
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a plain Object, otherwise false
*/
const isPlainObject = (val) => {
if (kindOf(val) !== 'object') {
return false;
}
const prototype = getPrototypeOf(val);
return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);
};
/**
* Determine if a value is an empty object (safely handles Buffers)
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is an empty object, otherwise false
*/
const isEmptyObject = (val) => {
// Early return for non-objects or Buffers to prevent RangeError
if (!isObject$1(val) || isBuffer(val)) {
return false;
}
try {
return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;
} catch (e) {
// Fallback for any other objects that might cause RangeError with Object.keys()
return false;
}
};
/**
* Determine if a value is a Date
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a Date, otherwise false
*/
const isDate = kindOfTest('Date');
/**
* Determine if a value is a File
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a File, otherwise false
*/
const isFile = kindOfTest('File');
/**
* Determine if a value is a Blob
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a Blob, otherwise false
*/
const isBlob = kindOfTest('Blob');
/**
* Determine if a value is a FileList
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a File, otherwise false
*/
const isFileList = kindOfTest('FileList');
/**
* Determine if a value is a Stream
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a Stream, otherwise false
*/
const isStream = (val) => isObject$1(val) && isFunction$1(val.pipe);
/**
* Determine if a value is a FormData
*
* @param {*} thing The value to test
*
* @returns {boolean} True if value is an FormData, otherwise false
*/
const isFormData = (thing) => {
let kind;
return thing && (
(typeof FormData === 'function' && thing instanceof FormData) || (
isFunction$1(thing.append) && (
(kind = kindOf(thing)) === 'formdata' ||
// detect form-data instance
(kind === 'object' && isFunction$1(thing.toString) && thing.toString() === '[object FormData]')
)
)
)
};
/**
* Determine if a value is a URLSearchParams object
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a URLSearchParams object, otherwise false
*/
const isURLSearchParams = kindOfTest('URLSearchParams');
const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);
/**
* Trim excess whitespace off the beginning and end of a string
*
* @param {String} str The String to trim
*
* @returns {String} The String freed of excess whitespace
*/
const trim = (str) => str.trim ?
str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
/**
* Iterate over an Array or an Object invoking a function for each item.
*
* If `obj` is an Array callback will be called passing
* the value, index, and complete array for each item.
*
* If 'obj' is an Object callback will be called passing
* the value, key, and complete object for each property.
*
* @param {Object|Array} obj The object to iterate
* @param {Function} fn The callback to invoke for each item
*
* @param {Boolean} [allOwnKeys = false]
* @returns {any}
*/
function forEach(obj, fn, {allOwnKeys = false} = {}) {
// Don't bother if no value provided
if (obj === null || typeof obj === 'undefined') {
return;
}
let i;
let l;
// Force an array if not already something iterable
if (typeof obj !== 'object') {
/*eslint no-param-reassign:0*/
obj = [obj];
}
if (isArray(obj)) {
// Iterate over array values
for (i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
// Buffer check
if (isBuffer(obj)) {
return;
}
// Iterate over object keys
const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);
const len = keys.length;
let key;
for (i = 0; i < len; i++) {
key = keys[i];
fn.call(null, obj[key], key, obj);
}
}
}
function findKey(obj, key) {
if (isBuffer(obj)){
return null;
}
key = key.toLowerCase();
const keys = Object.keys(obj);
let i = keys.length;
let _key;
while (i-- > 0) {
_key = keys[i];
if (key === _key.toLowerCase()) {
return _key;
}
}
return null;
}
const _global = (() => {
/*eslint no-undef:0*/
if (typeof globalThis !== "undefined") return globalThis;
return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : commonjsGlobal)
})();
const isContextDefined = (context) => !isUndefined(context) && context !== _global;
/**
* Accepts varargs expecting each argument to be an object, then
* immutably merges the properties of each object and returns result.
*
* When multiple objects contain the same key the later object in
* the arguments list will take precedence.
*
* Example:
*
* ```js
* var result = merge({foo: 123}, {foo: 456});
* console.log(result.foo); // outputs 456
* ```
*
* @param {Object} obj1 Object to merge
*
* @returns {Object} Result of all merge properties
*/
function merge(/* obj1, obj2, obj3, ... */) {
const {caseless, skipUndefined} = isContextDefined(this) && this || {};
const result = {};
const assignValue = (val, key) => {
const targetKey = caseless && findKey(result, key) || key;
if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
result[targetKey] = merge(result[targetKey], val);
} else if (isPlainObject(val)) {
result[targetKey] = merge({}, val);
} else if (isArray(val)) {
result[targetKey] = val.slice();
} else if (!skipUndefined || !isUndefined(val)) {
result[targetKey] = val;
}
};
for (let i = 0, l = arguments.length; i < l; i++) {
arguments[i] && forEach(arguments[i], assignValue);
}
return result;
}
/**
* Extends object a by mutably adding to it the properties of object b.
*
* @param {Object} a The object to be extended
* @param {Object} b The object to copy properties from
* @param {Object} thisArg The object to bind function to
*
* @param {Boolean} [allOwnKeys]
* @returns {Object} The resulting value of object a
*/
const extend = (a, b, thisArg, {allOwnKeys}= {}) => {
forEach(b, (val, key) => {
if (thisArg && isFunction$1(val)) {
a[key] = bind(val, thisArg);
} else {
a[key] = val;
}
}, {allOwnKeys});
return a;
};
/**
* Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
*
* @param {string} content with BOM
*
* @returns {string} content value without BOM
*/
const stripBOM = (content) => {
if (content.charCodeAt(0) === 0xFEFF) {
content = content.slice(1);
}
return content;
};
/**
* Inherit the prototype methods from one constructor into another
* @param {function} constructor
* @param {function} superConstructor
* @param {object} [props]
* @param {object} [descriptors]
*
* @returns {void}
*/
const inherits = (constructor, superConstructor, props, descriptors) => {
constructor.prototype = Object.create(superConstructor.prototype, descriptors);
constructor.prototype.constructor = constructor;
Object.defineProperty(constructor, 'super', {
value: superConstructor.prototype
});
props && Object.assign(constructor.prototype, props);
};
/**
* Resolve object with deep prototype chain to a flat object
* @param {Object} sourceObj source object
* @param {Object} [destObj]
* @param {Function|Boolean} [filter]
* @param {Function} [propFilter]
*
* @returns {Object}
*/
const toFlatObject = (sourceObj, destObj, filter, propFilter) => {
let props;
let i;
let prop;
const merged = {};
destObj = destObj || {};
// eslint-disable-next-line no-eq-null,eqeqeq
if (sourceObj == null) return destObj;
do {
props = Object.getOwnPropertyNames(sourceObj);
i = props.length;
while (i-- > 0) {
prop = props[i];
if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {
destObj[prop] = sourceObj[prop];
merged[prop] = true;
}
}
sourceObj = filter !== false && getPrototypeOf(sourceObj);
} while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
return destObj;
};
/**
* Determines whether a string ends with the characters of a specified string
*
* @param {String} str
* @param {String} searchString
* @param {Number} [position= 0]
*
* @returns {boolean}
*/
const endsWith = (str, searchString, position) => {
str = String(str);
if (position === undefined || position > str.length) {
position = str.length;
}
position -= searchString.length;
const lastIndex = str.indexOf(searchString, position);
return lastIndex !== -1 && lastIndex === position;
};
/**
* Returns new array from array like object or null if failed
*
* @param {*} [thing]
*
* @returns {?Array}
*/
const toArray = (thing) => {
if (!thing) return null;
if (isArray(thing)) return thing;
let i = thing.length;
if (!isNumber(i)) return null;
const arr = new Array(i);
while (i-- > 0) {
arr[i] = thing[i];
}
return arr;
};
/**
* Checking if the Uint8Array exists and if it does, it returns a function that checks if the
* thing passed in is an instance of Uint8Array
*
* @param {TypedArray}
*
* @returns {Array}
*/
// eslint-disable-next-line func-names
const isTypedArray = (TypedArray => {
// eslint-disable-next-line func-names
return thing => {
return TypedArray && thing instanceof TypedArray;
};
})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));
/**
* For each entry in the object, call the function with the key and value.
*
* @param {Object<any, any>} obj - The object to iterate over.
* @param {Function} fn - The function to call for each entry.
*
* @returns {void}
*/
const forEachEntry = (obj, fn) => {
const generator = obj && obj[iterator];
const _iterator = generator.call(obj);
let result;
while ((result = _iterator.next()) && !result.done) {
const pair = result.value;
fn.call(obj, pair[0], pair[1]);
}
};
/**
* It takes a regular expression and a string, and returns an array of all the matches
*
* @param {string} regExp - The regular expression to match against.
* @param {string} str - The string to search.
*
* @returns {Array<boolean>}
*/
const matchAll = (regExp, str) => {
let matches;
const arr = [];
while ((matches = regExp.exec(str)) !== null) {
arr.push(matches);
}
return arr;
};
/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */
const isHTMLForm = kindOfTest('HTMLFormElement');
const toCamelCase = str => {
return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,
function replacer(m, p1, p2) {
return p1.toUpperCase() + p2;
}
);
};
/* Creating a function that will check if an object has a property. */
const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);
/**
* Determine if a value is a RegExp object
*
* @param {*} val The value to test
*
* @returns {boolean} True if value is a RegExp object, otherwise false
*/
const isRegExp = kindOfTest('RegExp');
const reduceDescriptors = (obj, reducer) => {
const descriptors = Object.getOwnPropertyDescriptors(obj);
const reducedDescriptors = {};
forEach(descriptors, (descriptor, name) => {
let ret;
if ((ret = reducer(descriptor, name, obj)) !== false) {
reducedDescriptors[name] = ret || descriptor;
}
});
Object.defineProperties(obj, reducedDescriptors);
};
/**
* Makes all methods read-only
* @param {Object} obj
*/
const freezeMethods = (obj) => {
reduceDescriptors(obj, (descriptor, name) => {
// skip restricted props in strict mode
if (isFunction$1(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {
return false;
}
const value = obj[name];
if (!isFunction$1(value)) return;
descriptor.enumerable = false;
if ('writable' in descriptor) {
descriptor.writable = false;
return;
}
if (!descriptor.set) {
descriptor.set = () => {
throw Error('Can not rewrite read-only method \'' + name + '\'');
};
}
});
};
const toObjectSet = (arrayOrString, delimiter) => {
const obj = {};
const define = (arr) => {
arr.forEach(value => {
obj[value] = true;
});
};
isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));
return obj;
};
const noop = () => {};
const toFiniteNumber = (value, defaultValue) => {
return value != null && Number.isFinite(value = +value) ? value : defaultValue;
};
/**
* If the thing is a FormData object, return true, otherwise return false.
*
* @param {unknown} thing - The thing to check.
*
* @returns {boolean}
*/
function isSpecCompliantForm(thing) {
return !!(thing && isFunction$1(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);
}
const toJSONObject = (obj) => {
const stack = new Array(10);
const visit = (source, i) => {
if (isObject$1(source)) {
if (stack.indexOf(source) >= 0) {
return;
}
//Buffer check
if (isBuffer(source)) {
return source;
}
if(!('toJSON' in source)) {
stack[i] = source;
const target = isArray(source) ? [] : {};
forEach(source, (value, key) => {
const reducedValue = visit(value, i + 1);
!isUndefined(reducedValue) && (target[key] = reducedValue);
});
stack[i] = undefined;
return target;
}
}
return source;
};
return visit(obj, 0);
};
const isAsyncFn = kindOfTest('AsyncFunction');
const isThenable = (thing) =>
thing && (isObject$1(thing) || isFunction$1(thing)) && isFunction$1(thing.then) && isFunction$1(thing.catch);
// original code
// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34
const _setImmediate = ((setImmediateSupported, postMessageSupported) => {
if (setImmediateSupported) {
return setImmediate;
}
return postMessageSupported ? ((token, callbacks) => {
_global.addEventListener("message", ({source, data}) => {
if (source === _global && data === token) {
callbacks.length && callbacks.shift()();
}
}, false);
return (cb) => {
callbacks.push(cb);
_global.postMessage(token, "*");
}
})(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);
})(
typeof setImmediate === 'function',
isFunction$1(_global.postMessage)
);
const asap = typeof queueMicrotask !== 'undefined' ?
queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);
// *********************
const isIterable = (thing) => thing != null && isFunction$1(thing[iterator]);
var utils$1 = {
isArray,
isArrayBuffer,
isBuffer,
isFormData,
isArrayBufferView,
isString,
isNumber,
isBoolean,
isObject: isObject$1,
isPlainObject,
isEmptyObject,
isReadableStream,
isRequest,
isResponse,
isHeaders,
isUndefined,
isDate,
isFile,
isBlob,
isRegExp,
isFunction: isFunction$1,
isStream,
isURLSearchParams,
isTypedArray,
isFileList,
forEach,
merge,
extend,
trim,
stripBOM,
inherits,
toFlatObject,
kindOf,
kindOfTest,
endsWith,
toArray,
forEachEntry,
matchAll,
isHTMLForm,
hasOwnProperty,
hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection
reduceDescriptors,
freezeMethods,
toObjectSet,
toCamelCase,
noop,
toFiniteNumber,
findKey,
global: _global,
isContextDefined,
isSpecCompliantForm,
toJSONObject,
isAsyncFn,
isThenable,
setImmediate: _setImmediate,
asap,
isIterable
};
/**
* Create an Error with the specified message, config, error code, request and response.
*
* @param {string} message The error message.
* @param {string} [code] The error code (for example, 'ECONNABORTED').
* @param {Object} [config] The config.
* @param {Object} [request] The request.
* @param {Object} [response] The response.
*
* @returns {Error} The created error.
*/
function AxiosError(message, code, config, request, response) {
Error.call(this);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
} else {
this.stack = (new Error()).stack;
}
this.message = message;
this.name = 'AxiosError';
code && (this.code = code);
config && (this.config = config);
request && (this.request = request);
if (response) {
this.response = response;
this.status = response.status ? response.status : null;
}
}
utils$1.inherits(AxiosError, Error, {
toJSON: function toJSON() {
return {
// Standard
message: this.message,
name: this.name,
// Microsoft
description: this.description,
number: this.number,
// Mozilla
fileName: this.fileName,
lineNumber: this.lineNumber,
columnNumber: this.columnNumber,
stack: this.stack,
// Axios
config: utils$1.toJSONObject(this.config),
code: this.code,
status: this.status
};
}
});
const prototype$1 = AxiosError.prototype;
const descriptors = {};
[
'ERR_BAD_OPTION_VALUE',
'ERR_BAD_OPTION',
'ECONNABORTED',
'ETIMEDOUT',
'ERR_NETWORK',
'ERR_FR_TOO_MANY_REDIRECTS',
'ERR_DEPRECATED',
'ERR_BAD_RESPONSE',
'ERR_BAD_REQUEST',
'ERR_CANCELED',
'ERR_NOT_SUPPORT',
'ERR_INVALID_URL'
// eslint-disable-next-line func-names
].forEach(code => {
descriptors[code] = {value: code};
});
Object.defineProperties(AxiosError, descriptors);
Object.defineProperty(prototype$1, 'isAxiosError', {value: true});
// eslint-disable-next-line func-names
AxiosError.from = (error, code, config, request, response, customProps) => {
const axiosError = Object.create(prototype$1);
utils$1.toFlatObject(error, axiosError, function filter(obj) {
return obj !== Error.prototype;
}, prop => {
return prop !== 'isAxiosError';
});
const msg = error && error.message ? error.message : 'Error';
// Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)
const errCode = code == null && error ? error.code : code;
AxiosError.call(axiosError, msg, errCode, config, request, response);
// Chain the original error on the standard field; non-enumerable to avoid JSON noise
if (error && axiosError.cause == null) {
Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });
}
axiosError.name = (error && error.name) || 'Error';
customProps && Object.assign(axiosError, customProps);
return axiosError;
};
// eslint-disable-next-line strict
var httpAdapter = null;
/**
* Determines if the given thing is a array or js object.
*
* @param {string} thing - The object or array to be visited.
*
* @returns {boolean}
*/
function isVisitable(thing) {
return utils$1.isPlainObject(thing) || utils$1.isArray(thing);
}
/**
* It removes the brackets from the end of a string
*
* @param {string} key - The key of the parameter.
*
* @returns {string} the key without the brackets.
*/
function removeBrackets(key) {
return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key;
}
/**
* It takes a path, a key, and a boolean, and returns a string
*
* @param {string} path - The path to the current key.
* @param {string} key - The key of the current object being iterated over.
* @param {string} dots - If true, the key will be rendered with dots instead of brackets.
*
* @returns {string} The path to the current key.
*/
function renderKey(path, key, dots) {
if (!path) return key;
return path.concat(key).map(function each(token, i) {
// eslint-disable-next-line no-param-reassign
token = removeBrackets(token);
return !dots && i ? '[' + token + ']' : token;
}).join(dots ? '.' : '');
}
/**
* If the array is an array and none of its elements are visitable, then it's a flat array.
*
* @param {Array<any>} arr - The array to check
*
* @returns {boolean}
*/
function isFlatArray(arr) {
return utils$1.isArray(arr) && !arr.some(isVisitable);
}
const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) {
return /^is[A-Z]/.test(prop);
});
/**
* Convert a data object to FormData
*
* @param {Object} obj
* @param {?Object} [formData]
* @param {?Object} [options]
* @param {Function} [options.visitor]
* @param {Boolean} [options.metaTokens = true]
* @param {Boolean} [options.dots = false]
* @param {?Boolean} [options.indexes = false]
*
* @returns {Object}
**/
/**
* It converts an object into a FormData object
*
* @param {Object<any, any>} obj - The object to convert to form data.
* @param {string} formData - The FormData object to append to.
* @param {Object<string, any>} options
*
* @returns
*/
function toFormData(obj, formData, options) {
if (!utils$1.isObject(obj)) {
throw new TypeError('target must be an object');
}
// eslint-disable-next-line no-param-reassign
formData = formData || new (FormData)();
// eslint-disable-next-line no-param-reassign
options = utils$1.toFlatObject(options, {
metaTokens: true,
dots: false,
indexes: false
}, false, function defined(option, source) {
// eslint-disable-next-line no-eq-null,eqeqeq
return !utils$1.isUndefined(source[option]);
});
const metaTokens = options.metaTokens;
// eslint-disable-next-line no-use-before-define
const visitor = options.visitor || defaultVisitor;
const dots = options.dots;
const indexes = options.indexes;
const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
const useBlob = _Blob && utils$1.isSpecCompliantForm(formData);
if (!utils$1.isFunction(visitor)) {
throw new TypeError('visitor must be a function');
}
function convertValue(value) {
if (value === null) return '';
if (utils$1.isDate(value)) {
return value.toISOString();
}
if (utils$1.isBoolean(value)) {
return value.toString();
}
if (!useBlob && utils$1.isBlob(value)) {
throw new AxiosError('Blob is not supported. Use a Buffer instead.');
}
if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) {
return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
}
return value;
}
/**
* Default visitor.
*
* @param {*} value
* @param {String|Number} key
* @param {Array<String|Number>} path
* @this {FormData}
*
* @returns {boolean} return true to visit the each prop of the value recursively
*/
function defaultVisitor(value, key, path) {
let arr = value;
if (value && !path && typeof value === 'object') {
if (utils$1.endsWith(key, '{}')) {
// eslint-disable-next-line no-param-reassign
key = metaTokens ? key : key.slice(0, -2);
// eslint-disable-next-line no-param-reassign
value = JSON.stringify(value);
} else if (
(utils$1.isArray(value) && isFlatArray(value)) ||
((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))
)) {
// eslint-disable-next-line no-param-reassign
key = removeBrackets(key);
arr.forEach(function each(el, index) {
!(utils$1.isUndefined(el) || el === null) && formData.append(
// eslint-disable-next-line no-nested-ternary
indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),
convertValue(el)
);
});
return false;
}
}
if (isVisitable(value)) {
return true;
}
formData.append(renderKey(path, key, dots), convertValue(value));
return false;
}
const stack = [];
const exposedHelpers = Object.assign(predicates, {
defaultVisitor,
convertValue,
isVisitable
});
function build(value, path) {
if (utils$1.isUndefined(value)) return;
if (stack.indexOf(value) !== -1) {
throw Error('Circular reference detected in ' + path.join('.'));
}
stack.push(value);
utils$1.forEach(value, function each(el, key) {
const result = !(utils$1.isUndefined(el) || el === null) && visitor.call(
formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers
);
if (result === true) {
build(el, path ? path.concat(key) : [key]);
}
});
stack.pop();
}
if (!utils$1.isObject(obj)) {
throw new TypeError('data must be an object');
}
build(obj);
return formData;
}
/**
* It encodes a string by replacing all characters that are not in the unreserved set with
* their percent-encoded equivalents
*
* @param {string} str - The string to encode.
*
* @returns {string} The encoded string.
*/
function encode$1(str) {
const charMap = {
'!': '%21',
"'": '%27',
'(': '%28',
')': '%29',
'~': '%7E',
'%20': '+',
'%00': '\x00'
};
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
return charMap[match];
});
}
/**
* It takes a params object and converts it to a FormData object
*
* @param {Object<string, any>} params - The parameters to be converted to a FormData object.
* @param {Object<string, any>} options - The options object passed to the Axios constructor.
*
* @returns {void}
*/
function AxiosURLSearchParams(params, options) {
this._pairs = [];
params && toFormData(params, this, options);
}
const prototype = AxiosURLSearchParams.prototype;
prototype.append = function append(name, value) {
this._pairs.push([name, value]);
};
prototype.toString = function toString(encoder) {
const _encode = encoder ? function(value) {
return encoder.call(this, value, encode$1);
} : encode$1;
return this._pairs.map(function each(pair) {
return _encode(pair[0]) + '=' + _encode(pair[1]);
}, '').join('&');
};
/**
* It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their
* URI encoded counterparts
*
* @param {string} val The value to be encoded.
*
* @returns {string} The encoded value.
*/
function encode(val) {
return encodeURIComponent(val).
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%20/g, '+');
}
/**
* Build a URL by appending params to the end
*
* @param {string} url The base of the url (e.g., http://www.google.com)
* @param {object} [params] The params to be appended
* @param {?(object|Function)} options
*
* @returns {string} The formatted url
*/
function buildURL(url, params, options) {
/*eslint no-param-reassign:0*/
if (!params) {
return url;
}
const _encode = options && options.encode || encode;
if (utils$1.isFunction(options)) {
options = {
serialize: options
};
}
const serializeFn = options && options.serialize;
let serializedParams;
if (serializeFn) {
serializedParams = serializeFn(params, options);
} else {
serializedParams = utils$1.isURLSearchParams(params) ?
params.toString() :
new AxiosURLSearchParams(params, options).toString(_encode);
}
if (serializedParams) {
const hashmarkIndex = url.indexOf("#");
if (hashmarkIndex !== -1) {
url = url.slice(0, hashmarkIndex);
}
url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
}
return url;
}
class InterceptorManager {
constructor() {
this.handlers = [];
}
/**
* Add a new interceptor to the stack
*
* @param {Function} fulfilled The function to handle `then` for a `Promise`
* @param {Function} rejected The function to handle `reject` for a `Promise`
*
* @return {Number} An ID used to remove interceptor later
*/
use(fulfilled, rejected, options) {
this.handlers.push({
fulfilled,
rejected,
synchronous: options ? options.synchronous : false,
runWhen: options ? options.runWhen : null
});
return this.handlers.length - 1;
}
/**
* Remove an interceptor from the stack
*
* @param {Number} id The ID that was returned by `use`
*
* @returns {void}
*/
eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
}
/**
* Clear all interceptors from the stack
*
* @returns {void}
*/
clear() {
if (this.handlers) {
this.handlers = [];
}
}
/**
* Iterate over all the registered interceptors
*
* This method is particularly useful for skipping over any
* interceptors that may have become `null` calling `eject`.
*
* @param {Function} fn The function to call for each interceptor
*
* @returns {void}
*/
forEach(fn) {
utils$1.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
});
}
}
var InterceptorManager$1 = InterceptorManager;
var transitionalDefaults = {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
};
var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;
var FormData$1 = typeof FormData !== 'undefined' ? FormData : null;
var Blob$1 = typeof Blob !== 'undefined' ? Blob : null;
var platform$1 = {
isBrowser: true,
classes: {
URLSearchParams: URLSearchParams$1,
FormData: FormData$1,
Blob: Blob$1
},
protocols: ['http', 'https', 'file', 'blob', 'url', 'data']
};
const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';
const _navigator = typeof navigator === 'object' && navigator || undefined;
/**
* Determine if we're running in a standard browser environment
*
* This allows axios to run in a web worker, and react-native.
* Both environments support XMLHttpRequest, but not fully standard globals.
*
* web workers:
* typeof window -> undefined
* typeof document -> undefined
*
* react-native:
* navigator.product -> 'ReactNative'
* nativescript
* navigator.product -> 'NativeScript' or 'NS'
*
* @returns {boolean}
*/
const hasStandardBrowserEnv = hasBrowserEnv &&
(!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);
/**
* Determine if we're running in a standard browser webWorker environment
*
* Although the `isStandardBrowserEnv` method indicates that
* `allows axios to run in a web worker`, the WebWorker will still be
* filtered out due to its judgment standard
* `typeof window !== 'undefined' && typeof document !== 'undefined'`.
* This leads to a problem when axios post `FormData` in webWorker
*/
const hasStandardBrowserWebWorkerEnv = (() => {
return (
typeof WorkerGlobalScope !== 'undefined' &&
// eslint-disable-next-line no-undef
self instanceof WorkerGlobalScope &&
typeof self.importScripts === 'function'
);
})();
const origin = hasBrowserEnv && window.location.href || 'http://localhost';
var utils = /*#__PURE__*/Object.freeze({
__proto__: null,
hasBrowserEnv: hasBrowserEnv,
hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv,
hasStandardBrowserEnv: hasStandardBrowserEnv,
navigator: _navigator,
origin: origin
});
var platform = {
...utils,
...platform$1
};
function toURLEncodedForm(data, options) {
return toFormData(data, new platform.classes.URLSearchParams(), {
visitor: function(value, key, path, helpers) {
if (platform.isNode && utils$1.isBuffer(value)) {
this.append(key, value.toString('base64'));
return false;
}
return helpers.defaultVisitor.apply(this, arguments);
},
...options
});
}
/**
* It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
*
* @param {string} name - The name of the property to get.
*
* @returns An array of strings.
*/
function parsePropPath(name) {
// foo[x][y][z]
// foo.x.y.z
// foo-x-y-z
// foo x y z
return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => {
return match[0] === '[]' ? '' : match[1] || match[0];
});
}
/**
* Convert an array to an object.
*
* @param {Array<any>} arr - The array to convert to an object.
*
* @returns An object with the same keys and values as the array.
*/
function arrayToObject(arr) {
const obj = {};
const keys = Object.keys(arr);
let i;
const len = keys.length;
let key;
for (i = 0; i < len; i++) {
key = keys[i];
obj[key] = arr[key];
}
return obj;
}
/**
* It takes a FormData object and returns a JavaScript object
*
* @param {string} formData The FormData object to convert to JSON.
*
* @returns {Object<string, any> | null} The converted object.
*/
function formDataToJSON(formData) {
function buildPath(path, value, target, index) {
let name = path[index++];
if (name === '__proto__') return true;
const isNumericKey = Number.isFinite(+name);
const isLast = index >= path.length;
name = !name && utils$1.isArray(target) ? target.length : name;
if (isLast) {
if (utils$1.hasOwnProp(target, name)) {
target[name] = [target[name], value];
} else {
target[name] = value;
}
return !isNumericKey;
}
if (!target[name] || !utils$1.isObject(target[name])) {
target[name] = [];
}
const result = buildPath(path, value, target[name], index);
if (result && utils$1.isArray(target[name])) {
target[name] = arrayToObject(target[name]);
}
return !isNumericKey;
}
if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) {
const obj = {};
utils$1.forEachEntry(formData, (name, value) => {
buildPath(parsePropPath(name), value, obj, 0);
});
return obj;
}
return null;
}
/**
* It takes a string, tries to parse it, and if it fails, it returns the stringified version
* of the input
*
* @param {any} rawValue - The value to be stringified.
* @param {Function} parser - A function that parses a string into a JavaScript object.
* @param {Function} encoder - A function that takes a value and returns a string.
*
* @returns {string} A stringified version of the rawValue.
*/
function stringifySafely(rawValue, parser, encoder) {
if (utils$1.isString(rawValue)) {
try {
(parser || JSON.parse)(rawValue);
return utils$1.trim(rawValue);
} catch (e) {
if (e.name !== 'SyntaxError') {
throw e;
}
}
}
return (encoder || JSON.stringify)(rawValue);
}
const defaults = {
transitional: transitionalDefaults,
adapter: ['xhr', 'http', 'fetch'],
transformRequest: [function transformRequest(data, headers) {
const contentType = headers.getContentType() || '';
const hasJSONContentType = contentType.indexOf('application/json') > -1;
const isObjectPayload = utils$1.isObject(data);
if (isObjectPayload && utils$1.isHTMLForm(data)) {
data = new FormData(data);
}
const isFormData = utils$1.isFormData(data);
if (isFormData) {
return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;
}
if (utils$1.isArrayBuffer(data) ||
utils$1.isBuffer(data) ||
utils$1.isStream(data) ||
utils$1.isFile(data) ||
utils$1.isBlob(data) ||
utils$1.isReadableStream(data)
) {
return data;
}
if (utils$1.isArrayBufferView(data)) {
return data.buffer;
}
if (utils$1.isURLSearchParams(data)) {
headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);
return data.toString();
}
let isFileList;
if (isObjectPayload) {
if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {
return toURLEncodedForm(data, this.formSerializer).toString();
}
if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {
const _FormData = this.env && this.env.FormData;
return toFormData(
isFileList ? {'files[]': data} : data,
_FormData && new _FormData(),
this.formSerializer
);
}
}
if (isObjectPayload || hasJSONContentType ) {
headers.setContentType('application/json', false);
return stringifySafely(data);
}
return data;
}],
transformResponse: [function transformResponse(data) {
const transitional = this.transitional || defaults.transitional;
const forcedJSONParsing = transitional && transitional.forcedJSONParsing;
const JSONRequested = this.responseType === 'json';
if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) {
return data;
}
if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {
const silentJSONParsing = transitional && transitional.silentJSONParsing;
const strictJSONParsing = !silentJSONParsing && JSONRequested;
try {
return JSON.parse(data, this.parseReviver);
} catch (e) {
if (strictJSONParsing) {
if (e.name === 'SyntaxError') {
throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
}
throw e;
}
}
}
return data;
}],
/**
* A timeout in milliseconds to abort a request. If set to 0 (default) a
* timeout is not created.
*/
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
maxBodyLength: -1,
env: {
FormData: platform.classes.FormData,
Blob: platform.classes.Blob
},
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
},
headers: {
common: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': undefined
}
}
};
utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {
defaults.headers[method] = {};
});
var defaults$1 = defaults;
// RawAxiosHeaders whose duplicates are ignored by node
// c.f. https://nodejs.org/api/http.html#http_message_headers
const ignoreDuplicateOf = utils$1.toObjectSet([
'age', 'authorization', 'content-length', 'content-type', 'etag',
'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
'last-modified', 'location', 'max-forwards', 'proxy-authorization',
'referer', 'retry-after', 'user-agent'
]);
/**
* Parse headers into an object
*
* ```
* Date: Wed, 27 Aug 2014 08:58:49 GMT
* Content-Type: application/json
* Connection: keep-alive
* Transfer-Encoding: chunked
* ```
*
* @param {String} rawHeaders Headers needing to be parsed
*
* @returns {Object} Headers parsed into an object
*/
var parseHeaders = rawHeaders => {
const parsed = {};
let key;
let val;
let i;
rawHeaders && rawHeaders.split('\n').forEach(function parser(line) {
i = line.indexOf(':');
key = line.substring(0, i).trim().toLowerCase();
val = line.substring(i + 1).trim();
if (!key || (parsed[key] && ignoreDuplicateOf[key])) {
return;
}
if (key === 'set-cookie') {
if (parsed[key]) {
parsed[key].push(val);
} else {
parsed[key] = [val];
}
} else {
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
}
});
return parsed;
};
const $internals = Symbol('internals');
function normalizeHeader(header) {
return header && String(header).trim().toLowerCase();
}
function normalizeValue(value) {
if (value === false || value == null) {
return value;
}
return utils$1.isArray(value) ? value.map(normalizeValue) : String(value);
}
function parseTokens(str) {
const tokens = Object.create(null);
const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
let match;
while ((match = tokensRE.exec(str))) {
tokens[match[1]] = match[2];
}
return tokens;
}
const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {
if (utils$1.isFunction(filter)) {
return filter.call(this, value, header);
}
if (isHeaderNameFilter) {
value = header;
}
if (!utils$1.isString(value)) return;
if (utils$1.isString(filter)) {
return value.indexOf(filter) !== -1;
}
if (utils$1.isRegExp(filter)) {
return filter.test(value);
}
}
function formatHeader(header) {
return header.trim()
.toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
return char.toUpperCase() + str;
});
}
function buildAccessors(obj, header) {
const accessorName = utils$1.toCamelCase(' ' + header);
['get', 'set', 'has'].forEach(methodName => {
Object.defineProperty(obj, methodName + accessorName, {
value: function(arg1, arg2, arg3) {
return this[methodName].call(this, header, arg1, arg2, arg3);
},
configurable: true
});
});
}
class AxiosHeaders {
constructor(headers) {
headers && this.set(headers);
}
set(header, valueOrRewrite, rewrite) {
const self = this;
function setHeader(_value, _header, _rewrite) {
const lHeader = normalizeHeader(_header);
if (!lHeader) {
throw new Error('header name must be a non-empty string');
}
const key = utils$1.findKey(self, lHeader);
if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {
self[key || _header] = normalizeValue(_value);
}
}
const setHeaders = (headers, _rewrite) =>
utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
if (utils$1.isPlainObject(header) || header instanceof this.constructor) {
setHeaders(header, valueOrRewrite);
} else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
setHeaders(parseHeaders(header), valueOrRewrite);
} else if (utils$1.isObject(header) && utils$1.isIterable(header)) {
let obj = {}, dest, key;
for (const entry of header) {
if (!utils$1.isArray(entry)) {
throw TypeError('Object iterator must return a key-value pair');
}
obj[key = entry[0]] = (dest = obj[key]) ?
(utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];
}
setHeaders(obj, valueOrRewrite);
} else {
header != null && setHeader(valueOrRewrite, header, rewrite);
}
return this;
}
get(header, parser) {
header = normalizeHeader(header);
if (header) {
const key = utils$1.findKey(this, header);
if (key) {
const value = this[key];
if (!parser) {
return value;
}
if (parser === true) {
return parseTokens(value);
}
if (utils$1.isFunction(parser)) {
return parser.call(this, value, key);
}
if (utils$1.isRegExp(parser)) {
return parser.exec(value);
}
throw new TypeError('parser must be boolean|regexp|function');
}
}
}
has(header, matcher) {
header = normalizeHeader(header);
if (header) {
const key = utils$1.findKey(this, header);
return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
}
return false;
}
delete(header, matcher) {
const self = this;
let deleted = false;
function deleteHeader(_header) {
_header = normalizeHeader(_header);
if (_header) {
const key = utils$1.findKey(self, _header);
if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {
delete self[key];
deleted = true;
}
}
}
if (utils$1.isArray(header)) {
header.forEach(deleteHeader);
} else {
deleteHeader(header);
}
return deleted;
}
clear(matcher) {
const keys = Object.keys(this);
let i = keys.length;
let deleted = false;
while (i--) {
const key = keys[i];
if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
delete this[key];
deleted = true;
}
}
return deleted;
}
normalize(format) {
const self = this;
const headers = {};
utils$1.forEach(this, (value, header) => {
const key = utils$1.findKey(headers, header);
if (key) {
self[key] = normalizeValue(value);
delete self[header];
return;
}
const normalized = format ? formatHeader(header) : String(header).trim();
if (normalized !== header) {
delete self[header];
}
self[normalized] = normalizeValue(value);
headers[normalized] = true;
});
return this;
}
concat(...targets) {
return this.constructor.concat(this, ...targets);
}
toJSON(asStrings) {
const obj = Object.create(null);
utils$1.forEach(this, (value, header) => {
value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value);
});
return obj;
}
[Symbol.iterator]() {
return Object.entries(this.toJSON())[Symbol.iterator]();
}
toString() {
return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n');
}
getSetCookie() {
return this.get("set-cookie") || [];
}
get [Symbol.toStringTag]() {
return 'AxiosHeaders';
}
static from(thing) {
return thing instanceof this ? thing : new this(thing);
}
static concat(first, ...targets) {
const computed = new this(first);
targets.forEach((target) => computed.set(target));
return computed;
}
static accessor(header) {
const internals = this[$internals] = (this[$internals] = {
accessors: {}
});
const accessors = internals.accessors;
const prototype = this.prototype;
function defineAccessor(_header) {
const lHeader = normalizeHeader(_header);
if (!accessors[lHeader]) {
buildAccessors(prototype, _header);
accessors[lHeader] = true;
}
}
utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
return this;
}
}
AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);
// reserved names hotfix
utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {
let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`
return {
get: () => value,
set(headerValue) {
this[mapped] = headerValue;
}
}
});
utils$1.freezeMethods(AxiosHeaders);
var AxiosHeaders$1 = AxiosHeaders;
/**
* Transform the data for a request or a response
*
* @param {Array|Function} fns A single function or Array of functions
* @param {?Object} response The response object
*
* @returns {*} The resulting transformed data
*/
function transformData(fns, response) {
const config = this || defaults$1;
const context = response || config;
const headers = AxiosHeaders$1.from(context.headers);
let data = context.data;
utils$1.forEach(fns, function transform(fn) {
data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);
});
headers.normalize();
return data;
}
function isCancel(value) {
return !!(value && value.__CANCEL__);
}
/**
* A `CanceledError` is an object that is thrown when an operation is canceled.
*
* @param {string=} message The message.
* @param {Object=} config The config.
* @param {Object=} request The request.
*
* @returns {CanceledError} The created error.
*/
function CanceledError(message, config, request) {
// eslint-disable-next-line no-eq-null,eqeqeq
AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);
this.name = 'CanceledError';
}
utils$1.inherits(CanceledError, AxiosError, {
__CANCEL__: true
});
/**
* Resolve or reject a Promise based on response status.
*
* @param {Function} resolve A function that resolves the promise.
* @param {Function} reject A function that rejects the promise.
* @param {object} response The response.
*
* @returns {object} The response.
*/
function settle(resolve, reject, response) {
const validateStatus = response.config.validateStatus;
if (!response.status || !validateStatus || validateStatus(response.status)) {
resolve(response);
} else {
reject(new AxiosError(
'Request failed with status code ' + response.status,
[AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
response.config,
response.request,
response
));
}
}
function parseProtocol(url) {
const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
return match && match[1] || '';
}
/**
* Calculate data maxRate
* @param {Number} [samplesCount= 10]
* @param {Number} [min= 1000]
* @returns {Function}
*/
function speedometer(samplesCount, min) {
samplesCount = samplesCount || 10;
const bytes = new Array(samplesCount);
const timestamps = new Array(samplesCount);
let head = 0;
let tail = 0;
let firstSampleTS;
min = min !== undefined ? min : 1000;
return function push(chunkLength) {
const now = Date.now();
const startedAt = timestamps[tail];
if (!firstSampleTS) {
firstSampleTS = now;
}
bytes[head] = chunkLength;
timestamps[head] = now;
let i = tail;
let bytesCount = 0;
while (i !== head) {
bytesCount += bytes[i++];
i = i % samplesCount;
}
head = (head + 1) % samplesCount;
if (head === tail) {
tail = (tail + 1) % samplesCount;
}
if (now - firstSampleTS < min) {
return;
}
const passed = startedAt && now - startedAt;
return passed ? Math.round(bytesCount * 1000 / passed) : undefined;
};
}
/**
* Throttle decorator
* @param {Function} fn
* @param {Number} freq
* @return {Function}
*/
function throttle(fn, freq) {
let timestamp = 0;
let threshold = 1000 / freq;
let lastArgs;
let timer;
const invoke = (args, now = Date.now()) => {
timestamp = now;
lastArgs = null;
if (timer) {
clearTimeout(timer);
timer = null;
}
fn(...args);
};
const throttled = (...args) => {
const now = Date.now();
const passed = now - timestamp;
if ( passed >= threshold) {
invoke(args, now);
} else {
lastArgs = args;
if (!timer) {
timer = setTimeout(() => {
timer = null;
invoke(lastArgs);
}, threshold - passed);
}
}
};
const flush = () => lastArgs && invoke(lastArgs);
return [throttled, flush];
}
const progressEventReducer = (listener, isDownloadStream, freq = 3) => {
let bytesNotified = 0;
const _speedometer = speedometer(50, 250);
return throttle(e => {
const loaded = e.loaded;
const total = e.lengthComputable ? e.total : undefined;
const progressBytes = loaded - bytesNotified;
const rate = _speedometer(progressBytes);
const inRange = loaded <= total;
bytesNotified = loaded;
const data = {
loaded,
total,
progress: total ? (loaded / total) : undefined,
bytes: progressBytes,
rate: rate ? rate : undefined,
estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
event: e,
lengthComputable: total != null,
[isDownloadStream ? 'download' : 'upload']: true
};
listener(data);
}, freq);
};
const progressEventDecorator = (total, throttled) => {
const lengthComputable = total != null;
return [(loaded) => throttled[0]({
lengthComputable,
total,
loaded
}), throttled[1]];
};
const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args));
var isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {
url = new URL(url, platform.origin);
return (
origin.protocol === url.protocol &&
origin.host === url.host &&
(isMSIE || origin.port === url.port)
);
})(
new URL(platform.origin),
platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)
) : () => true;
var cookies = platform.hasStandardBrowserEnv ?
// Standard browser envs support document.cookie
{
write(name, value, expires, path, domain, secure, sameSite) {
if (typeof document === 'undefined') return;
const cookie = [`${name}=${encodeURIComponent(value)}`];
if (utils$1.isNumber(expires)) {
cookie.push(`expires=${new Date(expires).toUTCString()}`);
}
if (utils$1.isString(path)) {
cookie.push(`path=${path}`);
}
if (utils$1.isString(domain)) {
cookie.push(`domain=${domain}`);
}
if (secure === true) {
cookie.push('secure');
}
if (utils$1.isString(sameSite)) {
cookie.push(`SameSite=${sameSite}`);
}
document.cookie = cookie.join('; ');
},
read(name) {
if (typeof document === 'undefined') return null;
const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));
return match ? decodeURIComponent(match[1]) : null;
},
remove(name) {
this.write(name, '', Date.now() - 86400000, '/');
}
}
:
// Non-standard browser env (web workers, react-native) lack needed support.
{
write() {},
read() {
return null;
},
remove() {}
};
/**
* Determines whether the specified URL is absolute
*
* @param {string} url The URL to test
*
* @returns {boolean} True if the specified URL is absolute, otherwise false
*/
function isAbsoluteURL(url) {
// A URL is considered absolute if it begins with "<scheme>://" or "//" (protocol-relative URL).
// RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
// by any combination of letters, digits, plus, period, or hyphen.
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
}
/**
* Creates a new URL by combining the specified URLs
*
* @param {string} baseURL The base URL
* @param {string} relativeURL The relative URL
*
* @returns {string} The combined URL
*/
function combineURLs(baseURL, relativeURL) {
return relativeURL
? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '')
: baseURL;
}
/**
* Creates a new URL by combining the baseURL with the requestedURL,
* only when the requestedURL is not already an absolute URL.
* If the requestURL is absolute, this function returns the requestedURL untouched.
*
* @param {string} baseURL The base URL
* @param {string} requestedURL Absolute or relative URL to combine
*
* @returns {string} The combined full path
*/
function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {
let isRelativeUrl = !isAbsoluteURL(requestedURL);
if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
}
const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing;
/**
* Config-specific merge-function which creates a new config-object
* by merging two configuration objects together.
*
* @param {Object} config1
* @param {Object} config2
*
* @returns {Object} New object resulting from merging config2 to config1
*/
function mergeConfig(config1, config2) {
// eslint-disable-next-line no-param-reassign
config2 = config2 || {};
const config = {};
function getMergedValue(target, source, prop, caseless) {
if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) {
return utils$1.merge.call({caseless}, target, source);
} else if (utils$1.isPlainObject(source)) {
return utils$1.merge({}, source);
} else if (utils$1.isArray(source)) {
return source.slice();
}
return source;
}
// eslint-disable-next-line consistent-return
function mergeDeepProperties(a, b, prop, caseless) {
if (!utils$1.isUndefined(b)) {
return getMergedValue(a, b, prop, caseless);
} else if (!utils$1.isUndefined(a)) {
return getMergedValue(undefined, a, prop, caseless);
}
}
// eslint-disable-next-line consistent-return
function valueFromConfig2(a, b) {
if (!utils$1.isUndefined(b)) {
return getMergedValue(undefined, b);
}
}
// eslint-disable-next-line consistent-return
function defaultToConfig2(a, b) {
if (!utils$1.isUndefined(b)) {
return getMergedValue(undefined, b);
} else if (!utils$1.isUndefined(a)) {
return getMergedValue(undefined, a);
}
}
// eslint-disable-next-line consistent-return
function mergeDirectKeys(a, b, prop) {
if (prop in config2) {
return getMergedValue(a, b);
} else if (prop in config1) {
return getMergedValue(undefined, a);
}
}
const mergeMap = {
url: valueFromConfig2,
method: valueFromConfig2,
data: valueFromConfig2,
baseURL: defaultToConfig2,
transformRequest: defaultToConfig2,
transformResponse: defaultToConfig2,
paramsSerializer: defaultToConfig2,
timeout: defaultToConfig2,
timeoutMessage: defaultToConfig2,
withCredentials: defaultToConfig2,
withXSRFToken: defaultToConfig2,
adapter: defaultToConfig2,
responseType: defaultToConfig2,
xsrfCookieName: defaultToConfig2,
xsrfHeaderName: defaultToConfig2,
onUploadProgress: defaultToConfig2,
onDownloadProgress: defaultToConfig2,
decompress: defaultToConfig2,
maxContentLength: defaultToConfig2,
maxBodyLength: defaultToConfig2,
beforeRedirect: defaultToConfig2,
transport: defaultToConfig2,
httpAgent: defaultToConfig2,
httpsAgent: defaultToConfig2,
cancelToken: defaultToConfig2,
socketPath: defaultToConfig2,
responseEncoding: defaultToConfig2,
validateStatus: mergeDirectKeys,
headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)
};
utils$1.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {
const merge = mergeMap[prop] || mergeDeepProperties;
const configValue = merge(config1[prop], config2[prop], prop);
(utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
});
return config;
}
var resolveConfig = (config) => {
const newConfig = mergeConfig({}, config);
let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;
newConfig.headers = headers = AxiosHeaders$1.from(headers);
newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);
// HTTP basic authentication
if (auth) {
headers.set('Authorization', 'Basic ' +
btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))
);
}
if (utils$1.isFormData(data)) {
if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {
headers.setContentType(undefined); // browser handles it
} else if (utils$1.isFunction(data.getHeaders)) {
// Node.js FormData (like form-data package)
const formHeaders = data.getHeaders();
// Only set safe headers to avoid overwriting security headers
const allowedHeaders = ['content-type', 'content-length'];
Object.entries(formHeaders).forEach(([key, val]) => {
if (allowedHeaders.includes(key.toLowerCase())) {
headers.set(key, val);
}
});
}
}
// Add xsrf header
// This is only done if running in a standard browser environment.
// Specifically not if we're in a web worker, or react-native.
if (platform.hasStandardBrowserEnv) {
withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {
// Add xsrf header
const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);
if (xsrfValue) {
headers.set(xsrfHeaderName, xsrfValue);
}
}
}
return newConfig;
};
const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
var xhrAdapter = isXHRAdapterSupported && function (config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
const _config = resolveConfig(config);
let requestData = _config.data;
const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize();
let {responseType, onUploadProgress, onDownloadProgress} = _config;
let onCanceled;
let uploadThrottled, downloadThrottled;
let flushUpload, flushDownload;
function done() {
flushUpload && flushUpload(); // flush events
flushDownload && flushDownload(); // flush events
_config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);
_config.signal && _config.signal.removeEventListener('abort', onCanceled);
}
let request = new XMLHttpRequest();
request.open(_config.method.toUpperCase(), _config.url, true);
// Set the request timeout in MS
request.timeout = _config.timeout;
function onloadend() {
if (!request) {
return;
}
// Prepare the response
const responseHeaders = AxiosHeaders$1.from(
'getAllResponseHeaders' in request && request.getAllResponseHeaders()
);
const responseData = !responseType || responseType === 'text' || responseType === 'json' ?
request.responseText : request.response;
const response = {
data: responseData,
status: request.status,
statusText: request.statusText,
headers: responseHeaders,
config,
request
};
settle(function _resolve(value) {
resolve(value);
done();
}, function _reject(err) {
reject(err);
done();
}, response);
// Clean up request
request = null;
}
if ('onloadend' in request) {
// Use onloadend if available
request.onloadend = onloadend;
} else {
// Listen for ready state to emulate onloadend
request.onreadystatechange = function handleLoad() {
if (!request || request.readyState !== 4) {
return;
}
// The request errored out and we didn't get a response, this will be
// handled by onerror instead
// With one exception: request that using file: protocol, most browsers
// will return status as 0 even though it's a successful request
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
return;
}
// readystate handler is calling before onerror or ontimeout handlers,
// so we should call onloadend on the next 'tick'
setTimeout(onloadend);
};
}
// Handle browser request cancellation (as opposed to a manual cancellation)
request.onabort = function handleAbort() {
if (!request) {
return;
}
reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
// Clean up request
request = null;
};
// Handle low level network errors
request.onerror = function handleError(event) {
// Browsers deliver a ProgressEvent in XHR onerror
// (message may be empty; when present, surface it)
// See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event
const msg = event && event.message ? event.message : 'Network Error';
const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);
// attach the underlying event for consumers who want details
err.event = event || null;
reject(err);
request = null;
};
// Handle timeout
request.ontimeout = function handleTimeout() {
let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';
const transitional = _config.transitional || transitionalDefaults;
if (_config.timeoutErrorMessage) {
timeoutErrorMessage = _config.timeoutErrorMessage;
}
reject(new AxiosError(
timeoutErrorMessage,
transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
config,
request));
// Clean up request
request = null;
};
// Remove Content-Type if data is undefined
requestData === undefined && requestHeaders.setContentType(null);
// Add headers to the request
if ('setRequestHeader' in request) {
utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {
request.setRequestHeader(key, val);
});
}
// Add withCredentials to request if needed
if (!utils$1.isUndefined(_config.withCredentials)) {
request.withCredentials = !!_config.withCredentials;
}
// Add responseType to request if needed
if (responseType && responseType !== 'json') {
request.responseType = _config.responseType;
}
// Handle progress if needed
if (onDownloadProgress) {
([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));
request.addEventListener('progress', downloadThrottled);
}
// Not all browsers support upload events
if (onUploadProgress && request.upload) {
([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));
request.upload.addEventListener('progress', uploadThrottled);
request.upload.addEventListener('loadend', flushUpload);
}
if (_config.cancelToken || _config.signal) {
// Handle cancellation
// eslint-disable-next-line func-names
onCanceled = cancel => {
if (!request) {
return;
}
reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);
request.abort();
request = null;
};
_config.cancelToken && _config.cancelToken.subscribe(onCanceled);
if (_config.signal) {
_config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);
}
}
const protocol = parseProtocol(_config.url);
if (protocol && platform.protocols.indexOf(protocol) === -1) {
reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
return;
}
// Send the request
request.send(requestData || null);
});
};
const composeSignals = (signals, timeout) => {
const {length} = (signals = signals ? signals.filter(Boolean) : []);
if (timeout || length) {
let controller = new AbortController();
let aborted;
const onabort = function (reason) {
if (!aborted) {
aborted = true;
unsubscribe();
const err = reason instanceof Error ? reason : this.reason;
controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));
}
};
let timer = timeout && setTimeout(() => {
timer = null;
onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT));
}, timeout);
const unsubscribe = () => {
if (signals) {
timer && clearTimeout(timer);
timer = null;
signals.forEach(signal => {
signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);
});
signals = null;
}
};
signals.forEach((signal) => signal.addEventListener('abort', onabort));
const {signal} = controller;
signal.unsubscribe = () => utils$1.asap(unsubscribe);
return signal;
}
};
var composeSignals$1 = composeSignals;
const streamChunk = function* (chunk, chunkSize) {
let len = chunk.byteLength;
if (len < chunkSize) {
yield chunk;
return;
}
let pos = 0;
let end;
while (pos < len) {
end = pos + chunkSize;
yield chunk.slice(pos, end);
pos = end;
}
};
const readBytes = async function* (iterable, chunkSize) {
for await (const chunk of readStream(iterable)) {
yield* streamChunk(chunk, chunkSize);
}
};
const readStream = async function* (stream) {
if (stream[Symbol.asyncIterator]) {
yield* stream;
return;
}
const reader = stream.getReader();
try {
for (;;) {
const {done, value} = await reader.read();
if (done) {
break;
}
yield value;
}
} finally {
await reader.cancel();
}
};
const trackStream = (stream, chunkSize, onProgress, onFinish) => {
const iterator = readBytes(stream, chunkSize);
let bytes = 0;
let done;
let _onFinish = (e) => {
if (!done) {
done = true;
onFinish && onFinish(e);
}
};
return new ReadableStream({
async pull(controller) {
try {
const {done, value} = await iterator.next();
if (done) {
_onFinish();
controller.close();
return;
}
let len = value.byteLength;
if (onProgress) {
let loadedBytes = bytes += len;
onProgress(loadedBytes);
}
controller.enqueue(new Uint8Array(value));
} catch (err) {
_onFinish(err);
throw err;
}
},
cancel(reason) {
_onFinish(reason);
return iterator.return();
}
}, {
highWaterMark: 2
})
};
const DEFAULT_CHUNK_SIZE = 64 * 1024;
const {isFunction} = utils$1;
const globalFetchAPI = (({Request, Response}) => ({
Request, Response
}))(utils$1.global);
const {
ReadableStream: ReadableStream$1, TextEncoder
} = utils$1.global;
const test = (fn, ...args) => {
try {
return !!fn(...args);
} catch (e) {
return false
}
};
const factory = (env) => {
env = utils$1.merge.call({
skipUndefined: true
}, globalFetchAPI, env);
const {fetch: envFetch, Request, Response} = env;
const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';
const isRequestSupported = isFunction(Request);
const isResponseSupported = isFunction(Response);
if (!isFetchSupported) {
return false;
}
const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream$1);
const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?
((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :
async (str) => new Uint8Array(await new Request(str).arrayBuffer())
);
const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {
let duplexAccessed = false;
const hasContentType = new Request(platform.origin, {
body: new ReadableStream$1(),
method: 'POST',
get duplex() {
duplexAccessed = true;
return 'half';
},
}).headers.has('Content-Type');
return duplexAccessed && !hasContentType;
});
const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&
test(() => utils$1.isReadableStream(new Response('').body));
const resolvers = {
stream: supportsResponseStream && ((res) => res.body)
};
isFetchSupported && ((() => {
['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {
!resolvers[type] && (resolvers[type] = (res, config) => {
let method = res && res[type];
if (method) {
return method.call(res);
}
throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);
});
});
})());
const getBodyLength = async (body) => {
if (body == null) {
return 0;
}
if (utils$1.isBlob(body)) {
return body.size;
}
if (utils$1.isSpecCompliantForm(body)) {
const _request = new Request(platform.origin, {
method: 'POST',
body,
});
return (await _request.arrayBuffer()).byteLength;
}
if (utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) {
return body.byteLength;
}
if (utils$1.isURLSearchParams(body)) {
body = body + '';
}
if (utils$1.isString(body)) {
return (await encodeText(body)).byteLength;
}
};
const resolveBodyLength = async (headers, body) => {
const length = utils$1.toFiniteNumber(headers.getContentLength());
return length == null ? getBodyLength(body) : length;
};
return async (config) => {
let {
url,
method,
data,
signal,
cancelToken,
timeout,
onDownloadProgress,
onUploadProgress,
responseType,
headers,
withCredentials = 'same-origin',
fetchOptions
} = resolveConfig(config);
let _fetch = envFetch || fetch;
responseType = responseType ? (responseType + '').toLowerCase() : 'text';
let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
let request = null;
const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {
composedSignal.unsubscribe();
});
let requestContentLength;
try {
if (
onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&
(requestContentLength = await resolveBodyLength(headers, data)) !== 0
) {
let _request = new Request(url, {
method: 'POST',
body: data,
duplex: "half"
});
let contentTypeHeader;
if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {
headers.setContentType(contentTypeHeader);
}
if (_request.body) {
const [onProgress, flush] = progressEventDecorator(
requestContentLength,
progressEventReducer(asyncDecorator(onUploadProgress))
);
data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);
}
}
if (!utils$1.isString(withCredentials)) {
withCredentials = withCredentials ? 'include' : 'omit';
}
// Cloudflare Workers throws when credentials are defined
// see https://github.com/cloudflare/workerd/issues/902
const isCredentialsSupported = isRequestSupported && "credentials" in Request.prototype;
const resolvedOptions = {
...fetchOptions,
signal: composedSignal,
method: method.toUpperCase(),
headers: headers.normalize().toJSON(),
body: data,
duplex: "half",
credentials: isCredentialsSupported ? withCredentials : undefined
};
request = isRequestSupported && new Request(url, resolvedOptions);
let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));
const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');
if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {
const options = {};
['status', 'statusText', 'headers'].forEach(prop => {
options[prop] = response[prop];
});
const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length'));
const [onProgress, flush] = onDownloadProgress && progressEventDecorator(
responseContentLength,
progressEventReducer(asyncDecorator(onDownloadProgress), true)
) || [];
response = new Response(
trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {
flush && flush();
unsubscribe && unsubscribe();
}),
options
);
}
responseType = responseType || 'text';
let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config);
!isStreamResponse && unsubscribe && unsubscribe();
return await new Promise((resolve, reject) => {
settle(resolve, reject, {
data: responseData,
headers: AxiosHeaders$1.from(response.headers),
status: response.status,
statusText: response.statusText,
config,
request
});
})
} catch (err) {
unsubscribe && unsubscribe();
if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {
throw Object.assign(
new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),
{
cause: err.cause || err
}
)
}
throw AxiosError.from(err, err && err.code, config, request);
}
}
};
const seedCache = new Map();
const getFetch = (config) => {
let env = (config && config.env) || {};
const {fetch, Request, Response} = env;
const seeds = [
Request, Response, fetch
];
let len = seeds.length, i = len,
seed, target, map = seedCache;
while (i--) {
seed = seeds[i];
target = map.get(seed);
target === undefined && map.set(seed, target = (i ? new Map() : factory(env)));
map = target;
}
return target;
};
getFetch();
/**
* Known adapters mapping.
* Provides environment-specific adapters for Axios:
* - `http` for Node.js
* - `xhr` for browsers
* - `fetch` for fetch API-based requests
*
* @type {Object<string, Function|Object>}
*/
const knownAdapters = {
http: httpAdapter,
xhr: xhrAdapter,
fetch: {
get: getFetch,
}
};
// Assign adapter names for easier debugging and identification
utils$1.forEach(knownAdapters, (fn, value) => {
if (fn) {
try {
Object.defineProperty(fn, 'name', { value });
} catch (e) {
// eslint-disable-next-line no-empty
}
Object.defineProperty(fn, 'adapterName', { value });
}
});
/**
* Render a rejection reason string for unknown or unsupported adapters
*
* @param {string} reason
* @returns {string}
*/
const renderReason = (reason) => `- ${reason}`;
/**
* Check if the adapter is resolved (function, null, or false)
*
* @param {Function|null|false} adapter
* @returns {boolean}
*/
const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false;
/**
* Get the first suitable adapter from the provided list.
* Tries each adapter in order until a supported one is found.
* Throws an AxiosError if no adapter is suitable.
*
* @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.
* @param {Object} config - Axios request configuration
* @throws {AxiosError} If no suitable adapter is available
* @returns {Function} The resolved adapter function
*/
function getAdapter(adapters, config) {
adapters = utils$1.isArray(adapters) ? adapters : [adapters];
const { length } = adapters;
let nameOrAdapter;
let adapter;
const rejectedReasons = {};
for (let i = 0; i < length; i++) {
nameOrAdapter = adapters[i];
let id;
adapter = nameOrAdapter;
if (!isResolvedHandle(nameOrAdapter)) {
adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
if (adapter === undefined) {
throw new AxiosError(`Unknown adapter '${id}'`);
}
}
if (adapter && (utils$1.isFunction(adapter) || (adapter = adapter.get(config)))) {
break;
}
rejectedReasons[id || '#' + i] = adapter;
}
if (!adapter) {
const reasons = Object.entries(rejectedReasons)
.map(([id, state]) => `adapter ${id} ` +
(state === false ? 'is not supported by the environment' : 'is not available in the build')
);
let s = length ?
(reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) :
'as no adapter specified';
throw new AxiosError(
`There is no suitable adapter to dispatch the request ` + s,
'ERR_NOT_SUPPORT'
);
}
return adapter;
}
/**
* Exports Axios adapters and utility to resolve an adapter
*/
var adapters = {
/**
* Resolve an adapter from a list of adapter names or functions.
* @type {Function}
*/
getAdapter,
/**
* Exposes all known adapters
* @type {Object<string, Function|Object>}
*/
adapters: knownAdapters
};
/**
* Throws a `CanceledError` if cancellation has been requested.
*
* @param {Object} config The config that is to be used for the request
*
* @returns {void}
*/
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
if (config.signal && config.signal.aborted) {
throw new CanceledError(null, config);
}
}
/**
* Dispatch a request to the server using the configured adapter.
*
* @param {object} config The config that is to be used for the request
*
* @returns {Promise} The Promise to be fulfilled
*/
function dispatchRequest(config) {
throwIfCancellationRequested(config);
config.headers = AxiosHeaders$1.from(config.headers);
// Transform request data
config.data = transformData.call(
config,
config.transformRequest
);
if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {
config.headers.setContentType('application/x-www-form-urlencoded', false);
}
const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter, config);
return adapter(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
// Transform response data
response.data = transformData.call(
config,
config.transformResponse,
response
);
response.headers = AxiosHeaders$1.from(response.headers);
return response;
}, function onAdapterRejection(reason) {
if (!isCancel(reason)) {
throwIfCancellationRequested(config);
// Transform response data
if (reason && reason.response) {
reason.response.data = transformData.call(
config,
config.transformResponse,
reason.response
);
reason.response.headers = AxiosHeaders$1.from(reason.response.headers);
}
}
return Promise.reject(reason);
});
}
const VERSION = "1.13.2";
const validators$1 = {};
// eslint-disable-next-line func-names
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {
validators$1[type] = function validator(thing) {
return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
};
});
const deprecatedWarnings = {};
/**
* Transitional option validator
*
* @param {function|boolean?} validator - set to false if the transitional option has been removed
* @param {string?} version - deprecated version / removed since version
* @param {string?} message - some message with additional info
*
* @returns {function}
*/
validators$1.transitional = function transitional(validator, version, message) {
function formatMessage(opt, desc) {
return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
}
// eslint-disable-next-line func-names
return (value, opt, opts) => {
if (validator === false) {
throw new AxiosError(
formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
AxiosError.ERR_DEPRECATED
);
}
if (version && !deprecatedWarnings[opt]) {
deprecatedWarnings[opt] = true;
// eslint-disable-next-line no-console
console.warn(
formatMessage(
opt,
' has been deprecated since v' + version + ' and will be removed in the near future'
)
);
}
return validator ? validator(value, opt, opts) : true;
};
};
validators$1.spelling = function spelling(correctSpelling) {
return (value, opt) => {
// eslint-disable-next-line no-console
console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);
return true;
}
};
/**
* Assert object's properties type
*
* @param {object} options
* @param {object} schema
* @param {boolean?} allowUnknown
*
* @returns {object}
*/
function assertOptions(options, schema, allowUnknown) {
if (typeof options !== 'object') {
throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
}
const keys = Object.keys(options);
let i = keys.length;
while (i-- > 0) {
const opt = keys[i];
const validator = schema[opt];
if (validator) {
const value = options[opt];
const result = value === undefined || validator(value, opt, options);
if (result !== true) {
throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
}
continue;
}
if (allowUnknown !== true) {
throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
}
}
}
var validator = {
assertOptions,
validators: validators$1
};
const validators = validator.validators;
/**
* Create a new instance of Axios
*
* @param {Object} instanceConfig The default config for the instance
*
* @return {Axios} A new instance of Axios
*/
class Axios {
constructor(instanceConfig) {
this.defaults = instanceConfig || {};
this.interceptors = {
request: new InterceptorManager$1(),
response: new InterceptorManager$1()
};
}
/**
* Dispatch a request
*
* @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
* @param {?Object} config
*
* @returns {Promise} The Promise to be fulfilled
*/
async request(configOrUrl, config) {
try {
return await this._request(configOrUrl, config);
} catch (err) {
if (err instanceof Error) {
let dummy = {};
Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());
// slice off the Error: ... line
const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : '';
try {
if (!err.stack) {
err.stack = stack;
// match without the 2 top stack lines
} else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) {
err.stack += '\n' + stack;
}
} catch (e) {
// ignore the case where "stack" is an un-writable property
}
}
throw err;
}
}
_request(configOrUrl, config) {
/*eslint no-param-reassign:0*/
// Allow for axios('example/url'[, config]) a la fetch API
if (typeof configOrUrl === 'string') {
config = config || {};
config.url = configOrUrl;
} else {
config = configOrUrl || {};
}
config = mergeConfig(this.defaults, config);
const {transitional, paramsSerializer, headers} = config;
if (transitional !== undefined) {
validator.assertOptions(transitional, {
silentJSONParsing: validators.transitional(validators.boolean),
forcedJSONParsing: validators.transitional(validators.boolean),
clarifyTimeoutError: validators.transitional(validators.boolean)
}, false);
}
if (paramsSerializer != null) {
if (utils$1.isFunction(paramsSerializer)) {
config.paramsSerializer = {
serialize: paramsSerializer
};
} else {
validator.assertOptions(paramsSerializer, {
encode: validators.function,
serialize: validators.function
}, true);
}
}
// Set config.allowAbsoluteUrls
if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) {
config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;
} else {
config.allowAbsoluteUrls = true;
}
validator.assertOptions(config, {
baseUrl: validators.spelling('baseURL'),
withXsrfToken: validators.spelling('withXSRFToken')
}, true);
// Set config.method
config.method = (config.method || this.defaults.method || 'get').toLowerCase();
// Flatten headers
let contextHeaders = headers && utils$1.merge(
headers.common,
headers[config.method]
);
headers && utils$1.forEach(
['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
(method) => {
delete headers[method];
}
);
config.headers = AxiosHeaders$1.concat(contextHeaders, headers);
// filter out skipped interceptors
const requestInterceptorChain = [];
let synchronousRequestInterceptors = true;
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
return;
}
synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
});
const responseInterceptorChain = [];
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
});
let promise;
let i = 0;
let len;
if (!synchronousRequestInterceptors) {
const chain = [dispatchRequest.bind(this), undefined];
chain.unshift(...requestInterceptorChain);
chain.push(...responseInterceptorChain);
len = chain.length;
promise = Promise.resolve(config);
while (i < len) {
promise = promise.then(chain[i++], chain[i++]);
}
return promise;
}
len = requestInterceptorChain.length;
let newConfig = config;
while (i < len) {
const onFulfilled = requestInterceptorChain[i++];
const onRejected = requestInterceptorChain[i++];
try {
newConfig = onFulfilled(newConfig);
} catch (error) {
onRejected.call(this, error);
break;
}
}
try {
promise = dispatchRequest.call(this, newConfig);
} catch (error) {
return Promise.reject(error);
}
i = 0;
len = responseInterceptorChain.length;
while (i < len) {
promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
}
return promise;
}
getUri(config) {
config = mergeConfig(this.defaults, config);
const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);
return buildURL(fullPath, config.params, config.paramsSerializer);
}
}
// Provide aliases for supported request methods
utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
/*eslint func-names:0*/
Axios.prototype[method] = function(url, config) {
return this.request(mergeConfig(config || {}, {
method,
url,
data: (config || {}).data
}));
};
});
utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
/*eslint func-names:0*/
function generateHTTPMethod(isForm) {
return function httpMethod(url, data, config) {
return this.request(mergeConfig(config || {}, {
method,
headers: isForm ? {
'Content-Type': 'multipart/form-data'
} : {},
url,
data
}));
};
}
Axios.prototype[method] = generateHTTPMethod();
Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
});
var Axios$1 = Axios;
/**
* A `CancelToken` is an object that can be used to request cancellation of an operation.
*
* @param {Function} executor The executor function.
*
* @returns {CancelToken}
*/
class CancelToken {
constructor(executor) {
if (typeof executor !== 'function') {
throw new TypeError('executor must be a function.');
}
let resolvePromise;
this.promise = new Promise(function promiseExecutor(resolve) {
resolvePromise = resolve;
});
const token = this;
// eslint-disable-next-line func-names
this.promise.then(cancel => {
if (!token._listeners) return;
let i = token._listeners.length;
while (i-- > 0) {
token._listeners[i](cancel);
}
token._listeners = null;
});
// eslint-disable-next-line func-names
this.promise.then = onfulfilled => {
let _resolve;
// eslint-disable-next-line func-names
const promise = new Promise(resolve => {
token.subscribe(resolve);
_resolve = resolve;
}).then(onfulfilled);
promise.cancel = function reject() {
token.unsubscribe(_resolve);
};
return promise;
};
executor(function cancel(message, config, request) {
if (token.reason) {
// Cancellation has already been requested
return;
}
token.reason = new CanceledError(message, config, request);
resolvePromise(token.reason);
});
}
/**
* Throws a `CanceledError` if cancellation has been requested.
*/
throwIfRequested() {
if (this.reason) {
throw this.reason;
}
}
/**
* Subscribe to the cancel signal
*/
subscribe(listener) {
if (this.reason) {
listener(this.reason);
return;
}
if (this._listeners) {
this._listeners.push(listener);
} else {
this._listeners = [listener];
}
}
/**
* Unsubscribe from the cancel signal
*/
unsubscribe(listener) {
if (!this._listeners) {
return;
}
const index = this._listeners.indexOf(listener);
if (index !== -1) {
this._listeners.splice(index, 1);
}
}
toAbortSignal() {
const controller = new AbortController();
const abort = (err) => {
controller.abort(err);
};
this.subscribe(abort);
controller.signal.unsubscribe = () => this.unsubscribe(abort);
return controller.signal;
}
/**
* Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`.
*/
static source() {
let cancel;
const token = new CancelToken(function executor(c) {
cancel = c;
});
return {
token,
cancel
};
}
}
var CancelToken$1 = CancelToken;
/**
* Syntactic sugar for invoking a function and expanding an array for arguments.
*
* Common use case would be to use `Function.prototype.apply`.
*
* ```js
* function f(x, y, z) {}
* var args = [1, 2, 3];
* f.apply(null, args);
* ```
*
* With `spread` this example can be re-written.
*
* ```js
* spread(function(x, y, z) {})([1, 2, 3]);
* ```
*
* @param {Function} callback
*
* @returns {Function}
*/
function spread(callback) {
return function wrap(arr) {
return callback.apply(null, arr);
};
}
/**
* Determines whether the payload is an error thrown by Axios
*
* @param {*} payload The value to test
*
* @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
*/
function isAxiosError(payload) {
return utils$1.isObject(payload) && (payload.isAxiosError === true);
}
const HttpStatusCode = {
Continue: 100,
SwitchingProtocols: 101,
Processing: 102,
EarlyHints: 103,
Ok: 200,
Created: 201,
Accepted: 202,
NonAuthoritativeInformation: 203,
NoContent: 204,
ResetContent: 205,
PartialContent: 206,
MultiStatus: 207,
AlreadyReported: 208,
ImUsed: 226,
MultipleChoices: 300,
MovedPermanently: 301,
Found: 302,
SeeOther: 303,
NotModified: 304,
UseProxy: 305,
Unused: 306,
TemporaryRedirect: 307,
PermanentRedirect: 308,
BadRequest: 400,
Unauthorized: 401,
PaymentRequired: 402,
Forbidden: 403,
NotFound: 404,
MethodNotAllowed: 405,
NotAcceptable: 406,
ProxyAuthenticationRequired: 407,
RequestTimeout: 408,
Conflict: 409,
Gone: 410,
LengthRequired: 411,
PreconditionFailed: 412,
PayloadTooLarge: 413,
UriTooLong: 414,
UnsupportedMediaType: 415,
RangeNotSatisfiable: 416,
ExpectationFailed: 417,
ImATeapot: 418,
MisdirectedRequest: 421,
UnprocessableEntity: 422,
Locked: 423,
FailedDependency: 424,
TooEarly: 425,
UpgradeRequired: 426,
PreconditionRequired: 428,
TooManyRequests: 429,
RequestHeaderFieldsTooLarge: 431,
UnavailableForLegalReasons: 451,
InternalServerError: 500,
NotImplemented: 501,
BadGateway: 502,
ServiceUnavailable: 503,
GatewayTimeout: 504,
HttpVersionNotSupported: 505,
VariantAlsoNegotiates: 506,
InsufficientStorage: 507,
LoopDetected: 508,
NotExtended: 510,
NetworkAuthenticationRequired: 511,
WebServerIsDown: 521,
ConnectionTimedOut: 522,
OriginIsUnreachable: 523,
TimeoutOccurred: 524,
SslHandshakeFailed: 525,
InvalidSslCertificate: 526,
};
Object.entries(HttpStatusCode).forEach(([key, value]) => {
HttpStatusCode[value] = key;
});
var HttpStatusCode$1 = HttpStatusCode;
/**
* Create an instance of Axios
*
* @param {Object} defaultConfig The default config for the instance
*
* @returns {Axios} A new instance of Axios
*/
function createInstance(defaultConfig) {
const context = new Axios$1(defaultConfig);
const instance = bind(Axios$1.prototype.request, context);
// Copy axios.prototype to instance
utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true});
// Copy context to instance
utils$1.extend(instance, context, null, {allOwnKeys: true});
// Factory for creating new instances
instance.create = function create(instanceConfig) {
return createInstance(mergeConfig(defaultConfig, instanceConfig));
};
return instance;
}
// Create the default instance to be exported
const axios = createInstance(defaults$1);
// Expose Axios class to allow class inheritance
axios.Axios = Axios$1;
// Expose Cancel & CancelToken
axios.CanceledError = CanceledError;
axios.CancelToken = CancelToken$1;
axios.isCancel = isCancel;
axios.VERSION = VERSION;
axios.toFormData = toFormData;
// Expose AxiosError class
axios.AxiosError = AxiosError;
// alias for CanceledError for backward compatibility
axios.Cancel = axios.CanceledError;
// Expose all/spread
axios.all = function all(promises) {
return Promise.all(promises);
};
axios.spread = spread;
// Expose isAxiosError
axios.isAxiosError = isAxiosError;
// Expose mergeConfig
axios.mergeConfig = mergeConfig;
axios.AxiosHeaders = AxiosHeaders$1;
axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing);
axios.getAdapter = adapters.getAdapter;
axios.HttpStatusCode = HttpStatusCode$1;
axios.default = axios;
var axios_1$1 = axios;
var dist = {};
var app = {};
var bip32 = {};
var consts = {};
Object.defineProperty(consts, "__esModule", { value: true });
consts.ERROR_DESCRIPTION_OVERRIDE = consts.LedgerError = consts.PAYLOAD_TYPE = consts.LEDGER_DASHBOARD_CLA = consts.HARDENED = void 0;
consts.HARDENED = 0x80000000;
consts.LEDGER_DASHBOARD_CLA = 0xb0;
consts.PAYLOAD_TYPE = {
INIT: 0x00,
ADD: 0x01,
LAST: 0x02,
};
var LedgerError;
(function (LedgerError) {
LedgerError[LedgerError["U2FUnknown"] = 1] = "U2FUnknown";
LedgerError[LedgerError["U2FBadRequest"] = 2] = "U2FBadRequest";
LedgerError[LedgerError["U2FConfigurationUnsupported"] = 3] = "U2FConfigurationUnsupported";
LedgerError[LedgerError["U2FDeviceIneligible"] = 4] = "U2FDeviceIneligible";
LedgerError[LedgerError["U2FTimeout"] = 5] = "U2FTimeout";
LedgerError[LedgerError["Timeout"] = 14] = "Timeout";
LedgerError[LedgerError["GpAuthFailed"] = 25344] = "GpAuthFailed";
LedgerError[LedgerError["PinRemainingAttempts"] = 25536] = "PinRemainingAttempts";
LedgerError[LedgerError["ExecutionError"] = 25600] = "ExecutionError";
LedgerError[LedgerError["WrongLength"] = 26368] = "WrongLength";
LedgerError[LedgerError["IncorrectLength"] = 26368] = "IncorrectLength";
LedgerError[LedgerError["MissingCriticalParameter"] = 26624] = "MissingCriticalParameter";
LedgerError[LedgerError["ErrorDerivingKeys"] = 26626] = "ErrorDerivingKeys";
LedgerError[LedgerError["EmptyBuffer"] = 27010] = "EmptyBuffer";
LedgerError[LedgerError["SecurityStatusNotSatisfied"] = 27010] = "SecurityStatusNotSatisfied";
LedgerError[LedgerError["OutputBufferTooSmall"] = 27011] = "OutputBufferTooSmall";
LedgerError[LedgerError["DataIsInvalid"] = 27012] = "DataIsInvalid";
LedgerError[LedgerError["ConditionsOfUseNotSatisfied"] = 27013] = "ConditionsOfUseNotSatisfied";
LedgerError[LedgerError["CommandIncompatibleFileStructure"] = 27009] = "CommandIncompatibleFileStructure";
LedgerError[LedgerError["TransactionRejected"] = 27014] = "TransactionRejected";
LedgerError[LedgerError["BadKeyHandle"] = 27264] = "BadKeyHandle";
LedgerError[LedgerError["IncorrectData"] = 27264] = "IncorrectData";
LedgerError[LedgerError["ReferencedDataNotFound"] = 27272] = "ReferencedDataNotFound";
LedgerError[LedgerError["NotEnoughMemorySpace"] = 27268] = "NotEnoughMemorySpace";
LedgerError[LedgerError["FileAlreadyExists"] = 27273] = "FileAlreadyExists";
LedgerError[LedgerError["InvalidP1P2"] = 27392] = "InvalidP1P2";
LedgerError[LedgerError["IncorrectP1P2"] = 27392] = "IncorrectP1P2";
LedgerError[LedgerError["InstructionNotSupported"] = 27904] = "InstructionNotSupported";
LedgerError[LedgerError["InsNotSupported"] = 27904] = "InsNotSupported";
LedgerError[LedgerError["UnknownApdu"] = 27906] = "UnknownApdu";
LedgerError[LedgerError["DeviceNotOnboarded"] = 27911] = "DeviceNotOnboarded";
LedgerError[LedgerError["DeviceNotOnboarded2"] = 26129] = "DeviceNotOnboarded2";
LedgerError[LedgerError["CustomImageBootloader"] = 26159] = "CustomImageBootloader";
LedgerError[LedgerError["CustomImageEmpty"] = 26158] = "CustomImageEmpty";
LedgerError[LedgerError["AppDoesNotSeemToBeOpen"] = 28161] = "AppDoesNotSeemToBeOpen";
LedgerError[LedgerError["ClaNotSupported"] = 28160] = "ClaNotSupported";
LedgerError[LedgerError["Licensing"] = 28482] = "Licensing";
LedgerError[LedgerError["UnknownError"] = 28416] = "UnknownError";
LedgerError[LedgerError["TechnicalProblem"] = 28416] = "TechnicalProblem";
LedgerError[LedgerError["SignVerifyError"] = 28417] = "SignVerifyError";
LedgerError[LedgerError["Halted"] = 28586] = "Halted";
LedgerError[LedgerError["NoErrors"] = 36864] = "NoErrors";
LedgerError[LedgerError["DeviceIsBusy"] = 36865] = "DeviceIsBusy";
LedgerError[LedgerError["UnknownTransportError"] = 65535] = "UnknownTransportError";
LedgerError[LedgerError["AccessConditionNotFulfilled"] = 38916] = "AccessConditionNotFulfilled";
LedgerError[LedgerError["AlgorithmNotSupported"] = 38020] = "AlgorithmNotSupported";
LedgerError[LedgerError["CodeBlocked"] = 38976] = "CodeBlocked";
LedgerError[LedgerError["CodeNotInitialized"] = 38914] = "CodeNotInitialized";
LedgerError[LedgerError["ContradictionInvalidation"] = 38928] = "ContradictionInvalidation";
LedgerError[LedgerError["ContradictionSecretCodeStatus"] = 38920] = "ContradictionSecretCodeStatus";
LedgerError[LedgerError["InvalidKcv"] = 38021] = "InvalidKcv";
LedgerError[LedgerError["InvalidOffset"] = 37890] = "InvalidOffset";
LedgerError[LedgerError["LockedDevice"] = 21781] = "LockedDevice";
LedgerError[LedgerError["MaxValueReached"] = 38992] = "MaxValueReached";
LedgerError[LedgerError["MemoryProblem"] = 37440] = "MemoryProblem";
LedgerError[LedgerError["NoEfSelected"] = 37888] = "NoEfSelected";
LedgerError[LedgerError["InconsistentFile"] = 37896] = "InconsistentFile";
LedgerError[LedgerError["FileNotFound"] = 37892] = "FileNotFound";
LedgerError[LedgerError["UserRefusedOnDevice"] = 21761] = "UserRefusedOnDevice";
LedgerError[LedgerError["NotEnoughSpace"] = 20738] = "NotEnoughSpace";
LedgerError[LedgerError["GenericError"] = 4294967295] = "GenericError";
})(LedgerError || (consts.LedgerError = LedgerError = {}));
consts.ERROR_DESCRIPTION_OVERRIDE = {
[LedgerError.U2FUnknown]: 'U2F: Unknown',
[LedgerError.U2FBadRequest]: 'U2F: Bad request',
[LedgerError.U2FConfigurationUnsupported]: 'U2F: Configuration unsupported',
[LedgerError.U2FDeviceIneligible]: 'U2F: Device Ineligible',
[LedgerError.U2FTimeout]: 'U2F: Timeout',
[LedgerError.Timeout]: 'Timeout',
[LedgerError.NoErrors]: 'No errors',
[LedgerError.DeviceIsBusy]: 'Device is busy',
[LedgerError.ErrorDerivingKeys]: 'Error deriving keys',
[LedgerError.ExecutionError]: 'Execution Error',
[LedgerError.WrongLength]: 'Wrong Length',
[LedgerError.EmptyBuffer]: 'Empty Buffer',
[LedgerError.OutputBufferTooSmall]: 'Output buffer too small',
[LedgerError.DataIsInvalid]: 'Data is invalid',
[LedgerError.TransactionRejected]: 'Transaction rejected',
[LedgerError.BadKeyHandle]: 'Bad key handle',
[LedgerError.InvalidP1P2]: 'Invalid P1/P2',
[LedgerError.InstructionNotSupported]: 'Instruction not supported',
[LedgerError.AppDoesNotSeemToBeOpen]: 'App does not seem to be open',
[LedgerError.UnknownError]: 'Unknown error',
[LedgerError.SignVerifyError]: 'Sign/verify error',
[LedgerError.UnknownTransportError]: 'Unknown transport error',
[LedgerError.GpAuthFailed]: 'GP Authentication Failed',
[LedgerError.PinRemainingAttempts]: 'PIN Remaining Attempts',
[LedgerError.MissingCriticalParameter]: 'Missing Critical Parameter',
[LedgerError.ConditionsOfUseNotSatisfied]: 'Conditions of Use Not Satisfied',
[LedgerError.CommandIncompatibleFileStructure]: 'Command Incompatible with File Structure',
[LedgerError.ReferencedDataNotFound]: 'Referenced Data Not Found',
[LedgerError.NotEnoughMemorySpace]: 'Not Enough Memory Space',
[LedgerError.FileAlreadyExists]: 'File Already Exists',
[LedgerError.UnknownApdu]: 'Unknown APDU',
[LedgerError.DeviceNotOnboarded]: 'Device Not Onboarded',
[LedgerError.DeviceNotOnboarded2]: 'Device Not Onboarded (Secondary)',
[LedgerError.CustomImageBootloader]: 'Custom Image Bootloader Error',
[LedgerError.CustomImageEmpty]: 'Custom Image Empty',
[LedgerError.ClaNotSupported]: 'CLA Not Supported',
[LedgerError.Licensing]: 'Licensing Error',
[LedgerError.Halted]: 'Device Halted',
[LedgerError.AccessConditionNotFulfilled]: 'Access Condition Not Fulfilled',
[LedgerError.AlgorithmNotSupported]: 'Algorithm Not Supported',
[LedgerError.CodeBlocked]: 'Code Blocked',
[LedgerError.CodeNotInitialized]: 'Code Not Initialized',
[LedgerError.ContradictionInvalidation]: 'Contradiction Invalidation',
[LedgerError.ContradictionSecretCodeStatus]: 'Contradiction with Secret Code Status',
[LedgerError.InvalidKcv]: 'Invalid KCV',
[LedgerError.InvalidOffset]: 'Invalid Offset',
[LedgerError.LockedDevice]: 'Device Locked',
[LedgerError.MaxValueReached]: 'Maximum Value Reached',
[LedgerError.MemoryProblem]: 'Memory Problem',
[LedgerError.NoEfSelected]: 'No EF Selected',
[LedgerError.InconsistentFile]: 'Inconsistent File',
[LedgerError.FileNotFound]: 'File Not Found',
[LedgerError.UserRefusedOnDevice]: 'User Refused on Device',
[LedgerError.NotEnoughSpace]: 'Not Enough Space',
[LedgerError.GenericError]: 'Generic Error',
};
var responseError = {};
var errors = {};
Object.defineProperty(errors, "__esModule", { value: true });
errors.errorCodeToString = errorCodeToString;
const consts_1$4 = consts;
function errorCodeToString(returnCode, customErrorList) {
const returnCodeStr = returnCode.toString(16).toUpperCase();
let errDescription = `Unknown Return Code: 0x${returnCodeStr}`;
if (returnCode in consts_1$4.ERROR_DESCRIPTION_OVERRIDE) {
return consts_1$4.ERROR_DESCRIPTION_OVERRIDE[returnCode];
}
if (customErrorList && returnCode in customErrorList) {
return customErrorList[returnCode];
}
return errDescription;
}
Object.defineProperty(responseError, "__esModule", { value: true });
responseError.ResponseError = void 0;
const errors_1$1 = errors;
class ResponseError extends Error {
constructor(returnCode, errorMessage) {
super(errorMessage);
this.errorMessage = errorMessage;
this.returnCode = returnCode;
}
static fromReturnCode(returnCode, customErrorList) {
return new ResponseError(returnCode, (0, errors_1$1.errorCodeToString)(returnCode, customErrorList));
}
}
responseError.ResponseError = ResponseError;
Object.defineProperty(bip32, "__esModule", { value: true });
bip32.serializePath = serializePath;
bip32.numbersToBip32Path = numbersToBip32Path;
bip32.bufferToBip32Path = bufferToBip32Path;
const consts_1$3 = consts;
const responseError_1$3 = responseError;
function serializePath(path, requiredPathLengths) {
if (typeof path !== 'string') {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, "Path should be a string (e.g \"m/44'/461'/5'/0/3\")");
}
if (!path.startsWith('m/')) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, 'Path should start with "m/" (e.g "m/44\'/461\'/5\'/0/3")');
}
const pathArray = path.split('/');
pathArray.shift();
if (requiredPathLengths && requiredPathLengths.length > 0 && !requiredPathLengths.includes(pathArray.length)) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, "Invalid path length. (e.g \"m/44'/5757'/5'/0/3\")");
}
const buf = Buffer.alloc(4 * pathArray.length);
pathArray.forEach((child, i) => {
let value = 0;
if (child.endsWith("'")) {
value += consts_1$3.HARDENED;
child = child.slice(0, -1);
}
const numChild = Number(child);
if (Number.isNaN(numChild)) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, `Invalid path : ${child} is not a number. (e.g "m/44'/461'/5'/0/3")`);
}
if (numChild >= consts_1$3.HARDENED) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, 'Incorrect child value (bigger or equal to 0x80000000)');
}
value += numChild;
buf.writeUInt32LE(value, 4 * i);
});
return buf;
}
function numbersToBip32Path(items) {
if (items.length === 0) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, 'The items array cannot be empty.');
}
const pathArray = [];
for (let i = 0; i < items.length; i++) {
let value = items[i];
if (!Number.isInteger(value) || value < 0) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, 'Each item must be a positive integer.');
}
let child = value & ~consts_1$3.HARDENED;
if (value >= consts_1$3.HARDENED) {
pathArray.push(`${child}'`);
}
else {
pathArray.push(`${child}`);
}
}
return 'm/' + pathArray.join('/');
}
function bufferToBip32Path(buffer) {
if (buffer.length % 4 !== 0) {
throw new responseError_1$3.ResponseError(consts_1$3.LedgerError.GenericError, 'The buffer length must be a multiple of 4.');
}
const items = [];
for (let i = 0; i < buffer.length; i += 4) {
items.push(buffer.readUInt32LE(i));
}
return numbersToBip32Path(items);
}
var common = {};
var payload = {};
var byteStream = {};
Object.defineProperty(byteStream, "__esModule", { value: true });
byteStream.ByteStream = void 0;
const consts_1$2 = consts;
const responseError_1$2 = responseError;
class ByteStream {
constructor(buffer) {
this.readOffset = 0;
this.writeOffset = 0;
this.internalBuffer = buffer ? Buffer.from(buffer) : Buffer.alloc(0);
this.readOffset = 0;
this.writeOffset = this.internalBuffer.length;
}
appendUint8(value) {
const byteBuffer = Buffer.from([value]);
this.appendBytes(byteBuffer);
}
appendUint16(value) {
const byteBuffer = Buffer.alloc(2);
byteBuffer.writeUInt16LE(value, 0);
this.appendBytes(byteBuffer);
}
appendUint32(value) {
const byteBuffer = Buffer.alloc(4);
byteBuffer.writeUInt32LE(value, 0);
this.appendBytes(byteBuffer);
}
appendUint64(value) {
const byteBuffer = Buffer.alloc(8);
byteBuffer.writeBigUInt64LE(value, 0);
this.appendBytes(byteBuffer);
}
readBytes(length) {
if (this.readOffset + length > this.internalBuffer.length) {
throw new responseError_1$2.ResponseError(consts_1$2.LedgerError.UnknownError, 'Attempt to read beyond buffer length');
}
const response = this.internalBuffer.subarray(this.readOffset, this.readOffset + length);
this.readOffset += length;
return response;
}
readBytesAt(length, offset) {
if (offset + length > this.internalBuffer.length) {
throw new responseError_1$2.ResponseError(consts_1$2.LedgerError.UnknownError, 'Attempt to read beyond buffer length');
}
return this.internalBuffer.subarray(offset, offset + length);
}
appendBytes(data) {
if (this.writeOffset + data.length > this.internalBuffer.length) {
const newBuffer = Buffer.alloc(this.writeOffset + data.length);
this.internalBuffer.copy(newBuffer, 0, 0, this.writeOffset);
this.internalBuffer = newBuffer;
}
data.copy(this.internalBuffer, this.writeOffset);
this.writeOffset += data.length;
}
insertBytesAt(data, offset) {
if (offset > this.internalBuffer.length) {
const padding = Buffer.alloc(offset - this.internalBuffer.length, 0);
this.internalBuffer = Buffer.concat([this.internalBuffer, padding, data]);
}
else {
const before = this.internalBuffer.subarray(0, offset);
const after = this.internalBuffer.subarray(offset);
this.internalBuffer = Buffer.concat([before, data, after]);
}
}
writeBytesAt(data, offset) {
if (offset + data.length > this.internalBuffer.length) {
const newBuffer = Buffer.alloc(offset + data.length);
this.internalBuffer.copy(newBuffer, 0, 0, offset);
this.internalBuffer = newBuffer;
}
data.copy(this.internalBuffer, offset);
this.writeOffset = offset + data.length;
}
skipBytes(length) {
if (this.readOffset + length > this.internalBuffer.length) {
throw new responseError_1$2.ResponseError(consts_1$2.LedgerError.UnknownError, 'Attempt to skip beyond buffer length');
}
this.readOffset += length;
}
clear() {
this.internalBuffer = Buffer.alloc(0);
this.readOffset = 0;
this.writeOffset = 0;
}
resetOffset() {
this.readOffset = 0;
this.writeOffset = 0;
}
getCompleteBuffer() {
return Buffer.from(this.internalBuffer);
}
getAvailableBuffer() {
return Buffer.from(this.internalBuffer.subarray(this.readOffset));
}
length() {
return this.internalBuffer.length - this.readOffset;
}
capacity() {
return this.internalBuffer.length;
}
getReadOffset() {
return this.readOffset;
}
getWriteOffset() {
return this.writeOffset;
}
setReadOffset(offset) {
if (offset < 0 || offset > this.internalBuffer.length) {
throw new responseError_1$2.ResponseError(consts_1$2.LedgerError.UnknownError, 'Invalid read offset');
}
this.readOffset = offset;
}
setWriteOffset(offset) {
if (offset < 0 || offset > this.internalBuffer.length) {
throw new responseError_1$2.ResponseError(consts_1$2.LedgerError.UnknownError, 'Invalid write offset');
}
this.writeOffset = offset;
}
}
byteStream.ByteStream = ByteStream;
Object.defineProperty(payload, "__esModule", { value: true });
payload.ResponsePayload = void 0;
const byteStream_1 = byteStream;
class ResponsePayload extends byteStream_1.ByteStream {
constructor(payload) {
super(payload);
}
}
payload.ResponsePayload = ResponsePayload;
Object.defineProperty(common, "__esModule", { value: true });
common.processResponse = processResponse;
common.processErrorResponse = processErrorResponse;
const consts_1$1 = consts;
const errors_1 = errors;
const payload_1 = payload;
const responseError_1$1 = responseError;
function isDict(v) {
return typeof v === 'object' && v !== null && !(v instanceof Array) && !(v instanceof Date);
}
function processResponse(responseRaw, customErrorList) {
if (responseRaw.length < 2) {
throw responseError_1$1.ResponseError.fromReturnCode(consts_1$1.LedgerError.EmptyBuffer);
}
const returnCode = responseRaw.readUInt16BE(responseRaw.length - 2);
let errorMessage = (0, errors_1.errorCodeToString)(returnCode, customErrorList);
const payload = responseRaw.subarray(0, responseRaw.length - 2);
if (returnCode === consts_1$1.LedgerError.NoErrors) {
return new payload_1.ResponsePayload(payload);
}
if (payload.length > 0) {
const payloadString = payload.toString('utf8');
if (!payloadString.includes(errorMessage)) {
errorMessage += ` : ${payloadString}`;
}
else {
errorMessage = payloadString;
}
}
throw new responseError_1$1.ResponseError(returnCode, errorMessage);
}
function processErrorResponse(response, customErrorList) {
if (isDict(response)) {
if (Object.prototype.hasOwnProperty.call(response, 'statusCode')) {
return responseError_1$1.ResponseError.fromReturnCode(response.statusCode, customErrorList);
}
if (Object.prototype.hasOwnProperty.call(response, 'returnCode') && Object.prototype.hasOwnProperty.call(response, 'errorMessage')) {
return response;
}
}
return responseError_1$1.ResponseError.fromReturnCode(consts_1$1.LedgerError.UnknownTransportError);
}
Object.defineProperty(app, "__esModule", { value: true });
const bip32_1 = bip32;
const common_1$1 = common;
const consts_1 = consts;
const responseError_1 = responseError;
class BaseApp {
constructor(transport, params) {
if (transport == null) {
throw new Error('Transport has not been defined');
}
this.transport = transport;
this.CLA = params.cla;
this.INS = params.ins;
this.P1_VALUES = params.p1Values;
this.CHUNK_SIZE = params.chunkSize;
this.REQUIRED_PATH_LENGTHS = params.acceptedPathLengths;
this.CUSTOM_APP_ERROR_DESCRIPTION = params.customAppErrorDescription;
}
serializePath(path) {
return (0, bip32_1.serializePath)(path, this.REQUIRED_PATH_LENGTHS);
}
prepareChunks(path, message) {
const serializedPathBuffer = this.serializePath(path);
const chunks = this.messageToChunks(message);
chunks.unshift(serializedPathBuffer);
return chunks;
}
messageToChunks(message) {
const chunks = [];
const messageBuffer = Buffer.from(message);
for (let i = 0; i < messageBuffer.length; i += this.CHUNK_SIZE) {
const end = Math.min(i + this.CHUNK_SIZE, messageBuffer.length);
chunks.push(messageBuffer.subarray(i, end));
}
return chunks;
}
async sendGenericChunk(ins, p2, chunkIdx, chunkNum, chunk) {
let payloadType = consts_1.PAYLOAD_TYPE.ADD;
if (chunkIdx === 1) {
payloadType = consts_1.PAYLOAD_TYPE.INIT;
}
if (chunkIdx === chunkNum) {
payloadType = consts_1.PAYLOAD_TYPE.LAST;
}
const statusList = [consts_1.LedgerError.NoErrors, consts_1.LedgerError.DataIsInvalid, consts_1.LedgerError.BadKeyHandle];
try {
const responseBuffer = await this.transport.send(this.CLA, ins, payloadType, p2, chunk, statusList);
return (0, common_1$1.processResponse)(responseBuffer, this.CUSTOM_APP_ERROR_DESCRIPTION);
}
catch (e) {
const statusCode = e.statusCode || e.returnCode || consts_1.LedgerError.UnknownTransportError;
const message = e.message;
let buffer;
if (message?.length > 0) {
const messageBytes = Buffer.from(message, 'utf8');
buffer = Buffer.concat([messageBytes, Buffer.allocUnsafe(2)]);
buffer.writeUInt16BE(statusCode, buffer.length - 2);
}
else {
buffer = Buffer.allocUnsafe(2);
buffer.writeUInt16BE(statusCode, 0);
}
return (0, common_1$1.processResponse)(buffer, this.CUSTOM_APP_ERROR_DESCRIPTION);
}
}
async signSendChunk(ins, chunkIdx, chunkNum, chunk) {
return this.sendGenericChunk(ins, 0, chunkIdx, chunkNum, chunk);
}
async getVersion() {
try {
const responseBuffer = await this.transport.send(this.CLA, this.INS.GET_VERSION, 0, 0);
const response = (0, common_1$1.processResponse)(responseBuffer, this.CUSTOM_APP_ERROR_DESCRIPTION);
let testMode;
let major, minor, patch;
if (response.length() === 5 || response.length() === 9) {
testMode = response.readBytes(1).readUInt8() !== 0;
major = response.readBytes(1).readUInt8();
minor = response.readBytes(1).readUInt8();
patch = response.readBytes(1).readUInt8();
}
else if (response.length() === 8 || response.length() === 12) {
testMode = response.readBytes(1).readUInt8() !== 0;
major = response.readBytes(2).readUInt16BE();
minor = response.readBytes(2).readUInt16BE();
patch = response.readBytes(2).readUInt16BE();
}
else if (response.length() === 14 || response.length() === 18) {
testMode = response.readBytes(1).readUInt8() !== 0;
major = response.readBytes(4).readUInt32BE();
minor = response.readBytes(4).readUInt32BE();
patch = response.readBytes(4).readUInt32BE();
}
else {
throw new responseError_1.ResponseError(consts_1.LedgerError.TechnicalProblem, 'Invalid response length');
}
const deviceLocked = response.readBytes(1).readUInt8() === 1;
let targetId = '';
if (response.length() >= 4) {
targetId = response.readBytes(4).readUInt32BE().toString(16).padStart(8, '0');
}
return {
testMode,
major,
minor,
patch,
deviceLocked,
targetId,
};
}
catch (error) {
throw (0, common_1$1.processErrorResponse)(error);
}
}
async appInfo() {
try {
const responseBuffer = await this.transport.send(consts_1.LEDGER_DASHBOARD_CLA, 0x01, 0, 0);
const response = (0, common_1$1.processResponse)(responseBuffer, this.CUSTOM_APP_ERROR_DESCRIPTION);
const formatId = response.readBytes(1).readUInt8();
if (formatId !== 1) {
throw new responseError_1.ResponseError(consts_1.LedgerError.TechnicalProblem, 'Format ID not recognized');
}
const appNameLen = response.readBytes(1).readUInt8();
const appName = response.readBytes(appNameLen).toString('ascii');
const appVersionLen = response.readBytes(1).readUInt8();
const appVersion = response.readBytes(appVersionLen).toString('ascii');
const flagLen = response.readBytes(1).readUInt8();
const flagsValue = response.readBytes(flagLen).readUInt8();
return {
appName,
appVersion,
flagLen,
flagsValue,
flagRecovery: (flagsValue & 1) !== 0,
flagSignedMcuCode: (flagsValue & 2) !== 0,
flagOnboarded: (flagsValue & 4) !== 0,
flagPINValidated: (flagsValue & 128) !== 0,
};
}
catch (error) {
throw (0, common_1$1.processErrorResponse)(error);
}
}
async deviceInfo() {
try {
const responseBuffer = await this.transport.send(0xe0, 0x01, 0, 0, Buffer.from([]), [consts_1.LedgerError.NoErrors, 0x6e00]);
const response = (0, common_1$1.processResponse)(responseBuffer, this.CUSTOM_APP_ERROR_DESCRIPTION);
const targetId = response.readBytes(4).toString('hex');
const secureElementVersionLen = response.readBytes(1).readUInt8();
const seVersion = response.readBytes(secureElementVersionLen).toString();
const flagsLen = response.readBytes(1).readUInt8();
const flag = response.readBytes(flagsLen).toString('hex');
const mcuVersionLen = response.readBytes(1).readUInt8();
let tmp = response.readBytes(mcuVersionLen);
const firstZeroIndex = tmp.indexOf(0);
if (firstZeroIndex !== -1) {
tmp = tmp.subarray(0, firstZeroIndex);
}
const mcuVersion = tmp.toString();
return {
targetId,
seVersion,
flag,
mcuVersion,
};
}
catch (error) {
throw (0, common_1$1.processErrorResponse)(error);
}
}
}
app.default = BaseApp;
var types = {};
Object.defineProperty(types, "__esModule", { value: true });
(function (exports$1) {
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports$1) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);
};
var __importDefault = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports$1, "__esModule", { value: true });
const app_1 = __importDefault(app);
exports$1.default = app_1.default;
__exportStar(common, exports$1);
__exportStar(consts, exports$1);
__exportStar(types, exports$1);
__exportStar(bip32, exports$1);
__exportStar(responseError, exports$1);
__exportStar(payload, exports$1);
} (dist));
getDefaultExportFromCjs(dist);
var __createBinding$1 = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault$1 = (commonjsGlobal && commonjsGlobal.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar$1 = (commonjsGlobal && commonjsGlobal.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding$1(result, mod, k[i]);
__setModuleDefault$1(result, mod);
return result;
};
})();
var __importDefault$1 = (commonjsGlobal && commonjsGlobal.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(generic_app, "__esModule", { value: true });
generic_app.PolkadotGenericApp = void 0;
const axios_1 = __importDefault$1(axios_1$1);
const ledger_js_1$1 = __importStar$1(dist);
const common_1 = common$1;
class PolkadotGenericApp extends ledger_js_1$1.default {
constructor(transport, txMetadataChainId, txMetadataSrvUrl) {
super(transport, PolkadotGenericApp._params);
this.txMetadataSrvUrl = txMetadataSrvUrl;
this.txMetadataChainId = txMetadataChainId;
if (!this.transport) {
throw new Error('Transport has not been defined');
}
}
async getTxMetadata(txBlob, txMetadataChainId, txMetadataSrvUrl) {
const txMetadataChainIdVal = txMetadataChainId ?? this.txMetadataChainId;
const txMetadataSrvUrlVal = txMetadataSrvUrl ?? this.txMetadataSrvUrl;
if (!txMetadataChainIdVal) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataSrvUrl is not defined or is empty. The use of the method requires access to a metadata shortening service.');
}
if (!txMetadataSrvUrlVal) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataChainId is not defined or is empty. These values are configured in the metadata shortening service. Check the corresponding configuration in the service.');
}
const resp = await axios_1.default.post(txMetadataSrvUrlVal, {
txBlob: txBlob.toString('hex'),
chain: { id: txMetadataChainIdVal },
});
let txMetadata = resp.data.txMetadata;
if (txMetadata.slice(0, 2) === '0x') {
txMetadata = txMetadata.slice(2);
}
return Buffer.from(txMetadata, 'hex');
}
async getAddress(bip44Path, ss58prefix, showAddrInDevice = false, scheme = 0 ) {
if (!Number.isInteger(ss58prefix) || ss58prefix < 0 || ss58prefix >> 16 !== 0) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.ConditionsOfUseNotSatisfied, `Unexpected ss58prefix ${ss58prefix}. Needs to be a non-negative integer up to 2^16`);
}
if (scheme != 2 && scheme != 0 ) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.ConditionsOfUseNotSatisfied, `Unexpected scheme ${scheme}. Needs to be ECDSA (2) or ED25519 (0)`);
}
const bip44PathBuffer = this.serializePath(bip44Path);
const prefixBuffer = Buffer.alloc(2);
prefixBuffer.writeUInt16LE(ss58prefix);
let payload = bip44PathBuffer;
if (scheme === 0 ) {
payload = Buffer.concat([payload, prefixBuffer]);
}
const p1 = showAddrInDevice ? 1 : 0 ;
try {
const responseBuffer = await this.transport.send(this.CLA, this.INS.GET_ADDR, p1, scheme ?? 0 , payload);
const response = (0, ledger_js_1$1.processResponse)(responseBuffer);
const currentScheme = (scheme ?? 0 );
const pubKeyLen = currentScheme === 2 ? common_1.ECDSA_PUBKEY_LEN : common_1.ED25519_PUBKEY_LEN;
const pubKey = response.readBytes(pubKeyLen).toString('hex');
let address = '';
if (currentScheme === 2 ) {
address = response.readBytes(response.length()).toString('hex');
}
else {
address = response.readBytes(response.length()).toString('ascii');
}
return {
pubKey,
address,
};
}
catch (e) {
throw (0, ledger_js_1$1.processErrorResponse)(e);
}
}
async getAddressEcdsa(bip44Path, showAddrInDevice = false) {
return this.getAddress(bip44Path, 0, showAddrInDevice, 2 );
}
async getAddressEd25519(bip44Path, ss58prefix, showAddrInDevice = false) {
return this.getAddress(bip44Path, ss58prefix, showAddrInDevice);
}
splitBufferToChunks(message, chunkSize) {
const chunks = [];
const buffer = Buffer.from(message);
for (let i = 0; i < buffer.length; i += chunkSize) {
let end = i + chunkSize;
if (i > buffer.length) {
end = buffer.length;
}
chunks.push(buffer.subarray(i, end));
}
return chunks;
}
getSignReqChunks(path, txBlob, metadata) {
const chunks = [];
const bip44Path = this.serializePath(path);
const blobLen = Buffer.alloc(2);
blobLen.writeUInt16LE(txBlob.length);
chunks.push(Buffer.concat([bip44Path, blobLen]));
if (metadata == null) {
chunks.push(...this.splitBufferToChunks(txBlob, this.CHUNK_SIZE));
}
else {
chunks.push(...this.splitBufferToChunks(Buffer.concat([txBlob, metadata]), this.CHUNK_SIZE));
}
return chunks;
}
async signImplEd25519(path, ins, blob, metadata) {
const chunks = this.getSignReqChunks(path, blob, metadata);
try {
let result = await this.sendGenericChunk(ins, 0 , 1, chunks.length, chunks[0]);
for (let i = 1; i < chunks.length; i += 1) {
result = await this.sendGenericChunk(ins, 0 , 1 + i, chunks.length, chunks[i]);
}
return {
signature: result.readBytes(result.length()),
};
}
catch (e) {
throw (0, ledger_js_1$1.processErrorResponse)(e);
}
}
async signImplEcdsa(path, ins, blob, metadata) {
const chunks = this.getSignReqChunks(path, blob, metadata);
try {
let result = await this.sendGenericChunk(ins, 2 , 1, chunks.length, chunks[0]);
for (let i = 1; i < chunks.length; i += 1) {
result = await this.sendGenericChunk(ins, 2 , 1 + i, chunks.length, chunks[i]);
}
return {
r: result.readBytes(32),
s: result.readBytes(32),
v: result.readBytes(1),
};
}
catch (e) {
throw (0, ledger_js_1$1.processErrorResponse)(e);
}
}
async sign(path, txBlob, scheme = 0 ) {
if (scheme != 2 && scheme != 0 ) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.ConditionsOfUseNotSatisfied, `Unexpected scheme ${scheme}. Needs to be ECDSA (2) or ED25519 (0)`);
}
if (scheme === 2 ) {
return await this.signEcdsa(path, txBlob);
}
return await this.signEd25519(path, txBlob);
}
async signEd25519(path, txBlob) {
if (!this.txMetadataSrvUrl) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataSrvUrl is not defined or is empty. The use of the method requires access to a metadata shortening service.');
}
if (!this.txMetadataChainId) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataChainId is not defined or is empty. These values are configured in the metadata shortening service. Check the corresponding configuration in the service.');
}
const txMetadata = await this.getTxMetadata(txBlob);
return await this.signImplEd25519(path, this.INS.SIGN, txBlob, txMetadata);
}
async signEcdsa(path, txBlob) {
if (!this.txMetadataSrvUrl) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataSrvUrl is not defined or is empty. The use of the method requires access to a metadata shortening service.');
}
if (!this.txMetadataChainId) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataChainId is not defined or is empty. These values are configured in the metadata shortening service. Check the corresponding configuration in the service.');
}
const txMetadata = await this.getTxMetadata(txBlob);
return await this.signImplEcdsa(path, this.INS.SIGN, txBlob, txMetadata);
}
async signMigration(path, txBlob, txMetadataChainId, txMetadataSrvUrl) {
if (!this.txMetadataSrvUrl) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataSrvUrl is not defined or is empty. The use of the method requires access to a metadata shortening service.');
}
if (!this.txMetadataChainId) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.GenericError, 'txMetadataChainId is not defined or is empty. These values are configured in the metadata shortening service. Check the corresponding configuration in the service.');
}
const txMetadata = await this.getTxMetadata(txBlob, txMetadataChainId, txMetadataSrvUrl);
return await this.signImplEd25519(path, this.INS.SIGN, txBlob, txMetadata);
}
async signRaw(path, txBlob, scheme = 0 ) {
if (scheme != 2 && scheme != 0 ) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.ConditionsOfUseNotSatisfied, `Unexpected scheme ${scheme}. Needs to be ECDSA (2) or ED25519 (0)`);
}
if (scheme === 2 ) {
return await this.signRawEcdsa(path, txBlob);
}
return await this.signRawEd25519(path, txBlob);
}
async signRawEd25519(path, txBlob) {
return await this.signImplEd25519(path, this.INS.SIGN_RAW, txBlob);
}
async signRawEcdsa(path, txBlob) {
return await this.signImplEcdsa(path, this.INS.SIGN_RAW, txBlob);
}
async signWithMetadata(path, txBlob, txMetadata, scheme) {
if (scheme != 2 && scheme != 0 ) {
throw new ledger_js_1$1.ResponseError(ledger_js_1$1.LedgerError.ConditionsOfUseNotSatisfied, `Unexpected scheme ${scheme}. Needs to be ECDSA (2) or ED25519 (0)`);
}
if (scheme === 2 ) {
return await this.signWithMetadataEcdsa(path, txBlob, txMetadata);
}
return await this.signWithMetadataEd25519(path, txBlob, txMetadata);
}
async signWithMetadataEcdsa(path, txBlob, txMetadata) {
return await this.signImplEcdsa(path, this.INS.SIGN, txBlob, txMetadata);
}
async signWithMetadataEd25519(path, txBlob, txMetadata) {
return await this.signImplEd25519(path, this.INS.SIGN, txBlob, txMetadata);
}
}
generic_app.PolkadotGenericApp = PolkadotGenericApp;
PolkadotGenericApp._INS = {
GET_VERSION: 0x00,
GET_ADDR: 0x01,
SIGN: 0x02,
SIGN_RAW: 0x03,
};
PolkadotGenericApp._params = {
cla: 0xf9,
ins: { ...PolkadotGenericApp._INS },
p1Values: { ONLY_RETRIEVE: 0x00, SHOW_ADDRESS_IN_DEVICE: 0x01 },
chunkSize: 250,
requiredPathLengths: [5],
};
var generic_legacy = {};
Object.defineProperty(generic_legacy, "__esModule", { value: true });
generic_legacy.PolkadotGenericAppLegacy = void 0;
const ledger_js_1 = dist;
const generic_app_1 = generic_app;
class PolkadotGenericAppLegacy {
constructor(transport, ss58prefix, txMetadataChainId, txMetadataSrvUrl) {
this.genericApp = new generic_app_1.PolkadotGenericApp(transport, txMetadataChainId, txMetadataSrvUrl);
this.ss58prefix = ss58prefix;
}
convertToLegacyError(e) {
return {
error_message: e.errorMessage,
return_code: e.returnCode,
};
}
convertLegacyPath(account, change, addressIndex) {
return (0, ledger_js_1.numbersToBip32Path)([0x8000002c, 0x80000162, account, change, addressIndex]);
}
async getVersion() {
try {
const version = await this.genericApp.getVersion();
const legacyError = this.convertToLegacyError(ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.NoErrors));
return {
...legacyError,
major: version.major ?? 0,
minor: version.minor ?? 0,
patch: version.patch ?? 0,
device_locked: version.deviceLocked ?? false,
test_mode: version.testMode ?? false,
};
}
catch (e) {
const legacyError = this.convertToLegacyError(e);
return {
device_locked: false,
major: 0,
minor: 0,
patch: 0,
test_mode: false,
...legacyError,
};
}
}
async appInfo() {
try {
const info = await this.genericApp.appInfo();
const legacyError = this.convertToLegacyError(ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.NoErrors));
return {
...legacyError,
...info,
};
}
catch (e) {
const legacyError = this.convertToLegacyError(e);
return {
...legacyError,
};
}
}
async getAddress(account, change, addressIndex, requireConfirmation, scheme) {
if (scheme !== 0 ) {
throw ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.AlgorithmNotSupported);
}
try {
const bip44Path = this.convertLegacyPath(account, change, addressIndex);
const address = await this.genericApp.getAddress(bip44Path, this.ss58prefix, requireConfirmation);
const legacyError = this.convertToLegacyError(ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.NoErrors));
return {
...legacyError,
...address,
};
}
catch (e) {
const legacyError = this.convertToLegacyError(e);
return {
address: 'ERROR',
pubKey: 'ERROR',
...legacyError,
};
}
}
async sign(account, change, addressIndex, message, scheme) {
try {
if (scheme !== 0 ) {
throw ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.AlgorithmNotSupported);
}
const bip44Path = this.convertLegacyPath(account, change, addressIndex);
const signature = await this.genericApp.signEd25519(bip44Path, message);
const legacyError = this.convertToLegacyError(ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.NoErrors));
return {
...legacyError,
...signature,
};
}
catch (e) {
const legacyError = this.convertToLegacyError(e);
return {
signature: Buffer.alloc(0),
...legacyError,
};
}
}
async signRaw(account, change, addressIndex, message, scheme) {
try {
if (scheme !== 0 ) {
throw ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.AlgorithmNotSupported);
}
const bip44Path = this.convertLegacyPath(account, change, addressIndex);
const signature = await this.genericApp.signRawEd25519(bip44Path, message);
const legacyError = this.convertToLegacyError(ledger_js_1.ResponseError.fromReturnCode(ledger_js_1.LedgerError.NoErrors));
return {
...legacyError,
...signature,
};
}
catch (e) {
const legacyError = this.convertToLegacyError(e);
return {
signature: Buffer.alloc(0),
...legacyError,
};
}
}
}
generic_legacy.PolkadotGenericAppLegacy = PolkadotGenericAppLegacy;
(function (exports$1) {
var __createBinding = (commonjsGlobal && commonjsGlobal.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (commonjsGlobal && commonjsGlobal.__exportStar) || function(m, exports$1) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports$1, p)) __createBinding(exports$1, m, p);
};
Object.defineProperty(exports$1, "__esModule", { value: true });
exports$1.supportedApps = exports$1.newSubstrateApp = exports$1.SubstrateApp = void 0;
__exportStar(legacy_apps, exports$1);
__exportStar(generic_app, exports$1);
__exportStar(generic_legacy, exports$1);
var substrate_app_1 = substrate_app;
Object.defineProperty(exports$1, "SubstrateApp", { enumerable: true, get: function () { return substrate_app_1.SubstrateApp; } });
var supported_apps_1 = supported_apps;
Object.defineProperty(exports$1, "newSubstrateApp", { enumerable: true, get: function () { return supported_apps_1.newSubstrateApp; } });
Object.defineProperty(exports$1, "supportedApps", { enumerable: true, get: function () { return supported_apps_1.supportedApps; } });
} (dist$1));
getDefaultExportFromCjs(dist$1);
var browser = {};
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var __assign = function() {
__assign = Object.assign || function __assign(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
function __rest(s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
}
function __decorate(decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
}
function __param(paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
}
function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
var _, done = false;
for (var i = decorators.length - 1; i >= 0; i--) {
var context = {};
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
if (kind === "accessor") {
if (result === void 0) continue;
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
if (_ = accept(result.get)) descriptor.get = _;
if (_ = accept(result.set)) descriptor.set = _;
if (_ = accept(result.init)) initializers.unshift(_);
}
else if (_ = accept(result)) {
if (kind === "field") initializers.unshift(_);
else descriptor[key] = _;
}
}
if (target) Object.defineProperty(target, contextIn.name, descriptor);
done = true;
}function __runInitializers(thisArg, initializers, value) {
var useValue = arguments.length > 2;
for (var i = 0; i < initializers.length; i++) {
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
}
return useValue ? value : void 0;
}function __propKey(x) {
return typeof x === "symbol" ? x : "".concat(x);
}function __setFunctionName(f, name, prefix) {
if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
}function __metadata(metadataKey, metadataValue) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (g && (g = 0, op[0] && (_ = 0)), _) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
var __createBinding = Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
});
function __exportStar(m, o) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spread() {
for (var ar = [], i = 0; i < arguments.length; i++)
ar = ar.concat(__read(arguments[i]));
return ar;
}
function __spreadArrays() {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
}
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = Object.create((typeof AsyncIterator === "function" ? AsyncIterator : Object).prototype), verb("next"), verb("throw"), verb("return", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;
function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }
function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
function fulfill(value) { resume("next", value); }
function reject(value) { resume("throw", value); }
function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
}
function __asyncDelegator(o) {
var i, p;
return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }
}
function __asyncValues(o) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var m = o[Symbol.asyncIterator], i;
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
}
function __makeTemplateObject(cooked, raw) {
if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
return cooked;
}var __setModuleDefault = Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
};
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
function __importStar(mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
}
function __importDefault(mod) {
return (mod && mod.__esModule) ? mod : { default: mod };
}
function __classPrivateFieldGet(receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}
function __classPrivateFieldSet(receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
}
function __classPrivateFieldIn(state, receiver) {
if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
return typeof state === "function" ? receiver === state : state.has(receiver);
}
function __addDisposableResource(env, value, async) {
if (value !== null && value !== void 0) {
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
var dispose, inner;
if (async) {
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
dispose = value[Symbol.asyncDispose];
}
if (dispose === void 0) {
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
dispose = value[Symbol.dispose];
if (async) inner = dispose;
}
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
env.stack.push({ value: value, dispose: dispose, async: async });
}
else if (async) {
env.stack.push({ async: true });
}
return value;
}
var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
var e = new Error(message);
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
};
function __disposeResources(env) {
function fail(e) {
env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
env.hasError = true;
}
var r, s = 0;
function next() {
while (r = env.stack.pop()) {
try {
if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);
if (r.dispose) {
var result = r.dispose.call(r.value);
if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
}
else s |= 1;
}
catch (e) {
fail(e);
}
}
if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();
if (env.hasError) throw env.error;
}
return next();
}
function __rewriteRelativeImportExtension(path, preserveJsx) {
if (typeof path === "string" && /^\.\.?\//.test(path)) {
return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
});
}
return path;
}
const tslib_es6 = {
__extends,
__assign,
__rest,
__decorate,
__param,
__esDecorate,
__runInitializers,
__propKey,
__setFunctionName,
__metadata,
__awaiter,
__generator,
__createBinding,
__exportStar,
__values,
__read,
__spread,
__spreadArrays,
__spreadArray,
__await,
__asyncGenerator,
__asyncDelegator,
__asyncValues,
__makeTemplateObject,
__importStar,
__importDefault,
__classPrivateFieldGet,
__classPrivateFieldSet,
__classPrivateFieldIn,
__addDisposableResource,
__disposeResources,
__rewriteRelativeImportExtension,
};
const tslib_es6$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
__addDisposableResource: __addDisposableResource,
get __assign () { return __assign; },
__asyncDelegator: __asyncDelegator,
__asyncGenerator: __asyncGenerator,
__asyncValues: __asyncValues,
__await: __await,
__awaiter: __awaiter,
__classPrivateFieldGet: __classPrivateFieldGet,
__classPrivateFieldIn: __classPrivateFieldIn,
__classPrivateFieldSet: __classPrivateFieldSet,
__createBinding: __createBinding,
__decorate: __decorate,
__disposeResources: __disposeResources,
__esDecorate: __esDecorate,
__exportStar: __exportStar,
__extends: __extends,
__generator: __generator,
__importDefault: __importDefault,
__importStar: __importStar,
__makeTemplateObject: __makeTemplateObject,
__metadata: __metadata,
__param: __param,
__propKey: __propKey,
__read: __read,
__rest: __rest,
__rewriteRelativeImportExtension: __rewriteRelativeImportExtension,
__runInitializers: __runInitializers,
__setFunctionName: __setFunctionName,
__spread: __spread,
__spreadArray: __spreadArray,
__spreadArrays: __spreadArrays,
__values: __values,
default: tslib_es6
});
const require$$0 = /*@__PURE__*/getAugmentedNamespace(tslib_es6$1);
const EventEmitter = {};
const errorClasses = {};
const deserializers = {};
const addCustomErrorDeserializer = (name, deserializer) => {
deserializers[name] = deserializer;
};
const createCustomErrorClass = (name) => {
class CustomErrorClass extends Error {
cause;
constructor(message, fields, options) {
super(message || name, options);
Object.setPrototypeOf(this, CustomErrorClass.prototype);
this.name = name;
if (fields) {
for (const k in fields) {
this[k] = fields[k];
}
}
if (options && isObject(options) && "cause" in options && !this.cause) {
const cause = options.cause;
this.cause = cause;
if ("stack" in cause) {
this.stack = this.stack + "\nCAUSE: " + cause.stack;
}
}
}
}
errorClasses[name] = CustomErrorClass;
return CustomErrorClass;
};
function isObject(value) {
return typeof value === "object";
}
createCustomErrorClass("AccountNameRequired");
createCustomErrorClass("AccountNotSupported");
createCustomErrorClass("AccountAwaitingSendPendingOperations");
createCustomErrorClass("AmountRequired");
createCustomErrorClass("BluetoothRequired");
createCustomErrorClass("BtcUnmatchedApp");
createCustomErrorClass("CantOpenDevice");
createCustomErrorClass("CashAddrNotSupported");
createCustomErrorClass("ClaimRewardsFeesWarning");
createCustomErrorClass("CurrencyNotSupported");
createCustomErrorClass("DeviceAppVerifyNotSupported");
createCustomErrorClass("DeviceGenuineSocketEarlyClose");
createCustomErrorClass("DeviceNotGenuine");
createCustomErrorClass("DeviceOnDashboardExpected");
createCustomErrorClass("DeviceOnDashboardUnexpected");
createCustomErrorClass("DeviceInOSUExpected");
createCustomErrorClass("DeviceHalted");
createCustomErrorClass("DeviceNameInvalid");
createCustomErrorClass("DeviceSocketFail");
createCustomErrorClass("DeviceSocketNoBulkStatus");
createCustomErrorClass("DeviceSocketNoBulkStatus");
createCustomErrorClass("UnresponsiveDeviceError");
const DisconnectedDevice = createCustomErrorClass("DisconnectedDevice");
const DisconnectedDeviceDuringOperation = createCustomErrorClass("DisconnectedDeviceDuringOperation");
createCustomErrorClass("DeviceExtractOnboardingStateError");
createCustomErrorClass("DeviceOnboardingStatePollingError");
createCustomErrorClass("EnpointConfig");
createCustomErrorClass("EthAppPleaseEnableContractData");
createCustomErrorClass("SolAppPleaseEnableContractData");
createCustomErrorClass("CeloAppPleaseEnableContractData");
createCustomErrorClass("FeeEstimationFailed");
createCustomErrorClass("FirmwareNotRecognized");
createCustomErrorClass("HardResetFail");
createCustomErrorClass("InvalidXRPTag");
createCustomErrorClass("InvalidAddress");
createCustomErrorClass("InvalidNonce");
createCustomErrorClass("InvalidAddressBecauseDestinationIsAlsoSource");
createCustomErrorClass("LatestMCUInstalledError");
createCustomErrorClass("LatestFirmwareVersionRequired");
createCustomErrorClass("UnsupportedFeatureError");
createCustomErrorClass("NanoSNotSupported");
createCustomErrorClass("UnknownMCU");
createCustomErrorClass("LedgerAPIError");
createCustomErrorClass("LedgerAPIErrorWithMessage");
createCustomErrorClass("LedgerAPINotAvailable");
createCustomErrorClass("ManagerAppAlreadyInstalled");
createCustomErrorClass("ManagerAppRelyOnBTC");
createCustomErrorClass("ManagerAppDepInstallRequired");
createCustomErrorClass("ManagerAppDepUninstallRequired");
createCustomErrorClass("ManagerDeviceLocked");
createCustomErrorClass("ManagerFirmwareNotEnoughSpace");
createCustomErrorClass("ManagerNotEnoughSpace");
createCustomErrorClass("ManagerUninstallBTCDep");
createCustomErrorClass("NetworkDown");
createCustomErrorClass("NetworkError");
createCustomErrorClass("NoAddressesFound");
createCustomErrorClass("NotEnoughBalance");
createCustomErrorClass("NotEnoughBalanceFees");
createCustomErrorClass("NotEnoughBalanceSwap");
createCustomErrorClass("NotEnoughBalanceToDelegate");
createCustomErrorClass("UnstakeNotEnoughStakedBalanceLeft");
createCustomErrorClass("RestakeNotEnoughStakedBalanceLeft");
createCustomErrorClass("NotEnoughToRestake");
createCustomErrorClass("NotEnoughToUnstake");
createCustomErrorClass("NotEnoughBalanceInParentAccount");
createCustomErrorClass("NotEnoughSpendableBalance");
createCustomErrorClass("NotEnoughBalanceBecauseDestinationNotCreated");
createCustomErrorClass("NotEnoughToStake");
createCustomErrorClass("NoAccessToCamera");
createCustomErrorClass("NotEnoughGas");
createCustomErrorClass("NotEnoughGasSwap");
createCustomErrorClass("TronEmptyAccount");
createCustomErrorClass("MaybeKeepTronAccountAlive");
createCustomErrorClass("NotSupportedLegacyAddress");
createCustomErrorClass("GasLessThanEstimate");
createCustomErrorClass("PriorityFeeTooLow");
createCustomErrorClass("PriorityFeeTooHigh");
createCustomErrorClass("PriorityFeeHigherThanMaxFee");
createCustomErrorClass("MaxFeeTooLow");
createCustomErrorClass("PasswordsDontMatch");
createCustomErrorClass("PasswordIncorrect");
createCustomErrorClass("RecommendSubAccountsToEmpty");
createCustomErrorClass("RecommendUndelegation");
createCustomErrorClass("TimeoutTagged");
createCustomErrorClass("UnexpectedBootloader");
createCustomErrorClass("MCUNotGenuineToDashboard");
createCustomErrorClass("RecipientRequired");
createCustomErrorClass("UnavailableTezosOriginatedAccountReceive");
createCustomErrorClass("UnavailableTezosOriginatedAccountSend");
createCustomErrorClass("UpdateFetchFileFail");
createCustomErrorClass("UpdateIncorrectHash");
createCustomErrorClass("UpdateIncorrectSig");
createCustomErrorClass("UpdateYourApp");
createCustomErrorClass("UserRefusedDeviceNameChange");
createCustomErrorClass("UserRefusedAddress");
createCustomErrorClass("UserRefusedFirmwareUpdate");
createCustomErrorClass("UserRefusedAllowManager");
createCustomErrorClass("UserRefusedOnDevice");
createCustomErrorClass("PinNotSet");
createCustomErrorClass("ExpertModeRequired");
const TransportOpenUserCancelled = createCustomErrorClass("TransportOpenUserCancelled");
const TransportInterfaceNotAvailable = createCustomErrorClass("TransportInterfaceNotAvailable");
const TransportRaceCondition = createCustomErrorClass("TransportRaceCondition");
const TransportWebUSBGestureRequired = createCustomErrorClass("TransportWebUSBGestureRequired");
createCustomErrorClass("TransactionHasBeenValidatedError");
createCustomErrorClass("TransportExchangeTimeoutError");
createCustomErrorClass("DeviceShouldStayInApp");
createCustomErrorClass("WebsocketConnectionError");
createCustomErrorClass("WebsocketConnectionFailed");
createCustomErrorClass("WrongDeviceForAccount");
createCustomErrorClass("WrongDeviceForAccountPayout");
createCustomErrorClass("MissingSwapPayloadParamaters");
createCustomErrorClass("WrongDeviceForAccountRefund");
createCustomErrorClass("WrongAppForCurrency");
createCustomErrorClass("ETHAddressNonEIP");
createCustomErrorClass("CantScanQRCode");
createCustomErrorClass("FeeNotLoaded");
createCustomErrorClass("FeeNotLoadedSwap");
createCustomErrorClass("FeeRequired");
createCustomErrorClass("FeeTooHigh");
createCustomErrorClass("PendingOperation");
createCustomErrorClass("SyncError");
createCustomErrorClass("PairingFailed");
createCustomErrorClass("PeerRemovedPairing");
createCustomErrorClass("GenuineCheckFailed");
createCustomErrorClass("LedgerAPI4xx");
createCustomErrorClass("LedgerAPI5xx");
createCustomErrorClass("FirmwareOrAppUpdateRequired");
createCustomErrorClass("ReplacementTransactionUnderpriced");
createCustomErrorClass("OpReturnSizeLimit");
createCustomErrorClass("DustLimit");
createCustomErrorClass("LanguageNotFound");
createCustomErrorClass("NoDBPathGiven");
createCustomErrorClass("DBWrongPassword");
createCustomErrorClass("DBNotReset");
createCustomErrorClass("SequenceNumberError");
createCustomErrorClass("DisabledTransactionBroadcastError");
var HwTransportErrorType;
(function (HwTransportErrorType) {
HwTransportErrorType["Unknown"] = "Unknown";
HwTransportErrorType["LocationServicesDisabled"] = "LocationServicesDisabled";
HwTransportErrorType["LocationServicesUnauthorized"] = "LocationServicesUnauthorized";
HwTransportErrorType["BluetoothScanStartFailed"] = "BluetoothScanStartFailed";
})(HwTransportErrorType || (HwTransportErrorType = {}));
class TransportError extends Error {
id;
constructor(message, id) {
const name = "TransportError";
super(message || name);
this.name = name;
this.message = message;
this.stack = new Error(message).stack;
this.id = id;
}
}
addCustomErrorDeserializer("TransportError", e => new TransportError(e.message, e.id));
const StatusCodes = {
ACCESS_CONDITION_NOT_FULFILLED: 0x9804,
ALGORITHM_NOT_SUPPORTED: 0x9484,
CLA_NOT_SUPPORTED: 0x6e00,
CODE_BLOCKED: 0x9840,
CODE_NOT_INITIALIZED: 0x9802,
COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981,
CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985,
CONTRADICTION_INVALIDATION: 0x9810,
CONTRADICTION_SECRET_CODE_STATUS: 0x9808,
DEVICE_IN_RECOVERY_MODE: 0x662f,
CUSTOM_IMAGE_EMPTY: 0x662e,
FILE_ALREADY_EXISTS: 0x6a89,
FILE_NOT_FOUND: 0x9404,
GP_AUTH_FAILED: 0x6300,
HALTED: 0x6faa,
INCONSISTENT_FILE: 0x9408,
INCORRECT_DATA: 0x6a80,
INCORRECT_LENGTH: 0x6700,
INCORRECT_P1_P2: 0x6b00,
INS_NOT_SUPPORTED: 0x6d00,
DEVICE_NOT_ONBOARDED: 0x6d07,
DEVICE_NOT_ONBOARDED_2: 0x6611,
INVALID_KCV: 0x9485,
INVALID_OFFSET: 0x9402,
LICENSING: 0x6f42,
LOCKED_DEVICE: 0x5515,
MAX_VALUE_REACHED: 0x9850,
MEMORY_PROBLEM: 0x9240,
MISSING_CRITICAL_PARAMETER: 0x6800,
NO_EF_SELECTED: 0x9400,
NOT_ENOUGH_MEMORY_SPACE: 0x6a84,
OK: 0x9000,
PIN_REMAINING_ATTEMPTS: 0x63c0,
REFERENCED_DATA_NOT_FOUND: 0x6a88,
SECURITY_STATUS_NOT_SATISFIED: 0x6982,
TECHNICAL_PROBLEM: 0x6f00,
UNKNOWN_APDU: 0x6d02,
USER_REFUSED_ON_DEVICE: 0x5501,
NOT_ENOUGH_SPACE: 0x5102,
APP_NOT_FOUND_OR_INVALID_CONTEXT: 0x5123,
INVALID_APP_NAME_LENGTH: 0x670a,
GEN_AES_KEY_FAILED: 0x5419,
INTERNAL_CRYPTO_OPERATION_FAILED: 0x541a,
INTERNAL_COMPUTE_AES_CMAC_FAILED: 0x541b,
ENCRYPT_APP_STORAGE_FAILED: 0x541c,
INVALID_BACKUP_STATE: 0x6642,
PIN_NOT_SET: 0x5502,
INVALID_BACKUP_LENGTH: 0x6733,
INVALID_RESTORE_STATE: 0x6643,
INVALID_CHUNK_LENGTH: 0x6734,
INVALID_BACKUP_HEADER: 0x684a,
TRUSTCHAIN_WRONG_SEED: 0xb007,
};
function getAltStatusMessage(code) {
switch (code) {
case 0x6700:
return "Incorrect length";
case 0x6800:
return "Missing critical parameter";
case 0x6982:
return "Security not satisfied (dongle locked or have invalid access rights)";
case 0x6985:
return "Condition of use not satisfied (denied by the user?)";
case 0x6a80:
return "Invalid data received";
case 0x6b00:
return "Invalid parameter received";
case 0x5515:
return "Locked device";
}
if (0x6f00 <= code && code <= 0x6fff) {
return "Internal error, please report";
}
}
class TransportStatusError extends Error {
statusCode;
statusText;
constructor(statusCode, { canBeMappedToChildError = true } = {}) {
const statusText = Object.keys(StatusCodes).find(k => StatusCodes[k] === statusCode) || "UNKNOWN_ERROR";
const smsg = getAltStatusMessage(statusCode) || statusText;
const statusCodeStr = statusCode.toString(16);
const message = `Ledger device: ${smsg} (0x${statusCodeStr})`;
super(message);
this.name = "TransportStatusError";
this.statusCode = statusCode;
this.statusText = statusText;
Object.setPrototypeOf(this, TransportStatusError.prototype);
if (canBeMappedToChildError && statusCode === StatusCodes.LOCKED_DEVICE) {
return new LockedDeviceError(message);
}
}
}
class LockedDeviceError extends TransportStatusError {
constructor(message) {
super(StatusCodes.LOCKED_DEVICE, { canBeMappedToChildError: false });
if (message) {
this.message = message;
}
this.name = "LockedDeviceError";
Object.setPrototypeOf(this, LockedDeviceError.prototype);
}
}
addCustomErrorDeserializer("TransportStatusError", e => new TransportStatusError(e.statusCode));
let id = 0;
const subscribers = [];
const log = (type, message, data) => {
const obj = {
type,
id: String(++id),
date: new Date(),
};
if (message)
obj.message = message;
dispatch(obj);
};
const trace = ({ type, message, data, context, }) => {
const obj = {
type,
id: String(++id),
date: new Date(),
};
if (message)
obj.message = message;
if (data)
obj.data = data;
if (context)
obj.context = context;
dispatch(obj);
};
class LocalTracer {
type;
context;
constructor(type, context) {
this.type = type;
this.context = context;
}
trace(message, data) {
trace({
type: this.type,
message,
data,
context: this.context,
});
}
getContext() {
return this.context;
}
setContext(context) {
this.context = context;
}
updateContext(contextToAdd) {
this.context = { ...this.context, ...contextToAdd };
}
getType() {
return this.type;
}
setType(type) {
this.type = type;
}
withType(type) {
return new LocalTracer(type, this.context);
}
withContext(context) {
return new LocalTracer(this.type, context);
}
withUpdatedContext(contextToAdd) {
return new LocalTracer(this.type, { ...this.context, ...contextToAdd });
}
}
const listen = (cb) => {
subscribers.push(cb);
return () => {
const i = subscribers.indexOf(cb);
if (i !== -1) {
subscribers[i] = subscribers[subscribers.length - 1];
subscribers.pop();
}
};
};
function dispatch(log) {
for (let i = 0; i < subscribers.length; i++) {
try {
subscribers[i](log);
}
catch (e) {
console.error(e);
}
}
}
if (typeof window !== "undefined") {
window.__ledgerLogsListen = listen;
}
const DEFAULT_LOG_TYPE = "transport";
class Transport {
exchangeTimeout = 30000;
unresponsiveTimeout = 15000;
deviceModel = null;
tracer;
constructor({ context, logType } = {}) {
this.tracer = new LocalTracer(logType ?? DEFAULT_LOG_TYPE, context);
}
static isSupported;
static list;
static listen;
static open;
exchange(_apdu, { abortTimeoutMs: _abortTimeoutMs } = {}) {
throw new Error("exchange not implemented");
}
exchangeBulk(apdus, observer) {
let unsubscribed = false;
const unsubscribe = () => {
unsubscribed = true;
};
const main = async () => {
if (unsubscribed)
return;
for (const apdu of apdus) {
const r = await this.exchange(apdu);
if (unsubscribed)
return;
const status = r.readUInt16BE(r.length - 2);
if (status !== StatusCodes.OK) {
throw new TransportStatusError(status);
}
observer.next(r);
}
};
main().then(() => !unsubscribed && observer.complete(), e => !unsubscribed && observer.error(e));
return { unsubscribe };
}
setScrambleKey(_key) { }
close() {
return Promise.resolve();
}
_events = new EventEmitter();
on(eventName, cb) {
this._events.on(eventName, cb);
}
off(eventName, cb) {
this._events.removeListener(eventName, cb);
}
emit(event, ...args) {
this._events.emit(event, ...args);
}
setDebugMode() {
console.warn("setDebugMode is deprecated. use @ledgerhq/logs instead. No logs are emitted in this anymore.");
}
setExchangeTimeout(exchangeTimeout) {
this.exchangeTimeout = exchangeTimeout;
}
setExchangeUnresponsiveTimeout(unresponsiveTimeout) {
this.unresponsiveTimeout = unresponsiveTimeout;
}
send = async (cla, ins, p1, p2, data = Buffer.alloc(0), statusList = [StatusCodes.OK], { abortTimeoutMs } = {}) => {
const tracer = this.tracer.withUpdatedContext({ function: "send" });
if (data.length >= 256) {
tracer.trace("data.length exceeded 256 bytes limit", { dataLength: data.length });
throw new TransportError("data.length exceed 256 bytes limit. Got: " + data.length, "DataLengthTooBig");
}
const response = await this.exchange(
Buffer.concat([Buffer.from([cla, ins, p1, p2]), Buffer.from([data.length]), data]), { abortTimeoutMs });
const sw = response.readUInt16BE(response.length - 2);
if (!statusList.some(s => s === sw)) {
throw new TransportStatusError(sw);
}
return response;
};
static create(openTimeout = 3000, listenTimeout) {
return new Promise((resolve, reject) => {
let found = false;
const sub = this.listen({
next: e => {
found = true;
if (sub)
sub.unsubscribe();
if (listenTimeoutId)
clearTimeout(listenTimeoutId);
this.open(e.descriptor, openTimeout).then(resolve, reject);
},
error: e => {
if (listenTimeoutId)
clearTimeout(listenTimeoutId);
reject(e);
},
complete: () => {
if (listenTimeoutId)
clearTimeout(listenTimeoutId);
if (!found) {
reject(new TransportError(this.ErrorMessage_NoDeviceFound, "NoDeviceFound"));
}
},
});
const listenTimeoutId = listenTimeout
? setTimeout(() => {
sub.unsubscribe();
reject(new TransportError(this.ErrorMessage_ListenTimeout, "ListenTimeout"));
}, listenTimeout)
: null;
});
}
exchangeBusyPromise;
async exchangeAtomicImpl(f) {
const tracer = this.tracer.withUpdatedContext({
function: "exchangeAtomicImpl",
unresponsiveTimeout: this.unresponsiveTimeout,
});
if (this.exchangeBusyPromise) {
tracer.trace("Atomic exchange is already busy");
throw new TransportRaceCondition("An action was already pending on the Ledger device. Please deny or reconnect.");
}
let resolveBusy;
const busyPromise = new Promise(r => {
resolveBusy = r;
});
this.exchangeBusyPromise = busyPromise;
let unresponsiveReached = false;
const timeout = setTimeout(() => {
tracer.trace(`Timeout reached, emitting Transport event "unresponsive"`, {
unresponsiveTimeout: this.unresponsiveTimeout,
});
unresponsiveReached = true;
this.emit("unresponsive");
}, this.unresponsiveTimeout);
try {
const res = await f();
if (unresponsiveReached) {
tracer.trace("Device was unresponsive, emitting responsive");
this.emit("responsive");
}
return res;
}
finally {
tracer.trace("Finalize, clearing busy guard");
clearTimeout(timeout);
if (resolveBusy)
resolveBusy();
this.exchangeBusyPromise = null;
}
}
decorateAppAPIMethods(self, methods, scrambleKey) {
for (const methodName of methods) {
self[methodName] = this.decorateAppAPIMethod(methodName, self[methodName], self, scrambleKey);
}
}
_appAPIlock = null;
decorateAppAPIMethod(methodName, f, ctx, scrambleKey) {
return async (...args) => {
const { _appAPIlock } = this;
if (_appAPIlock) {
return Promise.reject(new TransportError("Ledger Device is busy (lock " + _appAPIlock + ")", "TransportLocked"));
}
try {
this._appAPIlock = methodName;
this.setScrambleKey(scrambleKey);
return await f.apply(ctx, args);
}
finally {
this._appAPIlock = null;
}
};
}
setTraceContext(context) {
this.tracer = this.tracer.withContext(context);
}
updateTraceContext(contextToAdd) {
this.tracer.updateContext(contextToAdd);
}
getTraceContext() {
return this.tracer.getContext();
}
static ErrorMessage_ListenTimeout = "No Ledger device found (timeout)";
static ErrorMessage_NoDeviceFound = "No Ledger device found";
}
const Tag = 0x05;
function asUInt16BE(value) {
const b = Buffer.alloc(2);
b.writeUInt16BE(value, 0);
return b;
}
const initialAcc = {
data: Buffer.alloc(0),
dataLength: 0,
sequence: 0,
};
const createHIDframing = (channel, packetSize) => {
return {
makeBlocks(apdu) {
let data = Buffer.concat([asUInt16BE(apdu.length), apdu]);
const blockSize = packetSize - 5;
const nbBlocks = Math.ceil(data.length / blockSize);
data = Buffer.concat([data, Buffer.alloc(nbBlocks * blockSize - data.length + 1).fill(0)]);
const blocks = [];
for (let i = 0; i < nbBlocks; i++) {
const head = Buffer.alloc(5);
head.writeUInt16BE(channel, 0);
head.writeUInt8(Tag, 2);
head.writeUInt16BE(i, 3);
const chunk = data.slice(i * blockSize, (i + 1) * blockSize);
blocks.push(Buffer.concat([head, chunk]));
}
return blocks;
},
reduceResponse(acc, chunk) {
let { data, dataLength, sequence } = acc || initialAcc;
if (chunk.readUInt16BE(0) !== channel) {
throw new TransportError("Invalid channel", "InvalidChannel");
}
if (chunk.readUInt8(2) !== Tag) {
throw new TransportError("Invalid tag", "InvalidTag");
}
if (chunk.readUInt16BE(3) !== sequence) {
throw new TransportError("Invalid sequence", "InvalidSequence");
}
if (!acc) {
dataLength = chunk.readUInt16BE(5);
}
sequence++;
const chunkData = chunk.slice(acc ? 5 : 7);
data = Buffer.concat([data, chunkData]);
if (data.length > dataLength) {
data = data.slice(0, dataLength);
}
return {
data,
dataLength,
sequence,
};
},
getReducedResult(acc) {
if (acc && acc.dataLength === acc.data.length) {
return acc.data;
}
},
};
};
var re$2 = {exports: {}};
const SEMVER_SPEC_VERSION = '2.0.0';
const MAX_LENGTH$1 = 256;
const MAX_SAFE_INTEGER$1 = Number.MAX_SAFE_INTEGER ||
9007199254740991;
const MAX_SAFE_COMPONENT_LENGTH = 16;
const MAX_SAFE_BUILD_LENGTH = MAX_LENGTH$1 - 6;
const RELEASE_TYPES = [
'major',
'premajor',
'minor',
'preminor',
'patch',
'prepatch',
'prerelease',
];
var constants$1 = {
MAX_LENGTH: MAX_LENGTH$1,
MAX_SAFE_COMPONENT_LENGTH,
MAX_SAFE_BUILD_LENGTH,
MAX_SAFE_INTEGER: MAX_SAFE_INTEGER$1,
RELEASE_TYPES,
SEMVER_SPEC_VERSION,
FLAG_INCLUDE_PRERELEASE: 0b001,
FLAG_LOOSE: 0b010,
};
getDefaultExportFromCjs(constants$1);
const debug$1 = (
typeof process === 'object' &&
process.env &&
process.env.NODE_DEBUG &&
/\bsemver\b/i.test(process.env.NODE_DEBUG)
) ? (...args) => console.error('SEMVER', ...args)
: () => {};
var debug_1 = debug$1;
getDefaultExportFromCjs(debug_1);
(function (module, exports$1) {
const {
MAX_SAFE_COMPONENT_LENGTH,
MAX_SAFE_BUILD_LENGTH,
MAX_LENGTH,
} = constants$1;
const debug = debug_1;
exports$1 = module.exports = {};
const re = exports$1.re = [];
const safeRe = exports$1.safeRe = [];
const src = exports$1.src = [];
const safeSrc = exports$1.safeSrc = [];
const t = exports$1.t = {};
let R = 0;
const LETTERDASHNUMBER = '[a-zA-Z0-9-]';
const safeRegexReplacements = [
['\\s', 1],
['\\d', MAX_LENGTH],
[LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],
];
const makeSafeRegex = (value) => {
for (const [token, max] of safeRegexReplacements) {
value = value
.split(`${token}*`).join(`${token}{0,${max}}`)
.split(`${token}+`).join(`${token}{1,${max}}`);
}
return value
};
const createToken = (name, value, isGlobal) => {
const safe = makeSafeRegex(value);
const index = R++;
debug(name, index, value);
t[name] = index;
src[index] = value;
safeSrc[index] = safe;
re[index] = new RegExp(value, isGlobal ? 'g' : undefined);
safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined);
};
createToken('NUMERICIDENTIFIER', '0|[1-9]\\d*');
createToken('NUMERICIDENTIFIERLOOSE', '\\d+');
createToken('NONNUMERICIDENTIFIER', `\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`);
createToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\.` +
`(${src[t.NUMERICIDENTIFIER]})\\.` +
`(${src[t.NUMERICIDENTIFIER]})`);
createToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
`(${src[t.NUMERICIDENTIFIERLOOSE]})\\.` +
`(${src[t.NUMERICIDENTIFIERLOOSE]})`);
createToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]
}|${src[t.NUMERICIDENTIFIER]})`);
createToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]
}|${src[t.NUMERICIDENTIFIERLOOSE]})`);
createToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]
}(?:\\.${src[t.PRERELEASEIDENTIFIER]})*))`);
createToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]
}(?:\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`);
createToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`);
createToken('BUILD', `(?:\\+(${src[t.BUILDIDENTIFIER]
}(?:\\.${src[t.BUILDIDENTIFIER]})*))`);
createToken('FULLPLAIN', `v?${src[t.MAINVERSION]
}${src[t.PRERELEASE]}?${
src[t.BUILD]}?`);
createToken('FULL', `^${src[t.FULLPLAIN]}$`);
createToken('LOOSEPLAIN', `[v=\\s]*${src[t.MAINVERSIONLOOSE]
}${src[t.PRERELEASELOOSE]}?${
src[t.BUILD]}?`);
createToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`);
createToken('GTLT', '((?:<|>)?=?)');
createToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);
createToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\*`);
createToken('XRANGEPLAIN', `[v=\\s]*(${src[t.XRANGEIDENTIFIER]})` +
`(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
`(?:\\.(${src[t.XRANGEIDENTIFIER]})` +
`(?:${src[t.PRERELEASE]})?${
src[t.BUILD]}?` +
`)?)?`);
createToken('XRANGEPLAINLOOSE', `[v=\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +
`(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
`(?:\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +
`(?:${src[t.PRERELEASELOOSE]})?${
src[t.BUILD]}?` +
`)?)?`);
createToken('XRANGE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAIN]}$`);
createToken('XRANGELOOSE', `^${src[t.GTLT]}\\s*${src[t.XRANGEPLAINLOOSE]}$`);
createToken('COERCEPLAIN', `${'(^|[^\\d])' +
'(\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +
`(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +
`(?:\\.(\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`);
createToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\d])`);
createToken('COERCEFULL', src[t.COERCEPLAIN] +
`(?:${src[t.PRERELEASE]})?` +
`(?:${src[t.BUILD]})?` +
`(?:$|[^\\d])`);
createToken('COERCERTL', src[t.COERCE], true);
createToken('COERCERTLFULL', src[t.COERCEFULL], true);
createToken('LONETILDE', '(?:~>?)');
createToken('TILDETRIM', `(\\s*)${src[t.LONETILDE]}\\s+`, true);
exports$1.tildeTrimReplace = '$1~';
createToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`);
createToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`);
createToken('LONECARET', '(?:\\^)');
createToken('CARETTRIM', `(\\s*)${src[t.LONECARET]}\\s+`, true);
exports$1.caretTrimReplace = '$1^';
createToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`);
createToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`);
createToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\s*(${src[t.LOOSEPLAIN]})$|^$`);
createToken('COMPARATOR', `^${src[t.GTLT]}\\s*(${src[t.FULLPLAIN]})$|^$`);
createToken('COMPARATORTRIM', `(\\s*)${src[t.GTLT]
}\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true);
exports$1.comparatorTrimReplace = '$1$2$3';
createToken('HYPHENRANGE', `^\\s*(${src[t.XRANGEPLAIN]})` +
`\\s+-\\s+` +
`(${src[t.XRANGEPLAIN]})` +
`\\s*$`);
createToken('HYPHENRANGELOOSE', `^\\s*(${src[t.XRANGEPLAINLOOSE]})` +
`\\s+-\\s+` +
`(${src[t.XRANGEPLAINLOOSE]})` +
`\\s*$`);
createToken('STAR', '(<|>)?=?\\s*\\*');
createToken('GTE0', '^\\s*>=\\s*0\\.0\\.0\\s*$');
createToken('GTE0PRE', '^\\s*>=\\s*0\\.0\\.0-0\\s*$');
} (re$2, re$2.exports));
var reExports = re$2.exports;
getDefaultExportFromCjs(reExports);
const looseOption = Object.freeze({ loose: true });
const emptyOpts = Object.freeze({ });
const parseOptions$1 = options => {
if (!options) {
return emptyOpts
}
if (typeof options !== 'object') {
return looseOption
}
return options
};
var parseOptions_1 = parseOptions$1;
getDefaultExportFromCjs(parseOptions_1);
const numeric = /^[0-9]+$/;
const compareIdentifiers$1 = (a, b) => {
if (typeof a === 'number' && typeof b === 'number') {
return a === b ? 0 : a < b ? -1 : 1
}
const anum = numeric.test(a);
const bnum = numeric.test(b);
if (anum && bnum) {
a = +a;
b = +b;
}
return a === b ? 0
: (anum && !bnum) ? -1
: (bnum && !anum) ? 1
: a < b ? -1
: 1
};
const rcompareIdentifiers = (a, b) => compareIdentifiers$1(b, a);
var identifiers$1 = {
compareIdentifiers: compareIdentifiers$1,
rcompareIdentifiers,
};
getDefaultExportFromCjs(identifiers$1);
const debug = debug_1;
const { MAX_LENGTH, MAX_SAFE_INTEGER } = constants$1;
const { safeRe: re$1, t: t$1 } = reExports;
const parseOptions = parseOptions_1;
const { compareIdentifiers } = identifiers$1;
let SemVer$d = class SemVer {
constructor (version, options) {
options = parseOptions(options);
if (version instanceof SemVer) {
if (version.loose === !!options.loose &&
version.includePrerelease === !!options.includePrerelease) {
return version
} else {
version = version.version;
}
} else if (typeof version !== 'string') {
throw new TypeError(`Invalid version. Must be a string. Got type "${typeof version}".`)
}
if (version.length > MAX_LENGTH) {
throw new TypeError(
`version is longer than ${MAX_LENGTH} characters`
)
}
debug('SemVer', version, options);
this.options = options;
this.loose = !!options.loose;
this.includePrerelease = !!options.includePrerelease;
const m = version.trim().match(options.loose ? re$1[t$1.LOOSE] : re$1[t$1.FULL]);
if (!m) {
throw new TypeError(`Invalid Version: ${version}`)
}
this.raw = version;
this.major = +m[1];
this.minor = +m[2];
this.patch = +m[3];
if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
throw new TypeError('Invalid major version')
}
if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
throw new TypeError('Invalid minor version')
}
if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
throw new TypeError('Invalid patch version')
}
if (!m[4]) {
this.prerelease = [];
} else {
this.prerelease = m[4].split('.').map((id) => {
if (/^[0-9]+$/.test(id)) {
const num = +id;
if (num >= 0 && num < MAX_SAFE_INTEGER) {
return num
}
}
return id
});
}
this.build = m[5] ? m[5].split('.') : [];
this.format();
}
format () {
this.version = `${this.major}.${this.minor}.${this.patch}`;
if (this.prerelease.length) {
this.version += `-${this.prerelease.join('.')}`;
}
return this.version
}
toString () {
return this.version
}
compare (other) {
debug('SemVer.compare', this.version, this.options, other);
if (!(other instanceof SemVer)) {
if (typeof other === 'string' && other === this.version) {
return 0
}
other = new SemVer(other, this.options);
}
if (other.version === this.version) {
return 0
}
return this.compareMain(other) || this.comparePre(other)
}
compareMain (other) {
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options);
}
if (this.major < other.major) {
return -1
}
if (this.major > other.major) {
return 1
}
if (this.minor < other.minor) {
return -1
}
if (this.minor > other.minor) {
return 1
}
if (this.patch < other.patch) {
return -1
}
if (this.patch > other.patch) {
return 1
}
return 0
}
comparePre (other) {
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options);
}
if (this.prerelease.length && !other.prerelease.length) {
return -1
} else if (!this.prerelease.length && other.prerelease.length) {
return 1
} else if (!this.prerelease.length && !other.prerelease.length) {
return 0
}
let i = 0;
do {
const a = this.prerelease[i];
const b = other.prerelease[i];
debug('prerelease compare', i, a, b);
if (a === undefined && b === undefined) {
return 0
} else if (b === undefined) {
return 1
} else if (a === undefined) {
return -1
} else if (a === b) {
continue
} else {
return compareIdentifiers(a, b)
}
} while (++i)
}
compareBuild (other) {
if (!(other instanceof SemVer)) {
other = new SemVer(other, this.options);
}
let i = 0;
do {
const a = this.build[i];
const b = other.build[i];
debug('build compare', i, a, b);
if (a === undefined && b === undefined) {
return 0
} else if (b === undefined) {
return 1
} else if (a === undefined) {
return -1
} else if (a === b) {
continue
} else {
return compareIdentifiers(a, b)
}
} while (++i)
}
inc (release, identifier, identifierBase) {
if (release.startsWith('pre')) {
if (!identifier && identifierBase === false) {
throw new Error('invalid increment argument: identifier is empty')
}
if (identifier) {
const match = `-${identifier}`.match(this.options.loose ? re$1[t$1.PRERELEASELOOSE] : re$1[t$1.PRERELEASE]);
if (!match || match[1] !== identifier) {
throw new Error(`invalid identifier: ${identifier}`)
}
}
}
switch (release) {
case 'premajor':
this.prerelease.length = 0;
this.patch = 0;
this.minor = 0;
this.major++;
this.inc('pre', identifier, identifierBase);
break
case 'preminor':
this.prerelease.length = 0;
this.patch = 0;
this.minor++;
this.inc('pre', identifier, identifierBase);
break
case 'prepatch':
this.prerelease.length = 0;
this.inc('patch', identifier, identifierBase);
this.inc('pre', identifier, identifierBase);
break
case 'prerelease':
if (this.prerelease.length === 0) {
this.inc('patch', identifier, identifierBase);
}
this.inc('pre', identifier, identifierBase);
break
case 'release':
if (this.prerelease.length === 0) {
throw new Error(`version ${this.raw} is not a prerelease`)
}
this.prerelease.length = 0;
break
case 'major':
if (
this.minor !== 0 ||
this.patch !== 0 ||
this.prerelease.length === 0
) {
this.major++;
}
this.minor = 0;
this.patch = 0;
this.prerelease = [];
break
case 'minor':
if (this.patch !== 0 || this.prerelease.length === 0) {
this.minor++;
}
this.patch = 0;
this.prerelease = [];
break
case 'patch':
if (this.prerelease.length === 0) {
this.patch++;
}
this.prerelease = [];
break
case 'pre': {
const base = Number(identifierBase) ? 1 : 0;
if (this.prerelease.length === 0) {
this.prerelease = [base];
} else {
let i = this.prerelease.length;
while (--i >= 0) {
if (typeof this.prerelease[i] === 'number') {
this.prerelease[i]++;
i = -2;
}
}
if (i === -1) {
if (identifier === this.prerelease.join('.') && identifierBase === false) {
throw new Error('invalid increment argument: identifier already exists')
}
this.prerelease.push(base);
}
}
if (identifier) {
let prerelease = [identifier, base];
if (identifierBase === false) {
prerelease = [identifier];
}
if (compareIdentifiers(this.prerelease[0], identifier) === 0) {
if (isNaN(this.prerelease[1])) {
this.prerelease = prerelease;
}
} else {
this.prerelease = prerelease;
}
}
break
}
default:
throw new Error(`invalid increment argument: ${release}`)
}
this.raw = this.format();
if (this.build.length) {
this.raw += `+${this.build.join('.')}`;
}
return this
}
};
var semver$2 = SemVer$d;
getDefaultExportFromCjs(semver$2);
const SemVer$c = semver$2;
const parse$6 = (version, options, throwErrors = false) => {
if (version instanceof SemVer$c) {
return version
}
try {
return new SemVer$c(version, options)
} catch (er) {
if (!throwErrors) {
return null
}
throw er
}
};
var parse_1 = parse$6;
getDefaultExportFromCjs(parse_1);
const parse$5 = parse_1;
const valid$2 = (version, options) => {
const v = parse$5(version, options);
return v ? v.version : null
};
var valid_1 = valid$2;
getDefaultExportFromCjs(valid_1);
const parse$4 = parse_1;
const clean$1 = (version, options) => {
const s = parse$4(version.trim().replace(/^[=v]+/, ''), options);
return s ? s.version : null
};
var clean_1 = clean$1;
getDefaultExportFromCjs(clean_1);
const SemVer$b = semver$2;
const inc$1 = (version, release, options, identifier, identifierBase) => {
if (typeof (options) === 'string') {
identifierBase = identifier;
identifier = options;
options = undefined;
}
try {
return new SemVer$b(
version instanceof SemVer$b ? version.version : version,
options
).inc(release, identifier, identifierBase).version
} catch (er) {
return null
}
};
var inc_1 = inc$1;
getDefaultExportFromCjs(inc_1);
const parse$3 = parse_1;
const diff$1 = (version1, version2) => {
const v1 = parse$3(version1, null, true);
const v2 = parse$3(version2, null, true);
const comparison = v1.compare(v2);
if (comparison === 0) {
return null
}
const v1Higher = comparison > 0;
const highVersion = v1Higher ? v1 : v2;
const lowVersion = v1Higher ? v2 : v1;
const highHasPre = !!highVersion.prerelease.length;
const lowHasPre = !!lowVersion.prerelease.length;
if (lowHasPre && !highHasPre) {
if (!lowVersion.patch && !lowVersion.minor) {
return 'major'
}
if (lowVersion.compareMain(highVersion) === 0) {
if (lowVersion.minor && !lowVersion.patch) {
return 'minor'
}
return 'patch'
}
}
const prefix = highHasPre ? 'pre' : '';
if (v1.major !== v2.major) {
return prefix + 'major'
}
if (v1.minor !== v2.minor) {
return prefix + 'minor'
}
if (v1.patch !== v2.patch) {
return prefix + 'patch'
}
return 'prerelease'
};
var diff_1 = diff$1;
getDefaultExportFromCjs(diff_1);
const SemVer$a = semver$2;
const major$1 = (a, loose) => new SemVer$a(a, loose).major;
var major_1 = major$1;
getDefaultExportFromCjs(major_1);
const SemVer$9 = semver$2;
const minor$1 = (a, loose) => new SemVer$9(a, loose).minor;
var minor_1 = minor$1;
getDefaultExportFromCjs(minor_1);
const SemVer$8 = semver$2;
const patch$1 = (a, loose) => new SemVer$8(a, loose).patch;
var patch_1 = patch$1;
getDefaultExportFromCjs(patch_1);
const parse$2 = parse_1;
const prerelease$1 = (version, options) => {
const parsed = parse$2(version, options);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
};
var prerelease_1 = prerelease$1;
getDefaultExportFromCjs(prerelease_1);
const SemVer$7 = semver$2;
const compare$b = (a, b, loose) =>
new SemVer$7(a, loose).compare(new SemVer$7(b, loose));
var compare_1 = compare$b;
getDefaultExportFromCjs(compare_1);
const compare$a = compare_1;
const rcompare$1 = (a, b, loose) => compare$a(b, a, loose);
var rcompare_1 = rcompare$1;
getDefaultExportFromCjs(rcompare_1);
const compare$9 = compare_1;
const compareLoose$1 = (a, b) => compare$9(a, b, true);
var compareLoose_1 = compareLoose$1;
getDefaultExportFromCjs(compareLoose_1);
const SemVer$6 = semver$2;
const compareBuild$3 = (a, b, loose) => {
const versionA = new SemVer$6(a, loose);
const versionB = new SemVer$6(b, loose);
return versionA.compare(versionB) || versionA.compareBuild(versionB)
};
var compareBuild_1 = compareBuild$3;
getDefaultExportFromCjs(compareBuild_1);
const compareBuild$2 = compareBuild_1;
const sort$1 = (list, loose) => list.sort((a, b) => compareBuild$2(a, b, loose));
var sort_1 = sort$1;
getDefaultExportFromCjs(sort_1);
const compareBuild$1 = compareBuild_1;
const rsort$1 = (list, loose) => list.sort((a, b) => compareBuild$1(b, a, loose));
var rsort_1 = rsort$1;
getDefaultExportFromCjs(rsort_1);
const compare$8 = compare_1;
const gt$4 = (a, b, loose) => compare$8(a, b, loose) > 0;
var gt_1 = gt$4;
getDefaultExportFromCjs(gt_1);
const compare$7 = compare_1;
const lt$3 = (a, b, loose) => compare$7(a, b, loose) < 0;
var lt_1 = lt$3;
getDefaultExportFromCjs(lt_1);
const compare$6 = compare_1;
const eq$2 = (a, b, loose) => compare$6(a, b, loose) === 0;
var eq_1 = eq$2;
getDefaultExportFromCjs(eq_1);
const compare$5 = compare_1;
const neq$2 = (a, b, loose) => compare$5(a, b, loose) !== 0;
var neq_1 = neq$2;
getDefaultExportFromCjs(neq_1);
const compare$4 = compare_1;
const gte$3 = (a, b, loose) => compare$4(a, b, loose) >= 0;
var gte_1 = gte$3;
getDefaultExportFromCjs(gte_1);
const compare$3 = compare_1;
const lte$3 = (a, b, loose) => compare$3(a, b, loose) <= 0;
var lte_1 = lte$3;
getDefaultExportFromCjs(lte_1);
const eq$1 = eq_1;
const neq$1 = neq_1;
const gt$3 = gt_1;
const gte$2 = gte_1;
const lt$2 = lt_1;
const lte$2 = lte_1;
const cmp$1 = (a, op, b, loose) => {
switch (op) {
case '===':
if (typeof a === 'object') {
a = a.version;
}
if (typeof b === 'object') {
b = b.version;
}
return a === b
case '!==':
if (typeof a === 'object') {
a = a.version;
}
if (typeof b === 'object') {
b = b.version;
}
return a !== b
case '':
case '=':
case '==':
return eq$1(a, b, loose)
case '!=':
return neq$1(a, b, loose)
case '>':
return gt$3(a, b, loose)
case '>=':
return gte$2(a, b, loose)
case '<':
return lt$2(a, b, loose)
case '<=':
return lte$2(a, b, loose)
default:
throw new TypeError(`Invalid operator: ${op}`)
}
};
var cmp_1 = cmp$1;
getDefaultExportFromCjs(cmp_1);
const SemVer$5 = semver$2;
const parse$1 = parse_1;
const { safeRe: re, t } = reExports;
const coerce$1 = (version, options) => {
if (version instanceof SemVer$5) {
return version
}
if (typeof version === 'number') {
version = String(version);
}
if (typeof version !== 'string') {
return null
}
options = options || {};
let match = null;
if (!options.rtl) {
match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE]);
} else {
const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL];
let next;
while ((next = coerceRtlRegex.exec(version)) &&
(!match || match.index + match[0].length !== version.length)
) {
if (!match ||
next.index + next[0].length !== match.index + match[0].length) {
match = next;
}
coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length;
}
coerceRtlRegex.lastIndex = -1;
}
if (match === null) {
return null
}
const major = match[2];
const minor = match[3] || '0';
const patch = match[4] || '0';
const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : '';
const build = options.includePrerelease && match[6] ? `+${match[6]}` : '';
return parse$1(`${major}.${minor}.${patch}${prerelease}${build}`, options)
};
var coerce_1 = coerce$1;
getDefaultExportFromCjs(coerce_1);
var lrucache;
var hasRequiredLrucache;
function requireLrucache () {
if (hasRequiredLrucache) return lrucache;
hasRequiredLrucache = 1;
class LRUCache {
constructor () {
this.max = 1000;
this.map = new Map();
}
get (key) {
const value = this.map.get(key);
if (value === undefined) {
return undefined
} else {
this.map.delete(key);
this.map.set(key, value);
return value
}
}
delete (key) {
return this.map.delete(key)
}
set (key, value) {
const deleted = this.delete(key);
if (!deleted && value !== undefined) {
if (this.map.size >= this.max) {
const firstKey = this.map.keys().next().value;
this.delete(firstKey);
}
this.map.set(key, value);
}
return this
}
}
lrucache = LRUCache;
return lrucache;
}
var range;
var hasRequiredRange;
function requireRange () {
if (hasRequiredRange) return range;
hasRequiredRange = 1;
const SPACE_CHARACTERS = /\s+/g;
class Range {
constructor (range, options) {
options = parseOptions(options);
if (range instanceof Range) {
if (
range.loose === !!options.loose &&
range.includePrerelease === !!options.includePrerelease
) {
return range
} else {
return new Range(range.raw, options)
}
}
if (range instanceof Comparator) {
this.raw = range.value;
this.set = [[range]];
this.formatted = undefined;
return this
}
this.options = options;
this.loose = !!options.loose;
this.includePrerelease = !!options.includePrerelease;
this.raw = range.trim().replace(SPACE_CHARACTERS, ' ');
this.set = this.raw
.split('||')
.map(r => this.parseRange(r.trim()))
.filter(c => c.length);
if (!this.set.length) {
throw new TypeError(`Invalid SemVer Range: ${this.raw}`)
}
if (this.set.length > 1) {
const first = this.set[0];
this.set = this.set.filter(c => !isNullSet(c[0]));
if (this.set.length === 0) {
this.set = [first];
} else if (this.set.length > 1) {
for (const c of this.set) {
if (c.length === 1 && isAny(c[0])) {
this.set = [c];
break
}
}
}
}
this.formatted = undefined;
}
get range () {
if (this.formatted === undefined) {
this.formatted = '';
for (let i = 0; i < this.set.length; i++) {
if (i > 0) {
this.formatted += '||';
}
const comps = this.set[i];
for (let k = 0; k < comps.length; k++) {
if (k > 0) {
this.formatted += ' ';
}
this.formatted += comps[k].toString().trim();
}
}
}
return this.formatted
}
format () {
return this.range
}
toString () {
return this.range
}
parseRange (range) {
const memoOpts =
(this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |
(this.options.loose && FLAG_LOOSE);
const memoKey = memoOpts + ':' + range;
const cached = cache.get(memoKey);
if (cached) {
return cached
}
const loose = this.options.loose;
const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE];
range = range.replace(hr, hyphenReplace(this.options.includePrerelease));
debug('hyphen replace', range);
range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace);
debug('comparator trim', range);
range = range.replace(re[t.TILDETRIM], tildeTrimReplace);
debug('tilde trim', range);
range = range.replace(re[t.CARETTRIM], caretTrimReplace);
debug('caret trim', range);
let rangeList = range
.split(' ')
.map(comp => parseComparator(comp, this.options))
.join(' ')
.split(/\s+/)
.map(comp => replaceGTE0(comp, this.options));
if (loose) {
rangeList = rangeList.filter(comp => {
debug('loose invalid filter', comp, this.options);
return !!comp.match(re[t.COMPARATORLOOSE])
});
}
debug('range list', rangeList);
const rangeMap = new Map();
const comparators = rangeList.map(comp => new Comparator(comp, this.options));
for (const comp of comparators) {
if (isNullSet(comp)) {
return [comp]
}
rangeMap.set(comp.value, comp);
}
if (rangeMap.size > 1 && rangeMap.has('')) {
rangeMap.delete('');
}
const result = [...rangeMap.values()];
cache.set(memoKey, result);
return result
}
intersects (range, options) {
if (!(range instanceof Range)) {
throw new TypeError('a Range is required')
}
return this.set.some((thisComparators) => {
return (
isSatisfiable(thisComparators, options) &&
range.set.some((rangeComparators) => {
return (
isSatisfiable(rangeComparators, options) &&
thisComparators.every((thisComparator) => {
return rangeComparators.every((rangeComparator) => {
return thisComparator.intersects(rangeComparator, options)
})
})
)
})
)
})
}
test (version) {
if (!version) {
return false
}
if (typeof version === 'string') {
try {
version = new SemVer(version, this.options);
} catch (er) {
return false
}
}
for (let i = 0; i < this.set.length; i++) {
if (testSet(this.set[i], version, this.options)) {
return true
}
}
return false
}
}
range = Range;
const LRU = requireLrucache();
const cache = new LRU();
const parseOptions = parseOptions_1;
const Comparator = requireComparator();
const debug = debug_1;
const SemVer = semver$2;
const {
safeRe: re,
t,
comparatorTrimReplace,
tildeTrimReplace,
caretTrimReplace,
} = reExports;
const { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = constants$1;
const isNullSet = c => c.value === '<0.0.0-0';
const isAny = c => c.value === '';
const isSatisfiable = (comparators, options) => {
let result = true;
const remainingComparators = comparators.slice();
let testComparator = remainingComparators.pop();
while (result && remainingComparators.length) {
result = remainingComparators.every((otherComparator) => {
return testComparator.intersects(otherComparator, options)
});
testComparator = remainingComparators.pop();
}
return result
};
const parseComparator = (comp, options) => {
comp = comp.replace(re[t.BUILD], '');
debug('comp', comp, options);
comp = replaceCarets(comp, options);
debug('caret', comp);
comp = replaceTildes(comp, options);
debug('tildes', comp);
comp = replaceXRanges(comp, options);
debug('xrange', comp);
comp = replaceStars(comp, options);
debug('stars', comp);
return comp
};
const isX = id => !id || id.toLowerCase() === 'x' || id === '*';
const replaceTildes = (comp, options) => {
return comp
.trim()
.split(/\s+/)
.map((c) => replaceTilde(c, options))
.join(' ')
};
const replaceTilde = (comp, options) => {
const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE];
return comp.replace(r, (_, M, m, p, pr) => {
debug('tilde', comp, _, M, m, p, pr);
let ret;
if (isX(M)) {
ret = '';
} else if (isX(m)) {
ret = `>=${M}.0.0 <${+M + 1}.0.0-0`;
} else if (isX(p)) {
ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`;
} else if (pr) {
debug('replaceTilde pr', pr);
ret = `>=${M}.${m}.${p}-${pr
} <${M}.${+m + 1}.0-0`;
} else {
ret = `>=${M}.${m}.${p
} <${M}.${+m + 1}.0-0`;
}
debug('tilde return', ret);
return ret
})
};
const replaceCarets = (comp, options) => {
return comp
.trim()
.split(/\s+/)
.map((c) => replaceCaret(c, options))
.join(' ')
};
const replaceCaret = (comp, options) => {
debug('caret', comp, options);
const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET];
const z = options.includePrerelease ? '-0' : '';
return comp.replace(r, (_, M, m, p, pr) => {
debug('caret', comp, _, M, m, p, pr);
let ret;
if (isX(M)) {
ret = '';
} else if (isX(m)) {
ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`;
} else if (isX(p)) {
if (M === '0') {
ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`;
} else {
ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`;
}
} else if (pr) {
debug('replaceCaret pr', pr);
if (M === '0') {
if (m === '0') {
ret = `>=${M}.${m}.${p}-${pr
} <${M}.${m}.${+p + 1}-0`;
} else {
ret = `>=${M}.${m}.${p}-${pr
} <${M}.${+m + 1}.0-0`;
}
} else {
ret = `>=${M}.${m}.${p}-${pr
} <${+M + 1}.0.0-0`;
}
} else {
debug('no pr');
if (M === '0') {
if (m === '0') {
ret = `>=${M}.${m}.${p
}${z} <${M}.${m}.${+p + 1}-0`;
} else {
ret = `>=${M}.${m}.${p
}${z} <${M}.${+m + 1}.0-0`;
}
} else {
ret = `>=${M}.${m}.${p
} <${+M + 1}.0.0-0`;
}
}
debug('caret return', ret);
return ret
})
};
const replaceXRanges = (comp, options) => {
debug('replaceXRanges', comp, options);
return comp
.split(/\s+/)
.map((c) => replaceXRange(c, options))
.join(' ')
};
const replaceXRange = (comp, options) => {
comp = comp.trim();
const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE];
return comp.replace(r, (ret, gtlt, M, m, p, pr) => {
debug('xRange', comp, ret, gtlt, M, m, p, pr);
const xM = isX(M);
const xm = xM || isX(m);
const xp = xm || isX(p);
const anyX = xp;
if (gtlt === '=' && anyX) {
gtlt = '';
}
pr = options.includePrerelease ? '-0' : '';
if (xM) {
if (gtlt === '>' || gtlt === '<') {
ret = '<0.0.0-0';
} else {
ret = '*';
}
} else if (gtlt && anyX) {
if (xm) {
m = 0;
}
p = 0;
if (gtlt === '>') {
gtlt = '>=';
if (xm) {
M = +M + 1;
m = 0;
p = 0;
} else {
m = +m + 1;
p = 0;
}
} else if (gtlt === '<=') {
gtlt = '<';
if (xm) {
M = +M + 1;
} else {
m = +m + 1;
}
}
if (gtlt === '<') {
pr = '-0';
}
ret = `${gtlt + M}.${m}.${p}${pr}`;
} else if (xm) {
ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`;
} else if (xp) {
ret = `>=${M}.${m}.0${pr
} <${M}.${+m + 1}.0-0`;
}
debug('xRange return', ret);
return ret
})
};
const replaceStars = (comp, options) => {
debug('replaceStars', comp, options);
return comp
.trim()
.replace(re[t.STAR], '')
};
const replaceGTE0 = (comp, options) => {
debug('replaceGTE0', comp, options);
return comp
.trim()
.replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')
};
const hyphenReplace = incPr => ($0,
from, fM, fm, fp, fpr, fb,
to, tM, tm, tp, tpr) => {
if (isX(fM)) {
from = '';
} else if (isX(fm)) {
from = `>=${fM}.0.0${incPr ? '-0' : ''}`;
} else if (isX(fp)) {
from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`;
} else if (fpr) {
from = `>=${from}`;
} else {
from = `>=${from}${incPr ? '-0' : ''}`;
}
if (isX(tM)) {
to = '';
} else if (isX(tm)) {
to = `<${+tM + 1}.0.0-0`;
} else if (isX(tp)) {
to = `<${tM}.${+tm + 1}.0-0`;
} else if (tpr) {
to = `<=${tM}.${tm}.${tp}-${tpr}`;
} else if (incPr) {
to = `<${tM}.${tm}.${+tp + 1}-0`;
} else {
to = `<=${to}`;
}
return `${from} ${to}`.trim()
};
const testSet = (set, version, options) => {
for (let i = 0; i < set.length; i++) {
if (!set[i].test(version)) {
return false
}
}
if (version.prerelease.length && !options.includePrerelease) {
for (let i = 0; i < set.length; i++) {
debug(set[i].semver);
if (set[i].semver === Comparator.ANY) {
continue
}
if (set[i].semver.prerelease.length > 0) {
const allowed = set[i].semver;
if (allowed.major === version.major &&
allowed.minor === version.minor &&
allowed.patch === version.patch) {
return true
}
}
}
return false
}
return true
};
return range;
}
var comparator;
var hasRequiredComparator;
function requireComparator () {
if (hasRequiredComparator) return comparator;
hasRequiredComparator = 1;
const ANY = Symbol('SemVer ANY');
class Comparator {
static get ANY () {
return ANY
}
constructor (comp, options) {
options = parseOptions(options);
if (comp instanceof Comparator) {
if (comp.loose === !!options.loose) {
return comp
} else {
comp = comp.value;
}
}
comp = comp.trim().split(/\s+/).join(' ');
debug('comparator', comp, options);
this.options = options;
this.loose = !!options.loose;
this.parse(comp);
if (this.semver === ANY) {
this.value = '';
} else {
this.value = this.operator + this.semver.version;
}
debug('comp', this);
}
parse (comp) {
const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR];
const m = comp.match(r);
if (!m) {
throw new TypeError(`Invalid comparator: ${comp}`)
}
this.operator = m[1] !== undefined ? m[1] : '';
if (this.operator === '=') {
this.operator = '';
}
if (!m[2]) {
this.semver = ANY;
} else {
this.semver = new SemVer(m[2], this.options.loose);
}
}
toString () {
return this.value
}
test (version) {
debug('Comparator.test', version, this.options.loose);
if (this.semver === ANY || version === ANY) {
return true
}
if (typeof version === 'string') {
try {
version = new SemVer(version, this.options);
} catch (er) {
return false
}
}
return cmp(version, this.operator, this.semver, this.options)
}
intersects (comp, options) {
if (!(comp instanceof Comparator)) {
throw new TypeError('a Comparator is required')
}
if (this.operator === '') {
if (this.value === '') {
return true
}
return new Range(comp.value, options).test(this.value)
} else if (comp.operator === '') {
if (comp.value === '') {
return true
}
return new Range(this.value, options).test(comp.semver)
}
options = parseOptions(options);
if (options.includePrerelease &&
(this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {
return false
}
if (!options.includePrerelease &&
(this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {
return false
}
if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {
return true
}
if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {
return true
}
if (
(this.semver.version === comp.semver.version) &&
this.operator.includes('=') && comp.operator.includes('=')) {
return true
}
if (cmp(this.semver, '<', comp.semver, options) &&
this.operator.startsWith('>') && comp.operator.startsWith('<')) {
return true
}
if (cmp(this.semver, '>', comp.semver, options) &&
this.operator.startsWith('<') && comp.operator.startsWith('>')) {
return true
}
return false
}
}
comparator = Comparator;
const parseOptions = parseOptions_1;
const { safeRe: re, t } = reExports;
const cmp = cmp_1;
const debug = debug_1;
const SemVer = semver$2;
const Range = requireRange();
return comparator;
}
const Range$9 = requireRange();
const satisfies$4 = (version, range, options) => {
try {
range = new Range$9(range, options);
} catch (er) {
return false
}
return range.test(version)
};
var satisfies_1 = satisfies$4;
getDefaultExportFromCjs(satisfies_1);
const Range$8 = requireRange();
const toComparators$1 = (range, options) =>
new Range$8(range, options).set
.map(comp => comp.map(c => c.value).join(' ').trim().split(' '));
var toComparators_1 = toComparators$1;
getDefaultExportFromCjs(toComparators_1);
const SemVer$4 = semver$2;
const Range$7 = requireRange();
const maxSatisfying$1 = (versions, range, options) => {
let max = null;
let maxSV = null;
let rangeObj = null;
try {
rangeObj = new Range$7(range, options);
} catch (er) {
return null
}
versions.forEach((v) => {
if (rangeObj.test(v)) {
if (!max || maxSV.compare(v) === -1) {
max = v;
maxSV = new SemVer$4(max, options);
}
}
});
return max
};
var maxSatisfying_1 = maxSatisfying$1;
getDefaultExportFromCjs(maxSatisfying_1);
const SemVer$3 = semver$2;
const Range$6 = requireRange();
const minSatisfying$1 = (versions, range, options) => {
let min = null;
let minSV = null;
let rangeObj = null;
try {
rangeObj = new Range$6(range, options);
} catch (er) {
return null
}
versions.forEach((v) => {
if (rangeObj.test(v)) {
if (!min || minSV.compare(v) === 1) {
min = v;
minSV = new SemVer$3(min, options);
}
}
});
return min
};
var minSatisfying_1 = minSatisfying$1;
getDefaultExportFromCjs(minSatisfying_1);
const SemVer$2 = semver$2;
const Range$5 = requireRange();
const gt$2 = gt_1;
const minVersion$1 = (range, loose) => {
range = new Range$5(range, loose);
let minver = new SemVer$2('0.0.0');
if (range.test(minver)) {
return minver
}
minver = new SemVer$2('0.0.0-0');
if (range.test(minver)) {
return minver
}
minver = null;
for (let i = 0; i < range.set.length; ++i) {
const comparators = range.set[i];
let setMin = null;
comparators.forEach((comparator) => {
const compver = new SemVer$2(comparator.semver.version);
switch (comparator.operator) {
case '>':
if (compver.prerelease.length === 0) {
compver.patch++;
} else {
compver.prerelease.push(0);
}
compver.raw = compver.format();
case '':
case '>=':
if (!setMin || gt$2(compver, setMin)) {
setMin = compver;
}
break
case '<':
case '<=':
break
default:
throw new Error(`Unexpected operation: ${comparator.operator}`)
}
});
if (setMin && (!minver || gt$2(minver, setMin))) {
minver = setMin;
}
}
if (minver && range.test(minver)) {
return minver
}
return null
};
var minVersion_1 = minVersion$1;
getDefaultExportFromCjs(minVersion_1);
const Range$4 = requireRange();
const validRange$1 = (range, options) => {
try {
return new Range$4(range, options).range || '*'
} catch (er) {
return null
}
};
var valid$1 = validRange$1;
getDefaultExportFromCjs(valid$1);
const SemVer$1 = semver$2;
const Comparator$2 = requireComparator();
const { ANY: ANY$1 } = Comparator$2;
const Range$3 = requireRange();
const satisfies$3 = satisfies_1;
const gt$1 = gt_1;
const lt$1 = lt_1;
const lte$1 = lte_1;
const gte$1 = gte_1;
const outside$3 = (version, range, hilo, options) => {
version = new SemVer$1(version, options);
range = new Range$3(range, options);
let gtfn, ltefn, ltfn, comp, ecomp;
switch (hilo) {
case '>':
gtfn = gt$1;
ltefn = lte$1;
ltfn = lt$1;
comp = '>';
ecomp = '>=';
break
case '<':
gtfn = lt$1;
ltefn = gte$1;
ltfn = gt$1;
comp = '<';
ecomp = '<=';
break
default:
throw new TypeError('Must provide a hilo val of "<" or ">"')
}
if (satisfies$3(version, range, options)) {
return false
}
for (let i = 0; i < range.set.length; ++i) {
const comparators = range.set[i];
let high = null;
let low = null;
comparators.forEach((comparator) => {
if (comparator.semver === ANY$1) {
comparator = new Comparator$2('>=0.0.0');
}
high = high || comparator;
low = low || comparator;
if (gtfn(comparator.semver, high.semver, options)) {
high = comparator;
} else if (ltfn(comparator.semver, low.semver, options)) {
low = comparator;
}
});
if (high.operator === comp || high.operator === ecomp) {
return false
}
if ((!low.operator || low.operator === comp) &&
ltefn(version, low.semver)) {
return false
} else if (low.operator === ecomp && ltfn(version, low.semver)) {
return false
}
}
return true
};
var outside_1 = outside$3;
getDefaultExportFromCjs(outside_1);
const outside$2 = outside_1;
const gtr$1 = (version, range, options) => outside$2(version, range, '>', options);
var gtr_1 = gtr$1;
getDefaultExportFromCjs(gtr_1);
const outside$1 = outside_1;
const ltr$1 = (version, range, options) => outside$1(version, range, '<', options);
var ltr_1 = ltr$1;
getDefaultExportFromCjs(ltr_1);
const Range$2 = requireRange();
const intersects$1 = (r1, r2, options) => {
r1 = new Range$2(r1, options);
r2 = new Range$2(r2, options);
return r1.intersects(r2, options)
};
var intersects_1 = intersects$1;
getDefaultExportFromCjs(intersects_1);
const satisfies$2 = satisfies_1;
const compare$2 = compare_1;
var simplify = (versions, range, options) => {
const set = [];
let first = null;
let prev = null;
const v = versions.sort((a, b) => compare$2(a, b, options));
for (const version of v) {
const included = satisfies$2(version, range, options);
if (included) {
prev = version;
if (!first) {
first = version;
}
} else {
if (prev) {
set.push([first, prev]);
}
prev = null;
first = null;
}
}
if (first) {
set.push([first, null]);
}
const ranges = [];
for (const [min, max] of set) {
if (min === max) {
ranges.push(min);
} else if (!max && min === v[0]) {
ranges.push('*');
} else if (!max) {
ranges.push(`>=${min}`);
} else if (min === v[0]) {
ranges.push(`<=${max}`);
} else {
ranges.push(`${min} - ${max}`);
}
}
const simplified = ranges.join(' || ');
const original = typeof range.raw === 'string' ? range.raw : String(range);
return simplified.length < original.length ? simplified : range
};
getDefaultExportFromCjs(simplify);
const Range$1 = requireRange();
const Comparator$1 = requireComparator();
const { ANY } = Comparator$1;
const satisfies$1 = satisfies_1;
const compare$1 = compare_1;
const subset$1 = (sub, dom, options = {}) => {
if (sub === dom) {
return true
}
sub = new Range$1(sub, options);
dom = new Range$1(dom, options);
let sawNonNull = false;
OUTER: for (const simpleSub of sub.set) {
for (const simpleDom of dom.set) {
const isSub = simpleSubset(simpleSub, simpleDom, options);
sawNonNull = sawNonNull || isSub !== null;
if (isSub) {
continue OUTER
}
}
if (sawNonNull) {
return false
}
}
return true
};
const minimumVersionWithPreRelease = [new Comparator$1('>=0.0.0-0')];
const minimumVersion = [new Comparator$1('>=0.0.0')];
const simpleSubset = (sub, dom, options) => {
if (sub === dom) {
return true
}
if (sub.length === 1 && sub[0].semver === ANY) {
if (dom.length === 1 && dom[0].semver === ANY) {
return true
} else if (options.includePrerelease) {
sub = minimumVersionWithPreRelease;
} else {
sub = minimumVersion;
}
}
if (dom.length === 1 && dom[0].semver === ANY) {
if (options.includePrerelease) {
return true
} else {
dom = minimumVersion;
}
}
const eqSet = new Set();
let gt, lt;
for (const c of sub) {
if (c.operator === '>' || c.operator === '>=') {
gt = higherGT(gt, c, options);
} else if (c.operator === '<' || c.operator === '<=') {
lt = lowerLT(lt, c, options);
} else {
eqSet.add(c.semver);
}
}
if (eqSet.size > 1) {
return null
}
let gtltComp;
if (gt && lt) {
gtltComp = compare$1(gt.semver, lt.semver, options);
if (gtltComp > 0) {
return null
} else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {
return null
}
}
for (const eq of eqSet) {
if (gt && !satisfies$1(eq, String(gt), options)) {
return null
}
if (lt && !satisfies$1(eq, String(lt), options)) {
return null
}
for (const c of dom) {
if (!satisfies$1(eq, String(c), options)) {
return false
}
}
return true
}
let higher, lower;
let hasDomLT, hasDomGT;
let needDomLTPre = lt &&
!options.includePrerelease &&
lt.semver.prerelease.length ? lt.semver : false;
let needDomGTPre = gt &&
!options.includePrerelease &&
gt.semver.prerelease.length ? gt.semver : false;
if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&
lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {
needDomLTPre = false;
}
for (const c of dom) {
hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>=';
hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<=';
if (gt) {
if (needDomGTPre) {
if (c.semver.prerelease && c.semver.prerelease.length &&
c.semver.major === needDomGTPre.major &&
c.semver.minor === needDomGTPre.minor &&
c.semver.patch === needDomGTPre.patch) {
needDomGTPre = false;
}
}
if (c.operator === '>' || c.operator === '>=') {
higher = higherGT(gt, c, options);
if (higher === c && higher !== gt) {
return false
}
} else if (gt.operator === '>=' && !satisfies$1(gt.semver, String(c), options)) {
return false
}
}
if (lt) {
if (needDomLTPre) {
if (c.semver.prerelease && c.semver.prerelease.length &&
c.semver.major === needDomLTPre.major &&
c.semver.minor === needDomLTPre.minor &&
c.semver.patch === needDomLTPre.patch) {
needDomLTPre = false;
}
}
if (c.operator === '<' || c.operator === '<=') {
lower = lowerLT(lt, c, options);
if (lower === c && lower !== lt) {
return false
}
} else if (lt.operator === '<=' && !satisfies$1(lt.semver, String(c), options)) {
return false
}
}
if (!c.operator && (lt || gt) && gtltComp !== 0) {
return false
}
}
if (gt && hasDomLT && !lt && gtltComp !== 0) {
return false
}
if (lt && hasDomGT && !gt && gtltComp !== 0) {
return false
}
if (needDomGTPre || needDomLTPre) {
return false
}
return true
};
const higherGT = (a, b, options) => {
if (!a) {
return b
}
const comp = compare$1(a.semver, b.semver, options);
return comp > 0 ? a
: comp < 0 ? b
: b.operator === '>' && a.operator === '>=' ? b
: a
};
const lowerLT = (a, b, options) => {
if (!a) {
return b
}
const comp = compare$1(a.semver, b.semver, options);
return comp < 0 ? a
: comp > 0 ? b
: b.operator === '<' && a.operator === '<=' ? b
: a
};
var subset_1 = subset$1;
getDefaultExportFromCjs(subset_1);
const internalRe = reExports;
const constants = constants$1;
const SemVer = semver$2;
const identifiers = identifiers$1;
const parse = parse_1;
const valid = valid_1;
const clean = clean_1;
const inc = inc_1;
const diff = diff_1;
const major = major_1;
const minor = minor_1;
const patch = patch_1;
const prerelease = prerelease_1;
const compare = compare_1;
const rcompare = rcompare_1;
const compareLoose = compareLoose_1;
const compareBuild = compareBuild_1;
const sort = sort_1;
const rsort = rsort_1;
const gt = gt_1;
const lt = lt_1;
const eq = eq_1;
const neq = neq_1;
const gte = gte_1;
const lte = lte_1;
const cmp = cmp_1;
const coerce = coerce_1;
const Comparator = requireComparator();
const Range = requireRange();
const satisfies = satisfies_1;
const toComparators = toComparators_1;
const maxSatisfying = maxSatisfying_1;
const minSatisfying = minSatisfying_1;
const minVersion = minVersion_1;
const validRange = valid$1;
const outside = outside_1;
const gtr = gtr_1;
const ltr = ltr_1;
const intersects = intersects_1;
const simplifyRange = simplify;
const subset = subset_1;
var semver = {
parse,
valid,
clean,
inc,
diff,
major,
minor,
patch,
prerelease,
compare,
rcompare,
compareLoose,
compareBuild,
sort,
rsort,
gt,
lt,
eq,
neq,
gte,
lte,
cmp,
coerce,
Comparator,
Range,
satisfies,
toComparators,
maxSatisfying,
minSatisfying,
minVersion,
validRange,
outside,
gtr,
ltr,
intersects,
simplifyRange,
subset,
SemVer,
re: internalRe.re,
src: internalRe.src,
tokens: internalRe.t,
SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,
RELEASE_TYPES: constants.RELEASE_TYPES,
compareIdentifiers: identifiers.compareIdentifiers,
rcompareIdentifiers: identifiers.rcompareIdentifiers,
};
const semver$1 = getDefaultExportFromCjs(semver);
var DeviceModelId;
(function (DeviceModelId) {
DeviceModelId["blue"] = "blue";
DeviceModelId["nanoS"] = "nanoS";
DeviceModelId["nanoSP"] = "nanoSP";
DeviceModelId["nanoX"] = "nanoX";
DeviceModelId["stax"] = "stax";
DeviceModelId["europa"] = "europa";
DeviceModelId["apex"] = "apex";
})(DeviceModelId || (DeviceModelId = {}));
const devices = {
[DeviceModelId.blue]: {
id: DeviceModelId.blue,
productName: "Ledger Blue",
productIdMM: 0x00,
legacyUsbProductId: 0x0000,
usbOnly: true,
memorySize: 480 * 1024,
masks: [0x31000000, 0x31010000],
getBlockSize: (_firwareVersion) => 4 * 1024,
},
[DeviceModelId.nanoS]: {
id: DeviceModelId.nanoS,
productName: "Ledger Nano S",
productIdMM: 0x10,
legacyUsbProductId: 0x0001,
usbOnly: true,
memorySize: 320 * 1024,
masks: [0x31100000],
getBlockSize: (firmwareVersion) => semver$1.lt(semver$1.coerce(firmwareVersion) ?? "", "2.0.0") ? 4 * 1024 : 2 * 1024,
},
[DeviceModelId.nanoX]: {
id: DeviceModelId.nanoX,
productName: "Ledger Nano X",
productIdMM: 0x40,
legacyUsbProductId: 0x0004,
usbOnly: false,
memorySize: 2 * 1024 * 1024,
masks: [0x33000000],
getBlockSize: (_firwareVersion) => 4 * 1024,
bluetoothSpec: [
{
serviceUuid: "13d63400-2c97-0004-0000-4c6564676572",
notifyUuid: "13d63400-2c97-0004-0001-4c6564676572",
writeUuid: "13d63400-2c97-0004-0002-4c6564676572",
writeCmdUuid: "13d63400-2c97-0004-0003-4c6564676572",
},
],
},
[DeviceModelId.nanoSP]: {
id: DeviceModelId.nanoSP,
productName: "Ledger Nano S Plus",
productIdMM: 0x50,
legacyUsbProductId: 0x0005,
usbOnly: true,
memorySize: 1533 * 1024,
masks: [0x33100000],
getBlockSize: (_firmwareVersion) => 32,
},
[DeviceModelId.apex]: {
id: DeviceModelId.apex,
productName: "Ledger Nano Gen5",
productIdMM: 0x80,
legacyUsbProductId: 0x0008,
usbOnly: false,
memorySize: 1533 * 1024,
masks: [0x33400000],
getBlockSize: (_firmwareVersion) => 32,
bluetoothSpec: [
{
serviceUuid: "13d63400-2c97-8004-0000-4c6564676572",
notifyUuid: "13d63400-2c97-8004-0001-4c6564676572",
writeUuid: "13d63400-2c97-8004-0002-4c6564676572",
writeCmdUuid: "13d63400-2c97-8004-0003-4c6564676572",
},
],
},
[DeviceModelId.stax]: {
id: DeviceModelId.stax,
productName: "Ledger Stax",
productIdMM: 0x60,
legacyUsbProductId: 0x0006,
usbOnly: false,
memorySize: 1533 * 1024,
masks: [0x33200000],
getBlockSize: (_firmwareVersion) => 32,
bluetoothSpec: [
{
serviceUuid: "13d63400-2c97-6004-0000-4c6564676572",
notifyUuid: "13d63400-2c97-6004-0001-4c6564676572",
writeUuid: "13d63400-2c97-6004-0002-4c6564676572",
writeCmdUuid: "13d63400-2c97-6004-0003-4c6564676572",
},
],
},
[DeviceModelId.europa]: {
id: DeviceModelId.europa,
productName: "Ledger Flex",
productIdMM: 0x70,
legacyUsbProductId: 0x0007,
usbOnly: false,
memorySize: 1533 * 1024,
masks: [0x33300000],
getBlockSize: (_firmwareVersion) => 32,
bluetoothSpec: [
{
serviceUuid: "13d63400-2c97-3004-0000-4c6564676572",
notifyUuid: "13d63400-2c97-3004-0001-4c6564676572",
writeUuid: "13d63400-2c97-3004-0002-4c6564676572",
writeCmdUuid: "13d63400-2c97-3004-0003-4c6564676572",
},
],
},
};
({
Blue: DeviceModelId.blue,
"Nano S": DeviceModelId.nanoS,
"Nano S Plus": DeviceModelId.nanoSP,
"Nano X": DeviceModelId.nanoX,
Stax: DeviceModelId.stax,
Europa: DeviceModelId.europa,
});
const devicesList = Object.values(devices);
const ledgerUSBVendorId = 0x2c97;
const identifyUSBProductId = (usbProductId) => {
const legacy = devicesList.find(d => d.legacyUsbProductId === usbProductId);
if (legacy)
return legacy;
const mm = usbProductId >> 8;
const deviceModel = devicesList.find(d => d.productIdMM === mm);
return deviceModel;
};
const bluetoothServices = [];
const serviceUuidToInfos = {};
for (const id in devices) {
const deviceModel = devices[id];
const { bluetoothSpec } = deviceModel;
if (bluetoothSpec) {
for (let i = 0; i < bluetoothSpec.length; i++) {
const spec = bluetoothSpec[i];
bluetoothServices.push(spec.serviceUuid);
serviceUuidToInfos[spec.serviceUuid] = serviceUuidToInfos[spec.serviceUuid.replace(/-/g, "")] = {
deviceModel,
...spec,
};
}
}
}
const ledgerDevices$1 = [
{
vendorId: ledgerUSBVendorId,
},
];
const isSupported$1 = () => Promise.resolve(!!(window.navigator && window.navigator.hid));
const getHID = () => {
const { hid } = navigator;
if (!hid)
throw new TransportError("navigator.hid is not supported", "HIDNotSupported");
return hid;
};
async function requestLedgerDevices() {
const device = await getHID().requestDevice({
filters: ledgerDevices$1,
});
if (Array.isArray(device))
return device;
return [device];
}
async function getLedgerDevices$1() {
const devices = await getHID().getDevices();
return devices.filter(d => d.vendorId === ledgerUSBVendorId);
}
async function getFirstLedgerDevice$1() {
const existingDevices = await getLedgerDevices$1();
if (existingDevices.length > 0)
return existingDevices[0];
const devices = await requestLedgerDevices();
return devices[0];
}
class TransportWebHID extends Transport {
device;
deviceModel;
channel = Math.floor(Math.random() * 0xffff);
packetSize = 64;
constructor(device) {
super();
this.device = device;
this.deviceModel =
typeof device.productId === "number" ? identifyUSBProductId(device.productId) : undefined;
device.addEventListener("inputreport", this.onInputReport);
}
inputs = [];
inputCallback;
read = () => {
if (this.inputs.length) {
return Promise.resolve(this.inputs.shift());
}
return new Promise(success => {
this.inputCallback = success;
});
};
onInputReport = (e) => {
const buffer = Buffer.from(e.data.buffer);
if (this.inputCallback) {
this.inputCallback(buffer);
this.inputCallback = null;
}
else {
this.inputs.push(buffer);
}
};
static isSupported = isSupported$1;
static list = getLedgerDevices$1;
static listen = (observer) => {
let unsubscribed = false;
getFirstLedgerDevice$1().then(device => {
if (!device) {
observer.error(new TransportOpenUserCancelled("Access denied to use Ledger device"));
}
else if (!unsubscribed) {
const deviceModel = typeof device.productId === "number"
? identifyUSBProductId(device.productId)
: undefined;
observer.next({
type: "add",
descriptor: device,
deviceModel,
});
observer.complete();
}
}, error => {
observer.error(new TransportOpenUserCancelled(error.message));
});
function unsubscribe() {
unsubscribed = true;
}
return {
unsubscribe,
};
};
static async request() {
const [device] = await requestLedgerDevices();
return TransportWebHID.open(device);
}
static async openConnected() {
const devices = await getLedgerDevices$1();
if (devices.length === 0)
return null;
return TransportWebHID.open(devices[0]);
}
static async open(device) {
await device.open();
const transport = new TransportWebHID(device);
const onDisconnect = e => {
if (device === e.device) {
getHID().removeEventListener("disconnect", onDisconnect);
transport._emitDisconnect(new DisconnectedDevice());
}
};
getHID().addEventListener("disconnect", onDisconnect);
return transport;
}
_disconnectEmitted = false;
_emitDisconnect = (e) => {
if (this._disconnectEmitted)
return;
this._disconnectEmitted = true;
this.emit("disconnect", e);
};
async close() {
await this.exchangeBusyPromise;
this.device.removeEventListener("inputreport", this.onInputReport);
await this.device.close();
}
exchange = async (apdu) => {
const b = await this.exchangeAtomicImpl(async () => {
const { channel, packetSize } = this;
log("apdu", "=> " + apdu.toString("hex"));
const framing = createHIDframing(channel, packetSize);
const blocks = framing.makeBlocks(apdu);
for (let i = 0; i < blocks.length; i++) {
await this.device.sendReport(0, blocks[i]);
}
let result;
let acc;
while (!(result = framing.getReducedResult(acc))) {
try {
const buffer = await this.read();
acc = framing.reduceResponse(acc, buffer);
}
catch (e) {
if (e instanceof TransportError && e.id === "InvalidChannel") {
continue;
}
throw e;
}
}
log("apdu", "<= " + result.toString("hex"));
return result;
}).catch(e => {
if (e && e.message && e.message.includes("write")) {
this._emitDisconnect(e);
throw new DisconnectedDeviceDuringOperation(e.message);
}
throw e;
});
return b;
};
setScrambleKey() { }
}
const TransportWebHID$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
default: TransportWebHID
});
const require$$1 = /*@__PURE__*/getAugmentedNamespace(TransportWebHID$1);
const ledgerDevices = [
{
vendorId: ledgerUSBVendorId,
},
];
async function requestLedgerDevice() {
const device = await navigator.usb.requestDevice({
filters: ledgerDevices,
});
return device;
}
async function getLedgerDevices() {
const devices = await navigator.usb.getDevices();
return devices.filter(d => d.vendorId === ledgerUSBVendorId);
}
async function getFirstLedgerDevice() {
const existingDevices = await getLedgerDevices();
if (existingDevices.length > 0)
return existingDevices[0];
return requestLedgerDevice();
}
const isSupported = () => Promise.resolve(!!navigator && !!navigator.usb && typeof navigator.usb.getDevices === "function");
const configurationValue = 1;
const endpointNumber = 3;
class TransportWebUSB extends Transport {
device;
deviceModel;
channel = Math.floor(Math.random() * 0xffff);
packetSize = 64;
interfaceNumber;
constructor(device, interfaceNumber) {
super();
this.device = device;
this.interfaceNumber = interfaceNumber;
this.deviceModel = identifyUSBProductId(device.productId);
}
static isSupported = isSupported;
static list = getLedgerDevices;
static listen = (observer) => {
let unsubscribed = false;
getFirstLedgerDevice().then(device => {
if (!unsubscribed) {
const deviceModel = identifyUSBProductId(device.productId);
observer.next({
type: "add",
descriptor: device,
deviceModel,
});
observer.complete();
}
}, error => {
if (window.DOMException && error instanceof window.DOMException && error.code === 18) {
observer.error(new TransportWebUSBGestureRequired(error.message));
}
else {
observer.error(new TransportOpenUserCancelled(error.message));
}
});
function unsubscribe() {
unsubscribed = true;
}
return {
unsubscribe,
};
};
static async request() {
const device = await requestLedgerDevice();
return TransportWebUSB.open(device);
}
static async openConnected() {
const devices = await getLedgerDevices();
if (devices.length === 0)
return null;
return TransportWebUSB.open(devices[0]);
}
static async open(device) {
await device.open();
if (device.configuration === null) {
await device.selectConfiguration(configurationValue);
}
await gracefullyResetDevice(device);
const iface = device.configurations[0].interfaces.find(({ alternates }) => alternates.some(a => a.interfaceClass === 255));
if (!iface) {
throw new TransportInterfaceNotAvailable("No WebUSB interface found for your Ledger device. Please upgrade firmware or contact techsupport.");
}
const interfaceNumber = iface.interfaceNumber;
try {
await device.claimInterface(interfaceNumber);
}
catch (e) {
await device.close();
throw new TransportInterfaceNotAvailable(e.message);
}
const transport = new TransportWebUSB(device, interfaceNumber);
const onDisconnect = e => {
if (device === e.device) {
navigator.usb.removeEventListener("disconnect", onDisconnect);
transport._emitDisconnect(new DisconnectedDevice());
}
};
navigator.usb.addEventListener("disconnect", onDisconnect);
return transport;
}
_disconnectEmitted = false;
_emitDisconnect = (e) => {
if (this._disconnectEmitted)
return;
this._disconnectEmitted = true;
this.emit("disconnect", e);
};
async close() {
await this.exchangeBusyPromise;
await this.device.releaseInterface(this.interfaceNumber);
await gracefullyResetDevice(this.device);
await this.device.close();
}
async exchange(apdu) {
const b = await this.exchangeAtomicImpl(async () => {
const { channel, packetSize } = this;
log("apdu", "=> " + apdu.toString("hex"));
const framing = createHIDframing(channel, packetSize);
const blocks = framing.makeBlocks(apdu);
for (let i = 0; i < blocks.length; i++) {
await this.device.transferOut(endpointNumber, blocks[i]);
}
let result;
let acc;
while (!(result = framing.getReducedResult(acc))) {
const r = await this.device.transferIn(endpointNumber, packetSize);
const buffer = Buffer.from(r.data.buffer);
acc = framing.reduceResponse(acc, buffer);
}
log("apdu", "<= " + result.toString("hex"));
return result;
}).catch(e => {
if (e && e.message && e.message.includes("disconnected")) {
this._emitDisconnect(e);
throw new DisconnectedDeviceDuringOperation(e.message);
}
throw e;
});
return b;
}
setScrambleKey() { }
}
async function gracefullyResetDevice(device) {
try {
await device.reset();
}
catch (err) {
console.warn(err);
}
}
const TransportWebUSB$1 = /*#__PURE__*/Object.freeze({
__proto__: null,
default: TransportWebUSB
});
const require$$2 = /*@__PURE__*/getAugmentedNamespace(TransportWebUSB$1);
var util = {};
var hasRequiredUtil;
function requireUtil () {
if (hasRequiredUtil) return util;
hasRequiredUtil = 1;
Object.defineProperty(util, "__esModule", { value: true });
util.createDefs = createDefs;
function createDefs(...items) {
return items.map(([type, Clazz]) => ({
create: () => Clazz.create(),
type
}));
}
return util;
}
var packageInfo = {};
var hasRequiredPackageInfo;
function requirePackageInfo () {
if (hasRequiredPackageInfo) return packageInfo;
hasRequiredPackageInfo = 1;
Object.defineProperty(packageInfo, "__esModule", { value: true });
packageInfo.packageInfo = void 0;
packageInfo.packageInfo = { name: '@pezkuwi/hw-ledger-transports', path: typeof __dirname === 'string' ? __dirname : 'auto', type: 'cjs', version: '14.0.10' };
return packageInfo;
}
(function (exports$1) {
Object.defineProperty(exports$1, "__esModule", { value: true });
exports$1.transports = exports$1.packageInfo = void 0;
const tslib_1 = require$$0;
const hw_transport_webhid_1 = tslib_1.__importDefault(require$$1);
const hw_transport_webusb_1 = tslib_1.__importDefault(require$$2);
const util_js_1 = requireUtil();
var packageInfo_js_1 = requirePackageInfo();
Object.defineProperty(exports$1, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
exports$1.transports = (0, util_js_1.createDefs)(['webusb', hw_transport_webusb_1.default], ['hid', hw_transport_webhid_1.default]);
} (browser));
getDefaultExportFromCjs(browser);
const LEDGER_DEFAULT_ACCOUNT = 0x80000000;
const LEDGER_DEFAULT_CHANGE = 0x80000000;
const LEDGER_DEFAULT_INDEX = 0x80000000;
const LEDGER_SUCCESS_CODE = 0x9000;
const prevLedgerRecord = {
acala: 'Acala',
ajuna: 'Ajuna',
'aleph-node': 'AlephZero',
astar: 'Astar',
bifrost: 'Bifrost',
'bifrost-kusama': 'BifrostKusama',
centrifuge: 'Centrifuge',
composable: 'Composable',
darwinia: 'Darwinia',
'dock-mainnet': 'Dock',
edgeware: 'Edgeware',
enjin: 'Enjin',
equilibrium: 'Equilibrium',
genshiro: 'Genshiro',
hydradx: 'HydraDX',
'interlay-parachain': 'Interlay',
karura: 'Karura',
khala: 'Khala',
kusama: 'Kusama',
matrixchain: 'Matrixchain',
nodle: 'Nodle',
origintrail: 'OriginTrail',
parallel: 'Parallel',
peaq: 'Peaq',
pendulum: 'Pendulum',
phala: 'Phala',
picasso: 'Picasso',
polkadex: 'Polkadex',
polkadot: 'Polkadot',
polymesh: 'Polymesh',
quartz: 'Quartz',
sora: 'Sora',
stafi: 'Stafi',
statemine: 'Statemine',
statemint: 'Statemint',
ternoa: 'Ternoa',
unique: 'Unique',
vtb: 'VTB',
xxnetwork: 'XXNetwork',
zeitgeist: 'Zeitgeist'
};
const genericLedgerApps = {
bittensor: 'Bittensor',
creditcoin3: 'Creditcoin3',
dentnet: 'DENTNet',
encointer: 'Encointer',
frequency: 'Frequency',
integritee: 'Integritee',
liberland: 'Liberland',
mythos: 'Mythos',
polimec: 'Polimec',
vara: 'Vara'
};
const ledgerApps = {
...prevLedgerRecord,
...genericLedgerApps
};
async function wrapError$1(promise) {
const result = await promise;
if (result.return_code !== LEDGER_SUCCESS_CODE) {
throw new Error(result.error_message);
}
return result;
}
function sign$1(method, message, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE } = {}) {
return async (app) => {
const { signature } = await wrapError$1(app[method](account + accountOffset, change, addressIndex + addressOffset, util$1.u8aToBuffer(message)));
return {
signature: util$1.hexAddPrefix(signature.toString('hex'))
};
};
}
class Ledger {
#ledgerName;
#transportDef;
#app = null;
constructor(transport, chain) {
const ledgerName = ledgerApps[chain];
const transportDef = browser.transports.find(({ type }) => type === transport);
if (!ledgerName) {
throw new Error(`Unsupported Ledger chain ${chain}`);
}
else if (!transportDef) {
throw new Error(`Unsupported Ledger transport ${transport}`);
}
this.#ledgerName = ledgerName;
this.#transportDef = transportDef;
}
async getAddress(confirm = false, accountOffset = 0, addressOffset = 0, { account = LEDGER_DEFAULT_ACCOUNT, addressIndex = LEDGER_DEFAULT_INDEX, change = LEDGER_DEFAULT_CHANGE } = {}) {
return this.withApp(async (app) => {
const { address, pubKey } = await wrapError$1(app.getAddress(account + accountOffset, change, addressIndex + addressOffset, confirm));
return {
address,
publicKey: util$1.hexAddPrefix(pubKey)
};
});
}
async getVersion() {
return this.withApp(async (app) => {
const { device_locked: isLocked, major, minor, patch, test_mode: isTestMode } = await wrapError$1(app.getVersion());
return {
isLocked,
isTestMode,
version: [major, minor, patch]
};
});
}
async sign(message, accountOffset, addressOffset, options) {
return this.withApp(sign$1('sign', message, accountOffset, addressOffset, options));
}
async signRaw(message, accountOffset, addressOffset, options) {
return this.withApp(sign$1('signRaw', util$1.u8aWrapBytes(message), accountOffset, addressOffset, options));
}
async withApp(fn) {
try {
if (!this.#app) {
const transport = await this.#transportDef.create();
this.#app = dist$1.newSubstrateApp(transport, this.#ledgerName);
}
return await fn(this.#app);
}
catch (error) {
this.#app = null;
throw error;
}
}
}
async function wrapError(promise) {
let result;
try {
result = await promise;
}
catch (e) {
if (e.returnCode) {
throw new Error(`${e.returnCode}: ${e.errorMessage}`);
}
throw new Error(e.message);
}
return result;
}
function sign(method, message, slip44, accountIndex = 0, addressOffset = 0) {
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return async (app) => {
const { signature } = await wrapError(app[method](bip42Path, util$1.u8aToBuffer(message)));
return {
signature: util$1.hexAddPrefix(signature.toString('hex'))
};
};
}
function signEcdsa(method, message, slip44, accountIndex = 0, addressOffset = 0) {
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return async (app) => {
const { r, s, v } = await wrapError(app[method](bip42Path, util$1.u8aToBuffer(message)));
const signature = Buffer.concat([r, s, v]);
return {
signature: util$1.hexAddPrefix(signature.toString('hex'))
};
};
}
function signWithMetadata(message, slip44, accountIndex = 0, addressOffset = 0, { metadata } = {}) {
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return async (app) => {
if (!metadata) {
throw new Error('The metadata option must be present when using signWithMetadata');
}
const bufferMsg = Buffer.from(message);
const { signature } = await wrapError(app.signWithMetadataEd25519(bip42Path, bufferMsg, metadata));
return {
signature: util$1.hexAddPrefix(signature.toString('hex'))
};
};
}
function signWithMetadataEcdsa(message, slip44, accountIndex = 0, addressOffset = 0, { metadata } = {}) {
const bip42Path = `m/44'/${slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return async (app) => {
if (!metadata) {
throw new Error('The metadata option must be present when using signWithMetadata');
}
const bufferMsg = Buffer.from(message);
const { r, s, v } = await wrapError(app.signWithMetadataEcdsa(bip42Path, bufferMsg, metadata));
const signature = Buffer.concat([r, s, v]);
return {
signature: util$1.hexAddPrefix(signature.toString('hex'))
};
};
}
class LedgerGeneric {
#transportDef;
#slip44;
#chainId;
#metaUrl;
#app = null;
constructor(transport, chain, slip44, chainId, metaUrl) {
const ledgerName = ledgerApps[chain];
const transportDef = browser.transports.find(({ type }) => type === transport);
if (!ledgerName) {
throw new Error(`Unsupported Ledger chain ${chain}`);
}
else if (!transportDef) {
throw new Error(`Unsupported Ledger transport ${transport}`);
}
this.#metaUrl = metaUrl;
this.#chainId = chainId;
this.#slip44 = slip44;
this.#transportDef = transportDef;
}
async getAddress(ss58Prefix, confirm = false, accountIndex = 0, addressOffset = 0) {
const bip42Path = `m/44'/${this.#slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return this.withApp(async (app) => {
const { address, pubKey } = await wrapError(app.getAddressEd25519(bip42Path, ss58Prefix, confirm));
return {
address,
publicKey: util$1.hexAddPrefix(pubKey)
};
});
}
async getAddressEcdsa(confirm = false, accountIndex = 0, addressOffset = 0) {
const bip42Path = `m/44'/${this.#slip44}'/${accountIndex}'/${0}'/${addressOffset}'`;
return this.withApp(async (app) => {
const { address, pubKey } = await wrapError(app.getAddressEcdsa(bip42Path, confirm));
return {
address,
publicKey: util$1.hexAddPrefix(pubKey)
};
});
}
async getVersion() {
return this.withApp(async (app) => {
const { deviceLocked: isLocked, major, minor, patch, testMode: isTestMode } = await wrapError(app.getVersion());
return {
isLocked: !!isLocked,
isTestMode: !!isTestMode,
version: [major || 0, minor || 0, patch || 0]
};
});
}
async sign(message, accountIndex, addressOffset) {
return this.withApp(sign('signEd25519', message, this.#slip44, accountIndex, addressOffset));
}
async signRaw(message, accountIndex, addressOffset) {
return this.withApp(sign('signRawEd25519', util$1.u8aWrapBytes(message), this.#slip44, accountIndex, addressOffset));
}
async signEcdsa(message, accountIndex, addressOffset) {
return this.withApp(signEcdsa('signEcdsa', util$1.u8aWrapBytes(message), this.#slip44, accountIndex, addressOffset));
}
async signRawEcdsa(message, accountIndex, addressOffset) {
return this.withApp(signEcdsa('signRawEcdsa', util$1.u8aWrapBytes(message), this.#slip44, accountIndex, addressOffset));
}
async signWithMetadata(message, accountIndex, addressOffset, options) {
return this.withApp(signWithMetadata(message, this.#slip44, accountIndex, addressOffset, options));
}
async signWithMetadataEcdsa(message, accountIndex, addressOffset, options) {
return this.withApp(signWithMetadataEcdsa(message, this.#slip44, accountIndex, addressOffset, options));
}
async withApp(fn) {
try {
if (!this.#app) {
const transport = await this.#transportDef.create();
this.#app = new dist$1.PolkadotGenericApp(transport, this.#chainId, this.#metaUrl);
}
return await fn(this.#app);
}
catch (error) {
this.#app = null;
throw error;
}
}
}
exports.Ledger = Ledger;
exports.LedgerGeneric = LedgerGeneric;
}));