UNPKG

@avalabs/hw-app-avalanche

Version:

Node API for Avalanche App (Ledger Nano S/X/S+)

163 lines 7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ERROR_DESCRIPTION = exports.LedgerError = exports.P2_VALUES = exports.P1_VALUES = exports.PAYLOAD_TYPE = exports.INS = exports.ED25519_PK_SIZE = exports.SIGNATURE_LENGTH_SIZE = exports.VERSION_SIZE = exports.TYPE_SIZE = exports.ALGORITHM_ID_SIZE = exports.ALGORITHM_ID_1 = exports.ADDRESS_LENGTH = exports.VERSION_1 = exports.TYPE_1 = exports.CONTRACT_ADDRESS_LEN = exports.CHAIN_ID_SIZE = exports.COLLECTION_NAME_MAX_LEN = exports.HASH_LEN = exports.NEXT_MESSAGE = exports.LAST_MESSAGE = exports.FIRST_MESSAGE = exports.APP_KEY = exports.CHUNK_SIZE = exports.CLA_ETH = exports.CLA = void 0; exports.errorCodeToString = errorCodeToString; exports.processErrorResponse = processErrorResponse; exports.getVersion = getVersion; exports.CLA = 0x80; exports.CLA_ETH = 0xe0; exports.CHUNK_SIZE = 250; exports.APP_KEY = "AVAX"; exports.FIRST_MESSAGE = 0x01; exports.LAST_MESSAGE = 0x02; exports.NEXT_MESSAGE = 0x03; exports.HASH_LEN = 32; exports.COLLECTION_NAME_MAX_LEN = 70; exports.CHAIN_ID_SIZE = 8; exports.CONTRACT_ADDRESS_LEN = 20; exports.TYPE_1 = 1; exports.VERSION_1 = 1; exports.ADDRESS_LENGTH = 20; exports.ALGORITHM_ID_1 = 1; exports.ALGORITHM_ID_SIZE = 1; exports.TYPE_SIZE = 1; exports.VERSION_SIZE = 1; exports.SIGNATURE_LENGTH_SIZE = 1; exports.ED25519_PK_SIZE = 32; exports.INS = { GET_VERSION: 0x00, WALLET_ID: 0x01, GET_ADDR: 0x02, GET_EXTENDED_PUBLIC_KEY: 0x03, SIGN_HASH: 0x04, SIGN: 0x05, SIGN_MSG: 0x06, ETH_PROVIDE_NFT_INFO: 0x14, }; exports.PAYLOAD_TYPE = { INIT: 0x00, ADD: 0x01, LAST: 0x02, }; exports.P1_VALUES = { ONLY_RETRIEVE: 0x00, SHOW_ADDRESS_IN_DEVICE: 0x01, }; exports.P2_VALUES = { SECP256K1: 0x00, ED25519: 0x01, }; 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["NoErrors"] = 36864] = "NoErrors"; LedgerError[LedgerError["DeviceIsBusy"] = 36865] = "DeviceIsBusy"; LedgerError[LedgerError["ErrorDerivingKeys"] = 26626] = "ErrorDerivingKeys"; LedgerError[LedgerError["ExecutionError"] = 25600] = "ExecutionError"; LedgerError[LedgerError["WrongLength"] = 26368] = "WrongLength"; LedgerError[LedgerError["EmptyBuffer"] = 27010] = "EmptyBuffer"; LedgerError[LedgerError["OutputBufferTooSmall"] = 27011] = "OutputBufferTooSmall"; LedgerError[LedgerError["DataIsInvalid"] = 27264] = "DataIsInvalid"; LedgerError[LedgerError["ConditionsNotSatisfied"] = 27013] = "ConditionsNotSatisfied"; LedgerError[LedgerError["TransactionRejected"] = 27014] = "TransactionRejected"; LedgerError[LedgerError["BadKeyHandle"] = 27265] = "BadKeyHandle"; LedgerError[LedgerError["InvalidP1P2"] = 27392] = "InvalidP1P2"; LedgerError[LedgerError["InstructionNotSupported"] = 27904] = "InstructionNotSupported"; LedgerError[LedgerError["AppDoesNotSeemToBeOpen"] = 28161] = "AppDoesNotSeemToBeOpen"; LedgerError[LedgerError["UnknownError"] = 28416] = "UnknownError"; LedgerError[LedgerError["SignVerifyError"] = 28417] = "SignVerifyError"; })(LedgerError || (exports.LedgerError = LedgerError = {})); exports.ERROR_DESCRIPTION = { [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.ConditionsNotSatisfied]: "Conditions not satisfied", [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", }; function errorCodeToString(statusCode) { if (statusCode in exports.ERROR_DESCRIPTION) { return exports.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) { if (isDict(response)) { if (Object.prototype.hasOwnProperty.call(response, "statusCode")) { return { returnCode: response.statusCode, errorMessage: errorCodeToString(response.statusCode), }; } if (Object.prototype.hasOwnProperty.call(response, "returnCode") && Object.prototype.hasOwnProperty.call(response, "errorMessage")) { return response; } } return { returnCode: 0xffff, errorMessage: response.toString(), }; } return { returnCode: 0xffff, errorMessage: response.toString(), }; } function getVersion(transport) { return transport.send(exports.CLA, exports.INS.GET_VERSION, 0, 0).then((response) => { const errorCodeData = response.slice(-2); if (errorCodeData.length < 2) { throw new Error("Invalid response: missing error code data"); } const returnCode = (errorCodeData[0] * 256 + errorCodeData[1]); let targetId = 0; if (response.length >= 9) { targetId = (response[5] << 24) + (response[6] << 16) + (response[7] << 8) + (response[8] << 0); } return { returnCode, errorMessage: errorCodeToString(returnCode), testMode: response[0] !== 0, major: response[1], minor: response[2], patch: response[3], deviceLocked: response[4] === 1, targetId: targetId.toString(16), }; }, processErrorResponse); } //# sourceMappingURL=common.js.map