{"_id":"@0xbridge/bitcoin-vault-trial","_rev":"3-a7dbbc244d7ab66fd91a851066f480cf","name":"@0xbridge/bitcoin-vault-trial","dist-tags":{"latest":"1.0.3"},"versions":{"1.0.0":{"name":"@0xbridge/bitcoin-vault-trial","version":"1.0.0","keywords":["typescript","esm","cjs","library","bitcoinjs"],"author":{"name":"0xBridge"},"_id":"@0xbridge/bitcoin-vault-trial@1.0.0","maintainers":[{"name":"bakii_agl","email":"satyam0499@gmail.com"},{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"}],"homepage":"https://github.com/0xBridge/bitcoin-vault/tree/frontend#readme","bugs":{"url":"https://github.com/0xBridge/bitcoin-vault/issues"},"dist":{"shasum":"77be385e2ebc821c2f10d85971e3433e2dad2d15","tarball":"https://registry.npmjs.org/@0xbridge/bitcoin-vault-trial/-/bitcoin-vault-trial-1.0.0.tgz","fileCount":20,"integrity":"sha512-N0pdRrgOAX11IZ+RVMheNKWzY+XBxKoifb8lSpLQ58r6U94uBMhVRYauOhLG5bB7RXLl9wK3eUtNo5i/xwMcxQ==","signatures":[{"sig":"MEQCIAlkV+rkCsXBP47Y3oIhTObW6uu+gs0trn2sDD+kkcSWAiBOi4mE5l+r+2LmZwH6uuUi5bzrvBTsvxgBywA6kWgDog==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53564},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"gitHead":"e4369c7bdf74c95c36296923c8256ec13bb133e6","scripts":{"test":"jest --coverage","build":"npm run build:esm && npm run build:cjs && npm run build:types","clean":"rimraf dist","start":"ts-node src/index.ts","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","build:types":"tsc --project tsconfig.types.json","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"},"repository":{"url":"git+https://github.com/0xBridge/bitcoin-vault.git#frontend","type":"git"},"_npmVersion":"9.6.7","description":"Bitcoin-psbt implementation TypeScript library supporting ESM and CJS.","directories":{},"_nodeVersion":"20.3.0","dependencies":{"zlib":"^1.0.5","axios":"^1.7.9","bip32":"^5.0.0-rc.0","bip39":"^3.1.0","ecpair":"^3.0.0-rc.0","bitcoinjs-lib":"^6.1.7","tiny-secp256k1":"^2.2.3","@0xbridge/bitcoin-vault":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","ts-node":"^10.9.2","@types/jest":"^29.5.14","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/bitcoin-vault-trial_1.0.0_1736398875421_0.158632432296554","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@0xbridge/bitcoin-vault-trial","version":"1.0.1","keywords":["typescript","esm","cjs","library","bitcoinjs"],"author":{"name":"0xBridge"},"_id":"@0xbridge/bitcoin-vault-trial@1.0.1","maintainers":[{"name":"bakii_agl","email":"satyam0499@gmail.com"},{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"}],"homepage":"https://github.com/0xBridge/bitcoin-vault/tree/frontend#readme","bugs":{"url":"https://github.com/0xBridge/bitcoin-vault/issues"},"dist":{"shasum":"e2abdaa76c8cb7e6cf332533e42f433121c1f55b","tarball":"https://registry.npmjs.org/@0xbridge/bitcoin-vault-trial/-/bitcoin-vault-trial-1.0.1.tgz","fileCount":20,"integrity":"sha512-lXIZF9f5qjZW9BdfGU8gLPy6PK2BtrcqVEMkclvBaqOlrH20HCRMOgqYbGOJyLAX7d88JFUOz+cB6690DrbwQg==","signatures":[{"sig":"MEYCIQC/sn3UuI9NuiyQkCXPUtLAI9VU7Mmz0SB7e7rCJ6/xtwIhAMfoJ7ig+6OSjiry2PTM4rT2jL9/fa8VvNrO47UwIUC9","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":53255},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"gitHead":"e4369c7bdf74c95c36296923c8256ec13bb133e6","scripts":{"test":"jest --coverage","build":"npm run build:esm && npm run build:cjs && npm run build:types","clean":"rimraf dist","start":"ts-node src/index.ts","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","build:types":"tsc --project tsconfig.types.json","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"},"repository":{"url":"git+https://github.com/0xBridge/bitcoin-vault.git#frontend","type":"git"},"_npmVersion":"9.6.7","description":"Bitcoin-psbt implementation TypeScript library supporting ESM and CJS.","directories":{},"_nodeVersion":"20.3.0","dependencies":{"zlib":"^1.0.5","axios":"^1.7.9","bip32":"^5.0.0-rc.0","bip39":"^3.1.0","ecpair":"^3.0.0-rc.0","bitcoinjs-lib":"^6.1.7","tiny-secp256k1":"^2.2.3","@0xbridge/bitcoin-vault":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","ts-node":"^10.9.2","@types/jest":"^29.5.14","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/bitcoin-vault-trial_1.0.1_1736399951744_0.11559425829455483","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@0xbridge/bitcoin-vault-trial","version":"1.0.2","keywords":["typescript","esm","cjs","library","bitcoinjs"],"author":{"name":"0xBridge"},"_id":"@0xbridge/bitcoin-vault-trial@1.0.2","maintainers":[{"name":"bakii_agl","email":"satyam0499@gmail.com"},{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"}],"homepage":"https://github.com/0xBridge/bitcoin-vault/tree/frontend#readme","bugs":{"url":"https://github.com/0xBridge/bitcoin-vault/issues"},"dist":{"shasum":"dea0493e661d8bd05b2809216b66d8b08d4a305a","tarball":"https://registry.npmjs.org/@0xbridge/bitcoin-vault-trial/-/bitcoin-vault-trial-1.0.2.tgz","fileCount":20,"integrity":"sha512-JWp6z9y4xMQEeelp95B32O5qM6U79C+zStD7bsSzSMH+6i9ynq9Nz5yQAxLJJlNlgn3B1XVrGtEheXAuOpszcg==","signatures":[{"sig":"MEUCIQC4Sk5fgEgtfMttos2AWxIY3HyFZgUyM5K5paPjL6NtSQIgYbKTX6D/ASkBFxNHY/7DlmG+P/Ax8E7Fq4A414qz0Mc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":52700},"main":"dist/cjs/index.js","types":"dist/types/index.d.ts","module":"dist/esm/index.js","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js"},"gitHead":"b571d5c0d253e2676dfce0570c3c09dd0d932911","scripts":{"test":"jest --coverage","build":"npm run build:esm && npm run build:cjs && npm run build:types","clean":"rimraf dist","start":"ts-node src/index.ts","build:cjs":"tsc --project tsconfig.cjs.json","build:esm":"tsc --project tsconfig.esm.json","build:types":"tsc --project tsconfig.types.json","prepublishOnly":"npm run clean && npm run build"},"_npmUser":{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"},"repository":{"url":"git+https://github.com/0xBridge/bitcoin-vault.git#frontend","type":"git"},"_npmVersion":"9.6.7","description":"Bitcoin-psbt implementation TypeScript library supporting ESM and CJS.","directories":{},"_nodeVersion":"20.3.0","dependencies":{"zlib":"^1.0.5","axios":"^1.7.9","bip32":"^5.0.0-rc.0","bip39":"^3.1.0","ecpair":"^3.0.0-rc.0","bitcoinjs-lib":"^6.1.7","tiny-secp256k1":"^2.2.3","@0xbridge/bitcoin-vault":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","ts-node":"^10.9.2","@types/jest":"^29.5.14","@types/node":"^22.10.2"},"_npmOperationalInternal":{"tmp":"tmp/bitcoin-vault-trial_1.0.2_1736422448849_0.05142645489323461","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@0xbridge/bitcoin-vault-trial","version":"1.0.3","description":"Bitcoin-psbt implementation TypeScript library supporting ESM and CJS.","main":"dist/cjs/index.js","module":"dist/esm/index.js","types":"dist/types/index.d.ts","exports":{"import":"./dist/esm/index.js","require":"./dist/cjs/index.js","types":"./dist/types/index.d.ts"},"repository":{"type":"git","url":"git+https://github.com/0xBridge/bitcoin-vault.git#frontend"},"scripts":{"build:esm":"tsc --project tsconfig.esm.json","build:cjs":"tsc --project tsconfig.cjs.json","build:types":"tsc --project tsconfig.types.json","build":"npm run build:esm && npm run build:cjs && npm run build:types","clean":"rimraf dist","start":"ts-node src/index.ts","prepublishOnly":"npm run clean && npm run build","test":"jest --coverage"},"keywords":["typescript","esm","cjs","library","bitcoinjs"],"dependencies":{"@0xbridge/bitcoin-vault":"^1.0.0","axios":"^1.7.9","bip32":"^5.0.0-rc.0","bip39":"^3.1.0","bitcoinjs-lib":"^6.1.7","ecpair":"^3.0.0-rc.0","tiny-secp256k1":"^2.2.3","zlib":"^1.0.5"},"author":{"name":"0xBridge"},"devDependencies":{"@types/jest":"^29.5.14","@types/node":"^22.10.2","jest":"^29.7.0","rimraf":"^6.0.1","ts-jest":"^29.2.5","ts-node":"^10.9.2"},"gitHead":"b571d5c0d253e2676dfce0570c3c09dd0d932911","bugs":{"url":"https://github.com/0xBridge/bitcoin-vault/issues"},"homepage":"https://github.com/0xBridge/bitcoin-vault/tree/frontend#readme","_id":"@0xbridge/bitcoin-vault-trial@1.0.3","_nodeVersion":"20.3.0","_npmVersion":"9.6.7","dist":{"integrity":"sha512-h4ACzogeew/ctvR3gL/wECdFUIkm6OCyW0IIlRmIV9qvtqYIs7XDt5ZjreSRGaF7Ar9qSoWWNtin3z7nhf8Lew==","shasum":"1e37ab0c1a79401178e7ca5a1d8b7704256cbd37","tarball":"https://registry.npmjs.org/@0xbridge/bitcoin-vault-trial/-/bitcoin-vault-trial-1.0.3.tgz","fileCount":20,"unpackedSize":52739,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF0YzYl1ytKAkgzA0a7LlyNiJwSO6pX1pILha4Of1UqgAiAK4wcnENzNkWgXN/V5Ckq6k3sC9azZlcbWiZIeDqhcOw=="}]},"_npmUser":{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"},"directories":{},"maintainers":[{"name":"bakii_agl","email":"satyam0499@gmail.com"},{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bitcoin-vault-trial_1.0.3_1736488540725_0.8464932063256345"},"_hasShrinkwrap":false}},"time":{"created":"2025-01-09T05:01:15.299Z","modified":"2025-01-10T05:55:41.105Z","1.0.0":"2025-01-09T05:01:15.616Z","1.0.1":"2025-01-09T05:19:11.936Z","1.0.2":"2025-01-09T11:34:09.058Z","1.0.3":"2025-01-10T05:55:40.903Z"},"bugs":{"url":"https://github.com/0xBridge/bitcoin-vault/issues"},"author":{"name":"0xBridge"},"homepage":"https://github.com/0xBridge/bitcoin-vault/tree/frontend#readme","keywords":["typescript","esm","cjs","library","bitcoinjs"],"repository":{"type":"git","url":"git+https://github.com/0xBridge/bitcoin-vault.git#frontend"},"description":"Bitcoin-psbt implementation TypeScript library supporting ESM and CJS.","maintainers":[{"name":"bakii_agl","email":"satyam0499@gmail.com"},{"name":"yogendra_1701","email":"f20190287g@alumni.bits-pilani.ac.in"}],"readme":"# @0xbridge/bitcoin-vault\n\n**@0xbridge/bitcoin-vault** is a powerful TypeScript library for creating and signing Bitcoin PSBT transactions, working with Taproot scripts (such as multisig and timelock), and fetching UTXOs via public APIs. It is optimized for Testnet but can be configured for Mainnet or custom networks.\n\n---\n\n## Features\n\n- **PSBT Construction**: Effortlessly build and sign Bitcoin transactions.\n- **Taproot Utilities**: Support for creating advanced Taproot scripts for multisig and timelock paths.\n- **UTXO Fetching**: Retrieve unspent outputs with automatic fallback using Blockstream or Mempool APIs.\n- **Fee Estimation**: Fetch recommended sat/vB fee rates from public endpoints.\n- **TypeScript Support**: Comprehensive type definitions for safer and easier development.\n\n---\n\n## Project Structure\n\n```plaintext\n.\n├── src/                # Source code\n│   ├── constants.ts    # API endpoints, OP_RETURN messages, and common constants\n│   ├── transaction.ts  # Core class for creating and signing PSBTs\n│   ├── taproot.ts      # Utilities for building Taproot scripts (multisig, timelock, etc.)\n│   ├── utils.ts        # Helper functions like fetchFeeRate, fetchUtxos, and selectUtxos\n│   ├── types.ts        # Type definitions for UTXOs, configurations, and more\n│   └── index.ts        # Main entry point exporting core modules\n│\n├── package.json        # Project metadata and dependencies\n├── tsconfig.*.json     # TypeScript configurations for different builds\n├── README.md           # Documentation (this file)\n```\n\nNote: The `dist/` folder is auto-generated after running the build script (`npm run build`).\n\n---\n\n## Installation\n\nInstall the library using your preferred package manager:\n\n```bash\nnpm install @0xbridge/bitcoin-vault\n```\n\nor\n\n```bash\nyarn add @0xbridge/bitcoin-vault\n```\n\n---\n\n## Usage\n\nBelow are examples demonstrating common use cases. For detailed usage, refer to TypeScript definitions or documentation generated by tools like Typedoc.\n\n### 1. Create and Sign a PSBT\n\n```typescript\nimport { TransactionService } from '@0xbridge/bitcoin-vault';\n\nconst userAddress = 'tb1qsomeTestnetAddr...';\nconst userWif = 'cYourPrivateKey...';\nconst lockingAddress = 'tb1qLockingAddress...';\nconst lockingAmount = 10_000; // Satoshis\nconst oxbridgeAmount = 5_000; // Satoshis\n\n(async () => {\n  try {\n    const txService = new TransactionService();\n    const { txid, rawTxHex } = await txService.createAndSignTransaction(\n      userAddress,\n      userWif,\n      lockingAddress,\n      lockingAmount,\n      oxbridgeAmount,\n      metadataParams,\n      5 // Optional fee rate (sat/vB)\n\n    );\n\n    console.log('Transaction broadcast successfully!');\n    console.log('TXID:', txid);\n    console.log('Raw Transaction Hex:', rawTxHex);\n  } catch (err) {\n    console.error('Error creating or signing transaction:', err);\n  }\n})();\n```\n\n### 2. Create a Taproot Script (Multisig + Timelock)\n\n```typescript\nimport { createTaprootScriptWithMultisigAndTimelock, createTaprootOutput } from '@0xbridge/bitcoin-vault';\nimport { generateRandomKeyPair } from '@0xbridge/bitcoin-vault';\nimport * as bitcoin from 'bitcoinjs-lib';\n\nconst userKeyPair = generateRandomKeyPair();\nconst avsKeyPair = generateRandomKeyPair();\nconst locktime = 500_000; // Block height or timestamp\n\nconst { multisigScript, timelockScript } = createTaprootScriptWithMultisigAndTimelock(\n  userKeyPair.publicKey,\n  avsKeyPair.publicKey,\n  locktime\n);\n\nconst { address: taprootAddress } = createTaprootOutput(\n  userKeyPair.publicKey, // Internal key\n  multisigScript,\n  timelockScript,\n  bitcoin.networks.testnet\n);\n\nconsole.log('Generated Taproot Address:', taprootAddress);\n```\n\n### 3. Fetch UTXOs and Fee Rates\n\n```typescript\nimport { fetchUtxos, fetchFeeRate, selectUtxos } from '@0xbridge/bitcoin-vault';\n\nconst apiConfig = {\n  primary: 'https://blockstream.info/testnet/api',\n  fallback: 'https://mempool.space/testnet/api',\n};\n\n(async () => {\n  try {\n    const utxos = await fetchUtxos(apiConfig, 'tb1qsomeTestnetAddr...');\n    console.log('Fetched UTXOs:', utxos);\n\n    const feeRate = await fetchFeeRate(apiConfig);\n    console.log('Recommended fee rate (sat/vB):', feeRate);\n\n    const needed = 20_000; // Satoshis\n    const { chosenUtxos, totalAmount } = selectUtxos(utxos, needed);\n    console.log('Selected UTXOs:', chosenUtxos);\n    console.log('Total Amount Found:', totalAmount);\n  } catch (err) {\n    console.error('Error fetching UTXOs or fee rates:', err);\n  }\n})();\n```\n\n---\n\n## Additional Information\n\n- **TypeScript Support**: Fully typed definitions for all library functions.\n- **Networking**: Configurable API endpoints for UTXO fetching and fee estimation.\n- **Fallbacks**: Automatically switches to a fallback API if the primary endpoint fails.\n\n","readmeFilename":"README.md"}