@sats-connect/core 0.0.2-7d8cb11 → 0.0.3-194d10e

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.
Files changed (95) hide show
  1. package/README.md +0 -1
  2. package/dist/index.d.mts +693 -0
  3. package/dist/index.mjs +831 -0
  4. package/package.json +7 -3
  5. package/dist/adapters/BaseAdapter.d.ts +0 -9
  6. package/dist/adapters/BaseAdapter.js +0 -17
  7. package/dist/adapters/BaseAdapter.js.map +0 -1
  8. package/dist/adapters/index.d.ts +0 -6
  9. package/dist/adapters/index.js +0 -43
  10. package/dist/adapters/index.js.map +0 -1
  11. package/dist/adapters/satsConnectAdapter.d.ts +0 -7
  12. package/dist/adapters/satsConnectAdapter.js +0 -7
  13. package/dist/adapters/satsConnectAdapter.js.map +0 -1
  14. package/dist/adapters/unisat.d.ts +0 -38
  15. package/dist/adapters/unisat.js +0 -160
  16. package/dist/adapters/unisat.js.map +0 -1
  17. package/dist/adapters/xverse.d.ts +0 -8
  18. package/dist/adapters/xverse.js +0 -14
  19. package/dist/adapters/xverse.js.map +0 -1
  20. package/dist/addresses/index.d.ts +0 -3
  21. package/dist/addresses/index.js +0 -38
  22. package/dist/addresses/index.js.map +0 -1
  23. package/dist/addresses/types.d.ts +0 -28
  24. package/dist/addresses/types.js +0 -19
  25. package/dist/addresses/types.js.map +0 -1
  26. package/dist/capabilities/index.d.ts +0 -3
  27. package/dist/capabilities/index.js +0 -70
  28. package/dist/capabilities/index.js.map +0 -1
  29. package/dist/capabilities/types.d.ts +0 -6
  30. package/dist/capabilities/types.js +0 -3
  31. package/dist/capabilities/types.js.map +0 -1
  32. package/dist/index.d.ts +0 -10
  33. package/dist/index.js +0 -27
  34. package/dist/index.js.map +0 -1
  35. package/dist/inscriptions/createInscription.d.ts +0 -2
  36. package/dist/inscriptions/createInscription.js +0 -22
  37. package/dist/inscriptions/createInscription.js.map +0 -1
  38. package/dist/inscriptions/createRepeatInscriptions.d.ts +0 -2
  39. package/dist/inscriptions/createRepeatInscriptions.js +0 -22
  40. package/dist/inscriptions/createRepeatInscriptions.js.map +0 -1
  41. package/dist/inscriptions/index.d.ts +0 -3
  42. package/dist/inscriptions/index.js +0 -20
  43. package/dist/inscriptions/index.js.map +0 -1
  44. package/dist/inscriptions/types.d.ts +0 -21
  45. package/dist/inscriptions/types.js +0 -3
  46. package/dist/inscriptions/types.js.map +0 -1
  47. package/dist/inscriptions/utils.d.ts +0 -2
  48. package/dist/inscriptions/utils.js +0 -26
  49. package/dist/inscriptions/utils.js.map +0 -1
  50. package/dist/messages/index.d.ts +0 -3
  51. package/dist/messages/index.js +0 -41
  52. package/dist/messages/index.js.map +0 -1
  53. package/dist/messages/types.d.ts +0 -7
  54. package/dist/messages/types.js +0 -3
  55. package/dist/messages/types.js.map +0 -1
  56. package/dist/provider/index.d.ts +0 -10
  57. package/dist/provider/index.js +0 -74
  58. package/dist/provider/index.js.map +0 -1
  59. package/dist/provider/types.d.ts +0 -46
  60. package/dist/provider/types.js +0 -3
  61. package/dist/provider/types.js.map +0 -1
  62. package/dist/request/index.d.ts +0 -4
  63. package/dist/request/index.js +0 -47
  64. package/dist/request/index.js.map +0 -1
  65. package/dist/request/types/btcMethods.d.ts +0 -127
  66. package/dist/request/types/btcMethods.js +0 -6
  67. package/dist/request/types/btcMethods.js.map +0 -1
  68. package/dist/request/types/index.d.ts +0 -27
  69. package/dist/request/types/index.js +0 -19
  70. package/dist/request/types/index.js.map +0 -1
  71. package/dist/request/types/stxMethods.d.ts +0 -181
  72. package/dist/request/types/stxMethods.js +0 -3
  73. package/dist/request/types/stxMethods.js.map +0 -1
  74. package/dist/transactions/index.d.ts +0 -4
  75. package/dist/transactions/index.js +0 -21
  76. package/dist/transactions/index.js.map +0 -1
  77. package/dist/transactions/sendBtcTransaction.d.ts +0 -2
  78. package/dist/transactions/sendBtcTransaction.js +0 -45
  79. package/dist/transactions/sendBtcTransaction.js.map +0 -1
  80. package/dist/transactions/signMultipleTransactions.d.ts +0 -2
  81. package/dist/transactions/signMultipleTransactions.js +0 -26
  82. package/dist/transactions/signMultipleTransactions.js.map +0 -1
  83. package/dist/transactions/signTransaction.d.ts +0 -2
  84. package/dist/transactions/signTransaction.js +0 -26
  85. package/dist/transactions/signTransaction.js.map +0 -1
  86. package/dist/transactions/types.d.ts +0 -46
  87. package/dist/transactions/types.js +0 -3
  88. package/dist/transactions/types.js.map +0 -1
  89. package/dist/tsconfig.tsbuildinfo +0 -1
  90. package/dist/types.d.ts +0 -87
  91. package/dist/types.js +0 -46
  92. package/dist/types.js.map +0 -1
  93. package/dist/ui/index.d.ts +0 -5
  94. package/dist/ui/index.js +0 -27
  95. package/dist/ui/index.js.map +0 -1
