@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/README.md +0 -1
- package/dist/index.js +230 -418
- package/dist/index.mjs +220 -418
- package/package.json +6 -3
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/
|
|
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
|
-
|
|
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 [
|
|
271
|
-
|
|
282
|
+
const [network, setNetwork] = useLocalStorage("network", MAINNET, {
|
|
283
|
+
initializeWithValue: false
|
|
284
|
+
});
|
|
272
285
|
useEffect(() => {
|
|
273
286
|
if (config) {
|
|
274
287
|
setNetwork(config.network);
|
|
275
|
-
|
|
276
|
-
|
|
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
|
-
|
|
289
|
-
|
|
290
|
-
setHasXverse(!!xverseLib);
|
|
291
|
-
}, []);
|
|
302
|
+
setBalance(void 0);
|
|
303
|
+
}, [network]);
|
|
292
304
|
useEffect(() => {
|
|
293
|
-
|
|
294
|
-
|
|
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
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
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
|
|
329
|
-
|
|
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
|
-
|
|
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
|
-
|
|
375
|
+
const foundNetwork = getNetworkForUnisat(String(network2));
|
|
376
|
+
setNetwork(foundNetwork);
|
|
452
377
|
}
|
|
453
378
|
});
|
|
454
379
|
const handleNetworkChanged = (network2) => {
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
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 ===
|
|
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("
|
|
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 ===
|
|
507
|
-
return yield library.requestAccounts();
|
|
508
|
-
} else if (provider === UNISAT) {
|
|
427
|
+
if (provider === UNISAT) {
|
|
509
428
|
return yield library.requestAccounts();
|
|
510
|
-
} else
|
|
511
|
-
|
|
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 ===
|
|
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
|
|
550
|
-
throw new Error("
|
|
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 ===
|
|
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
|
|
569
|
-
throw new Error("
|
|
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 ===
|
|
580
|
-
|
|
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
|
|
584
|
-
throw new Error("
|
|
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 ===
|
|
485
|
+
if (provider === UNISAT) {
|
|
598
486
|
return yield library.getBalance();
|
|
599
|
-
} else
|
|
600
|
-
|
|
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 ===
|
|
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
|
|
617
|
-
throw new Error("
|
|
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 (
|
|
628
|
-
new Error("
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
new Error("
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
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
|
-
|
|
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 ===
|
|
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
|
|
652
|
-
throw new Error("
|
|
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 (
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
} else if (
|
|
667
|
-
|
|
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
|
-
|
|
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
|
|
676
|
-
|
|
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 (
|
|
758
|
-
|
|
759
|
-
throw error2;
|
|
573
|
+
} catch (error) {
|
|
574
|
+
throw error;
|
|
760
575
|
}
|
|
761
576
|
});
|
|
762
|
-
const pushPsbt = (psbt
|
|
577
|
+
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
763
578
|
try {
|
|
764
579
|
if (!library)
|
|
765
580
|
return;
|
|
766
|
-
if (provider ===
|
|
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
|
|
771
|
-
|
|
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
|
-
|
|
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
|
};
|