@gobob/bob-sdk 2.0.0 → 2.1.0

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.
@@ -1,15 +1,19 @@
1
1
  import { GatewayQuoteParams } from "./types";
2
2
  import { Token as TokenInfo } from "./tokens";
3
+ export declare enum Chains {
4
+ Bitcoin = "bitcoin",
5
+ BOB = "bob",
6
+ BOBSepolia = "bobsepolia"
7
+ }
3
8
  type EvmAddress = string;
4
9
  type GatewayQuote = {
5
10
  gatewayAddress: EvmAddress;
6
11
  dustThreshold: number;
7
12
  satoshis: number;
8
13
  fee: number;
9
- gratuity: string;
10
14
  bitcoinAddress: string;
11
15
  txProofDifficultyFactor: number;
12
- strategyAddress: EvmAddress | null;
16
+ strategyAddress?: EvmAddress;
13
17
  };
14
18
  type GatewayOrderResponse = {
15
19
  gatewayAddress: EvmAddress;
@@ -21,7 +25,12 @@ type GatewayOrderResponse = {
21
25
  satoshis: number;
22
26
  fee: number;
23
27
  txProofDifficultyFactor: number;
28
+ strategyAddress?: EvmAddress;
29
+ satsToConvertToEth: number;
24
30
  };
31
+ type GatewayOrder = Omit<GatewayOrderResponse & {
32
+ gasRefill: number;
33
+ }, "satsToConvertToEth">;
25
34
  type GatewayCreateOrderResponse = {
26
35
  uuid: string;
27
36
  opReturnHash: string;
@@ -29,16 +38,18 @@ type GatewayCreateOrderResponse = {
29
38
  type GatewayStartOrderResult = GatewayCreateOrderResponse & {
30
39
  bitcoinAddress: string;
31
40
  satoshis: number;
41
+ psbtBase64?: string;
32
42
  };
33
43
  export declare const MAINNET_GATEWAY_BASE_URL = "https://gateway-api-mainnet.gobob.xyz";
34
44
  export declare const TESTNET_GATEWAY_BASE_URL = "https://gateway-api-testnet.gobob.xyz";
35
45
  export declare class GatewayApiClient {
46
+ private network;
36
47
  private baseUrl;
37
48
  constructor(networkOrUrl?: string);
38
49
  getQuote(params: GatewayQuoteParams): Promise<GatewayQuote>;
39
50
  startOrder(gatewayQuote: GatewayQuote, params: GatewayQuoteParams): Promise<GatewayStartOrderResult>;
40
- finalizeOrder(orderUuid: string, bitcoinTx: string): Promise<void>;
41
- getOrders(userAddress: EvmAddress): Promise<GatewayOrderResponse[]>;
51
+ finalizeOrder(uuid: string, bitcoinTxHex: string): Promise<void>;
52
+ getOrders(userAddress: EvmAddress): Promise<GatewayOrder[]>;
42
53
  getTokens(): Promise<EvmAddress[]>;
43
54
  getTokensInfo(): Promise<TokenInfo[]>;
44
55
  }
@@ -1,17 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GatewayApiClient = exports.TESTNET_GATEWAY_BASE_URL = exports.MAINNET_GATEWAY_BASE_URL = void 0;
3
+ exports.GatewayApiClient = exports.TESTNET_GATEWAY_BASE_URL = exports.MAINNET_GATEWAY_BASE_URL = exports.Chains = void 0;
4
4
  const ethers_1 = require("ethers");
5
5
  const tokens_1 = require("./tokens");
6
+ const wallet_1 = require("../wallet");
7
+ var Chains;
8
+ (function (Chains) {
9
+ Chains["Bitcoin"] = "bitcoin";
10
+ Chains["BOB"] = "bob";
11
+ Chains["BOBSepolia"] = "bobsepolia";
12
+ })(Chains || (exports.Chains = Chains = {}));
13
+ ;
6
14
  exports.MAINNET_GATEWAY_BASE_URL = "https://gateway-api-mainnet.gobob.xyz";
7
15
  exports.TESTNET_GATEWAY_BASE_URL = "https://gateway-api-testnet.gobob.xyz";
16
+ var Network;
17
+ (function (Network) {
18
+ Network[Network["Mainnet"] = 0] = "Mainnet";
19
+ Network[Network["Testnet"] = 1] = "Testnet";
20
+ })(Network || (Network = {}));
8
21
  class GatewayApiClient {
9
22
  constructor(networkOrUrl = "mainnet") {
10
23
  switch (networkOrUrl) {
11
- case "mainnet" || "bob":
24
+ case "mainnet":
25
+ case "bob":
26
+ this.network = Network.Mainnet;
12
27
  this.baseUrl = exports.MAINNET_GATEWAY_BASE_URL;
13
28
  break;
14
- case "testnet" || "bob-sepolia":
29
+ case "testnet":
30
+ case "bobSepolia":
31
+ this.network = Network.Testnet;
15
32
  this.baseUrl = exports.TESTNET_GATEWAY_BASE_URL;
16
33
  break;
17
34
  default:
@@ -19,13 +36,23 @@ class GatewayApiClient {
19
36
  }
20
37
  }
21
38
  async getQuote(params) {
22
- const isMainnet = params.toChain == "bob" || params.toChain == 60808;
39
+ const isMainnet = params.toChain === 60808 || typeof params.toChain === "string" && params.toChain.toLowerCase() === Chains.BOB;
40
+ const isTestnet = params.toChain === 808813 || typeof params.toChain === "string" && params.toChain.toLowerCase() === Chains.BOBSepolia;
41
+ const toToken = params.toToken.toLowerCase();
23
42
  let outputToken = "";
24
- if (params.toToken.startsWith("0x")) {
25
- outputToken = params.toToken;
43
+ if (toToken.startsWith("0x")) {
44
+ outputToken = toToken;
26
45
  }
27
- else if (params.toToken in tokens_1.TOKENS_INFO) {
28
- outputToken = isMainnet ? tokens_1.TOKENS_INFO[params.toToken].bob : tokens_1.TOKENS_INFO[params.toToken].bobSepolia;
46
+ else if (toToken in tokens_1.SYMBOL_LOOKUP) {
47
+ if (isMainnet && this.network === Network.Mainnet) {
48
+ outputToken = tokens_1.SYMBOL_LOOKUP[toToken].bob;
49
+ }
50
+ else if (isTestnet && this.network === Network.Testnet) {
51
+ outputToken = tokens_1.SYMBOL_LOOKUP[toToken].bobSepolia;
52
+ }
53
+ else {
54
+ throw new Error('Unknown network');
55
+ }
29
56
  }
30
57
  else {
31
58
  throw new Error('Unknown output token');
@@ -43,10 +70,10 @@ class GatewayApiClient {
43
70
  const request = {
44
71
  gatewayAddress: gatewayQuote.gatewayAddress,
45
72
  strategyAddress: gatewayQuote.strategyAddress,
46
- satsToConvertToEth: params.gasRefill,
73
+ satsToConvertToEth: params.gasRefill || 0,
47
74
  userAddress: params.toUserAddress,
48
- gatewayExtraData: null,
49
- strategyExtraData: null,
75
+ gatewayExtraData: undefined,
76
+ strategyExtraData: undefined,
50
77
  satoshis: gatewayQuote.satoshis,
51
78
  };
52
79
  const response = await fetch(`${this.baseUrl}/order`, {
@@ -64,21 +91,26 @@ class GatewayApiClient {
64
91
  if (data.opReturnHash != calculateOpReturnHash(request)) {
65
92
  throw new Error('Invalid OP_RETURN hash');
66
93
  }
94
+ let psbtBase64;
95
+ if (params.fromUserAddress && typeof params.fromChain === "string" && params.fromChain.toLowerCase() === Chains.Bitcoin) {
96
+ psbtBase64 = await (0, wallet_1.createBitcoinPsbt)(params.fromUserAddress, gatewayQuote.bitcoinAddress, gatewayQuote.satoshis, params.fromUserPublicKey, data.opReturnHash, gatewayQuote.txProofDifficultyFactor);
97
+ }
67
98
  return {
68
99
  uuid: data.uuid,
69
100
  opReturnHash: data.opReturnHash,
70
101
  bitcoinAddress: gatewayQuote.bitcoinAddress,
71
102
  satoshis: gatewayQuote.satoshis,
103
+ psbtBase64,
72
104
  };
73
105
  }
74
- async finalizeOrder(orderUuid, bitcoinTx) {
75
- const response = await fetch(`${this.baseUrl}/order/${orderUuid}`, {
106
+ async finalizeOrder(uuid, bitcoinTxHex) {
107
+ const response = await fetch(`${this.baseUrl}/order/${uuid}`, {
76
108
  method: 'PATCH',
77
109
  headers: {
78
110
  'Content-Type': 'application/json',
79
111
  Accept: 'application/json'
80
112
  },
81
- body: JSON.stringify({ bitcoinTx: bitcoinTx })
113
+ body: JSON.stringify({ bitcoinTx: bitcoinTxHex })
82
114
  });
83
115
  if (!response.ok) {
84
116
  throw new Error('Failed to update order');
@@ -92,7 +124,8 @@ class GatewayApiClient {
92
124
  Accept: 'application/json'
93
125
  }
94
126
  });
95
- return response.json();
127
+ const orders = await response.json();
128
+ return orders.map(order => { return { gasRefill: order.satsToConvertToEth, ...order }; });
96
129
  }
97
130
  async getTokens() {
98
131
  const response = await fetch(`${this.baseUrl}/tokens`, {
@@ -120,8 +153,8 @@ function calculateOpReturnHash(req) {
120
153
  req.strategyAddress || ethers_1.ethers.ZeroAddress,
121
154
  req.satsToConvertToEth,
122
155
  req.userAddress,
123
- req.gatewayExtraData,
124
- req.strategyExtraData
156
+ req.gatewayExtraData || "0x",
157
+ req.strategyExtraData || "0x"
125
158
  ]));
126
159
  }
127
160
  //# sourceMappingURL=client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/gateway/client.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ export type Token = {
4
4
  bob: string;
5
5
  bobSepolia: string;
6
6
  };
7
- export declare const TOKENS_INFO: {
7
+ export declare const SYMBOL_LOOKUP: {
8
8
  [key: string]: Token;
9
9
  };
10
10
  export declare const ADDRESS_LOOKUP: {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ADDRESS_LOOKUP = exports.TOKENS_INFO = void 0;
3
+ exports.ADDRESS_LOOKUP = exports.SYMBOL_LOOKUP = void 0;
4
4
  const TOKENS = {
5
5
  "tBTC": {
6
6
  name: "tBTC v2",
@@ -45,9 +45,9 @@ const TOKENS = {
45
45
  bobSepolia: "0xc4229678b65e2D9384FDf96F2E5D512d6eeC0C77",
46
46
  }
47
47
  };
48
- exports.TOKENS_INFO = {};
48
+ exports.SYMBOL_LOOKUP = {};
49
49
  exports.ADDRESS_LOOKUP = {};
50
- for (const key in exports.TOKENS_INFO) {
50
+ for (const key in TOKENS) {
51
51
  const token = TOKENS[key];
52
52
  const lowerBob = token.bob.toLowerCase();
53
53
  const lowerBobSepolia = token.bobSepolia.toLowerCase();
@@ -57,7 +57,7 @@ for (const key in exports.TOKENS_INFO) {
57
57
  bob: lowerBob,
58
58
  bobSepolia: lowerBobSepolia,
59
59
  };
60
- exports.TOKENS_INFO[key] = lowercasedToken;
60
+ exports.SYMBOL_LOOKUP[key.toLowerCase()] = lowercasedToken;
61
61
  exports.ADDRESS_LOOKUP[lowerBob] = lowercasedToken;
62
62
  exports.ADDRESS_LOOKUP[lowerBobSepolia] = lowercasedToken;
63
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/gateway/tokens.ts"],"names":[],"mappings":";;;AAOA,MAAM,MAAM,GAA6B;IACrC,MAAM,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,4CAA4C;KAC3D;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,4CAA4C;KAC3D;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,SAAS,EAAE;QACP,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,EAAE;QACP,UAAU,EAAE,4CAA4C;KAC3D;CACJ,CAAC;AAEW,QAAA,WAAW,GAA6B,EAAE,CAAC;AAC3C,QAAA,cAAc,GAAiC,EAAE,CAAC;AAE/D,KAAK,MAAM,GAAG,IAAI,mBAAW,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IAEvD,MAAM,eAAe,GAAU;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,QAAQ;QACb,UAAU,EAAE,eAAe;KAC9B,CAAC;IAEF,mBAAW,CAAC,GAAG,CAAC,GAAG,eAAe,CAAC;IACnC,sBAAc,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;IAC3C,sBAAc,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AACtD,CAAC"}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../src/gateway/tokens.ts"],"names":[],"mappings":";;;AAOA,MAAM,MAAM,GAA6B;IACrC,MAAM,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,4CAA4C;KAC3D;IACD,MAAM,EAAE;QACJ,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,4CAA4C;KAC3D;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,gBAAgB;QACtB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,QAAQ;QAChB,GAAG,EAAE,4CAA4C;QACjD,UAAU,EAAE,EAAE;KACjB;IACD,SAAS,EAAE;QACP,IAAI,EAAE,cAAc;QACpB,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,EAAE;QACP,UAAU,EAAE,4CAA4C;KAC3D;CACJ,CAAC;AAGW,QAAA,aAAa,GAA6B,EAAE,CAAC;AAC7C,QAAA,cAAc,GAAiC,EAAE,CAAC;AAE/D,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;IACvB,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAE1B,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;IAEvD,MAAM,eAAe,GAAU;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,QAAQ;QACb,UAAU,EAAE,eAAe;KAC9B,CAAC;IAEF,qBAAa,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,GAAG,eAAe,CAAC;IACnD,sBAAc,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC;IAC3C,sBAAc,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC;AACtD,CAAC"}
@@ -1,11 +1,12 @@
1
1
  type ChainSlug = string | number;
2
2
  type TokenSymbol = string;
3
3
  export interface GatewayQuoteParams {
4
- fromChain: ChainSlug;
4
+ fromChain?: ChainSlug;
5
5
  toChain: ChainSlug;
6
- fromToken: TokenSymbol;
6
+ fromToken?: TokenSymbol;
7
7
  toToken: TokenSymbol;
8
- fromUserAddress: string;
8
+ fromUserAddress?: string;
9
+ fromUserPublicKey?: string;
9
10
  toUserAddress: string;
10
11
  amount: number | string;
11
12
  maxSlippage?: number;
@@ -1,2 +1,2 @@
1
- export * from "./address";
2
1
  export * from "./utxo";
2
+ export { validate as isValidBtcAddress } from 'bitcoin-address-validation';
@@ -14,6 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./address"), exports);
17
+ exports.isValidBtcAddress = void 0;
18
18
  __exportStar(require("./utxo"), exports);
19
+ var bitcoin_address_validation_1 = require("bitcoin-address-validation");
20
+ Object.defineProperty(exports, "isValidBtcAddress", { enumerable: true, get: function () { return bitcoin_address_validation_1.validate; } });
19
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,yCAAuB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wallet/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,yCAAuB;AAEvB,yEAA2E;AAAlE,+HAAA,QAAQ,OAAqB"}
@@ -1,7 +1,7 @@
1
1
  import { Transaction } from '@scure/btc-signer';
2
- import { AddressType } from 'bitcoin-address-validation';
2
+ import { AddressType, Network } from 'bitcoin-address-validation';
3
3
  import { UTXO } from '../esplora';
4
- export type BitcoinNetworkName = 'mainnet' | 'testnet';
4
+ export type BitcoinNetworkName = Exclude<Network, "regtest">;
5
5
  export declare const getBtcNetwork: (name: BitcoinNetworkName) => {
6
6
  bech32: string;
7
7
  pubKeyHash: number;
@@ -19,5 +19,5 @@ export interface Input {
19
19
  };
20
20
  nonWitnessUtxo?: Uint8Array;
21
21
  }
22
- export declare function createTransfer(network: BitcoinNetworkName, addressType: AddressType, fromAddress: string, toAddress: string, amount: number, publicKey?: string, opReturnData?: string, confirmationTarget?: number): Promise<Transaction>;
23
- export declare function getInputFromUtxoAndTx(network: BitcoinNetworkName, utxo: UTXO, transaction: Transaction, addressType: AddressType, pubKey?: string): Input;
22
+ export declare function createBitcoinPsbt(fromAddress: string, toAddress: string, amount: number, publicKey?: string, opReturnData?: string, confirmationTarget?: number): Promise<string>;
23
+ export declare function getInputFromUtxoAndTx(network: BitcoinNetworkName, utxo: UTXO, transaction: Transaction, addressType: AddressType, publicKey?: string): Input;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getBtcNetwork = void 0;
4
- exports.createTransfer = createTransfer;
4
+ exports.createBitcoinPsbt = createBitcoinPsbt;
5
5
  exports.getInputFromUtxoAndTx = getInputFromUtxoAndTx;
6
6
  const btc_signer_1 = require("@scure/btc-signer");
7
7
  const base_1 = require("@scure/base");
@@ -15,8 +15,18 @@ const getBtcNetwork = (name) => {
15
15
  return bitcoinNetworks[name];
16
16
  };
17
17
  exports.getBtcNetwork = getBtcNetwork;
18
- async function createTransfer(network, addressType, fromAddress, toAddress, amount, publicKey, opReturnData, confirmationTarget = 3) {
19
- const esploraClient = new esplora_1.DefaultEsploraClient(network);
18
+ async function createBitcoinPsbt(fromAddress, toAddress, amount, publicKey, opReturnData, confirmationTarget = 3) {
19
+ const addressInfo = (0, bitcoin_address_validation_1.getAddressInfo)(fromAddress);
20
+ const network = addressInfo.network;
21
+ if (network === "regtest") {
22
+ throw new Error("Bitcoin regtest not supported");
23
+ }
24
+ if (addressInfo.type === (bitcoin_address_validation_1.AddressType.p2sh || bitcoin_address_validation_1.AddressType.p2wsh)) {
25
+ if (!publicKey) {
26
+ throw new Error('Public key is required to spend from the selected address type');
27
+ }
28
+ }
29
+ const esploraClient = new esplora_1.DefaultEsploraClient(addressInfo.network);
20
30
  const [confirmedUtxos, feeRate] = await Promise.all([
21
31
  esploraClient.getAddressUtxos(fromAddress),
22
32
  esploraClient.getFeeEstimate(confirmationTarget)
@@ -28,7 +38,7 @@ async function createTransfer(network, addressType, fromAddress, toAddress, amou
28
38
  await Promise.all(confirmedUtxos.map(async (utxo) => {
29
39
  const hex = await esploraClient.getTransactionHex(utxo.txid);
30
40
  const transaction = btc_signer_1.Transaction.fromRaw(Buffer.from(hex, 'hex'), { allowUnknownOutputs: true });
31
- const input = getInputFromUtxoAndTx(network, utxo, transaction, addressType, publicKey);
41
+ const input = getInputFromUtxoAndTx(network, utxo, transaction, addressInfo.type, publicKey);
32
42
  possibleInputs.push(input);
33
43
  }));
34
44
  const outputs = [
@@ -58,13 +68,16 @@ async function createTransfer(network, addressType, fromAddress, toAddress, amou
58
68
  if (!transaction || !transaction.tx) {
59
69
  throw new Error('Failed to create transaction. Do you have enough funds?');
60
70
  }
61
- return transaction.tx;
71
+ return base_1.base64.encode(transaction.tx.toPSBT(0));
62
72
  }
63
- function getInputFromUtxoAndTx(network, utxo, transaction, addressType, pubKey) {
73
+ function getInputFromUtxoAndTx(network, utxo, transaction, addressType, publicKey) {
64
74
  const output = transaction.getOutput(utxo.vout);
65
75
  let redeemScript = {};
66
76
  if (addressType === bitcoin_address_validation_1.AddressType.p2sh) {
67
- const inner = (0, btc_signer_1.p2wpkh)(Buffer.from(pubKey, 'hex'), (0, exports.getBtcNetwork)(network));
77
+ if (!publicKey) {
78
+ throw new Error("Bitcoin P2SH not supported without public key");
79
+ }
80
+ const inner = (0, btc_signer_1.p2wpkh)(Buffer.from(publicKey, 'hex'), (0, exports.getBtcNetwork)(network));
68
81
  redeemScript = (0, btc_signer_1.p2sh)(inner);
69
82
  }
70
83
  const scriptMixin = {
@@ -1 +1 @@
1
- {"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../src/wallet/utxo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utxo.js","sourceRoot":"","sources":["../../src/wallet/utxo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gobob/bob-sdk",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "scripts": {
@@ -18,10 +18,11 @@
18
18
  "README.md"
19
19
  ],
20
20
  "devDependencies": {
21
- "@types/node": "^22.0.0",
21
+ "@types/node": "^22.5.0",
22
22
  "@types/yargs": "^17.0.33",
23
23
  "ecpair": "^2.1.0",
24
24
  "mocha": "^10.7.3",
25
+ "nock": "^14.0.0-beta.11",
25
26
  "tiny-secp256k1": "^2.2.3",
26
27
  "ts-node": "^10.0.0",
27
28
  "typescript": "^5.5.4",
@@ -1,2 +0,0 @@
1
- import { BitcoinNetworkName } from "./utxo";
2
- export declare const isValidBtcAddress: (network: BitcoinNetworkName, address: string) => boolean;
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isValidBtcAddress = void 0;
4
- const BTC_MAINNET_REGEX = /\b([13][a-km-zA-HJ-NP-Z1-9]{25,34}|bc1[ac-hj-np-zAC-HJ-NP-Z02-9]{11,71})\b/;
5
- const BTC_TESTNET_REGEX = /\b([2mn][a-km-zA-HJ-NP-Z1-9]{25,34}|tb1[ac-hj-np-zAC-HJ-NP-Z02-9]{11,71})\b/;
6
- const mainnetRegex = new RegExp(BTC_MAINNET_REGEX);
7
- const testnetRegex = new RegExp(BTC_TESTNET_REGEX);
8
- const isValidBtcAddress = (network, address) => {
9
- switch (network) {
10
- case 'mainnet':
11
- return mainnetRegex.test(address);
12
- case 'testnet':
13
- return testnetRegex.test(address);
14
- default:
15
- throw new Error(`Invalid bitcoin network configured: ${network}. Valid values are: mainnet | testnet.`);
16
- }
17
- };
18
- exports.isValidBtcAddress = isValidBtcAddress;
19
- //# sourceMappingURL=address.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/wallet/address.ts"],"names":[],"mappings":";;;AAEA,MAAM,iBAAiB,GAAG,4EAA4E,CAAC;AACvG,MAAM,iBAAiB,GAAG,6EAA6E,CAAC;AAExG,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACnD,MAAM,YAAY,GAAG,IAAI,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAE5C,MAAM,iBAAiB,GAAG,CAAC,OAA2B,EAAE,OAAe,EAAW,EAAE;IACzF,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,uCAAuC,OAAO,wCAAwC,CAAC,CAAC;IAC5G,CAAC;AACH,CAAC,CAAC;AATW,QAAA,iBAAiB,qBAS5B"}