@ledgerhq/coin-bitcoin 0.29.0-nightly.20260115024415 → 0.29.0-nightly.20260116124336

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 (102) hide show
  1. package/CHANGELOG.md +12 -10
  2. package/lib/bridge/js.d.ts +1 -1
  3. package/lib/bridge/js.d.ts.map +1 -1
  4. package/lib/bridge/js.js +2 -3
  5. package/lib/bridge/js.js.map +1 -1
  6. package/lib/buildOptimisticOperation.d.ts +13 -0
  7. package/lib/buildOptimisticOperation.d.ts.map +1 -0
  8. package/lib/buildOptimisticOperation.js +20 -0
  9. package/lib/buildOptimisticOperation.js.map +1 -0
  10. package/lib/explorer.d.ts.map +1 -1
  11. package/lib/explorer.js +0 -7
  12. package/lib/explorer.js.map +1 -1
  13. package/lib/observable.d.ts +4 -0
  14. package/lib/observable.d.ts.map +1 -0
  15. package/lib/observable.js +9 -0
  16. package/lib/observable.js.map +1 -0
  17. package/lib/psbtFees.d.ts +9 -0
  18. package/lib/psbtFees.d.ts.map +1 -0
  19. package/lib/psbtFees.js +73 -0
  20. package/lib/psbtFees.js.map +1 -0
  21. package/lib/signOperation.d.ts.map +1 -1
  22. package/lib/signOperation.js +94 -99
  23. package/lib/signOperation.js.map +1 -1
  24. package/lib/signRawOperation.d.ts +6 -0
  25. package/lib/signRawOperation.d.ts.map +1 -0
  26. package/lib/signRawOperation.js +70 -0
  27. package/lib/signRawOperation.js.map +1 -0
  28. package/lib/signer.d.ts +15 -0
  29. package/lib/signer.d.ts.map +1 -1
  30. package/lib/types.d.ts +2 -0
  31. package/lib/types.d.ts.map +1 -1
  32. package/lib-es/bridge/js.d.ts +1 -1
  33. package/lib-es/bridge/js.d.ts.map +1 -1
  34. package/lib-es/bridge/js.js +2 -3
  35. package/lib-es/bridge/js.js.map +1 -1
  36. package/lib-es/buildOptimisticOperation.d.ts +13 -0
  37. package/lib-es/buildOptimisticOperation.d.ts.map +1 -0
  38. package/lib-es/buildOptimisticOperation.js +16 -0
  39. package/lib-es/buildOptimisticOperation.js.map +1 -0
  40. package/lib-es/explorer.d.ts.map +1 -1
  41. package/lib-es/explorer.js +0 -7
  42. package/lib-es/explorer.js.map +1 -1
  43. package/lib-es/observable.d.ts +4 -0
  44. package/lib-es/observable.d.ts.map +1 -0
  45. package/lib-es/observable.js +5 -0
  46. package/lib-es/observable.js.map +1 -0
  47. package/lib-es/psbtFees.d.ts +9 -0
  48. package/lib-es/psbtFees.d.ts.map +1 -0
  49. package/lib-es/psbtFees.js +69 -0
  50. package/lib-es/psbtFees.js.map +1 -0
  51. package/lib-es/signOperation.d.ts.map +1 -1
  52. package/lib-es/signOperation.js +94 -99
  53. package/lib-es/signOperation.js.map +1 -1
  54. package/lib-es/signRawOperation.d.ts +6 -0
  55. package/lib-es/signRawOperation.d.ts.map +1 -0
  56. package/lib-es/signRawOperation.js +66 -0
  57. package/lib-es/signRawOperation.js.map +1 -0
  58. package/lib-es/signer.d.ts +15 -0
  59. package/lib-es/signer.d.ts.map +1 -1
  60. package/lib-es/types.d.ts +2 -0
  61. package/lib-es/types.d.ts.map +1 -1
  62. package/package.json +13 -12
  63. package/src/__tests__/fixtures/common.fixtures.ts +6 -0
  64. package/src/__tests__/unit/psbtFees.fromFixture.unit.test.ts +31 -0
  65. package/src/__tests__/unit/signOperation.test.ts +226 -0
  66. package/src/__tests__/unit/signRawOperation.test.ts +188 -0
  67. package/src/bridge/js.test.ts +30 -0
  68. package/src/bridge/js.ts +2 -3
  69. package/src/buildOptimisticOperation.ts +34 -0
  70. package/src/explorer.ts +0 -8
  71. package/src/hw-signMessage.test.ts +1 -0
  72. package/src/observable.ts +12 -0
  73. package/src/observable.unit.test.ts +27 -0
  74. package/src/psbtFees.ts +77 -0
  75. package/src/signOperation.ts +140 -126
  76. package/src/signRawOperation.ts +104 -0
  77. package/src/signer.ts +13 -0
  78. package/src/types.ts +2 -0
  79. package/src/wallet-btc/__tests__/fixtures/common.fixtures.ts +64 -1
  80. package/src/wallet-btc/__tests__/wallet.integration.test.ts +1 -1
  81. package/src/wallet-btc/__tests__/xpub.txs.dogecoin.integration.test.ts +1 -1
  82. package/src/wallet-btc/__tests__/xpub.txs.zcash.integration.test.ts +1 -1
  83. package/tsconfig.json +3 -12
  84. package/lib/descriptor.d.ts +0 -19
  85. package/lib/descriptor.d.ts.map +0 -1
  86. package/lib/descriptor.js +0 -127
  87. package/lib/descriptor.js.map +0 -1
  88. package/lib/mockBtcSigner.d.ts +0 -20
  89. package/lib/mockBtcSigner.d.ts.map +0 -1
  90. package/lib/mockBtcSigner.js +0 -50
  91. package/lib/mockBtcSigner.js.map +0 -1
  92. package/lib-es/descriptor.d.ts +0 -19
  93. package/lib-es/descriptor.d.ts.map +0 -1
  94. package/lib-es/descriptor.js +0 -118
  95. package/lib-es/descriptor.js.map +0 -1
  96. package/lib-es/mockBtcSigner.d.ts +0 -20
  97. package/lib-es/mockBtcSigner.d.ts.map +0 -1
  98. package/lib-es/mockBtcSigner.js +0 -45
  99. package/lib-es/mockBtcSigner.js.map +0 -1
  100. package/src/descriptor.test.ts +0 -76
  101. package/src/descriptor.ts +0 -204
  102. package/src/mockBtcSigner.ts +0 -65
