@omnisat/lasereyes 0.0.5 → 0.0.7
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/LICENSE +17 -0
- package/README.md +4 -2
- package/dist/index.js +232 -432
- package/dist/index.mjs +222 -432
- 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,165 +277,31 @@ 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
|
+
});
|
|
285
|
+
const defaultWallet = localStorage == null ? void 0 : localStorage.getItem(LOCAL_STORAGE_DEFAULT_WALLET);
|
|
272
286
|
useEffect(() => {
|
|
273
287
|
if (config) {
|
|
274
288
|
setNetwork(config.network);
|
|
275
|
-
|
|
276
|
-
|
|
289
|
+
getNetwork().then((foundNetwork) => {
|
|
290
|
+
if (config.network !== foundNetwork) {
|
|
291
|
+
switchNetwork(network);
|
|
292
|
+
} else if (network !== foundNetwork) {
|
|
293
|
+
setNetwork(network);
|
|
294
|
+
}
|
|
295
|
+
});
|
|
277
296
|
}
|
|
278
|
-
}, [config]);
|
|
279
|
-
useEffect(() => {
|
|
280
|
-
const oylLib = window == null ? void 0 : window.oyl;
|
|
281
|
-
setHasOyl(!!oylLib);
|
|
282
|
-
}, []);
|
|
297
|
+
}, [config, library]);
|
|
283
298
|
useEffect(() => {
|
|
284
299
|
const unisatLib = window == null ? void 0 : window.unisat;
|
|
285
300
|
setHasUnisat(!!unisatLib);
|
|
286
301
|
}, []);
|
|
287
302
|
useEffect(() => {
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
setHasXverse(!!xverseLib);
|
|
291
|
-
}, []);
|
|
292
|
-
useEffect(() => {
|
|
293
|
-
const leatherLib = window == null ? void 0 : window.LeatherProvider;
|
|
294
|
-
setHasLeather(!!leatherLib);
|
|
295
|
-
}, []);
|
|
296
|
-
const selfRef = useRef({
|
|
297
|
-
accounts: []
|
|
298
|
-
});
|
|
299
|
-
const self = selfRef.current;
|
|
300
|
-
const connectOyl = () => __async(void 0, null, function* () {
|
|
301
|
-
try {
|
|
302
|
-
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, OYL);
|
|
303
|
-
const lib = window.oyl;
|
|
304
|
-
const result = yield lib.requestAccounts();
|
|
305
|
-
setAccounts(result);
|
|
306
|
-
setAddress(result[0]);
|
|
307
|
-
setPaymentAddress(result[0]);
|
|
308
|
-
setLibrary(lib);
|
|
309
|
-
setProvider(OYL);
|
|
310
|
-
handleAccountsChanged(result);
|
|
311
|
-
setConnected(true);
|
|
312
|
-
} catch (error) {
|
|
313
|
-
throw new Error(`Can't lasereyes to ${OYL} wallet`);
|
|
314
|
-
}
|
|
315
|
-
});
|
|
316
|
-
const connectUnisat = () => __async(void 0, null, function* () {
|
|
317
|
-
try {
|
|
318
|
-
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, UNISAT);
|
|
319
|
-
const lib = window.unisat;
|
|
320
|
-
const result = yield lib.requestAccounts();
|
|
321
|
-
setAccounts(result);
|
|
322
|
-
setAddress(result[0]);
|
|
323
|
-
setPaymentAddress(result[0]);
|
|
324
|
-
setLibrary(lib);
|
|
325
|
-
setProvider(UNISAT);
|
|
326
|
-
handleAccountsChanged(result);
|
|
327
|
-
setConnected(true);
|
|
328
|
-
yield getNetwork().then((network2) => {
|
|
329
|
-
const foundNetwork = getNetworkForUnisat(String(network2));
|
|
330
|
-
setNetwork(foundNetwork);
|
|
331
|
-
});
|
|
332
|
-
} catch (error) {
|
|
333
|
-
throw new Error(`Can't lasereyes to ${UNISAT} wallet`);
|
|
334
|
-
}
|
|
335
|
-
});
|
|
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
|
-
const handleAccountsChanged = (_accounts) => {
|
|
405
|
-
if (self.accounts[0] === _accounts[0]) {
|
|
406
|
-
return;
|
|
407
|
-
}
|
|
408
|
-
self.accounts = _accounts;
|
|
409
|
-
if (_accounts.length > 0) {
|
|
410
|
-
setAccounts(_accounts);
|
|
411
|
-
setConnected(true);
|
|
412
|
-
setAddress(_accounts[0]);
|
|
413
|
-
setPaymentAddress(_accounts[0]);
|
|
414
|
-
getBasicInfo();
|
|
415
|
-
} else {
|
|
416
|
-
setConnected(false);
|
|
417
|
-
}
|
|
418
|
-
};
|
|
303
|
+
setBalance(void 0);
|
|
304
|
+
}, [network]);
|
|
419
305
|
useEffect(() => {
|
|
420
306
|
if (provider !== UNISAT) {
|
|
421
307
|
return;
|
|
@@ -431,56 +317,73 @@ var LaserEyesProvider = ({
|
|
|
431
317
|
};
|
|
432
318
|
}, [library]);
|
|
433
319
|
useEffect(() => {
|
|
434
|
-
|
|
435
|
-
LOCAL_STORAGE_DEFAULT_WALLET
|
|
436
|
-
);
|
|
437
|
-
if (defaultWallet) {
|
|
320
|
+
if (defaultWallet && !isConnecting) {
|
|
438
321
|
setProvider(defaultWallet);
|
|
439
322
|
connect(defaultWallet);
|
|
440
323
|
}
|
|
441
324
|
}, []);
|
|
442
|
-
const
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
325
|
+
const connectUnisat = () => __async(void 0, null, function* () {
|
|
326
|
+
try {
|
|
327
|
+
localStorage == null ? void 0 : localStorage.setItem(LOCAL_STORAGE_DEFAULT_WALLET, UNISAT);
|
|
328
|
+
const lib = window.unisat;
|
|
329
|
+
const unisatAccounts = yield lib.requestAccounts();
|
|
330
|
+
if (!unisatAccounts)
|
|
331
|
+
throw new Error("No accounts found");
|
|
332
|
+
const unisatPubKey = yield lib.getPublicKey();
|
|
333
|
+
if (!unisatPubKey)
|
|
334
|
+
throw new Error("No public key found");
|
|
335
|
+
setAccounts(unisatAccounts);
|
|
336
|
+
setAddress(unisatAccounts[0]);
|
|
337
|
+
setPaymentAddress(unisatAccounts[0]);
|
|
338
|
+
setPublicKey(unisatPubKey);
|
|
339
|
+
setPaymentPublicKey(unisatPubKey);
|
|
340
|
+
setLibrary(lib);
|
|
341
|
+
setProvider(UNISAT);
|
|
342
|
+
setConnected(true);
|
|
343
|
+
const balance2 = yield lib == null ? void 0 : lib.getBalance();
|
|
344
|
+
setBalance(balance2 == null ? void 0 : balance2.total);
|
|
345
|
+
} catch (error) {
|
|
346
|
+
throw error;
|
|
452
347
|
}
|
|
453
348
|
});
|
|
454
|
-
const
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
349
|
+
const handleAccountsChanged = (_accounts) => {
|
|
350
|
+
if (!_accounts.length) {
|
|
351
|
+
disconnect();
|
|
352
|
+
return;
|
|
458
353
|
}
|
|
459
|
-
if (
|
|
460
|
-
|
|
354
|
+
if (self.accounts[0] === _accounts[0]) {
|
|
355
|
+
return;
|
|
461
356
|
}
|
|
462
|
-
|
|
463
|
-
|
|
357
|
+
self.accounts = _accounts;
|
|
358
|
+
if (_accounts.length > 0) {
|
|
359
|
+
connect(UNISAT);
|
|
360
|
+
} else {
|
|
361
|
+
setConnected(false);
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
const handleNetworkChanged = (network2) => {
|
|
365
|
+
try {
|
|
366
|
+
let foundNetwork = MAINNET;
|
|
367
|
+
if (provider === UNISAT) {
|
|
368
|
+
foundNetwork = getNetworkForUnisat(network2);
|
|
369
|
+
setNetwork(foundNetwork);
|
|
370
|
+
connect(provider);
|
|
371
|
+
} else {
|
|
372
|
+
throw new Error("Unsupported wallet");
|
|
373
|
+
}
|
|
374
|
+
} catch (error) {
|
|
375
|
+
throw error;
|
|
464
376
|
}
|
|
465
|
-
setNetwork(foundNetwork);
|
|
466
|
-
getBasicInfo();
|
|
467
377
|
};
|
|
468
378
|
const connect = (walletName) => __async(void 0, null, function* () {
|
|
469
|
-
console.log("connecting");
|
|
470
379
|
setIsConnecting(true);
|
|
471
380
|
try {
|
|
472
381
|
if (!walletName)
|
|
473
382
|
throw new Error("No wallet provided");
|
|
474
|
-
if (walletName ===
|
|
475
|
-
yield connectOyl();
|
|
476
|
-
} else if (walletName === UNISAT) {
|
|
383
|
+
if (walletName === UNISAT) {
|
|
477
384
|
yield connectUnisat();
|
|
478
|
-
} else if (walletName === XVERSE) {
|
|
479
|
-
yield connectXverse();
|
|
480
|
-
} else if (walletName === LEATHER) {
|
|
481
|
-
yield connectLeather();
|
|
482
385
|
} else {
|
|
483
|
-
throw new Error("
|
|
386
|
+
throw new Error("Unsupported wallet!");
|
|
484
387
|
}
|
|
485
388
|
setConnected(true);
|
|
486
389
|
} catch (error) {
|
|
@@ -493,43 +396,24 @@ var LaserEyesProvider = ({
|
|
|
493
396
|
});
|
|
494
397
|
const disconnect = () => {
|
|
495
398
|
setAddress("");
|
|
399
|
+
setPaymentAddress("");
|
|
400
|
+
setPublicKey("");
|
|
401
|
+
setPaymentPublicKey("");
|
|
496
402
|
setAccounts([]);
|
|
497
|
-
setProvider(
|
|
403
|
+
setProvider(void 0);
|
|
498
404
|
setLibrary(null);
|
|
499
405
|
setConnected(false);
|
|
406
|
+
setBalance(void 0);
|
|
500
407
|
localStorage == null ? void 0 : localStorage.removeItem(LOCAL_STORAGE_DEFAULT_WALLET);
|
|
501
408
|
};
|
|
502
409
|
const requestAccounts = () => __async(void 0, null, function* () {
|
|
503
410
|
try {
|
|
504
411
|
if (!library)
|
|
505
412
|
return;
|
|
506
|
-
if (provider ===
|
|
413
|
+
if (provider === UNISAT) {
|
|
507
414
|
return yield library.requestAccounts();
|
|
508
|
-
} else
|
|
509
|
-
|
|
510
|
-
} else if (provider === XVERSE) {
|
|
511
|
-
const getAddressOptions = {
|
|
512
|
-
payload: {
|
|
513
|
-
// @ts-ignore
|
|
514
|
-
purposes: ["ordinals", "payment"],
|
|
515
|
-
message: "Address for receiving Ordinals and payments",
|
|
516
|
-
network: {
|
|
517
|
-
type: XVERSE_NETWORK
|
|
518
|
-
}
|
|
519
|
-
},
|
|
520
|
-
onFinish: (response) => __async(void 0, null, function* () {
|
|
521
|
-
const foundAddress = findOrdinalsAddress(response.addresses);
|
|
522
|
-
setAddress(foundAddress.address);
|
|
523
|
-
const foundPaymentAddress = findPaymentAddress(response.addresses);
|
|
524
|
-
setPaymentAddress(foundPaymentAddress);
|
|
525
|
-
setPublicKey(String(response.addresses[0].publicKey));
|
|
526
|
-
setPaymentPublicKey(String(response.addresses[1].publicKey));
|
|
527
|
-
}),
|
|
528
|
-
onCancel: () => {
|
|
529
|
-
throw new Error("User cancelled");
|
|
530
|
-
}
|
|
531
|
-
};
|
|
532
|
-
return [address];
|
|
415
|
+
} else {
|
|
416
|
+
throw new Error("Unsupported wallet");
|
|
533
417
|
}
|
|
534
418
|
} catch (error) {
|
|
535
419
|
throw error;
|
|
@@ -539,17 +423,13 @@ var LaserEyesProvider = ({
|
|
|
539
423
|
try {
|
|
540
424
|
if (!library)
|
|
541
425
|
return;
|
|
542
|
-
if (provider ===
|
|
543
|
-
throw new Error("Not implemented");
|
|
544
|
-
} else if (provider === UNISAT) {
|
|
426
|
+
if (provider === UNISAT) {
|
|
545
427
|
const unisatNetwork = yield library == null ? void 0 : library.getNetwork();
|
|
546
428
|
const foundNetwork = getNetworkForUnisat(unisatNetwork);
|
|
547
429
|
setNetwork(foundNetwork);
|
|
548
430
|
return foundNetwork;
|
|
549
|
-
} else
|
|
550
|
-
throw new Error("
|
|
551
|
-
} else if (provider === LEATHER) {
|
|
552
|
-
throw new Error("Not implemented");
|
|
431
|
+
} else {
|
|
432
|
+
throw new Error("Unsupported wallet");
|
|
553
433
|
}
|
|
554
434
|
} catch (error) {
|
|
555
435
|
throw error;
|
|
@@ -559,14 +439,12 @@ var LaserEyesProvider = ({
|
|
|
559
439
|
try {
|
|
560
440
|
if (!library)
|
|
561
441
|
return;
|
|
562
|
-
if (provider ===
|
|
563
|
-
throw new Error("Not implemented");
|
|
564
|
-
} else if (provider === UNISAT) {
|
|
442
|
+
if (provider === UNISAT) {
|
|
565
443
|
const wantedNetwork = getUnisatNetwork(network2);
|
|
566
444
|
yield library == null ? void 0 : library.switchNetwork(wantedNetwork);
|
|
567
445
|
setNetwork(network2);
|
|
568
|
-
} else
|
|
569
|
-
throw new Error("
|
|
446
|
+
} else {
|
|
447
|
+
throw new Error("Unsupported wallet");
|
|
570
448
|
}
|
|
571
449
|
} catch (error) {
|
|
572
450
|
throw error;
|
|
@@ -576,17 +454,13 @@ var LaserEyesProvider = ({
|
|
|
576
454
|
try {
|
|
577
455
|
if (!library)
|
|
578
456
|
return;
|
|
579
|
-
if (provider ===
|
|
580
|
-
|
|
581
|
-
} else if (provider === UNISAT) {
|
|
457
|
+
if (provider === UNISAT) {
|
|
458
|
+
const pub = yield library == null ? void 0 : library.getPublicKey();
|
|
582
459
|
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");
|
|
460
|
+
} else {
|
|
461
|
+
throw new Error("Unsupported wallet");
|
|
587
462
|
}
|
|
588
463
|
} catch (error) {
|
|
589
|
-
console.error("error", error);
|
|
590
464
|
throw error;
|
|
591
465
|
}
|
|
592
466
|
});
|
|
@@ -594,12 +468,10 @@ var LaserEyesProvider = ({
|
|
|
594
468
|
try {
|
|
595
469
|
if (!library)
|
|
596
470
|
return;
|
|
597
|
-
if (provider ===
|
|
598
|
-
return yield library.getBalance();
|
|
599
|
-
} else if (provider === UNISAT) {
|
|
471
|
+
if (provider === UNISAT) {
|
|
600
472
|
return yield library.getBalance();
|
|
601
|
-
} else
|
|
602
|
-
throw new Error("
|
|
473
|
+
} else {
|
|
474
|
+
throw new Error("Unsupported wallet");
|
|
603
475
|
}
|
|
604
476
|
} catch (error) {
|
|
605
477
|
throw error;
|
|
@@ -609,14 +481,10 @@ var LaserEyesProvider = ({
|
|
|
609
481
|
try {
|
|
610
482
|
if (!library)
|
|
611
483
|
return;
|
|
612
|
-
if (provider ===
|
|
484
|
+
if (provider === UNISAT) {
|
|
613
485
|
return yield library.getInscriptions(0, 10);
|
|
614
|
-
} else
|
|
615
|
-
|
|
616
|
-
} else if (provider === XVERSE) {
|
|
617
|
-
throw new Error("Not implemented");
|
|
618
|
-
} else if (provider === LEATHER) {
|
|
619
|
-
throw new Error("Not implemented");
|
|
486
|
+
} else {
|
|
487
|
+
throw new Error("Unsupported wallet");
|
|
620
488
|
}
|
|
621
489
|
} catch (error) {
|
|
622
490
|
throw error;
|
|
@@ -624,173 +492,87 @@ var LaserEyesProvider = ({
|
|
|
624
492
|
});
|
|
625
493
|
const sendBTC = (to, amount) => __async(void 0, null, function* () {
|
|
626
494
|
try {
|
|
627
|
-
if (
|
|
628
|
-
new Error("
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
new Error("
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
495
|
+
if (amount <= 0)
|
|
496
|
+
throw new Error("Amount must be greater than 0");
|
|
497
|
+
if (!Number.isInteger(amount))
|
|
498
|
+
throw new Error("Amount must be an integer");
|
|
499
|
+
if (!library)
|
|
500
|
+
throw new Error("Library not found");
|
|
501
|
+
if (provider === UNISAT) {
|
|
502
|
+
const txId = yield library == null ? void 0 : library.sendBitcoin(to, amount);
|
|
503
|
+
if (!txId)
|
|
504
|
+
throw new Error("Transaction failed");
|
|
505
|
+
return txId;
|
|
506
|
+
} else {
|
|
507
|
+
throw new Error("Unsupported wallet");
|
|
638
508
|
}
|
|
639
509
|
} catch (error) {
|
|
640
|
-
|
|
510
|
+
throw error;
|
|
641
511
|
}
|
|
642
512
|
});
|
|
643
513
|
const signMessage = (message) => __async(void 0, null, function* () {
|
|
644
514
|
try {
|
|
645
515
|
if (!library)
|
|
646
516
|
return;
|
|
647
|
-
if (provider ===
|
|
648
|
-
throw new Error("Not implemented");
|
|
649
|
-
} else if (provider === UNISAT) {
|
|
517
|
+
if (provider === UNISAT) {
|
|
650
518
|
return yield library == null ? void 0 : library.signMessage(message);
|
|
651
|
-
} else
|
|
652
|
-
throw new Error("
|
|
519
|
+
} else {
|
|
520
|
+
throw new Error("Unsupported wallet");
|
|
653
521
|
}
|
|
654
522
|
} catch (error) {
|
|
655
|
-
console.error(error);
|
|
656
523
|
throw error;
|
|
657
524
|
}
|
|
658
525
|
});
|
|
659
|
-
const signPsbt = (psbt, finalize = false, broadcast =
|
|
526
|
+
const signPsbt = (psbt, finalize = false, broadcast = false) => __async(void 0, null, function* () {
|
|
660
527
|
try {
|
|
528
|
+
let psbtHex, psbtBase64;
|
|
661
529
|
if (!library)
|
|
662
530
|
return;
|
|
663
|
-
if (
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
} else if (
|
|
667
|
-
|
|
531
|
+
if (isHex(psbt)) {
|
|
532
|
+
psbtBase64 = bitcoin2.Psbt.fromHex(psbt).toBase64();
|
|
533
|
+
psbtHex = psbt;
|
|
534
|
+
} else if (isBase64(psbt)) {
|
|
535
|
+
psbtHex = bitcoin2.Psbt.fromBase64(psbt).toHex();
|
|
536
|
+
psbtBase64 = psbt;
|
|
537
|
+
} else {
|
|
538
|
+
throw new Error("Invalid PSBT format");
|
|
539
|
+
}
|
|
540
|
+
if (provider === UNISAT) {
|
|
541
|
+
const signedPsbt = yield library == null ? void 0 : library.signPsbt(psbtHex, {
|
|
668
542
|
autoFinalized: finalize
|
|
669
543
|
});
|
|
670
|
-
const
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
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);
|
|
544
|
+
const psbtSignedPsbt = bitcoin2.Psbt.fromHex(signedPsbt);
|
|
545
|
+
if (finalize && broadcast) {
|
|
546
|
+
const txId = yield pushPsbt(signedPsbt);
|
|
547
|
+
return {
|
|
548
|
+
signedPsbtHex: psbtSignedPsbt.toHex(),
|
|
549
|
+
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
550
|
+
txId
|
|
551
|
+
};
|
|
717
552
|
}
|
|
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
553
|
return {
|
|
752
|
-
signedPsbtHex,
|
|
753
|
-
signedPsbtBase64,
|
|
754
|
-
txId
|
|
554
|
+
signedPsbtHex: psbtSignedPsbt.toHex(),
|
|
555
|
+
signedPsbtBase64: psbtSignedPsbt.toBase64(),
|
|
556
|
+
txId: void 0
|
|
755
557
|
};
|
|
558
|
+
} else {
|
|
559
|
+
throw new Error("Unsupported wallet");
|
|
756
560
|
}
|
|
757
|
-
} catch (
|
|
758
|
-
|
|
759
|
-
throw error2;
|
|
561
|
+
} catch (error) {
|
|
562
|
+
throw error;
|
|
760
563
|
}
|
|
761
564
|
});
|
|
762
|
-
const pushPsbt = (psbt
|
|
565
|
+
const pushPsbt = (psbt) => __async(void 0, null, function* () {
|
|
763
566
|
try {
|
|
764
567
|
if (!library)
|
|
765
568
|
return;
|
|
766
|
-
if (provider ===
|
|
767
|
-
return yield library == null ? void 0 : library.pushPsbt(psbt);
|
|
768
|
-
} else if (provider === UNISAT) {
|
|
569
|
+
if (provider === UNISAT) {
|
|
769
570
|
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);
|
|
571
|
+
} else {
|
|
572
|
+
throw new Error("Unsupported wallet");
|
|
791
573
|
}
|
|
792
574
|
} catch (error) {
|
|
793
|
-
|
|
575
|
+
throw error;
|
|
794
576
|
}
|
|
795
577
|
});
|
|
796
578
|
return /* @__PURE__ */ jsx(
|
|
@@ -808,10 +590,7 @@ var LaserEyesProvider = ({
|
|
|
808
590
|
network,
|
|
809
591
|
connected,
|
|
810
592
|
isConnecting,
|
|
811
|
-
hasOyl,
|
|
812
593
|
hasUnisat,
|
|
813
|
-
hasXverse,
|
|
814
|
-
hasLeather,
|
|
815
594
|
// functions
|
|
816
595
|
connect,
|
|
817
596
|
disconnect,
|
|
@@ -820,6 +599,7 @@ var LaserEyesProvider = ({
|
|
|
820
599
|
switchNetwork,
|
|
821
600
|
getPublicKey,
|
|
822
601
|
getBalance,
|
|
602
|
+
getInscriptions,
|
|
823
603
|
sendBTC,
|
|
824
604
|
signPsbt,
|
|
825
605
|
pushPsbt,
|
|
@@ -835,6 +615,8 @@ export {
|
|
|
835
615
|
LEATHER_TESTNET,
|
|
836
616
|
LaserEyesProvider,
|
|
837
617
|
MAINNET,
|
|
618
|
+
MEMPOOL_SPACE_TESTNET_URL,
|
|
619
|
+
MEMPOOL_SPACE_URL,
|
|
838
620
|
OYL,
|
|
839
621
|
P2PKH,
|
|
840
622
|
P2SH,
|
|
@@ -853,11 +635,19 @@ export {
|
|
|
853
635
|
XVERSE_NETWORK,
|
|
854
636
|
XVERSE_TESTNET,
|
|
855
637
|
createConfig,
|
|
638
|
+
findOrdinalsAddress,
|
|
639
|
+
findPaymentAddress,
|
|
640
|
+
getBTCBalance,
|
|
641
|
+
getBitcoinNetwork,
|
|
856
642
|
getLeatherNetwork,
|
|
643
|
+
getMempoolSpaceUrl,
|
|
857
644
|
getNetworkForLeather,
|
|
858
645
|
getNetworkForUnisat,
|
|
859
646
|
getNetworkForXverse,
|
|
860
647
|
getUnisatNetwork,
|
|
861
648
|
getXverseNetwork,
|
|
649
|
+
isBase64,
|
|
650
|
+
isHex,
|
|
651
|
+
satoshisToBTC,
|
|
862
652
|
useLaserEyes
|
|
863
653
|
};
|