@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.
- package/CHANGELOG.md +1272 -0
- package/LICENSE +165 -0
- package/README.md +79 -0
- package/dist/cjs/BitcoinProvider.d.ts +2 -0
- package/dist/cjs/BitcoinProvider.js +37 -0
- package/dist/cjs/BitcoinProvider.js.map +1 -0
- package/dist/cjs/BitcoinStepExecutor.d.ts +12 -0
- package/dist/cjs/BitcoinStepExecutor.js +199 -0
- package/dist/cjs/BitcoinStepExecutor.js.map +1 -0
- package/dist/cjs/actions/getBitcoinBalance.d.ts +2 -0
- package/dist/cjs/actions/getBitcoinBalance.js +28 -0
- package/dist/cjs/actions/getBitcoinBalance.js.map +1 -0
- package/dist/cjs/actions/resolveBitcoinAddress.d.ts +1 -0
- package/dist/cjs/actions/resolveBitcoinAddress.js +7 -0
- package/dist/cjs/actions/resolveBitcoinAddress.js.map +1 -0
- package/dist/cjs/client/publicClient.d.ts +5 -0
- package/dist/cjs/client/publicClient.js +47 -0
- package/dist/cjs/client/publicClient.js.map +1 -0
- package/dist/cjs/errors/parseBitcoinErrors.d.ts +2 -0
- package/dist/cjs/errors/parseBitcoinErrors.js +31 -0
- package/dist/cjs/errors/parseBitcoinErrors.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/types.d.ts +9 -0
- package/dist/cjs/types.js +8 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/generateRedeemScript.d.ts +1 -0
- package/dist/cjs/utils/generateRedeemScript.js +7 -0
- package/dist/cjs/utils/generateRedeemScript.js.map +1 -0
- package/dist/cjs/utils/isPsbtFinalized.d.ts +2 -0
- package/dist/cjs/utils/isPsbtFinalized.js +13 -0
- package/dist/cjs/utils/isPsbtFinalized.js.map +1 -0
- package/dist/cjs/utils/toBigmiChainId.d.ts +3 -0
- package/dist/cjs/utils/toBigmiChainId.js +15 -0
- package/dist/cjs/utils/toBigmiChainId.js.map +1 -0
- package/dist/cjs/utils/toXOnly.d.ts +1 -0
- package/dist/cjs/utils/toXOnly.js +6 -0
- package/dist/cjs/utils/toXOnly.js.map +1 -0
- package/dist/cjs/version.d.ts +2 -0
- package/dist/cjs/version.js +6 -0
- package/dist/cjs/version.js.map +1 -0
- package/dist/esm/BitcoinProvider.d.ts +2 -0
- package/dist/esm/BitcoinProvider.js +34 -0
- package/dist/esm/BitcoinProvider.js.map +1 -0
- package/dist/esm/BitcoinStepExecutor.d.ts +12 -0
- package/dist/esm/BitcoinStepExecutor.js +212 -0
- package/dist/esm/BitcoinStepExecutor.js.map +1 -0
- package/dist/esm/actions/getBitcoinBalance.d.ts +2 -0
- package/dist/esm/actions/getBitcoinBalance.js +24 -0
- package/dist/esm/actions/getBitcoinBalance.js.map +1 -0
- package/dist/esm/actions/resolveBitcoinAddress.d.ts +1 -0
- package/dist/esm/actions/resolveBitcoinAddress.js +5 -0
- package/dist/esm/actions/resolveBitcoinAddress.js.map +1 -0
- package/dist/esm/client/publicClient.d.ts +11 -0
- package/dist/esm/client/publicClient.js +50 -0
- package/dist/esm/client/publicClient.js.map +1 -0
- package/dist/esm/errors/parseBitcoinErrors.d.ts +2 -0
- package/dist/esm/errors/parseBitcoinErrors.js +28 -0
- package/dist/esm/errors/parseBitcoinErrors.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/types.d.ts +9 -0
- package/dist/esm/types.js +5 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/generateRedeemScript.d.ts +6 -0
- package/dist/esm/utils/generateRedeemScript.js +10 -0
- package/dist/esm/utils/generateRedeemScript.js.map +1 -0
- package/dist/esm/utils/isPsbtFinalized.d.ts +2 -0
- package/dist/esm/utils/isPsbtFinalized.js +10 -0
- package/dist/esm/utils/isPsbtFinalized.js.map +1 -0
- package/dist/esm/utils/toBigmiChainId.d.ts +3 -0
- package/dist/esm/utils/toBigmiChainId.js +11 -0
- package/dist/esm/utils/toBigmiChainId.js.map +1 -0
- package/dist/esm/utils/toXOnly.d.ts +1 -0
- package/dist/esm/utils/toXOnly.js +3 -0
- package/dist/esm/utils/toXOnly.js.map +1 -0
- package/dist/esm/version.d.ts +2 -0
- package/dist/esm/version.js +3 -0
- package/dist/esm/version.js.map +1 -0
- package/dist/types/BitcoinProvider.d.ts +3 -0
- package/dist/types/BitcoinProvider.d.ts.map +1 -0
- package/dist/types/BitcoinStepExecutor.d.ts +13 -0
- package/dist/types/BitcoinStepExecutor.d.ts.map +1 -0
- package/dist/types/actions/getBitcoinBalance.d.ts +3 -0
- package/dist/types/actions/getBitcoinBalance.d.ts.map +1 -0
- package/dist/types/actions/resolveBitcoinAddress.d.ts +2 -0
- package/dist/types/actions/resolveBitcoinAddress.d.ts.map +1 -0
- package/dist/types/client/publicClient.d.ts +12 -0
- package/dist/types/client/publicClient.d.ts.map +1 -0
- package/dist/types/errors/parseBitcoinErrors.d.ts +3 -0
- package/dist/types/errors/parseBitcoinErrors.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/types.d.ts +10 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils/generateRedeemScript.d.ts +7 -0
- package/dist/types/utils/generateRedeemScript.d.ts.map +1 -0
- package/dist/types/utils/isPsbtFinalized.d.ts +3 -0
- package/dist/types/utils/isPsbtFinalized.d.ts.map +1 -0
- package/dist/types/utils/toBigmiChainId.d.ts +4 -0
- package/dist/types/utils/toBigmiChainId.d.ts.map +1 -0
- package/dist/types/utils/toXOnly.d.ts +2 -0
- package/dist/types/utils/toXOnly.d.ts.map +1 -0
- package/dist/types/version.d.ts +3 -0
- package/dist/types/version.d.ts.map +1 -0
- package/package.json +63 -0
- package/package.json.tmp +105 -0
- package/src/BitcoinProvider.ts +42 -0
- package/src/BitcoinProvider.unit.spec.ts +50 -0
- package/src/BitcoinStepExecutor.ts +344 -0
- package/src/actions/getBitcoinBalance.int.spec.ts +66 -0
- package/src/actions/getBitcoinBalance.ts +34 -0
- package/src/actions/resolveBitcoinAddress.ts +6 -0
- package/src/actions/resolveBitcoinAddress.unit.spec.ts +11 -0
- package/src/client/publicClient.ts +85 -0
- package/src/errors/parseBitcoinErrors.ts +52 -0
- package/src/errors/parseBitcoinErrors.unit.spec.ts +45 -0
- package/src/index.ts +4 -0
- package/src/types.ts +16 -0
- package/src/utils/generateRedeemScript.ts +10 -0
- package/src/utils/generateRedeemScript.unit.spec.ts +22 -0
- package/src/utils/isPsbtFinalized.ts +10 -0
- package/src/utils/isPsbtFinalized.unit.spec.ts +22 -0
- package/src/utils/toBigmiChainId.ts +11 -0
- package/src/utils/toBigmiChainId.unit.spec.ts +16 -0
- package/src/utils/toXOnly.ts +3 -0
- package/src/utils/toXOnly.unit.spec.ts +24 -0
- package/src/version.ts +2 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { payments } from 'bitcoinjs-lib'
|
|
2
|
+
import { describe, expect, it } from 'vitest'
|
|
3
|
+
import { generateRedeemScript } from './generateRedeemScript.js'
|
|
4
|
+
|
|
5
|
+
describe('generateRedeemScript', () => {
|
|
6
|
+
it('should generate redeem script for P2SH address', () => {
|
|
7
|
+
// Use a valid 33-byte compressed public key
|
|
8
|
+
const publicKey = new Uint8Array(33)
|
|
9
|
+
publicKey[0] = 0x02
|
|
10
|
+
publicKey.fill(0x01, 1, 33)
|
|
11
|
+
|
|
12
|
+
const redeemScript = generateRedeemScript(publicKey)
|
|
13
|
+
|
|
14
|
+
expect(redeemScript).toBeDefined()
|
|
15
|
+
expect(redeemScript).toBeInstanceOf(Uint8Array)
|
|
16
|
+
expect(redeemScript!.length).toBeGreaterThan(0)
|
|
17
|
+
|
|
18
|
+
// Verify it's the same as calling payments.p2wpkh directly
|
|
19
|
+
const expected = payments.p2wpkh({ pubkey: publicKey }).output
|
|
20
|
+
expect(redeemScript).toEqual(expected)
|
|
21
|
+
})
|
|
22
|
+
})
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { describe, expect, it, vi } from 'vitest'
|
|
2
|
+
import { isPsbtFinalized } from './isPsbtFinalized.js'
|
|
3
|
+
|
|
4
|
+
describe('isPsbtFinalized', () => {
|
|
5
|
+
it('should return true when psbt.extractTransaction() succeeds', () => {
|
|
6
|
+
const finalizedPsbt = {
|
|
7
|
+
extractTransaction: vi.fn().mockReturnValue({}),
|
|
8
|
+
} as any
|
|
9
|
+
|
|
10
|
+
expect(isPsbtFinalized(finalizedPsbt)).toBe(true)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('should return false when psbt.extractTransaction() throws', () => {
|
|
14
|
+
const unsignedPsbt = {
|
|
15
|
+
extractTransaction: vi.fn().mockImplementation(() => {
|
|
16
|
+
throw new Error('Not finalized')
|
|
17
|
+
}),
|
|
18
|
+
} as any
|
|
19
|
+
|
|
20
|
+
expect(isPsbtFinalized(unsignedPsbt)).toBe(false)
|
|
21
|
+
})
|
|
22
|
+
})
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChainId as BigmiChainId } from '@bigmi/core'
|
|
2
|
+
import { ChainId } from '@lifi/sdk'
|
|
3
|
+
|
|
4
|
+
export const toBigmiChainId = (chainId: ChainId): BigmiChainId => {
|
|
5
|
+
switch (chainId) {
|
|
6
|
+
case ChainId.BTC:
|
|
7
|
+
return BigmiChainId.BITCOIN_MAINNET
|
|
8
|
+
default:
|
|
9
|
+
throw new Error(`Unsupported chainId mapping: ${chainId}`)
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ChainId } from '@lifi/sdk'
|
|
2
|
+
import { describe, expect, it } from 'vitest'
|
|
3
|
+
import { toBigmiChainId } from './toBigmiChainId.js'
|
|
4
|
+
|
|
5
|
+
describe('toBigmiChainId', () => {
|
|
6
|
+
it('should convert BTC ChainId to BITCOIN_MAINNET', () => {
|
|
7
|
+
const bigmiChainId = toBigmiChainId(ChainId.BTC)
|
|
8
|
+
expect(bigmiChainId).toBe('bitcoin:mainnet')
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('should throw error for unsupported chainId', () => {
|
|
12
|
+
expect(() => {
|
|
13
|
+
toBigmiChainId(1 as ChainId)
|
|
14
|
+
}).toThrow('Unsupported chainId mapping: 1')
|
|
15
|
+
})
|
|
16
|
+
})
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest'
|
|
2
|
+
import { toXOnly } from './toXOnly.js'
|
|
3
|
+
|
|
4
|
+
describe('toXOnly', () => {
|
|
5
|
+
it('should return 32-byte public key as-is', () => {
|
|
6
|
+
const pubKey = new Uint8Array(32).fill(1)
|
|
7
|
+
const result = toXOnly(pubKey)
|
|
8
|
+
|
|
9
|
+
expect(result).toBe(pubKey)
|
|
10
|
+
expect(result.length).toBe(32)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('should extract last 32 bytes from 33-byte public key', () => {
|
|
14
|
+
const pubKey = new Uint8Array(33)
|
|
15
|
+
pubKey[0] = 2 // compressed prefix
|
|
16
|
+
pubKey.fill(5, 1, 33) // rest of the key
|
|
17
|
+
|
|
18
|
+
const result = toXOnly(pubKey)
|
|
19
|
+
|
|
20
|
+
expect(result.length).toBe(32)
|
|
21
|
+
expect(result[0]).toBe(5)
|
|
22
|
+
expect(result[31]).toBe(5)
|
|
23
|
+
})
|
|
24
|
+
})
|
package/src/version.ts
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo",
|
|
5
|
+
"composite": true,
|
|
6
|
+
"sourceMap": true,
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"moduleResolution": "Node",
|
|
9
|
+
"outDir": "./dist"
|
|
10
|
+
},
|
|
11
|
+
"include": ["./src/**/*", "./src/**/*.json"],
|
|
12
|
+
"exclude": [
|
|
13
|
+
"tests",
|
|
14
|
+
"./src/**/*.spec.ts",
|
|
15
|
+
"./src/**/*.mock.ts",
|
|
16
|
+
"./src/**/*.handlers.ts"
|
|
17
|
+
]
|
|
18
|
+
}
|