|
| 1 | +import { AccountId, AnyBip32Wallet, WalletType } from '../types'; |
| 2 | +import { Cardano, Serialization, TxCBOR } from '@cardano-sdk/core'; |
| 3 | +import { Cip30DataSignature, Origin } from '@cardano-sdk/dapp-connector'; |
| 4 | +import { Observable } from 'rxjs'; |
| 5 | +import { SignTransactionOptions, cip8 } from '@cardano-sdk/key-management'; |
| 6 | + |
| 7 | +type RequestBase<WalletMetadata extends {}> = { |
| 8 | + origin: Origin; |
| 9 | + wallet: AnyBip32Wallet<WalletMetadata>; |
| 10 | + reject(reason: string): Promise<void>; |
| 11 | +}; |
| 12 | + |
| 13 | +type SignRequestInMemory = { |
| 14 | + walletType: WalletType.InMemory; |
| 15 | + sign(passphrase: Uint8Array): Promise<void>; |
| 16 | +}; |
| 17 | + |
| 18 | +type SignRequestHardware = { |
| 19 | + walletType: WalletType.Trezor | WalletType.Ledger; |
| 20 | + /** Must be called from user gesture when running in web environments */ |
| 21 | + sign(): Promise<void>; |
| 22 | +}; |
| 23 | + |
| 24 | +export type TransactionWitnessRequest<WalletMetadata extends {}> = RequestBase<WalletMetadata> & { |
| 25 | + transaction: Serialization.Transaction; |
| 26 | +} & (SignRequestHardware | SignRequestInMemory); |
| 27 | + |
| 28 | +export type SignDataProps = Omit<cip8.Cip30SignDataRequest, 'witnesser' | 'addressManager'>; |
| 29 | + |
| 30 | +export type SignDataRequest<WalletMetadata extends {}> = RequestBase<WalletMetadata> & |
| 31 | + SignDataProps & |
| 32 | + (SignRequestHardware | SignRequestInMemory); |
| 33 | + |
| 34 | +export type RequestContext<WalletMetadata extends {}> = { |
| 35 | + origin: Origin; |
| 36 | + wallet: AnyBip32Wallet<WalletMetadata>; |
| 37 | + accountId: AccountId; |
| 38 | + chainId: Cardano.ChainId; |
| 39 | +}; |
| 40 | + |
| 41 | +export interface SignerManagerConfirmationApi<WalletMetadata extends {}> { |
| 42 | + transactionWitnessRequest$: Observable<TransactionWitnessRequest<WalletMetadata>>; |
| 43 | + signDataRequest$: Observable<SignDataRequest<WalletMetadata>>; |
| 44 | +} |
| 45 | + |
| 46 | +export interface SignerManagerSignApi<WalletMetadata extends {}> { |
| 47 | + signTransaction( |
| 48 | + tx: TxCBOR, |
| 49 | + options: SignTransactionOptions, |
| 50 | + context: RequestContext<WalletMetadata> |
| 51 | + ): Promise<Cardano.Signatures>; |
| 52 | + signData(props: SignDataProps, context: RequestContext<WalletMetadata>): Promise<Cip30DataSignature>; |
| 53 | +} |
0 commit comments