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