package/dist/index.mjs ADDED
@@ -0,0 +1,831 @@
1
+ // src/types.ts
2
+ var BitcoinNetworkType = /* @__PURE__ */ ((BitcoinNetworkType2) => {
3
+ BitcoinNetworkType2["Mainnet"] = "Mainnet";
4
+ BitcoinNetworkType2["Testnet"] = "Testnet";
5
+ return BitcoinNetworkType2;
6
+ })(BitcoinNetworkType || {});
7
+ var RpcErrorCode = /* @__PURE__ */ ((RpcErrorCode2) => {
8
+ RpcErrorCode2[RpcErrorCode2["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
9
+ RpcErrorCode2[RpcErrorCode2["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
10
+ RpcErrorCode2[RpcErrorCode2["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
11
+ RpcErrorCode2[RpcErrorCode2["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
12
+ RpcErrorCode2[RpcErrorCode2["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
13
+ RpcErrorCode2[RpcErrorCode2["USER_REJECTION"] = -32e3] = "USER_REJECTION";
14
+ RpcErrorCode2[RpcErrorCode2["METHOD_NOT_SUPPORTED"] = -32001] = "METHOD_NOT_SUPPORTED";
15
+ return RpcErrorCode2;
16
+ })(RpcErrorCode || {});
17
+
18
+ // src/runes/index.ts
19
+ import axios from "axios";
20
+ var RUNES_API_BASE_URL = (network = "Mainnet" /* Mainnet */) => `https://ordinals${network === "Testnet" /* Testnet */ ? "-testnet" : ""}.xverse.app/v1/runes`;
21
+ var RunesApi = class {
22
+ client;
23
+ constructor(network) {
24
+ this.client = axios.create({
25
+ baseURL: `${RUNES_API_BASE_URL(network)}`
26
+ });
27
+ }
28
+ estimateMintCost = async (mintParams) => {
29
+ try {
30
+ const response = await this.client.post("/mint/estimate", {
31
+ ...mintParams
32
+ });
33
+ return {
34
+ status: "success",
35
+ result: {
36
+ costBreakdown: response.data.costBreakdown,
37
+ totalCost: response.data.totalCost,
38
+ totalSize: response.data.totalSize
39
+ }
40
+ };
41
+ } catch (error) {
42
+ return {
43
+ status: "error",
44
+ error: {
45
+ code: -32603 /* INTERNAL_ERROR */,
46
+ message: error.message
47
+ }
48
+ };
49
+ }
50
+ };
51
+ estimateEtchCost = async (etchParams) => {
52
+ try {
53
+ const response = await this.client.post("/etch/estimate", {
54
+ ...etchParams
55
+ });
56
+ return {
57
+ status: "success",
58
+ result: {
59
+ costBreakdown: response.data.costBreakdown,
60
+ totalCost: response.data.totalCost,
61
+ totalSize: response.data.totalSize
62
+ }
63
+ };
64
+ } catch (error) {
65
+ return {
66
+ status: "error",
67
+ error: {
68
+ code: -32603 /* INTERNAL_ERROR */,
69
+ message: error.data.message
70
+ }
71
+ };
72
+ }
73
+ };
74
+ createMintOrder = async (mintOrderParams) => {
75
+ try {
76
+ const response = await this.client.post("/mint/orders", {
77
+ ...mintOrderParams
78
+ });
79
+ return {
80
+ data: response.data
81
+ };
82
+ } catch (error) {
83
+ return {
84
+ error: error.data.message
85
+ };
86
+ }
87
+ };
88
+ createEtchOrder = async (etchOrderParams) => {
89
+ try {
90
+ const response = await this.client.post("/etch/orders", {
91
+ ...etchOrderParams
92
+ });
93
+ return {
94
+ data: response.data
95
+ };
96
+ } catch (error) {
97
+ return {
98
+ error: error.data.message
99
+ };
100
+ }
101
+ };
102
+ executeMint = async (orderId, fundTransactionId) => {
103
+ try {
104
+ const response = await this.client.post(`/mint/orders/${orderId}/execute`, {
105
+ fundTransactionId
106
+ });
107
+ return {
108
+ data: response.data
109
+ };
110
+ } catch (error) {
111
+ return {
112
+ error: error.data.message
113
+ };
114
+ }
115
+ };
116
+ executeEtch = async (orderId, fundTransactionId) => {
117
+ try {
118
+ const response = await this.client.post(`/etch/orders/${orderId}/execute`, {
119
+ fundTransactionId
120
+ });
121
+ return {
122
+ data: response.data
123
+ };
124
+ } catch (error) {
125
+ return {
126
+ error: error.data.message
127
+ };
128
+ }
129
+ };
130
+ };
131
+
132
+ // src/adapters/satsConnectAdapter.ts
133
+ var SatsConnectAdapter = class {
134
+ async mintRunes(params) {
135
+ try {
136
+ const orderResponse = await new RunesApi(params.network).createMintOrder(params);
137
+ if (orderResponse.data) {
138
+ const paymentResponse = await this.requestInternal("sendTransfer", {
139
+ recipients: [
140
+ {
141
+ address: orderResponse.data.fundAddress,
142
+ amount: orderResponse.data.fundAmount
143
+ }
144
+ ]
145
+ });
146
+ if (paymentResponse?.status === "success") {
147
+ await new RunesApi(params.network).executeMint(
148
+ orderResponse.data.orderId,
149
+ paymentResponse.result.txid
150
+ );
151
+ return {
152
+ status: "success",
153
+ result: {
154
+ orderId: orderResponse.data.orderId,
155
+ fundTransactionId: paymentResponse.result.txid
156
+ }
157
+ };
158
+ } else {
159
+ return {
160
+ status: "error",
161
+ error: {
162
+ code: -32e3 /* USER_REJECTION */,
163
+ message: "User rejected the payment request"
164
+ }
165
+ };
166
+ }
167
+ } else {
168
+ return {
169
+ status: "error",
170
+ error: {
171
+ code: -32603 /* INTERNAL_ERROR */,
172
+ message: orderResponse.error
173
+ }
174
+ };
175
+ }
176
+ } catch (error) {
177
+ return {
178
+ status: "error",
179
+ error: {
180
+ code: -32603 /* INTERNAL_ERROR */,
181
+ message: error.message
182
+ }
183
+ };
184
+ }
185
+ }
186
+ async etchRunes(params) {
187
+ try {
188
+ const orderResponse = await new RunesApi(params.network).createEtchOrder(params);
189
+ if (orderResponse.data) {
190
+ const paymentResponse = await this.requestInternal("sendTransfer", {
191
+ recipients: [
192
+ {
193
+ address: orderResponse.data.fundAddress,
194
+ amount: orderResponse.data.fundAmount
195
+ }
196
+ ]
197
+ });
198
+ if (paymentResponse?.status === "success") {
199
+ await new RunesApi(params.network).executeEtch(
200
+ orderResponse.data.orderId,
201
+ paymentResponse.result.txid
202
+ );
203
+ return {
204
+ status: "success",
205
+ result: {
206
+ orderId: orderResponse.data.orderId,
207
+ fundTransactionId: paymentResponse.result.txid
208
+ }
209
+ };
210
+ } else {
211
+ return {
212
+ status: "error",
213
+ error: {
214
+ code: -32e3 /* USER_REJECTION */,
215
+ message: "User rejected the payment request"
216
+ }
217
+ };
218
+ }
219
+ } else {
220
+ return {
221
+ status: "error",
222
+ error: {
223
+ code: -32603 /* INTERNAL_ERROR */,
224
+ message: orderResponse.error
225
+ }
226
+ };
227
+ }
228
+ } catch (error) {
229
+ return {
230
+ status: "error",
231
+ error: {
232
+ code: -32603 /* INTERNAL_ERROR */,
233
+ message: error.message
234
+ }
235
+ };
236
+ }
237
+ }
238
+ async request(method, params) {
239
+ switch (method) {
240
+ case "runes_mint":
241
+ return this.mintRunes(params);
242
+ case "runes_etch":
243
+ return this.etchRunes(params);
244
+ case "runes_estimateMint":
245
+ return new RunesApi(params.network).estimateMintCost(
246
+ params
247
+ );
248
+ case "runes_estimateEtch":
249
+ return new RunesApi(params.network).estimateEtchCost(
250
+ params
251
+ );
252
+ default:
253
+ return this.requestInternal(method, params);
254
+ }
255
+ }
256
+ };
257
+
258
+ // src/provider/index.ts
259
+ import omit from "lodash.omit";
260
+ async function getProviderOrThrow(getProvider) {
261
+ const provider = await getProvider?.() || window.XverseProviders?.BitcoinProvider || window.BitcoinProvider;
262
+ if (!provider) {
263
+ throw new Error("No Bitcoin wallet installed");
264
+ }
265
+ return provider;
266
+ }
267
+ function getProviders() {
268
+ if (!window.btc_providers)
269
+ window.btc_providers = [];
270
+ return window.btc_providers;
271
+ }
272
+ function getProviderById(providerId) {
273
+ return providerId?.split(".").reduce((acc, part) => acc?.[part], window);
274
+ }
275
+ function isProviderInstalled(providerId) {
276
+ return !!getProviderById(providerId);
277
+ }
278
+ function setDefaultProvider(providerId) {
279
+ localStorage.setItem("sats-connect_defaultProvider", providerId);
280
+ }
281
+ function getDefaultProvider() {
282
+ return localStorage.getItem("sats-connect_defaultProvider");
283
+ }
284
+ function removeDefaultProvider() {
285
+ localStorage.removeItem("sats-connect_defaultProvider");
286
+ }
287
+ function getSupportedWallets() {
288
+ const btc_providers = getProviders();
289
+ for (const key in omit(DefaultAdaptersInfo, ["xverse"])) {
290
+ btc_providers.push(DefaultAdaptersInfo[key]);
291
+ }
292
+ const wallets = btc_providers.map((provider) => {
293
+ {
294
+ return {
295
+ ...provider,
296
+ isInstalled: isProviderInstalled(provider.id)
297
+ };
298
+ }
299
+ });
300
+ return wallets;
301
+ }
302
+
303
+ // src/request/index.ts
304
+ var request = async (method, params, providerId) => {
305
+ let provider = window.XverseProviders?.BitcoinProvider || window.BitcoinProvider;
306
+ if (providerId) {
307
+ provider = await getProviderById(providerId);
308
+ }
309
+ if (!provider) {
310
+ throw new Error("no wallet provider was found");
311
+ }
312
+ if (!method) {
313
+ throw new Error("A wallet method is required");
314
+ }
315
+ const response = await provider.request(method, params);
316
+ if (isRpcSuccessResponse(response)) {
317
+ return {
318
+ status: "success",
319
+ result: response.result
320
+ };
321
+ }
322
+ return {
323
+ status: "error",
324
+ error: response.error
325
+ };
326
+ };
327
+ var isRpcSuccessResponse = (response) => {
328
+ return Object.hasOwn(response, "result") && !!response.result;
329
+ };
330
+
331
+ // src/adapters/xverse.ts
332
+ var XverseAdapter = class extends SatsConnectAdapter {
333
+ id = DefaultAdaptersInfo.xverse.id;
334
+ requestInternal = async (method, params) => {
335
+ console.log("XverseAdapter requestInternal", method, params);
336
+ return request(method, params, this.id);
337
+ };
338
+ };
339
+
340
+ // src/adapters/unisat.ts
341
+ import { Buffer } from "buffer";
342
+ import { AddressType as AddressType2, getAddressInfo } from "bitcoin-address-validation";
343
+
344
+ // src/addresses/index.ts
345
+ import { createUnsecuredToken } from "jsontokens";
346
+
347
+ // src/addresses/types.ts
348
+ var AddressPurpose = /* @__PURE__ */ ((AddressPurpose2) => {
349
+ AddressPurpose2["Ordinals"] = "ordinals";
350
+ AddressPurpose2["Payment"] = "payment";
351
+ AddressPurpose2["Stacks"] = "stacks";
352
+ return AddressPurpose2;
353
+ })(AddressPurpose || {});
354
+ var AddressType = /* @__PURE__ */ ((AddressType3) => {
355
+ AddressType3["p2pkh"] = "p2pkh";
356
+ AddressType3["p2sh"] = "p2sh";
357
+ AddressType3["p2wpkh"] = "p2wpkh";
358
+ AddressType3["p2wsh"] = "p2wsh";
359
+ AddressType3["p2tr"] = "p2tr";
360
+ AddressType3["stacks"] = "stacks";
361
+ return AddressType3;
362
+ })(AddressType || {});
363
+
364
+ // src/addresses/index.ts
365
+ var getAddress = async (options) => {
366
+ const provider = await getProviderOrThrow(options.getProvider);
367
+ const { purposes } = options.payload;
368
+ if (!purposes) {
369
+ throw new Error("Address purposes are required");
370
+ }
371
+ try {
372
+ const request2 = createUnsecuredToken(options.payload);
373
+ const response = await provider.connect(request2);
374
+ options.onFinish?.(response);
375
+ } catch (error) {
376
+ console.error("[Connect] Error during address request", error);
377
+ options.onCancel?.();
378
+ }
379
+ };
380
+
381
+ // src/adapters/unisat.ts
382
+ function convertSignInputsToInputType(signInputs, allowedSignHash) {
383
+ let result = [];
384
+ for (let address in signInputs) {
385
+ let indexes = signInputs[address];
386
+ for (let index of indexes) {
387
+ result.push({
388
+ index,
389
+ address,
390
+ sighashTypes: allowedSignHash ? [allowedSignHash] : void 0
391
+ });
392
+ }
393
+ }
394
+ return result;
395
+ }
396
+ var UnisatAdapter = class extends SatsConnectAdapter {
397
+ id = DefaultAdaptersInfo.unisat.id;
398
+ async getAccounts(params) {
399
+ const { purposes } = params;
400
+ if (!purposes.includes("stacks" /* Stacks */)) {
401
+ throw new Error("Only bitcoin addresses are supported");
402
+ }
403
+ const [accounts, publicKey] = await Promise.all([
404
+ window.unisat.requestAccounts(),
405
+ window.unisat.getPublicKey()
406
+ ]);
407
+ const address = accounts[0];
408
+ const addressType = getAddressInfo(accounts[0]).type;
409
+ const pk = addressType === AddressType2.p2tr ? publicKey.slice(2) : publicKey;
410
+ const paymentAddress = {
411
+ address,
412
+ publicKey: pk,
413
+ addressType,
414
+ purpose: "payment" /* Payment */
415
+ };
416
+ const ordinalsAddress = {
417
+ address,
418
+ publicKey: pk,
419
+ addressType,
420
+ purpose: "ordinals" /* Ordinals */
421
+ };
422
+ const response = [];
423
+ if (purposes.includes("payment" /* Payment */)) {
424
+ response.push(paymentAddress);
425
+ }
426
+ if (purposes.includes("ordinals" /* Ordinals */)) {
427
+ response.push(ordinalsAddress);
428
+ }
429
+ return response;
430
+ }
431
+ async signMessage(params) {
432
+ const { message, address } = params;
433
+ const addressType = getAddressInfo(address).type;
434
+ const Bip322supportedTypes = [AddressType2.p2wpkh, AddressType2.p2tr];
435
+ if (Bip322supportedTypes.includes(addressType)) {
436
+ const response2 = await window.unisat.signMessage(message, "bip322-simple");
437
+ return {
438
+ address,
439
+ messageHash: "",
440
+ signature: response2
441
+ };
442
+ }
443
+ const response = await window.unisat.signMessage(message, "ecdsa");
444
+ return {
445
+ address,
446
+ messageHash: "",
447
+ signature: response
448
+ };
449
+ }
450
+ async sendTransfer(params) {
451
+ const { recipients } = params;
452
+ if (recipients.length > 1) {
453
+ throw new Error("Only one recipient is supported by this wallet provider");
454
+ }
455
+ const txid = await window.unisat.sendBitcoin(recipients[0].address, recipients[0].amount);
456
+ return {
457
+ txid
458
+ };
459
+ }
460
+ async signPsbt(params) {
461
+ const { psbt, signInputs, allowedSignHash, broadcast } = params;
462
+ const psbtHex = Buffer.from(psbt, "base64").toString("hex");
463
+ const signedPsbt = await window.unisat.signPsbt(psbtHex, {
464
+ autoFinalized: broadcast,
465
+ toSignInputs: convertSignInputsToInputType(signInputs, allowedSignHash)
466
+ });
467
+ if (broadcast) {
468
+ const txid = await window.unisat.pushPsbt(psbtHex);
469
+ return {
470
+ psbt: signedPsbt,
471
+ txid
472
+ };
473
+ }
474
+ return {
475
+ psbt: psbtHex
476
+ };
477
+ }
478
+ requestInternal = async (method, params) => {
479
+ try {
480
+ switch (method) {
481
+ case "getAccounts": {
482
+ const response = await this.getAccounts(
483
+ params
484
+ );
485
+ return {
486
+ status: "success",
487
+ result: response
488
+ };
489
+ }
490
+ case "sendTransfer": {
491
+ const response = await this.sendTransfer(params);
492
+ return {
493
+ status: "success",
494
+ result: response
495
+ };
496
+ }
497
+ case "signMessage": {
498
+ const response = await this.signMessage(params);
499
+ return {
500
+ status: "success",
501
+ result: response
502
+ };
503
+ }
504
+ case "signPsbt": {
505
+ const response = await this.signPsbt(params);
506
+ return {
507
+ status: "success",
508
+ result: response
509
+ };
510
+ }
511
+ default: {
512
+ const error = {
513
+ code: -32001 /* METHOD_NOT_SUPPORTED */,
514
+ message: "Method not supported by the selected wallet"
515
+ };
516
+ console.error("Error calling the method", error);
517
+ return {
518
+ status: "error",
519
+ error
520
+ };
521
+ }
522
+ }
523
+ } catch (error) {
524
+ console.error("Error calling the method", error);
525
+ return {
526
+ status: "error",
527
+ error: {
528
+ code: error.code === 4001 ? -32e3 /* USER_REJECTION */ : -32603 /* INTERNAL_ERROR */,
529
+ message: error.message ? error.message : "Wallet method call error",
530
+ data: error
531
+ }
532
+ };
533
+ }
534
+ };
535
+ };
536
+
537
+ // src/adapters/BaseAdapter.ts
538
+ var BaseAdapter = class extends SatsConnectAdapter {
539
+ id = "";
540
+ constructor(providerId) {
541
+ super();
542
+ this.id = providerId;
543
+ }
544
+ requestInternal = async (method, params) => {
545
+ return request(method, params, this.id);
546
+ };
547
+ };
548
+
549
+ // src/adapters/index.ts
550
+ var DefaultAdaptersInfo = {
551
+ xverse: {
552
+ id: "XverseProviders.BitcoinProvider",
553
+ name: "Xverse",
554
+ webUrl: "https://www.xverse.app/",
555
+ googlePlayStoreUrl: "https://play.google.com/store/apps/details?id=com.secretkeylabs.xverse",
556
+ iOSAppStoreUrl: "https://apps.apple.com/app/xverse-bitcoin-web3-wallet/id1552272513",
557
+ chromeWebStoreUrl: "https://chromewebstore.google.com/detail/xverse-wallet/idnnbdplmphpflfnlkomgpfbpcgelopg",
558
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgdmlld0JveD0iMCAwIDEwMiAxMDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJJY29uX0FydCAoRWRpdCBNZSkiPgo8cmVjdCB3aWR0aD0iMTAyIiBoZWlnaHQ9IjEwMiIgZmlsbD0iIzE4MTgxOCIvPgo8ZyBpZD0iTG9nby9FbWJsZW0iIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMF8xMjIzKSI+CjxwYXRoIGlkPSJWZWN0b3IiIGQ9Ik03NC42NTQyIDczLjg4ODNWNjUuMjMxMkM3NC42NTQyIDY0Ljg4OCA3NC41MTc3IDY0LjU2MDYgNzQuMjc0NSA2NC4zMTc0TDM3LjQzOTcgMjcuNDgyNUMzNy4xOTY1IDI3LjIzOTIgMzYuODY5MSAyNy4xMDI4IDM2LjUyNTggMjcuMTAyOEgyNy44NjlDMjcuNDQxNiAyNy4xMDI4IDI3LjA5MzggMjcuNDUwNiAyNy4wOTM4IDI3Ljg3OFYzNS45MjExQzI3LjA5MzggMzYuMjY0NCAyNy4yMzAyIDM2LjU5MTcgMjcuNDczNCAzNi44MzVMNDAuNjk1MiA1MC4wNTY3QzQwLjk5NzUgNTAuMzU5MSA0MC45OTc1IDUwLjg1MDEgNDAuNjk1MiA1MS4xNTI0TDI3LjMyMTEgNjQuNTI2NUMyNy4xNzU2IDY0LjY3MiAyNy4wOTM4IDY0Ljg2OTggMjcuMDkzOCA2NS4wNzQ0VjczLjg4ODNDMjcuMDkzOCA3NC4zMTUzIDI3LjQ0MTYgNzQuNjYzNSAyNy44NjkgNzQuNjYzNUg0Mi4zMzQyQzQyLjc2MTYgNzQuNjYzNSA0My4xMDk0IDc0LjMxNTMgNDMuMTA5NCA3My44ODgzVjY4LjY5NThDNDMuMTA5NCA2OC40OTEyIDQzLjE5MTIgNjguMjkzNSA0My4zMzY4IDY4LjE0NzlMNTAuNTExNCA2MC45NzMzQzUwLjgxMzggNjAuNjcwOSA1MS4zMDQ4IDYwLjY3MDkgNTEuNjA3MiA2MC45NzMzTDY0LjkxOTggNzQuMjg2MUM2NS4xNjMxIDc0LjUyOTMgNjUuNDkwNCA3NC42NjU4IDY1LjgzMzcgNzQuNjY1OEg3My44NzY3Qzc0LjMwNDIgNzQuNjY1OCA3NC42NTE5IDc0LjMxNzYgNzQuNjUxOSA3My44OTA2TDc0LjY1NDIgNzMuODg4M1oiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGlkPSJWZWN0b3JfMiIgZD0iTTU1LjM1OCAzOC41NjcySDYyLjYwMzFDNjMuMDMyOCAzOC41NjcyIDYzLjM4MjkgMzguOTE3MyA2My4zODI5IDM5LjM0NjlWNDYuNTkyMUM2My4zODI5IDQ3LjI4NzcgNjQuMjI0IDQ3LjYzNTUgNjQuNzE1MSA0Ny4xNDIyTDc0LjY1NDEgMzcuMTg3M0M3NC43OTk0IDM3LjA0MTggNzQuODgxNiAzNi44NDQgNzQuODgxNiAzNi42MzcxVjI3LjkxODlDNzQuODgxNiAyNy40ODkyIDc0LjUzMzQgMjcuMTM5MSA3NC4xMDE3IDI3LjEzOTFMNjUuMjUzOCAyNy4xMjc3QzY1LjA0NyAyNy4xMjc3IDY0Ljg0OTIgMjcuMjA5NiA2NC43MDE0IDI3LjM1NTFMNTQuODA1NiAzNy4yMzVDNTQuMzE0NSAzNy43MjYgNTQuNjYyMyAzOC41NjcyIDU1LjM1NTcgMzguNTY3Mkg1NS4zNThaIiBmaWxsPSIjRUU3QTMwIi8+CjwvZz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMF8xMjIzIj4KPHJlY3Qgd2lkdGg9IjQ3LjgxMjUiIGhlaWdodD0iNDcuODEyNSIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3LjA5MzggMjcuMDkzOCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K"
559
+ },
560
+ unisat: {
561
+ id: "unisat",
562
+ name: "Unisat",
563
+ webUrl: "https://unisat.io/",
564
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgwIiBoZWlnaHQ9IjE4MCIgdmlld0JveD0iMCAwIDE4MCAxODAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxODAiIGhlaWdodD0iMTgwIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTAwNTBfNDE3MSkiPgo8cGF0aCBkPSJNMTEzLjY2IDI5LjI4OTdMMTQzLjk3IDU5LjMwOTdDMTQ2LjU1IDYxLjg1OTcgMTQ3LjgyIDY0LjQzOTcgMTQ3Ljc4IDY3LjAzOTdDMTQ3Ljc0IDY5LjYzOTcgMTQ2LjYzIDcyLjAwOTcgMTQ0LjQ2IDc0LjE1OTdDMTQyLjE5IDc2LjQwOTcgMTM5Ljc0IDc3LjU0OTcgMTM3LjEyIDc3LjU5OTdDMTM0LjUgNzcuNjM5NyAxMzEuOSA3Ni4zNzk3IDEyOS4zMiA3My44Mjk3TDk4LjMxOTkgNDMuMTI5N0M5NC43OTk5IDM5LjYzOTcgOTEuMzk5OSAzNy4xNjk3IDg4LjEyOTkgMzUuNzE5N0M4NC44NTk5IDM0LjI2OTcgODEuNDE5OSAzNC4wMzk3IDc3LjgxOTkgMzUuMDM5N0M3NC4yMDk5IDM2LjAyOTcgNzAuMzM5OSAzOC41Nzk3IDY2LjE4OTkgNDIuNjc5N0M2MC40Njk5IDQ4LjM0OTcgNTcuNzM5OSA1My42Njk3IDU4LjAxOTkgNTguNjM5N0M1OC4yOTk5IDYzLjYwOTcgNjEuMTM5OSA2OC43Njk3IDY2LjUyOTkgNzQuMDk5N0w5Ny43Nzk5IDEwNS4wNkMxMDAuMzkgMTA3LjY0IDEwMS42NyAxMTAuMjIgMTAxLjYzIDExMi43OEMxMDEuNTkgMTE1LjM1IDEwMC40NyAxMTcuNzIgOTguMjU5OSAxMTkuOTFDOTYuMDU5OSAxMjIuMDkgOTMuNjI5OSAxMjMuMjMgOTAuOTg5OSAxMjMuMzJDODguMzQ5OSAxMjMuNDEgODUuNzE5OSAxMjIuMTYgODMuMTE5OSAxMTkuNThMNTIuODA5OSA4OS41NTk3QzQ3Ljg3OTkgODQuNjc5NyA0NC4zMTk5IDgwLjA1OTcgNDIuMTI5OSA3NS42OTk3QzM5LjkzOTkgNzEuMzM5NyAzOS4xMTk5IDY2LjQwOTcgMzkuNjg5OSA2MC45MDk3QzQwLjE5OTkgNTYuMTk5NyA0MS43MDk5IDUxLjYzOTcgNDQuMjI5OSA0Ny4yMTk3QzQ2LjczOTkgNDIuNzk5NyA1MC4zMzk5IDM4LjI3OTcgNTUuMDA5OSAzMy42NDk3QzYwLjU2OTkgMjguMTM5NyA2NS44Nzk5IDIzLjkxOTcgNzAuOTM5OSAyMC45Nzk3Qzc1Ljk4OTkgMTguMDM5NyA4MC44Nzk5IDE2LjQwOTcgODUuNTk5OSAxNi4wNjk3QzkwLjMyOTkgMTUuNzI5NyA5NC45ODk5IDE2LjY2OTcgOTkuNTk5OSAxOC44ODk3QzEwNC4yMSAyMS4xMDk3IDEwOC44OSAyNC41Njk3IDExMy42NSAyOS4yODk3SDExMy42NloiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xMDA1MF80MTcxKSIvPgo8cGF0aCBkPSJNNjYuMTA5OSAxNTAuNDJMMzUuODA5OSAxMjAuNEMzMy4yMjk5IDExNy44NCAzMS45NTk5IDExNS4yNyAzMS45OTk5IDExMi42N0MzMi4wMzk5IDExMC4wNyAzMy4xNDk5IDEwNy43IDM1LjMxOTkgMTA1LjU1QzM3LjU4OTkgMTAzLjMgNDAuMDM5OSAxMDIuMTYgNDIuNjU5OSAxMDIuMTFDNDUuMjc5OSAxMDIuMDcgNDcuODc5OSAxMDMuMzIgNTAuNDU5OSAxMDUuODhMODEuNDQ5OSAxMzYuNThDODQuOTc5OSAxNDAuMDcgODguMzY5OSAxNDIuNTQgOTEuNjM5OSAxNDMuOTlDOTQuOTA5OSAxNDUuNDQgOTguMzQ5OSAxNDUuNjYgMTAxLjk2IDE0NC42N0MxMDUuNTcgMTQzLjY4IDEwOS40NCAxNDEuMTMgMTEzLjU5IDEzNy4wMkMxMTkuMzEgMTMxLjM1IDEyMi4wNCAxMjYuMDMgMTIxLjc2IDEyMS4wNkMxMjEuNDggMTE2LjA5IDExOC42NCAxMTAuOTMgMTEzLjI1IDEwNS41OUw5Ni41OTk5IDg5LjI0MDFDOTMuOTg5OSA4Ni42NjAxIDkyLjcwOTkgODQuMDgwMSA5Mi43NDk5IDgxLjUyMDFDOTIuNzg5OSA3OC45NTAxIDkzLjkwOTkgNzYuNTgwMSA5Ni4xMTk5IDc0LjM5MDFDOTguMzE5OSA3Mi4yMTAxIDEwMC43NSA3MS4wNzAxIDEwMy4zOSA3MC45ODAxQzEwNi4wMyA3MC44OTAxIDEwOC42NiA3Mi4xNDAxIDExMS4yNiA3NC43MjAxTDEyNi45NiA5MC4xMzAxQzEzMS44OSA5NS4wMTAxIDEzNS40NSA5OS42MzAxIDEzNy42NCAxMDMuOTlDMTM5LjgzIDEwOC4zNSAxNDAuNjUgMTEzLjI4IDE0MC4wOCAxMTguNzhDMTM5LjU3IDEyMy40OSAxMzguMDYgMTI4LjA1IDEzNS41NCAxMzIuNDdDMTMzLjAzIDEzNi44OSAxMjkuNDMgMTQxLjQxIDEyNC43NiAxNDYuMDRDMTE5LjIgMTUxLjU1IDExMy44OSAxNTUuNzcgMTA4LjgzIDE1OC43MUMxMDMuNzcgMTYxLjY1IDk4Ljg3OTkgMTYzLjI5IDk0LjE0OTkgMTYzLjYzQzg5LjQxOTkgMTYzLjk3IDg0Ljc1OTkgMTYzLjAzIDgwLjE0OTkgMTYwLjgxQzc1LjUzOTkgMTU4LjU5IDcwLjg1OTkgMTU1LjEzIDY2LjA5OTkgMTUwLjQxTDY2LjEwOTkgMTUwLjQyWiIgZmlsbD0idXJsKCNwYWludDFfbGluZWFyXzEwMDUwXzQxNzEpIi8+CjxwYXRoIGQ9Ik04NS4wMDk5IDcyLjk1OTJDOTEuMTU2OCA3Mi45NTkyIDk2LjEzOTkgNjcuOTc2MSA5Ni4xMzk5IDYxLjgyOTJDOTYuMTM5OSA1NS42ODIzIDkxLjE1NjggNTAuNjk5MiA4NS4wMDk5IDUwLjY5OTJDNzguODYzIDUwLjY5OTIgNzMuODc5OSA1NS42ODIzIDczLjg3OTkgNjEuODI5MkM3My44Nzk5IDY3Ljk3NjEgNzguODYzIDcyLjk1OTIgODUuMDA5OSA3Mi45NTkyWiIgZmlsbD0idXJsKCNwYWludDJfcmFkaWFsXzEwMDUwXzQxNzEpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xMDA1MF80MTcxIiB4MT0iMTM4Ljk4NSIgeTE9IjQ2Ljc3OTUiIHgyPSI0NS4wNTI5IiB5Mj0iODguNTIzMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMjAxQzFCIi8+CjxzdG9wIG9mZnNldD0iMC4zNiIgc3RvcC1jb2xvcj0iIzc3MzkwRCIvPgo8c3RvcCBvZmZzZXQ9IjAuNjciIHN0b3AtY29sb3I9IiNFQTgxMDEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRjRCODUyIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xMDA1MF80MTcxIiB4MT0iNDMuMzgxMiIgeTE9IjEzNC4xNjciIHgyPSIxNTIuMjMxIiB5Mj0iMTAxLjc3MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMUYxRDFDIi8+CjxzdG9wIG9mZnNldD0iMC4zNyIgc3RvcC1jb2xvcj0iIzc3MzkwRCIvPgo8c3RvcCBvZmZzZXQ9IjAuNjciIHN0b3AtY29sb3I9IiNFQTgxMDEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRjRGQjUyIi8+CjwvbGluZWFyR3JhZGllbnQ+CjxyYWRpYWxHcmFkaWVudCBpZD0icGFpbnQyX3JhZGlhbF8xMDA1MF80MTcxIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDg1LjAwOTkgNjEuODM5Mikgc2NhbGUoMTEuMTMpIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0Y0Qjg1MiIvPgo8c3RvcCBvZmZzZXQ9IjAuMzMiIHN0b3AtY29sb3I9IiNFQTgxMDEiLz4KPHN0b3Agb2Zmc2V0PSIwLjY0IiBzdG9wLWNvbG9yPSIjNzczOTBEIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzIxMUMxRCIvPgo8L3JhZGlhbEdyYWRpZW50Pgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzEwMDUwXzQxNzEiPgo8cmVjdCB3aWR0aD0iMTE1Ljc3IiBoZWlnaHQ9IjE0Ny43IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzIgMTYpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=="
565
+ }
566
+ };
567
+ var defaultAdapters = {
568
+ [DefaultAdaptersInfo.xverse.id]: XverseAdapter,
569
+ [DefaultAdaptersInfo.unisat.id]: UnisatAdapter
570
+ };
571
+
572
+ // src/capabilities/index.ts
573
+ import { createUnsecuredToken as createUnsecuredToken2 } from "jsontokens";
574
+ var extractOrValidateCapabilities = (provider, reportedCapabilities) => {
575
+ const validateCapability = (capability) => {
576
+ if (!provider[capability]) {
577
+ return false;
578
+ }
579
+ if (reportedCapabilities && !reportedCapabilities.has(capability)) {
580
+ return false;
581
+ }
582
+ return true;
583
+ };
584
+ const capabilityMap = {
585
+ request: validateCapability("request"),
586
+ connect: validateCapability("connect"),
587
+ signMessage: validateCapability("signMessage"),
588
+ signTransaction: validateCapability("signTransaction"),
589
+ sendBtcTransaction: validateCapability("sendBtcTransaction"),
590
+ createInscription: validateCapability("createInscription"),
591
+ createRepeatInscriptions: validateCapability("createRepeatInscriptions"),
592
+ signMultipleTransactions: validateCapability("signMultipleTransactions")
593
+ };
594
+ return Object.entries(capabilityMap).reduce((acc, [capability, value]) => {
595
+ if (value)
596
+ return [...acc, capability];
597
+ return acc;
598
+ }, []);
599
+ };
600
+ var getCapabilities = async (options) => {
601
+ const provider = await getProviderOrThrow(options.getProvider);
602
+ const request2 = createUnsecuredToken2(options.payload);
603
+ if (provider.getCapabilities) {
604
+ try {
605
+ const response = await provider.getCapabilities(request2);
606
+ options.onFinish?.(extractOrValidateCapabilities(provider, new Set(response)));
607
+ } catch (error) {
608
+ console.error("[Connect] Error during capabilities request", error);
609
+ }
610
+ }
611
+ try {
612
+ const inferredCapabilities = extractOrValidateCapabilities(provider);
613
+ options.onFinish?.(inferredCapabilities);
614
+ } catch (error) {
615
+ console.error("[Connect] Error during capabilities request", error);
616
+ options.onCancel?.();
617
+ }
618
+ };
619
+
620
+ // src/inscriptions/createInscription.ts
621
+ import { createUnsecuredToken as createUnsecuredToken3 } from "jsontokens";
622
+
623
+ // src/inscriptions/utils.ts
624
+ var MAX_CONTENT_LENGTH_MAINNET = 4e5;
625
+ var MAX_CONTENT_LENGTH_TESTNET = 6e4;
626
+ var validateInscriptionPayload = (payload) => {
627
+ const { contentType, content, payloadType, network, appFeeAddress, appFee } = payload;
628
+ if (!/^[a-z]+\/[a-z0-9\-\.\+]+(?=;.*|$)/.test(contentType)) {
629
+ throw new Error("Invalid content type detected");
630
+ }
631
+ if (!content || content.length === 0) {
632
+ throw new Error("Empty content not allowed");
633
+ }
634
+ if (!payloadType || payloadType !== "BASE_64" && payloadType !== "PLAIN_TEXT") {
635
+ throw new Error("Empty invalid payloadType specified");
636
+ }
637
+ if (content.length > (network.type === "Mainnet" ? MAX_CONTENT_LENGTH_MAINNET : MAX_CONTENT_LENGTH_TESTNET)) {
638
+ throw new Error("Content too large");
639
+ }
640
+ if ((appFeeAddress?.length ?? 0) > 0 && (appFee ?? 0) <= 0) {
641
+ throw new Error("Invalid combination of app fee address and fee provided");
642
+ }
643
+ };
644
+
645
+ // src/inscriptions/createInscription.ts
646
+ var createInscription = async (options) => {
647
+ const { getProvider } = options;
648
+ const provider = await getProviderOrThrow(getProvider);
649
+ validateInscriptionPayload(options.payload);
650
+ try {
651
+ const request2 = createUnsecuredToken3(options.payload);
652
+ const response = await provider.createInscription(request2);
653
+ options.onFinish?.(response);
654
+ } catch (error) {
655
+ console.error("[Connect] Error during create inscription", error);
656
+ options.onCancel?.();
657
+ }
658
+ };
659
+
660
+ // src/inscriptions/createRepeatInscriptions.ts
661
+ import { createUnsecuredToken as createUnsecuredToken4 } from "jsontokens";
662
+ var createRepeatInscriptions = async (options) => {
663
+ const { getProvider } = options;
664
+ const provider = await getProviderOrThrow(getProvider);
665
+ validateInscriptionPayload(options.payload);
666
+ try {
667
+ const request2 = createUnsecuredToken4(options.payload);
668
+ const response = await provider.createRepeatInscriptions(request2);
669
+ options.onFinish?.(response);
670
+ } catch (error) {
671
+ console.error("[Connect] Error during create repeat inscriptions", error);
672
+ options.onCancel?.();
673
+ }
674
+ };
675
+
676
+ // src/messages/index.ts
677
+ import { createUnsecuredToken as createUnsecuredToken5 } from "jsontokens";
678
+ var signMessage = async (options) => {
679
+ const provider = await getProviderOrThrow(options.getProvider);
680
+ const { address, message } = options.payload;
681
+ if (!address) {
682
+ throw new Error("An address is required to sign a message");
683
+ }
684
+ if (!message) {
685
+ throw new Error("A message to be signed is required");
686
+ }
687
+ try {
688
+ const request2 = createUnsecuredToken5(options.payload);
689
+ const response = await provider.signMessage(request2);
690
+ options.onFinish?.(response);
691
+ } catch (error) {
692
+ console.error("[Connect] Error during sign message request", error);
693
+ options.onCancel?.();
694
+ }
695
+ };
696
+
697
+ // src/transactions/sendBtcTransaction.ts
698
+ import { createUnsecuredToken as createUnsecuredToken6 } from "jsontokens";
699
+ var serializer = (recipient) => {
700
+ return recipient.map((value) => {
701
+ const { address, amountSats } = value;
702
+ return {
703
+ address,
704
+ amountSats: amountSats.toString()
705
+ };
706
+ });
707
+ };
708
+ var sendBtcTransaction = async (options) => {
709
+ const provider = await getProviderOrThrow(options.getProvider);
710
+ const { recipients, senderAddress, network, message } = options.payload;
711
+ if (!recipients || recipients.length === 0) {
712
+ throw new Error("At least one recipient is required");
713
+ }
714
+ if (recipients.some(
715
+ (item) => typeof item.address !== "string" || typeof item.amountSats !== "bigint"
716
+ )) {
717
+ throw new Error("Incorrect recipient format");
718
+ }
719
+ if (!senderAddress) {
720
+ throw new Error("The sender address is required");
721
+ }
722
+ try {
723
+ const serializedRecipients = serializer(recipients);
724
+ const serializedPayload = {
725
+ network,
726
+ senderAddress,
727
+ message,
728
+ recipients: serializedRecipients
729
+ };
730
+ const request2 = createUnsecuredToken6(serializedPayload);
731
+ const response = await provider.sendBtcTransaction(request2);
732
+ options.onFinish?.(response);
733
+ } catch (error) {
734
+ console.error("[Connect] Error during send BTC transaction request", error);
735
+ options.onCancel?.();
736
+ }
737
+ };
738
+
739
+ // src/transactions/signTransaction.ts
740
+ import { createUnsecuredToken as createUnsecuredToken7 } from "jsontokens";
741
+ var signTransaction = async (options) => {
742
+ const provider = await getProviderOrThrow(options.getProvider);
743
+ const { psbtBase64, inputsToSign } = options.payload;
744
+ if (!psbtBase64) {
745
+ throw new Error("A value for psbtBase64 representing the tx hash is required");
746
+ }
747
+ if (!inputsToSign) {
748
+ throw new Error("An array specifying the inputs to be signed by the wallet is required");
749
+ }
750
+ try {
751
+ const request2 = createUnsecuredToken7(options.payload);
752
+ const response = await provider.signTransaction(request2);
753
+ options.onFinish?.(response);
754
+ } catch (error) {
755
+ console.error("[Connect] Error during sign transaction request", error);
756
+ options.onCancel?.();
757
+ }
758
+ };
759
+
760
+ // src/transactions/signMultipleTransactions.ts
761
+ import { createUnsecuredToken as createUnsecuredToken8 } from "jsontokens";
762
+ var signMultipleTransactions = async (options) => {
763
+ const provider = await getProviderOrThrow(options.getProvider);
764
+ const { psbts } = options.payload;
765
+ if (!psbts || !psbts.length) {
766
+ throw new Error("psbts array is required");
767
+ }
768
+ if (psbts.length > 100) {
769
+ throw new Error("psbts array must contain less than 100 psbts");
770
+ }
771
+ try {
772
+ const request2 = createUnsecuredToken8(options.payload);
773
+ const response = await provider.signMultipleTransactions(request2);
774
+ options.onFinish?.(response);
775
+ } catch (error) {
776
+ console.error("[Connect] Error during sign Multiple transactions request", error);
777
+ options.onCancel?.();
778
+ }
779
+ };
780
+
781
+ // src/ui/index.ts
782
+ function createDefaultConfig(providers) {
783
+ const config = { providers: [] };
784
+ const xverseProvider = providers.find(
785
+ (provider) => provider.id === DefaultAdaptersInfo.xverse.id
786
+ );
787
+ config.providers.push(
788
+ xverseProvider ? xverseProvider : {
789
+ ...DefaultAdaptersInfo.xverse,
790
+ isInstalled: false
791
+ }
792
+ );
793
+ const unisatProvider = providers.find((provider) => provider.id === "unisat");
794
+ if (unisatProvider && unisatProvider.isInstalled) {
795
+ config.providers.push(unisatProvider);
796
+ }
797
+ config.providers.concat(
798
+ providers.filter((provider) => {
799
+ return provider.id !== DefaultAdaptersInfo.xverse.id && provider.id !== "unisat";
800
+ })
801
+ );
802
+ return config;
803
+ }
804
+ export {
805
+ AddressPurpose,
806
+ AddressType,
807
+ BaseAdapter,
808
+ BitcoinNetworkType,
809
+ DefaultAdaptersInfo,
810
+ RpcErrorCode,
811
+ SatsConnectAdapter,
812
+ createDefaultConfig,
813
+ createInscription,
814
+ createRepeatInscriptions,
815
+ defaultAdapters,
816
+ getAddress,
817
+ getCapabilities,
818
+ getDefaultProvider,
819
+ getProviderById,
820
+ getProviderOrThrow,
821
+ getProviders,
822
+ getSupportedWallets,
823
+ isProviderInstalled,
824
+ removeDefaultProvider,
825
+ request,
826
+ sendBtcTransaction,
827
+ setDefaultProvider,
828
+ signMessage,
829
+ signMultipleTransactions,
830
+ signTransaction
831
+ };