package/lib/signer.d.ts CHANGED
@@ -23,6 +23,21 @@ export interface BitcoinSigner {
23
23
  signMessage(path: string, messageHex: string): Promise<BitcoinSignature>;
24
24
  splitTransaction(transactionHex: string, isSegwitSupported: boolean | null | undefined, hasExtraData: boolean | null | undefined, additionals: Array<string> | null | undefined): SignerTransaction;
25
25
  createPaymentTransaction(arg: CreateTransaction): Promise<string>;
26
+ signPsbtBuffer?(psbtBuffer: Buffer, options?: {
27
+ finalizePsbt?: boolean;
28
+ accountPath?: string;
29
+ addressFormat?: AddressFormat;
30
+ onDeviceSignatureRequested: (() => void) | undefined;
31
+ onDeviceSignatureGranted: (() => void) | undefined;
32
+ onDeviceStreaming: ((arg: {
33
+ progress: number;
34
+ total: number;
35
+ index: number;
36
+ }) => void) | undefined;
37
+ }): Promise<{
38
+ psbt: Buffer;
39
+ tx: string;
40
+ }>;
26
41
  }
27
42
  export type SignerResult = BitcoinXPub | BitcoinAddress | BitcoinSignature;
28
43
  export type SignerContext = <T>(deviceId: string, crypto: CryptoCurrency, fn: (signer: BitcoinSigner) => Promise<T>) => Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AACjC,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AACF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAElF,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChF,kBAAkB,CAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;QACL,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,aAAa,CAAC;KACxB,GACA,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAEzE,gBAAgB,CACd,cAAc,EAAE,MAAM,EACtB,iBAAiB,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAC7C,YAAY,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACxC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,GAC5C,iBAAiB,CAAC;IACrB,wBAAwB,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnE;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,gBAAgB,CAAC;AAC3E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,EACtB,EAAE,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,KACtC,OAAO,CAAC,CAAC,CAAC,CAAC;AAIhB,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,sBAAsB,EAAE,CAAC;IACjC,OAAO,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EACF,KAAK,CAAC,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,GACxF,KAAK,CACH;QACE,iBAAiB;QACjB,MAAM;QACN,MAAM,GAAG,IAAI,GAAG,SAAS;QACzB,MAAM,GAAG,IAAI,GAAG,SAAS;QACzB,MAAM,GAAG,IAAI,GAAG,SAAS;KAC1B,CACF,CAAC;IACN,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,wBAAwB,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC/C,iBAAiB,CAAC,EACd,CAAC,CAAC,GAAG,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC,GACnE,SAAS,CAAC;IACd,0BAA0B,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;IACtD,wBAAwB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACrD,CAAC"}
