@ledgerhq/revault-sdk 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/_work/revault/revault/packages/sdk/lib/chunk-DRMYBKL3.cjs","../src/device/api-device.ts","../src/device/constants.ts","../../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/src/helpers.ts","../../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/src/index.ts","../src/device/device-access.ts","../src/device/utils.ts"],"names":["HwTransportErrorType"],"mappings":"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AACyB;AACX;AACC;AACI;AACA;AACI;AACA;AACvB;AACA;AAGA;AAGqB;AACA;AACrB;AAGA;AACA;AAGmB;AACA;AACJ;AAEI;AACA;AACnB;AACA;AACsB;AACF;AACC;AACrB;AACe;AACW;AACD;AACzB;AACwB;AACR;AACO;AACvB;AACoB;AACpB;AAGA;AAGsB;AACA;AACD;AACL;AAChB;AACqB;AACrB;AAC0B;AACJ;AACV;AACS;AACrB;AACA;AAGyB;AACzB;AAGA;AAGA;AAGwB;AACxB;AACA;AACwB;AACxB;AACA;AACA;AACsB;AAEH;AACF;AACF;AACI;AACL;AACD;AACM;AACP;AACI;AACK;AACA;AAMN;AAIA;AAIf;AAGA;AAKwB;AACZ;AAGZ;AACwB;AACxB;AAGA;AAKmB;AAGH;AACE;AACL;AAES;AACtB;AAUD;AAAAA;AACV,EAAA;AACA,EAAA;AACA,EAAA;AACA,EAAA;AAJU;AA+BN;AACJ,EAAA;AACuC,EAAA;AACxB,IAAA;AACQ,IAAA;AACT,IAAA;AACG,IAAA;AACQ,IAAA;AACb,IAAA;AACZ,EAAA;AJ4Q4B;AIzQH;AAEA;AACzB,EAAA;AACyB,EAAA;AACN,EAAA;AACL,EAAA;AACQ,EAAA;AACtB,EAAA;AACA,EAAA;AAC4B,EAAA;AAC5B,EAAA;AACyB,EAAA;AACL,EAAA;AACC,EAAA;AACL,EAAA;AACA,EAAA;AACR,EAAA;AACW,EAAA;AACH,EAAA;AACE,EAAA;AACD,EAAA;AACE,EAAA;AACG,EAAA;AACE,EAAA;AACX,EAAA;AACG,EAAA;AACL,EAAA;AACI,EAAA;AACI,EAAA;AACH,EAAA;AACY,EAAA;AACZ,EAAA;AACS,EAAA;AACrB,EAAA;AACoB,EAAA;AACG,EAAA;AAC3B,EAAA;AACmB,EAAA;AACL,EAAA;AACU,EAAA;AACN,EAAA;AAClB,EAAA;AACyB,EAAA;AACL,EAAA;AACpB,EAAA;AACA,EAAA;AAC4B,EAAA;AACN,EAAA;AACT,EAAA;AACU,EAAA;AACA,EAAA;AACD,EAAA;AACC,EAAA;AACT,EAAA;AJ0Qc;AIvQM;AACpB,EAAA;AJyQc;AIvQrB,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACJ,IAAA;AACI,MAAA;AACX,EAAA;AACsB,EAAA;AACb,IAAA;AACT,EAAA;AACF;AAMM;AACJ,EAAA;AACA,EAAA;AJoQ4B;AACA;AACA;AACA;AACA;AACA;AI/PxB,EAAA;AAGO,IAAA;AACI,IAAA;AACS,IAAA;AACN,IAAA;AAEH,IAAA;AACD,IAAA;AAEM,IAAA;AACA,IAAA;AAEI,IAAA;AAGlB,IAAA;AACS,MAAA;AACb,IAAA;AACF,EAAA;AJ0P4B;AIvPjB;AACiB,EAAA;AACR,IAAA;AACL,IAAA;AACI,MAAA;AACjB,IAAA;AACY,IAAA;AACU,IAAA;AACxB,EAAA;AJyP4B;AI3OH;AJ6OG;AACA;AKloBT;AACA;AAEU;AAED,EAAA;AAK5B;AAG8B;AAAE;AAyBE;AAEG;AAClB,EAAA;AACrB;AAE4C;AACjB,EAAA;AACH,IAAA;AACN,IAAA;AAChB,EAAA;AAEuB,EAAA;AACzB;AAE8D;AACnC,EAAA;AACE,IAAA;AACX,IAAA;AAChB,EAAA;AAC0B,EAAA;AAC5B;AAGG;AACG;AAEuB,EAAA;AACZ,IAAA;AAGiB,IAAA;AACT,MAAA;AACV,MAAA;AACQ,MAAA;AACjB,IAAA;AAEuB,IAAA;AACA,MAAA;AACL,MAAA;AACO,QAAA;AACvB,MAAA;AACc,MAAA;AACS,QAAA;AACvB,MAAA;AACD,IAAA;AACY,IAAA;AACK,MAAA;AACF,MAAA;AAChB,IAAA;AACD,EAAA;AAAA;AAI8B;AAEb;AAGnB;AAIO,EAAA;AAEA,EAAA;AAEgB,EAAA;AAGF,EAAA;AAIF,EAAA;AAEgB,IAAA;AAC3B,EAAA;AAID,EAAA;AAGqB,EAAA;AACd,IAAA;AACV,EAAA;AAGkB,EAAA;AAIG,IAAA;AAGA,MAAA;AAClB,IAAA;AAGY,IAAA;AAGM,MAAA;AAClB,IAAA;AAEO,IAAA;AAGK,EAAA;AAEL,IAAA;AACU,IAAA;AACA,IAAA;AACA,IAAA;AACQ,IAAA;AAGN,EAAA;AACH,IAAA;AAGE,IAAA;AAGA,MAAA;AAClB,IAAA;AAEiB,IAAA;AAEd,IAAA;AACY,MAAA;AAAqB;AAEhC,MAAA;AAAiB,QAAA;AAAA;AAEK,UAAA;AAAqB,QAAA;AAC3C,MAAA;AAEU,IAAA;AAGU,EAAA;AACf,EAAA;AACI,IAAA;AAEU,IAAA;AAC3B,EAAA;AACD;AAEC;AAGH;AAAA;AAGU,EAAA;AACa,IAAA;AACI,MAAA;AACF,QAAA;AACpB,MAAA;AAEa,MAAA;AACd,IAAA;AACH,EAAA;AAAA;AAGD;ALuiB2B;AACA;AMtwBS;AAElB,EAAA;AAGrB;AAE4B;AAC1B,EAAA;AAAA;AAAA;AAGA,EAAA;AAAA;AACA,EAAA;AAAA;AACA,EAAA;AAAA;AACA,EAAA;AAAA;AACA,EAAA;AAAA;AACA,EAAA;AAAA;AACF;AAEoC;AAC3B,EAAA;AACT;ANywB8B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/_work/revault/revault/packages/sdk/lib/chunk-DRMYBKL3.cjs","sourcesContent":[null,"import type {\n HsmCertificate,\n PsdAuthChallengeResponse,\n PsdPairingData,\n PubKey,\n} from \"@ledgerhq/revault-api\";\nimport axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport type { Logger } from \"@/logger\";\n\nimport { APPID_VAULT_ADMINISTRATOR, PATHS, SCRIPT_IDS, STR_ROLES } from \"./constants\";\nimport type { Device } from \"./types\";\n\ntype Options = {\n /**\n * device-api URL\n */\n deviceApiUrl: string;\n\n /**\n * salt used by device-api\n */\n salt: string;\n\n /**\n * seed generation function used for device-api device spawn\n */\n genSeed: (p: { salt: string; index: number }) => string | Promise<string>;\n};\n\nexport type ApiDevice = {\n /**\n * bind a device to the given device index\n */\n with: (index: number) => Device;\n};\n\nexport function createApiDevice(options: Options, logger: Logger): ApiDevice {\n const { genSeed } = options;\n const sessionId = uuidv4();\n const deviceApi = axios.create({ baseURL: options.deviceApiUrl });\n\n axiosRetry(deviceApi, {\n retryDelay: axiosRetry.linearDelay(1000),\n retries: 3,\n retryCondition: /* v8 ignore next -- @preserve */ () => true,\n onRetry:\n /* v8 ignore next -- @preserve */\n (retryCount, err) => {\n const formattedErr = `${err.code ?? `UNKNOWN`} on ${err.config?.method?.toUpperCase() ?? \"UNKNOWN_METHOD\"} ${err.config?.url ?? \"UNKNOWN_URL\"}`;\n logger.warning(\n `Retrying request to device-api (attempt ${retryCount}) - Cause: ${formattedErr}`,\n );\n },\n });\n\n /* v8 ignore next -- @preserve */\n deviceApi.interceptors.request.use(\n (config) => {\n logger.debug(\n `[device-api] ${config.method?.toUpperCase()} ${config.url}${config.data ? ` ${JSON.stringify(config.data)}` : \"\"}`,\n );\n if ([\"post\", \"put\"].includes(config.method!)) {\n // when interceptor is called in combination with axios-retry, config.data can be a string or an object\n // and we should return either a string or an object compatible with the original type\n const isStringMode = typeof config.data === \"string\";\n const data = (isStringMode ? JSON.parse(config.data) : config.data) as Record<\n string,\n unknown\n >;\n const enhancedData = {\n sessionID: sessionId, // Used to ensure dedicated session if someones else uses same seed\n psd_model: \"02\", // Stax\n version: 3, // Used to properly enable noise channel\n ...data,\n };\n config.data = isStringMode ? JSON.stringify(enhancedData) : enhancedData;\n }\n return config;\n },\n (error: Error) => Promise.reject(error),\n );\n\n return {\n with: (index: number): Device => {\n const __seed = genSeed({ salt: options.salt, index });\n\n const getSeed = async (): Promise<string> => {\n if (typeof __seed === \"string\") return Promise.resolve(__seed);\n return __seed;\n };\n\n const authenticate = async ({\n challenge,\n workspaceName,\n }: {\n challenge: PsdAuthChallengeResponse;\n workspaceName: string;\n }): Promise<string> => {\n const role = challenge.role;\n if (role === \"READ_ONLY_API_KEY\")\n throw new Error(\"Invalid role for authenticate: READ_ONLY_API_KEY\");\n const { data } = await deviceApi.post<string>(\"/authenticate\", {\n seed: await getSeed(),\n challenge: Buffer.from(challenge.challenge, \"base64\").toString(\"hex\"),\n application: APPID_VAULT_ADMINISTRATOR,\n key_handle: challenge.keyHandle,\n name: challenge.name,\n role: STR_ROLES[role],\n type: \"02\", // Stax\n workspaceName,\n });\n return data;\n };\n\n const finalizePairingHandshake = async (params: {\n handshake: string;\n partitionId: string;\n }): Promise<string> => {\n const { handshake, partitionId } = params;\n const payload = { seed: await getSeed(), handshake, ciphertext: partitionId };\n const res = await deviceApi.post<string>(\"/finalize-pairing-handshake\", payload);\n return res.data;\n };\n\n const generateSeedFragment = async (): Promise<string> => {\n const payload = {\n seed: await getSeed(),\n path: PATHS.KEY_MATERIAL,\n goal: 0, // seed fragment\n };\n const { data } = await deviceApi.post<string>(\"/generate-key-component\", payload);\n return data;\n };\n\n const generateWrappingKeyFragment = async (): Promise<string> => {\n const goal = 1; // means Wrapping Key\n const payload = { seed: await getSeed(), goal, path: PATHS.KEY_MATERIAL };\n const res = await deviceApi.post<string>(\"/generate-key-fragments\", payload);\n return Buffer.from(res.data, \"hex\").toString(\"base64\");\n };\n\n const getAttestation = async (): Promise<{\n attestation: {\n codeHash: string;\n attestationPub: string;\n certificate: string;\n };\n buffer: Buffer;\n }> => {\n const { data: attestationStr } = await deviceApi.post<string>(\"/get-attestation\", {\n seed: await getSeed(),\n });\n const attestationBuffer = Buffer.from(attestationStr, \"hex\");\n const certLen = attestationBuffer.readInt8(32 + 65 + 1);\n return {\n attestation: {\n codeHash: attestationBuffer.slice(0, 32).toString(\"base64\"),\n attestationPub: attestationBuffer.slice(32, 32 + 65).toString(\"base64\"),\n certificate: attestationBuffer.slice(32 + 65, 32 + 65 + 2 + certLen).toString(\"base64\"),\n },\n buffer: attestationBuffer,\n };\n };\n\n const getConfidentialityKey = async (): Promise<{\n confidentialityKeyCurve25519: string;\n confidentialityKeySignature: string;\n }> => {\n const res = await deviceApi.post<{\n confidentiality_key_curve25519: string;\n confidentiality_key_signature: string;\n }>(\"/get-confidentiality-key\", { seed: await getSeed() });\n return {\n confidentialityKeyCurve25519: res.data.confidentiality_key_curve25519,\n confidentialityKeySignature: res.data.confidentiality_key_signature,\n };\n };\n\n const getConfidentialityPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.CONFIDENTIALITY });\n };\n\n const getDeviceUserId = async (): Promise<string> => {\n const res = await deviceApi.post<{ blue_device_id: string }>(\"/blue-device-id\", {\n seed: await getSeed(),\n });\n return res.data.blue_device_id.toUpperCase();\n };\n\n const getU2FPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.U2F });\n };\n\n const getValidationPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.VALIDATION });\n };\n\n const hasPairing = async (): Promise<boolean> => {\n const res = await deviceApi.post<string[]>(\"/get-partition-ids\", { seed: await getSeed() });\n return res.data.length > 0;\n };\n\n const initPairingHandshake = async (): Promise<{ pubKey: string; signature: string }> => {\n const { data } = await deviceApi.post<{ attestation: string; pubKey: string }>(\n \"/initiate-pairing-handshake\",\n { seed: await getSeed() },\n );\n return {\n pubKey: data.pubKey,\n signature: Buffer.from(data.attestation, \"hex\").toString(\"base64\"),\n };\n };\n\n const openSession = async (params: {\n secureChannel: { pubKey: PubKey; certificate: HsmCertificate };\n }): Promise<void> => {\n const { secureChannel } = params;\n const signature = Buffer.from(secureChannel.certificate.signature, \"base64\");\n const attestationPubKey = Buffer.from(secureChannel.certificate.attestationPub, \"base64\");\n const attestationCertificate = Buffer.from(secureChannel.certificate.certificate, \"base64\");\n const attestation = Buffer.concat([\n Buffer.from([signature.length]),\n signature,\n attestationPubKey,\n Buffer.from([attestationCertificate.length]),\n attestationCertificate,\n ]);\n const payload = {\n seed: await getSeed(),\n path: PATHS.CONFIDENTIALITY,\n pubKey: secureChannel.pubKey,\n attestation: attestation.toString(\"hex\"),\n scriptId: SCRIPT_IDS.INIT_SESSION,\n };\n const { data: deviceResponse } = await deviceApi.post<string>(\"/open-session\", payload);\n if (deviceResponse !== \"9000\") {\n throw new Error(`device-api device failed with code: ${deviceResponse}`);\n }\n };\n\n const register = async (params: {\n challenge: string;\n u2fRegisterData: string;\n name: string;\n role: \"ADMIN\" | \"SHARED_OWNER\" | \"OPERATOR\";\n }): Promise<{\n u2fRegister: Buffer;\n keyHandle: Buffer;\n rfu: number;\n pubKey: string;\n }> => {\n const { challenge, u2fRegisterData, name, role } = params;\n const payload = {\n seed: await getSeed(),\n challenge,\n name,\n role: STR_ROLES[role],\n hsm_data: u2fRegisterData,\n type: \"02\", // Stax\n application: APPID_VAULT_ADMINISTRATOR,\n };\n const { data } = await deviceApi.post<string>(\"/register\", payload);\n const response = Buffer.from(data, \"hex\");\n let i = 0;\n const rfu = response.slice(i, i + 1)[0]!;\n i += 1;\n const pubKey = response.slice(i, i + 65).toString(\"hex\");\n i += 65;\n const keyHandleLength = response.slice(i, i + 1)[0]!;\n i++;\n const keyHandle = response.slice(i, i + keyHandleLength);\n i += keyHandleLength;\n return {\n u2fRegister: response.slice(0, response.length - 2),\n keyHandle,\n rfu,\n pubKey,\n };\n };\n\n const registerData = async (params: { challenge: string }): Promise<string> => {\n const { challenge } = params;\n const payload = { seed: await getSeed(), challenge };\n const res = await deviceApi.post<string>(\"/u2f-register-data\", payload);\n return res.data;\n };\n\n const setPairing = async ({ pairing }: { pairing: PsdPairingData }): Promise<void> => {\n const payload = {\n seed: await getSeed(),\n blob: pairing.blob,\n pairing: {\n bootstrap_enabled: pairing.pairing.bootstrapEnabled,\n partition_key: pairing.pairing.partitionKey,\n workspace_name: pairing.pairing.workspaceName,\n },\n partition_key_attestation: {\n code_hash: pairing.partitionKeyAttestation.codeHash,\n attestation_pub: pairing.partitionKeyAttestation.attestationPub,\n certificate: pairing.partitionKeyAttestation.certificate,\n signature: pairing.partitionKeyAttestation.signature,\n },\n };\n await deviceApi.post(\"/set-partition-key\", payload);\n };\n\n const startKKPatternAsResponder = async (params: {\n handshake: string;\n handshakeAttestation: HsmCertificate;\n partitionId: string;\n }): Promise<{ handshake: string; signature: string }> => {\n const payload = {\n seed: await getSeed(),\n script_id: SCRIPT_IDS.ACCOUNT_MANAGER_SESSION,\n handshake: params.handshake,\n // for device-api it's normal to have empty string as handshake_attestation\n handshake_attestation: \"\",\n partition_id: params.partitionId,\n };\n const { data } = await deviceApi.post<string>(\"/start-kk-pattern-as-responder\", payload);\n const buffer = Buffer.from(data, \"hex\");\n const dataLength = buffer.readInt8(0);\n return {\n handshake: buffer.slice(1, dataLength + 1).toString(\"base64\"),\n signature: buffer.slice(dataLength + 1).toString(\"base64\"),\n };\n };\n\n const startKPatternAsResponder = async (params: {\n handshake: string;\n handshakeAttestation: HsmCertificate;\n partitionId: string;\n }): Promise<void> => {\n const { handshake, partitionId } = params;\n const payload = {\n seed: await getSeed(),\n script_id: SCRIPT_IDS.ACCOUNT_MANAGER_SESSION,\n handshake,\n // for device-api it's normal to have empty string as handshake_attestation\n handshake_attestation: \"\",\n partition_id: partitionId,\n };\n const { data: deviceResponse } = await deviceApi.post<string>(\n \"/start-k-pattern-as-responder\",\n payload,\n );\n if (deviceResponse !== \"9000\") {\n throw new Error(`device-api device failed with code: ${deviceResponse}`);\n }\n };\n\n const getPublicKey = async (params: {\n path: string;\n }): Promise<{ pubKey: string; signature: string }> => {\n const { path } = params;\n type DeviceApiGetPubKeyResponse = { attestation: string; pubKey: string };\n const payload = { seed: await getSeed(), secp256k1: true, path };\n const res = await deviceApi.post<DeviceApiGetPubKeyResponse>(\"/get-public-key\", payload);\n return {\n pubKey: res.data.pubKey,\n signature: Buffer.from(res.data.attestation, \"hex\").toString(\"base64\"),\n };\n };\n\n const validateVaultOperation = async (params: { actions: string[] }): Promise<string> => {\n const { actions } = params;\n const payload = {\n seed: await getSeed(),\n path: PATHS.VALIDATION,\n actions,\n };\n const { data: signature } = await deviceApi.post<string>(\"/validate-op\", payload);\n return signature;\n };\n\n const sendAPDU = (_apdu: string): Promise<string> => {\n logger.info(\"Can't send arbitrary APDU to software device\");\n return Promise.resolve(\"9000\");\n };\n\n const getVersion = async (): Promise<string> => {\n return \"1.2.3\";\n };\n\n const poll = async (): Promise<{ isAppOpened: boolean }> => {\n await new Promise((r) => setTimeout(r, 1e3));\n return { isAppOpened: true };\n };\n\n const pollApp = async (): Promise<string> => {\n await new Promise((r) => setTimeout(r, 1e3));\n return \"9000\";\n };\n\n return {\n authenticate,\n finalizePairingHandshake,\n generateSeedFragment,\n generateWrappingKeyFragment,\n getAttestation,\n getConfidentialityKey,\n getConfidentialityPubKey,\n getDeviceUserId,\n getU2FPubKey,\n getValidationPubKey,\n hasPairing,\n initPairingHandshake,\n openSession,\n register,\n registerData,\n setPairing,\n startKKPatternAsResponder,\n startKPatternAsResponder,\n validateVaultOperation,\n getVersion,\n sendAPDU,\n poll,\n pollApp,\n };\n },\n };\n}\n","export const PATHS = {\n U2F: \"5655636'/5583430'\",\n CONFIDENTIALITY: \"5655636'/4410950'\",\n KEY_MATERIAL: \"5655636'/4932953'\",\n VALIDATION: \"5655636'/5652812'\",\n} as const;\n\nexport const STATUS_LENGTH = 2;\n\nexport const SCRIPT_IDS = {\n INIT_SESSION: 3,\n ACCOUNT_MANAGER_SESSION: 2,\n} as const;\n\nexport const STR_ROLES: Record<\"OPERATOR\" | \"ADMIN\" | \"SHARED_OWNER\", string> = {\n OPERATOR: \"00\",\n ADMIN: \"01\",\n SHARED_OWNER: \"02\",\n} as const;\n\nexport const APPID_VAULT_ADMINISTRATOR =\n \"ad5be1a1fe011ce7f53ae081a22ae000a42021f3f94106a3bac9f76e8230e4b9\";\n\nconst all61xxStatus = [];\nfor (let i = 0x6100; i <= 0x61ff; i++) {\n all61xxStatus.push(i);\n}\n\nexport const PAGINATED_STATUS = all61xxStatus;\nexport const STREAMING_RESPONSE = 0x02;\nexport const STREAMING_NEXT_ACTION = 0x01;\n","/* eslint-disable no-continue */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-prototype-builtins */\n\nconst errorClasses = {};\nconst deserializers = {};\n\nexport const addCustomErrorDeserializer = (name: string, deserializer: (obj: any) => any): void => {\n deserializers[name] = deserializer;\n};\n\nexport interface LedgerErrorConstructor<F extends { [key: string]: unknown }>\n extends ErrorConstructor {\n new (message?: string, fields?: F, options?: any): Error & F;\n (message?: string, fields?: F, options?: any): Error & F;\n readonly prototype: Error & F;\n}\n\nexport const createCustomErrorClass = <\n F extends { [key: string]: unknown },\n T extends LedgerErrorConstructor<F> = LedgerErrorConstructor<F>,\n>(\n name: string,\n): T => {\n class CustomErrorClass extends Error {\n cause?: Error;\n constructor(message?: string, fields?: F, options?: any) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n super(message || name, options);\n // Set the prototype explicitly. See https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, CustomErrorClass.prototype);\n this.name = name;\n if (fields) {\n for (const k in fields) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this[k] = fields[k];\n }\n }\n\n if (options && isObject(options) && \"cause\" in options && !this.cause) {\n // .cause was specified but the superconstructor\n // did not create an instance property.\n const cause = options.cause;\n this.cause = cause;\n if (\"stack\" in cause) {\n this.stack = this.stack + \"\\nCAUSE: \" + cause.stack;\n }\n }\n }\n }\n\n errorClasses[name] = CustomErrorClass;\n\n return CustomErrorClass as unknown as T;\n};\n\nfunction isObject(value) {\n return typeof value === \"object\";\n}\n\n// inspired from https://github.com/programble/errio/blob/master/index.js\nexport const deserializeError = (object: any): Error | undefined => {\n if (object && typeof object === \"object\") {\n try {\n if (typeof object.message === \"string\") {\n const msg = JSON.parse(object.message);\n if (msg.message && msg.name) {\n object = msg;\n }\n }\n } catch {\n // nothing\n }\n\n let error;\n if (typeof object.name === \"string\") {\n const { name } = object;\n const des = deserializers[name];\n if (des) {\n error = des(object);\n } else {\n let constructor = name === \"Error\" ? Error : errorClasses[name];\n\n if (!constructor) {\n console.warn(\"deserializing an unknown class '\" + name + \"'\");\n constructor = createCustomErrorClass(name);\n }\n\n error = Object.create(constructor.prototype);\n try {\n for (const prop in object) {\n if (object.hasOwnProperty(prop)) {\n error[prop] = object[prop];\n }\n }\n } catch {\n // sometimes setting a property can fail (e.g. .name)\n }\n }\n } else {\n if (typeof object.message === \"string\") {\n error = new Error(object.message);\n }\n }\n\n if (error && !error.stack && Error.captureStackTrace) {\n Error.captureStackTrace(error, deserializeError);\n }\n return error;\n }\n return new Error(String(object));\n};\n\n// inspired from https://github.com/sindresorhus/serialize-error/blob/master/index.js\nexport const serializeError = (\n value: undefined | To | string | (() => unknown),\n): undefined | To | string => {\n if (!value) return value;\n if (typeof value === \"object\") {\n return destroyCircular(value, []);\n }\n if (typeof value === \"function\") {\n return `[Function: ${value.name || \"anonymous\"}]`;\n }\n return value;\n};\n\ninterface To {\n name?: string;\n message?: string;\n stack?: string;\n}\n\n// https://www.npmjs.com/package/destroy-circular\nfunction destroyCircular(from: To, seen: Array<To>): To {\n const to: To = {};\n seen.push(from);\n for (const key of Object.keys(from)) {\n const value = from[key];\n if (typeof value === \"function\") {\n continue;\n }\n if (!value || typeof value !== \"object\") {\n to[key] = value;\n continue;\n }\n if (seen.indexOf(from[key]) === -1) {\n to[key] = destroyCircular(from[key], seen.slice(0));\n continue;\n }\n to[key] = \"[Circular]\";\n }\n if (typeof from.name === \"string\") {\n to.name = from.name;\n }\n if (typeof from.message === \"string\") {\n to.message = from.message;\n }\n if (typeof from.stack === \"string\") {\n to.stack = from.stack;\n }\n return to;\n}\n","import {\n serializeError,\n deserializeError,\n createCustomErrorClass,\n addCustomErrorDeserializer,\n LedgerErrorConstructor,\n} from \"./helpers\";\n\nexport { serializeError, deserializeError, createCustomErrorClass, addCustomErrorDeserializer };\n\nexport const AccountNameRequiredError = createCustomErrorClass(\"AccountNameRequired\");\nexport const AccountNotSupported = createCustomErrorClass(\"AccountNotSupported\");\nexport const AccountAwaitingSendPendingOperations = createCustomErrorClass(\n \"AccountAwaitingSendPendingOperations\",\n);\nexport const AmountRequired = createCustomErrorClass(\"AmountRequired\");\nexport const BluetoothRequired = createCustomErrorClass(\"BluetoothRequired\");\nexport const BtcUnmatchedApp = createCustomErrorClass(\"BtcUnmatchedApp\");\nexport const CantOpenDevice = createCustomErrorClass(\"CantOpenDevice\");\nexport const CashAddrNotSupported = createCustomErrorClass(\"CashAddrNotSupported\");\nexport const ClaimRewardsFeesWarning = createCustomErrorClass(\"ClaimRewardsFeesWarning\");\nexport const CurrencyNotSupported = createCustomErrorClass<\n { currencyName: string },\n LedgerErrorConstructor<{ currencyName: string }>\n>(\"CurrencyNotSupported\");\nexport const DeviceAppVerifyNotSupported = createCustomErrorClass(\"DeviceAppVerifyNotSupported\");\nexport const DeviceGenuineSocketEarlyClose = createCustomErrorClass(\n \"DeviceGenuineSocketEarlyClose\",\n);\nexport const DeviceNotGenuineError = createCustomErrorClass(\"DeviceNotGenuine\");\nexport const DeviceOnDashboardExpected = createCustomErrorClass(\"DeviceOnDashboardExpected\");\nexport const DeviceOnDashboardUnexpected = createCustomErrorClass(\"DeviceOnDashboardUnexpected\");\nexport const DeviceInOSUExpected = createCustomErrorClass(\"DeviceInOSUExpected\");\nexport const DeviceHalted = createCustomErrorClass(\"DeviceHalted\");\nexport const DeviceNameInvalid = createCustomErrorClass(\"DeviceNameInvalid\");\nexport const DeviceSocketFail = createCustomErrorClass(\"DeviceSocketFail\");\nexport const DeviceSocketNoBulkStatus = createCustomErrorClass(\"DeviceSocketNoBulkStatus\");\nexport const DeviceNeedsRestart = createCustomErrorClass(\"DeviceSocketNoBulkStatus\");\nexport const UnresponsiveDeviceError = createCustomErrorClass(\"UnresponsiveDeviceError\");\nexport const DisconnectedDevice = createCustomErrorClass(\"DisconnectedDevice\");\nexport const DisconnectedDeviceDuringOperation = createCustomErrorClass(\n \"DisconnectedDeviceDuringOperation\",\n);\nexport const DeviceExtractOnboardingStateError = createCustomErrorClass(\n \"DeviceExtractOnboardingStateError\",\n);\nexport const DeviceOnboardingStatePollingError = createCustomErrorClass(\n \"DeviceOnboardingStatePollingError\",\n);\nexport const EnpointConfigError = createCustomErrorClass(\"EnpointConfig\");\nexport const EthAppPleaseEnableContractData = createCustomErrorClass(\n \"EthAppPleaseEnableContractData\",\n);\nexport const SolAppPleaseEnableContractData = createCustomErrorClass(\n \"SolAppPleaseEnableContractData\",\n);\nexport const CeloAppPleaseEnableContractData = createCustomErrorClass(\n \"CeloAppPleaseEnableContractData\",\n);\nexport const FeeEstimationFailed = createCustomErrorClass(\"FeeEstimationFailed\");\nexport const FirmwareNotRecognized = createCustomErrorClass(\"FirmwareNotRecognized\");\nexport const HardResetFail = createCustomErrorClass(\"HardResetFail\");\nexport const InvalidXRPTag = createCustomErrorClass(\"InvalidXRPTag\");\nexport const InvalidAddress = createCustomErrorClass(\"InvalidAddress\");\nexport const InvalidTransactionError = createCustomErrorClass(\"InvalidTransactionError\");\nexport const InvalidNonce = createCustomErrorClass(\"InvalidNonce\");\nexport const InvalidAddressBecauseDestinationIsAlsoSource = createCustomErrorClass(\n \"InvalidAddressBecauseDestinationIsAlsoSource\",\n);\nexport const LatestMCUInstalledError = createCustomErrorClass(\"LatestMCUInstalledError\");\nexport const LatestFirmwareVersionRequired = createCustomErrorClass(\n \"LatestFirmwareVersionRequired\",\n);\nexport const UnsupportedFeatureError = createCustomErrorClass(\"UnsupportedFeatureError\");\nexport const NanoSNotSupported = createCustomErrorClass(\"NanoSNotSupported\");\nexport const UnknownMCU = createCustomErrorClass(\"UnknownMCU\");\nexport const LedgerAPIError = createCustomErrorClass(\"LedgerAPIError\");\nexport const LedgerAPIErrorWithMessage = createCustomErrorClass(\"LedgerAPIErrorWithMessage\");\nexport const LedgerAPINotAvailable = createCustomErrorClass(\"LedgerAPINotAvailable\");\nexport const ManagerAppAlreadyInstalledError = createCustomErrorClass(\"ManagerAppAlreadyInstalled\");\nexport const ManagerAppRelyOnBTCError = createCustomErrorClass(\"ManagerAppRelyOnBTC\");\nexport const ManagerAppDepInstallRequired = createCustomErrorClass(\"ManagerAppDepInstallRequired\");\nexport const ManagerAppDepUninstallRequired = createCustomErrorClass(\n \"ManagerAppDepUninstallRequired\",\n);\nexport const ManagerDeviceLockedError = createCustomErrorClass(\"ManagerDeviceLocked\");\nexport const ManagerFirmwareNotEnoughSpaceError = createCustomErrorClass(\n \"ManagerFirmwareNotEnoughSpace\",\n);\nexport const ManagerNotEnoughSpaceError = createCustomErrorClass(\"ManagerNotEnoughSpace\");\nexport const ManagerUninstallBTCDep = createCustomErrorClass(\"ManagerUninstallBTCDep\");\nexport const NetworkDown = createCustomErrorClass(\"NetworkDown\");\nexport const NetworkError = createCustomErrorClass(\"NetworkError\");\nexport const NoAddressesFound = createCustomErrorClass(\"NoAddressesFound\");\nexport const NotEnoughBalance = createCustomErrorClass(\"NotEnoughBalance\");\nexport const NotEnoughBalanceFees = createCustomErrorClass(\"NotEnoughBalanceFees\");\nexport const NotEnoughBalanceSwap = createCustomErrorClass(\"NotEnoughBalanceSwap\");\nexport const NotEnoughBalanceToDelegate = createCustomErrorClass(\"NotEnoughBalanceToDelegate\");\nexport const UnstakeNotEnoughStakedBalanceLeft = createCustomErrorClass(\n \"UnstakeNotEnoughStakedBalanceLeft\",\n);\nexport const RestakeNotEnoughStakedBalanceLeft = createCustomErrorClass(\n \"RestakeNotEnoughStakedBalanceLeft\",\n);\nexport const NotEnoughToRestake = createCustomErrorClass(\"NotEnoughToRestake\");\nexport const NotEnoughToUnstake = createCustomErrorClass(\"NotEnoughToUnstake\");\nexport const NotEnoughBalanceInParentAccount = createCustomErrorClass(\n \"NotEnoughBalanceInParentAccount\",\n);\nexport const NotEnoughSpendableBalance = createCustomErrorClass(\"NotEnoughSpendableBalance\");\nexport const NotEnoughBalanceBecauseDestinationNotCreated = createCustomErrorClass(\n \"NotEnoughBalanceBecauseDestinationNotCreated\",\n);\nexport const NotEnoughToStake = createCustomErrorClass(\"NotEnoughToStake\");\nexport const NoAccessToCamera = createCustomErrorClass(\"NoAccessToCamera\");\nexport const NotEnoughGas = createCustomErrorClass(\"NotEnoughGas\");\n// Error message specifically for the PTX swap flow\nexport const NotEnoughGasSwap = createCustomErrorClass(\"NotEnoughGasSwap\");\nexport const TronEmptyAccount = createCustomErrorClass(\"TronEmptyAccount\");\nexport const MaybeKeepTronAccountAlive = createCustomErrorClass(\"MaybeKeepTronAccountAlive\");\nexport const NotSupportedLegacyAddress = createCustomErrorClass(\"NotSupportedLegacyAddress\");\nexport const GasLessThanEstimate = createCustomErrorClass(\"GasLessThanEstimate\");\nexport const PriorityFeeTooLow = createCustomErrorClass(\"PriorityFeeTooLow\");\nexport const PriorityFeeTooHigh = createCustomErrorClass(\"PriorityFeeTooHigh\");\nexport const PriorityFeeHigherThanMaxFee = createCustomErrorClass(\"PriorityFeeHigherThanMaxFee\");\nexport const MaxFeeTooLow = createCustomErrorClass(\"MaxFeeTooLow\");\nexport const PasswordsDontMatchError = createCustomErrorClass(\"PasswordsDontMatch\");\nexport const PasswordIncorrectError = createCustomErrorClass(\"PasswordIncorrect\");\nexport const RecommendSubAccountsToEmpty = createCustomErrorClass(\"RecommendSubAccountsToEmpty\");\nexport const RecommendUndelegation = createCustomErrorClass(\"RecommendUndelegation\");\nexport const TimeoutTagged = createCustomErrorClass(\"TimeoutTagged\");\nexport const UnexpectedBootloader = createCustomErrorClass(\"UnexpectedBootloader\");\nexport const MCUNotGenuineToDashboard = createCustomErrorClass(\"MCUNotGenuineToDashboard\");\nexport const RecipientRequired = createCustomErrorClass(\"RecipientRequired\");\nexport const UnavailableTezosOriginatedAccountReceive = createCustomErrorClass(\n \"UnavailableTezosOriginatedAccountReceive\",\n);\nexport const UnavailableTezosOriginatedAccountSend = createCustomErrorClass(\n \"UnavailableTezosOriginatedAccountSend\",\n);\nexport const UpdateFetchFileFail = createCustomErrorClass(\"UpdateFetchFileFail\");\nexport const UpdateIncorrectHash = createCustomErrorClass(\"UpdateIncorrectHash\");\nexport const UpdateIncorrectSig = createCustomErrorClass(\"UpdateIncorrectSig\");\nexport const UpdateYourApp = createCustomErrorClass(\"UpdateYourApp\");\nexport const UserRefusedDeviceNameChange = createCustomErrorClass(\"UserRefusedDeviceNameChange\");\nexport const UserRefusedAddress = createCustomErrorClass(\"UserRefusedAddress\");\nexport const UserRefusedFirmwareUpdate = createCustomErrorClass(\"UserRefusedFirmwareUpdate\");\nexport const UserRefusedAllowManager = createCustomErrorClass(\"UserRefusedAllowManager\");\nexport const UserRefusedOnDevice = createCustomErrorClass(\"UserRefusedOnDevice\"); // TODO rename because it's just for transaction refusal\nexport const PinNotSet = createCustomErrorClass(\"PinNotSet\");\nexport const ExpertModeRequired = createCustomErrorClass(\"ExpertModeRequired\");\nexport const TransportOpenUserCancelled = createCustomErrorClass(\"TransportOpenUserCancelled\");\nexport const TransportInterfaceNotAvailable = createCustomErrorClass(\n \"TransportInterfaceNotAvailable\",\n);\nexport const TransportRaceCondition = createCustomErrorClass(\"TransportRaceCondition\");\nexport const TransportWebUSBGestureRequired = createCustomErrorClass(\n \"TransportWebUSBGestureRequired\",\n);\nexport const TransactionHasBeenValidatedError = createCustomErrorClass(\n \"TransactionHasBeenValidatedError\",\n);\nexport const TransportExchangeTimeoutError = createCustomErrorClass(\n \"TransportExchangeTimeoutError\",\n);\nexport const DeviceShouldStayInApp = createCustomErrorClass(\"DeviceShouldStayInApp\");\nexport const WebsocketConnectionError = createCustomErrorClass(\"WebsocketConnectionError\");\nexport const WebsocketConnectionFailed = createCustomErrorClass(\"WebsocketConnectionFailed\");\nexport const WrongDeviceForAccount = createCustomErrorClass(\"WrongDeviceForAccount\");\nexport const WrongDeviceForAccountPayout = createCustomErrorClass(\"WrongDeviceForAccountPayout\");\nexport const MissingSwapPayloadParamaters = createCustomErrorClass(\"MissingSwapPayloadParamaters\");\nexport const WrongDeviceForAccountRefund = createCustomErrorClass(\"WrongDeviceForAccountRefund\");\nexport const WrongAppForCurrency = createCustomErrorClass(\"WrongAppForCurrency\");\n\nexport const ETHAddressNonEIP = createCustomErrorClass(\"ETHAddressNonEIP\");\nexport const CantScanQRCode = createCustomErrorClass(\"CantScanQRCode\");\nexport const FeeNotLoaded = createCustomErrorClass(\"FeeNotLoaded\");\nexport const FeeNotLoadedSwap = createCustomErrorClass(\"FeeNotLoadedSwap\");\nexport const FeeRequired = createCustomErrorClass(\"FeeRequired\");\nexport const FeeTooHigh = createCustomErrorClass(\"FeeTooHigh\");\nexport const PendingOperation = createCustomErrorClass(\"PendingOperation\");\nexport const SyncError = createCustomErrorClass(\"SyncError\");\nexport const PairingFailed = createCustomErrorClass(\"PairingFailed\");\nexport const PeerRemovedPairing = createCustomErrorClass(\"PeerRemovedPairing\");\nexport const GenuineCheckFailed = createCustomErrorClass(\"GenuineCheckFailed\");\ntype NetworkType = {\n status: number;\n url: string | undefined;\n method: string;\n};\nexport const LedgerAPI4xx = createCustomErrorClass<\n NetworkType,\n LedgerErrorConstructor<NetworkType>\n>(\"LedgerAPI4xx\");\nexport const LedgerAPI5xx = createCustomErrorClass<\n NetworkType,\n LedgerErrorConstructor<NetworkType>\n>(\"LedgerAPI5xx\");\nexport const FirmwareOrAppUpdateRequired = createCustomErrorClass(\"FirmwareOrAppUpdateRequired\");\n\n// SpeedUp / Cancel EVM tx\nexport const ReplacementTransactionUnderpriced = createCustomErrorClass(\n \"ReplacementTransactionUnderpriced\",\n);\n\n// Bitcoin family\nexport const OpReturnDataSizeLimit = createCustomErrorClass(\"OpReturnSizeLimit\");\nexport const DustLimit = createCustomErrorClass(\"DustLimit\");\n\n// Concordium family\nexport const ConcordiumInsufficientFunds = createCustomErrorClass(\"ConcordiumInsufficientFunds\");\nexport const ConcordiumMemoTooLong = createCustomErrorClass(\"ConcordiumMemoTooLong\");\nexport const ConcordiumPairingExpiredError = createCustomErrorClass(\n \"ConcordiumPairingExpiredError\",\n);\nexport const ConcordiumSessionExpiredError = createCustomErrorClass(\n \"ConcordiumSessionExpiredError\",\n);\n\n// Language\nexport const LanguageNotFound = createCustomErrorClass(\"LanguageNotFound\");\n\n// db stuff, no need to translate\nexport const NoDBPathGiven = createCustomErrorClass(\"NoDBPathGiven\");\nexport const DBWrongPassword = createCustomErrorClass(\"DBWrongPassword\");\nexport const DBNotReset = createCustomErrorClass(\"DBNotReset\");\n\nexport const SequenceNumberError = createCustomErrorClass(\"SequenceNumberError\");\nexport const DisabledTransactionBroadcastError = createCustomErrorClass(\n \"DisabledTransactionBroadcastError\",\n);\n\n// Represents the type of all the classes created with createCustomErrorClass\nexport type CustomErrorClassType = ReturnType<typeof createCustomErrorClass>;\n\n/**\n * Type of a Transport error used to represent all equivalent errors coming from all possible implementation of Transport\n */\nexport enum HwTransportErrorType {\n Unknown = \"Unknown\",\n LocationServicesDisabled = \"LocationServicesDisabled\",\n LocationServicesUnauthorized = \"LocationServicesUnauthorized\",\n BluetoothScanStartFailed = \"BluetoothScanStartFailed\",\n}\n\n/**\n * Represents an error coming from the usage of any Transport implementation.\n *\n * Needed to map a specific implementation error into an error that\n * can be managed by any code unaware of the specific Transport implementation\n * that was used.\n */\nexport class HwTransportError extends Error {\n type: HwTransportErrorType;\n\n constructor(type: HwTransportErrorType, message: string) {\n super(message);\n this.name = \"HwTransportError\";\n this.type = type;\n\n // Needed as long as we target < ES6\n Object.setPrototypeOf(this, HwTransportError.prototype);\n }\n}\n\n/**\n * TransportError is used for any generic transport errors.\n * e.g. Error thrown when data received by exchanges are incorrect or if exchanged failed to communicate with the device for various reason.\n */\nexport class TransportError extends Error {\n id: string;\n constructor(message: string, id: string) {\n const name = \"TransportError\";\n super(message || name);\n this.name = name;\n this.message = message;\n this.stack = new Error(message).stack;\n this.id = id;\n }\n}\n\naddCustomErrorDeserializer(\"TransportError\", e => new TransportError(e.message, e.id));\n\nexport const StatusCodes = {\n ACCESS_CONDITION_NOT_FULFILLED: 0x9804,\n ALGORITHM_NOT_SUPPORTED: 0x9484,\n CLA_NOT_SUPPORTED: 0x6e00,\n CODE_BLOCKED: 0x9840,\n CODE_NOT_INITIALIZED: 0x9802,\n COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981,\n CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985,\n CONTRADICTION_INVALIDATION: 0x9810,\n CONTRADICTION_SECRET_CODE_STATUS: 0x9808,\n DEVICE_IN_RECOVERY_MODE: 0x662f,\n CUSTOM_IMAGE_EMPTY: 0x662e,\n FILE_ALREADY_EXISTS: 0x6a89,\n FILE_NOT_FOUND: 0x9404,\n GP_AUTH_FAILED: 0x6300,\n HALTED: 0x6faa,\n INCONSISTENT_FILE: 0x9408,\n INCORRECT_DATA: 0x6a80,\n INCORRECT_LENGTH: 0x6700,\n INCORRECT_P1_P2: 0x6b00,\n INS_NOT_SUPPORTED: 0x6d00,\n DEVICE_NOT_ONBOARDED: 0x6d07,\n DEVICE_NOT_ONBOARDED_2: 0x6611,\n INVALID_KCV: 0x9485,\n INVALID_OFFSET: 0x9402,\n LICENSING: 0x6f42,\n LOCKED_DEVICE: 0x5515,\n MAX_VALUE_REACHED: 0x9850,\n MEMORY_PROBLEM: 0x9240,\n MISSING_CRITICAL_PARAMETER: 0x6800,\n NO_EF_SELECTED: 0x9400,\n NOT_ENOUGH_MEMORY_SPACE: 0x6a84,\n OK: 0x9000,\n PIN_REMAINING_ATTEMPTS: 0x63c0,\n REFERENCED_DATA_NOT_FOUND: 0x6a88,\n SECURITY_STATUS_NOT_SATISFIED: 0x6982,\n TECHNICAL_PROBLEM: 0x6f00,\n UNKNOWN_APDU: 0x6d02,\n USER_REFUSED_ON_DEVICE: 0x5501,\n NOT_ENOUGH_SPACE: 0x5102,\n APP_NOT_FOUND_OR_INVALID_CONTEXT: 0x5123,\n INVALID_APP_NAME_LENGTH: 0x670a,\n GEN_AES_KEY_FAILED: 0x5419,\n INTERNAL_CRYPTO_OPERATION_FAILED: 0x541a,\n INTERNAL_COMPUTE_AES_CMAC_FAILED: 0x541b,\n ENCRYPT_APP_STORAGE_FAILED: 0x541c,\n INVALID_BACKUP_STATE: 0x6642,\n PIN_NOT_SET: 0x5502,\n INVALID_BACKUP_LENGTH: 0x6733,\n INVALID_RESTORE_STATE: 0x6643,\n INVALID_CHUNK_LENGTH: 0x6734,\n INVALID_BACKUP_HEADER: 0x684a,\n SW_BAD_STATE: 0xb007,\n};\n\nexport function getAltStatusMessage(code: number): string | undefined | null {\n switch (code) {\n // improve text of most common errors\n case 0x6700:\n return \"Incorrect length\";\n case 0x6800:\n return \"Missing critical parameter\";\n case 0x6982:\n return \"Security not satisfied (dongle locked or have invalid access rights)\";\n case 0x6985:\n return \"Condition of use not satisfied (denied by the user?)\";\n case 0x6a80:\n return \"Invalid data received\";\n case 0x6b00:\n return \"Invalid parameter received\";\n case 0x5515:\n return \"Locked device\";\n case 0xb007:\n return \"Unexpected state on the device\";\n }\n if (0x6f00 <= code && code <= 0x6fff) {\n return \"Internal error, please report\";\n }\n}\n\n/**\n * Error thrown when a device returned a non success status.\n * the error.statusCode is one of the `StatusCodes` exported by this library.\n */\nexport class TransportStatusError extends Error {\n statusCode: number;\n statusText: string;\n\n /**\n * @param statusCode The error status code coming from a Transport implementation\n * @param options containing:\n * - canBeMappedToChildError: enable the mapping of TransportStatusError to an error extending/inheriting from it\n * . Ex: LockedDeviceError. Default to true.\n */\n constructor(\n statusCode: number,\n { canBeMappedToChildError = true }: { canBeMappedToChildError?: boolean } = {},\n ) {\n const statusText =\n Object.keys(StatusCodes).find(k => StatusCodes[k] === statusCode) || \"UNKNOWN_ERROR\";\n const smsg = getAltStatusMessage(statusCode) || statusText;\n const statusCodeStr = statusCode.toString(16);\n const message = `Ledger device: ${smsg} (0x${statusCodeStr})`;\n\n super(message);\n this.name = \"TransportStatusError\";\n\n this.statusCode = statusCode;\n this.statusText = statusText;\n\n Object.setPrototypeOf(this, TransportStatusError.prototype);\n\n // Maps to a LockedDeviceError\n if (canBeMappedToChildError && statusCode === StatusCodes.LOCKED_DEVICE) {\n return new LockedDeviceError(message);\n }\n }\n}\n\nexport class LockedDeviceError extends TransportStatusError {\n constructor(message?: string) {\n super(StatusCodes.LOCKED_DEVICE, { canBeMappedToChildError: false });\n if (message) {\n this.message = message;\n }\n this.name = \"LockedDeviceError\";\n Object.setPrototypeOf(this, LockedDeviceError.prototype);\n }\n}\n\nexport class DeviceMangementKitError extends Error {\n constructor(name: string, message: string) {\n super(message);\n this.name = name;\n Object.setPrototypeOf(this, DeviceMangementKitError.prototype);\n }\n}\n\n// Represents the type of the class TransportStatusError and its children\nexport type TransportStatusErrorClassType = typeof TransportStatusError | typeof LockedDeviceError;\n\naddCustomErrorDeserializer(\"TransportStatusError\", e => new TransportStatusError(e.statusCode));\n","// biome-ignore-all lint: outside copy-paste, not worth fixing\n// ------------------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------------------\n// THIS IS SOME HORRIBLE CODE IMPORTED JUST\n// FOR THE SAKE OF NOT IMPORTING UGLY, WICKED, AND\n// BROKEN @ledgerhq/live-* LIBRARIES\n//\n// IT'S MEANT TO BE CONSIDERED AS A BLACK BOX\n// ------------------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------------------\nimport {\n BluetoothRequired,\n CantOpenDevice,\n DeviceHalted,\n FirmwareOrAppUpdateRequired,\n TransportInterfaceNotAvailable,\n TransportStatusError,\n TransportWebUSBGestureRequired,\n} from \"@ledgerhq/errors\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { Observable, throwError, timer } from \"rxjs\";\nimport { catchError, mergeMap, retryWhen } from \"rxjs/operators\";\n\nconst initialErrorRemapping = (error: Error): Observable<never> =>\n throwError(\n error && error instanceof TransportStatusError && error.statusCode === 0x6faa\n ? new DeviceHalted(error.message)\n : error instanceof TransportStatusError && error.statusCode === 0x6b00\n ? new FirmwareOrAppUpdateRequired(error.message)\n : error,\n );\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst never = new Promise(() => {});\n\ntype Discovery = Observable<{\n type: \"add\" | \"remove\";\n id: string;\n name: string;\n}>;\n\nexport type TransportModule = {\n // unique transport name that identify the transport module\n id: string;\n // open a device by an id, this id must be unique across all modules\n // you can typically prefix it with `something|` that identify it globally\n // returns falsy if the transport module can't handle this id\n // here, open means we want to START doing something with the transport\n open: (id: string) => Promise<Transport> | null | undefined;\n // here, close means we want to STOP doing something with the transport\n close?: (transport: Transport, id: string) => Promise<void> | null | undefined;\n // disconnect/interrupt a device connection globally\n // returns falsy if the transport module can't handle this id\n disconnect: (id: string) => Promise<void> | null | undefined;\n // optional observable that allows to discover a transport\n discovery?: Discovery;\n};\n\nconst modules: TransportModule[] = [];\n\nexport const registerTransportModule = (module: TransportModule): void => {\n modules.push(module);\n};\n\nexport const close = (transport: Transport, deviceId: string): Promise<void> => {\n for (const m of modules) {\n const p = m.close?.(transport, deviceId);\n if (p) return p;\n }\n // fallback on an actual close\n return transport.close();\n};\n\nexport const open = (deviceId: string): Promise<Transport> => {\n for (const m of modules) {\n const p = m.open(deviceId);\n if (p) return p;\n }\n return Promise.reject(new Error(`Can't find handler to open ${deviceId}`));\n};\n\nconst transportFinally =\n (cleanup: () => Promise<void>) =>\n <T>(observable: Observable<T>): Observable<T> =>\n // @ts-expect-error typescript not checking against the instanceof\n Observable.create((o) => {\n let done = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const finalize = (): any => {\n if (done) return never;\n done = true;\n return cleanup();\n };\n\n const sub = observable.subscribe({\n next: (e) => o.next(e),\n complete: () => {\n void finalize().then(() => o.complete());\n },\n error: (e) => {\n void finalize().then(() => o.error(e));\n },\n });\n return () => {\n sub.unsubscribe();\n void finalize();\n };\n });\n\ntype AccessHook = () => () => void;\n\nconst accessHooks: AccessHook[] = [];\n\nconst deviceQueues = {};\n\nexport const withDevice =\n (deviceId: string) =>\n <T>(job: (t: Transport) => Observable<T>): Observable<T> =>\n new Observable((o) => {\n // @ts-expect-error typescript not checking against the instanceof\n let unsubscribed;\n // @ts-expect-error typescript not checking against the instanceof\n let sub;\n // @ts-expect-error typescript not checking against the instanceof\n const deviceQueue = deviceQueues[deviceId] ?? Promise.resolve();\n\n // @ts-expect-error typescript not checking against the instanceof\n const finalize = (transport, cleanups): Promise<void> =>\n close(transport, deviceId)\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch(() => {})\n .then(() => {\n // @ts-expect-error typescript not checking against the instanceof\n cleanups.forEach((c) => c());\n });\n\n // when we'll finish all the current job, we'll call finish\n // @ts-expect-error typescript not checking against the instanceof\n let finish;\n // this new promise is the next exec queue\n // @ts-expect-error typescript not checking against the instanceof\n deviceQueues[deviceId] = new Promise((resolve) => {\n finish = resolve;\n });\n // for any new job, we'll now wait the exec queue to be available\n deviceQueue\n .then(() => open(deviceId)) // open the transport\n // @ts-expect-error typescript not checking against the instanceof\n .then(async (transport) => {\n // @ts-expect-error typescript not checking against the instanceof\n if (unsubscribed) {\n // it was unsubscribed prematurely\n // @ts-expect-error typescript not checking against the instanceof\n return finalize(transport, [finish]);\n }\n\n if (\n transport.requestConnectionPriority &&\n typeof transport.requestConnectionPriority === \"function\"\n ) {\n await transport.requestConnectionPriority(\"High\");\n }\n\n return transport;\n })\n // @ts-expect-error typescript not checking against the instanceof\n .catch((e) => {\n // @ts-expect-error typescript not checking against the instanceof\n finish();\n if (e instanceof BluetoothRequired) throw e;\n if (e instanceof TransportWebUSBGestureRequired) throw e;\n if (e instanceof TransportInterfaceNotAvailable) throw e;\n throw new CantOpenDevice(e.message);\n })\n // @ts-expect-error typescript not checking against the instanceof\n .then((transport) => {\n if (!transport) return;\n\n // @ts-expect-error typescript not checking against the instanceof\n if (unsubscribed) {\n // it was unsubscribed prematurely\n // @ts-expect-error typescript not checking against the instanceof\n return finalize(transport, [finish]);\n }\n\n const cleanups = accessHooks.map((hook) => hook());\n sub = job(transport) // $FlowFixMe\n .pipe(\n catchError(initialErrorRemapping),\n // $FlowFixMe\n transportFinally(() =>\n // @ts-expect-error typescript not checking against the instanceof\n finalize(transport, [...cleanups, finish]),\n ),\n )\n .subscribe(o);\n })\n // @ts-expect-error typescript not checking against the instanceof\n .catch((error) => o.error(error));\n return () => {\n unsubscribed = true;\n // @ts-expect-error typescript not checking against the instanceof\n if (sub) sub.unsubscribe();\n };\n });\n\nconst WITH_DEVICE_POLLING_DELAY = 500;\n\nexport const retryWhileErrors =\n (acceptError: (arg0: Error) => boolean) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (attempts: Observable<any>): Observable<any> =>\n attempts.pipe(\n mergeMap((error) => {\n if (!acceptError(error)) {\n return throwError(error);\n }\n\n return timer(WITH_DEVICE_POLLING_DELAY);\n }),\n );\n\nexport const withDevicePolling =\n (deviceId: string) =>\n <T>(\n job: (arg0: Transport) => Observable<T>,\n acceptError: (arg0: Error) => boolean = () => false,\n ): Observable<T> =>\n withDevice(deviceId)(job).pipe(retryWhen(retryWhileErrors(acceptError)));\n","import { TransportStatusError } from \"@ledgerhq/errors\";\n\nexport const isTransportStatusError = (error: unknown): error is TransportStatusError => {\n return (\n error instanceof TransportStatusError ||\n (error instanceof Error && \"statusCode\" in error && error.message.startsWith(\"Ledger device:\"))\n );\n};\n\nconst CANCEL_STATUS_CODES = [\n 0x6985, // cancel on Ledger Blue\n\n // STAX\n 0xb00c, // cancel collect wk fragment\n 0xb00d, // cancel user registration\n 0xb010, // cancel review\n 0xb012, // cancel master seed generation\n 0xb013, // cancel login\n 0x5501, // cancel openApp\n];\n\nexport const isDeviceCancelError = (error: Error): boolean => {\n return isTransportStatusError(error) && CANCEL_STATUS_CODES.includes(error.statusCode);\n};\n"]}
@@ -350,7 +350,7 @@ function createApiDevice(options, logger) {
350
350
  };
