@omnisat/lasereyes 0.0.5 → 0.0.6

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/dist/index.js CHANGED
@@ -60,15 +60,6 @@ var __async = (__this, __arguments, generator) => {
60
60
  step((generator = generator.apply(__this, __arguments)).next());
61
61
  });
62
62
  };
63
- var __forAwait = (obj, it, method) => {
64
- it = obj[Symbol.asyncIterator];
65
- method = (key, fn) => (fn = obj[key]) && (it[key] = (arg) => new Promise((resolve, reject, done) => {
66
- arg = fn.call(obj, arg);
67
- done = arg.done;
68
- return Promise.resolve(arg.value).then((value) => resolve({ value, done }), reject);
69
- }));
70
- return it ? it.call(obj) : (obj = obj[Symbol.iterator](), it = {}, method("next"), method("return"), it);
71
- };
72
63
 
73
64
  // src/index.tsx
74
65
  var src_exports = {};
@@ -78,6 +69,8 @@ __export(src_exports, {
78
69
  LEATHER_TESTNET: () => LEATHER_TESTNET,
79
70
  LaserEyesProvider: () => LaserEyesProvider,
80
71
  MAINNET: () => MAINNET,
72
+ MEMPOOL_SPACE_TESTNET_URL: () => MEMPOOL_SPACE_TESTNET_URL,
73
+ MEMPOOL_SPACE_URL: () => MEMPOOL_SPACE_URL,
81
74
  OYL: () => OYL,
82
75
  P2PKH: () => P2PKH,
83
76
  P2SH: () => P2SH,
@@ -96,22 +89,25 @@ __export(src_exports, {
96
89
  XVERSE_NETWORK: () => XVERSE_NETWORK,
97
90
  XVERSE_TESTNET: () => XVERSE_TESTNET,
98
91
  createConfig: () => createConfig,
92
+ findOrdinalsAddress: () => findOrdinalsAddress,
93
+ findPaymentAddress: () => findPaymentAddress,
94
+ getBTCBalance: () => getBTCBalance,
95
+ getBitcoinNetwork: () => getBitcoinNetwork,
99
96
  getLeatherNetwork: () => getLeatherNetwork,
97
+ getMempoolSpaceUrl: () => getMempoolSpaceUrl,
100
98
  getNetworkForLeather: () => getNetworkForLeather,
101
99
  getNetworkForUnisat: () => getNetworkForUnisat,
102
100
  getNetworkForXverse: () => getNetworkForXverse,
103
101
  getUnisatNetwork: () => getUnisatNetwork,
104
102
  getXverseNetwork: () => getXverseNetwork,
103
+ isBase64: () => isBase64,
104
+ isHex: () => isHex,
105
+ satoshisToBTC: () => satoshisToBTC,
105
106
  useLaserEyes: () => useLaserEyes
106
107
  });
107
108
  module.exports = __toCommonJS(src_exports);
108
109
 
109
- // src/consts/wallets.ts
110
- var OYL = "oyl";
111
- var UNISAT = "unisat";
112
- var XVERSE = "xverse";
113
- var PHANTOM = "phantom";
114
- var LEATHER = "leather";
110
+ // src/consts/networks.ts
115
111
  var XVERSE_NETWORK = "Mainnet";
116
112
  var UNISAT_MAINNET = "livenet";
117
113
  var UNISAT_TESTNET = "testnet";
@@ -164,6 +160,16 @@ var getNetworkForLeather = (network) => {
164
160
  return TESTNET;
165
161
  return MAINNET;
166
162
  };
163
+ var MEMPOOL_SPACE_URL = "https://mempool.space";
164
+ var MEMPOOL_SPACE_TESTNET_URL = "https://mempool.space/testnet";
165
+ var getMempoolSpaceUrl = (network) => network === TESTNET ? MEMPOOL_SPACE_TESTNET_URL : MEMPOOL_SPACE_URL;
166
+
167
+ // src/consts/wallets.ts
168
+ var OYL = "oyl";
169
+ var UNISAT = "unisat";
170
+ var XVERSE = "xverse";
171
+ var PHANTOM = "phantom";
172
+ var LEATHER = "leather";
167
173
  var P2TR = "p2tr";
168
174
  var P2PKH = "p2pkh";
169
175
  var P2WPKH = "p2wpkh";
@@ -208,40 +214,9 @@ var createConfig = (config) => {
208
214
  // src/providers/LaserEyesProvider.tsx
209
215
  var import_react = require("react");
210
216
  var bitcoin2 = __toESM(require("bitcoinjs-lib"));
211
- var import_sats_connect = require("sats-connect");
212
217
 
213
218
  // src/consts/settings.ts
214
219
  var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
215
- var NETWORK = MAINNET;
216
-
217
- // src/providers/LaserEyesProvider.tsx
218
- var import_address = require("bitcoinjs-lib/src/address");
219
- var import_usehooks_ts = require("usehooks-ts");
220
-
221
- // src/lib/helpers.ts
222
- var bitcoin = __toESM(require("bitcoinjs-lib"));
223
- var getBitcoinNetwork = (network) => {
224
- if (network === "testnet") {
225
- return bitcoin.networks.testnet;
226
- } else if (network === "regtest") {
227
- return bitcoin.networks.regtest;
228
- } else {
229
- return bitcoin.networks.bitcoin;
230
- }
231
- };
232
- var findOrdinalsAddress = (addresses) => {
233
- return addresses.find(
234
- ({ purpose }) => purpose === "ordinals"
235
- );
236
- };
237
- var findPaymentAddress = (addresses) => {
238
- return addresses.find(
239
- ({ purpose }) => purpose === "payment"
240
- );
241
- };
242
-
243
- // src/providers/LaserEyesProvider.tsx
244
- var import_jsx_runtime = require("react/jsx-runtime");
245
220
  var initialWalletContext = {
246
221
  hasOyl: false,
247
222
  hasUnisat: false,
@@ -253,11 +228,7 @@ var initialWalletContext = {
253
228
  address: "",
254
229
  paymentAddress: "",
255
230
  paymentPublicKey: "",
256
- balance: {
257
- confirmed: 0,
258
- unconfirmed: 0,
259
- total: 0
260
- },
231
+ balance: void 0,
261
232
  network: MAINNET,
262
233
  library: null,
263
234
  provider: null,
@@ -280,6 +251,9 @@ var initialWalletContext = {
280
251
  getBalance: () => __async(void 0, null, function* () {
281
252
  return "";
282
253
  }),
254
+ getInscriptions: () => __async(void 0, null, function* () {
255
+ return [];
256
+ }),
283
257
  sendBTC: (to, amount) => __async(void 0, null, function* () {
284
258
  return "";
285
259
  }),
@@ -297,6 +271,57 @@ var initialWalletContext = {
297
271
  return "";
298
272
  })
299
273
  };
274
+
275
+ // src/providers/LaserEyesProvider.tsx
276
+ var import_usehooks_ts = require("usehooks-ts");
277
+
278
+ // src/lib/helpers.ts
279
+ var bitcoin = __toESM(require("bitcoinjs-lib"));
280
+ var import_axios = __toESM(require("axios"));
281
+ var getBitcoinNetwork = (network) => {
282
+ if (network === TESTNET) {
283
+ return bitcoin.networks.testnet;
284
+ } else if (network === REGTEST) {
285
+ return bitcoin.networks.regtest;
286
+ } else {
287
+ return bitcoin.networks.bitcoin;
288
+ }
289
+ };
290
+ var findOrdinalsAddress = (addresses) => {
291
+ return addresses.find(
292
+ ({ purpose }) => purpose === "ordinals"
293
+ );
294
+ };
295
+ var findPaymentAddress = (addresses) => {
296
+ return addresses.find(
297
+ ({ purpose }) => purpose === "payment"
298
+ );
299
+ };
300
+ var getBTCBalance = (address) => __async(void 0, null, function* () {
301
+ try {
302
+ return yield import_axios.default.get(`https://blockchain.info/q/addressbalance/${address}`).then((response) => response.data);
303
+ } catch (error) {
304
+ console.error("Error fetching BTC balance:", error);
305
+ throw new Error("Failed to fetch BTC balance");
306
+ }
307
+ });
308
+ var satoshisToBTC = (satoshis) => {
309
+ if (Number.isNaN(satoshis) || satoshis === void 0)
310
+ return "--";
311
+ const btcValue = satoshis / 1e8;
312
+ return btcValue.toFixed(8);
313
+ };
314
+ var isBase64 = (str) => {
315
+ const base64Regex = /^(?:[A-Za-z0-9+\/]{4})*?(?:[A-Za-z0-9+\/]{2}==|[A-Za-z0-9+\/]{3}=)?$/;
316
+ return base64Regex.test(str);
317
+ };
318
+ var isHex = (str) => {
319
+ const hexRegex = /^[a-fA-F0-9]+$/;
320
+ return hexRegex.test(str);
321
+ };
322
+
323
+ // src/providers/LaserEyesProvider.tsx
324
+ var import_jsx_runtime = require("react/jsx-runtime");
300
325
  var LaserEyesContext = (0, import_react.createContext)(initialWalletContext);
301
326
  var useLaserEyes = () => {
302
327
  return (0, import_react.useContext)(LaserEyesContext);
@@ -305,7 +330,12 @@ var LaserEyesProvider = ({
305
330
  children,
306
331
  config
307
332
  }) => {
308
- var _a;
333
+ const selfRef = (0, import_react.useRef)({
334
+ accounts: []
335
+ });
336
+ const self = selfRef.current;
337
+ const [library, setLibrary] = (0, import_react.useState)(null);
338
+ const [provider, setProvider] = (0, import_react.useState)();
309
339
  const [connected, setConnected] = (0, import_react.useState)(false);
310
340
  const [isConnecting, setIsConnecting] = (0, import_react.useState)(false);
311
341
  const [accounts, setAccounts] = (0, import_react.useState)([]);
@@ -313,188 +343,92 @@ var LaserEyesProvider = ({
313
343
  const [paymentPublicKey, setPaymentPublicKey] = (0, import_react.useState)("");
314
344
  const [address, setAddress] = (0, import_react.useState)("");
315
345
  const [paymentAddress, setPaymentAddress] = (0, import_react.useState)("");
316
- const [balance, setBalance] = (0, import_react.useState)({
317
- confirmed: 0,
318
- unconfirmed: 0,
319
- total: 0
320
- });
321
- const [network, setNetwork] = (0, import_usehooks_ts.useLocalStorage)("network", (_a = config.network) != null ? _a : NETWORK);
322
- const [library, setLibrary] = (0, import_react.useState)(null);
323
- const [provider, setProvider] = (0, import_react.useState)("");
324
- const [hasOyl, setHasOyl] = (0, import_react.useState)(false);
346
+ const [balance, setBalance] = (0, import_react.useState)();
325
347
  const [hasUnisat, setHasUnisat] = (0, import_react.useState)(false);
326
- const [hasXverse, setHasXverse] = (0, import_react.useState)(false);
327
- const [hasLeather, setHasLeather] = (0, import_react.useState)(false);
348
+ const [network, setNetwork] = (0, import_usehooks_ts.useLocalStorage)("network", MAINNET, {
349
+ initializeWithValue: false
350
+ });
328
351
  (0, import_react.useEffect)(() => {
329
352
  if (config) {
330
353
  setNetwork(config.network);
331
- } else {
332
- setNetwork(MAINNET);
354
+ getNetwork().then((foundNetwork) => {
355
+ if (config.network !== foundNetwork) {
356
+ switchNetwork(network);
357
+ } else if (network !== foundNetwork) {
358
+ setNetwork(network);
359
+ }
360
+ });
333
361
  }
334
- }, [config]);
335
- (0, import_react.useEffect)(() => {
336
- const oylLib = window == null ? void 0 : window.oyl;
337
- setHasOyl(!!oylLib);
338
- }, []);
362
+ }, [config, library]);
339
363
  (0, import_react.useEffect)(() => {
340
364
  const unisatLib = window == null ? void 0 : window.unisat;
341
365
  setHasUnisat(!!unisatLib);
342
366
  }, []);
343
367
  (0, import_react.useEffect)(() => {
344
- var _a2;
345
- const xverseLib = (_a2 = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a2.BitcoinProvider;
346
- setHasXverse(!!xverseLib);
347
- }, []);
368
+ setBalance(void 0);
369
+ }, [network]);
348
370
  (0, import_react.useEffect)(() => {
349
- const leatherLib = window == null ? void 0 : window.LeatherProvider;
350
- setHasLeather(!!leatherLib);
351
- }, []);
352
- const selfRef = (0, import_react.useRef)({
353
- accounts: []
354
- });
355
- const self = selfRef.current;
356
- const connectOyl = () => __async(void 0, null, function* () {
357
- try {
358
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, OYL);
359
- const lib = window.oyl;
360
- const result = yield lib.requestAccounts();
361
- setAccounts(result);
362
- setAddress(result[0]);
363
- setPaymentAddress(result[0]);
364
- setLibrary(lib);
365
- setProvider(OYL);
366
- handleAccountsChanged(result);
367
- setConnected(true);
368
- } catch (error) {
369
- throw new Error(`Can't lasereyes to ${OYL} wallet`);
371
+ if (provider !== UNISAT) {
372
+ return;
370
373
  }
371
- });
374
+ library.getAccounts().then((accounts2) => {
375
+ handleAccountsChanged(accounts2);
376
+ });
377
+ library.on("accountsChanged", handleAccountsChanged);
378
+ library.on("networkChanged", handleNetworkChanged);
379
+ return () => {
380
+ library.removeListener("accountsChanged", handleAccountsChanged);
381
+ library.removeListener("networkChanged", handleNetworkChanged);
382
+ };
383
+ }, [library]);
384
+ (0, import_react.useEffect)(() => {
385
+ const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
386
+ LOCAL_STORAGE_DEFAULT_WALLET
387
+ );
388
+ if (defaultWallet && !isConnecting) {
389
+ setProvider(defaultWallet);
390
+ connect(defaultWallet);
391
+ }
392
+ }, []);
372
393
  const connectUnisat = () => __async(void 0, null, function* () {
373
394
  try {
374
395
  localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, UNISAT);
375
396
  const lib = window.unisat;
376
- const result = yield lib.requestAccounts();
377
- setAccounts(result);
378
- setAddress(result[0]);
379
- setPaymentAddress(result[0]);
397
+ const unisatAccounts = yield lib.requestAccounts();
398
+ if (!unisatAccounts)
399
+ throw new Error("No accounts found");
400
+ const unisatPubKey = yield lib.getPublicKey();
401
+ if (!unisatPubKey)
402
+ throw new Error("No public key found");
403
+ setAccounts(unisatAccounts);
404
+ setAddress(unisatAccounts[0]);
405
+ setPaymentAddress(unisatAccounts[0]);
406
+ setPublicKey(unisatPubKey);
407
+ setPaymentPublicKey(unisatPubKey);
380
408
  setLibrary(lib);
381
409
  setProvider(UNISAT);
382
- handleAccountsChanged(result);
383
410
  setConnected(true);
384
- yield getNetwork().then((network2) => {
385
- const foundNetwork = getNetworkForUnisat(String(network2));
386
- setNetwork(foundNetwork);
387
- });
411
+ const balance2 = yield lib == null ? void 0 : lib.getBalance();
412
+ setBalance(balance2 == null ? void 0 : balance2.total);
388
413
  } catch (error) {
389
414
  throw new Error(`Can't lasereyes to ${UNISAT} wallet`);
390
415
  }
391
416
  });
392
- const connectXverse = () => __async(void 0, null, function* () {
393
- try {
394
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
395
- let xverseNetwork = getXverseNetwork(NETWORK);
396
- const getAddressOptions = {
397
- payload: {
398
- purposes: ["ordinals", "payment"],
399
- message: "Address for receiving Ordinals and payments",
400
- network: {
401
- type: xverseNetwork
402
- }
403
- },
404
- onFinish: (response) => {
405
- setPublicKey(String(response.addresses[0].publicKey));
406
- setPaymentPublicKey(String(response.addresses[1].publicKey));
407
- const foundAddress = findOrdinalsAddress(response.addresses);
408
- const foundPaymentAddress = findPaymentAddress(response.addresses);
409
- if (foundAddress && foundPaymentAddress) {
410
- setAddress(foundAddress.address);
411
- setPaymentAddress(foundPaymentAddress.address);
412
- setProvider(XVERSE);
413
- setLibrary(window.BitcoinProvider);
414
- }
415
- }
416
- };
417
- yield (0, import_sats_connect.getAddress)(getAddressOptions);
418
- setConnected(true);
419
- } catch (error) {
420
- throw new Error(`Can't lasereyes to ${XVERSE} wallet`);
421
- }
422
- });
423
- const connectLeather = () => __async(void 0, null, function* () {
424
- try {
425
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, LEATHER);
426
- const lib = window.LeatherProvider;
427
- const getAddressesResponse = yield lib.request(
428
- "getAddresses"
429
- );
430
- const addressesResponse = getAddressesResponse.result;
431
- const addresses = addressesResponse.addresses;
432
- const leatherAccountsParsed = addresses.map(
433
- (address2) => address2.address
434
- );
435
- const taprootAddress = addresses.find(
436
- (address2) => address2.type === P2TR
437
- );
438
- const segwitAddress = addresses.find(
439
- (address2) => address2.type === P2WPKH
440
- );
441
- setAccounts(leatherAccountsParsed);
442
- setAddress(String(taprootAddress == null ? void 0 : taprootAddress.address));
443
- setPaymentAddress(String(segwitAddress == null ? void 0 : segwitAddress.address));
444
- setLibrary(lib);
445
- setProvider(LEATHER);
446
- handleAccountsChanged(leatherAccountsParsed);
447
- setConnected(true);
448
- yield getNetwork().then((network2) => {
449
- if (!network2) {
450
- setNetwork(MAINNET);
451
- } else {
452
- setNetwork(network2);
453
- }
454
- });
455
- setConnected(true);
456
- } catch (error) {
457
- throw new Error(`Can't lasereyes to ${LEATHER} wallet`);
458
- }
459
- });
460
417
  const handleAccountsChanged = (_accounts) => {
418
+ if (!_accounts.length) {
419
+ disconnect();
420
+ return;
421
+ }
461
422
  if (self.accounts[0] === _accounts[0]) {
462
423
  return;
463
424
  }
464
425
  self.accounts = _accounts;
465
426
  if (_accounts.length > 0) {
466
- setAccounts(_accounts);
467
- setConnected(true);
468
- setAddress(_accounts[0]);
469
- setPaymentAddress(_accounts[0]);
470
- getBasicInfo();
427
+ connect(UNISAT);
471
428
  } else {
472
429
  setConnected(false);
473
430
  }
474
431
  };
