@cardano-sdk/key-management 0.5.3-patch.0 → 0.7.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.
Files changed (57) hide show
  1. package/dist/cjs/KeyAgentBase.d.ts +1 -1
  2. package/dist/cjs/KeyAgentBase.d.ts.map +1 -1
  3. package/dist/cjs/KeyAgentBase.js +13 -6
  4. package/dist/cjs/KeyAgentBase.js.map +1 -1
  5. package/dist/cjs/cip8/cip30signData.d.ts.map +1 -1
  6. package/dist/cjs/cip8/cip30signData.js +5 -2
  7. package/dist/cjs/cip8/cip30signData.js.map +1 -1
  8. package/dist/cjs/index.d.ts +1 -3
  9. package/dist/cjs/index.d.ts.map +1 -1
  10. package/dist/cjs/index.js +1 -4
  11. package/dist/cjs/index.js.map +1 -1
  12. package/dist/cjs/tsconfig.tsbuildinfo +1 -1
  13. package/dist/cjs/types.d.ts +3 -4
  14. package/dist/cjs/types.d.ts.map +1 -1
  15. package/dist/cjs/types.js.map +1 -1
  16. package/dist/cjs/util/createAsyncKeyAgent.d.ts.map +1 -1
  17. package/dist/cjs/util/createAsyncKeyAgent.js +7 -3
  18. package/dist/cjs/util/createAsyncKeyAgent.js.map +1 -1
  19. package/dist/cjs/util/mapHardwareSigningData.js +1 -1
  20. package/dist/cjs/util/mapHardwareSigningData.js.map +1 -1
  21. package/dist/esm/KeyAgentBase.d.ts +1 -1
  22. package/dist/esm/KeyAgentBase.d.ts.map +1 -1
  23. package/dist/esm/KeyAgentBase.js +13 -6
  24. package/dist/esm/KeyAgentBase.js.map +1 -1
  25. package/dist/esm/cip8/cip30signData.d.ts.map +1 -1
  26. package/dist/esm/cip8/cip30signData.js +5 -2
  27. package/dist/esm/cip8/cip30signData.js.map +1 -1
  28. package/dist/esm/index.d.ts +1 -3
  29. package/dist/esm/index.d.ts.map +1 -1
  30. package/dist/esm/index.js +1 -3
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/tsconfig.tsbuildinfo +1 -1
  33. package/dist/esm/types.d.ts +3 -4
  34. package/dist/esm/types.d.ts.map +1 -1
  35. package/dist/esm/types.js.map +1 -1
  36. package/dist/esm/util/createAsyncKeyAgent.d.ts.map +1 -1
  37. package/dist/esm/util/createAsyncKeyAgent.js +7 -3
  38. package/dist/esm/util/createAsyncKeyAgent.js.map +1 -1
  39. package/dist/esm/util/mapHardwareSigningData.js +1 -1
  40. package/dist/esm/util/mapHardwareSigningData.js.map +1 -1
  41. package/package.json +7 -10
  42. package/dist/cjs/LedgerKeyAgent.d.ts +0 -42
  43. package/dist/cjs/LedgerKeyAgent.d.ts.map +0 -1
  44. package/dist/cjs/LedgerKeyAgent.js +0 -214
  45. package/dist/cjs/LedgerKeyAgent.js.map +0 -1
  46. package/dist/cjs/restoreKeyAgent.d.ts +0 -9
  47. package/dist/cjs/restoreKeyAgent.d.ts.map +0 -1
  48. package/dist/cjs/restoreKeyAgent.js +0 -54
  49. package/dist/cjs/restoreKeyAgent.js.map +0 -1
  50. package/dist/esm/LedgerKeyAgent.d.ts +0 -42
  51. package/dist/esm/LedgerKeyAgent.d.ts.map +0 -1
  52. package/dist/esm/LedgerKeyAgent.js +0 -184
  53. package/dist/esm/LedgerKeyAgent.js.map +0 -1
  54. package/dist/esm/restoreKeyAgent.d.ts +0 -9
  55. package/dist/esm/restoreKeyAgent.d.ts.map +0 -1
  56. package/dist/esm/restoreKeyAgent.js +0 -50
  57. package/dist/esm/restoreKeyAgent.js.map +0 -1
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.restoreKeyAgent = void 0;
4
- const core_1 = require("@cardano-sdk/core");
5
- const types_1 = require("./types");
6
- const InMemoryKeyAgent_1 = require("./InMemoryKeyAgent");
7
- const errors_1 = require("./errors");
8
- const LedgerKeyAgent_1 = require("./LedgerKeyAgent");
9
- const util_1 = require("./util");
10
- const TrezorKeyAgent_1 = require("./TrezorKeyAgent");
11
- const migrateSerializableData = (data, logger) => ({
12
- ...data,
13
- chainId: data.chainId ||
14
- (() => {
15
- logger.info('Migrating serializable data due to missing "chainId"');
16
- return {
17
- ...data,
18
- chainId: data.networkId === core_1.Cardano.NetworkId.Mainnet
19
- ? core_1.Cardano.ChainIds.Mainnet
20
- : (() => {
21
- logger.warn('Assuming "Preprod" network is used');
22
- return core_1.Cardano.ChainIds.Preprod;
23
- })()
24
- };
25
- })(),
26
- knownAddresses: data.knownAddresses.map((address) => ({
27
- ...address,
28
- stakeKeyDerivationPath: address.stakeKeyDerivationPath || util_1.STAKE_KEY_DERIVATION_PATH
29
- }))
30
- });
31
- async function restoreKeyAgent(dataArg, dependencies, getPassphrase) {
32
- const data = migrateSerializableData(dataArg, dependencies.logger);
33
- switch (data.__typename) {
34
- case types_1.KeyAgentType.InMemory: {
35
- if (!data.encryptedRootPrivateKeyBytes || data.encryptedRootPrivateKeyBytes.length !== 156) {
36
- throw new errors_1.InvalidSerializableDataError('Expected encrypted root private key in "agentData" for InMemoryKeyAgent"');
37
- }
38
- if (!getPassphrase) {
39
- throw new errors_1.InvalidSerializableDataError('Expected "getPassphrase" in RestoreKeyAgentProps for InMemoryKeyAgent"');
40
- }
41
- return new InMemoryKeyAgent_1.InMemoryKeyAgent({ ...data, getPassphrase }, dependencies);
42
- }
43
- case types_1.KeyAgentType.Ledger: {
44
- return new LedgerKeyAgent_1.LedgerKeyAgent(data, dependencies);
45
- }
46
- case types_1.KeyAgentType.Trezor: {
47
- return new TrezorKeyAgent_1.TrezorKeyAgent(data, dependencies);
48
- }
49
- default:
50
- throw new errors_1.InvalidSerializableDataError(`Restoring key agent of __typename '${data.__typename}' is not implemented`);
51
- }
52
- }
53
- exports.restoreKeyAgent = restoreKeyAgent;
54
- //# sourceMappingURL=restoreKeyAgent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restoreKeyAgent.js","sourceRoot":"","sources":["../../src/restoreKeyAgent.ts"],"names":[],"mappings":";;;AAEA,4CAA4C;AAC5C,mCAUiB;AACjB,yDAAsD;AACtD,qCAAwD;AACxD,qDAAkD;AAElD,iCAAmD;AACnD,qDAAkD;AAWlD,MAAM,uBAAuB,GAAG,CAAqC,IAAS,EAAE,MAAc,EAAK,EAAE,CAAC,CAAC;IACrG,GAAG,IAAI;IACP,OAAO,EACL,IAAI,CAAC,OAAO;QACZ,CAAC,GAAG,EAAE;YACJ,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO;gBACL,GAAG,IAAI;gBACP,OAAO,EACL,IAAI,CAAC,SAAS,KAAK,cAAO,CAAC,SAAS,CAAC,OAAO;oBAC1C,CAAC,CAAC,cAAO,CAAC,QAAQ,CAAC,OAAO;oBAC1B,CAAC,CAAC,CAAC,GAAG,EAAE;wBACJ,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;wBAClD,OAAO,cAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAClC,CAAC,CAAC,EAAE;aACX,CAAC;QACJ,CAAC,CAAC,EAAE;IACN,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAuB,EAAE,EAAE,CAAC,CAAC;QACpE,GAAG,OAAO;QACV,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,gCAAyB;KACpF,CAAC,CAAC;CACJ,CAAC,CAAC;AAyBI,KAAK,UAAU,eAAe,CACnC,OAAU,EACV,YAAkC,EAClC,aAA6B;IAG7B,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACnE,QAAQ,IAAI,CAAC,UAAU,EAAE;QACvB,KAAK,oBAAY,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,4BAA4B,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC1F,MAAM,IAAI,qCAA4B,CACpC,0EAA0E,CAC3E,CAAC;aACH;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,MAAM,IAAI,qCAA4B,CACpC,wEAAwE,CACzE,CAAC;aACH;YACD,OAAO,IAAI,mCAAgB,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,EAAE,YAAY,CAAC,CAAC;SACvE;QACD,KAAK,oBAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,IAAI,+BAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SAC/C;QACD,KAAK,oBAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,IAAI,+BAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SAC/C;QACD;YACE,MAAM,IAAI,qCAA4B,CAEpC,sCAAsC,IAAI,CAAC,UAAU,sBAAsB,CAC5E,CAAC;KACL;AACH,CAAC;AAjCD,0CAiCC"}
@@ -1,42 +0,0 @@
1
- import * as Crypto from '@cardano-sdk/crypto';
2
- import { Cardano } from '@cardano-sdk/core';
3
- import { CommunicationType, KeyAgentDependencies, LedgerTransportType, SerializableLedgerKeyAgentData, SignBlobResult } from './types';
4
- import { KeyAgentBase } from './KeyAgentBase';
5
- import LedgerConnection, { GetVersionResponse } from '@cardano-foundation/ledgerjs-hw-app-cardano';
6
- import type LedgerTransport from '@ledgerhq/hw-transport';
7
- export interface LedgerKeyAgentProps extends Omit<SerializableLedgerKeyAgentData, '__typename'> {
8
- deviceConnection?: LedgerConnection;
9
- }
10
- export interface CreateLedgerKeyAgentProps {
11
- chainId: Cardano.ChainId;
12
- accountIndex?: number;
13
- communicationType: CommunicationType;
14
- deviceConnection?: LedgerConnection | null;
15
- }
16
- export interface GetLedgerXpubProps {
17
- deviceConnection?: LedgerConnection;
18
- communicationType: CommunicationType;
19
- accountIndex: number;
20
- }
21
- export interface CreateLedgerTransportProps {
22
- communicationType: CommunicationType;
23
- activeTransport?: LedgerTransportType;
24
- devicePath?: string;
25
- }
26
- export declare class LedgerKeyAgent extends KeyAgentBase {
27
- #private;
28
- readonly deviceConnection?: LedgerConnection;
29
- constructor({ deviceConnection, ...serializableData }: LedgerKeyAgentProps, dependencies: KeyAgentDependencies);
30
- static getHidDeviceList(communicationType: CommunicationType): Promise<string[]>;
31
- static createTransport({ communicationType, activeTransport, devicePath }: CreateLedgerTransportProps): Promise<LedgerTransportType>;
32
- static createDeviceConnection(activeTransport: LedgerTransport): Promise<LedgerConnection>;
33
- static establishDeviceConnection(communicationType: CommunicationType, devicePath?: string): Promise<LedgerConnection>;
34
- static checkDeviceConnection(communicationType: CommunicationType, deviceConnection?: LedgerConnection): Promise<LedgerConnection>;
35
- static getXpub({ deviceConnection, communicationType, accountIndex }: GetLedgerXpubProps): Promise<Crypto.Bip32PublicKeyHex>;
36
- static getAppVersion(communicationType: CommunicationType, deviceConnection?: LedgerConnection): Promise<GetVersionResponse>;
37
- static createWithDevice({ chainId, accountIndex, communicationType, deviceConnection }: CreateLedgerKeyAgentProps, dependencies: KeyAgentDependencies): Promise<LedgerKeyAgent>;
38
- signTransaction({ body, hash }: Cardano.TxBodyWithHash): Promise<Cardano.Signatures>;
39
- signBlob(): Promise<SignBlobResult>;
40
- exportRootPrivateKey(): Promise<Crypto.Bip32PrivateKeyHex>;
41
- }
42
- //# sourceMappingURL=LedgerKeyAgent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LedgerKeyAgent.d.ts","sourceRoot":"","sources":["../../src/LedgerKeyAgent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAkC,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAGL,iBAAiB,EACjB,oBAAoB,EAEpB,mBAAmB,EACnB,8BAA8B,EAC9B,cAAc,EACf,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAI9C,OAAO,gBAAgB,EAAE,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AAGnG,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAE1D,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,8BAA8B,EAAE,YAAY,CAAC;IAC7F,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,eAAe,CAAC,EAAE,mBAAmB,CAAC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,qBAAa,cAAe,SAAQ,YAAY;;IAC9C,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;gBAGjC,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,EAAE,mBAAmB,EAAE,YAAY,EAAE,oBAAoB;WASjG,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;WAWzE,eAAe,CAAC,EAC3B,iBAAiB,EACjB,eAAe,EACf,UAAe,EAChB,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;WAgB/C,sBAAsB,CAAC,eAAe,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;WAcnF,yBAAyB,CACpC,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,gBAAgB,CAAC;WA+Bf,qBAAqB,CAChC,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,gBAAgB,CAAC;WAmBf,OAAO,CAAC,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACb,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;WAoB5C,aAAa,CACxB,iBAAiB,EAAE,iBAAiB,EACpC,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,kBAAkB,CAAC;WASjB,gBAAgB,CAC3B,EAAE,OAAO,EAAE,YAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,yBAAyB,EAC7F,YAAY,EAAE,oBAAoB;IA0B9B,eAAe,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC;IAyCpF,QAAQ,IAAI,OAAO,CAAC,cAAc,CAAC;IAInC,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC,kBAAkB,CAAC;CAGjE"}
@@ -1,184 +0,0 @@
1
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
2
- if (kind === "m") throw new TypeError("Private method is not writable");
3
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
4
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
5
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
6
- };
7
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
8
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
9
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
10
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
11
- };
12
- var _LedgerKeyAgent_communicationType;
13
- import * as Crypto from '@cardano-sdk/crypto';
14
- import { AuthenticationError, HwMappingError, TransportError } from './errors';
15
- import { NotImplementedError, coreToCml } from '@cardano-sdk/core';
16
- import { CardanoKeyConst, Cip1852PathLevelIndexes, CommunicationType, KeyAgentType } from './types';
17
- import { KeyAgentBase } from './KeyAgentBase';
18
- import { ManagedFreeableScope } from '@cardano-sdk/util';
19
- import { str_to_path } from '@cardano-foundation/ledgerjs-hw-app-cardano/dist/utils/address';
20
- import { txToLedger } from './util';
21
- import LedgerConnection from '@cardano-foundation/ledgerjs-hw-app-cardano';
22
- import TransportNodeHid from '@ledgerhq/hw-transport-node-hid-noevents';
23
- import TransportWebHID from '@ledgerhq/hw-transport-webhid';
24
- const transportTypedError = (error) => new AuthenticationError('Ledger transport failed', new TransportError('Ledger transport failed', error));
25
- export class LedgerKeyAgent extends KeyAgentBase {
26
- constructor({ deviceConnection, ...serializableData }, dependencies) {
27
- super({ ...serializableData, __typename: KeyAgentType.Ledger }, dependencies);
28
- _LedgerKeyAgent_communicationType.set(this, void 0);
29
- this.deviceConnection = deviceConnection;
30
- __classPrivateFieldSet(this, _LedgerKeyAgent_communicationType, serializableData.communicationType, "f");
31
- }
32
- static async getHidDeviceList(communicationType) {
33
- try {
34
- return communicationType === CommunicationType.Node ? TransportNodeHid.list() : TransportWebHID.list();
35
- }
36
- catch (error) {
37
- throw new TransportError('Cannot fetch device list', error);
38
- }
39
- }
40
- static async createTransport({ communicationType, activeTransport, devicePath = '' }) {
41
- try {
42
- if (communicationType === CommunicationType.Node) {
43
- return await TransportNodeHid.open(devicePath);
44
- }
45
- return await (activeTransport && activeTransport instanceof TransportWebHID
46
- ? TransportWebHID.open(activeTransport.device)
47
- : TransportWebHID.request());
48
- }
49
- catch (error) {
50
- throw new TransportError('Creating transport failed', error);
51
- }
52
- }
53
- static async createDeviceConnection(activeTransport) {
54
- try {
55
- const deviceConnection = new LedgerConnection(activeTransport);
56
- await deviceConnection.getVersion();
57
- return deviceConnection;
58
- }
59
- catch (error) {
60
- throw new TransportError('Cannot communicate with Ledger Cardano App', error);
61
- }
62
- }
63
- static async establishDeviceConnection(communicationType, devicePath) {
64
- let transport;
65
- try {
66
- transport = await LedgerKeyAgent.createTransport({ communicationType, devicePath });
67
- if (!transport || !transport.deviceModel) {
68
- throw new TransportError('Missing transport');
69
- }
70
- const isSupportedLedgerModel = transport.deviceModel.id === 'nanoS' ||
71
- transport.deviceModel.id === 'nanoX' ||
72
- transport.deviceModel.id === 'nanoSP';
73
- if (!isSupportedLedgerModel) {
74
- throw new TransportError(`Ledger device model: "${transport.deviceModel.id}" is not supported`);
75
- }
76
- return await LedgerKeyAgent.createDeviceConnection(transport);
77
- }
78
- catch (error) {
79
- if (error.innerError.message.includes('cannot open device with path')) {
80
- throw new TransportError('Connection already established', error);
81
- }
82
- if (transport) {
83
- transport.close();
84
- }
85
- throw new TransportError('Establishing device connection failed', error);
86
- }
87
- }
88
- static async checkDeviceConnection(communicationType, deviceConnection) {
89
- try {
90
- if (!deviceConnection) {
91
- return await LedgerKeyAgent.establishDeviceConnection(communicationType);
92
- }
93
- return await LedgerKeyAgent.createDeviceConnection(deviceConnection.transport);
94
- }
95
- catch (error) {
96
- if (error.name === 'DisconnectedDeviceDuringOperation') {
97
- return await LedgerKeyAgent.establishDeviceConnection(communicationType);
98
- }
99
- throw error;
100
- }
101
- }
102
- static async getXpub({ deviceConnection, communicationType, accountIndex }) {
103
- try {
104
- const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
105
- const derivationPath = `${CardanoKeyConst.PURPOSE}'/${CardanoKeyConst.COIN_TYPE}'/${accountIndex}'`;
106
- const extendedPublicKey = await recoveredDeviceConnection.getExtendedPublicKey({
107
- path: str_to_path(derivationPath)
108
- });
109
- const xPubHex = `${extendedPublicKey.publicKeyHex}${extendedPublicKey.chainCodeHex}`;
110
- return Crypto.Bip32PublicKeyHex(xPubHex);
111
- }
112
- catch (error) {
113
- if (error.code === 28169) {
114
- throw new AuthenticationError('Failed to export extended account public key', error);
115
- }
116
- throw transportTypedError(error);
117
- }
118
- }
119
- static async getAppVersion(communicationType, deviceConnection) {
120
- const recoveredDeviceConnection = await LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection);
121
- return await recoveredDeviceConnection.getVersion();
122
- }
123
- static async createWithDevice({ chainId, accountIndex = 0, communicationType, deviceConnection }, dependencies) {
124
- const deviceListPaths = await LedgerKeyAgent.getHidDeviceList(communicationType);
125
- const activeDeviceConnection = await (deviceConnection
126
- ? LedgerKeyAgent.checkDeviceConnection(communicationType, deviceConnection)
127
- : LedgerKeyAgent.establishDeviceConnection(communicationType, deviceListPaths[0]));
128
- const extendedAccountPublicKey = await LedgerKeyAgent.getXpub({
129
- accountIndex,
130
- communicationType,
131
- deviceConnection: activeDeviceConnection
132
- });
133
- return new LedgerKeyAgent({
134
- accountIndex,
135
- chainId,
136
- communicationType,
137
- deviceConnection: activeDeviceConnection,
138
- extendedAccountPublicKey,
139
- knownAddresses: []
140
- }, dependencies);
141
- }
142
- async signTransaction({ body, hash }) {
143
- const scope = new ManagedFreeableScope();
144
- try {
145
- const cslTxBody = coreToCml.txBody(scope, body);
146
- const ledgerTxData = await txToLedger({
147
- chainId: this.chainId,
148
- cslTxBody,
149
- inputResolver: this.inputResolver,
150
- knownAddresses: this.knownAddresses
151
- });
152
- const deviceConnection = await LedgerKeyAgent.checkDeviceConnection(__classPrivateFieldGet(this, _LedgerKeyAgent_communicationType, "f"), this.deviceConnection);
153
- const result = await deviceConnection.signTransaction(ledgerTxData);
154
- if (result.txHashHex !== hash) {
155
- throw new HwMappingError('Ledger computed a different transaction id');
156
- }
157
- return new Map(await Promise.all(result.witnesses.map(async (witness) => {
158
- const publicKey = await this.derivePublicKey({
159
- index: witness.path[Cip1852PathLevelIndexes.INDEX],
160
- role: witness.path[Cip1852PathLevelIndexes.ROLE]
161
- });
162
- const signature = Crypto.Ed25519SignatureHex(witness.witnessSignatureHex);
163
- return [publicKey, signature];
164
- })));
165
- }
166
- catch (error) {
167
- if (error.code === 28169) {
168
- throw new AuthenticationError('Transaction signing aborted', error);
169
- }
170
- throw transportTypedError(error);
171
- }
172
- finally {
173
- scope.dispose();
174
- }
175
- }
176
- async signBlob() {
177
- throw new NotImplementedError('signBlob');
178
- }
179
- async exportRootPrivateKey() {
180
- throw new NotImplementedError('Operation not supported!');
181
- }
182
- }
183
- _LedgerKeyAgent_communicationType = new WeakMap();
184
- //# sourceMappingURL=LedgerKeyAgent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LedgerKeyAgent.js","sourceRoot":"","sources":["../../src/LedgerKeyAgent.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { GetPassphrase, KeyAgent, KeyAgentDependencies, SerializableInMemoryKeyAgentData, SerializableKeyAgentData, SerializableLedgerKeyAgentData, SerializableTrezorKeyAgentData } from './types';
2
- export interface RestoreInMemoryKeyAgentProps {
3
- getPassphrase?: GetPassphrase;
4
- }
5
- export declare function restoreKeyAgent(data: SerializableInMemoryKeyAgentData, dependencies: KeyAgentDependencies, getPassphrase: GetPassphrase): Promise<KeyAgent>;
6
- export declare function restoreKeyAgent(data: SerializableKeyAgentData, dependencies: KeyAgentDependencies, getPassphrase?: GetPassphrase): Promise<KeyAgent>;
7
- export declare function restoreKeyAgent(data: SerializableLedgerKeyAgentData, dependencies: KeyAgentDependencies): Promise<KeyAgent>;
8
- export declare function restoreKeyAgent(data: SerializableTrezorKeyAgentData, dependencies: KeyAgentDependencies): Promise<KeyAgent>;
9
- //# sourceMappingURL=restoreKeyAgent.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restoreKeyAgent.d.ts","sourceRoot":"","sources":["../../src/restoreKeyAgent.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EAEb,QAAQ,EACR,oBAAoB,EAEpB,gCAAgC,EAChC,wBAAwB,EACxB,8BAA8B,EAC9B,8BAA8B,EAC/B,MAAM,SAAS,CAAC;AASjB,MAAM,WAAW,4BAA4B;IAI3C,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AA0BD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gCAAgC,EACtC,YAAY,EAAE,oBAAoB,EAClC,aAAa,EAAE,aAAa,GAC3B,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrB,wBAAgB,eAAe,CAC7B,IAAI,EAAE,wBAAwB,EAC9B,YAAY,EAAE,oBAAoB,EAClC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrB,wBAAgB,eAAe,CAC7B,IAAI,EAAE,8BAA8B,EACpC,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACrB,wBAAgB,eAAe,CAC7B,IAAI,EAAE,8BAA8B,EACpC,YAAY,EAAE,oBAAoB,GACjC,OAAO,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,50 +0,0 @@
1
- import { Cardano } from '@cardano-sdk/core';
2
- import { KeyAgentType } from './types';
3
- import { InMemoryKeyAgent } from './InMemoryKeyAgent';
4
- import { InvalidSerializableDataError } from './errors';
5
- import { LedgerKeyAgent } from './LedgerKeyAgent';
6
- import { STAKE_KEY_DERIVATION_PATH } from './util';
7
- import { TrezorKeyAgent } from './TrezorKeyAgent';
8
- const migrateSerializableData = (data, logger) => ({
9
- ...data,
10
- chainId: data.chainId ||
11
- (() => {
12
- logger.info('Migrating serializable data due to missing "chainId"');
13
- return {
14
- ...data,
15
- chainId: data.networkId === Cardano.NetworkId.Mainnet
16
- ? Cardano.ChainIds.Mainnet
17
- : (() => {
18
- logger.warn('Assuming "Preprod" network is used');
19
- return Cardano.ChainIds.Preprod;
20
- })()
21
- };
22
- })(),
23
- knownAddresses: data.knownAddresses.map((address) => ({
24
- ...address,
25
- stakeKeyDerivationPath: address.stakeKeyDerivationPath || STAKE_KEY_DERIVATION_PATH
26
- }))
27
- });
28
- export async function restoreKeyAgent(dataArg, dependencies, getPassphrase) {
29
- const data = migrateSerializableData(dataArg, dependencies.logger);
30
- switch (data.__typename) {
31
- case KeyAgentType.InMemory: {
32
- if (!data.encryptedRootPrivateKeyBytes || data.encryptedRootPrivateKeyBytes.length !== 156) {
33
- throw new InvalidSerializableDataError('Expected encrypted root private key in "agentData" for InMemoryKeyAgent"');
34
- }
35
- if (!getPassphrase) {
36
- throw new InvalidSerializableDataError('Expected "getPassphrase" in RestoreKeyAgentProps for InMemoryKeyAgent"');
37
- }
38
- return new InMemoryKeyAgent({ ...data, getPassphrase }, dependencies);
39
- }
40
- case KeyAgentType.Ledger: {
41
- return new LedgerKeyAgent(data, dependencies);
42
- }
43
- case KeyAgentType.Trezor: {
44
- return new TrezorKeyAgent(data, dependencies);
45
- }
46
- default:
47
- throw new InvalidSerializableDataError(`Restoring key agent of __typename '${data.__typename}' is not implemented`);
48
- }
49
- }
50
- //# sourceMappingURL=restoreKeyAgent.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"restoreKeyAgent.js","sourceRoot":"","sources":["../../src/restoreKeyAgent.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAKL,YAAY,EAKb,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,4BAA4B,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,yBAAyB,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAWlD,MAAM,uBAAuB,GAAG,CAAqC,IAAS,EAAE,MAAc,EAAK,EAAE,CAAC,CAAC;IACrG,GAAG,IAAI;IACP,OAAO,EACL,IAAI,CAAC,OAAO;QACZ,CAAC,GAAG,EAAE;YACJ,MAAM,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;YACpE,OAAO;gBACL,GAAG,IAAI;gBACP,OAAO,EACL,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,OAAO;oBAC1C,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO;oBAC1B,CAAC,CAAC,CAAC,GAAG,EAAE;wBACJ,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;wBAClD,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAClC,CAAC,CAAC,EAAE;aACX,CAAC;QACJ,CAAC,CAAC,EAAE;IACN,cAAc,EAAE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,OAAuB,EAAE,EAAE,CAAC,CAAC;QACpE,GAAG,OAAO;QACV,sBAAsB,EAAE,OAAO,CAAC,sBAAsB,IAAI,yBAAyB;KACpF,CAAC,CAAC;CACJ,CAAC,CAAC;AAyBH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAU,EACV,YAAkC,EAClC,aAA6B;IAG7B,MAAM,IAAI,GAAG,uBAAuB,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACnE,QAAQ,IAAI,CAAC,UAAU,EAAE;QACvB,KAAK,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,4BAA4B,IAAI,IAAI,CAAC,4BAA4B,CAAC,MAAM,KAAK,GAAG,EAAE;gBAC1F,MAAM,IAAI,4BAA4B,CACpC,0EAA0E,CAC3E,CAAC;aACH;YACD,IAAI,CAAC,aAAa,EAAE;gBAClB,MAAM,IAAI,4BAA4B,CACpC,wEAAwE,CACzE,CAAC;aACH;YACD,OAAO,IAAI,gBAAgB,CAAC,EAAE,GAAG,IAAI,EAAE,aAAa,EAAE,EAAE,YAAY,CAAC,CAAC;SACvE;QACD,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SAC/C;QACD,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC;YACxB,OAAO,IAAI,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SAC/C;QACD;YACE,MAAM,IAAI,4BAA4B,CAEpC,sCAAsC,IAAI,CAAC,UAAU,sBAAsB,CAC5E,CAAC;KACL;AACH,CAAC"}