@lifi/sdk-provider-bitcoin 4.0.0-alpha.1

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 (133) hide show
  1. package/CHANGELOG.md +1272 -0
  2. package/LICENSE +165 -0
  3. package/README.md +79 -0
  4. package/dist/cjs/BitcoinProvider.d.ts +2 -0
  5. package/dist/cjs/BitcoinProvider.js +37 -0
  6. package/dist/cjs/BitcoinProvider.js.map +1 -0
  7. package/dist/cjs/BitcoinStepExecutor.d.ts +12 -0
  8. package/dist/cjs/BitcoinStepExecutor.js +199 -0
  9. package/dist/cjs/BitcoinStepExecutor.js.map +1 -0
  10. package/dist/cjs/actions/getBitcoinBalance.d.ts +2 -0
  11. package/dist/cjs/actions/getBitcoinBalance.js +28 -0
  12. package/dist/cjs/actions/getBitcoinBalance.js.map +1 -0
  13. package/dist/cjs/actions/resolveBitcoinAddress.d.ts +1 -0
  14. package/dist/cjs/actions/resolveBitcoinAddress.js +7 -0
  15. package/dist/cjs/actions/resolveBitcoinAddress.js.map +1 -0
  16. package/dist/cjs/client/publicClient.d.ts +5 -0
  17. package/dist/cjs/client/publicClient.js +47 -0
  18. package/dist/cjs/client/publicClient.js.map +1 -0
  19. package/dist/cjs/errors/parseBitcoinErrors.d.ts +2 -0
  20. package/dist/cjs/errors/parseBitcoinErrors.js +31 -0
  21. package/dist/cjs/errors/parseBitcoinErrors.js.map +1 -0
  22. package/dist/cjs/index.d.ts +3 -0
  23. package/dist/cjs/index.js +8 -0
  24. package/dist/cjs/index.js.map +1 -0
  25. package/dist/cjs/package.json +1 -0
  26. package/dist/cjs/types.d.ts +9 -0
  27. package/dist/cjs/types.js +8 -0
  28. package/dist/cjs/types.js.map +1 -0
  29. package/dist/cjs/utils/generateRedeemScript.d.ts +1 -0
  30. package/dist/cjs/utils/generateRedeemScript.js +7 -0
  31. package/dist/cjs/utils/generateRedeemScript.js.map +1 -0
  32. package/dist/cjs/utils/isPsbtFinalized.d.ts +2 -0
  33. package/dist/cjs/utils/isPsbtFinalized.js +13 -0
  34. package/dist/cjs/utils/isPsbtFinalized.js.map +1 -0
  35. package/dist/cjs/utils/toBigmiChainId.d.ts +3 -0
  36. package/dist/cjs/utils/toBigmiChainId.js +15 -0
  37. package/dist/cjs/utils/toBigmiChainId.js.map +1 -0
  38. package/dist/cjs/utils/toXOnly.d.ts +1 -0
  39. package/dist/cjs/utils/toXOnly.js +6 -0
  40. package/dist/cjs/utils/toXOnly.js.map +1 -0
  41. package/dist/cjs/version.d.ts +2 -0
  42. package/dist/cjs/version.js +6 -0
  43. package/dist/cjs/version.js.map +1 -0
  44. package/dist/esm/BitcoinProvider.d.ts +2 -0
  45. package/dist/esm/BitcoinProvider.js +34 -0
  46. package/dist/esm/BitcoinProvider.js.map +1 -0
  47. package/dist/esm/BitcoinStepExecutor.d.ts +12 -0
  48. package/dist/esm/BitcoinStepExecutor.js +212 -0
  49. package/dist/esm/BitcoinStepExecutor.js.map +1 -0
  50. package/dist/esm/actions/getBitcoinBalance.d.ts +2 -0
  51. package/dist/esm/actions/getBitcoinBalance.js +24 -0
  52. package/dist/esm/actions/getBitcoinBalance.js.map +1 -0
  53. package/dist/esm/actions/resolveBitcoinAddress.d.ts +1 -0
  54. package/dist/esm/actions/resolveBitcoinAddress.js +5 -0
  55. package/dist/esm/actions/resolveBitcoinAddress.js.map +1 -0
  56. package/dist/esm/client/publicClient.d.ts +11 -0
  57. package/dist/esm/client/publicClient.js +50 -0
  58. package/dist/esm/client/publicClient.js.map +1 -0
  59. package/dist/esm/errors/parseBitcoinErrors.d.ts +2 -0
  60. package/dist/esm/errors/parseBitcoinErrors.js +28 -0
  61. package/dist/esm/errors/parseBitcoinErrors.js.map +1 -0
  62. package/dist/esm/index.d.ts +3 -0
  63. package/dist/esm/index.js +4 -0
  64. package/dist/esm/index.js.map +1 -0
  65. package/dist/esm/package.json +1 -0
  66. package/dist/esm/types.d.ts +9 -0
  67. package/dist/esm/types.js +5 -0
  68. package/dist/esm/types.js.map +1 -0
  69. package/dist/esm/utils/generateRedeemScript.d.ts +6 -0
  70. package/dist/esm/utils/generateRedeemScript.js +10 -0
  71. package/dist/esm/utils/generateRedeemScript.js.map +1 -0
  72. package/dist/esm/utils/isPsbtFinalized.d.ts +2 -0
  73. package/dist/esm/utils/isPsbtFinalized.js +10 -0
  74. package/dist/esm/utils/isPsbtFinalized.js.map +1 -0
  75. package/dist/esm/utils/toBigmiChainId.d.ts +3 -0
  76. package/dist/esm/utils/toBigmiChainId.js +11 -0
  77. package/dist/esm/utils/toBigmiChainId.js.map +1 -0
  78. package/dist/esm/utils/toXOnly.d.ts +1 -0
  79. package/dist/esm/utils/toXOnly.js +3 -0
  80. package/dist/esm/utils/toXOnly.js.map +1 -0
  81. package/dist/esm/version.d.ts +2 -0
  82. package/dist/esm/version.js +3 -0
  83. package/dist/esm/version.js.map +1 -0
  84. package/dist/types/BitcoinProvider.d.ts +3 -0
  85. package/dist/types/BitcoinProvider.d.ts.map +1 -0
  86. package/dist/types/BitcoinStepExecutor.d.ts +13 -0
  87. package/dist/types/BitcoinStepExecutor.d.ts.map +1 -0
  88. package/dist/types/actions/getBitcoinBalance.d.ts +3 -0
  89. package/dist/types/actions/getBitcoinBalance.d.ts.map +1 -0
  90. package/dist/types/actions/resolveBitcoinAddress.d.ts +2 -0
  91. package/dist/types/actions/resolveBitcoinAddress.d.ts.map +1 -0
  92. package/dist/types/client/publicClient.d.ts +12 -0
  93. package/dist/types/client/publicClient.d.ts.map +1 -0
  94. package/dist/types/errors/parseBitcoinErrors.d.ts +3 -0
  95. package/dist/types/errors/parseBitcoinErrors.d.ts.map +1 -0
  96. package/dist/types/index.d.ts +4 -0
  97. package/dist/types/index.d.ts.map +1 -0
  98. package/dist/types/types.d.ts +10 -0
  99. package/dist/types/types.d.ts.map +1 -0
  100. package/dist/types/utils/generateRedeemScript.d.ts +7 -0
  101. package/dist/types/utils/generateRedeemScript.d.ts.map +1 -0
  102. package/dist/types/utils/isPsbtFinalized.d.ts +3 -0
  103. package/dist/types/utils/isPsbtFinalized.d.ts.map +1 -0
  104. package/dist/types/utils/toBigmiChainId.d.ts +4 -0
  105. package/dist/types/utils/toBigmiChainId.d.ts.map +1 -0
  106. package/dist/types/utils/toXOnly.d.ts +2 -0
  107. package/dist/types/utils/toXOnly.d.ts.map +1 -0
  108. package/dist/types/version.d.ts +3 -0
  109. package/dist/types/version.d.ts.map +1 -0
  110. package/package.json +63 -0
  111. package/package.json.tmp +105 -0
  112. package/src/BitcoinProvider.ts +42 -0
  113. package/src/BitcoinProvider.unit.spec.ts +50 -0
  114. package/src/BitcoinStepExecutor.ts +344 -0
  115. package/src/actions/getBitcoinBalance.int.spec.ts +66 -0
  116. package/src/actions/getBitcoinBalance.ts +34 -0
  117. package/src/actions/resolveBitcoinAddress.ts +6 -0
  118. package/src/actions/resolveBitcoinAddress.unit.spec.ts +11 -0
  119. package/src/client/publicClient.ts +85 -0
  120. package/src/errors/parseBitcoinErrors.ts +52 -0
  121. package/src/errors/parseBitcoinErrors.unit.spec.ts +45 -0
  122. package/src/index.ts +4 -0
  123. package/src/types.ts +16 -0
  124. package/src/utils/generateRedeemScript.ts +10 -0
  125. package/src/utils/generateRedeemScript.unit.spec.ts +22 -0
  126. package/src/utils/isPsbtFinalized.ts +10 -0
  127. package/src/utils/isPsbtFinalized.unit.spec.ts +22 -0
  128. package/src/utils/toBigmiChainId.ts +11 -0
  129. package/src/utils/toBigmiChainId.unit.spec.ts +16 -0
  130. package/src/utils/toXOnly.ts +3 -0
  131. package/src/utils/toXOnly.unit.spec.ts +24 -0
  132. package/src/version.ts +2 -0
  133. package/tsconfig.json +18 -0
