@omnisat/lasereyes 0.0.4 → 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";
@@ -59,6 +45,7 @@ var LEATHER_MAINNET = "mainnet";
59
45
  var LEATHER_TESTNET = "testnet";
60
46
  var MAINNET = "mainnet";
61
47
  var TESTNET = "testnet";
48
+ var REGTEST = "regtest";
62
49
  var getXverseNetwork = (network) => {
63
50
  if (network === MAINNET)
64
51
  return XVERSE_MAINNET;
@@ -101,6 +88,16 @@ var getNetworkForLeather = (network) => {
101
88
  return TESTNET;
102
89
  return MAINNET;
103
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";
104
101
  var P2TR = "p2tr";
105
102
  var P2PKH = "p2pkh";
106
103
  var P2WPKH = "p2wpkh";
@@ -150,17 +147,10 @@ import {
150
147
  useRef,
151
148
  useState
152
149
  } from "react";
153
- import * as bitcoin from "bitcoinjs-lib";
154
- import { getAddress, signTransaction } from "sats-connect";
150
+ import * as bitcoin2 from "bitcoinjs-lib";
155
151
 
156
152
  // src/consts/settings.ts
157
153
  var LOCAL_STORAGE_DEFAULT_WALLET = "defaultWallet";
158
- var NETWORK = TESTNET;
159
-
160
- // src/providers/LaserEyesProvider.tsx
161
- import { fromOutputScript } from "bitcoinjs-lib/src/address";
162
- import { useLocalStorage } from "usehooks-ts";
163
- import { jsx } from "react/jsx-runtime";
164
154
  var initialWalletContext = {
165
155
  hasOyl: false,
166
156
  hasUnisat: false,
@@ -169,29 +159,14 @@ var initialWalletContext = {
169
159
  connected: false,
170
160
  isConnecting: false,
171
161
  publicKey: "",
172
- // Empty string as the public key is unknown
173
162
  address: "",
174
- // Empty string as the address is unknown
175
163
  paymentAddress: "",
176
- // Empty string as the address is unknown
177
164
  paymentPublicKey: "",
178
- balance: {
179
- confirmed: 0,
180
- // Initial confirmed balance is zero
181
- unconfirmed: 0,
182
- // Initial unconfirmed balance is zero
183
- total: 0
184
- // Initial total balance is zero
185
- },
186
- network: "",
187
- // Empty string as the network is unknown
165
+ balance: void 0,
166
+ network: MAINNET,
188
167
  library: null,
189
- // Initial library is null, assuming it will be an object once initialized
190
168
  provider: null,
191
- // Initial provider is null, assuming it will be an object once initialized
192
169
  accounts: [],
193
- // Initially, there are no accounts
194
- // Placeholder functions for wallet operations. These should be replaced with actual implementations.
195
170
  connect: (walletName) => __async(void 0, null, function* () {
196
171
  }),
197
172
  disconnect: () => {
@@ -200,10 +175,9 @@ var initialWalletContext = {
200
175
  return [];
201
176
  }),
202
177
  getNetwork: () => __async(void 0, null, function* () {
203
- return "";
178
+ return MAINNET;
204
179
  }),
205
180
  switchNetwork: (network) => __async(void 0, null, function* () {
206
- return "";
207
181
  }),
208
182
  getPublicKey: () => __async(void 0, null, function* () {
209
183
  return "";
@@ -212,34 +186,90 @@ var initialWalletContext = {
212
186
  return "";
213
187
  }),
214
188
  getInscriptions: () => __async(void 0, null, function* () {
215
- }),
216
- getAllBRC20Tokens: () => __async(void 0, null, function* () {
189
+ return [];
217
190
  }),
218
191
  sendBTC: (to, amount) => __async(void 0, null, function* () {
219
192
  return "";
220
193
  }),
221
- payInscribe: () => __async(void 0, null, function* () {
222
- }),
223
- deploy: () => __async(void 0, null, function* () {
224
- }),
225
- mint: () => __async(void 0, null, function* () {
226
- }),
227
194
  signMessage: (message) => __async(void 0, null, function* () {
228
195
  return "";
229
196
  }),
230
197
  signPsbt: (tx) => __async(void 0, null, function* () {
231
- return "";
198
+ return {
199
+ signedPsbtHex: "",
200
+ signedPsbtBase64: "",
201
+ txId: ""
202
+ };
232
203
  }),
233
204
  pushPsbt: (tx) => __async(void 0, null, function* () {
234
205
  return "";
235
206
  })
236
- // signPsbts: async () => { /* Implementation */ },
237
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";
238
259
  var LaserEyesContext = createContext(initialWalletContext);
239
260
  var useLaserEyes = () => {
240
261
  return useContext(LaserEyesContext);
241
262
  };
242
- var LaserEyesProvider = ({ children }) => {
263
+ var LaserEyesProvider = ({
264
+ children,
265
+ config
266
+ }) => {
267
+ const selfRef = useRef({
268
+ accounts: []
269
+ });
270
+ const self = selfRef.current;
271
+ const [library, setLibrary] = useState(null);
272
+ const [provider, setProvider] = useState();
243
273
  const [connected, setConnected] = useState(false);
244
274
  const [isConnecting, setIsConnecting] = useState(false);
245
275
  const [accounts, setAccounts] = useState([]);
@@ -247,158 +277,30 @@ var LaserEyesProvider = ({ children }) => {
247
277
  const [paymentPublicKey, setPaymentPublicKey] = useState("");
248
278
  const [address, setAddress] = useState("");
249
279
  const [paymentAddress, setPaymentAddress] = useState("");
250
- const [balance, setBalance] = useState({
251
- confirmed: 0,
252
- unconfirmed: 0,
253
- total: 0
254
- });
255
- const [network, setNetwork] = useLocalStorage("network", NETWORK);
256
- const [library, setLibrary] = useState(null);
257
- const [provider, setProvider] = useState("");
258
- const [hasOyl, setHasOyl] = useState(false);
280
+ const [balance, setBalance] = useState();
259
281
  const [hasUnisat, setHasUnisat] = useState(false);
260
- const [hasXverse, setHasXverse] = useState(false);
261
- const [hasLeather, setHasLeather] = useState(false);
282
+ const [network, setNetwork] = useLocalStorage("network", MAINNET, {
283
+ initializeWithValue: false
284
+ });
262
285
  useEffect(() => {
263
- const oylLib = window == null ? void 0 : window.oyl;
264
- setHasOyl(!!oylLib);
265
- }, []);
286
+ if (config) {
287
+ setNetwork(config.network);
288
+ getNetwork().then((foundNetwork) => {
289
+ if (config.network !== foundNetwork) {
290
+ switchNetwork(network);
291
+ } else if (network !== foundNetwork) {
292
+ setNetwork(network);
293
+ }
294
+ });
295
+ }
296
+ }, [config, library]);
266
297
  useEffect(() => {
267
298
  const unisatLib = window == null ? void 0 : window.unisat;
268
299
  setHasUnisat(!!unisatLib);
269
300
  }, []);
270
301
  useEffect(() => {
271
- var _a;
272
- const xverseLib = (_a = window == null ? void 0 : window.XverseProviders) == null ? void 0 : _a.BitcoinProvider;
273
- setHasXverse(!!xverseLib);
274
- }, []);
275
- useEffect(() => {
276
- const leatherLib = window == null ? void 0 : window.LeatherProvider;
277
- setHasLeather(!!leatherLib);
278
- }, []);
279
- const selfRef = useRef({
280
- accounts: []
281
- });
282
- const self = selfRef.current;
283
- const connectOyl = () => __async(void 0, null, function* () {
284
- try {
285
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, OYL);
286
- const lib = window.oyl;
287
- const result = yield lib.requestAccounts();
288
- setAccounts(result);
289
- setAddress(result[0]);
290
- setPaymentAddress(result[0]);
291
- setLibrary(lib);
292
- setProvider(OYL);
293
- handleAccountsChanged(result);
294
- setConnected(true);
295
- } catch (error) {
296
- new Error("Can't lasereyes to wallet");
297
- }
298
- });
299
- const connectUnisat = () => __async(void 0, null, function* () {
300
- try {
301
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, UNISAT);
302
- const lib = window.unisat;
303
- const result = yield lib.requestAccounts();
304
- setAccounts(result);
305
- setAddress(result[0]);
306
- setPaymentAddress(result[0]);
307
- setLibrary(lib);
308
- setProvider(UNISAT);
309
- handleAccountsChanged(result);
310
- setConnected(true);
311
- yield getNetwork().then((network2) => {
312
- const foundNetwork = getNetworkForUnisat(String(network2));
313
- setNetwork(foundNetwork);
314
- });
315
- } catch (error) {
316
- new Error("Can't lasereyes to wallet");
317
- }
318
- });
319
- const connectXverse = () => __async(void 0, null, function* () {
320
- try {
321
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, XVERSE);
322
- let xverseNetwork = getXverseNetwork(NETWORK);
323
- const getAddressOptions = {
324
- payload: {
325
- purposes: ["ordinals", "payment"],
326
- message: "Address for receiving Ordinals and payments",
327
- network: {
328
- type: xverseNetwork
329
- }
330
- },
331
- onFinish: (response) => {
332
- setPublicKey(String(response.addresses[0].publicKey));
333
- setPaymentPublicKey(String(response.addresses[1].publicKey));
334
- const foundAddress = findOrdinalsAddress(response.addresses);
335
- const foundPaymentAddress = findPaymentAddress(response.addresses);
336
- if (foundAddress && foundPaymentAddress) {
337
- setAddress(foundAddress.address);
338
- setPaymentAddress(foundPaymentAddress.address);
339
- setProvider(XVERSE);
340
- setLibrary(window.BitcoinProvider);
341
- }
342
- }
343
- };
344
- yield getAddress(getAddressOptions);
345
- setConnected(true);
346
- } catch (error) {
347
- new Error(`Can't lasereyes to ${XVERSE} wallet`);
348
- }
349
- });
350
- const connectLeather = () => __async(void 0, null, function* () {
351
- try {
352
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, LEATHER);
353
- const lib = window.LeatherProvider;
354
- const getAddressesResponse = yield lib.request(
355
- "getAddresses"
356
- );
357
- const addressesResponse = getAddressesResponse.result;
358
- const addresses = addressesResponse.addresses;
359
- const leatherAccountsParsed = addresses.map(
360
- (address2) => address2.address
361
- );
362
- const taprootAddress = addresses.find(
363
- (address2) => address2.type === P2TR
364
- );
365
- const segwitAddress = addresses.find(
366
- (address2) => address2.type === P2WPKH
367
- );
368
- setAccounts(leatherAccountsParsed);
369
- setAddress(String(taprootAddress == null ? void 0 : taprootAddress.address));
370
- setPaymentAddress(String(segwitAddress == null ? void 0 : segwitAddress.address));
371
- setLibrary(lib);
372
- setProvider(LEATHER);
373
- handleAccountsChanged(leatherAccountsParsed);
374
- setConnected(true);
375
- yield getNetwork().then((network2) => {
376
- if (!network2) {
377
- setNetwork(MAINNET);
378
- } else {
379
- setNetwork(network2);
380
- }
381
- });
382
- setConnected(true);
383
- } catch (error) {
384
- new Error(`Can't lasereyes to ${LEATHER} wallet`);
385
- }
386
- });
387
- const handleAccountsChanged = (_accounts) => {
388
- if (self.accounts[0] === _accounts[0]) {
389
- return;
390
- }
391
- self.accounts = _accounts;
392
- if (_accounts.length > 0) {
393
- setAccounts(_accounts);
394
- setConnected(true);
395
- setAddress(_accounts[0]);
396
- setPaymentAddress(_accounts[0]);
397
- getBasicInfo();
398
- } else {
399
- setConnected(false);
400
- }
401
- };
302
+ setBalance(void 0);
303
+ }, [network]);
402
304
  useEffect(() => {
403
305
  if (provider !== UNISAT) {
404
306
  return;
@@ -417,11 +319,50 @@ var LaserEyesProvider = ({ children }) => {
417
319
  const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(
418
320
  LOCAL_STORAGE_DEFAULT_WALLET
419
321
  );
420
- if (defaultWallet) {
322
+ if (defaultWallet && !isConnecting) {
421
323
  setProvider(defaultWallet);
422
324
  connect(defaultWallet);
423
325
  }
424
326
  }, []);
327
+ const connectUnisat = () => __async(void 0, null, function* () {
328
+ try {
329
+ localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, UNISAT);
330
+ const lib = window.unisat;
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);
342
+ setLibrary(lib);
343
+ setProvider(UNISAT);
344
+ setConnected(true);
345
+ const balance2 = yield lib == null ? void 0 : lib.getBalance();
346
+ setBalance(balance2 == null ? void 0 : balance2.total);
347
+ } catch (error) {
348
+ throw new Error(`Can't lasereyes to ${UNISAT} wallet`);
349
+ }
350
+ });
351
+ const handleAccountsChanged = (_accounts) => {
352
+ if (!_accounts.length) {
353
+ disconnect();
354
+ return;
355
+ }
356
+ if (self.accounts[0] === _accounts[0]) {
357
+ return;
358
+ }
359
+ self.accounts = _accounts;
360
+ if (_accounts.length > 0) {
361
+ connect(UNISAT);
362
+ } else {
363
+ setConnected(false);
364
+ }
365
+ };
425
366
  const getBasicInfo = () => __async(void 0, null, function* () {
426
367
  if (provider !== UNISAT)
427
368
  return;
@@ -431,511 +372,254 @@ var LaserEyesProvider = ({ children }) => {
431
372
  setBalance(balance2);
432
373
  const network2 = yield library == null ? void 0 : library.getNetwork();
433
374
  if (network2) {
434
- setNetwork(network2);
375
+ const foundNetwork = getNetworkForUnisat(String(network2));
376
+ setNetwork(foundNetwork);
435
377
  }
436
378
  });
437
379
  const handleNetworkChanged = (network2) => {
438
- let foundNetwork = "";
439
- if (provider === UNISAT) {
440
- foundNetwork = getNetworkForUnisat(network2);
441
- }
442
- if (provider === XVERSE) {
443
- foundNetwork = getXverseNetwork(network2);
444
- }
445
- if (provider === LEATHER) {
446
- 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;
447
391
  }
448
- setNetwork(foundNetwork);
449
- getBasicInfo();
450
- };
451
- const findOrdinalsAddress = (addresses) => {
452
- return addresses.find(
453
- ({ purpose }) => purpose === "ordinals"
454
- );
455
- };
456
- const findPaymentAddress = (addresses) => {
457
- return addresses.find(
458
- ({ purpose }) => purpose === "payment"
459
- );
460
392
  };
461
393
  const connect = (walletName) => __async(void 0, null, function* () {
462
394
  setIsConnecting(true);
463
395
  try {
464
396
  if (!walletName)
465
- new Error("No wallet provided");
466
- if (walletName === OYL) {
467
- yield connectOyl();
468
- } else if (walletName === UNISAT) {
397
+ throw new Error("No wallet provided");
398
+ if (walletName === UNISAT) {
469
399
  yield connectUnisat();
470
- } else if (walletName === XVERSE) {
471
- yield connectXverse();
472
- } else if (walletName === LEATHER) {
473
- yield connectLeather();
474
400
  } else {
475
- new Error("Wallet not found!");
401
+ throw new Error("Unsupported wallet!");
476
402
  }
477
403
  setConnected(true);
478
404
  } catch (error) {
479
- console.error("error", error);
405
+ setIsConnecting(false);
480
406
  disconnect();
481
- new Error("Can't lasereyes to wallet");
407
+ throw new Error("Can't lasereyes to wallet");
482
408
  } finally {
483
409
  setIsConnecting(false);
484
410
  }
485
411
  });
486
412
  const disconnect = () => {
487
413
  setAddress("");
414
+ setPaymentAddress("");
415
+ setPublicKey("");
488
416
  setAccounts([]);
489
- setProvider("");
417
+ setProvider(void 0);
490
418
  setLibrary(null);
491
419
  setConnected(false);
420
+ setBalance(void 0);
492
421
  localStorage == null ? void 0 : localStorage.removeItem(LOCAL_STORAGE_DEFAULT_WALLET);
493
422
  };
494
423
  const requestAccounts = () => __async(void 0, null, function* () {
495
- if (!library)
496
- return;
497
- if (provider === OYL) {
498
- return yield library.requestAccounts();
499
- } else if (provider === UNISAT) {
500
- return yield library.requestAccounts();
501
- } else if (provider === XVERSE) {
502
- const getAddressOptions = {
503
- payload: {
504
- // @ts-ignore
505
- purposes: ["ordinals", "payment"],
506
- message: "Address for receiving Ordinals and payments",
507
- network: {
508
- type: XVERSE_NETWORK
509
- }
510
- },
511
- onFinish: (response) => __async(void 0, null, function* () {
512
- const foundAddress = findOrdinalsAddress(response.addresses);
513
- setAddress(foundAddress.address);
514
- const foundPaymentAddress = findPaymentAddress(response.addresses);
515
- setPaymentAddress(foundPaymentAddress);
516
- setPublicKey(String(response.addresses[0].publicKey));
517
- setPaymentPublicKey(String(response.addresses[1].publicKey));
518
- }),
519
- onCancel: () => {
520
- console.log("CANCELLED");
521
- }
522
- };
523
- return [address];
524
- } else if (provider === LEATHER) {
525
- localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, LEATHER);
526
- const lib = window.LeatherProvider;
527
- const getAddressesResponse = yield lib.request(
528
- "getAddresses"
529
- );
530
- const addressesResponse = getAddressesResponse.result;
531
- const addresses = addressesResponse.addresses;
532
- const leatherAccountsParsed = addresses.map(
533
- (address2) => address2.address
534
- );
535
- const taprootAddress = addresses.find(
536
- (address2) => address2.type === P2TR
537
- );
538
- const segwitAddress = addresses.find(
539
- (address2) => address2.type === P2WPKH
540
- );
541
- setAccounts(leatherAccountsParsed);
542
- setAddress(String(taprootAddress == null ? void 0 : taprootAddress.address));
543
- setPaymentAddress(String(segwitAddress == null ? void 0 : segwitAddress.address));
544
- setLibrary(lib);
545
- setProvider(LEATHER);
546
- handleAccountsChanged(leatherAccountsParsed);
547
- setConnected(true);
548
- yield getNetwork().then((network2) => {
549
- if (!network2) {
550
- setNetwork(MAINNET);
551
- } else {
552
- setNetwork(network2);
553
- }
554
- });
555
- setConnected(true);
556
- } else {
557
- console.log("NO WALLET CONNECTED");
424
+ try {
425
+ if (!library)
426
+ return;
427
+ if (provider === UNISAT) {
428
+ return yield library.requestAccounts();
429
+ } else {
430
+ throw new Error("Unsupported wallet");
431
+ }
432
+ } catch (error) {
433
+ throw error;
558
434
  }
559
435
  });
560
436
  const getNetwork = () => __async(void 0, null, function* () {
561
437
  try {
562
438
  if (!library)
563
439
  return;
564
- if (provider === OYL) {
565
- new Error("Not implemented");
566
- } else if (provider === UNISAT) {
440
+ if (provider === UNISAT) {
567
441
  const unisatNetwork = yield library == null ? void 0 : library.getNetwork();
568
442
  const foundNetwork = getNetworkForUnisat(unisatNetwork);
569
443
  setNetwork(foundNetwork);
570
444
  return foundNetwork;
571
- } else if (provider === XVERSE) {
572
- if (address.slice(0, 1) === "t") {
573
- return TESTNET;
574
- }
575
- return MAINNET;
576
- } else if (provider === LEATHER) {
577
- if (address.slice(0, 1) === "t") {
578
- return TESTNET;
579
- }
580
- return MAINNET;
445
+ } else {
446
+ throw new Error("Unsupported wallet");
581
447
  }
582
448
  } catch (error) {
583
- console.error("error", error);
449
+ throw error;
584
450
  }
585
451
  });
586
452
  const switchNetwork = (network2) => __async(void 0, null, function* () {
587
453
  try {
588
454
  if (!library)
589
455
  return;
590
- if (provider === OYL) {
591
- new Error("Not implemented");
592
- } else if (provider === UNISAT) {
456
+ if (provider === UNISAT) {
593
457
  const wantedNetwork = getUnisatNetwork(network2);
594
458
  yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
595
459
  setNetwork(network2);
596
- } else if (provider === XVERSE) {
597
- return NETWORK;
598
- } else if (provider === LEATHER) {
599
- return NETWORK;
460
+ } else {
461
+ throw new Error("Unsupported wallet");
600
462
  }
601
463
  } catch (error) {
602
- console.error("error", error);
464
+ throw error;
603
465
  }
604
466
  });
605
467
  const getPublicKey = () => __async(void 0, null, function* () {
606
468
  try {
607
469
  if (!library)
608
470
  return;
609
- if (provider === OYL) {
610
- return yield library == null ? void 0 : library.getPublicKey();
611
- } else if (provider === UNISAT) {
471
+ if (provider === UNISAT) {
472
+ const pub = yield library == null ? void 0 : library.getPublicKey();
612
473
  return yield library == null ? void 0 : library.getPublicKey();
613
- } else if (provider === XVERSE) {
614
- new Error("Not implemented");
615
- } else if (provider === LEATHER) {
616
- new Error("Not implemented");
474
+ } else {
475
+ throw new Error("Unsupported wallet");
617
476
  }
618
477
  } catch (error) {
619
- console.error("error", error);
478
+ throw error;
620
479
  }
621
480
  });
622
481
  const getBalance = () => __async(void 0, null, function* () {
623
482
  try {
624
483
  if (!library)
625
484
  return;
626
- if (provider === OYL) {
485
+ if (provider === UNISAT) {
627
486
  return yield library.getBalance();
628
- } else if (provider === UNISAT) {
629
- return yield library.getBalance();
630
- } else if (provider === XVERSE) {
631
- new Error("Not implemented");
632
- } else if (provider === LEATHER) {
633
- new Error("Not implemented");
487
+ } else {
488
+ throw new Error("Unsupported wallet");
634
489
  }
635
490
  } catch (error) {
636
- console.error("error", error);
491
+ throw error;
637
492
  }
638
493
  });
639
494
  const getInscriptions = () => __async(void 0, null, function* () {
640
495
  try {
641
496
  if (!library)
642
497
  return;
643
- if (provider === OYL) {
498
+ if (provider === UNISAT) {
644
499
  return yield library.getInscriptions(0, 10);
645
- } else if (provider === UNISAT) {
646
- return yield library.getInscriptions(0, 10);
647
- } else if (provider === XVERSE) {
648
- new Error("Not implemented");
649
- } else if (provider === LEATHER) {
650
- new Error("Not implemented");
651
- }
652
- } catch (error) {
653
- console.error("error", error);
654
- }
655
- });
656
- const getAllBRC20Tokens = () => __async(void 0, null, function* () {
657
- try {
658
- if (!library)
659
- return;
660
- if (provider === OYL) {
661
- new Error("Not implemented");
662
- } else if (provider === UNISAT) {
663
- new Error("Not implemented");
664
- } else if (provider === XVERSE) {
665
- new Error("Not implemented");
666
- } else if (provider === LEATHER) {
667
- new Error("Not implemented");
500
+ } else {
501
+ throw new Error("Unsupported wallet");
668
502
  }
669
503
  } catch (error) {
670
- console.error("error", error);
504
+ throw error;
671
505
  }
672
506
  });
673
507
  const sendBTC = (to, amount) => __async(void 0, null, function* () {
674
508
  try {
675
- if (provider === OYL) {
676
- new Error("Not implemented");
677
- } else if (provider === UNISAT) {
678
- return yield library == null ? void 0 : library.sendBitcoin(to, amount);
679
- } else if (provider === XVERSE) {
680
- new Error("Not implemented");
681
- } else if (provider === LEATHER) {
682
- return yield library == null ? void 0 : library.request("sendTransfer", {
683
- address: to,
684
- amount: amount.toString()
685
- });
686
- }
687
- } catch (error) {
688
- console.error("error", error);
689
- }
690
- });
691
- const payInscribe = () => __async(void 0, null, function* () {
692
- try {
693
- if (!library)
694
- return;
695
- if (provider === OYL) {
696
- new Error("Not implemented");
697
- } else if (provider === UNISAT) {
698
- new Error("Not implemented");
699
- } else if (provider === XVERSE) {
700
- new Error("Not implemented");
701
- } else if (provider === LEATHER) {
702
- new Error("Not implemented");
703
- }
704
- } catch (error) {
705
- console.error("error", error);
706
- }
707
- });
708
- const deploy = () => __async(void 0, null, function* () {
709
- try {
710
- if (!library)
711
- return;
712
- if (provider === OYL) {
713
- new Error("Not implemented");
714
- } else if (provider === UNISAT) {
715
- new Error("Not implemented");
716
- } else if (provider === XVERSE) {
717
- new Error("Not implemented");
718
- } else if (provider === LEATHER) {
719
- new Error("Not implemented");
720
- }
721
- } catch (error) {
722
- console.error("error", error);
723
- }
724
- });
725
- const mint = () => __async(void 0, null, function* () {
726
- try {
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");
727
513
  if (!library)
728
- return;
729
- if (provider === OYL) {
730
- new Error("Not implemented");
731
- } else if (provider === UNISAT) {
732
- new Error("Not implemented");
733
- } else if (provider === XVERSE) {
734
- new Error("Not implemented");
735
- } else if (provider === LEATHER) {
736
- new Error("Not implemented");
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");
737
522
  }
738
523
  } catch (error) {
739
- console.error("error", error);
524
+ throw error;
740
525
  }
741
526
  });
742
527
  const signMessage = (message) => __async(void 0, null, function* () {
743
528
  try {
744
529
  if (!library)
745
530
  return;
746
- if (provider === OYL) {
747
- new Error("Not implemented");
748
- } else if (provider === UNISAT) {
531
+ if (provider === UNISAT) {
749
532
  return yield library == null ? void 0 : library.signMessage(message);
750
- } else if (provider === XVERSE) {
751
- new Error("Not implemented");
752
- } else if (provider === LEATHER) {
753
- return yield library == null ? void 0 : library.request("signMessage", {
754
- message,
755
- paymentType: P2TR
756
- });
533
+ } else {
534
+ throw new Error("Unsupported wallet");
757
535
  }
758
536
  } catch (error) {
759
- console.error("error", error);
537
+ throw error;
760
538
  }
761
539
  });
762
540
  const signPsbt = (psbt, finalize = false, broadcast = true) => __async(void 0, null, function* () {
763
541
  try {
542
+ let psbtHex, psbtBase64;
764
543
  if (!library)
765
544
  return;
766
- if (provider === OYL) {
767
- const response = yield library == null ? void 0 : library.signPsbt(psbt);
768
- return response;
769
- } else if (provider === UNISAT) {
770
- return 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, {
771
556
  autoFinalized: finalize
772
557
  });
773
- } else if (provider === XVERSE) {
774
- const toSignPsbt = bitcoin.Psbt.fromBase64(String(psbt), {
775
- network: bitcoin.networks.testnet
776
- });
777
- const inputs = toSignPsbt.data.inputs;
778
- const inputsToSign = [];
779
- const ordinalAddressData = {
780
- address,
781
- signingIndexes: []
782
- };
783
- const paymentsAddressData = {
784
- address: paymentAddress,
785
- signingIndexes: []
786
- };
787
- let counter = 0;
788
- try {
789
- for (var iter = __forAwait(inputs), more, temp, error; more = !(temp = yield iter.next()).done; more = false) {
790
- let input = temp.value;
791
- const { script } = input.witnessUtxo;
792
- const addressFromScript = fromOutputScript(
793
- script,
794
- bitcoin.networks.testnet
795
- );
796
- if (addressFromScript === paymentAddress) {
797
- paymentsAddressData.signingIndexes.push(Number(counter));
798
- } else if (addressFromScript === address) {
799
- ordinalAddressData.signingIndexes.push(Number(counter));
800
- }
801
- counter++;
802
- }
803
- } catch (temp) {
804
- error = [temp];
805
- } finally {
806
- try {
807
- more && (temp = iter.return) && (yield temp.call(iter));
808
- } finally {
809
- if (error)
810
- throw error[0];
811
- }
558
+ if (broadcast) {
559
+ const txId = yield pushPsbt(signedPsbt);
560
+ return {
561
+ signedPsbtHex: signedPsbt.toHex(),
562
+ signedPsbtBase64: signedPsbt.toBase64(),
563
+ txId
564
+ };
812
565
  }
813
- if (ordinalAddressData.signingIndexes.length > 0) {
814
- inputsToSign.push(ordinalAddressData);
815
- }
816
- if (paymentsAddressData.signingIndexes.length > 0) {
817
- inputsToSign.push(paymentsAddressData);
818
- }
819
- let txId = "";
820
- const xverseNetwork = getXverseNetwork(network);
821
- const signPsbtOptions = {
822
- payload: {
823
- network: {
824
- type: xverseNetwork
825
- },
826
- message: "Sign Transaction",
827
- psbtBase64: toSignPsbt.toBase64(),
828
- broadcast,
829
- inputsToSign
830
- },
831
- onFinish: (response) => {
832
- if (response.txId) {
833
- txId = response.txId;
834
- } else if (response.psbtBase64) {
835
- const signedPsbt = bitcoin.Psbt.fromBase64(
836
- String(response.psbtBase64),
837
- {
838
- network: bitcoin.networks.testnet
839
- }
840
- );
841
- txId = signedPsbt.toHex();
842
- }
843
- },
844
- onCancel: () => console.log("Canceled")
566
+ return {
567
+ signedPsbtHex: signedPsbt.toHex(),
568
+ signedPsbtBase64: signedPsbt.toBase64()
845
569
  };
846
- yield signTransaction(signPsbtOptions);
847
- return txId;
848
- } else if (provider === LEATHER) {
849
- const requestParams = { hex: psbt, broadcast };
850
- const response = yield library == null ? void 0 : library.request(
851
- "signPsbt",
852
- requestParams
853
- );
854
- const leatherHexResult = response.result;
855
- const signedTx = leatherHexResult.hex;
856
- if (!broadcast) {
857
- return signedTx;
858
- }
859
- const toSignPsbt = bitcoin.Psbt.fromHex(String(signedTx), {
860
- network: bitcoin.networks.testnet
861
- });
862
- toSignPsbt.finalizeAllInputs();
863
- const txId = toSignPsbt.extractTransaction().getId();
864
- return txId;
570
+ } else {
571
+ throw new Error("Unsupported wallet");
865
572
  }
866
- } catch (error2) {
867
- console.error("error", error2);
573
+ } catch (error) {
574
+ throw error;
868
575
  }
869
576
  });
870
- const pushPsbt = (psbt, finalize = false) => __async(void 0, null, function* () {
577
+ const pushPsbt = (psbt) => __async(void 0, null, function* () {
871
578
  try {
872
579
  if (!library)
873
580
  return;
874
- if (provider === OYL) {
875
- return yield library == null ? void 0 : library.pushPsbt(psbt);
876
- } else if (provider === UNISAT) {
581
+ if (provider === UNISAT) {
877
582
  return yield library == null ? void 0 : library.pushPsbt(psbt);
878
- } else if (provider === XVERSE) {
879
- const signPsbtOptions = {
880
- payload: {
881
- network: {
882
- type: NETWORK
883
- },
884
- message: "Sign Transaction",
885
- psbtBase64: `cHNidP8BAJwCAmO+JvQJxhVDDpm3tV5PmPfzvJOSL4GOdjEOpAAAAAAnrAAA==`,
886
- broadcast: false,
887
- inputsToSign: [
888
- {
889
- address: "33TKH4kkiFPyTLDNmdNsLggyLeAYre57Qm",
890
- signingIndexes: [1]
891
- }
892
- ]
893
- },
894
- onFinish: (response) => {
895
- },
896
- onCancel: () => console.log("Canceled")
897
- };
898
- yield signTransaction(signPsbtOptions);
583
+ } else {
584
+ throw new Error("Unsupported wallet");
899
585
  }
900
586
  } catch (error) {
901
- console.error("error", error);
587
+ throw error;
902
588
  }
903
589
  });
904
- const contextValue = {
905
- library,
906
- accounts,
907
- publicKey,
908
- address,
909
- paymentAddress,
910
- paymentPublicKey,
911
- provider,
912
- balance,
913
- network,
914
- connected,
915
- isConnecting,
916
- hasOyl,
917
- hasUnisat,
918
- hasXverse,
919
- hasLeather,
920
- //
921
- connect,
922
- disconnect,
923
- requestAccounts,
924
- getNetwork,
925
- switchNetwork,
926
- getPublicKey,
927
- getBalance,
928
- getInscriptions,
929
- getAllBRC20Tokens,
930
- sendBTC,
931
- signPsbt,
932
- pushPsbt,
933
- payInscribe,
934
- deploy,
935
- mint,
936
- signMessage
937
- };
938
- return /* @__PURE__ */ jsx(LaserEyesContext.Provider, { value: contextValue, children });
590
+ return /* @__PURE__ */ jsx(
591
+ LaserEyesContext.Provider,
592
+ {
593
+ value: {
594
+ library,
595
+ accounts,
596
+ publicKey,
597
+ address,
598
+ paymentAddress,
599
+ paymentPublicKey,
600
+ provider,
601
+ balance,
602
+ network,
603
+ connected,
604
+ isConnecting,
605
+ hasUnisat,
606
+ // functions
607
+ connect,
608
+ disconnect,
609
+ requestAccounts,
610
+ getNetwork,
611
+ switchNetwork,
612
+ getPublicKey,
613
+ getBalance,
614
+ getInscriptions,
615
+ sendBTC,
616
+ signPsbt,
617
+ pushPsbt,
618
+ signMessage
619
+ },
620
+ children
621
+ }
622
+ );
939
623
  };
940
624
  export {
941
625
  LEATHER,
@@ -943,6 +627,8 @@ export {
943
627
  LEATHER_TESTNET,
944
628
  LaserEyesProvider,
945
629
  MAINNET,
630
+ MEMPOOL_SPACE_TESTNET_URL,
631
+ MEMPOOL_SPACE_URL,
946
632
  OYL,
947
633
  P2PKH,
948
634
  P2SH,
@@ -950,6 +636,7 @@ export {
950
636
  P2WPKH,
951
637
  P2WSH,
952
638
  PHANTOM,
639
+ REGTEST,
953
640
  TESTNET,
954
641
  UNISAT,
955
642
  UNISAT_MAINNET,
@@ -960,11 +647,19 @@ export {
960
647
  XVERSE_NETWORK,
961
648
  XVERSE_TESTNET,
962
649
  createConfig,
650
+ findOrdinalsAddress,
651
+ findPaymentAddress,
652
+ getBTCBalance,
653
+ getBitcoinNetwork,
963
654
  getLeatherNetwork,
655
+ getMempoolSpaceUrl,
964
656
  getNetworkForLeather,
965
657
  getNetworkForUnisat,
966
658
  getNetworkForXverse,
967
659
  getUnisatNetwork,
968
660
  getXverseNetwork,
661
+ isBase64,
662
+ isHex,
663
+ satoshisToBTC,
969
664
  useLaserEyes
970
665
  };