Skip to content

Commit 52a8552

Browse files
author
Mathéo
committed
Client types: support multi-transaction SignTransactionRequest
Add TransactionData type and extend SignTransactionRequestStandard to accept either inline single-tx fields or a transactions array. Return type now includes SignTransactionResults for multi-tx responses.
1 parent 2b42a9d commit 52a8552

File tree

3 files changed

+24
-7
lines changed

3 files changed

+24
-7
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ deployment-keyguard-next
99
dist
1010
.ts-out
1111
src/translations/index.js
12+
CLAUDE.md

client/src/PublicRequest.ts

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,9 @@ export type TransactionInfo = {
5555
flags?: number,
5656
};
5757

58+
// TransactionInfo without keyPath (keyPath is at request level for multi-transaction support)
59+
export type TransactionData = Omit<TransactionInfo, 'keyPath'>;
60+
5861
export enum BitcoinTransactionInputType {
5962
STANDARD = 'standard',
6063
HTLC_REDEEM = 'htlc-redeem',
@@ -167,10 +170,17 @@ export type ExportResult = {
167170

168171
type SignTransactionRequestCommon = SimpleRequest & TransactionInfo;
169172

170-
export type SignTransactionRequestStandard = SignTransactionRequestCommon & {
173+
// Standard layout supports both single and multiple transactions
174+
export type SignTransactionRequestStandard = SimpleRequest & {
175+
keyPath: string,
171176
layout?: 'standard',
172-
recipientLabel?: string,
173-
};
177+
recipientLabel?: string, // Only used for single-tx display
178+
} & (
179+
// Option A: Single transaction (backward compatible - fields directly on request)
180+
TransactionData |
181+
// Option B: Multiple transactions
182+
{ transactions: TransactionData[] | Uint8Array[] }
183+
);
174184

175185
export type SignTransactionRequestCheckout = SignTransactionRequestCommon & {
176186
layout: 'checkout',
@@ -616,6 +626,8 @@ export type ListLegacyResult = LegacyKeyInfoObject[];
616626
export type SignTransactionResult = SignatureResult & {
617627
serializedTx: Uint8Array,
618628
};
629+
// Array result type for multi-transaction signing
630+
export type SignTransactionResults = SignTransactionResult[];
619631
export type SignStakingResult = SignatureResult & {
620632
transaction: Uint8Array,
621633
};
@@ -653,6 +665,7 @@ export type RedirectResult
653665
| SignatureResult
654666
| ConnectResult
655667
| SignTransactionResult
668+
| SignTransactionResults
656669
| SignStakingResult[]
657670
| SignedBitcoinTransaction
658671
| SignedPolygonTransaction
@@ -667,7 +680,7 @@ export type Result = RedirectResult | IFrameResult;
667680

668681
export type ResultType<T extends RedirectRequest> =
669682
T extends Is<T, SignMessageRequest> ? SignatureResult :
670-
T extends Is<T, SignTransactionRequest> ? SignTransactionResult :
683+
T extends Is<T, SignTransactionRequest> ? SignTransactionResult | SignTransactionResults :
671684
T extends Is<T, SignMultisigTransactionRequest> ? SignatureResult :
672685
T extends Is<T, SignStakingRequest> ? SignStakingResult[] :
673686
T extends Is<T, ConnectRequest> ? ConnectResult :
@@ -684,7 +697,7 @@ export type ResultType<T extends RedirectRequest> =
684697

685698
export type ResultByCommand<T extends KeyguardCommand> =
686699
T extends KeyguardCommand.SIGN_MESSAGE ? SignatureResult :
687-
T extends KeyguardCommand.SIGN_TRANSACTION ? SignTransactionResult :
700+
T extends KeyguardCommand.SIGN_TRANSACTION ? SignTransactionResult | SignTransactionResults :
688701
T extends KeyguardCommand.SIGN_MULTISIG_TRANSACTION ? SignatureResult :
689702
T extends KeyguardCommand.SIGN_STAKING ? SignStakingResult[] :
690703
T extends KeyguardCommand.CONNECT_ACCOUNT ? ConnectResult :

types/Keyguard.d.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,8 +311,11 @@ type Is<T, B> = KeyguardRequest.Is<T, B>;
311311

312312
type Parsed<T extends KeyguardRequest.Request> =
313313
T extends Is<T, KeyguardRequest.SignTransactionRequestStandard> ?
314-
ConstructTransaction<KeyId2KeyInfo<KeyguardRequest.SignTransactionRequestStandard>>
315-
& { layout: KeyguardRequest.SignTransactionRequestLayout } :
314+
KeyId2KeyInfo<KeyguardRequest.SignTransactionRequestStandard>
315+
& {
316+
layout: KeyguardRequest.SignTransactionRequestLayout,
317+
transactions: Nimiq.Transaction[], // Always an array internally (even for single tx)
318+
} :
316319
T extends Is<T, KeyguardRequest.SignTransactionRequestCheckout> ?
317320
Transform<
318321
ConstructTransaction<KeyId2KeyInfo<KeyguardRequest.SignTransactionRequestCheckout>>,

0 commit comments

Comments
 (0)