351
351
  }
352
352
 
353
- // ../../node_modules/.pnpm/@ledgerhq+errors@6.29.0/node_modules/@ledgerhq/errors/lib-es/helpers.js
353
+ // ../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/lib-es/helpers.js
354
354
  var errorClasses = {};
355
355
  var deserializers = {};
356
356
  var addCustomErrorDeserializer = (name, deserializer) => {
@@ -384,7 +384,7 @@ function isObject(value) {
384
384
  return typeof value === "object";
385
385
  }
386
386
 
387
- // ../../node_modules/.pnpm/@ledgerhq+errors@6.29.0/node_modules/@ledgerhq/errors/lib-es/index.js
387
+ // ../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/lib-es/index.js
388
388
  var AccountNameRequiredError = createCustomErrorClass("AccountNameRequired");
389
389
  var AccountNotSupported = createCustomErrorClass("AccountNotSupported");
390
390
  var AccountAwaitingSendPendingOperations = createCustomErrorClass("AccountAwaitingSendPendingOperations");
@@ -420,6 +420,7 @@ var FirmwareNotRecognized = createCustomErrorClass("FirmwareNotRecognized");
420
420
  var HardResetFail = createCustomErrorClass("HardResetFail");
421
421
  var InvalidXRPTag = createCustomErrorClass("InvalidXRPTag");
422
422
  var InvalidAddress = createCustomErrorClass("InvalidAddress");
423
+ var InvalidTransactionError = createCustomErrorClass("InvalidTransactionError");
423
424
  var InvalidNonce = createCustomErrorClass("InvalidNonce");
424
425
  var InvalidAddressBecauseDestinationIsAlsoSource = createCustomErrorClass("InvalidAddressBecauseDestinationIsAlsoSource");
425
426
  var LatestMCUInstalledError = createCustomErrorClass("LatestMCUInstalledError");
@@ -516,6 +517,10 @@ var FirmwareOrAppUpdateRequired = createCustomErrorClass("FirmwareOrAppUpdateReq
516
517
  var ReplacementTransactionUnderpriced = createCustomErrorClass("ReplacementTransactionUnderpriced");
517
518
  var OpReturnDataSizeLimit = createCustomErrorClass("OpReturnSizeLimit");
518
519
  var DustLimit = createCustomErrorClass("DustLimit");
520
+ var ConcordiumInsufficientFunds = createCustomErrorClass("ConcordiumInsufficientFunds");
521
+ var ConcordiumMemoTooLong = createCustomErrorClass("ConcordiumMemoTooLong");
522
+ var ConcordiumPairingExpiredError = createCustomErrorClass("ConcordiumPairingExpiredError");
523
+ var ConcordiumSessionExpiredError = createCustomErrorClass("ConcordiumSessionExpiredError");
519
524
  var LanguageNotFound = createCustomErrorClass("LanguageNotFound");
520
525
  var NoDBPathGiven = createCustomErrorClass("NoDBPathGiven");
521
526
  var DBWrongPassword = createCustomErrorClass("DBWrongPassword");
@@ -593,8 +598,7 @@ var StatusCodes = {
593
598
  INVALID_RESTORE_STATE: 26179,
594
599
  INVALID_CHUNK_LENGTH: 26420,
595
600
  INVALID_BACKUP_HEADER: 26698,
596
- // Not documented:
597
- TRUSTCHAIN_WRONG_SEED: 45063
601
+ SW_BAD_STATE: 45063
598
602
  };
599
603
  function getAltStatusMessage(code) {
600
604
  switch (code) {
@@ -613,6 +617,8 @@ function getAltStatusMessage(code) {
613
617
  return "Invalid parameter received";
614
618
  case 21781:
615
619
  return "Locked device";
620
+ case 45063:
621
+ return "Unexpected state on the device";
616
622
  }
617
623
  if (28416 <= code && code <= 28671) {
618
624
  return "Internal error, please report";
@@ -811,4 +817,4 @@ export {
811
817
  isDeviceCancelError
812
818
  };
813
819
  /* v8 ignore next -- @preserve */
814
- //# sourceMappingURL=chunk-XQ4BT4HB.js.map
820
+ //# sourceMappingURL=chunk-PFZIW6UP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/device/api-device.ts","../src/device/constants.ts","../../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/src/helpers.ts","../../../node_modules/.pnpm/@ledgerhq+errors@6.32.0/node_modules/@ledgerhq/errors/src/index.ts","../src/device/device-access.ts","../src/device/utils.ts"],"sourcesContent":["import type {\n HsmCertificate,\n PsdAuthChallengeResponse,\n PsdPairingData,\n PubKey,\n} from \"@ledgerhq/revault-api\";\nimport axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport type { Logger } from \"@/logger\";\n\nimport { APPID_VAULT_ADMINISTRATOR, PATHS, SCRIPT_IDS, STR_ROLES } from \"./constants\";\nimport type { Device } from \"./types\";\n\ntype Options = {\n /**\n * device-api URL\n */\n deviceApiUrl: string;\n\n /**\n * salt used by device-api\n */\n salt: string;\n\n /**\n * seed generation function used for device-api device spawn\n */\n genSeed: (p: { salt: string; index: number }) => string | Promise<string>;\n};\n\nexport type ApiDevice = {\n /**\n * bind a device to the given device index\n */\n with: (index: number) => Device;\n};\n\nexport function createApiDevice(options: Options, logger: Logger): ApiDevice {\n const { genSeed } = options;\n const sessionId = uuidv4();\n const deviceApi = axios.create({ baseURL: options.deviceApiUrl });\n\n axiosRetry(deviceApi, {\n retryDelay: axiosRetry.linearDelay(1000),\n retries: 3,\n retryCondition: /* v8 ignore next -- @preserve */ () => true,\n onRetry:\n /* v8 ignore next -- @preserve */\n (retryCount, err) => {\n const formattedErr = `${err.code ?? `UNKNOWN`} on ${err.config?.method?.toUpperCase() ?? \"UNKNOWN_METHOD\"} ${err.config?.url ?? \"UNKNOWN_URL\"}`;\n logger.warning(\n `Retrying request to device-api (attempt ${retryCount}) - Cause: ${formattedErr}`,\n );\n },\n });\n\n /* v8 ignore next -- @preserve */\n deviceApi.interceptors.request.use(\n (config) => {\n logger.debug(\n `[device-api] ${config.method?.toUpperCase()} ${config.url}${config.data ? ` ${JSON.stringify(config.data)}` : \"\"}`,\n );\n if ([\"post\", \"put\"].includes(config.method!)) {\n // when interceptor is called in combination with axios-retry, config.data can be a string or an object\n // and we should return either a string or an object compatible with the original type\n const isStringMode = typeof config.data === \"string\";\n const data = (isStringMode ? JSON.parse(config.data) : config.data) as Record<\n string,\n unknown\n >;\n const enhancedData = {\n sessionID: sessionId, // Used to ensure dedicated session if someones else uses same seed\n psd_model: \"02\", // Stax\n version: 3, // Used to properly enable noise channel\n ...data,\n };\n config.data = isStringMode ? JSON.stringify(enhancedData) : enhancedData;\n }\n return config;\n },\n (error: Error) => Promise.reject(error),\n );\n\n return {\n with: (index: number): Device => {\n const __seed = genSeed({ salt: options.salt, index });\n\n const getSeed = async (): Promise<string> => {\n if (typeof __seed === \"string\") return Promise.resolve(__seed);\n return __seed;\n };\n\n const authenticate = async ({\n challenge,\n workspaceName,\n }: {\n challenge: PsdAuthChallengeResponse;\n workspaceName: string;\n }): Promise<string> => {\n const role = challenge.role;\n if (role === \"READ_ONLY_API_KEY\")\n throw new Error(\"Invalid role for authenticate: READ_ONLY_API_KEY\");\n const { data } = await deviceApi.post<string>(\"/authenticate\", {\n seed: await getSeed(),\n challenge: Buffer.from(challenge.challenge, \"base64\").toString(\"hex\"),\n application: APPID_VAULT_ADMINISTRATOR,\n key_handle: challenge.keyHandle,\n name: challenge.name,\n role: STR_ROLES[role],\n type: \"02\", // Stax\n workspaceName,\n });\n return data;\n };\n\n const finalizePairingHandshake = async (params: {\n handshake: string;\n partitionId: string;\n }): Promise<string> => {\n const { handshake, partitionId } = params;\n const payload = { seed: await getSeed(), handshake, ciphertext: partitionId };\n const res = await deviceApi.post<string>(\"/finalize-pairing-handshake\", payload);\n return res.data;\n };\n\n const generateSeedFragment = async (): Promise<string> => {\n const payload = {\n seed: await getSeed(),\n path: PATHS.KEY_MATERIAL,\n goal: 0, // seed fragment\n };\n const { data } = await deviceApi.post<string>(\"/generate-key-component\", payload);\n return data;\n };\n\n const generateWrappingKeyFragment = async (): Promise<string> => {\n const goal = 1; // means Wrapping Key\n const payload = { seed: await getSeed(), goal, path: PATHS.KEY_MATERIAL };\n const res = await deviceApi.post<string>(\"/generate-key-fragments\", payload);\n return Buffer.from(res.data, \"hex\").toString(\"base64\");\n };\n\n const getAttestation = async (): Promise<{\n attestation: {\n codeHash: string;\n attestationPub: string;\n certificate: string;\n };\n buffer: Buffer;\n }> => {\n const { data: attestationStr } = await deviceApi.post<string>(\"/get-attestation\", {\n seed: await getSeed(),\n });\n const attestationBuffer = Buffer.from(attestationStr, \"hex\");\n const certLen = attestationBuffer.readInt8(32 + 65 + 1);\n return {\n attestation: {\n codeHash: attestationBuffer.slice(0, 32).toString(\"base64\"),\n attestationPub: attestationBuffer.slice(32, 32 + 65).toString(\"base64\"),\n certificate: attestationBuffer.slice(32 + 65, 32 + 65 + 2 + certLen).toString(\"base64\"),\n },\n buffer: attestationBuffer,\n };\n };\n\n const getConfidentialityKey = async (): Promise<{\n confidentialityKeyCurve25519: string;\n confidentialityKeySignature: string;\n }> => {\n const res = await deviceApi.post<{\n confidentiality_key_curve25519: string;\n confidentiality_key_signature: string;\n }>(\"/get-confidentiality-key\", { seed: await getSeed() });\n return {\n confidentialityKeyCurve25519: res.data.confidentiality_key_curve25519,\n confidentialityKeySignature: res.data.confidentiality_key_signature,\n };\n };\n\n const getConfidentialityPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.CONFIDENTIALITY });\n };\n\n const getDeviceUserId = async (): Promise<string> => {\n const res = await deviceApi.post<{ blue_device_id: string }>(\"/blue-device-id\", {\n seed: await getSeed(),\n });\n return res.data.blue_device_id.toUpperCase();\n };\n\n const getU2FPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.U2F });\n };\n\n const getValidationPubKey = async (): Promise<{ pubKey: string; signature: string }> => {\n return getPublicKey({ path: PATHS.VALIDATION });\n };\n\n const hasPairing = async (): Promise<boolean> => {\n const res = await deviceApi.post<string[]>(\"/get-partition-ids\", { seed: await getSeed() });\n return res.data.length > 0;\n };\n\n const initPairingHandshake = async (): Promise<{ pubKey: string; signature: string }> => {\n const { data } = await deviceApi.post<{ attestation: string; pubKey: string }>(\n \"/initiate-pairing-handshake\",\n { seed: await getSeed() },\n );\n return {\n pubKey: data.pubKey,\n signature: Buffer.from(data.attestation, \"hex\").toString(\"base64\"),\n };\n };\n\n const openSession = async (params: {\n secureChannel: { pubKey: PubKey; certificate: HsmCertificate };\n }): Promise<void> => {\n const { secureChannel } = params;\n const signature = Buffer.from(secureChannel.certificate.signature, \"base64\");\n const attestationPubKey = Buffer.from(secureChannel.certificate.attestationPub, \"base64\");\n const attestationCertificate = Buffer.from(secureChannel.certificate.certificate, \"base64\");\n const attestation = Buffer.concat([\n Buffer.from([signature.length]),\n signature,\n attestationPubKey,\n Buffer.from([attestationCertificate.length]),\n attestationCertificate,\n ]);\n const payload = {\n seed: await getSeed(),\n path: PATHS.CONFIDENTIALITY,\n pubKey: secureChannel.pubKey,\n attestation: attestation.toString(\"hex\"),\n scriptId: SCRIPT_IDS.INIT_SESSION,\n };\n const { data: deviceResponse } = await deviceApi.post<string>(\"/open-session\", payload);\n if (deviceResponse !== \"9000\") {\n throw new Error(`device-api device failed with code: ${deviceResponse}`);\n }\n };\n\n const register = async (params: {\n challenge: string;\n u2fRegisterData: string;\n name: string;\n role: \"ADMIN\" | \"SHARED_OWNER\" | \"OPERATOR\";\n }): Promise<{\n u2fRegister: Buffer;\n keyHandle: Buffer;\n rfu: number;\n pubKey: string;\n }> => {\n const { challenge, u2fRegisterData, name, role } = params;\n const payload = {\n seed: await getSeed(),\n challenge,\n name,\n role: STR_ROLES[role],\n hsm_data: u2fRegisterData,\n type: \"02\", // Stax\n application: APPID_VAULT_ADMINISTRATOR,\n };\n const { data } = await deviceApi.post<string>(\"/register\", payload);\n const response = Buffer.from(data, \"hex\");\n let i = 0;\n const rfu = response.slice(i, i + 1)[0]!;\n i += 1;\n const pubKey = response.slice(i, i + 65).toString(\"hex\");\n i += 65;\n const keyHandleLength = response.slice(i, i + 1)[0]!;\n i++;\n const keyHandle = response.slice(i, i + keyHandleLength);\n i += keyHandleLength;\n return {\n u2fRegister: response.slice(0, response.length - 2),\n keyHandle,\n rfu,\n pubKey,\n };\n };\n\n const registerData = async (params: { challenge: string }): Promise<string> => {\n const { challenge } = params;\n const payload = { seed: await getSeed(), challenge };\n const res = await deviceApi.post<string>(\"/u2f-register-data\", payload);\n return res.data;\n };\n\n const setPairing = async ({ pairing }: { pairing: PsdPairingData }): Promise<void> => {\n const payload = {\n seed: await getSeed(),\n blob: pairing.blob,\n pairing: {\n bootstrap_enabled: pairing.pairing.bootstrapEnabled,\n partition_key: pairing.pairing.partitionKey,\n workspace_name: pairing.pairing.workspaceName,\n },\n partition_key_attestation: {\n code_hash: pairing.partitionKeyAttestation.codeHash,\n attestation_pub: pairing.partitionKeyAttestation.attestationPub,\n certificate: pairing.partitionKeyAttestation.certificate,\n signature: pairing.partitionKeyAttestation.signature,\n },\n };\n await deviceApi.post(\"/set-partition-key\", payload);\n };\n\n const startKKPatternAsResponder = async (params: {\n handshake: string;\n handshakeAttestation: HsmCertificate;\n partitionId: string;\n }): Promise<{ handshake: string; signature: string }> => {\n const payload = {\n seed: await getSeed(),\n script_id: SCRIPT_IDS.ACCOUNT_MANAGER_SESSION,\n handshake: params.handshake,\n // for device-api it's normal to have empty string as handshake_attestation\n handshake_attestation: \"\",\n partition_id: params.partitionId,\n };\n const { data } = await deviceApi.post<string>(\"/start-kk-pattern-as-responder\", payload);\n const buffer = Buffer.from(data, \"hex\");\n const dataLength = buffer.readInt8(0);\n return {\n handshake: buffer.slice(1, dataLength + 1).toString(\"base64\"),\n signature: buffer.slice(dataLength + 1).toString(\"base64\"),\n };\n };\n\n const startKPatternAsResponder = async (params: {\n handshake: string;\n handshakeAttestation: HsmCertificate;\n partitionId: string;\n }): Promise<void> => {\n const { handshake, partitionId } = params;\n const payload = {\n seed: await getSeed(),\n script_id: SCRIPT_IDS.ACCOUNT_MANAGER_SESSION,\n handshake,\n // for device-api it's normal to have empty string as handshake_attestation\n handshake_attestation: \"\",\n partition_id: partitionId,\n };\n const { data: deviceResponse } = await deviceApi.post<string>(\n \"/start-k-pattern-as-responder\",\n payload,\n );\n if (deviceResponse !== \"9000\") {\n throw new Error(`device-api device failed with code: ${deviceResponse}`);\n }\n };\n\n const getPublicKey = async (params: {\n path: string;\n }): Promise<{ pubKey: string; signature: string }> => {\n const { path } = params;\n type DeviceApiGetPubKeyResponse = { attestation: string; pubKey: string };\n const payload = { seed: await getSeed(), secp256k1: true, path };\n const res = await deviceApi.post<DeviceApiGetPubKeyResponse>(\"/get-public-key\", payload);\n return {\n pubKey: res.data.pubKey,\n signature: Buffer.from(res.data.attestation, \"hex\").toString(\"base64\"),\n };\n };\n\n const validateVaultOperation = async (params: { actions: string[] }): Promise<string> => {\n const { actions } = params;\n const payload = {\n seed: await getSeed(),\n path: PATHS.VALIDATION,\n actions,\n };\n const { data: signature } = await deviceApi.post<string>(\"/validate-op\", payload);\n return signature;\n };\n\n const sendAPDU = (_apdu: string): Promise<string> => {\n logger.info(\"Can't send arbitrary APDU to software device\");\n return Promise.resolve(\"9000\");\n };\n\n const getVersion = async (): Promise<string> => {\n return \"1.2.3\";\n };\n\n const poll = async (): Promise<{ isAppOpened: boolean }> => {\n await new Promise((r) => setTimeout(r, 1e3));\n return { isAppOpened: true };\n };\n\n const pollApp = async (): Promise<string> => {\n await new Promise((r) => setTimeout(r, 1e3));\n return \"9000\";\n };\n\n return {\n authenticate,\n finalizePairingHandshake,\n generateSeedFragment,\n generateWrappingKeyFragment,\n getAttestation,\n getConfidentialityKey,\n getConfidentialityPubKey,\n getDeviceUserId,\n getU2FPubKey,\n getValidationPubKey,\n hasPairing,\n initPairingHandshake,\n openSession,\n register,\n registerData,\n setPairing,\n startKKPatternAsResponder,\n startKPatternAsResponder,\n validateVaultOperation,\n getVersion,\n sendAPDU,\n poll,\n pollApp,\n };\n },\n };\n}\n","export const PATHS = {\n U2F: \"5655636'/5583430'\",\n CONFIDENTIALITY: \"5655636'/4410950'\",\n KEY_MATERIAL: \"5655636'/4932953'\",\n VALIDATION: \"5655636'/5652812'\",\n} as const;\n\nexport const STATUS_LENGTH = 2;\n\nexport const SCRIPT_IDS = {\n INIT_SESSION: 3,\n ACCOUNT_MANAGER_SESSION: 2,\n} as const;\n\nexport const STR_ROLES: Record<\"OPERATOR\" | \"ADMIN\" | \"SHARED_OWNER\", string> = {\n OPERATOR: \"00\",\n ADMIN: \"01\",\n SHARED_OWNER: \"02\",\n} as const;\n\nexport const APPID_VAULT_ADMINISTRATOR =\n \"ad5be1a1fe011ce7f53ae081a22ae000a42021f3f94106a3bac9f76e8230e4b9\";\n\nconst all61xxStatus = [];\nfor (let i = 0x6100; i <= 0x61ff; i++) {\n all61xxStatus.push(i);\n}\n\nexport const PAGINATED_STATUS = all61xxStatus;\nexport const STREAMING_RESPONSE = 0x02;\nexport const STREAMING_NEXT_ACTION = 0x01;\n","/* eslint-disable no-continue */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-prototype-builtins */\n\nconst errorClasses = {};\nconst deserializers = {};\n\nexport const addCustomErrorDeserializer = (name: string, deserializer: (obj: any) => any): void => {\n deserializers[name] = deserializer;\n};\n\nexport interface LedgerErrorConstructor<F extends { [key: string]: unknown }>\n extends ErrorConstructor {\n new (message?: string, fields?: F, options?: any): Error & F;\n (message?: string, fields?: F, options?: any): Error & F;\n readonly prototype: Error & F;\n}\n\nexport const createCustomErrorClass = <\n F extends { [key: string]: unknown },\n T extends LedgerErrorConstructor<F> = LedgerErrorConstructor<F>,\n>(\n name: string,\n): T => {\n class CustomErrorClass extends Error {\n cause?: Error;\n constructor(message?: string, fields?: F, options?: any) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n super(message || name, options);\n // Set the prototype explicitly. See https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(this, CustomErrorClass.prototype);\n this.name = name;\n if (fields) {\n for (const k in fields) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n this[k] = fields[k];\n }\n }\n\n if (options && isObject(options) && \"cause\" in options && !this.cause) {\n // .cause was specified but the superconstructor\n // did not create an instance property.\n const cause = options.cause;\n this.cause = cause;\n if (\"stack\" in cause) {\n this.stack = this.stack + \"\\nCAUSE: \" + cause.stack;\n }\n }\n }\n }\n\n errorClasses[name] = CustomErrorClass;\n\n return CustomErrorClass as unknown as T;\n};\n\nfunction isObject(value) {\n return typeof value === \"object\";\n}\n\n// inspired from https://github.com/programble/errio/blob/master/index.js\nexport const deserializeError = (object: any): Error | undefined => {\n if (object && typeof object === \"object\") {\n try {\n if (typeof object.message === \"string\") {\n const msg = JSON.parse(object.message);\n if (msg.message && msg.name) {\n object = msg;\n }\n }\n } catch {\n // nothing\n }\n\n let error;\n if (typeof object.name === \"string\") {\n const { name } = object;\n const des = deserializers[name];\n if (des) {\n error = des(object);\n } else {\n let constructor = name === \"Error\" ? Error : errorClasses[name];\n\n if (!constructor) {\n console.warn(\"deserializing an unknown class '\" + name + \"'\");\n constructor = createCustomErrorClass(name);\n }\n\n error = Object.create(constructor.prototype);\n try {\n for (const prop in object) {\n if (object.hasOwnProperty(prop)) {\n error[prop] = object[prop];\n }\n }\n } catch {\n // sometimes setting a property can fail (e.g. .name)\n }\n }\n } else {\n if (typeof object.message === \"string\") {\n error = new Error(object.message);\n }\n }\n\n if (error && !error.stack && Error.captureStackTrace) {\n Error.captureStackTrace(error, deserializeError);\n }\n return error;\n }\n return new Error(String(object));\n};\n\n// inspired from https://github.com/sindresorhus/serialize-error/blob/master/index.js\nexport const serializeError = (\n value: undefined | To | string | (() => unknown),\n): undefined | To | string => {\n if (!value) return value;\n if (typeof value === \"object\") {\n return destroyCircular(value, []);\n }\n if (typeof value === \"function\") {\n return `[Function: ${value.name || \"anonymous\"}]`;\n }\n return value;\n};\n\ninterface To {\n name?: string;\n message?: string;\n stack?: string;\n}\n\n// https://www.npmjs.com/package/destroy-circular\nfunction destroyCircular(from: To, seen: Array<To>): To {\n const to: To = {};\n seen.push(from);\n for (const key of Object.keys(from)) {\n const value = from[key];\n if (typeof value === \"function\") {\n continue;\n }\n if (!value || typeof value !== \"object\") {\n to[key] = value;\n continue;\n }\n if (seen.indexOf(from[key]) === -1) {\n to[key] = destroyCircular(from[key], seen.slice(0));\n continue;\n }\n to[key] = \"[Circular]\";\n }\n if (typeof from.name === \"string\") {\n to.name = from.name;\n }\n if (typeof from.message === \"string\") {\n to.message = from.message;\n }\n if (typeof from.stack === \"string\") {\n to.stack = from.stack;\n }\n return to;\n}\n","import {\n serializeError,\n deserializeError,\n createCustomErrorClass,\n addCustomErrorDeserializer,\n LedgerErrorConstructor,\n} from \"./helpers\";\n\nexport { serializeError, deserializeError, createCustomErrorClass, addCustomErrorDeserializer };\n\nexport const AccountNameRequiredError = createCustomErrorClass(\"AccountNameRequired\");\nexport const AccountNotSupported = createCustomErrorClass(\"AccountNotSupported\");\nexport const AccountAwaitingSendPendingOperations = createCustomErrorClass(\n \"AccountAwaitingSendPendingOperations\",\n);\nexport const AmountRequired = createCustomErrorClass(\"AmountRequired\");\nexport const BluetoothRequired = createCustomErrorClass(\"BluetoothRequired\");\nexport const BtcUnmatchedApp = createCustomErrorClass(\"BtcUnmatchedApp\");\nexport const CantOpenDevice = createCustomErrorClass(\"CantOpenDevice\");\nexport const CashAddrNotSupported = createCustomErrorClass(\"CashAddrNotSupported\");\nexport const ClaimRewardsFeesWarning = createCustomErrorClass(\"ClaimRewardsFeesWarning\");\nexport const CurrencyNotSupported = createCustomErrorClass<\n { currencyName: string },\n LedgerErrorConstructor<{ currencyName: string }>\n>(\"CurrencyNotSupported\");\nexport const DeviceAppVerifyNotSupported = createCustomErrorClass(\"DeviceAppVerifyNotSupported\");\nexport const DeviceGenuineSocketEarlyClose = createCustomErrorClass(\n \"DeviceGenuineSocketEarlyClose\",\n);\nexport const DeviceNotGenuineError = createCustomErrorClass(\"DeviceNotGenuine\");\nexport const DeviceOnDashboardExpected = createCustomErrorClass(\"DeviceOnDashboardExpected\");\nexport const DeviceOnDashboardUnexpected = createCustomErrorClass(\"DeviceOnDashboardUnexpected\");\nexport const DeviceInOSUExpected = createCustomErrorClass(\"DeviceInOSUExpected\");\nexport const DeviceHalted = createCustomErrorClass(\"DeviceHalted\");\nexport const DeviceNameInvalid = createCustomErrorClass(\"DeviceNameInvalid\");\nexport const DeviceSocketFail = createCustomErrorClass(\"DeviceSocketFail\");\nexport const DeviceSocketNoBulkStatus = createCustomErrorClass(\"DeviceSocketNoBulkStatus\");\nexport const DeviceNeedsRestart = createCustomErrorClass(\"DeviceSocketNoBulkStatus\");\nexport const UnresponsiveDeviceError = createCustomErrorClass(\"UnresponsiveDeviceError\");\nexport const DisconnectedDevice = createCustomErrorClass(\"DisconnectedDevice\");\nexport const DisconnectedDeviceDuringOperation = createCustomErrorClass(\n \"DisconnectedDeviceDuringOperation\",\n);\nexport const DeviceExtractOnboardingStateError = createCustomErrorClass(\n \"DeviceExtractOnboardingStateError\",\n);\nexport const DeviceOnboardingStatePollingError = createCustomErrorClass(\n \"DeviceOnboardingStatePollingError\",\n);\nexport const EnpointConfigError = createCustomErrorClass(\"EnpointConfig\");\nexport const EthAppPleaseEnableContractData = createCustomErrorClass(\n \"EthAppPleaseEnableContractData\",\n);\nexport const SolAppPleaseEnableContractData = createCustomErrorClass(\n \"SolAppPleaseEnableContractData\",\n);\nexport const CeloAppPleaseEnableContractData = createCustomErrorClass(\n \"CeloAppPleaseEnableContractData\",\n);\nexport const FeeEstimationFailed = createCustomErrorClass(\"FeeEstimationFailed\");\nexport const FirmwareNotRecognized = createCustomErrorClass(\"FirmwareNotRecognized\");\nexport const HardResetFail = createCustomErrorClass(\"HardResetFail\");\nexport const InvalidXRPTag = createCustomErrorClass(\"InvalidXRPTag\");\nexport const InvalidAddress = createCustomErrorClass(\"InvalidAddress\");\nexport const InvalidTransactionError = createCustomErrorClass(\"InvalidTransactionError\");\nexport const InvalidNonce = createCustomErrorClass(\"InvalidNonce\");\nexport const InvalidAddressBecauseDestinationIsAlsoSource = createCustomErrorClass(\n \"InvalidAddressBecauseDestinationIsAlsoSource\",\n);\nexport const LatestMCUInstalledError = createCustomErrorClass(\"LatestMCUInstalledError\");\nexport const LatestFirmwareVersionRequired = createCustomErrorClass(\n \"LatestFirmwareVersionRequired\",\n);\nexport const UnsupportedFeatureError = createCustomErrorClass(\"UnsupportedFeatureError\");\nexport const NanoSNotSupported = createCustomErrorClass(\"NanoSNotSupported\");\nexport const UnknownMCU = createCustomErrorClass(\"UnknownMCU\");\nexport const LedgerAPIError = createCustomErrorClass(\"LedgerAPIError\");\nexport const LedgerAPIErrorWithMessage = createCustomErrorClass(\"LedgerAPIErrorWithMessage\");\nexport const LedgerAPINotAvailable = createCustomErrorClass(\"LedgerAPINotAvailable\");\nexport const ManagerAppAlreadyInstalledError = createCustomErrorClass(\"ManagerAppAlreadyInstalled\");\nexport const ManagerAppRelyOnBTCError = createCustomErrorClass(\"ManagerAppRelyOnBTC\");\nexport const ManagerAppDepInstallRequired = createCustomErrorClass(\"ManagerAppDepInstallRequired\");\nexport const ManagerAppDepUninstallRequired = createCustomErrorClass(\n \"ManagerAppDepUninstallRequired\",\n);\nexport const ManagerDeviceLockedError = createCustomErrorClass(\"ManagerDeviceLocked\");\nexport const ManagerFirmwareNotEnoughSpaceError = createCustomErrorClass(\n \"ManagerFirmwareNotEnoughSpace\",\n);\nexport const ManagerNotEnoughSpaceError = createCustomErrorClass(\"ManagerNotEnoughSpace\");\nexport const ManagerUninstallBTCDep = createCustomErrorClass(\"ManagerUninstallBTCDep\");\nexport const NetworkDown = createCustomErrorClass(\"NetworkDown\");\nexport const NetworkError = createCustomErrorClass(\"NetworkError\");\nexport const NoAddressesFound = createCustomErrorClass(\"NoAddressesFound\");\nexport const NotEnoughBalance = createCustomErrorClass(\"NotEnoughBalance\");\nexport const NotEnoughBalanceFees = createCustomErrorClass(\"NotEnoughBalanceFees\");\nexport const NotEnoughBalanceSwap = createCustomErrorClass(\"NotEnoughBalanceSwap\");\nexport const NotEnoughBalanceToDelegate = createCustomErrorClass(\"NotEnoughBalanceToDelegate\");\nexport const UnstakeNotEnoughStakedBalanceLeft = createCustomErrorClass(\n \"UnstakeNotEnoughStakedBalanceLeft\",\n);\nexport const RestakeNotEnoughStakedBalanceLeft = createCustomErrorClass(\n \"RestakeNotEnoughStakedBalanceLeft\",\n);\nexport const NotEnoughToRestake = createCustomErrorClass(\"NotEnoughToRestake\");\nexport const NotEnoughToUnstake = createCustomErrorClass(\"NotEnoughToUnstake\");\nexport const NotEnoughBalanceInParentAccount = createCustomErrorClass(\n \"NotEnoughBalanceInParentAccount\",\n);\nexport const NotEnoughSpendableBalance = createCustomErrorClass(\"NotEnoughSpendableBalance\");\nexport const NotEnoughBalanceBecauseDestinationNotCreated = createCustomErrorClass(\n \"NotEnoughBalanceBecauseDestinationNotCreated\",\n);\nexport const NotEnoughToStake = createCustomErrorClass(\"NotEnoughToStake\");\nexport const NoAccessToCamera = createCustomErrorClass(\"NoAccessToCamera\");\nexport const NotEnoughGas = createCustomErrorClass(\"NotEnoughGas\");\n// Error message specifically for the PTX swap flow\nexport const NotEnoughGasSwap = createCustomErrorClass(\"NotEnoughGasSwap\");\nexport const TronEmptyAccount = createCustomErrorClass(\"TronEmptyAccount\");\nexport const MaybeKeepTronAccountAlive = createCustomErrorClass(\"MaybeKeepTronAccountAlive\");\nexport const NotSupportedLegacyAddress = createCustomErrorClass(\"NotSupportedLegacyAddress\");\nexport const GasLessThanEstimate = createCustomErrorClass(\"GasLessThanEstimate\");\nexport const PriorityFeeTooLow = createCustomErrorClass(\"PriorityFeeTooLow\");\nexport const PriorityFeeTooHigh = createCustomErrorClass(\"PriorityFeeTooHigh\");\nexport const PriorityFeeHigherThanMaxFee = createCustomErrorClass(\"PriorityFeeHigherThanMaxFee\");\nexport const MaxFeeTooLow = createCustomErrorClass(\"MaxFeeTooLow\");\nexport const PasswordsDontMatchError = createCustomErrorClass(\"PasswordsDontMatch\");\nexport const PasswordIncorrectError = createCustomErrorClass(\"PasswordIncorrect\");\nexport const RecommendSubAccountsToEmpty = createCustomErrorClass(\"RecommendSubAccountsToEmpty\");\nexport const RecommendUndelegation = createCustomErrorClass(\"RecommendUndelegation\");\nexport const TimeoutTagged = createCustomErrorClass(\"TimeoutTagged\");\nexport const UnexpectedBootloader = createCustomErrorClass(\"UnexpectedBootloader\");\nexport const MCUNotGenuineToDashboard = createCustomErrorClass(\"MCUNotGenuineToDashboard\");\nexport const RecipientRequired = createCustomErrorClass(\"RecipientRequired\");\nexport const UnavailableTezosOriginatedAccountReceive = createCustomErrorClass(\n \"UnavailableTezosOriginatedAccountReceive\",\n);\nexport const UnavailableTezosOriginatedAccountSend = createCustomErrorClass(\n \"UnavailableTezosOriginatedAccountSend\",\n);\nexport const UpdateFetchFileFail = createCustomErrorClass(\"UpdateFetchFileFail\");\nexport const UpdateIncorrectHash = createCustomErrorClass(\"UpdateIncorrectHash\");\nexport const UpdateIncorrectSig = createCustomErrorClass(\"UpdateIncorrectSig\");\nexport const UpdateYourApp = createCustomErrorClass(\"UpdateYourApp\");\nexport const UserRefusedDeviceNameChange = createCustomErrorClass(\"UserRefusedDeviceNameChange\");\nexport const UserRefusedAddress = createCustomErrorClass(\"UserRefusedAddress\");\nexport const UserRefusedFirmwareUpdate = createCustomErrorClass(\"UserRefusedFirmwareUpdate\");\nexport const UserRefusedAllowManager = createCustomErrorClass(\"UserRefusedAllowManager\");\nexport const UserRefusedOnDevice = createCustomErrorClass(\"UserRefusedOnDevice\"); // TODO rename because it's just for transaction refusal\nexport const PinNotSet = createCustomErrorClass(\"PinNotSet\");\nexport const ExpertModeRequired = createCustomErrorClass(\"ExpertModeRequired\");\nexport const TransportOpenUserCancelled = createCustomErrorClass(\"TransportOpenUserCancelled\");\nexport const TransportInterfaceNotAvailable = createCustomErrorClass(\n \"TransportInterfaceNotAvailable\",\n);\nexport const TransportRaceCondition = createCustomErrorClass(\"TransportRaceCondition\");\nexport const TransportWebUSBGestureRequired = createCustomErrorClass(\n \"TransportWebUSBGestureRequired\",\n);\nexport const TransactionHasBeenValidatedError = createCustomErrorClass(\n \"TransactionHasBeenValidatedError\",\n);\nexport const TransportExchangeTimeoutError = createCustomErrorClass(\n \"TransportExchangeTimeoutError\",\n);\nexport const DeviceShouldStayInApp = createCustomErrorClass(\"DeviceShouldStayInApp\");\nexport const WebsocketConnectionError = createCustomErrorClass(\"WebsocketConnectionError\");\nexport const WebsocketConnectionFailed = createCustomErrorClass(\"WebsocketConnectionFailed\");\nexport const WrongDeviceForAccount = createCustomErrorClass(\"WrongDeviceForAccount\");\nexport const WrongDeviceForAccountPayout = createCustomErrorClass(\"WrongDeviceForAccountPayout\");\nexport const MissingSwapPayloadParamaters = createCustomErrorClass(\"MissingSwapPayloadParamaters\");\nexport const WrongDeviceForAccountRefund = createCustomErrorClass(\"WrongDeviceForAccountRefund\");\nexport const WrongAppForCurrency = createCustomErrorClass(\"WrongAppForCurrency\");\n\nexport const ETHAddressNonEIP = createCustomErrorClass(\"ETHAddressNonEIP\");\nexport const CantScanQRCode = createCustomErrorClass(\"CantScanQRCode\");\nexport const FeeNotLoaded = createCustomErrorClass(\"FeeNotLoaded\");\nexport const FeeNotLoadedSwap = createCustomErrorClass(\"FeeNotLoadedSwap\");\nexport const FeeRequired = createCustomErrorClass(\"FeeRequired\");\nexport const FeeTooHigh = createCustomErrorClass(\"FeeTooHigh\");\nexport const PendingOperation = createCustomErrorClass(\"PendingOperation\");\nexport const SyncError = createCustomErrorClass(\"SyncError\");\nexport const PairingFailed = createCustomErrorClass(\"PairingFailed\");\nexport const PeerRemovedPairing = createCustomErrorClass(\"PeerRemovedPairing\");\nexport const GenuineCheckFailed = createCustomErrorClass(\"GenuineCheckFailed\");\ntype NetworkType = {\n status: number;\n url: string | undefined;\n method: string;\n};\nexport const LedgerAPI4xx = createCustomErrorClass<\n NetworkType,\n LedgerErrorConstructor<NetworkType>\n>(\"LedgerAPI4xx\");\nexport const LedgerAPI5xx = createCustomErrorClass<\n NetworkType,\n LedgerErrorConstructor<NetworkType>\n>(\"LedgerAPI5xx\");\nexport const FirmwareOrAppUpdateRequired = createCustomErrorClass(\"FirmwareOrAppUpdateRequired\");\n\n// SpeedUp / Cancel EVM tx\nexport const ReplacementTransactionUnderpriced = createCustomErrorClass(\n \"ReplacementTransactionUnderpriced\",\n);\n\n// Bitcoin family\nexport const OpReturnDataSizeLimit = createCustomErrorClass(\"OpReturnSizeLimit\");\nexport const DustLimit = createCustomErrorClass(\"DustLimit\");\n\n// Concordium family\nexport const ConcordiumInsufficientFunds = createCustomErrorClass(\"ConcordiumInsufficientFunds\");\nexport const ConcordiumMemoTooLong = createCustomErrorClass(\"ConcordiumMemoTooLong\");\nexport const ConcordiumPairingExpiredError = createCustomErrorClass(\n \"ConcordiumPairingExpiredError\",\n);\nexport const ConcordiumSessionExpiredError = createCustomErrorClass(\n \"ConcordiumSessionExpiredError\",\n);\n\n// Language\nexport const LanguageNotFound = createCustomErrorClass(\"LanguageNotFound\");\n\n// db stuff, no need to translate\nexport const NoDBPathGiven = createCustomErrorClass(\"NoDBPathGiven\");\nexport const DBWrongPassword = createCustomErrorClass(\"DBWrongPassword\");\nexport const DBNotReset = createCustomErrorClass(\"DBNotReset\");\n\nexport const SequenceNumberError = createCustomErrorClass(\"SequenceNumberError\");\nexport const DisabledTransactionBroadcastError = createCustomErrorClass(\n \"DisabledTransactionBroadcastError\",\n);\n\n// Represents the type of all the classes created with createCustomErrorClass\nexport type CustomErrorClassType = ReturnType<typeof createCustomErrorClass>;\n\n/**\n * Type of a Transport error used to represent all equivalent errors coming from all possible implementation of Transport\n */\nexport enum HwTransportErrorType {\n Unknown = \"Unknown\",\n LocationServicesDisabled = \"LocationServicesDisabled\",\n LocationServicesUnauthorized = \"LocationServicesUnauthorized\",\n BluetoothScanStartFailed = \"BluetoothScanStartFailed\",\n}\n\n/**\n * Represents an error coming from the usage of any Transport implementation.\n *\n * Needed to map a specific implementation error into an error that\n * can be managed by any code unaware of the specific Transport implementation\n * that was used.\n */\nexport class HwTransportError extends Error {\n type: HwTransportErrorType;\n\n constructor(type: HwTransportErrorType, message: string) {\n super(message);\n this.name = \"HwTransportError\";\n this.type = type;\n\n // Needed as long as we target < ES6\n Object.setPrototypeOf(this, HwTransportError.prototype);\n }\n}\n\n/**\n * TransportError is used for any generic transport errors.\n * e.g. Error thrown when data received by exchanges are incorrect or if exchanged failed to communicate with the device for various reason.\n */\nexport class TransportError extends Error {\n id: string;\n constructor(message: string, id: string) {\n const name = \"TransportError\";\n super(message || name);\n this.name = name;\n this.message = message;\n this.stack = new Error(message).stack;\n this.id = id;\n }\n}\n\naddCustomErrorDeserializer(\"TransportError\", e => new TransportError(e.message, e.id));\n\nexport const StatusCodes = {\n ACCESS_CONDITION_NOT_FULFILLED: 0x9804,\n ALGORITHM_NOT_SUPPORTED: 0x9484,\n CLA_NOT_SUPPORTED: 0x6e00,\n CODE_BLOCKED: 0x9840,\n CODE_NOT_INITIALIZED: 0x9802,\n COMMAND_INCOMPATIBLE_FILE_STRUCTURE: 0x6981,\n CONDITIONS_OF_USE_NOT_SATISFIED: 0x6985,\n CONTRADICTION_INVALIDATION: 0x9810,\n CONTRADICTION_SECRET_CODE_STATUS: 0x9808,\n DEVICE_IN_RECOVERY_MODE: 0x662f,\n CUSTOM_IMAGE_EMPTY: 0x662e,\n FILE_ALREADY_EXISTS: 0x6a89,\n FILE_NOT_FOUND: 0x9404,\n GP_AUTH_FAILED: 0x6300,\n HALTED: 0x6faa,\n INCONSISTENT_FILE: 0x9408,\n INCORRECT_DATA: 0x6a80,\n INCORRECT_LENGTH: 0x6700,\n INCORRECT_P1_P2: 0x6b00,\n INS_NOT_SUPPORTED: 0x6d00,\n DEVICE_NOT_ONBOARDED: 0x6d07,\n DEVICE_NOT_ONBOARDED_2: 0x6611,\n INVALID_KCV: 0x9485,\n INVALID_OFFSET: 0x9402,\n LICENSING: 0x6f42,\n LOCKED_DEVICE: 0x5515,\n MAX_VALUE_REACHED: 0x9850,\n MEMORY_PROBLEM: 0x9240,\n MISSING_CRITICAL_PARAMETER: 0x6800,\n NO_EF_SELECTED: 0x9400,\n NOT_ENOUGH_MEMORY_SPACE: 0x6a84,\n OK: 0x9000,\n PIN_REMAINING_ATTEMPTS: 0x63c0,\n REFERENCED_DATA_NOT_FOUND: 0x6a88,\n SECURITY_STATUS_NOT_SATISFIED: 0x6982,\n TECHNICAL_PROBLEM: 0x6f00,\n UNKNOWN_APDU: 0x6d02,\n USER_REFUSED_ON_DEVICE: 0x5501,\n NOT_ENOUGH_SPACE: 0x5102,\n APP_NOT_FOUND_OR_INVALID_CONTEXT: 0x5123,\n INVALID_APP_NAME_LENGTH: 0x670a,\n GEN_AES_KEY_FAILED: 0x5419,\n INTERNAL_CRYPTO_OPERATION_FAILED: 0x541a,\n INTERNAL_COMPUTE_AES_CMAC_FAILED: 0x541b,\n ENCRYPT_APP_STORAGE_FAILED: 0x541c,\n INVALID_BACKUP_STATE: 0x6642,\n PIN_NOT_SET: 0x5502,\n INVALID_BACKUP_LENGTH: 0x6733,\n INVALID_RESTORE_STATE: 0x6643,\n INVALID_CHUNK_LENGTH: 0x6734,\n INVALID_BACKUP_HEADER: 0x684a,\n SW_BAD_STATE: 0xb007,\n};\n\nexport function getAltStatusMessage(code: number): string | undefined | null {\n switch (code) {\n // improve text of most common errors\n case 0x6700:\n return \"Incorrect length\";\n case 0x6800:\n return \"Missing critical parameter\";\n case 0x6982:\n return \"Security not satisfied (dongle locked or have invalid access rights)\";\n case 0x6985:\n return \"Condition of use not satisfied (denied by the user?)\";\n case 0x6a80:\n return \"Invalid data received\";\n case 0x6b00:\n return \"Invalid parameter received\";\n case 0x5515:\n return \"Locked device\";\n case 0xb007:\n return \"Unexpected state on the device\";\n }\n if (0x6f00 <= code && code <= 0x6fff) {\n return \"Internal error, please report\";\n }\n}\n\n/**\n * Error thrown when a device returned a non success status.\n * the error.statusCode is one of the `StatusCodes` exported by this library.\n */\nexport class TransportStatusError extends Error {\n statusCode: number;\n statusText: string;\n\n /**\n * @param statusCode The error status code coming from a Transport implementation\n * @param options containing:\n * - canBeMappedToChildError: enable the mapping of TransportStatusError to an error extending/inheriting from it\n * . Ex: LockedDeviceError. Default to true.\n */\n constructor(\n statusCode: number,\n { canBeMappedToChildError = true }: { canBeMappedToChildError?: boolean } = {},\n ) {\n const statusText =\n Object.keys(StatusCodes).find(k => StatusCodes[k] === statusCode) || \"UNKNOWN_ERROR\";\n const smsg = getAltStatusMessage(statusCode) || statusText;\n const statusCodeStr = statusCode.toString(16);\n const message = `Ledger device: ${smsg} (0x${statusCodeStr})`;\n\n super(message);\n this.name = \"TransportStatusError\";\n\n this.statusCode = statusCode;\n this.statusText = statusText;\n\n Object.setPrototypeOf(this, TransportStatusError.prototype);\n\n // Maps to a LockedDeviceError\n if (canBeMappedToChildError && statusCode === StatusCodes.LOCKED_DEVICE) {\n return new LockedDeviceError(message);\n }\n }\n}\n\nexport class LockedDeviceError extends TransportStatusError {\n constructor(message?: string) {\n super(StatusCodes.LOCKED_DEVICE, { canBeMappedToChildError: false });\n if (message) {\n this.message = message;\n }\n this.name = \"LockedDeviceError\";\n Object.setPrototypeOf(this, LockedDeviceError.prototype);\n }\n}\n\nexport class DeviceMangementKitError extends Error {\n constructor(name: string, message: string) {\n super(message);\n this.name = name;\n Object.setPrototypeOf(this, DeviceMangementKitError.prototype);\n }\n}\n\n// Represents the type of the class TransportStatusError and its children\nexport type TransportStatusErrorClassType = typeof TransportStatusError | typeof LockedDeviceError;\n\naddCustomErrorDeserializer(\"TransportStatusError\", e => new TransportStatusError(e.statusCode));\n","// biome-ignore-all lint: outside copy-paste, not worth fixing\n// ------------------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------------------\n// THIS IS SOME HORRIBLE CODE IMPORTED JUST\n// FOR THE SAKE OF NOT IMPORTING UGLY, WICKED, AND\n// BROKEN @ledgerhq/live-* LIBRARIES\n//\n// IT'S MEANT TO BE CONSIDERED AS A BLACK BOX\n// ------------------------------------------------------------------------------------------------\n// ------------------------------------------------------------------------------------------------\nimport {\n BluetoothRequired,\n CantOpenDevice,\n DeviceHalted,\n FirmwareOrAppUpdateRequired,\n TransportInterfaceNotAvailable,\n TransportStatusError,\n TransportWebUSBGestureRequired,\n} from \"@ledgerhq/errors\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { Observable, throwError, timer } from \"rxjs\";\nimport { catchError, mergeMap, retryWhen } from \"rxjs/operators\";\n\nconst initialErrorRemapping = (error: Error): Observable<never> =>\n throwError(\n error && error instanceof TransportStatusError && error.statusCode === 0x6faa\n ? new DeviceHalted(error.message)\n : error instanceof TransportStatusError && error.statusCode === 0x6b00\n ? new FirmwareOrAppUpdateRequired(error.message)\n : error,\n );\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst never = new Promise(() => {});\n\ntype Discovery = Observable<{\n type: \"add\" | \"remove\";\n id: string;\n name: string;\n}>;\n\nexport type TransportModule = {\n // unique transport name that identify the transport module\n id: string;\n // open a device by an id, this id must be unique across all modules\n // you can typically prefix it with `something|` that identify it globally\n // returns falsy if the transport module can't handle this id\n // here, open means we want to START doing something with the transport\n open: (id: string) => Promise<Transport> | null | undefined;\n // here, close means we want to STOP doing something with the transport\n close?: (transport: Transport, id: string) => Promise<void> | null | undefined;\n // disconnect/interrupt a device connection globally\n // returns falsy if the transport module can't handle this id\n disconnect: (id: string) => Promise<void> | null | undefined;\n // optional observable that allows to discover a transport\n discovery?: Discovery;\n};\n\nconst modules: TransportModule[] = [];\n\nexport const registerTransportModule = (module: TransportModule): void => {\n modules.push(module);\n};\n\nexport const close = (transport: Transport, deviceId: string): Promise<void> => {\n for (const m of modules) {\n const p = m.close?.(transport, deviceId);\n if (p) return p;\n }\n // fallback on an actual close\n return transport.close();\n};\n\nexport const open = (deviceId: string): Promise<Transport> => {\n for (const m of modules) {\n const p = m.open(deviceId);\n if (p) return p;\n }\n return Promise.reject(new Error(`Can't find handler to open ${deviceId}`));\n};\n\nconst transportFinally =\n (cleanup: () => Promise<void>) =>\n <T>(observable: Observable<T>): Observable<T> =>\n // @ts-expect-error typescript not checking against the instanceof\n Observable.create((o) => {\n let done = false;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const finalize = (): any => {\n if (done) return never;\n done = true;\n return cleanup();\n };\n\n const sub = observable.subscribe({\n next: (e) => o.next(e),\n complete: () => {\n void finalize().then(() => o.complete());\n },\n error: (e) => {\n void finalize().then(() => o.error(e));\n },\n });\n return () => {\n sub.unsubscribe();\n void finalize();\n };\n });\n\ntype AccessHook = () => () => void;\n\nconst accessHooks: AccessHook[] = [];\n\nconst deviceQueues = {};\n\nexport const withDevice =\n (deviceId: string) =>\n <T>(job: (t: Transport) => Observable<T>): Observable<T> =>\n new Observable((o) => {\n // @ts-expect-error typescript not checking against the instanceof\n let unsubscribed;\n // @ts-expect-error typescript not checking against the instanceof\n let sub;\n // @ts-expect-error typescript not checking against the instanceof\n const deviceQueue = deviceQueues[deviceId] ?? Promise.resolve();\n\n // @ts-expect-error typescript not checking against the instanceof\n const finalize = (transport, cleanups): Promise<void> =>\n close(transport, deviceId)\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n .catch(() => {})\n .then(() => {\n // @ts-expect-error typescript not checking against the instanceof\n cleanups.forEach((c) => c());\n });\n\n // when we'll finish all the current job, we'll call finish\n // @ts-expect-error typescript not checking against the instanceof\n let finish;\n // this new promise is the next exec queue\n // @ts-expect-error typescript not checking against the instanceof\n deviceQueues[deviceId] = new Promise((resolve) => {\n finish = resolve;\n });\n // for any new job, we'll now wait the exec queue to be available\n deviceQueue\n .then(() => open(deviceId)) // open the transport\n // @ts-expect-error typescript not checking against the instanceof\n .then(async (transport) => {\n // @ts-expect-error typescript not checking against the instanceof\n if (unsubscribed) {\n // it was unsubscribed prematurely\n // @ts-expect-error typescript not checking against the instanceof\n return finalize(transport, [finish]);\n }\n\n if (\n transport.requestConnectionPriority &&\n typeof transport.requestConnectionPriority === \"function\"\n ) {\n await transport.requestConnectionPriority(\"High\");\n }\n\n return transport;\n })\n // @ts-expect-error typescript not checking against the instanceof\n .catch((e) => {\n // @ts-expect-error typescript not checking against the instanceof\n finish();\n if (e instanceof BluetoothRequired) throw e;\n if (e instanceof TransportWebUSBGestureRequired) throw e;\n if (e instanceof TransportInterfaceNotAvailable) throw e;\n throw new CantOpenDevice(e.message);\n })\n // @ts-expect-error typescript not checking against the instanceof\n .then((transport) => {\n if (!transport) return;\n\n // @ts-expect-error typescript not checking against the instanceof\n if (unsubscribed) {\n // it was unsubscribed prematurely\n // @ts-expect-error typescript not checking against the instanceof\n return finalize(transport, [finish]);\n }\n\n const cleanups = accessHooks.map((hook) => hook());\n sub = job(transport) // $FlowFixMe\n .pipe(\n catchError(initialErrorRemapping),\n // $FlowFixMe\n transportFinally(() =>\n // @ts-expect-error typescript not checking against the instanceof\n finalize(transport, [...cleanups, finish]),\n ),\n )\n .subscribe(o);\n })\n // @ts-expect-error typescript not checking against the instanceof\n .catch((error) => o.error(error));\n return () => {\n unsubscribed = true;\n // @ts-expect-error typescript not checking against the instanceof\n if (sub) sub.unsubscribe();\n };\n });\n\nconst WITH_DEVICE_POLLING_DELAY = 500;\n\nexport const retryWhileErrors =\n (acceptError: (arg0: Error) => boolean) =>\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (attempts: Observable<any>): Observable<any> =>\n attempts.pipe(\n mergeMap((error) => {\n if (!acceptError(error)) {\n return throwError(error);\n }\n\n return timer(WITH_DEVICE_POLLING_DELAY);\n }),\n );\n\nexport const withDevicePolling =\n (deviceId: string) =>\n <T>(\n job: (arg0: Transport) => Observable<T>,\n acceptError: (arg0: Error) => boolean = () => false,\n ): Observable<T> =>\n withDevice(deviceId)(job).pipe(retryWhen(retryWhileErrors(acceptError)));\n","import { TransportStatusError } from \"@ledgerhq/errors\";\n\nexport const isTransportStatusError = (error: unknown): error is TransportStatusError => {\n return (\n error instanceof TransportStatusError ||\n (error instanceof Error && \"statusCode\" in error && error.message.startsWith(\"Ledger device:\"))\n );\n};\n\nconst CANCEL_STATUS_CODES = [\n 0x6985, // cancel on Ledger Blue\n\n // STAX\n 0xb00c, // cancel collect wk fragment\n 0xb00d, // cancel user registration\n 0xb010, // cancel review\n 0xb012, // cancel master seed generation\n 0xb013, // cancel login\n 0x5501, // cancel openApp\n];\n\nexport const isDeviceCancelError = (error: Error): boolean => {\n return isTransportStatusError(error) && CANCEL_STATUS_CODES.includes(error.statusCode);\n};\n"],"mappings":"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","names":["HwTransportErrorType"]}
package/lib/device.cjs CHANGED
@@ -3,11 +3,11 @@
3
3
 
4
4
 
5
5
 
6
- var _chunkEBMIZ52Hcjs = require('./chunk-EBMIZ52H.cjs');
6
+ var _chunkDRMYBKL3cjs = require('./chunk-DRMYBKL3.cjs');
7
7
 
8
8
 
9
9
 
10
10
 
11
11
 
12
- exports.createApiDevice = _chunkEBMIZ52Hcjs.createApiDevice; exports.isDeviceCancelError = _chunkEBMIZ52Hcjs.isDeviceCancelError; exports.isTransportStatusError = _chunkEBMIZ52Hcjs.isTransportStatusError; exports.registerTransportModule = _chunkEBMIZ52Hcjs.registerTransportModule;
12
+ exports.createApiDevice = _chunkDRMYBKL3cjs.createApiDevice; exports.isDeviceCancelError = _chunkDRMYBKL3cjs.isDeviceCancelError; exports.isTransportStatusError = _chunkDRMYBKL3cjs.isTransportStatusError; exports.registerTransportModule = _chunkDRMYBKL3cjs.registerTransportModule;
13
13
  //# sourceMappingURL=device.cjs.map
package/lib/device.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  isDeviceCancelError,
4
4
  isTransportStatusError,
5
5
  registerTransportModule
6
- } from "./chunk-XQ4BT4HB.js";
6
+ } from "./chunk-PFZIW6UP.js";
7
7
  export {
8
8
  createApiDevice,
9
9
  isDeviceCancelError,
package/lib/engine.cjs CHANGED
@@ -17,7 +17,7 @@ var _chunkLH4QQXUHcjs = require('./chunk-LH4QQXUH.cjs');
17
17
 
18
18
 
19
19
 
20
- var _chunkEBMIZ52Hcjs = require('./chunk-EBMIZ52H.cjs');
20
+ var _chunkDRMYBKL3cjs = require('./chunk-DRMYBKL3.cjs');
21
21
 
22
22
  // src/engine/index.ts
23
23
  var _invariant = require('invariant'); var _invariant2 = _interopRequireDefault(_invariant);
@@ -37,7 +37,7 @@ var splitChunks = (chunk, buffer) => {
37
37
  }
38
38
  return chunks;
39
39
  };
40
- var removeStatus = (result) => result.slice(0, result.length - _chunkEBMIZ52Hcjs.STATUS_LENGTH);
40
+ var removeStatus = (result) => result.slice(0, result.length - _chunkDRMYBKL3cjs.STATUS_LENGTH);
41
41
  var sendByChunk = async (transport, command, data, chunkSize = MAX_CHUNK_LENGTH) => {
42
42
  const chunks = splitChunks(chunkSize, data);
43
43
  let response = Buffer.from([]);
@@ -47,7 +47,7 @@ var sendByChunk = async (transport, command, data, chunkSize = MAX_CHUNK_LENGTH)
47
47
  apdu[2] = i && 128;
48
48
  response = await transport.send(apdu[0], apdu[1], apdu[2], apdu[3], chunk, [
49
49
  36864,
50
- ..._chunkEBMIZ52Hcjs.PAGINATED_STATUS
50
+ ..._chunkDRMYBKL3cjs.PAGINATED_STATUS
51
51
  ]);
52
52
  }
53
53
  return response;
@@ -89,16 +89,16 @@ var buildAttestation = (params) => {
89
89
  return toSend;
90
90
  };
91
91
  var genericRetryOnError = (err) => {
92
- if (err instanceof _chunkEBMIZ52Hcjs.LockedDeviceError) return true;
93
- if (_chunkEBMIZ52Hcjs.isTransportStatusError.call(void 0, err) && err.statusCode === 27913) return true;
94
- if (err instanceof _chunkEBMIZ52Hcjs.DisconnectedDevice) return true;
92
+ if (err instanceof _chunkDRMYBKL3cjs.LockedDeviceError) return true;
93
+ if (_chunkDRMYBKL3cjs.isTransportStatusError.call(void 0, err) && err.statusCode === 27913) return true;
94
+ if (err instanceof _chunkDRMYBKL3cjs.DisconnectedDevice) return true;
95
95
  return false;
96
96
  };
97
97
  function createRealDevice(options, logger) {
98
98
  const { transportId } = options;
99
99
  async function run(job, retryOnError = genericRetryOnError) {
100
100
  return _rxjs.lastValueFrom.call(void 0,
101
- _chunkEBMIZ52Hcjs.withDevicePolling.call(void 0, transportId)((transport) => _rxjs.from.call(void 0, job(transport)), retryOnError)
101
+ _chunkDRMYBKL3cjs.withDevicePolling.call(void 0, transportId)((transport) => _rxjs.from.call(void 0, job(transport)), retryOnError)
102
102
  );
103
103
  }
104
104
  const noRetry = () => false;
@@ -111,10 +111,10 @@ function createRealDevice(options, logger) {
111
111
  _nullishCoalesce(opts.retryOnError, () => ( alwaysRetry))
112
112
  );
113
113
  try {
114
- await getPublicKey(_chunkEBMIZ52Hcjs.PATHS.U2F, { secp256k1: true, retryOnError: noRetry });
114
+ await getPublicKey(_chunkDRMYBKL3cjs.PATHS.U2F, { secp256k1: true, retryOnError: noRetry });
115
115
  return { isAppOpened: true };
116
116
  } catch (err) {
117
- if (_chunkEBMIZ52Hcjs.isTransportStatusError.call(void 0, err) && genericRetryOnError(err)) {
117
+ if (_chunkDRMYBKL3cjs.isTransportStatusError.call(void 0, err) && genericRetryOnError(err)) {
118
118
  return { isAppOpened: false };
119
119
  }
120
120
  throw err;
@@ -145,18 +145,18 @@ function createRealDevice(options, logger) {
145
145
  );
146
146
  const pubKeyLength = response.readInt8(0);
147
147
  const pubKey = response.slice(1, pubKeyLength + 1).toString("hex").toUpperCase();
148
- const signature = response.slice(pubKeyLength + 1, response.length - _chunkEBMIZ52Hcjs.STATUS_LENGTH).toString("base64");
148
+ const signature = response.slice(pubKeyLength + 1, response.length - _chunkDRMYBKL3cjs.STATUS_LENGTH).toString("base64");
149
149
  return { pubKey, signature };
150
150
  };
151
151
  const device = {
152
152
  authenticate: async ({ challenge: { challenge, name, role, keyHandle }, workspaceName }) => {
153
153
  logger.info(`[device] Authenticate`);
154
154
  _invariant2.default.call(void 0, role !== "READ_ONLY_API_KEY", "Invalid role for authenticate: READ_ONLY_API_KEY");
155
- const applicationBuffer = Buffer.from(_chunkEBMIZ52Hcjs.APPID_VAULT_ADMINISTRATOR, "hex");
155
+ const applicationBuffer = Buffer.from(_chunkDRMYBKL3cjs.APPID_VAULT_ADMINISTRATOR, "hex");
156
156
  const nameBuffer = Buffer.from(name);
157
157
  const workspaceBuffer = Buffer.from(workspaceName);
158
158
  const keyHandleData = Buffer.concat([
159
- Buffer.from(_chunkEBMIZ52Hcjs.STR_ROLES[role], "hex"),
159
+ Buffer.from(_chunkDRMYBKL3cjs.STR_ROLES[role], "hex"),
160
160
  Buffer.from([nameBuffer.length]),
161
161
  nameBuffer,
162
162
  Buffer.from([workspaceBuffer.length]),
@@ -185,7 +185,7 @@ function createRealDevice(options, logger) {
185
185
  },
186
186
  generateSeedFragment: async () => {
187
187
  logger.info(`[device] generateSeedFragment`);
188
- const path = getPathFromPathString(_chunkEBMIZ52Hcjs.PATHS.KEY_MATERIAL);
188
+ const path = getPathFromPathString(_chunkDRMYBKL3cjs.PATHS.KEY_MATERIAL);
189
189
  const data = Buffer.concat([
190
190
  Buffer.from([path.length]),
191
191
  ...path.map((derivation) => {
@@ -199,7 +199,7 @@ function createRealDevice(options, logger) {
199
199
  },
200
200
  generateWrappingKeyFragment: async () => {
201
201
  logger.info(`[device] generateWrappingKeyFragment`);
202
- const path = getPathFromPathString(_chunkEBMIZ52Hcjs.PATHS.KEY_MATERIAL);
202
+ const path = getPathFromPathString(_chunkDRMYBKL3cjs.PATHS.KEY_MATERIAL);
203
203
  const data = Buffer.concat([
204
204
  Buffer.from([path.length]),
205
205
  ...path.map((derivation) => {
@@ -236,14 +236,14 @@ function createRealDevice(options, logger) {
236
236
  confidentialityKeySignature: sig.toString("hex")
237
237
  };
238
238
  },
239
- getConfidentialityPubKey: () => getPublicKey(_chunkEBMIZ52Hcjs.PATHS.CONFIDENTIALITY, { secp256k1: true }),
239
+ getConfidentialityPubKey: () => getPublicKey(_chunkDRMYBKL3cjs.PATHS.CONFIDENTIALITY, { secp256k1: true }),
240
240
  getDeviceUserId: async () => {
241
241
  logger.info(`[device] getDeviceUserId`);
242
242
  const response = await run((transport) => transport.send(224, 82, 0, 0));
243
243
  return removeStatus(response).toString("hex").toUpperCase();
244
244
  },
245
- getU2FPubKey: () => getPublicKey(_chunkEBMIZ52Hcjs.PATHS.U2F, { secp256k1: false }),
246
- getValidationPubKey: () => getPublicKey(_chunkEBMIZ52Hcjs.PATHS.VALIDATION, { secp256k1: true }),
245
+ getU2FPubKey: () => getPublicKey(_chunkDRMYBKL3cjs.PATHS.U2F, { secp256k1: false }),
246
+ getValidationPubKey: () => getPublicKey(_chunkDRMYBKL3cjs.PATHS.VALIDATION, { secp256k1: true }),
247
247
  hasPairing: async () => {
248
248
  logger.info(`[device] hasPairing`);
249
249
  const apdu = [224, 81, 0, 0, 181];
@@ -255,13 +255,13 @@ function createRealDevice(options, logger) {
255
255
  const res = await run((transport) => transport.send(224, 70, 0, 0));
256
256
  const pubKeyLength = res.readInt8(0);
257
257
  const pubKey = res.slice(1, pubKeyLength + 1).toString("hex").toUpperCase();
258
- const signature = res.slice(pubKeyLength + 1, res.length - _chunkEBMIZ52Hcjs.STATUS_LENGTH).toString("base64");
258
+ const signature = res.slice(pubKeyLength + 1, res.length - _chunkDRMYBKL3cjs.STATUS_LENGTH).toString("base64");
259
259
  return { pubKey, signature };
260
260
  },
261
261
  openSession: async (params) => {
262
262
  logger.info(`[device] openSession`);
263
263
  const { secureChannel } = params;
264
- const path = getPathFromPathString(_chunkEBMIZ52Hcjs.PATHS.CONFIDENTIALITY);
264
+ const path = getPathFromPathString(_chunkDRMYBKL3cjs.PATHS.CONFIDENTIALITY);
265
265
  const dataDerivation = Buffer.concat([
266
266
  Buffer.from([path.length]),
267
267
  ...path.map((derivation) => {
@@ -285,18 +285,18 @@ function createRealDevice(options, logger) {
285
285
  lengthAttestation.writeUInt16BE(attestation.length, 0);
286
286
  const data = Buffer.concat([dataDerivation, pubKey, lengthAttestation, attestation]);
287
287
  await run(
288
- (transport) => sendByChunk(transport, [224, 66, 0, _chunkEBMIZ52Hcjs.SCRIPT_IDS.INIT_SESSION], data)
288
+ (transport) => sendByChunk(transport, [224, 66, 0, _chunkDRMYBKL3cjs.SCRIPT_IDS.INIT_SESSION], data)
289
289
  );
290
290
  },
291
291
  register: async (params) => {
292
292
  const { challenge: strChallenge, u2fRegisterData: _, name, role } = params;
293
293
  const challenge = Buffer.from(strChallenge, "hex");
294
294
  _invariant2.default.call(void 0, challenge.length === 32, "challenge hex is expected to have 32 bytes");
295
- const applicationBuf = Buffer.from(_chunkEBMIZ52Hcjs.APPID_VAULT_ADMINISTRATOR, "hex");
295
+ const applicationBuf = Buffer.from(_chunkDRMYBKL3cjs.APPID_VAULT_ADMINISTRATOR, "hex");
296
296
  _invariant2.default.call(void 0, applicationBuf.length === 32, "application hex is expected to have 32 bytes");
297
297
  const userNameBuff = Buffer.from(name);
298
298
  const keyHandleData = Buffer.concat([
299
- Buffer.from(_chunkEBMIZ52Hcjs.STR_ROLES[role], "hex"),
299
+ Buffer.from(_chunkDRMYBKL3cjs.STR_ROLES[role], "hex"),
300
300
  Buffer.from([userNameBuff.length]),
301
301
  userNameBuff
302
302
  ]);
@@ -341,7 +341,7 @@ function createRealDevice(options, logger) {
341
341
  logger.info(`[device] startKKPatternAsResponder`);
342
342
  const data = buildAttestation(params);
343
343
  const bufWithStatus = await run(
344
- (transport) => sendByChunk(transport, [224, 76, 0, _chunkEBMIZ52Hcjs.SCRIPT_IDS.ACCOUNT_MANAGER_SESSION], data)
344
+ (transport) => sendByChunk(transport, [224, 76, 0, _chunkDRMYBKL3cjs.SCRIPT_IDS.ACCOUNT_MANAGER_SESSION], data)
345
345
  );
346
346
  const buffer = removeStatus(bufWithStatus);
347
347
  const dataLength = buffer.readInt8(0);
@@ -354,12 +354,12 @@ function createRealDevice(options, logger) {
354
354
  logger.info(`[device] startKPatternAsResponder`);
355
355
  const data = buildAttestation(params);
356
356
  await run(
357
- (transport) => sendByChunk(transport, [224, 73, 0, _chunkEBMIZ52Hcjs.SCRIPT_IDS.ACCOUNT_MANAGER_SESSION], data)
357
+ (transport) => sendByChunk(transport, [224, 73, 0, _chunkDRMYBKL3cjs.SCRIPT_IDS.ACCOUNT_MANAGER_SESSION], data)
358
358
  );
359
359
  },
360
360
  validateVaultOperation: async (params) => {
361
361
  logger.info(`[device] validateVaultOperation`);
362
- const path = getPathFromPathString(_chunkEBMIZ52Hcjs.PATHS.VALIDATION);
362
+ const path = getPathFromPathString(_chunkDRMYBKL3cjs.PATHS.VALIDATION);
363
363
  const paths = Buffer.concat([
364
364
  Buffer.from([path.length]),
365
365
  ...path.map((derivation) => {
@@ -381,10 +381,10 @@ function createRealDevice(options, logger) {
381
381
  const responseType = response.readInt8(0);
382
382
  let responseStatus = response.readUInt16BE(response.length - 2);
383
383
  switch (responseType) {
384
- case _chunkEBMIZ52Hcjs.STREAMING_NEXT_ACTION:
384
+ case _chunkDRMYBKL3cjs.STREAMING_NEXT_ACTION:
385
385
  nextActionId = response.readUIntBE(1, 2);
386
386
  break;
387
- case _chunkEBMIZ52Hcjs.STREAMING_RESPONSE:
387
+ case _chunkDRMYBKL3cjs.STREAMING_RESPONSE:
388
388
  finalResponse = response.slice(3, response.length - 2);
389
389
  while (responseStatus !== 36864) {
390
390
  {
@@ -511,7 +511,7 @@ function createEngine(options, logger) {
511
511
  baseUrl: options.baseUrl
512
512
  };
513
513
  const client = createClient(clientOptions);
514
- const apiDevice = _chunkEBMIZ52Hcjs.createApiDevice.call(void 0, options, logger);
514
+ const apiDevice = _chunkDRMYBKL3cjs.createApiDevice.call(void 0, options, logger);
515
515
  const base = {
516
516
  client,
517
517
  createClient: (overrides) => createClient({ ...clientOptions, ...overrides }),
package/lib/engine.js CHANGED
@@ -17,7 +17,7 @@ import {
17
17
  createApiDevice,
18
18
  isTransportStatusError,
19
19
  withDevicePolling
20
- } from "./chunk-XQ4BT4HB.js";
20
+ } from "./chunk-PFZIW6UP.js";
21
21
 
22
22
  // src/engine/index.ts
23
23
  import invariant2 from "invariant";