Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | 42x 42x 42x 42x 42x 1x 1x 1x 1x 42x 6x 6x 3x 3x 1x 2x 1x 1x 1x | /* eslint-disable func-style */
/* eslint-disable @typescript-eslint/ban-ts-comment */
import { Cardano } from '@cardano-sdk/core';
import {
GetPassphrase,
InMemoryKeyAgent,
KeyAgent,
KeyAgentDependencies,
KeyAgentType,
SerializableInMemoryKeyAgentData,
SerializableKeyAgentData,
SerializableLedgerKeyAgentData,
SerializableTrezorKeyAgentData,
errors
} from '@cardano-sdk/key-management';
import { LedgerKeyAgent } from '@cardano-sdk/hardware-ledger';
import { Logger } from 'ts-log';
import { TrezorKeyAgent } from '@cardano-sdk/hardware-trezor';
// TODO: use this type as 2nd parameter of restoreKeyAgent
export interface RestoreInMemoryKeyAgentProps {
/** Required for InMemoryKeyAgent */
getPassphrase?: GetPassphrase;
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const migrateSerializableData = <T extends SerializableKeyAgentData>(data: any, logger: Logger): T => ({
...data,
chainId:
data.chainId ||
(() => {
logger.info('Migrating serializable data due to missing "chainId"');
return {
...data,
chainId:
data.networkId === Cardano.NetworkId.Mainnet
? Cardano.ChainIds.Mainnet
: (() => {
logger.warn('Assuming "Preprod" network is used');
return Cardano.ChainIds.Preprod;
})()
};
})()
});
export function restoreKeyAgent(
data: SerializableInMemoryKeyAgentData,
dependencies: KeyAgentDependencies,
getPassphrase: GetPassphrase
): Promise<KeyAgent>;
export function restoreKeyAgent(
data: SerializableKeyAgentData,
dependencies: KeyAgentDependencies,
getPassphrase?: GetPassphrase
): Promise<KeyAgent>;
export function restoreKeyAgent(
data: SerializableLedgerKeyAgentData,
dependencies: KeyAgentDependencies
): Promise<KeyAgent>;
export function restoreKeyAgent(
data: SerializableTrezorKeyAgentData,
dependencies: KeyAgentDependencies
): Promise<KeyAgent>;
/**
* Restore key agent from serializable data
*
* @throws InvalidSerializableDataError, AuthenticationError
*/
export async function restoreKeyAgent<T extends SerializableKeyAgentData>(
dataArg: T,
dependencies: KeyAgentDependencies,
getPassphrase?: GetPassphrase
): Promise<KeyAgent> {
// migrateSerializableData
const data = migrateSerializableData(dataArg, dependencies.logger);
switch (data.__typename) {
case KeyAgentType.InMemory: {
Iif (!data.encryptedRootPrivateKeyBytes || data.encryptedRootPrivateKeyBytes.length !== 156) {
throw new errors.InvalidSerializableDataError(
'Expected encrypted root private key in "agentData" for InMemoryKeyAgent"'
);
}
if (!getPassphrase) {
throw new errors.InvalidSerializableDataError(
'Expected "getPassphrase" in RestoreKeyAgentProps for InMemoryKeyAgent"'
);
}
return new InMemoryKeyAgent({ ...data, getPassphrase }, dependencies);
}
case KeyAgentType.Ledger: {
return new LedgerKeyAgent(data, dependencies);
}
case KeyAgentType.Trezor: {
return new TrezorKeyAgent(data, dependencies);
}
default:
throw new errors.InvalidSerializableDataError(
// @ts-ignore
`Restoring key agent of __typename '${data.__typename}' is not implemented`
);
}
}
|