475
- (0, import_react.useEffect)(() => {
476
- if (provider !== UNISAT) {
477
- return;
478
- }
479
- library.getAccounts().then((accounts2) => {
480
- handleAccountsChanged(accounts2);
481
- });
482
- library.on("accountsChanged", handleAccountsChanged);
483
- library.on("networkChanged", handleNetworkChanged);
484
- return () => {
485
- library.removeListener("accountsChanged", handleAccountsChanged);
486
- library.removeListener("networkChanged", handleNetworkChanged);
487
- };
488
- }, [library]);
489
- (0, import_react.useEffect)(() => {
490
- const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
491
- LOCAL_STORAGE_DEFAULT_WALLET
492
- );
493
- if (defaultWallet) {
494
- setProvider(defaultWallet);
495
- connect(defaultWallet);
496
- }
497
- }, []);
498
432
  const getBasicInfo = () => __async(void 0, null, function* () {
499
433
  if (provider !== UNISAT)
500
434
  return;
@@ -504,39 +438,33 @@ var LaserEyesProvider = ({
504
438
  setBalance(balance2);
505
439
  const network2 = yield library == null ? void 0 : library.getNetwork();
506
440
  if (network2) {
507
- setNetwork(network2);
441
+ const foundNetwork = getNetworkForUnisat(String(network2));
442
+ setNetwork(foundNetwork);
508
443
  }
509
444
  });
510
445
  const handleNetworkChanged = (network2) => {
511
- let foundNetwork = MAINNET;
512
- if (provider === UNISAT) {
513
- foundNetwork = getNetworkForUnisat(network2);
514
- }
515
- if (provider === XVERSE) {
516
- foundNetwork = getNetworkForXverse(network2);
517
- }
518
- if (provider === LEATHER) {
519
- foundNetwork = getLeatherNetwork(network2);
446
+ try {
447
+ let foundNetwork = MAINNET;
448
+ if (provider === UNISAT) {
449
+ foundNetwork = getNetworkForUnisat(network2);
450
+ setNetwork(foundNetwork);
451
+ connect(provider);
452
+ } else {
453
+ throw new Error("Unsupported wallet");
454
+ }
455
+ } catch (error) {
456
+ throw error;
520
457
  }
521
- setNetwork(foundNetwork);
522
- getBasicInfo();
523
458
  };
524
459
  const connect = (walletName) => __async(void 0, null, function* () {
525
- console.log("connecting");
526
460
  setIsConnecting(true);
527
461
  try {
528
462
  if (!walletName)
529
463
  throw new Error("No wallet provided");
530
- if (walletName === OYL) {
531
- yield connectOyl();
532
- } else if (walletName === UNISAT) {
464
+ if (walletName === UNISAT) {
533
465
  yield connectUnisat();
534
- } else if (walletName === XVERSE) {
535
- yield connectXverse();
536
- } else if (walletName === LEATHER) {
537
- yield connectLeather();
538
466
  } else {
539
- throw new Error("Wallet not found!");
467
+ throw new Error("Unsupported wallet!");
540
468
  }
541
469
  setConnected(true);
542
470
  } catch (error) {
@@ -549,43 +477,23 @@ var LaserEyesProvider = ({
549
477
  });
550
478
  const disconnect = () => {
551
479
  setAddress("");
480
+ setPaymentAddress("");
481
+ setPublicKey("");
552
482
  setAccounts([]);
553
- setProvider("");
483
+ setProvider(void 0);
554
484
  setLibrary(null);
555
485
  setConnected(false);
486
+ setBalance(void 0);
556
487
  localStorage == null ? void 0 : localStorage.removeItem(LOCAL_STORAGE_DEFAULT_WALLET);
557
488
  };
558
489
  const requestAccounts = () => __async(void 0, null, function* () {
559
490
  try {
560
491
  if (!library)
561
492
  return;
562
- if (provider === OYL) {
563
- return yield library.requestAccounts();
564
- } else if (provider === UNISAT) {
493
+ if (provider === UNISAT) {
565
494
  return yield library.requestAccounts();
566
- } else if (provider === XVERSE) {
567
- const getAddressOptions = {
568
- payload: {
569
- // @ts-ignore
570
- purposes: ["ordinals", "payment"],
571
- message: "Address for receiving Ordinals and payments",
572
- network: {
573
- type: XVERSE_NETWORK
574
- }
575
- },
576
- onFinish: (response) => __async(void 0, null, function* () {
577
- const foundAddress = findOrdinalsAddress(response.addresses);
578
- setAddress(foundAddress.address);
579
- const foundPaymentAddress = findPaymentAddress(response.addresses);
580
- setPaymentAddress(foundPaymentAddress);
581
- setPublicKey(String(response.addresses[0].publicKey));
582
- setPaymentPublicKey(String(response.addresses[1].publicKey));
583
- }),
584
- onCancel: () => {
585
- throw new Error("User cancelled");
586
- }
587
- };
588
- return [address];
495
+ } else {
496
+ throw new Error("Unsupported wallet");
589
497
  }
590
498
  } catch (error) {
591
499
  throw error;
@@ -595,17 +503,13 @@ var LaserEyesProvider = ({
595
503
  try {
596
504
  if (!library)
597
505
  return;
598
- if (provider === OYL) {
599
- throw new Error("Not implemented");
600
- } else if (provider === UNISAT) {
506
+ if (provider === UNISAT) {
601
507
  const unisatNetwork = yield library == null ? void 0 : library.getNetwork();
602
508
  const foundNetwork = getNetworkForUnisat(unisatNetwork);
603
509
  setNetwork(foundNetwork);
604
510
  return foundNetwork;
605
- } else if (provider === XVERSE) {
606
- throw new Error("Not implemented");
607
- } else if (provider === LEATHER) {
608
- throw new Error("Not implemented");
511
+ } else {
512
+ throw new Error("Unsupported wallet");
609
513
  }
610
514
  } catch (error) {
611
515
  throw error;
@@ -615,14 +519,12 @@ var LaserEyesProvider = ({
615
519
  try {
616
520
  if (!library)
617
521
  return;
618
- if (provider === OYL) {
619
- throw new Error("Not implemented");
620
- } else if (provider === UNISAT) {
522
+ if (provider === UNISAT) {
621
523
  const wantedNetwork = getUnisatNetwork(network2);
622
524
  yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
623
525
  setNetwork(network2);
624
- } else if (provider === XVERSE) {
625
- throw new Error("Not implemented");
526
+ } else {
527
+ throw new Error("Unsupported wallet");
626
528
  }
627
529
  } catch (error) {
628
530
  throw error;
@@ -632,17 +534,13 @@ var LaserEyesProvider = ({
632
534
  try {
633
535
  if (!library)
634
536
  return;
635
- if (provider === OYL) {
636
- return yield library == null ? void 0 : library.getPublicKey();
637
- } else if (provider === UNISAT) {
537
+ if (provider === UNISAT) {
538
+ const pub = yield library == null ? void 0 : library.getPublicKey();
638
539
  return yield library == null ? void 0 : library.getPublicKey();
639
- } else if (provider === XVERSE) {
640
- throw new Error("Not implemented");
641
- } else if (provider === LEATHER) {
642
- throw new Error("Not implemented");
540
+ } else {
541
+ throw new Error("Unsupported wallet");
643
542
  }
644
543
  } catch (error) {
645
- console.error("error", error);
646
544
  throw error;
647
545
  }
648
546
  });
@@ -650,12 +548,10 @@ var LaserEyesProvider = ({
650
548
  try {
651
549
  if (!library)
652
550
  return;
653
- if (provider === OYL) {
551
+ if (provider === UNISAT) {
654
552
  return yield library.getBalance();
655
- } else if (provider === UNISAT) {
656
- return yield library.getBalance();
657
- } else if (provider === XVERSE) {
658
- throw new Error("Not implemented");
553
+ } else {
554
+ throw new Error("Unsupported wallet");
659
555
  }
660
556
  } catch (error) {
661
557
  throw error;
@@ -665,14 +561,10 @@ var LaserEyesProvider = ({
665
561
  try {
666
562
  if (!library)
667
563
  return;
668
- if (provider === OYL) {
669
- return yield library.getInscriptions(0, 10);
670
- } else if (provider === UNISAT) {
564
+ if (provider === UNISAT) {
671
565
  return yield library.getInscriptions(0, 10);
672
- } else if (provider === XVERSE) {
673
- throw new Error("Not implemented");
674
- } else if (provider === LEATHER) {
675
- throw new Error("Not implemented");
566
+ } else {
567
+ throw new Error("Unsupported wallet");
676
568
  }
677
569
  } catch (error) {
678
570
  throw error;
@@ -680,173 +572,85 @@ var LaserEyesProvider = ({
680
572
  });
681
573
  const sendBTC = (to, amount) => __async(void 0, null, function* () {
682
574
  try {
683
- if (provider === OYL) {
684
- new Error("Not implemented");
685
- } else if (provider === UNISAT) {
686
- return yield library == null ? void 0 : library.sendBitcoin(to, amount);
687
- } else if (provider === XVERSE) {
688
- new Error("Not implemented");
689
- } else if (provider === LEATHER) {
690
- return yield library == null ? void 0 : library.request("sendTransfer", {
691
- address: to,
692
- amount: amount.toString()
693
- });
575
+ if (amount <= 0)
576
+ throw new Error("Amount must be greater than 0");
577
+ if (!Number.isInteger(amount))
578
+ throw new Error("Amount must be an integer");
579
+ if (!library)
580
+ throw new Error("Library not found");
581
+ if (provider === UNISAT) {
582
+ const txId = yield library == null ? void 0 : library.sendBitcoin(to, amount);
583
+ if (!txId)
584
+ throw new Error("Transaction failed");
585
+ return txId;
586
+ } else {
587
+ throw new Error("Unsupported wallet");
694
588
  }
695
589
  } catch (error) {
696
- console.error("error", error);
590
+ throw error;
697
591
  }
698
592
  });
699
593
  const signMessage = (message) => __async(void 0, null, function* () {
700
594
  try {
701
595
  if (!library)
702
596
  return;
703
- if (provider === OYL) {
704
- throw new Error("Not implemented");
705
- } else if (provider === UNISAT) {
597
+ if (provider === UNISAT) {
706
598
  return yield library == null ? void 0 : library.signMessage(message);
707
- } else if (provider === XVERSE) {
708
- throw new Error("Not implemented");
599
+ } else {
600
+ throw new Error("Unsupported wallet");
709
601
  }
710
602
  } catch (error) {
711
- console.error(error);
712
603
  throw error;
713
604
  }
714
605
  });
715
606
  const signPsbt = (psbt, finalize = false, broadcast = true) => __async(void 0, null, function* () {
716
607
  try {
608
+ let psbtHex, psbtBase64;
717
609
  if (!library)
718
610
  return;
719
- if (provider === OYL) {
720
- const response = yield library == null ? void 0 : library.signPsbt(psbt);
721
- return response;
722
- } else if (provider === UNISAT) {
723
- const txHex = yield library == null ? void 0 : library.signPsbt(psbt, {
611
+ if (isHex(psbt)) {
612
+ psbtBase64 = bitcoin2.Psbt.fromHex(psbt).toBase64();
613
+ psbtHex = psbt;
614
+ } else if (isBase64(psbt)) {
615
+ psbtHex = bitcoin2.Psbt.fromBase64(psbt).toHex();
616
+ psbtBase64 = psbt;
617
+ } else {
618
+ throw new Error("Invalid PSBT format");
619
+ }
620
+ if (provider === UNISAT) {
621
+ const signedPsbt = yield library == null ? void 0 : library.signPsbt(psbtHex, {
724
622
  autoFinalized: finalize
725
623
  });
726
- const signedPsbt = bitcoin2.Psbt.fromHex(txHex);
624
+ if (broadcast) {
625
+ const txId = yield pushPsbt(signedPsbt);
626
+ return {
627
+ signedPsbtHex: signedPsbt.toHex(),
628
+ signedPsbtBase64: signedPsbt.toBase64(),
629
+ txId
630
+ };
631
+ }
727
632
  return {
728
633
  signedPsbtHex: signedPsbt.toHex(),
729
634
  signedPsbtBase64: signedPsbt.toBase64()
730
635
  };
731
- } else if (provider === XVERSE) {
732
- const toSignPsbt = bitcoin2.Psbt.fromBase64(String(psbt), {
733
- network: getBitcoinNetwork(network)
734
- });
735
- const inputs = toSignPsbt.data.inputs;
736
- const inputsToSign = [];
737
- const ordinalAddressData = {
738
- address,
739
- signingIndexes: []
740
- };
741
- const paymentsAddressData = {
742
- address: paymentAddress,
743
- signingIndexes: []
744
- };
745
- let counter = 0;
746
- try {
747
- for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
748
- let input = temp.value;
749
- const { script } = input.witnessUtxo;
750
- const addressFromScript = (0, import_address.fromOutputScript)(
751
- script,
752
- getBitcoinNetwork(network)
753
- );
754
- if (addressFromScript === paymentAddress) {
755
- paymentsAddressData.signingIndexes.push(Number(counter));
756
- } else if (addressFromScript === address) {
757
- ordinalAddressData.signingIndexes.push(Number(counter));
758
- }
759
- counter++;
760
- }
761
- } catch (temp) {
762
- error = [temp];
763
- } finally {
764
- try {
765
- more && (temp = iter.return) && (yield temp.call(iter));
766
- } finally {
767
- if (error)
768
- throw error[0];
769
- }
770
- }
771
- if (ordinalAddressData.signingIndexes.length > 0) {
772
- inputsToSign.push(ordinalAddressData);
773
- }
774
- if (paymentsAddressData.signingIndexes.length > 0) {
775
- inputsToSign.push(paymentsAddressData);
776
- }
777
- let txId = "";
778
- let signedPsbtHex, signedPsbtBase64;
779
- const xverseNetwork = getXverseNetwork(network);
780
- const signPsbtOptions = {
781
- payload: {
782
- network: {
783
- type: xverseNetwork
784
- },
785
- message: "Sign Transaction",
786
- psbtBase64: toSignPsbt.toBase64(),
787
- broadcast,
788
- inputsToSign
789
- },
790
- onFinish: (response) => {
791
- if (response.txId) {
792
- txId = response.txId;
793
- } else if (response.psbtBase64) {
794
- const signedPsbt = bitcoin2.Psbt.fromBase64(
795
- String(response.psbtBase64),
796
- {
797
- network: getBitcoinNetwork(network)
798
- }
799
- );
800
- signedPsbtHex = signedPsbt.toHex();
801
- signedPsbtBase64 = signedPsbt.toBase64();
802
- }
803
- },
804
- onCancel: () => console.log("Canceled")
805
- };
806
- yield (0, import_sats_connect.signTransaction)(signPsbtOptions);
807
- return {
808
- signedPsbtHex,
809
- signedPsbtBase64,
810
- txId
811
- };
636
+ } else {
637
+ throw new Error("Unsupported wallet");
812
638
  }
813
- } catch (error2) {
814
- console.error("error", error2);
815
- throw error2;
639
+ } catch (error) {
640
+ throw error;
816
641
  }
817
642
  });
818
- const pushPsbt = (psbt, finalize = false) => __async(void 0, null, function* () {
643
+ const pushPsbt = (psbt) => __async(void 0, null, function* () {
819
644
  try {
820
645
  if (!library)
821
646
  return;
822
- if (provider === OYL) {
823
- return yield library == null ? void 0 : library.pushPsbt(psbt);
824
- } else if (provider === UNISAT) {
647
+ if (provider === UNISAT) {
825
648
  return yield library == null ? void 0 : library.pushPsbt(psbt);
826
- } else if (provider === XVERSE) {
827
- const signPsbtOptions = {
828
- payload: {
829
- network: {
830
- type: NETWORK
831
- },
832
- message: "Sign Transaction",
833
- psbtBase64: `cHNidP8BAJwCAmO+JvQJxhVDDpm3tV5PmPfzvJOSL4GOdjEOpAAAAAAnrAAA==`,
834
- broadcast: false,
835
- inputsToSign: [
836
- {
837
- address: "33TKH4kkiFPyTLDNmdNsLggyLeAYre57Qm",
838
- signingIndexes: [1]
839
- }
840
- ]
841
- },
842
- onFinish: (response) => {
843
- },
844
- onCancel: () => console.log("Canceled")
845
- };
846
- yield (0, import_sats_connect.signTransaction)(signPsbtOptions);
649
+ } else {
650
+ throw new Error("Unsupported wallet");
847
651
  }
848
652
  } catch (error) {
849
- console.error("error", error);
653
+ throw error;
850
654
  }
851
655
  });
852
656
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -864,10 +668,7 @@ var LaserEyesProvider = ({
864
668
  network,
865
669
  connected,
866
670
  isConnecting,
867
- hasOyl,
868
671
  hasUnisat,
869
- hasXverse,
870
- hasLeather,
871
672
  // functions
872
673
  connect,
873
674
  disconnect,
@@ -876,6 +677,7 @@ var LaserEyesProvider = ({
876
677
  switchNetwork,
877
678
  getPublicKey,
878
679
  getBalance,
680
+ getInscriptions,
879
681
  sendBTC,
880
682
  signPsbt,
881
683
  pushPsbt,
@@ -892,6 +694,8 @@ var LaserEyesProvider = ({
892
694
  LEATHER_TESTNET,
893
695
  LaserEyesProvider,
894
696
  MAINNET,
697
+ MEMPOOL_SPACE_TESTNET_URL,
698
+ MEMPOOL_SPACE_URL,
895
699
  OYL,
896
700
  P2PKH,
897
701
  P2SH,
@@ -910,11 +714,19 @@ var LaserEyesProvider = ({
910
714
  XVERSE_NETWORK,
911
715
  XVERSE_TESTNET,
912
716
  createConfig,
717
+ findOrdinalsAddress,
718
+ findPaymentAddress,
719
+ getBTCBalance,
720
+ getBitcoinNetwork,
913
721
  getLeatherNetwork,
722
+ getMempoolSpaceUrl,
914
723
  getNetworkForLeather,
915
724
  getNetworkForUnisat,
916
725
  getNetworkForXverse,
917
726
  getUnisatNetwork,
918
727
  getXverseNetwork,
728
+ isBase64,
729
+ isHex,
730
+ satoshisToBTC,
919
731
  useLaserEyes
920
732
  });