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