1
+ {"version":3,"file":"signer.d.ts","sourceRoot":"","sources":["../src/signer.ts"],"names":[],"mappings":"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"}
package/lib/types.d.ts CHANGED
@@ -113,6 +113,8 @@ export type Transaction = TransactionCommon & {
113
113
  networkInfo: NetworkInfo | null | undefined;
114
114
  opReturnData?: Buffer | undefined;
115
115
  changeAddress?: string | undefined;
116
+ psbt?: string;
117
+ finalizePsbt?: boolean;
116
118
  };
117
119
  export type TransactionRaw = TransactionCommonRaw & {
118
120
  family: "bitcoin";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ export declare function createBridges(signerContext: SignerContext, coinConfig:
27
27
  }) => import("rxjs").Observable<import("@ledgerhq/coin-framework/lib-es/derivation").Result>;
28
28
  sync: (initialAccount: BitcoinAccount, syncConfig: import("@ledgerhq/types-live").SyncConfig) => import("rxjs").Observable<(arg0: BitcoinAccount) => BitcoinAccount>;
29
29
  signOperation: import("@ledgerhq/types-live").SignOperationFnSignature<Transaction, import("@ledgerhq/types-live").Account>;
30
- signRawOperation: () => never;
30
+ signRawOperation: import("@ledgerhq/types-live").SignRawOperationFnSignature<import("@ledgerhq/types-live").Account>;
31
31
  broadcast: import("@ledgerhq/types-live").BroadcastFnSignature<BitcoinAccount>;
32
32
  assignFromAccountRaw: typeof assignFromAccountRaw;
33
33
  assignToAccountRaw: typeof assignToAccountRaw;