@@ -0,0 +1,3 @@
1
+ export { BitcoinProvider } from './BitcoinProvider.js';
2
+ export type { BitcoinProviderOptions, BitcoinSDKProvider } from './types.js';
3
+ export { isBitcoinProvider } from './types.js';
@@ -0,0 +1,4 @@
1
+ // biome-ignore lint/performance/noBarrelFile: module entrypoint
2
+ export { BitcoinProvider } from './BitcoinProvider.js';
3
+ export { isBitcoinProvider } from './types.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
@@ -0,0 +1,9 @@
1
+ import type { Client } from '@bigmi/core';
2
+ import { type SDKProvider } from '@lifi/sdk';
3
+ export interface BitcoinProviderOptions {
4
+ getWalletClient?: () => Promise<Client>;
5
+ }
6
+ export interface BitcoinSDKProvider extends SDKProvider {
7
+ setOptions(options: BitcoinProviderOptions): void;
8
+ }
9
+ export declare function isBitcoinProvider(provider: SDKProvider): provider is BitcoinSDKProvider;
@@ -0,0 +1,5 @@
1
+ import { ChainType } from '@lifi/sdk';
2
+ export function isBitcoinProvider(provider) {
3
+ return provider.type === ChainType.UTXO;
4
+ }
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAoB,MAAM,WAAW,CAAA;AAUvD,MAAM,UAAU,iBAAiB,CAC/B,QAAqB;IAErB,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAA;AACzC,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generate redeem script for P2SH addresses
3
+ * @param publicKey
4
+ * @returns redeem script
5
+ */
6
+ export declare const generateRedeemScript: (publicKey: Uint8Array) => Uint8Array<ArrayBufferLike> | undefined;
@@ -0,0 +1,10 @@
1
+ import { payments } from 'bitcoinjs-lib';
2
+ /**
3
+ * Generate redeem script for P2SH addresses
4
+ * @param publicKey
5
+ * @returns redeem script
6
+ */
7
+ export const generateRedeemScript = (publicKey) =>
8
+ // P2SH addresses are created by hashing the public key and using the result as the script
9
+ payments.p2wpkh({ pubkey: publicKey }).output;
10
+ //# sourceMappingURL=generateRedeemScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateRedeemScript.js","sourceRoot":"","sources":["../../../src/utils/generateRedeemScript.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,SAAqB,EAAE,EAAE;AAC5D,0FAA0F;AAC1F,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,CAAA"}
@@ -0,0 +1,2 @@
1
+ import type { Psbt } from 'bitcoinjs-lib';
2
+ export declare function isPsbtFinalized(psbt: Psbt): boolean;
@@ -0,0 +1,10 @@
1
+ export function isPsbtFinalized(psbt) {
2
+ try {
3
+ psbt.extractTransaction();
4
+ return true;
5
+ }
6
+ catch (_) {
7
+ return false;
8
+ }
9
+ }
10
+ //# sourceMappingURL=isPsbtFinalized.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPsbtFinalized.js","sourceRoot":"","sources":["../../../src/utils/isPsbtFinalized.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,IAAI,CAAC;QACH,IAAI,CAAC,kBAAkB,EAAE,CAAA;QACzB,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { ChainId as BigmiChainId } from '@bigmi/core';
2
+ import { ChainId } from '@lifi/sdk';
3
+ export declare const toBigmiChainId: (chainId: ChainId) => BigmiChainId;
@@ -0,0 +1,11 @@
1
+ import { ChainId as BigmiChainId } from '@bigmi/core';
2
+ import { ChainId } from '@lifi/sdk';
3
+ export const toBigmiChainId = (chainId) => {
4
+ switch (chainId) {
5
+ case ChainId.BTC:
6
+ return BigmiChainId.BITCOIN_MAINNET;
7
+ default:
8
+ throw new Error(`Unsupported chainId mapping: ${chainId}`);
9
+ }
10
+ };
11
+ //# sourceMappingURL=toBigmiChainId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBigmiChainId.js","sourceRoot":"","sources":["../../../src/utils/toBigmiChainId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAgB,EAAgB,EAAE;IAC/D,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO,CAAC,GAAG;YACd,OAAO,YAAY,CAAC,eAAe,CAAA;QACrC;YACE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAA;IAC9D,CAAC;AACH,CAAC,CAAA"}
@@ -0,0 +1 @@
1
+ export declare const toXOnly: (pubKey: Uint8Array) => Uint8Array<ArrayBufferLike>;
@@ -0,0 +1,3 @@
1
+ // helper function to convert full public key (33 bytes) to x-only compressed format (32 bytes) required after taproot update
2
+ export const toXOnly = (pubKey) => pubKey.length === 32 ? pubKey : pubKey.subarray(1, 33);
3
+ //# sourceMappingURL=toXOnly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toXOnly.js","sourceRoot":"","sources":["../../../src/utils/toXOnly.ts"],"names":[],"mappings":"AAAA,6HAA6H;AAC7H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAkB,EAAE,EAAE,CAC5C,MAAM,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const name = "@lifi/sdk-provider-bitcoin";
2
+ export declare const version = "4.0.0-alpha.1";
@@ -0,0 +1,3 @@
1
+ export const name = '@lifi/sdk-provider-bitcoin';
2
+ export const version = '4.0.0-alpha.1';
3
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,4BAA4B,CAAA;AAChD,MAAM,CAAC,MAAM,OAAO,GAAG,eAAe,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { BitcoinProviderOptions, BitcoinSDKProvider } from './types.js';
2
+ export declare function BitcoinProvider(options?: BitcoinProviderOptions): BitcoinSDKProvider;
3
+ //# sourceMappingURL=BitcoinProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinProvider.d.ts","sourceRoot":"","sources":["../../src/BitcoinProvider.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE5E,wBAAgB,eAAe,CAC7B,OAAO,CAAC,EAAE,sBAAsB,GAC/B,kBAAkB,CAgCpB"}
@@ -0,0 +1,13 @@
1
+ import type { Client } from '@bigmi/core';
2
+ import { BaseStepExecutor, type LiFiStepExtended, type SDKClient, type StepExecutorOptions } from '@lifi/sdk';
3
+ interface BitcoinStepExecutorOptions extends StepExecutorOptions {
4
+ client: Client;
5
+ }
6
+ export declare class BitcoinStepExecutor extends BaseStepExecutor {
7
+ private client;
8
+ constructor(options: BitcoinStepExecutorOptions);
9
+ checkClient: (step: LiFiStepExtended) => void;
10
+ executeStep: (client: SDKClient, step: LiFiStepExtended) => Promise<LiFiStepExtended>;
11
+ }
12
+ export {};
13
+ //# sourceMappingURL=BitcoinStepExecutor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BitcoinStepExecutor.d.ts","sourceRoot":"","sources":["../../src/BitcoinStepExecutor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,aAAa,CAAA;AAU5D,OAAO,EACL,gBAAgB,EAKhB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,mBAAmB,EAKzB,MAAM,WAAW,CAAA;AAQlB,UAAU,0BAA2B,SAAQ,mBAAmB;IAC9D,MAAM,EAAE,MAAM,CAAA;CACf;AAED,qBAAa,mBAAoB,SAAQ,gBAAgB;IACvD,OAAO,CAAC,MAAM,CAAQ;gBAEV,OAAO,EAAE,0BAA0B;IAK/C,WAAW,GAAI,MAAM,gBAAgB,UASpC;IAED,WAAW,GACT,QAAQ,SAAS,EACjB,MAAM,gBAAgB,KACrB,OAAO,CAAC,gBAAgB,CAAC,CA6R3B;CACF"}
@@ -0,0 +1,3 @@
1
+ import { type SDKClient, type Token, type TokenAmount } from '@lifi/sdk';
2
+ export declare const getBitcoinBalance: (client: SDKClient, walletAddress: string, tokens: Token[]) => Promise<TokenAmount[]>;
3
+ //# sourceMappingURL=getBitcoinBalance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getBitcoinBalance.d.ts","sourceRoot":"","sources":["../../../src/actions/getBitcoinBalance.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,WAAW,CAAA;AAGlB,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,SAAS,EACjB,eAAe,MAAM,EACrB,QAAQ,KAAK,EAAE,KACd,OAAO,CAAC,WAAW,EAAE,CAqBvB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveBitcoinAddress(name: string): Promise<string | undefined>;
2
+ //# sourceMappingURL=resolveBitcoinAddress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveBitcoinAddress.d.ts","sourceRoot":"","sources":["../../../src/actions/resolveBitcoinAddress.ts"],"names":[],"mappings":"AAAA,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAG7B"}
@@ -0,0 +1,12 @@
1
+ import { type Account, type Chain, type Client, type FallbackTransport, type HttpTransport, type PublicActions, type UTXOSchema, type WalletActions } from '@bigmi/core';
2
+ import type { SDKClient } from '@lifi/sdk';
3
+ type PublicClient = Client<FallbackTransport<readonly HttpTransport[]>, Chain, Account | undefined, UTXOSchema, PublicActions & WalletActions>;
4
+ /**
5
+ * Get an instance of a provider for a specific chain
6
+ * @param client - The SDK client
7
+ * @param chainId - Id of the chain the provider is for
8
+ * @returns The public client for the given chain
9
+ */
10
+ export declare const getBitcoinPublicClient: (client: SDKClient, chainId: number) => Promise<PublicClient>;
11
+ export {};
12
+ //# sourceMappingURL=publicClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publicClient.d.ts","sourceRoot":"","sources":["../../../src/client/publicClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAGZ,KAAK,KAAK,EACV,KAAK,MAAM,EAEX,KAAK,iBAAiB,EAEtB,KAAK,aAAa,EAGlB,KAAK,aAAa,EAGlB,KAAK,UAAU,EACf,KAAK,aAAa,EAEnB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAG1C,KAAK,YAAY,GAAG,MAAM,CACxB,iBAAiB,CAAC,SAAS,aAAa,EAAE,CAAC,EAC3C,KAAK,EACL,OAAO,GAAG,SAAS,EACnB,UAAU,EACV,aAAa,GAAG,aAAa,CAC9B,CAAA;AAKD;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,SAAS,EACjB,SAAS,MAAM,KACd,OAAO,CAAC,YAAY,CA0CtB,CAAA"}
@@ -0,0 +1,3 @@
1
+ import { type LiFiStep, type Process, SDKError } from '@lifi/sdk';
2
+ export declare const parseBitcoinErrors: (e: Error, step?: LiFiStep, process?: Process) => Promise<SDKError>;
3
+ //# sourceMappingURL=parseBitcoinErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseBitcoinErrors.d.ts","sourceRoot":"","sources":["../../../src/errors/parseBitcoinErrors.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,QAAQ,EAGT,MAAM,WAAW,CAAA;AAElB,eAAO,MAAM,kBAAkB,GAC7B,GAAG,KAAK,EACR,OAAO,QAAQ,EACf,UAAU,OAAO,KAChB,OAAO,CAAC,QAAQ,CAUlB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { BitcoinProvider } from './BitcoinProvider.js';
2
+ export type { BitcoinProviderOptions, BitcoinSDKProvider } from './types.js';
3
+ export { isBitcoinProvider } from './types.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,10 @@
1
+ import type { Client } from '@bigmi/core';
2
+ import { type SDKProvider } from '@lifi/sdk';
3
+ export interface BitcoinProviderOptions {
4
+ getWalletClient?: () => Promise<Client>;
5
+ }
6
+ export interface BitcoinSDKProvider extends SDKProvider {
7
+ setOptions(options: BitcoinProviderOptions): void;
8
+ }
9
+ export declare function isBitcoinProvider(provider: SDKProvider): provider is BitcoinSDKProvider;
10
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACzC,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,WAAW,CAAA;AAEvD,MAAM,WAAW,sBAAsB;IACrC,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;CACxC;AAED,MAAM,WAAW,kBAAmB,SAAQ,WAAW;IACrD,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI,CAAA;CAClD;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,GACpB,QAAQ,IAAI,kBAAkB,CAEhC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Generate redeem script for P2SH addresses
3
+ * @param publicKey
4
+ * @returns redeem script
5
+ */
6
+ export declare const generateRedeemScript: (publicKey: Uint8Array) => Uint8Array<ArrayBufferLike> | undefined;
7
+ //# sourceMappingURL=generateRedeemScript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateRedeemScript.d.ts","sourceRoot":"","sources":["../../../src/utils/generateRedeemScript.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,WAAW,UAAU,4CAEX,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { Psbt } from 'bitcoinjs-lib';
2
+ export declare function isPsbtFinalized(psbt: Psbt): boolean;
3
+ //# sourceMappingURL=isPsbtFinalized.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isPsbtFinalized.d.ts","sourceRoot":"","sources":["../../../src/utils/isPsbtFinalized.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AAEzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAOnD"}
@@ -0,0 +1,4 @@
1
+ import { ChainId as BigmiChainId } from '@bigmi/core';
2
+ import { ChainId } from '@lifi/sdk';
3
+ export declare const toBigmiChainId: (chainId: ChainId) => BigmiChainId;
4
+ //# sourceMappingURL=toBigmiChainId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toBigmiChainId.d.ts","sourceRoot":"","sources":["../../../src/utils/toBigmiChainId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,eAAO,MAAM,cAAc,GAAI,SAAS,OAAO,KAAG,YAOjD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare const toXOnly: (pubKey: Uint8Array) => Uint8Array<ArrayBufferLike>;
2
+ //# sourceMappingURL=toXOnly.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toXOnly.d.ts","sourceRoot":"","sources":["../../../src/utils/toXOnly.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,OAAO,GAAI,QAAQ,UAAU,gCACc,CAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const name = "@lifi/sdk-provider-bitcoin";
2
+ export declare const version = "4.0.0-alpha.1";
3
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,+BAA+B,CAAA;AAChD,eAAO,MAAM,OAAO,kBAAkB,CAAA"}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@lifi/sdk-provider-bitcoin",
3
+ "version": "4.0.0-alpha.1",
4
+ "description": "LI.FI Bitcoin SDK Provider for Any-to-Any Cross-Chain-Swap",
5
+ "homepage": "https://github.com/lifinance/sdk",
6
+ "bugs": {
7
+ "url": "https://github.com/lifinance/sdk/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/lifinance/sdk.git",
12
+ "directory": "packages/sdk-provider-bitcoin"
13
+ },
14
+ "license": "Apache-2.0",
15
+ "author": "Eugene Chybisov <eugene@li.finance>",
16
+ "type": "module",
17
+ "sideEffects": false,
18
+ "main": "./dist/cjs/index.js",
19
+ "module": "./dist/esm/index.js",
20
+ "types": "./dist/types/index.d.ts",
21
+ "typings": "./dist/types/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/types/index.d.ts",
25
+ "import": "./dist/esm/index.js",
26
+ "default": "./dist/cjs/index.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "dependencies": {
31
+ "@bigmi/core": "^0.6.2",
32
+ "@bitcoinerlab/secp256k1": "^1.2.0",
33
+ "bech32": "^2.0.0",
34
+ "bitcoinjs-lib": "^7.0.0",
35
+ "@lifi/sdk": "4.0.0-alpha.1"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "keywords": [
41
+ "swap",
42
+ "bridge",
43
+ "bridge-aggregation",
44
+ "cross-chain",
45
+ "cross-chain-applications",
46
+ "cross-chain-bridge",
47
+ "dapp",
48
+ "defi",
49
+ "ethereum",
50
+ "bitcoin",
51
+ "solana",
52
+ "sui",
53
+ "tron",
54
+ "lifi",
55
+ "multi-chain",
56
+ "sdk",
57
+ "ethers",
58
+ "viem",
59
+ "wagmi",
60
+ "web3",
61
+ "web3-react"
62
+ ]
63
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "name": "@lifi/sdk-provider-bitcoin",
3
+ "version": "4.0.0-alpha.1",
4
+ "description": "LI.FI Bitcoin SDK Provider for Any-to-Any Cross-Chain-Swap",
5
+ "homepage": "https://github.com/lifinance/sdk",
6
+ "bugs": {
7
+ "url": "https://github.com/lifinance/sdk/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/lifinance/sdk.git",
12
+ "directory": "packages/sdk-provider-bitcoin"
13
+ },
14
+ "license": "Apache-2.0",
15
+ "author": "Eugene Chybisov <eugene@li.finance>",
16
+ "type": "module",
17
+ "sideEffects": false,
18
+ "main": "./dist/cjs/index.js",
19
+ "module": "./dist/esm/index.js",
20
+ "types": "./dist/types/index.d.ts",
21
+ "typings": "./dist/types/index.d.ts",
22
+ "exports": {
23
+ ".": {
24
+ "types": "./dist/types/index.d.ts",
25
+ "import": "./dist/esm/index.js",
26
+ "default": "./dist/cjs/index.js"
27
+ },
28
+ "./package.json": "./package.json"
29
+ },
30
+ "scripts": {
31
+ "build": "pnpm clean && pnpm build:version && pnpm build:cjs && pnpm build:esm && pnpm build:types && pnpm build:clean",
32
+ "build:cjs": "tsc --project ./tsconfig.json --module commonjs --outDir ./dist/cjs --removeComments --verbatimModuleSyntax false && mkdir -p ./dist/cjs && printf '{\"type\":\"commonjs\"}' > ./dist/cjs/package.json",
33
+ "build:esm": "tsc --project ./tsconfig.json --module es2015 --outDir ./dist/esm && mkdir -p ./dist/esm && printf '{\"type\": \"module\",\"sideEffects\":false}' > ./dist/esm/package.json",
34
+ "build:types": "tsc --project ./tsconfig.json --module esnext --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
35
+ "build:prerelease": "node ../../scripts/prerelease.js && cpy '../../*.md' .",
36
+ "build:postrelease": "node ../../scripts/postrelease.js && rm -rf *.md",
37
+ "build:clean": "rm -rf tsconfig.tsbuildinfo ./dist/tsconfig.tsbuildinfo",
38
+ "build:version": "node ../../scripts/version.js",
39
+ "clean": "pnpm build:clean && rm -rf dist",
40
+ "coverage": "vitest run --coverage",
41
+ "test": "vitest --run --dangerouslyIgnoreUnhandledErrors",
42
+ "test:cov": "pnpm test --coverage",
43
+ "test:unit": "pnpm test .unit.spec.ts --passWithNoTests",
44
+ "check:types": "tsc --noEmit",
45
+ "check:circular-deps": "madge --circular $(find ./src -name '*.ts')",
46
+ "check:circular-deps-graph": "madge --circular $(find ./src -name '*.ts') --image graph.svg",
47
+ "watch": "tsc -w -p ./tsconfig.json"
48
+ },
49
+ "dependencies": {
50
+ "@bigmi/core": "^0.6.2",
51
+ "@bitcoinerlab/secp256k1": "^1.2.0",
52
+ "@lifi/sdk": "workspace:*",
53
+ "bech32": "^2.0.0",
54
+ "bitcoinjs-lib": "^7.0.0"
55
+ },
56
+ "devDependencies": {
57
+ "@lifi/data-types": "^6.40.0",
58
+ "@vitest/coverage-v8": "^4.0.10",
59
+ "cpy-cli": "^6.0.0",
60
+ "madge": "^8.0.0",
61
+ "typescript": "^5.9.3",
62
+ "vitest": "^4.0.10"
63
+ },
64
+ "publishConfig": {
65
+ "access": "public"
66
+ },
67
+ "files": [
68
+ "dist/**",
69
+ "!dist/**/*.tsbuildinfo",
70
+ "src/**/*.ts",
71
+ "!src/**/*.spec.ts",
72
+ "!src/**/*.test.ts",
73
+ "!src/**/*.mock.ts",
74
+ "!src/**/*.spec.ts",
75
+ "!src/**/*.handlers.ts",
76
+ "!src/**/*.tsbuildinfo",
77
+ "!**/__mocks__/**",
78
+ "!*.tmp",
79
+ "!*.env",
80
+ "!tsconfig.json"
81
+ ],
82
+ "keywords": [
83
+ "swap",
84
+ "bridge",
85
+ "bridge-aggregation",
86
+ "cross-chain",
87
+ "cross-chain-applications",
88
+ "cross-chain-bridge",
89
+ "dapp",
90
+ "defi",
91
+ "ethereum",
92
+ "bitcoin",
93
+ "solana",
94
+ "sui",
95
+ "tron",
96
+ "lifi",
97
+ "multi-chain",
98
+ "sdk",
99
+ "ethers",
100
+ "viem",
101
+ "wagmi",
102
+ "web3",
103
+ "web3-react"
104
+ ]
105
+ }
@@ -0,0 +1,42 @@
1
+ import { isUTXOAddress } from '@bigmi/core'
2
+ import { ChainType, type StepExecutorOptions } from '@lifi/sdk'
3
+ import { getBitcoinBalance } from './actions/getBitcoinBalance.js'
4
+ import { resolveBitcoinAddress } from './actions/resolveBitcoinAddress.js'
5
+ import { BitcoinStepExecutor } from './BitcoinStepExecutor.js'
6
+ import type { BitcoinProviderOptions, BitcoinSDKProvider } from './types.js'
7
+
8
+ export function BitcoinProvider(
9
+ options?: BitcoinProviderOptions
10
+ ): BitcoinSDKProvider {
11
+ const _options: BitcoinProviderOptions = options ?? {}
12
+ return {
13
+ get type() {
14
+ return ChainType.UTXO
15
+ },
16
+ isAddress: isUTXOAddress,
17
+ resolveAddress: resolveBitcoinAddress,
18
+ getBalance: getBitcoinBalance,
19
+ async getStepExecutor(
20
+ options: StepExecutorOptions
21
+ ): Promise<BitcoinStepExecutor> {
22
+ if (!_options.getWalletClient) {
23
+ throw new Error('Client is not provided.')
24
+ }
25
+
26
+ const walletClient = await _options.getWalletClient()
27
+
28
+ const executor = new BitcoinStepExecutor({
29
+ client: walletClient,
30
+ routeId: options.routeId,
31
+ executionOptions: {
32
+ ...options.executionOptions,
33
+ },
34
+ })
35
+
36
+ return executor
37
+ },
38
+ setOptions(options: BitcoinProviderOptions) {
39
+ Object.assign(_options, options)
40
+ },
41
+ }
42
+ }
@@ -0,0 +1,50 @@
1
+ import { ChainType } from '@lifi/sdk'
2
+ import { describe, expect, it, vi } from 'vitest'
3
+ import { BitcoinProvider } from './BitcoinProvider.js'
4
+
5
+ describe('BitcoinProvider', () => {
6
+ it('should create provider with default options', () => {
7
+ const provider = BitcoinProvider()
8
+
9
+ expect(provider.type).toBe(ChainType.UTXO)
10
+ expect(provider.isAddress).toBeDefined()
11
+ expect(provider.resolveAddress).toBeDefined()
12
+ expect(provider.getBalance).toBeDefined()
13
+ expect(provider.getStepExecutor).toBeDefined()
14
+ expect(provider.setOptions).toBeDefined()
15
+ })
16
+
17
+ it('should throw error when client is not provided', async () => {
18
+ const provider = BitcoinProvider()
19
+ const mockOptions = {
20
+ routeId: 'test-route',
21
+ executionOptions: {},
22
+ } as any
23
+
24
+ await expect(provider.getStepExecutor(mockOptions)).rejects.toThrowError(
25
+ 'Client is not provided.'
26
+ )
27
+ })
28
+
29
+ it('should return step executor when client is provided', async () => {
30
+ const mockWalletClient = {
31
+ account: { address: 'bc1qtest' },
32
+ }
33
+
34
+ const mockGetWalletClient = vi.fn().mockResolvedValue(mockWalletClient)
35
+
36
+ const provider = BitcoinProvider({
37
+ getWalletClient: mockGetWalletClient,
38
+ })
39
+
40
+ const mockOptions = {
41
+ routeId: 'test-route',
42
+ executionOptions: {},
43
+ } as any
44
+
45
+ const executor = await provider.getStepExecutor(mockOptions)
46
+
47
+ expect(executor).toBeDefined()
48
+ expect(mockGetWalletClient).toHaveBeenCalledOnce()
49
+ })
50
+ })