@@ -1 +1 @@
1
- {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAoErD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjF"}
1
+ {"version":3,"file":"js.d.ts","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAS1E,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC;AAEtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAI1C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAmErD,wBAAgB,aAAa,CAAC,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOjF"}
@@ -16,6 +16,7 @@ import { broadcast } from "../broadcast";
16
16
  import { perCoinLogic } from "../logic";
17
17
  import resolver from "../hw-getAddress";
18
18
  import { validateAddress } from "../validateAddress";
19
+ import buildSignRawOperation from "../signRawOperation";
19
20
  function buildCurrencyBridge(signerContext) {
20
21
  const getAddress = resolver(signerContext);
21
22
  const scanAccounts = makeScanAccounts({
@@ -61,9 +62,7 @@ function buildAccountBridge(signerContext) {
61
62
  receive,
62
63
  sync,
63
64
  signOperation: buildSignOperation(signerContext),
64
- signRawOperation: () => {
65
- throw new Error("signRawOperation is not supported");
66
- },
65
+ signRawOperation: buildSignRawOperation(signerContext),
67
66
  broadcast: wrappedBroadcast,
68
67
  assignFromAccountRaw,
69
68
  assignToAccountRaw,
@@ -1 +1 @@
1
- {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/bridge/js.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import type { Operation } from "@ledgerhq/types-live";
3
+ type BuildOptimisticOperationParams = {
4
+ accountId: string;
5
+ fee: BigNumber;
6
+ value?: BigNumber;
7
+ senders?: string[];
8
+ recipients?: string[];
9
+ extra?: Record<string, unknown>;
10
+ };
11
+ export declare const buildOptimisticOperation: ({ accountId, fee, value, senders, recipients, extra, }: BuildOptimisticOperationParams) => Operation;
12
+ export {};
13
+ //# sourceMappingURL=buildOptimisticOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOptimisticOperation.d.ts","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAGtD,KAAK,8BAA8B,GAAG;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,SAAS,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,2DAOlC,8BAA8B,KAAG,SAalC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
2
+ export const buildOptimisticOperation = ({ accountId, fee, value, senders = [], recipients = [], extra = {}, }) => ({
3
+ id: encodeOperationId(accountId, "", "OUT"),
4
+ hash: "",
5
+ type: "OUT",
6
+ value: value ?? fee,
7
+ fee,
8
+ blockHash: null,
9
+ blockHeight: null,
10
+ senders,
11
+ recipients,
12
+ accountId,
13
+ date: new Date(),
14
+ extra,
15
+ });
16
+ //# sourceMappingURL=buildOptimisticOperation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildOptimisticOperation.js","sourceRoot":"","sources":["../src/buildOptimisticOperation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAWvE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EACvC,SAAS,EACT,GAAG,EACH,KAAK,EACL,OAAO,GAAG,EAAE,EACZ,UAAU,GAAG,EAAE,EACf,KAAK,GAAG,EAAE,GACqB,EAAa,EAAE,CAAC,CAAC;IAChD,EAAE,EAAE,iBAAiB,CAAC,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC;IAC3C,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,KAAK,IAAI,GAAG;IACnB,GAAG;IACH,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,OAAO;IACP,UAAU;IACV,SAAS;IACT,IAAI,EAAE,IAAI,IAAI,EAAE;IAChB,KAAK;CACN,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA6BF,eAAO,MAAM,mBAAmB,aAAc,cAAc,KAAG,cAI9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,cAAc,KAAG,MAG5D,CAAC"}
1
+ {"version":3,"file":"explorer.d.ts","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAqBF,eAAO,MAAM,mBAAmB,aAAc,cAAc,KAAG,cAI9D,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAAc,cAAc,KAAG,MAG5D,CAAC"}
@@ -1,13 +1,6 @@
1
1
  import invariant from "invariant";
2
2
  import { getEnv } from "@ledgerhq/live-env";
3
3
  const findCurrencyExplorer = (currency) => {
4
- if (getEnv("SATSTACK") && currency.id === "bitcoin") {
5
- return {
6
- endpoint: getEnv("EXPLORER_SATSTACK"),
7
- id: "btc",
8
- version: "v3",
9
- };
10
- }
11
4
  if (!currency.explorerId) {
12
5
  console.warn("no explorerId for", currency.id);
13
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAqC,EAAE;IAC3F,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QACpD,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,mBAAmB,CAAC;YACrC,EAAE,EAAE,KAAK;YACT,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,iBAAiB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,kBAAkB,CAAC;YACpC,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE;QACtC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IAC9E,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE,0BAA0B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAU,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,GAAG,QAAQ,eAAe,OAAO,IAAI,EAAE,EAAE,CAAC;AACnD,CAAC,CAAC"}
1
+ {"version":3,"file":"explorer.js","sourceRoot":"","sources":["../src/explorer.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQ5C,MAAM,oBAAoB,GAAG,CAAC,QAAwB,EAAqC,EAAE;IAC3F,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,QAAQ,CAAC,EAAE,KAAK,iBAAiB,EAAE,CAAC;QACtC,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,kBAAkB,CAAC;YACpC,EAAE,EAAE,aAAa;YACjB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC;QAC5B,EAAE,EAAE,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,EAAE;QACtC,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,QAAwB,EAAkB,EAAE;IAC9E,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAC3C,SAAS,CAAC,GAAG,EAAE,0BAA0B,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAU,EAAE;IACpE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAChE,OAAO,GAAG,QAAQ,eAAe,OAAO,IAAI,EAAE,EAAE,CAAC;AACnD,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Observable } from "rxjs";
2
+ import type { Observer } from "rxjs";
3
+ export declare const fromAsyncOperation: <T>(main: (observer: Observer<T>) => Promise<void>) => Observable<T>;
4
+ //# sourceMappingURL=observable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAErC,eAAO,MAAM,kBAAkB,uBACZ,SAAS,CAAC,CAAC,KAAK,QAAQ,IAAI,CAAC,KAC7C,WAAW,CAAC,CAMX,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Observable } from "rxjs";
2
+ export const fromAsyncOperation = (main) => new Observable(observer => {
3
+ main(observer).then(() => observer.complete(), error => observer.error(error));
4
+ });
5
+ //# sourceMappingURL=observable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.js","sourceRoot":"","sources":["../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAGlC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,IAA8C,EAC/B,EAAE,CACjB,IAAI,UAAU,CAAI,QAAQ,CAAC,EAAE;IAC3B,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CACjB,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,EACzB,KAAK,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAC/B,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ /**
3
+ * Compute fee from a PSBT (v2 preferred).
4
+ * Returns:
5
+ * - BigNumber(fee) on success
6
+ * - null if cannot parse (caller should fallback to calculateFees()).
7
+ */
8
+ export declare function feeFromPsbt(buf: Buffer): BigNumber | null;
9
+ //# sourceMappingURL=psbtFees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbtFees.d.ts","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAmBzC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAmDzD"}
@@ -0,0 +1,69 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { Transaction } from "bitcoinjs-lib";
3
+ import { PsbtV2 } from "@ledgerhq/psbtv2";
4
+ /** read uint64 little-endian into JS number (safe for BTC amounts) */
5
+ function readUInt64LE(buf) {
6
+ const lo = buf.readUInt32LE(0);
7
+ const hi = buf.readUInt32LE(4);
8
+ const loBig = BigInt(lo);
9
+ const hiBig = BigInt(hi);
10
+ const value = loBig + (hiBig << 32n);
11
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
12
+ throw new Error("readUInt64LE: value exceeds Number.MAX_SAFE_INTEGER");
13
+ }
14
+ return value;
15
+ }
16
+ /**
17
+ * Compute fee from a PSBT (v2 preferred).
18
+ * Returns:
19
+ * - BigNumber(fee) on success
20
+ * - null if cannot parse (caller should fallback to calculateFees()).
21
+ */
22
+ export function feeFromPsbt(buf) {
23
+ if (!buf || buf.length < 5)
24
+ return null;
25
+ try {
26
+ // Check PSBT version and use appropriate deserialization method
27
+ const psbtVersion = PsbtV2.getPsbtVersionNumber(buf);
28
+ const psbt = psbtVersion === 2 ? new PsbtV2() : PsbtV2.fromV0(buf, true);
29
+ if (psbtVersion === 2) {
30
+ psbt.deserialize(buf);
31
+ }
32
+ // Sum inputs (prefer WITNESS_UTXO; fall back to NON_WITNESS_UTXO)
33
+ let inSum = 0n;
34
+ const nIn = psbt.getGlobalInputCount();
35
+ for (let i = 0; i < nIn; i++) {
36
+ const w = psbt.getInputWitnessUtxo(i);
37
+ if (w) {
38
+ inSum += readUInt64LE(w.amount);
39
+ continue;
40
+ }
41
+ const nonWitness = psbt.getInputNonWitnessUtxo(i);
42
+ if (!nonWitness) {
43
+ return null;
44
+ }
45
+ // NON_WITNESS_UTXO is the full previous transaction. Use the PSBT
46
+ // input's referenced output index to locate the amount.
47
+ const prevTx = Transaction.fromBuffer(nonWitness);
48
+ const prevOutIndex = psbt.getInputOutputIndex(i);
49
+ const prevOut = prevTx.outs[prevOutIndex];
50
+ if (!prevOut) {
51
+ return null;
52
+ }
53
+ inSum += BigInt(prevOut.value);
54
+ }
55
+ // Sum outputs
56
+ let outSum = 0n;
57
+ const nOut = psbt.getGlobalOutputCount();
58
+ for (let i = 0; i < nOut; i++) {
59
+ outSum += BigInt(psbt.getOutputAmount(i)); // number
60
+ }
61
+ if (inSum < outSum)
62
+ return null;
63
+ return new BigNumber((inSum - outSum).toString());
64
+ }
65
+ catch {
66
+ return null;
67
+ }
68
+ }
69
+ //# sourceMappingURL=psbtFees.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbtFees.js","sourceRoot":"","sources":["../src/psbtFees.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAA6B,MAAM,sBAAsB,CAAC;AAErF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,eAAO,MAAM,kBAAkB,kBACb,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CA4HtE,CAAC;AAEP,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"signOperation.d.ts","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAW,aAAa,EAAa,MAAM,sBAAsB,CAAC;AAE9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAO3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0IzC,eAAO,MAAM,kBAAkB,kBACb,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,eAAe,CAEuB,CAAC;AAEpG,eAAe,kBAAkB,CAAC"}
@@ -1,112 +1,107 @@
1
1
  import { BigNumber } from "bignumber.js";
2
- import { Observable } from "rxjs";
3
2
  import { log } from "@ledgerhq/logs";
4
3
  import { isSegwitDerivationMode } from "@ledgerhq/coin-framework/derivation";
5
- import { encodeOperationId } from "@ledgerhq/coin-framework/operation";
6
4
  import { getNetworkParameters } from "./networks";
5
+ import { buildOptimisticOperation } from "./buildOptimisticOperation";
7
6
  import { buildTransaction } from "./buildTransaction";
8
7
  import { calculateFees } from "./cache";
9
8
  import wallet, { getWalletAccount } from "./wallet-btc";
10
9
  import { perCoinLogic } from "./logic";
11
- export const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => new Observable(o => {
12
- async function main() {
13
- const { currency } = account;
14
- const walletAccount = getWalletAccount(account);
15
- log("hw", `signTransaction ${currency.id} for account ${account.id}`);
16
- const txInfo = await buildTransaction(account, transaction);
17
- let senders = new Set();
18
- let recipients = [];
19
- let fee = new BigNumber(0);
20
- // Maybe better not re-calculate these fields here, instead include them
21
- // in Transaction type and set them in prepareTransaction?
22
- await calculateFees({
23
- account,
10
+ import { fromAsyncOperation } from "./observable";
11
+ function buildAdditionals(currencyId, derivationMode, transaction) {
12
+ const perCoin = perCoinLogic[currencyId];
13
+ let additionals = [currencyId];
14
+ if (derivationMode === "native_segwit") {
15
+ additionals.push("bech32");
16
+ }
17
+ if (derivationMode === "taproot") {
18
+ additionals.push("bech32m");
19
+ }
20
+ if (perCoin?.getAdditionals) {
21
+ additionals = additionals.concat(perCoin.getAdditionals({
24
22
  transaction,
25
- }).then(res => {
26
- senders = new Set(res.txInputs.map(i => i.address).filter(Boolean));
27
- recipients = res.txOutputs
28
- .filter(o => o.address && !o.isChange)
29
- .map(o => o.address);
30
- fee = res.fees;
31
- });
32
- let lockTime;
33
- // (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
34
- // Ledger Live. We should only set this if the currency is Komodo and
35
- // lockTime isn't already defined.
36
- if (currency.id === "komodo" && lockTime === undefined) {
37
- const unixtime = Math.floor(Date.now() / 1000);
38
- lockTime = unixtime - 777;
39
- }
40
- const networkParams = getNetworkParameters(currency.id);
41
- const sigHashType = networkParams.sigHash;
42
- if (isNaN(sigHashType)) {
43
- throw new Error("sigHashType should not be NaN");
44
- }
45
- const segwit = isSegwitDerivationMode(account.derivationMode);
46
- const perCoin = perCoinLogic[currency.id];
47
- let additionals = [currency.id];
48
- if (account.derivationMode === "native_segwit") {
49
- additionals.push("bech32");
50
- }
51
- if (account.derivationMode === "taproot") {
52
- additionals.push("bech32m");
53
- }
54
- if (perCoin?.getAdditionals) {
55
- additionals = additionals.concat(perCoin.getAdditionals({
56
- transaction,
57
- }));
58
- }
59
- const expiryHeight = perCoin?.hasExpiryHeight
60
- ? Buffer.from([0x00, 0x00, 0x00, 0x00])
61
- : undefined;
62
- const hasExtraData = perCoin?.hasExtraData || false;
63
- const signature = await signerContext(deviceId, currency, signer => wallet.signAccountTx({
64
- btc: signer,
65
- fromAccount: walletAccount,
66
- txInfo,
67
- lockTime,
68
- sigHashType,
69
- segwit,
70
- additionals,
71
- expiryHeight,
72
- hasExtraData,
73
- onDeviceSignatureGranted: () => o.next({
74
- type: "device-signature-granted",
75
- }),
76
- onDeviceSignatureRequested: () => o.next({
77
- type: "device-signature-requested",
78
- }),
79
- onDeviceStreaming: ({ progress, index, total }) => o.next({
80
- type: "device-streaming",
81
- progress,
82
- index,
83
- total,
84
- }),
85
23
  }));
86
- // Build the optimistic operation
87
- const operation = {
88
- id: encodeOperationId(account.id, "", "OUT"),
89
- hash: "", // Will be resolved in broadcast()
90
- type: "OUT",
91
- value: new BigNumber(transaction.amount).plus(fee),
92
- fee,
93
- blockHash: null,
94
- blockHeight: null,
95
- senders: Array.from(senders),
96
- recipients,
97
- accountId: account.id,
98
- date: new Date(),
99
- extra: {},
100
- };
101
- o.next({
102
- type: "signed",
103
- signedOperation: {
104
- operation,
105
- signature,
106
- },
107
- });
108
24
  }
109
- main().then(() => o.complete(), e => o.error(e));
110
- });
25
+ return additionals;
26
+ }
27
+ async function executeSignOperation(o, account, deviceId, transaction, signerContext) {
28
+ const { currency } = account;
29
+ const walletAccount = getWalletAccount(account);
30
+ log("hw", `signTransaction ${currency.id} for account ${account.id}`);
31
+ const txInfo = await buildTransaction(account, transaction);
32
+ // Maybe better not re-calculate these fields here, instead include them
33
+ // in Transaction type and set them in prepareTransaction?
34
+ const res = await calculateFees({
35
+ account,
36
+ transaction,
37
+ });
38
+ const senders = res.txInputs.reduce((acc, i) => {
39
+ if (i.address)
40
+ acc.add(i.address);
41
+ return acc;
42
+ }, new Set());
43
+ const recipients = res.txOutputs.reduce((acc, o) => {
44
+ if (!o.isChange && o.address)
45
+ acc.push(o.address);
46
+ return acc;
47
+ }, []);
48
+ const fee = res.fees;
49
+ let lockTime;
50
+ // (legacy) Set lockTime for Komodo to enable reward claiming on UTXOs created by
51
+ // Ledger Live. We should only set this if the currency is Komodo and
52
+ // lockTime isn't already defined.
53
+ if (currency.id === "komodo" && lockTime === undefined) {
54
+ const unixtime = Math.floor(Date.now() / 1000);
55
+ lockTime = unixtime - 777;
56
+ }
57
+ const networkParams = getNetworkParameters(currency.id);
58
+ const sigHashType = networkParams.sigHash;
59
+ if (isNaN(sigHashType)) {
60
+ throw new Error("sigHashType should not be NaN");
61
+ }
62
+ const segwit = isSegwitDerivationMode(account.derivationMode);
63
+ const additionals = buildAdditionals(currency.id, account.derivationMode, transaction);
64
+ const perCoin = perCoinLogic[currency.id];
65
+ const expiryHeight = perCoin?.hasExpiryHeight ? Buffer.from([0x00, 0x00, 0x00, 0x00]) : undefined;
66
+ const hasExtraData = perCoin?.hasExtraData || false;
67
+ const signature = await signerContext(deviceId, currency, signer => wallet.signAccountTx({
68
+ btc: signer,
69
+ fromAccount: walletAccount,
70
+ txInfo,
71
+ lockTime,
72
+ sigHashType,
73
+ segwit,
74
+ additionals,
75
+ expiryHeight,
76
+ hasExtraData,
77
+ onDeviceSignatureGranted: () => o.next({
78
+ type: "device-signature-granted",
79
+ }),
80
+ onDeviceSignatureRequested: () => o.next({
81
+ type: "device-signature-requested",
82
+ }),
83
+ onDeviceStreaming: ({ progress, index, total }) => o.next({
84
+ type: "device-streaming",
85
+ progress,
86
+ index,
87
+ total,
88
+ }),
89
+ }));
90
+ const operation = buildOptimisticOperation({
91
+ accountId: account.id,
92
+ fee,
93
+ value: new BigNumber(transaction.amount).plus(fee),
94
+ senders: Array.from(senders),
95
+ recipients,
96
+ });
97
+ o.next({
98
+ type: "signed",
99
+ signedOperation: {
100
+ operation,
101
+ signature,
102
+ },
103
+ });
104
+ }
105
+ export const buildSignOperation = (signerContext) => ({ account, deviceId, transaction }) => fromAsyncOperation(o => executeSignOperation(o, account, deviceId, transaction, signerContext));
111
106
  export default buildSignOperation;
112
107
  //# sourceMappingURL=signOperation.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"signOperation.js","sourceRoot":"","sources":["../src/signOperation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { AccountBridge } from "@ledgerhq/types-live";
2
+ import type { Transaction } from "./types";
3
+ import { SignerContext } from "./signer";
4
+ export declare const buildSignRawOperation: (signerContext: SignerContext) => AccountBridge<Transaction>["signRawOperation"];
5
+ export default buildSignRawOperation;
6
+ //# sourceMappingURL=signRawOperation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signRawOperation.d.ts","sourceRoot":"","sources":["../src/signRawOperation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAI3C,OAAO,EAAiB,aAAa,EAAE,MAAM,UAAU,CAAC;AAmCxD,eAAO,MAAM,qBAAqB,kBAChB,aAAa,KAAG,cAAc,WAAW,CAAC,CAAC,kBAAkB,CAuDzE,CAAC;AAEP,eAAe,qBAAqB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import { BigNumber } from "bignumber.js";
2
+ import { log } from "@ledgerhq/logs";
3
+ import { getAddressFormatDerivationMode } from "@ledgerhq/coin-framework/derivation";
4
+ import { parsePsbt } from "@ledgerhq/psbtv2";
5
+ import { getNetworkParameters } from "./networks";
6
+ import { buildOptimisticOperation } from "./buildOptimisticOperation";
7
+ import { getWalletAccount } from "./wallet-btc";
8
+ import { feeFromPsbt } from "./psbtFees";
9
+ import { fromAsyncOperation } from "./observable";
10
+ const signPsbtWithDevice = async (signerContext, deviceId, currency, psbtBuffer, options) => signerContext(deviceId, currency, signer => {
11
+ if (!signer.signPsbtBuffer) {
12
+ throw new Error("signPsbtBuffer not available");
13
+ }
14
+ return signer.signPsbtBuffer(psbtBuffer, {
15
+ accountPath: options.accountPath,
16
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
17
+ addressFormat: options.addressFormat,
18
+ finalizePsbt: true,
19
+ onDeviceSignatureRequested: options.onDeviceSignatureRequested,
20
+ onDeviceSignatureGranted: options.onDeviceSignatureGranted,
21
+ onDeviceStreaming: options.onDeviceStreaming,
22
+ });
23
+ });
24
+ export const buildSignRawOperation = (signerContext) => ({ account, deviceId, transaction: psbt }) => fromAsyncOperation(async (o) => {
25
+ const { currency } = account;
26
+ const walletAccount = getWalletAccount(account);
27
+ log("hw", `signRawTransaction ${currency.id} for account ${account.id}`);
28
+ const networkParams = getNetworkParameters(currency.id);
29
+ const sigHashType = networkParams.sigHash;
30
+ if (Number.isNaN(sigHashType)) {
31
+ throw new TypeError("sigHashType should not be NaN");
32
+ }
33
+ const psbtBuffer = parsePsbt(psbt);
34
+ const psbtResult = await signPsbtWithDevice(signerContext, deviceId, currency, psbtBuffer, {
35
+ accountPath: `${walletAccount.params.path}/${walletAccount.params.index}'`,
36
+ addressFormat: getAddressFormatDerivationMode(account.derivationMode),
37
+ onDeviceSignatureRequested: () => o.next({ type: "device-signature-requested" }),
38
+ onDeviceSignatureGranted: () => o.next({ type: "device-signature-granted" }),
39
+ onDeviceStreaming: arg => o.next({ type: "device-streaming", ...arg }),
40
+ });
41
+ if (!psbtResult) {
42
+ throw new Error(`PSBT signing failed: no result from device for account ${account.id} (${currency.id})`);
43
+ }
44
+ const parsedPsbtFee = feeFromPsbt(psbtBuffer);
45
+ if (!parsedPsbtFee) {
46
+ log("hw", `Failed to extract fee from PSBT for account ${account.id} (${currency.id}); falling back to fee=0`);
47
+ }
48
+ const psbtFee = parsedPsbtFee || BigNumber(0);
49
+ // Optimistic operation for PSBT (we don't know recipients/amount here)
50
+ const operation = buildOptimisticOperation({
51
+ accountId: account.id,
52
+ fee: psbtFee,
53
+ extra: { psbt: true },
54
+ });
55
+ o.next({
56
+ type: "signed",
57
+ signedOperation: {
58
+ operation,
59
+ // Ensure non-empty signature: if not finalized, fall back to the PSBT (base64)
60
+ signature: psbtResult.tx || psbtResult.psbt.toString("base64"),
61
+ rawData: { psbtSigned: psbtResult.psbt.toString("base64") },
62
+ },
63
+ });
64
+ });
65
+ export default buildSignRawOperation;
66
+ //# sourceMappingURL=signRawOperation.js.map