btc-wallet 0.0.1

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 (53) hide show
  1. package/README.md +9 -0
  2. package/dist/components/btcWalletSelectorContext.d.ts +12 -0
  3. package/dist/components/button/index.d.ts +10 -0
  4. package/dist/components/confirmBox/Modal.d.ts +7 -0
  5. package/dist/components/confirmBox/index.d.ts +9 -0
  6. package/dist/components/connectModal/index.d.ts +5 -0
  7. package/dist/components/copyText/index.d.ts +8 -0
  8. package/dist/components/hook.d.ts +1 -0
  9. package/dist/components/modal/index.d.ts +11 -0
  10. package/dist/components/signModal/index.d.ts +6 -0
  11. package/dist/components/spinner/index.d.ts +6 -0
  12. package/dist/components/tooltip/index.d.ts +7 -0
  13. package/dist/components/transactionDetails/index.d.ts +5 -0
  14. package/dist/connector/base.d.ts +29 -0
  15. package/dist/connector/bitget.d.ts +6 -0
  16. package/dist/connector/bybit.d.ts +6 -0
  17. package/dist/connector/index.d.ts +9 -0
  18. package/dist/connector/injected.d.ts +25 -0
  19. package/dist/connector/okx.d.ts +6 -0
  20. package/dist/connector/tokenPocket.d.ts +6 -0
  21. package/dist/connector/unisat.d.ts +6 -0
  22. package/dist/connector/wizz.d.ts +6 -0
  23. package/dist/connector/xverse.d.ts +23 -0
  24. package/dist/context/index.d.ts +45 -0
  25. package/dist/evmSigner/index.d.ts +4966 -0
  26. package/dist/evmSigner/provider.d.ts +13 -0
  27. package/dist/evmSigner/walletClientProvider.d.ts +10 -0
  28. package/dist/hooks/index.d.ts +6 -0
  29. package/dist/hooks/useAccountContract.d.ts +4 -0
  30. package/dist/hooks/useAccounts.d.ts +3 -0
  31. package/dist/hooks/useBTCProvider.d.ts +16 -0
  32. package/dist/hooks/useConnectModal.d.ts +4 -0
  33. package/dist/hooks/useConnector.d.ts +4 -0
  34. package/dist/hooks/useETHProvider.d.ts +1 -0
  35. package/dist/hooks/useModalStateValue.d.ts +6 -0
  36. package/dist/index.d.ts +7 -0
  37. package/dist/index.js +2738 -0
  38. package/dist/index.js.map +7 -0
  39. package/dist/package.json +1 -0
  40. package/dist/types/accountInfo.d.ts +6 -0
  41. package/dist/types/deserializeTx.d.ts +97 -0
  42. package/dist/types/eventName.d.ts +8 -0
  43. package/dist/types/evmMethod.d.ts +4 -0
  44. package/dist/utils/ethereumUtils.d.ts +7 -0
  45. package/dist/utils/eventUtils.d.ts +4 -0
  46. package/dist/utils/index.d.ts +11 -0
  47. package/dist/utils/initWalletButton.d.ts +6 -0
  48. package/dist/utils/setupBTCWallet.d.ts +11 -0
  49. package/dist/utils/setupSatoshiWallet.d.ts +11 -0
  50. package/dist/utils/txConfirmUtils.d.ts +6 -0
  51. package/esm/index.js +2720 -0
  52. package/esm/index.js.map +7 -0
  53. package/package.json +89 -0
package/esm/index.js ADDED
@@ -0,0 +1,2720 @@
1
+ "use client";
2
+ var __defProp = Object.defineProperty;
3
+ var __defProps = Object.defineProperties;
4
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
8
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
9
+ var __spreadValues = (a, b) => {
10
+ for (var prop in b || (b = {}))
11
+ if (__hasOwnProp.call(b, prop))
12
+ __defNormalProp(a, prop, b[prop]);
13
+ if (__getOwnPropSymbols)
14
+ for (var prop of __getOwnPropSymbols(b)) {
15
+ if (__propIsEnum.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ }
18
+ return a;
19
+ };
20
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
21
+ var __accessCheck = (obj, member, msg) => {
22
+ if (!member.has(obj))
23
+ throw TypeError("Cannot " + msg);
24
+ };
25
+ var __privateGet = (obj, member, getter) => {
26
+ __accessCheck(obj, member, "read from private field");
27
+ return getter ? getter.call(obj) : member.get(obj);
28
+ };
29
+ var __privateAdd = (obj, member, value) => {
30
+ if (member.has(obj))
31
+ throw TypeError("Cannot add the same private member more than once");
32
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
33
+ };
34
+ var __async = (__this, __arguments, generator) => {
35
+ return new Promise((resolve, reject) => {
36
+ var fulfilled = (value) => {
37
+ try {
38
+ step(generator.next(value));
39
+ } catch (e) {
40
+ reject(e);
41
+ }
42
+ };
43
+ var rejected = (value) => {
44
+ try {
45
+ step(generator.throw(value));
46
+ } catch (e) {
47
+ reject(e);
48
+ }
49
+ };
50
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
51
+ step((generator = generator.apply(__this, __arguments)).next());
52
+ });
53
+ };
54
+
55
+ // src/connector/base.ts
56
+ var BaseConnector = class {
57
+ };
58
+
59
+ // src/icons/bitget.png
60
+ var bitget_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAYAAADDPmHLAAAAAXNSR0IArs4c6QAAAORlWElmTU0AKgAAAAgABgESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgExAAIAAAAfAAAAZgEyAAIAAAAUAAAAhodpAAQAAAABAAAAmgAAAAAAAABIAAAAAQAAAEgAAAABQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpAAAyMDIzOjA4OjA0IDE0OjA5OjI0AAAEkAQAAgAAABQAAADQoAEAAwAAAAEAAQAAoAIABAAAAAEAAACAoAMABAAAAAEAAACAAAAAADIwMjM6MDg6MDQgMTA6MDk6MDkAdpUVnwAAAAlwSFlzAAALEwAACxMBAJqcGAAACW9pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgICAgICAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIj4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMjMtMDgtMDRUMTQ6MDk6MjQrMDg6MDA8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyMy0wOC0wNFQxMDowOTowOSswODowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TWV0YWRhdGFEYXRlPjIwMjMtMDgtMDRUMTQ6MDk6MjQrMDg6MDA8L3htcDpNZXRhZGF0YURhdGU+CiAgICAgICAgIDx4bXBNTTpIaXN0b3J5PgogICAgICAgICAgICA8cmRmOlNlcT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wOC0wNFQxMDowOTowOSswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDpjZmU0ZDc0NC0wMGY0LTRhOTEtYjI2Mi0xMDFmNmYyYjYwYTk8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+Y3JlYXRlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICA8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpzb2Z0d2FyZUFnZW50PkFkb2JlIFBob3Rvc2hvcCBDQyAoTWFjaW50b3NoKTwvc3RFdnQ6c29mdHdhcmVBZ2VudD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmNoYW5nZWQ+Lzwvc3RFdnQ6Y2hhbmdlZD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAyMy0wOC0wNFQxNDowOToyNCswODowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0Omluc3RhbmNlSUQ+eG1wLmlpZDozMDlmN2NhZS0wOThiLTQ3ZDUtOWE0NC02MTg3MjQ1ZTEwMDY8L3N0RXZ0Omluc3RhbmNlSUQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDphY3Rpb24+c2F2ZWQ8L3N0RXZ0OmFjdGlvbj4KICAgICAgICAgICAgICAgPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOlNlcT4KICAgICAgICAgPC94bXBNTTpIaXN0b3J5PgogICAgICAgICA8eG1wTU06T3JpZ2luYWxEb2N1bWVudElEPnhtcC5kaWQ6Y2ZlNGQ3NDQtMDBmNC00YTkxLWIyNjItMTAxZjZmMmI2MGE5PC94bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+CiAgICAgICAgIDx4bXBNTTpEb2N1bWVudElEPnhtcC5kaWQ6Y2ZlNGQ3NDQtMDBmNC00YTkxLWIyNjItMTAxZjZmMmI2MGE5PC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjMwOWY3Y2FlLTA5OGItNDdkNS05YTQ0LTYxODcyNDVlMTAwNjwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHBob3Rvc2hvcDpJQ0NQcm9maWxlPnNSR0IgSUVDNjE5NjYtMi4xPC9waG90b3Nob3A6SUNDUHJvZmlsZT4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlv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";
61
+
62
+ // src/connector/injected.ts
63
+ var InjectedConnector = class extends BaseConnector {
64
+ constructor(propertity) {
65
+ var _a;
66
+ super();
67
+ this.propertity = propertity;
68
+ const props = (_a = this.propertity) == null ? void 0 : _a.split(".");
69
+ if (!this.propertity || props.length > 2) {
70
+ throw new Error("please input valid propertity");
71
+ }
72
+ }
73
+ isReady() {
74
+ if (typeof window !== "undefined") {
75
+ const props = this.propertity.split(".");
76
+ if (props.length === 1) {
77
+ return typeof window[props[0]] !== "undefined";
78
+ } else {
79
+ return typeof window[props[0]] !== "undefined" && typeof window[props[0]][props[1]] !== "undefined";
80
+ }
81
+ }
82
+ return false;
83
+ }
84
+ requestAccounts() {
85
+ return __async(this, null, function* () {
86
+ const accounts = yield this.getProviderOrThrow().requestAccounts();
87
+ return accounts;
88
+ });
89
+ }
90
+ getAccounts() {
91
+ return __async(this, null, function* () {
92
+ const accounts = yield this.getProviderOrThrow().getAccounts();
93
+ return accounts;
94
+ });
95
+ }
96
+ getPublicKey() {
97
+ return __async(this, null, function* () {
98
+ return this.getProviderOrThrow().getPublicKey();
99
+ });
100
+ }
101
+ signMessage(signStr, type) {
102
+ return __async(this, null, function* () {
103
+ const addresses = yield this.getAccounts();
104
+ if (addresses.length === 0) {
105
+ throw new Error(`${this.metadata.name} not connected!`);
106
+ }
107
+ return this.getProviderOrThrow().signMessage(signStr, type);
108
+ });
109
+ }
110
+ on(event, handler) {
111
+ var _a;
112
+ const provider = this.getProvider();
113
+ return (_a = provider == null ? void 0 : provider.on) == null ? void 0 : _a.call(provider, event, handler);
114
+ }
115
+ removeListener(event, handler) {
116
+ var _a;
117
+ const provider = this.getProvider();
118
+ return (_a = provider == null ? void 0 : provider.removeListener) == null ? void 0 : _a.call(provider, event, handler);
119
+ }
120
+ getProvider() {
121
+ if (this.isReady()) {
122
+ const props = this.propertity.split(".");
123
+ if (props.length === 1) {
124
+ return window[props[0]];
125
+ } else {
126
+ return window[props[0]][props[1]];
127
+ }
128
+ }
129
+ }
130
+ getProviderOrThrow() {
131
+ const provider = this.getProvider();
132
+ if (!provider) {
133
+ throw new Error(`${this.metadata.name} is not install or not create Bitcoin wallet!`);
134
+ }
135
+ return provider;
136
+ }
137
+ getNetwork() {
138
+ return __async(this, null, function* () {
139
+ return this.getProviderOrThrow().getNetwork();
140
+ });
141
+ }
142
+ switchNetwork(network) {
143
+ return __async(this, null, function* () {
144
+ return this.getProviderOrThrow().switchNetwork(network);
145
+ });
146
+ }
147
+ sendBitcoin(toAddress, satoshis, options) {
148
+ return __async(this, null, function* () {
149
+ return this.getProviderOrThrow().sendBitcoin(toAddress, satoshis, options);
150
+ });
151
+ }
152
+ sendInscription(address, inscriptionId, options) {
153
+ return __async(this, null, function* () {
154
+ const result = yield this.getProviderOrThrow().sendInscription(address, inscriptionId, options);
155
+ if (typeof result === "string") {
156
+ return {
157
+ txid: result
158
+ };
159
+ }
160
+ return result;
161
+ });
162
+ }
163
+ disconnect() {
164
+ }
165
+ };
166
+
167
+ // src/connector/bitget.ts
168
+ var BitgetConnector = class extends InjectedConnector {
169
+ constructor() {
170
+ super("bitkeep.unisat");
171
+ this.metadata = {
172
+ id: "bitget",
173
+ name: "Bitget Wallet",
174
+ icon: bitget_default,
175
+ downloadUrl: "https://web3.bitget.com/en/wallet-download"
176
+ };
177
+ }
178
+ };
179
+
180
+ // src/icons/bybit.png
181
+ var bybit_default = "data:image/png;base64,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";
182
+
183
+ // src/connector/bybit.ts
184
+ var BybitConnector = class extends InjectedConnector {
185
+ constructor() {
186
+ super("bybitWallet.bitcoin");
187
+ this.metadata = {
188
+ id: "bybit",
189
+ name: "Bybit Wallet",
190
+ icon: bybit_default,
191
+ downloadUrl: "https://www.bybit.com/download/"
192
+ };
193
+ }
194
+ };
195
+
196
+ // src/icons/okx.svg
197
+ var okx_default = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cmVjdCB3aWR0aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiBmaWxsPSJibGFjayIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTM5My45NDkgMjE4LjUxOEgyMzEuMDQ5QzIyNC4xMjkgMjE4LjUxOCAyMTguNTE5IDIyNC4xMjggMjE4LjUxOSAyMzEuMDQ4VjM5My45NDhDMjE4LjUxOSA0MDAuODY5IDIyNC4xMjkgNDA2LjQ3OSAyMzEuMDQ5IDQwNi40NzlIMzkzLjk0OUM0MDAuODcgNDA2LjQ3OSA0MDYuNDggNDAwLjg2OSA0MDYuNDggMzkzLjk0OFYyMzEuMDQ4QzQwNi40OCAyMjQuMTI4IDQwMC44NyAyMTguNTE4IDM5My45NDkgMjE4LjUxOFpNNTgxLjk5MiA0MDYuNDc5SDQxOS4wOTJDNDEyLjE3MiA0MDYuNDc5IDQwNi41NjEgNDEyLjA5IDQwNi41NjEgNDE5LjAxVjU4MS45MUM0MDYuNTYxIDU4OC44MzEgNDEyLjE3MiA1OTQuNDQxIDQxOS4wOTIgNTk0LjQ0MUg1ODEuOTkyQzU4OC45MTMgNTk0LjQ0MSA1OTQuNTIzIDU4OC44MzEgNTk0LjUyMyA1ODEuOTFWNDE5LjAxQzU5NC41MjMgNDEyLjA5IDU4OC45MTMgNDA2LjQ3OSA1ODEuOTkyIDQwNi40NzlaTTYwNi45NzQgMjE4LjUxOEg3NjkuODc0Qzc3Ni43OTQgMjE4LjUxOCA3ODIuNDA1IDIyNC4xMjggNzgyLjQwNSAyMzEuMDQ4VjM5My45NDhDNzgyLjQwNSA0MDAuODY5IDc3Ni43OTQgNDA2LjQ3OSA3NjkuODc0IDQwNi40NzlINjA2Ljk3NEM2MDAuMDUzIDQwNi40NzkgNTk0LjQ0MyA0MDAuODY5IDU5NC40NDMgMzkzLjk0OFYyMzEuMDQ4QzU5NC40NDMgMjI0LjEyOCA2MDAuMDUzIDIxOC41MTggNjA2Ljk3NCAyMTguNTE4Wk0zOTMuOTUgNTk0LjQ0MkgyMzEuMDQ5QzIyNC4xMjkgNTk0LjQ0MiAyMTguNTE5IDYwMC4wNTIgMjE4LjUxOSA2MDYuOTczVjc2OS44NzNDMjE4LjUxOSA3NzYuNzkzIDIyNC4xMjkgNzgyLjQwNCAyMzEuMDQ5IDc4Mi40MDRIMzkzLjk1QzQwMC44NyA3ODIuNDA0IDQwNi40OCA3NzYuNzkzIDQwNi40OCA3NjkuODczVjYwNi45NzNDNDA2LjQ4IDYwMC4wNTIgNDAwLjg3IDU5NC40NDIgMzkzLjk1IDU5NC40NDJaTTYwNi45NzQgNTk0LjQ0Mkg3NjkuODc0Qzc3Ni43OTQgNTk0LjQ0MiA3ODIuNDA1IDYwMC4wNTIgNzgyLjQwNSA2MDYuOTczVjc2OS44NzNDNzgyLjQwNSA3NzYuNzkzIDc3Ni43OTQgNzgyLjQwNCA3NjkuODc0IDc4Mi40MDRINjA2Ljk3NEM2MDAuMDUzIDc4Mi40MDQgNTk0LjQ0MyA3NzYuNzkzIDU5NC40NDMgNzY5Ljg3M1Y2MDYuOTczQzU5NC40NDMgNjAwLjA1MiA2MDAuMDUzIDU5NC40NDIgNjA2Ljk3NCA1OTQuNDQyWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==";
198
+
199
+ // src/connector/okx.ts
200
+ var OKXConnector = class extends InjectedConnector {
201
+ constructor() {
202
+ super("okxwallet.bitcoin");
203
+ this.metadata = {
204
+ id: "okx",
205
+ name: "OKX Wallet",
206
+ icon: okx_default,
207
+ downloadUrl: "https://www.okx.com/download"
208
+ };
209
+ }
210
+ };
211
+
212
+ // src/icons/tokenpocket.png
213
+ var tokenpocket_default = "data:image/png;base64,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";
214
+
215
+ // src/connector/tokenPocket.ts
216
+ var TokenPocketConnector = class extends InjectedConnector {
217
+ constructor() {
218
+ super("tokenpocket.bitcoin");
219
+ this.metadata = {
220
+ id: "tokenpocket",
221
+ name: "TokenPocket",
222
+ icon: tokenpocket_default,
223
+ downloadUrl: "https://www.tokenpocket.pro/en/download/app"
224
+ };
225
+ }
226
+ };
227
+
228
+ // src/icons/unisat.svg
229
+ var unisat_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iX2ZyYW1lXzIiIGRhdGEtbmFtZT0iZnJhbWUgMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmlld0JveD0iLTEyIDAgMTAwIDEwMCI+CiAgPGRlZnM+CiAgICA8c3R5bGU+CiAgICAgIC5jbHMtMSB7CiAgICAgICAgZmlsbDogdXJsKCNfbGxfMTI2KTsKICAgICAgfQoKICAgICAgLmNscy0yIHsKICAgICAgICBmaWxsOiB1cmwoI19sbF8xMjMpOwogICAgICB9CgogICAgICAuY2xzLTMgewogICAgICAgIGZpbGw6IHVybCgjX2xsXzEyMSk7CiAgICAgIH0KCiAgICAgIC5jbHMtNCB7CiAgICAgICAgZmlsbDogI2ZmZjsKICAgICAgICBmb250LWZhbWlseTogSmV0QnJhaW5zTW9ub1JvbWFuLU1lZGl1bSwgJ0pldEJyYWlucyBNb25vJzsKICAgICAgICBmb250LXNpemU6IDI0Ljc5cHg7CiAgICAgICAgZm9udC12YXJpYXRpb24tc2V0dGluZ3M6ICd3Z2h0JyA1MDA7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9Il9sbF8xMjYiICB4MT0iOTYxLjY4IiB5MT0iLTQ1LjU3IiB4Mj0iOTg2LjE0IiB5Mj0iLTExMC4wNiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSg3ODAuOTkgNjcxLjcpIHJvdGF0ZSgtMTM0LjczKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMwNzAxMDAiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuMzYiIHN0b3AtY29sb3I9IiM3NzM5MGQiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIuNjciIHN0b3AtY29sb3I9IiNlYTgxMDEiLz4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZjRiODUyIi8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJfbGxfMTIxIiAgeDE9Ijk2NS4xNyIgeTE9Ii0xMzIuNDEiIHgyPSI5MjkuMjIiIHkyPSItNjUuMjIiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoNzgwLjk5IDY3MS43KSByb3RhdGUoLTEzNC43MykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMDcwMTAwIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjM3IiBzdG9wLWNvbG9yPSIjNzczOTBkIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iLjY3IiBzdG9wLWNvbG9yPSIjZWE4MTAxIi8+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2Y0ZmI1MiIvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxyYWRpYWxHcmFkaWVudCBpZD0iX2xsXzEyMyIgIGN4PSIzNS41OSIgY3k9IjMwLjc2IiBmeD0iMzUuNTkiIGZ5PSIzMC43NiIgcj0iNy40NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwIDApIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2Y0Yjg1MiIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii4zMyIgc3RvcC1jb2xvcj0iI2VhODEwMSIvPgogICAgICA8c3RvcCBvZmZzZXQ9Ii42NCIgc3RvcC1jb2xvcj0iIzc3MzkwZCIvPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwNzAxMDAiLz4KICAgIDwvcmFkaWFsR3JhZGllbnQ+CiAgPC9kZWZzPgogIDxnIGlkPSJfZnJhbWVfMS0yIiA+CiAgICA8Zz4KICAgICAgPGc+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0xIiBkPSJNNTQuODEsOC45MWwyMC4zNCwyMC4xNGMxLjczLDEuNzEsMi41OCwzLjQ0LDIuNTUsNS4xOS0uMDMsMS43NC0uNzcsMy4zNC0yLjIzLDQuNzgtMS41MiwxLjUxLTMuMTYsMi4yOC00LjkyLDIuMzEtMS43NiwuMDMtMy41LS44Mi01LjI0LTIuNTNsLTIwLjgtMjAuNmMtMi4zNi0yLjM0LTQuNjQtNC02Ljg0LTQuOTctMi4xOS0uOTctNC41LTEuMTItNi45Mi0uNDYtMi40MiwuNjYtNS4wMiwyLjM3LTcuOCw1LjEzLTMuODQsMy44LTUuNjcsNy4zNy01LjQ4LDEwLjcxLC4xOSwzLjM0LDIuMDksNi43OSw1LjcxLDEwLjM4bDIwLjk3LDIwLjc3YzEuNzUsMS43MywyLjYxLDMuNDYsMi41OCw1LjE4LS4wMywxLjcyLS43OCwzLjMyLTIuMjYsNC43OC0xLjQ4LDEuNDYtMy4xLDIuMjMtNC44OCwyLjI5LTEuNzcsLjA2LTMuNTMtLjc4LTUuMjgtMi41MUwxMy45OSw0OS4zNmMtMy4zMS0zLjI4LTUuNy02LjM4LTcuMTctOS4zLTEuNDctMi45Mi0yLjAyLTYuMjMtMS42NC05LjkyLC4zNC0zLjE2LDEuMzYtNi4yMiwzLjA0LTkuMTksMS42OS0yLjk3LDQuMS02LDcuMjMtOS4xMSwzLjczLTMuNyw3LjI5LTYuNTMsMTAuNjktOC41QzI5LjU0LDEuMzcsMzIuODIsLjI3LDM1Ljk5LC4wNGMzLjE3LS4yMyw2LjMsLjQsOS40LDEuODksMy4wOSwxLjQ5LDYuMjMsMy44MSw5LjQzLDYuOThaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjIuOTIsOTAuMTlMMi41OCw3MC4wNUMuODUsNjguMzQsMCw2Ni42MSwuMDMsNjQuODZzLjc3LTMuMzQsMi4yMy00Ljc4YzEuNTItMS41MSwzLjE2LTIuMjgsNC45Mi0yLjMxLDEuNzYtLjAzLDMuNSwuODEsNS4yNCwyLjUzbDIwLjgsMjAuNmMyLjM3LDIuMzQsNC42NCw0LDYuODQsNC45N3M0LjUsMS4xMiw2LjkyLC40NmMyLjQyLS42Niw1LjAyLTIuMzcsNy44LTUuMTMsMy44NC0zLjgsNS42Ny03LjM3LDUuNDgtMTAuNzEtLjE5LTMuMzQtMi4wOS02LjgtNS43MS0xMC4zOGwtMTEuMTctMTAuOTdjLTEuNzUtMS43My0yLjYxLTMuNDYtMi41OC01LjE4LC4wMy0xLjcyLC43OC0zLjMyLDIuMjYtNC43OCwxLjQ4LTEuNDYsMy4xLTIuMjMsNC44OC0yLjI5LDEuNzctLjA2LDMuNTMsLjc4LDUuMjgsMi41MWwxMC41MywxMC4zNGMzLjMxLDMuMjgsNS43LDYuMzgsNy4xNyw5LjMsMS40NywyLjkyLDIuMDIsNi4yMywxLjY0LDkuOTItLjM0LDMuMTYtMS4zNiw2LjIyLTMuMDQsOS4xOS0xLjY5LDIuOTctNC4xLDYtNy4yMyw5LjExLTMuNzMsMy43LTcuMjksNi41My0xMC42OSw4LjUtMy40LDEuOTctNi42OCwzLjA3LTkuODUsMy4zLTMuMTcsLjIzLTYuMy0uNC05LjQtMS44OS0zLjA5LTEuNDktNi4yNC0zLjgxLTkuNDMtNi45OFoiLz4KICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHMtMiIgY3g9IjM1LjYiIGN5PSIzMC43NSIgcj0iNy40NyIvPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=";
230
+
231
+ // src/connector/unisat.ts
232
+ var UnisatConnector = class extends InjectedConnector {
233
+ constructor() {
234
+ super("unisat");
235
+ this.metadata = {
236
+ id: "unisat",
237
+ name: "Unisat Wallet",
238
+ icon: unisat_default,
239
+ downloadUrl: "https://unisat.io"
240
+ };
241
+ }
242
+ };
243
+
244
+ // src/icons/wizz.svg
245
+ var wizz_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZEODE1IiBkPSJtMjkuNjExIDE1LjU4NC0yLjU5Ny0yLjU5OC0yLjU5OCAyLjU5OCAyLjU5OCAyLjU5NyAyLjU5NyAyLjU5NyAyLjU5Ny0yLjU5N3oiLz48cGF0aCBmaWxsPSIjRkY5ODEzIiBkPSJtMjkuNjExIDAtMi41OTggMi41OTcgMi41OTggMi41OTggMi41OTctMi41OTh6TTQwIDEwLjM4OWwtMi41OTctMi41OTctMi41OTggMi41OTcgMi41OTggMi41OTh6TTI0LjQxNiAzMS4xNjhsMi41OTggMi41OTcgMi41OTctMi41OTctMi41OTctMi41OTh6TTYuMjM1IDEyLjk4NmwyLjU5OCAyLjU5OCAyLjU5Ny0yLjU5OC0yLjU5Ny0yLjU5N3pNMTkuMjIyIDBsLTIuNTk4IDIuNTk3IDIuNTk4IDIuNTk4IDIuNTk3LTIuNTk4ek04LjgzMyA1LjE5NWwyLjU5NyAyLjU5NyAyLjU5Ny0yLjU5Ny0yLjU5Ny0yLjU5OHpNMzcuNDAzIDE4LjE4MWwtMi41OTggMi41OTcgMi41OTggMi41OThMNDAgMjAuNzc4ek0zMi4yMDggMjguNTdsMi41OTcgMi41OTggMi41OTgtMi41OTgtMi41OTgtMi41OTd6Ii8+PHBhdGggZmlsbD0iIzVCNUI3MiIgZD0ibTI5LjYxMSAyMC43NzgtMi41OTctMi41OTctMi41OTggMi41OTctMi41OTctMi41OTctMi41OTctMi41OTcgMi41OTctMi41OTgtMi41OTctMi41OTctMi41OTgtMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTcgMi41OTggMi41OTcgMi41OTctMi41OTcgMi41OTctMS4yOTktMS4yOTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTcgMi41OTgtMi40NjggMi40NjgtMi40NjggMi40NjgtMi41OTggMi41OThMMCAzNy40MDMgMi41OTcgNDBsMi41OTgtMi41OTcgMi41OTctMi41OTcgMi40NjgtMi40NjkuMTI5LS4xMjkgMi4zMzktMi4zMzkuMTI5LS4xMjkgMi40NjktMi40NjggMi41OTcgMi41OTcgMi41OTctMi41OTctMS4yOTgtMS4yOTkgMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTd6Ii8+PHBhdGggZmlsbD0iI0ZGOTgxMyIgZD0ibTI5LjYxMSAxMC4zODktMi41OTctMi41OTctMi41OTggMi41OTctMi41OTctMi41OTctMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTcgMi41OTgtMi41OTctMi41OTgtMi41OTcgMi41OTgtMi41OTcgMi41OTcgMi41OTcgMi41OTctMi41OTd6Ii8+PC9nPjwvc3ZnPgo=";
246
+
247
+ // src/connector/wizz.ts
248
+ var WizzConnector = class extends InjectedConnector {
249
+ constructor() {
250
+ super("wizz");
251
+ this.metadata = {
252
+ id: "wizz",
253
+ name: "Wizz Wallet",
254
+ icon: wizz_default,
255
+ downloadUrl: "https://wizzwallet.io"
256
+ };
257
+ }
258
+ };
259
+
260
+ // src/connector/xverse.ts
261
+ import EventEmitter from "events";
262
+
263
+ // src/icons/xverse.png
264
+ var xverse_default = "data:image/png;base64,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";
265
+
266
+ // src/connector/xverse.ts
267
+ var _network, _event;
268
+ var XverseConnector = class extends BaseConnector {
269
+ constructor() {
270
+ super();
271
+ __privateAdd(this, _network, "Mainnet");
272
+ __privateAdd(this, _event, new EventEmitter());
273
+ this.metadata = {
274
+ id: "xverse",
275
+ name: "Xverse Wallet",
276
+ icon: xverse_default,
277
+ downloadUrl: "https://www.xverse.app"
278
+ };
279
+ this.loadAccounts = (network) => __async(this, null, function* () {
280
+ const { getAddress, AddressPurpose } = yield import("sats-connect");
281
+ const addresses = yield new Promise((resolve, reject) => {
282
+ const getAddressOptions = {
283
+ payload: {
284
+ purposes: [AddressPurpose.Payment, AddressPurpose.Ordinals],
285
+ message: "Address for receiving Ordinals and payments",
286
+ network: {
287
+ type: network
288
+ }
289
+ },
290
+ onFinish: (response) => {
291
+ resolve(response.addresses);
292
+ },
293
+ onCancel: () => reject({
294
+ code: 4001,
295
+ message: "User rejected the request."
296
+ })
297
+ };
298
+ getAddress(getAddressOptions).catch((error) => reject(error));
299
+ });
300
+ localStorage.setItem("btc-connect-xverse-addresses-" + network, JSON.stringify(addresses));
301
+ return addresses;
302
+ });
303
+ __privateGet(this, _event).setMaxListeners(100);
304
+ }
305
+ isReady() {
306
+ return typeof window !== "undefined" && typeof window.BitcoinProvider !== "undefined";
307
+ }
308
+ sendInscription() {
309
+ return __async(this, null, function* () {
310
+ throw new Error("Unsupported");
311
+ });
312
+ }
313
+ requestAccounts() {
314
+ return __async(this, null, function* () {
315
+ if (!this.isReady()) {
316
+ throw new Error(`${this.metadata.name} is not install!`);
317
+ }
318
+ const addresses = yield this.loadAccounts(__privateGet(this, _network));
319
+ return addresses.map((item) => item.address);
320
+ });
321
+ }
322
+ getAccounts() {
323
+ return __async(this, null, function* () {
324
+ if (!this.isReady()) {
325
+ throw new Error(`${this.metadata.name} is not install!`);
326
+ }
327
+ const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
328
+ if (data) {
329
+ const addresses = JSON.parse(data);
330
+ return addresses.map((item) => item.address);
331
+ } else {
332
+ return [];
333
+ }
334
+ });
335
+ }
336
+ getPublicKey() {
337
+ return __async(this, null, function* () {
338
+ if (!this.isReady()) {
339
+ throw new Error(`${this.metadata.name} is not install!`);
340
+ }
341
+ const data = localStorage.getItem("btc-connect-xverse-addresses-" + __privateGet(this, _network));
342
+ if (data) {
343
+ const addresses = JSON.parse(data);
344
+ return addresses[0].publicKey;
345
+ } else {
346
+ return "";
347
+ }
348
+ });
349
+ }
350
+ signMessage(signStr) {
351
+ return __async(this, null, function* () {
352
+ if (!this.isReady()) {
353
+ throw new Error(`${this.metadata.name} is not install!`);
354
+ }
355
+ const addresses = yield this.getAccounts();
356
+ if (addresses.length === 0) {
357
+ throw new Error(`${this.metadata.name} not connected!`);
358
+ }
359
+ const { signMessage } = yield import("sats-connect");
360
+ const sig = yield new Promise((resolve, reject) => {
361
+ const signMessageOptions = {
362
+ payload: {
363
+ network: {
364
+ type: __privateGet(this, _network)
365
+ },
366
+ address: addresses[0],
367
+ message: signStr
368
+ },
369
+ onFinish: (response) => {
370
+ resolve(response);
371
+ },
372
+ onCancel: () => {
373
+ reject({
374
+ code: 4001,
375
+ message: "User rejected the request."
376
+ });
377
+ }
378
+ };
379
+ signMessage(signMessageOptions).catch((e) => {
380
+ reject(e);
381
+ });
382
+ });
383
+ const modifiedSig = Buffer.from(sig, "base64");
384
+ modifiedSig[0] = 31 + (modifiedSig[0] - 31) % 4;
385
+ return modifiedSig.toString("base64");
386
+ });
387
+ }
388
+ on(event, handler) {
389
+ return __privateGet(this, _event).on(event, handler);
390
+ }
391
+ removeListener(event, handler) {
392
+ return __privateGet(this, _event).removeListener(event, handler);
393
+ }
394
+ getProvider() {
395
+ if (this.isReady()) {
396
+ return window.BitcoinProvider;
397
+ }
398
+ }
399
+ getNetwork() {
400
+ return __async(this, null, function* () {
401
+ if (!this.isReady()) {
402
+ throw new Error(`${this.metadata.name} is not install!`);
403
+ }
404
+ return __privateGet(this, _network) === "Mainnet" ? "livenet" : "testnet";
405
+ });
406
+ }
407
+ switchNetwork() {
408
+ return __async(this, null, function* () {
409
+ throw new Error("Unsupported");
410
+ });
411
+ }
412
+ sendBitcoin(toAddress, satoshis) {
413
+ return __async(this, null, function* () {
414
+ const provider = this.getProvider();
415
+ if (!provider) {
416
+ throw new Error(`${this.metadata.name} is not install!`);
417
+ }
418
+ const { sendBtcTransaction } = yield import("sats-connect");
419
+ const addresses = yield this.getAccounts();
420
+ if (addresses.length === 0) {
421
+ throw new Error(`${this.metadata.name} not connected!`);
422
+ }
423
+ const result = yield new Promise((resolve, reject) => {
424
+ const sendBtcOptions = {
425
+ payload: {
426
+ network: {
427
+ type: __privateGet(this, _network)
428
+ },
429
+ recipients: [
430
+ {
431
+ address: toAddress,
432
+ amountSats: BigInt(satoshis)
433
+ }
434
+ ],
435
+ senderAddress: addresses[0]
436
+ },
437
+ onFinish: (response) => {
438
+ resolve(response);
439
+ },
440
+ onCancel: () => {
441
+ reject({
442
+ code: 4001,
443
+ message: "User rejected the request."
444
+ });
445
+ }
446
+ };
447
+ sendBtcTransaction(sendBtcOptions).catch((e) => reject(e));
448
+ });
449
+ return result;
450
+ });
451
+ }
452
+ disconnect() {
453
+ localStorage.removeItem("btc-connect-xverse-addresses-Mainnet");
454
+ localStorage.removeItem("btc-connect-xverse-addresses-Testnet");
455
+ }
456
+ };
457
+ _network = new WeakMap();
458
+ _event = new WeakMap();
459
+
460
+ // src/context/index.tsx
461
+ import { SmartAccount } from "@particle-network/aa";
462
+ import { chains as chains4 } from "@particle-network/chains";
463
+ import { walletEntryPlugin } from "@particle-network/wallet";
464
+ import { createContext, useCallback as useCallback7, useContext, useEffect as useEffect5, useMemo as useMemo5, useState as useState7 } from "react";
465
+
466
+ // src/components/connectModal/index.tsx
467
+ import { useEffect as useEffect3, useState as useState3 } from "react";
468
+
469
+ // src/hooks/useAccountContract.ts
470
+ var useAccountContract = () => {
471
+ const { accountContract, setAccountContract } = useConnectProvider();
472
+ return {
473
+ accountContract,
474
+ setAccountContract
475
+ };
476
+ };
477
+
478
+ // src/hooks/useAccounts.ts
479
+ var useAccounts = () => {
480
+ const { accounts } = useConnectProvider();
481
+ return { accounts };
482
+ };
483
+
484
+ // src/hooks/useBTCProvider.ts
485
+ import { useCallback } from "react";
486
+ var useBTCProvider = () => {
487
+ const { connector, provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin } = useConnectProvider();
488
+ const sendInscription = useCallback(
489
+ (address, inscriptionId, options) => __async(void 0, null, function* () {
490
+ if (!connector) {
491
+ throw new Error("Wallet not connected!");
492
+ }
493
+ const result = yield connector.sendInscription(address, inscriptionId, options);
494
+ return result;
495
+ }),
496
+ [connector]
497
+ );
498
+ return { provider, accounts, getPublicKey, signMessage, getNetwork, switchNetwork, sendBitcoin, sendInscription };
499
+ };
500
+
501
+ // src/hooks/useConnectModal.ts
502
+ var useConnectModal = () => {
503
+ const { openConnectModal, disconnect } = useConnectProvider();
504
+ return { openConnectModal, disconnect };
505
+ };
506
+
507
+ // src/hooks/useConnector.ts
508
+ import { useCallback as useCallback2 } from "react";
509
+ var useConnector = () => {
510
+ const { connectors, setConnectorId } = useConnectProvider();
511
+ const connect = useCallback2(
512
+ (connectorId) => __async(void 0, null, function* () {
513
+ const connector = connectors.find((item) => item.metadata.id === connectorId);
514
+ if (!connector) {
515
+ throw new Error(`connector id ${connectorId} not found`);
516
+ }
517
+ const accounts = yield connector.requestAccounts();
518
+ if (accounts.length > 0) {
519
+ localStorage.setItem("current-connector-id", connector.metadata.id);
520
+ setConnectorId(connector.metadata.id);
521
+ }
522
+ }),
523
+ [connectors, setConnectorId]
524
+ );
525
+ return { connectors, connect };
526
+ };
527
+
528
+ // src/hooks/useETHProvider.ts
529
+ import { intToHex } from "@ethereumjs/util";
530
+ import { useCallback as useCallback3, useEffect, useMemo, useState } from "react";
531
+ import { createWalletClient, custom } from "viem";
532
+
533
+ // src/evmSigner/provider.ts
534
+ var EthereumProvider = class {
535
+ constructor(sendUserOp, signer, account) {
536
+ this.sendUserOp = sendUserOp;
537
+ this.signer = signer;
538
+ this.account = account;
539
+ }
540
+ on(event, listener) {
541
+ var _a;
542
+ (_a = this.signer) == null ? void 0 : _a.on(event, listener);
543
+ return this;
544
+ }
545
+ once(event, listener) {
546
+ var _a;
547
+ (_a = this.signer) == null ? void 0 : _a.once(event, listener);
548
+ return this;
549
+ }
550
+ off(event, listener) {
551
+ var _a;
552
+ (_a = this.signer) == null ? void 0 : _a.off(event, listener);
553
+ return this;
554
+ }
555
+ removeListener(event, listener) {
556
+ var _a;
557
+ (_a = this.signer) == null ? void 0 : _a.removeListener(event, listener);
558
+ return this;
559
+ }
560
+ request(arg) {
561
+ return __async(this, null, function* () {
562
+ var _a, _b;
563
+ const method = arg.method;
564
+ if (!method) {
565
+ throw new Error("Method not found.");
566
+ }
567
+ if (method === "eth_accounts" || method === "eth_requestAccounts") {
568
+ return this.account ? [this.account] : [];
569
+ } else if (method === "eth_sendTransaction") {
570
+ const txData = (_a = arg.params) == null ? void 0 : _a[0];
571
+ const result = yield this.sendUserOp({ tx: txData });
572
+ return result;
573
+ }
574
+ return (_b = this.signer) == null ? void 0 : _b.request(arg);
575
+ });
576
+ }
577
+ };
578
+
579
+ // src/utils/eventUtils.ts
580
+ import { EventEmitter as EventEmitter2 } from "events";
581
+ var events = new EventEmitter2();
582
+ events.setMaxListeners(100);
583
+ var getPendingSignEventAccount = () => {
584
+ return events.listenerCount("sendUserOpResult" /* sendUserOpResult */) + events.listenerCount("personalSignResult" /* personalSignResult */) + events.listenerCount("signTypedDataResult" /* signTypedDataResult */);
585
+ };
586
+ var eventUtils_default = events;
587
+
588
+ // src/utils/txConfirmUtils.ts
589
+ var txConfirm = {
590
+ isNotRemind: () => {
591
+ if (typeof window === "undefined")
592
+ return false;
593
+ const value = localStorage.getItem("tx-confirm-modal-remind");
594
+ return value === "0";
595
+ },
596
+ setNotRemind: (notRemind) => {
597
+ if (typeof window === "undefined")
598
+ return;
599
+ if (notRemind) {
600
+ localStorage.setItem("tx-confirm-modal-remind", "0");
601
+ } else {
602
+ localStorage.removeItem("tx-confirm-modal-remind");
603
+ }
604
+ },
605
+ reset: () => {
606
+ if (typeof window === "undefined")
607
+ return;
608
+ localStorage.removeItem("tx-confirm-modal-remind");
609
+ }
610
+ };
611
+ var txConfirmUtils_default = txConfirm;
612
+
613
+ // src/evmSigner/walletClientProvider.ts
614
+ var WalletClientProvider = class {
615
+ constructor(provider) {
616
+ this.provider = provider;
617
+ }
618
+ on(event, listener) {
619
+ this.provider.on(event, listener);
620
+ return this;
621
+ }
622
+ once(event, listener) {
623
+ this.provider.once(event, listener);
624
+ return this;
625
+ }
626
+ off(event, listener) {
627
+ this.provider.off(event, listener);
628
+ return this;
629
+ }
630
+ removeListener(event, listener) {
631
+ this.provider.removeListener(event, listener);
632
+ return this;
633
+ }
634
+ request(arg) {
635
+ return __async(this, null, function* () {
636
+ const method = arg.method;
637
+ if (!method) {
638
+ throw new Error("Method not found.");
639
+ }
640
+ if (method === "personal_sign" /* personalSign */ || method.startsWith("eth_signTypedData" /* signTypedData */)) {
641
+ const showConfirmModal = !txConfirmUtils_default.isNotRemind();
642
+ if (showConfirmModal) {
643
+ if (getPendingSignEventAccount() > 0) {
644
+ throw new Error("Operation failed, there is a transaction being processed");
645
+ }
646
+ }
647
+ if (!showConfirmModal) {
648
+ return this.provider.request(arg);
649
+ }
650
+ }
651
+ if (method === "personal_sign" /* personalSign */) {
652
+ return new Promise((resolve, reject) => {
653
+ eventUtils_default.emit("personalSign" /* personalSign */, arg);
654
+ eventUtils_default.once("personalSignResult" /* personalSignResult */, ({ result, error }) => {
655
+ if (result) {
656
+ resolve(result);
657
+ } else {
658
+ reject(error);
659
+ }
660
+ });
661
+ });
662
+ } else if (method.startsWith("eth_signTypedData" /* signTypedData */)) {
663
+ return new Promise((resolve, reject) => {
664
+ eventUtils_default.emit("signTypedData" /* signTypedData */, arg);
665
+ eventUtils_default.once("signTypedDataResult" /* signTypedDataResult */, ({ result, error }) => {
666
+ if (result) {
667
+ resolve(result);
668
+ } else {
669
+ reject(error);
670
+ }
671
+ });
672
+ });
673
+ }
674
+ return this.provider.request(arg);
675
+ });
676
+ }
677
+ };
678
+
679
+ // src/hooks/useETHProvider.ts
680
+ var useETHProvider = () => {
681
+ const { evmAccount, smartAccount, getSmartAccountInfo } = useConnectProvider();
682
+ const [chainId, setChainId] = useState();
683
+ useEffect(() => {
684
+ if (smartAccount) {
685
+ const chainId2 = smartAccount.provider.chainId;
686
+ setChainId(chainId2);
687
+ const onChangeChange = (id) => {
688
+ setChainId(Number(id));
689
+ };
690
+ smartAccount.provider.on("chainChanged", onChangeChange);
691
+ return () => {
692
+ smartAccount.provider.removeListener("chainChanged", onChangeChange);
693
+ };
694
+ }
695
+ }, [smartAccount]);
696
+ const switchChain = useCallback3(
697
+ (chainId2) => __async(void 0, null, function* () {
698
+ if (smartAccount == null ? void 0 : smartAccount.provider) {
699
+ yield smartAccount.provider.request({
700
+ method: "wallet_switchEthereumChain",
701
+ params: [
702
+ {
703
+ chainId: intToHex(chainId2)
704
+ }
705
+ ]
706
+ });
707
+ }
708
+ }),
709
+ [smartAccount == null ? void 0 : smartAccount.provider]
710
+ );
711
+ const getFeeQuotes = useCallback3(
712
+ (tx) => __async(void 0, null, function* () {
713
+ if (!smartAccount) {
714
+ throw new Error("The smart account is not initialized.");
715
+ }
716
+ return smartAccount.getFeeQuotes(tx);
717
+ }),
718
+ [smartAccount]
719
+ );
720
+ const buildUserOp = useCallback3(
721
+ (_0) => __async(void 0, [_0], function* ({ tx, feeQuote, tokenPaymasterAddress }) {
722
+ if (!smartAccount) {
723
+ throw new Error("The smart account is not initialized.");
724
+ }
725
+ const result = yield smartAccount.buildUserOperation({ tx, feeQuote, tokenPaymasterAddress });
726
+ return result;
727
+ }),
728
+ [smartAccount]
729
+ );
730
+ const sendUserOp = useCallback3(
731
+ (params, forceHideConfirmModal) => __async(void 0, null, function* () {
732
+ if (!smartAccount) {
733
+ throw new Error("The smart account is not initialized.");
734
+ }
735
+ const showConfirmModal = !forceHideConfirmModal && !txConfirmUtils_default.isNotRemind();
736
+ if (showConfirmModal) {
737
+ if (getPendingSignEventAccount() > 0) {
738
+ throw new Error("Operation failed, there is a transaction being processed");
739
+ }
740
+ }
741
+ let userOpBundle;
742
+ if (Object.prototype.hasOwnProperty.call(params, "userOpHash") && Object.prototype.hasOwnProperty.call(params, "userOp")) {
743
+ const { userOpHash, userOp } = params;
744
+ if (userOpHash && userOp) {
745
+ userOpBundle = { userOpHash, userOp };
746
+ }
747
+ }
748
+ if (!userOpBundle) {
749
+ const { tx, feeQuote, tokenPaymasterAddress } = params;
750
+ userOpBundle = yield buildUserOp({ tx, feeQuote, tokenPaymasterAddress });
751
+ }
752
+ if (!showConfirmModal) {
753
+ return smartAccount.sendUserOperation(userOpBundle);
754
+ }
755
+ return new Promise((resolve, reject) => {
756
+ eventUtils_default.emit("sendUserOp" /* sendUserOp */, userOpBundle);
757
+ eventUtils_default.once("sendUserOpResult" /* sendUserOpResult */, ({ result, error }) => {
758
+ if (result) {
759
+ resolve(result);
760
+ } else {
761
+ reject(error);
762
+ }
763
+ });
764
+ });
765
+ }),
766
+ [smartAccount, buildUserOp]
767
+ );
768
+ const publicClient = useMemo(() => {
769
+ if (!smartAccount || !chainId) {
770
+ return void 0;
771
+ }
772
+ return (smartAccount == null ? void 0 : smartAccount.provider).publicClient;
773
+ }, [smartAccount, chainId]);
774
+ const provider = useMemo(() => {
775
+ const ethereumProvider = new EthereumProvider(sendUserOp, smartAccount == null ? void 0 : smartAccount.provider, evmAccount);
776
+ return ethereumProvider;
777
+ }, [evmAccount, sendUserOp, smartAccount == null ? void 0 : smartAccount.provider]);
778
+ const walletClient = useMemo(() => {
779
+ return createWalletClient({
780
+ transport: custom(new WalletClientProvider(provider))
781
+ });
782
+ }, [provider]);
783
+ return {
784
+ provider,
785
+ evmAccount,
786
+ account: evmAccount,
787
+ getSmartAccountInfo,
788
+ switchChain,
789
+ chainId,
790
+ getFeeQuotes,
791
+ buildUserOp,
792
+ sendUserOp,
793
+ publicClient,
794
+ walletClient
795
+ };
796
+ };
797
+
798
+ // src/icons/back.svg
799
+ var back_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00MDAtODAgMC00ODBsNDAwLTQwMCA3MSA3MS0zMjkgMzI5IDMyOSAzMjktNzEgNzFaIiBmaWxsPSJ3aGl0ZSIvPjwvc3ZnPg==";
800
+
801
+ // src/icons/close.svg
802
+ var close_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Im0yNTYtMjAwLTU2LTU2IDIyNC0yMjQtMjI0LTIyNCA1Ni01NiAyMjQgMjI0IDIyNC0yMjQgNTYgNTYtMjI0IDIyNCAyMjQgMjI0LTU2IDU2LTIyNC0yMjQtMjI0IDIyNFoiIGZpbGw9IndoaXRlIi8+PC9zdmc+";
803
+
804
+ // src/icons/retry.svg
805
+ var retry_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiPjxwYXRoIGQ9Ik00ODAtMTYwcS0xMzQgMC0yMjctOTN0LTkzLTIyN3EwLTEzNCA5My0yMjd0MjI3LTkzcTY5IDAgMTMyIDI4LjVUNzIwLTY5MHYtMTEwaDgwdjI4MEg1MjB2LTgwaDE2OHEtMzItNTYtODcuNS04OFQ0ODAtNzIwcS0xMDAgMC0xNzAgNzB0LTcwIDE3MHEwIDEwMCA3MCAxNzB0MTcwIDcwcTc3IDAgMTM5LTQ0dDg3LTExNmg4NHEtMjggMTA2LTExNCAxNzN0LTE5NiA2N1oiIGZpbGw9IndoaXRlIi8+PC9zdmc+";
806
+
807
+ // esbuild-scss-modules-plugin:./spinner.module.scss
808
+ var digest = "906d42389ecad5c2ab92642c8e0775ea667c413b069684ce9d01199562f2d0be";
809
+ var classes = { "loader": "_loader_g0am3_1", "rotate": "_rotate_g0am3_1", "prixClipFix": "_prixClipFix_g0am3_1" };
810
+ var css = `._loader_g0am3_1{animation:_rotate_g0am3_1 1s linear infinite;border-radius:50%;height:20px;position:relative;width:20px}._loader_g0am3_1:before{animation:_prixClipFix_g0am3_1 2s linear infinite;border:2px solid #000;border-radius:50%;box-sizing:border-box;content:"";inset:0;position:absolute}@keyframes _rotate_g0am3_1{to{transform:rotate(1turn)}}@keyframes _prixClipFix_g0am3_1{0%{clip-path:polygon(50% 50%,0 0,0 0,0 0,0 0,0 0)}25%{clip-path:polygon(50% 50%,0 0,100% 0,100% 0,100% 0,100% 0)}50%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,100% 100%,100% 100%)}75%{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 100%)}to{clip-path:polygon(50% 50%,0 0,100% 0,100% 100%,0 100%,0 0)}}`;
811
+ (function() {
812
+ if (typeof document !== "undefined" && !document.getElementById(digest)) {
813
+ var ele = document.createElement("style");
814
+ ele.id = digest;
815
+ ele.textContent = css;
816
+ document.head.appendChild(ele);
817
+ }
818
+ })();
819
+ var spinner_module_default = classes;
820
+
821
+ // src/components/spinner/index.tsx
822
+ import { jsx } from "react/jsx-runtime";
823
+ var Spinner = ({ className, style }) => {
824
+ return /* @__PURE__ */ jsx("span", { className: spinner_module_default.loader + (className ? ` ${className}` : ""), style });
825
+ };
826
+ var spinner_default = Spinner;
827
+
828
+ // esbuild-scss-modules-plugin:./button.module.scss
829
+ var digest2 = "424d614dbc2763d7cad7ca35c00bd255c6ed55da308a1f3018594201a47127bf";
830
+ var classes2 = { "btn": "_btn_ofd87_1" };
831
+ var css2 = `._btn_ofd87_1{align-items:center;background:#fff;border-radius:8px;color:#000;display:flex;flex-direction:row;font-size:16px;gap:16px;justify-content:center;padding:6px 24px;position:relative}._btn_ofd87_1:hover{opacity:.85}._btn_ofd87_1:disabled{background:hsla(0,0%,100%,.2);color:hsla(0,0%,100%,.639);cursor:not-allowed;opacity:1}`;
832
+ (function() {
833
+ if (typeof document !== "undefined" && !document.getElementById(digest2)) {
834
+ var ele = document.createElement("style");
835
+ ele.id = digest2;
836
+ ele.textContent = css2;
837
+ document.head.appendChild(ele);
838
+ }
839
+ })();
840
+ var button_module_default = classes2;
841
+
842
+ // src/components/button/index.tsx
843
+ import { jsx as jsx2, jsxs } from "react/jsx-runtime";
844
+ var Button = ({
845
+ children,
846
+ isLoading,
847
+ isDisabled,
848
+ onClick,
849
+ className,
850
+ style
851
+ }) => {
852
+ return /* @__PURE__ */ jsxs(
853
+ "button",
854
+ {
855
+ className: button_module_default.btn + (className ? ` ${className}` : ""),
856
+ onClick: isLoading || isDisabled ? void 0 : onClick,
857
+ disabled: isDisabled,
858
+ style,
859
+ children: [
860
+ isLoading && !isDisabled && /* @__PURE__ */ jsx2(spinner_default, {}),
861
+ children
862
+ ]
863
+ }
864
+ );
865
+ };
866
+ var button_default = Button;
867
+
868
+ // src/components/modal/index.tsx
869
+ import { useEffect as useEffect2, useMemo as useMemo2, useState as useState2 } from "react";
870
+ import { createPortal } from "react-dom";
871
+ import { RemoveScroll } from "react-remove-scroll";
872
+
873
+ // esbuild-scss-modules-plugin:./modal.module.scss
874
+ var digest3 = "65eada90924218eba4e72a5f00291c3cb69387ecce1351e454cdefd066d4bcff";
875
+ var classes3 = { "container": "_container_smzpm_1", "modal": "_modal_smzpm_18" };
876
+ var css3 = `._container_smzpm_1{align-items:center;backdrop-filter:blur(12px);background:rgba(0,0,0,.502);bottom:0;color:#fff;display:flex;height:100%;justify-content:center;left:0;overflow:hidden;position:fixed;right:0;top:0;width:100%;z-index:100000}._container_smzpm_1 ._modal_smzpm_18{align-items:center;background-color:#171a1f;border-radius:16px;display:flex;flex-direction:column;font-size:14px;height:auto;margin:16px;max-height:80%;max-width:100%;overflow:auto;padding:24px;position:relative;width:380px}`;
877
+ (function() {
878
+ if (typeof document !== "undefined" && !document.getElementById(digest3)) {
879
+ var ele = document.createElement("style");
880
+ ele.id = digest3;
881
+ ele.textContent = css3;
882
+ document.head.appendChild(ele);
883
+ }
884
+ })();
885
+ var modal_module_default = classes3;
886
+
887
+ // src/components/modal/index.tsx
888
+ import { Fragment, jsx as jsx3 } from "react/jsx-runtime";
889
+ var stopPropagation = (event) => event.stopPropagation();
890
+ var Modal = ({ open, onClose, children, isDismissable = true, contentStyle, contentClassName }) => {
891
+ const handleBackdropClick = useMemo2(() => isDismissable ? onClose : void 0, [onClose, isDismissable]);
892
+ useEffect2(() => {
893
+ if (isDismissable) {
894
+ const handleEscape = (event) => open && event.key === "Escape" && onClose();
895
+ document.addEventListener("keydown", handleEscape);
896
+ return () => document.removeEventListener("keydown", handleEscape);
897
+ }
898
+ }, [open, onClose, isDismissable]);
899
+ const [bodyScrollable, setBodyScrollable] = useState2(true);
900
+ useEffect2(() => {
901
+ setBodyScrollable(getComputedStyle(window.document.body).overflow !== "hidden");
902
+ }, []);
903
+ return /* @__PURE__ */ jsx3(Fragment, { children: open ? createPortal(
904
+ /* @__PURE__ */ jsx3(RemoveScroll, { enabled: bodyScrollable, children: /* @__PURE__ */ jsx3("div", { className: modal_module_default.container, onClick: handleBackdropClick, children: /* @__PURE__ */ jsx3(
905
+ "div",
906
+ {
907
+ className: modal_module_default.modal + (contentClassName ? ` ${contentClassName}` : ""),
908
+ style: contentStyle,
909
+ onClick: stopPropagation,
910
+ children
911
+ }
912
+ ) }) }),
913
+ document.body
914
+ ) : null });
915
+ };
916
+ var modal_default = Modal;
917
+
918
+ // esbuild-scss-modules-plugin:./connect.module.scss
919
+ var digest4 = "c7bbc091f1227154742a5bd0d55a3df29eb913eb0ad4cafc7ab236b574002f65";
920
+ var classes4 = { "connectModal": "_connectModal_1kqtj_1", "title": "_title_1kqtj_4", "closeBtn": "_closeBtn_1kqtj_9", "backBtn": "_backBtn_1kqtj_15", "walletItem": "_walletItem_1kqtj_21", "walletIcon": "_walletIcon_1kqtj_33", "walletName": "_walletName_1kqtj_38", "connecting": "_connecting_1kqtj_43", "connectingIconContainer": "_connectingIconContainer_1kqtj_51", "retryContainer": "_retryContainer_1kqtj_54", "retryIcon": "_retryIcon_1kqtj_63", "connectingIcon": "_connectingIcon_1kqtj_51", "connection": "_connection_1kqtj_72", "acceptRequest": "_acceptRequest_1kqtj_76", "btnDownload": "_btnDownload_1kqtj_83" };
921
+ var css4 = `._connectModal_1kqtj_1{gap:12px}._connectModal_1kqtj_1 ._title_1kqtj_4{font-size:18px;font-weight:700;margin-bottom:4px}._connectModal_1kqtj_1 ._closeBtn_1kqtj_9{cursor:pointer;position:absolute;right:16px;top:16px}._connectModal_1kqtj_1 ._backBtn_1kqtj_15{cursor:pointer;left:16px;position:absolute;top:16px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21{border:1px solid #3a3a3a;border-radius:8px;box-sizing:border-box;cursor:pointer;display:flex;padding:8px;width:100%}._connectModal_1kqtj_1 ._walletItem_1kqtj_21:hover{background:hsla(0,0%,100%,.05)}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletIcon_1kqtj_33{border-radius:4px;height:42px;width:42px}._connectModal_1kqtj_1 ._walletItem_1kqtj_21 ._walletName_1kqtj_38{flex-grow:1;line-height:42px;text-align:center}._connectModal_1kqtj_1 ._connecting_1kqtj_43{align-items:center;display:flex;flex-direction:column;height:204px;justify-content:center;width:100%}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51{position:relative}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54{background:#4b5563;border-radius:50%;bottom:-12px;cursor:pointer;padding:4px;position:absolute;right:-12px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIconContainer_1kqtj_51 ._retryContainer_1kqtj_54 ._retryIcon_1kqtj_63{height:24px;width:24px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connectingIcon_1kqtj_51{border-radius:4px;height:60px;width:60px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._connection_1kqtj_72{font-size:18px;margin-top:20px}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._acceptRequest_1kqtj_76{color:hsla(0,0%,100%,.4);font-size:14px;margin-top:6px;text-align:center;white-space:pre-wrap}._connectModal_1kqtj_1 ._connecting_1kqtj_43 ._btnDownload_1kqtj_83{margin-top:20px}`;
922
+ (function() {
923
+ if (typeof document !== "undefined" && !document.getElementById(digest4)) {
924
+ var ele = document.createElement("style");
925
+ ele.id = digest4;
926
+ ele.textContent = css4;
927
+ document.head.appendChild(ele);
928
+ }
929
+ })();
930
+ var connect_module_default = classes4;
931
+
932
+ // src/components/connectModal/index.tsx
933
+ import { Fragment as Fragment2, jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
934
+ var ConnectModal = ({ open, onClose }) => {
935
+ const [backVisible, setBackVisible] = useState3(false);
936
+ const [retryVisible, setRetryVisible] = useState3(false);
937
+ const [walletReady, setWalletReady] = useState3(true);
938
+ const [selectConnector, setSelectConnector] = useState3();
939
+ const { closeConnectModal } = useConnectProvider();
940
+ const { connect, connectors } = useConnector();
941
+ useEffect3(() => {
942
+ if (!open) {
943
+ setBackVisible(false);
944
+ setRetryVisible(false);
945
+ setWalletReady(true);
946
+ setSelectConnector(void 0);
947
+ }
948
+ }, [open]);
949
+ const onConnect = (connector) => __async(void 0, null, function* () {
950
+ setBackVisible(true);
951
+ setSelectConnector(connector);
952
+ if (connector.isReady()) {
953
+ try {
954
+ yield connect(connector.metadata.id);
955
+ closeConnectModal();
956
+ } catch (error) {
957
+ if (error.code === 4001) {
958
+ setRetryVisible(true);
959
+ }
960
+ }
961
+ } else {
962
+ setWalletReady(false);
963
+ }
964
+ });
965
+ const onBack = () => {
966
+ setBackVisible(false);
967
+ setRetryVisible(false);
968
+ setWalletReady(true);
969
+ setSelectConnector(void 0);
970
+ };
971
+ const onRetry = () => {
972
+ setRetryVisible(false);
973
+ if (selectConnector) {
974
+ onConnect(selectConnector);
975
+ }
976
+ };
977
+ return /* @__PURE__ */ jsxs2(modal_default, { open, onClose, isDismissable: false, contentClassName: connect_module_default.connectModal, children: [
978
+ /* @__PURE__ */ jsx4("div", { className: connect_module_default.title, children: (selectConnector == null ? void 0 : selectConnector.metadata.name) || "Choose Wallet" }),
979
+ /* @__PURE__ */ jsx4("img", { className: connect_module_default.closeBtn, src: close_default, onClick: onClose }),
980
+ backVisible && /* @__PURE__ */ jsx4("img", { className: connect_module_default.backBtn, src: back_default, onClick: onBack }),
981
+ !backVisible && connectors.map((connector) => {
982
+ return /* @__PURE__ */ jsxs2("div", { className: connect_module_default.walletItem, onClick: () => onConnect(connector), children: [
983
+ /* @__PURE__ */ jsx4("img", { className: connect_module_default.walletIcon, src: connector.metadata.icon }),
984
+ /* @__PURE__ */ jsx4("div", { className: connect_module_default.walletName, children: connector.metadata.name })
985
+ ] }, connector.metadata.id);
986
+ }),
987
+ backVisible && selectConnector && /* @__PURE__ */ jsxs2("div", { className: connect_module_default.connecting, children: [
988
+ /* @__PURE__ */ jsxs2("div", { className: connect_module_default.connectingIconContainer, children: [
989
+ /* @__PURE__ */ jsx4("img", { className: connect_module_default.connectingIcon, src: selectConnector.metadata.icon }),
990
+ retryVisible && /* @__PURE__ */ jsx4("div", { className: connect_module_default.retryContainer, onClick: onRetry, children: /* @__PURE__ */ jsx4("img", { className: connect_module_default.retryIcon, src: retry_default }) })
991
+ ] }),
992
+ walletReady ? /* @__PURE__ */ jsxs2(Fragment2, { children: [
993
+ /* @__PURE__ */ jsx4("div", { className: connect_module_default.connection, children: retryVisible ? "Request Cancelled" : "Requesting Connection" }),
994
+ /* @__PURE__ */ jsx4("div", { className: connect_module_default.acceptRequest, children: retryVisible ? "You cancelled the request.\nClick above to try again." : "Accept the request through your wallet to connect to this app." })
995
+ ] }) : /* @__PURE__ */ jsxs2(Fragment2, { children: [
996
+ /* @__PURE__ */ jsx4("div", { className: connect_module_default.connection, children: "Wallet Not Installed." }),
997
+ /* @__PURE__ */ jsx4(
998
+ button_default,
999
+ {
1000
+ className: connect_module_default.btnDownload,
1001
+ onClick: () => {
1002
+ window.open(selectConnector == null ? void 0 : selectConnector.metadata.downloadUrl, "_blank");
1003
+ },
1004
+ children: "Get"
1005
+ }
1006
+ )
1007
+ ] })
1008
+ ] })
1009
+ ] });
1010
+ };
1011
+ var connectModal_default = ConnectModal;
1012
+
1013
+ // src/components/signModal/index.tsx
1014
+ import { chains as chains2 } from "@particle-network/chains";
1015
+ import { useCallback as useCallback5, useEffect as useEffect4, useMemo as useMemo4, useState as useState5 } from "react";
1016
+ import { formatEther, hexToString } from "viem";
1017
+
1018
+ // src/icons/check_box.svg
1019
+ var check_box_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiNhODU1ZjciPgogICAgPHBhdGgKICAgICAgICBkPSJtNDI0LTMxMiAyODItMjgyLTU2LTU2LTIyNiAyMjYtMTE0LTExNC01NiA1NiAxNzAgMTcwWk0yMDAtMTIwcS0zMyAwLTU2LjUtMjMuNVQxMjAtMjAwdi01NjBxMC0zMyAyMy41LTU2LjVUMjAwLTg0MGg1NjBxMzMgMCA1Ni41IDIzLjVUODQwLTc2MHY1NjBxMCAzMy0yMy41IDU2LjVUNzYwLTEyMEgyMDBabTAtODBoNTYwdi01NjBIMjAwdjU2MFptMC01NjB2NTYwLTU2MFoiIC8+Cjwvc3ZnPg==";
1020
+
1021
+ // src/icons/check_box_blank.svg
1022
+ var check_box_blank_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiM2YjcyODAiPgogICAgPHBhdGgKICAgICAgICBkPSJNMjAwLTEyMHEtMzMgMC01Ni41LTIzLjVUMTIwLTIwMHYtNTYwcTAtMzMgMjMuNS01Ni41VDIwMC04NDBoNTYwcTMzIDAgNTYuNSAyMy41VDg0MC03NjB2NTYwcTAgMzMtMjMuNSA1Ni41VDc2MC0xMjBIMjAwWm0wLTgwaDU2MHYtNTYwSDIwMHY1NjBaIiAvPgo8L3N2Zz4=";
1023
+
1024
+ // src/icons/copy.svg
1025
+ var copy_default = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiB3aWR0aD0iMjQiIGZpbGw9IiNmZmYiPgogICAgPHBhdGgKICAgICAgICBkPSJNMzYwLTI0MHEtMzMgMC01Ni41LTIzLjVUMjgwLTMyMHYtNDgwcTAtMzMgMjMuNS01Ni41VDM2MC04ODBoMzYwcTMzIDAgNTYuNSAyMy41VDgwMC04MDB2NDgwcTAgMzMtMjMuNSA1Ni41VDcyMC0yNDBIMzYwWm0wLTgwaDM2MHYtNDgwSDM2MHY0ODBaTTIwMC04MHEtMzMgMC01Ni41LTIzLjVUMTIwLTE2MHYtNTYwaDgwdjU2MGg0NDB2ODBIMjAwWm0xNjAtMjQwdi00ODAgNDgwWiIgLz4KPC9zdmc+";
1026
+
1027
+ // src/utils/index.ts
1028
+ function shortString(str) {
1029
+ if (Array.isArray(str)) {
1030
+ str = "[" + str.toString() + "]";
1031
+ }
1032
+ if (str) {
1033
+ if (typeof str.toString === "function") {
1034
+ str = str.toString();
1035
+ }
1036
+ if (str.length <= 10) {
1037
+ return str;
1038
+ }
1039
+ return `${str.slice(0, 5)}...${str.slice(str.length - 5, str.length)}`;
1040
+ }
1041
+ return "";
1042
+ }
1043
+ function copyToClipboard(text) {
1044
+ return __async(this, null, function* () {
1045
+ const clipboardCopy = () => __async(this, null, function* () {
1046
+ if (navigator.clipboard) {
1047
+ return navigator.clipboard.writeText(text);
1048
+ } else {
1049
+ const textarea = document.createElement("textarea");
1050
+ textarea.value = text;
1051
+ textarea.setAttribute("readonly", "");
1052
+ textarea.style.position = "absolute";
1053
+ textarea.style.left = "-9999px";
1054
+ document.body.appendChild(textarea);
1055
+ textarea.select();
1056
+ const result = document.execCommand("copy");
1057
+ document.body.removeChild(textarea);
1058
+ if (!result) {
1059
+ throw new Error("Copy to clipboard failed");
1060
+ }
1061
+ }
1062
+ });
1063
+ return new Promise((resolve, reject) => {
1064
+ clipboardCopy().then(resolve).catch(reject);
1065
+ });
1066
+ });
1067
+ }
1068
+ var defaultTokenIcon = "https://static.particle.network/token-list/defaultToken/default.png";
1069
+ var ipfsToSrc = (ipfs) => {
1070
+ if (!ipfs || !ipfs.startsWith("ipfs://")) {
1071
+ return ipfs || "";
1072
+ }
1073
+ return `https://ipfs.particle.network/${encodeURI(ipfs.slice(7))}`;
1074
+ };
1075
+ var checkBTCVersion = (accountContracts, accountContractKey, version) => {
1076
+ if (!accountContracts[accountContractKey]) {
1077
+ return false;
1078
+ }
1079
+ return accountContracts[accountContractKey].some((item) => item.version === version);
1080
+ };
1081
+
1082
+ // src/utils/ethereumUtils.ts
1083
+ import { bytesToHex, publicToAddress, toBytes, toChecksumAddress, toRpcSig } from "@ethereumjs/util";
1084
+ import bitcore from "bitcore-lib";
1085
+ var pubKeyToEVMAddress = (pubKey) => {
1086
+ const address = toChecksumAddress(bytesToHex(publicToAddress(toBytes(`0x${pubKey}`), true)));
1087
+ return address;
1088
+ };
1089
+ var convertSignature = (signature) => {
1090
+ const sig = bitcore.crypto.Signature.fromCompact(Buffer.from(signature, "base64"));
1091
+ const v = BigInt(sig.i + 27);
1092
+ const evmSig = toRpcSig(v, sig.r.toBuffer(), sig.s.toBuffer());
1093
+ return evmSig;
1094
+ };
1095
+ function caculateNativeFee(userOp) {
1096
+ return (BigInt(userOp.callGasLimit) + BigInt(userOp.verificationGasLimit) + BigInt(userOp.preVerificationGas)) * BigInt(userOp.maxFeePerGas);
1097
+ }
1098
+ var getBTCAAAddress = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
1099
+ var _a;
1100
+ const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
1101
+ const owner = addresses[0];
1102
+ const localKey = `particle_${name}_${version}_${owner}`;
1103
+ if (typeof window !== "undefined" && localStorage) {
1104
+ const localAA = localStorage.getItem(localKey);
1105
+ if (localAA) {
1106
+ return localAA;
1107
+ }
1108
+ }
1109
+ const btcPublicKey = yield smartAccount.provider.getPublicKey();
1110
+ const accountInfo = yield smartAccount.sendRpc({
1111
+ method: "particle_aa_getBTCAccount",
1112
+ params: [
1113
+ {
1114
+ name,
1115
+ version,
1116
+ btcPublicKey,
1117
+ btcAddress
1118
+ }
1119
+ ]
1120
+ });
1121
+ const address = (_a = accountInfo == null ? void 0 : accountInfo[0]) == null ? void 0 : _a.smartAccountAddress;
1122
+ if (typeof window !== "undefined" && localStorage && address) {
1123
+ localStorage.setItem(localKey, address);
1124
+ }
1125
+ return address;
1126
+ });
1127
+ var getBTCAccountInfo = (smartAccount, btcAddress, name, version) => __async(void 0, null, function* () {
1128
+ const btcPublicKey = yield smartAccount.provider.getPublicKey();
1129
+ const [accountInfo] = yield smartAccount.sendRpc({
1130
+ method: "particle_aa_getBTCAccount",
1131
+ params: [
1132
+ {
1133
+ name,
1134
+ version,
1135
+ btcPublicKey,
1136
+ btcAddress
1137
+ }
1138
+ ]
1139
+ });
1140
+ const address = accountInfo.smartAccountAddress;
1141
+ const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
1142
+ const owner = addresses[0];
1143
+ const localKey = `particle_${name}_${version}_${owner}`;
1144
+ if (typeof window !== "undefined" && localStorage && address) {
1145
+ localStorage.setItem(localKey, address);
1146
+ }
1147
+ return accountInfo;
1148
+ });
1149
+
1150
+ // src/components/copyText/index.tsx
1151
+ import { useState as useState4 } from "react";
1152
+
1153
+ // esbuild-scss-modules-plugin:./copyText.module.scss
1154
+ var digest5 = "d6fbb5df7ed6ec51d41f665ca768306181bb1e7d7c1cef8eed9bd4230368d7bb";
1155
+ var classes5 = { "copyText": "_copyText_smolu_1", "copied": "_copied_smolu_9" };
1156
+ var css5 = `._copyText_smolu_1{cursor:pointer;text-decoration-line:underline}._copyText_smolu_1:hover{opacity:.75}._copied_smolu_9{color:#a855f7;cursor:none;text-decoration-line:none}._copied_smolu_9:hover{opacity:1}`;
1157
+ (function() {
1158
+ if (typeof document !== "undefined" && !document.getElementById(digest5)) {
1159
+ var ele = document.createElement("style");
1160
+ ele.id = digest5;
1161
+ ele.textContent = css5;
1162
+ document.head.appendChild(ele);
1163
+ }
1164
+ })();
1165
+ var copyText_module_default = classes5;
1166
+
1167
+ // src/components/copyText/index.tsx
1168
+ import { jsx as jsx5 } from "react/jsx-runtime";
1169
+ function CopyText({ children, value, className, style }) {
1170
+ const [copied, setCopied] = useState4();
1171
+ const handleClick = () => __async(this, null, function* () {
1172
+ if (copied) {
1173
+ return;
1174
+ }
1175
+ try {
1176
+ if (value) {
1177
+ yield copyToClipboard(value);
1178
+ } else if (typeof children === "string" || typeof children === "number" || typeof children === "boolean") {
1179
+ yield copyToClipboard(children.toString());
1180
+ } else {
1181
+ throw new Error("please set copy value");
1182
+ }
1183
+ setCopied(true);
1184
+ setTimeout(() => setCopied(false), 1e3);
1185
+ } catch (error) {
1186
+ }
1187
+ });
1188
+ return /* @__PURE__ */ jsx5(
1189
+ "div",
1190
+ {
1191
+ className: copyText_module_default.copyText + (className ? ` ${className}` : "") + (copied ? ` ${copyText_module_default.copied}` : ""),
1192
+ onClick: handleClick,
1193
+ style,
1194
+ children: copied ? "Copied" : children
1195
+ }
1196
+ );
1197
+ }
1198
+
1199
+ // src/components/transactionDetails/index.tsx
1200
+ import { chains } from "@particle-network/chains";
1201
+ import { useCallback as useCallback4, useMemo as useMemo3 } from "react";
1202
+ import { formatUnits } from "viem";
1203
+
1204
+ // src/icons/unverified.svg
1205
+ var unverified_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB0PSIxNzA5Mjg0MDMwNzM5IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDExNTIgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICBwLWlkPSIxMzY3NSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij4KICAgIDxwYXRoCiAgICAgICAgZD0iTTExMjguNjQgODA2LjI3Mkw2NzYuMTYgNzIuMzJjLTU1LjE2OC05Ni4zMi0xNDUuMTUyLTk2LjMyLTIwMC4yNTYgMEwyMy4yMzIgODA2LjRDLTMxLjgwOCA5MDIuNTkyIDE0LjU5MiA5NzkuMiAxMjQuOCA5NzkuMmg5MDUuMjE2YzEwNy4zOTIgMCAxNTMuNzkyLTc5LjM2IDk4LjYyNC0xNzIuOTI4eiIKICAgICAgICBmaWxsPSIjZWFiMzA4IiBwLWlkPSIxMzY3NiI+PC9wYXRoPgogICAgPHBhdGgKICAgICAgICBkPSJNNTc0LjQ2NCA2OTUuODA4YzMyIDAgNjAuOTkyIDI4LjM1MiA2MC45OTIgNTkuNTIgMCAzMS4xNjgtMjYuMTEyIDU5LjUyLTYwLjk5MiA1OS41MmE2MC41NDQgNjAuNTQ0IDAgMCAxLTYwLjgtNTkuNTJjMC0zMS4yMzIgMjguOTI4LTU5LjUyIDYwLjgtNTkuNTJ6IG0yLjg4LTQ0NC45OTJjMjMuMjk2IDAgNDMuNTg0IDE5Ljg0IDQzLjU4NCA0Mi40OTZ2Mjk3LjZjMCAyMi42NTYtMjAuMjg4IDQyLjQ5Ni00My41MiA0Mi40OTZhNDQuMTYgNDQuMTYgMCAwIDEtNDMuNTItNDIuNDk2di0yOTcuNmMwLTIyLjY1NiAyMC4yODgtNDIuNDk2IDQzLjUyLTQyLjQ5NnoiCiAgICAgICAgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMTM2NzciPjwvcGF0aD4KPC9zdmc+";
1206
+
1207
+ // src/icons/verified.svg
1208
+ var verified_default = "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB0PSIxNzA5MjgzOTE4NzM0IiBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgICBwLWlkPSIxMjI3OCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij4KICAgIDxwYXRoIGQ9Ik01MTIgNTEybS01MTIgMGE1MTIgNTEyIDAgMSAwIDEwMjQgMCA1MTIgNTEyIDAgMSAwLTEwMjQgMFoiIGZpbGw9IiM0YWRlODAiIHAtaWQ9IjEyMjc5Ij48L3BhdGg+CiAgICA8cGF0aAogICAgICAgIGQ9Ik00NjkuMzc2IDYyMC4xNkwyOTMuNjMyIDQ2OC40OEE1Ny42IDU3LjYgMCAxIDAgMjE4LjM2OCA1NTUuNTJsMjE5LjcxMiAxODkuNzZhNjAuOCA2MC44IDAgMCAwIDg1Ljc2LTYuMjcybDIuNDk2LTMuMTM2IDI4Ny42MTYtMzgxLjI0OGE1Ny42IDU3LjYgMCAwIDAtOTEuOTA0LTY5LjM3Nkw0NjkuMzc2IDYyMC4xNnoiCiAgICAgICAgZmlsbD0iI0ZGRkZGRiIgcC1pZD0iMTIyODAiPjwvcGF0aD4KPC9zdmc+";
1209
+
1210
+ // esbuild-scss-modules-plugin:./tooltip.module.scss
1211
+ var digest6 = "ee15dc27fcfd209601159e7f0e0063ff4e7a886b7b892c1600a911372b82a0b1";
1212
+ var classes6 = { "tipContainer": "_tipContainer_ufud7_1", "tipContent": "_tipContent_ufud7_5" };
1213
+ var css6 = `._tipContainer_ufud7_1{overflow:visible;position:relative}._tipContainer_ufud7_1 ._tipContent_ufud7_5{background:#3f3f46;border-radius:8px;bottom:100%;color:#fff;font-size:11px;left:-100%;opacity:0;padding:3px 6px;position:absolute;transition:opacity .5s;visibility:hidden;white-space:nowrap;z-index:1}._tipContainer_ufud7_1:hover ._tipContent_ufud7_5{opacity:1;visibility:visible}`;
1214
+ (function() {
1215
+ if (typeof document !== "undefined" && !document.getElementById(digest6)) {
1216
+ var ele = document.createElement("style");
1217
+ ele.id = digest6;
1218
+ ele.textContent = css6;
1219
+ document.head.appendChild(ele);
1220
+ }
1221
+ })();
1222
+ var tooltip_module_default = classes6;
1223
+
1224
+ // src/components/tooltip/index.tsx
1225
+ import { jsx as jsx6, jsxs as jsxs3 } from "react/jsx-runtime";
1226
+ var Tooltip = ({ children, content, className }) => {
1227
+ return /* @__PURE__ */ jsxs3("div", { className: tooltip_module_default.tipContainer, children: [
1228
+ children,
1229
+ /* @__PURE__ */ jsx6("div", { className: tooltip_module_default.tipContent + (className ? ` ${className}` : ""), children: content })
1230
+ ] });
1231
+ };
1232
+ var tooltip_default = Tooltip;
1233
+
1234
+ // esbuild-scss-modules-plugin:./transactionDetails.module.scss
1235
+ var digest7 = "a81c744751497ed4b401c08b9e5aeef1991aeb86f2cbba3ee57c1926c0502f1a";
1236
+ var classes7 = { "detailsCard": "_detailsCard_ml2p9_1", "title": "_title_ml2p9_13", "nftContract": "_nftContract_ml2p9_19", "row": "_row_ml2p9_26", "tokenIcon": "_tokenIcon_ml2p9_35", "nftIcon": "_nftIcon_ml2p9_41", "balanceChange": "_balanceChange_ml2p9_49", "tokenSymbol": "_tokenSymbol_ml2p9_56", "toContract": "_toContract_ml2p9_61", "right": "_right_ml2p9_71" };
1237
+ var css7 = `._detailsCard_ml2p9_1{background:#232529;border:1px solid #252525;border-radius:8px;color:#fff;margin-top:16px;overflow-x:hidden;padding:10px;position:relative;width:100%}._detailsCard_ml2p9_1 ._title_ml2p9_13{font-size:16px;font-weight:600;margin-bottom:12px;text-align:left}._detailsCard_ml2p9_1 ._nftContract_ml2p9_19{color:#a855f7;font-size:16px;position:absolute;right:8px;top:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26{align-items:center;display:flex;flex-direction:row;font-size:14px;gap:8px;justify-content:space-between;margin-top:6px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenIcon_ml2p9_35{border-radius:50%;height:32px;margin:10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._nftIcon_ml2p9_41{border-radius:2px;display:inline;height:32px;margin:10px 8px 10px 0;width:32px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._balanceChange_ml2p9_49{flex-grow:2;font-size:16px;font-weight:500;text-align:end;word-break:break-word}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._tokenSymbol_ml2p9_56{font-size:16px;font-weight:500;text-align:end}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61{align-items:center;display:flex;gap:8px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._toContract_ml2p9_61 img{display:inline;height:18px;width:18px}._detailsCard_ml2p9_1 ._row_ml2p9_26 ._right_ml2p9_71{text-align:end}`;
1238
+ (function() {
1239
+ if (typeof document !== "undefined" && !document.getElementById(digest7)) {
1240
+ var ele = document.createElement("style");
1241
+ ele.id = digest7;
1242
+ ele.textContent = css7;
1243
+ document.head.appendChild(ele);
1244
+ }
1245
+ })();
1246
+ var transactionDetails_module_default = classes7;
1247
+
1248
+ // src/components/transactionDetails/index.tsx
1249
+ import { jsx as jsx7, jsxs as jsxs4 } from "react/jsx-runtime";
1250
+ var TransactionDetails = ({ details }) => {
1251
+ const { chainId } = useETHProvider();
1252
+ const chainInfo = useMemo3(() => {
1253
+ if (chainId) {
1254
+ return chains.getEVMChainInfoById(chainId);
1255
+ }
1256
+ }, [chainId]);
1257
+ const titleContent = useMemo3(() => {
1258
+ var _a;
1259
+ switch (details.type) {
1260
+ case "native_transfer" /* NATIVE_TRANSFER */:
1261
+ return `Send ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}`;
1262
+ case "erc20_transfer" /* ERC20_TRANSFER */:
1263
+ return `Send ${(_a = details.estimatedChanges.tokens[0]) == null ? void 0 : _a.symbol}`;
1264
+ case "erc20_approve" /* ERC20_APPROVE */:
1265
+ return "Approve Spending";
1266
+ case "erc721_transfer" /* ERC721_TRANFER */:
1267
+ return "Send NFT";
1268
+ case "erc1155_transfer" /* ERC1155_TRANFER */:
1269
+ return "Send NFT";
1270
+ default:
1271
+ return "Transaction Details";
1272
+ }
1273
+ }, [details, chainInfo]);
1274
+ const nftContractType = useMemo3(() => {
1275
+ if (details.type === "erc721_transfer" /* ERC721_TRANFER */) {
1276
+ return "ERC721";
1277
+ } else if (details.type === "erc1155_transfer" /* ERC1155_TRANFER */) {
1278
+ return "ERC1155";
1279
+ }
1280
+ }, [details]);
1281
+ const nativeIcon = useMemo3(() => {
1282
+ if (chainInfo) {
1283
+ if (chainInfo.nativeCurrency.symbol === "ETH") {
1284
+ return "https://static.particle.network/token-list/ethereum/native.png";
1285
+ } else {
1286
+ return chainInfo.nativeIcon || chainInfo.icon;
1287
+ }
1288
+ }
1289
+ return defaultTokenIcon;
1290
+ }, [chainInfo]);
1291
+ const to = useMemo3(() => {
1292
+ var _a, _b;
1293
+ const params = (_b = (_a = details.data) == null ? void 0 : _a.function) == null ? void 0 : _b.params;
1294
+ if (details.type == "erc20_transfer" /* ERC20_TRANSFER */) {
1295
+ return params ? params[params.length === 3 ? 1 : 0].value : "";
1296
+ } else if (details.type == "erc20_approve" /* ERC20_APPROVE */) {
1297
+ return params ? params[0].value : "";
1298
+ } else if (details.type == "native_transfer" /* NATIVE_TRANSFER */) {
1299
+ return details.data.to;
1300
+ } else if (details.type == "erc721_transfer" /* ERC721_TRANFER */ || details.type == "erc1155_transfer" /* ERC1155_TRANFER */) {
1301
+ return params ? params[1].value : "";
1302
+ } else {
1303
+ return details.data.to;
1304
+ }
1305
+ }, [details]);
1306
+ const balanceChangeTextColor = useCallback4((value) => {
1307
+ if (BigInt(value) > 0) {
1308
+ return "#4ade80";
1309
+ } else if (BigInt(value) < 0) {
1310
+ return "#ef4444";
1311
+ } else {
1312
+ return "white";
1313
+ }
1314
+ }, []);
1315
+ const functionContent = useMemo3(() => {
1316
+ if (details.type !== "native_transfer" /* NATIVE_TRANSFER */ && details.data.function) {
1317
+ const params = details.data.function.params.map((item) => item.name);
1318
+ return `${details.data.function.name}(${params.join(", ")})`;
1319
+ }
1320
+ }, [details]);
1321
+ const approveTokenAmount = useMemo3(() => {
1322
+ var _a, _b, _c, _d;
1323
+ if (details.type === "erc20_approve" /* ERC20_APPROVE */) {
1324
+ const amount = (_d = (_c = (_b = (_a = details.data) == null ? void 0 : _a.function) == null ? void 0 : _b.params) == null ? void 0 : _c[1]) == null ? void 0 : _d.value;
1325
+ return BigInt(amount || 0);
1326
+ }
1327
+ return BigInt(0);
1328
+ }, [details]);
1329
+ const tokenAmountChange = useCallback4(
1330
+ (tokenItem) => {
1331
+ const result = formatUnits(
1332
+ details.type === "erc20_approve" /* ERC20_APPROVE */ ? approveTokenAmount : BigInt(tokenItem.amountChange),
1333
+ tokenItem.decimals
1334
+ );
1335
+ if (details.type !== "erc20_approve" /* ERC20_APPROVE */ && BigInt(tokenItem.amountChange) > BigInt(0)) {
1336
+ return `+${result}`;
1337
+ }
1338
+ return result;
1339
+ },
1340
+ [approveTokenAmount, details]
1341
+ );
1342
+ const showContactAddress = useMemo3(() => {
1343
+ return details.type === "erc20_transfer" /* ERC20_TRANSFER */ || details.type === "erc20_approve" /* ERC20_APPROVE */ || details.type === "erc721_transfer" /* ERC721_TRANFER */ || details.type === "erc1155_transfer" /* ERC1155_TRANFER */;
1344
+ }, [details]);
1345
+ return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.detailsCard, children: [
1346
+ /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.title, children: titleContent }),
1347
+ nftContractType && /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.nftContract, children: nftContractType }),
1348
+ details.estimatedChanges.natives.map((nativeItem) => {
1349
+ return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1350
+ /* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.tokenIcon, src: nativeIcon }),
1351
+ /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.balanceChange, style: { color: balanceChangeTextColor(nativeItem.nativeChange) }, children: [
1352
+ BigInt(nativeItem.nativeChange) > 0 ? "+" : void 0,
1353
+ formatUnits(BigInt(nativeItem.nativeChange), (chainInfo == null ? void 0 : chainInfo.nativeCurrency.decimals) || 18)
1354
+ ] }),
1355
+ /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.tokenSymbol, children: chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol })
1356
+ ] }, nativeItem.address);
1357
+ }),
1358
+ details.estimatedChanges.tokens.map((tokenItem) => {
1359
+ return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1360
+ /* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.tokenIcon, src: tokenItem.image || defaultTokenIcon }),
1361
+ /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.balanceChange, children: [
1362
+ /* @__PURE__ */ jsx7("span", { style: { color: balanceChangeTextColor(tokenItem.amountChange) }, children: tokenAmountChange(tokenItem) }),
1363
+ ` ${tokenItem.symbol}`
1364
+ ] })
1365
+ ] }, tokenItem.address);
1366
+ }),
1367
+ details.estimatedChanges.nfts.map((nftItem) => {
1368
+ return /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1369
+ /* @__PURE__ */ jsxs4("div", { style: { fontSize: 16 }, children: [
1370
+ /* @__PURE__ */ jsx7("img", { className: transactionDetails_module_default.nftIcon, src: ipfsToSrc(nftItem.image || defaultTokenIcon) }),
1371
+ nftItem.name || `NFT#${nftItem.tokenId}`
1372
+ ] }),
1373
+ /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.balanceChange, style: { color: balanceChangeTextColor(nftItem.amountChange) }, children: nftItem.amountChange })
1374
+ ] }, nftItem.address);
1375
+ }),
1376
+ to && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1377
+ /* @__PURE__ */ jsx7("div", { children: "To" }),
1378
+ /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.toContract, children: [
1379
+ details.toVerified != null && !showContactAddress && /* @__PURE__ */ jsx7(tooltip_default, { content: details.toVerified ? "Verified Contract" : "Unverified Contract", children: /* @__PURE__ */ jsx7("img", { src: details.toVerified ? verified_default : unverified_default }) }),
1380
+ /* @__PURE__ */ jsx7(CopyText, { value: to, children: shortString(to) })
1381
+ ] })
1382
+ ] }),
1383
+ showContactAddress && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1384
+ /* @__PURE__ */ jsx7("div", { children: "Contract" }),
1385
+ /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.toContract, children: [
1386
+ details.toVerified != null && /* @__PURE__ */ jsx7(tooltip_default, { content: details.toVerified ? "Verified Contract" : "Unverified Contract", children: /* @__PURE__ */ jsx7("img", { src: details.toVerified ? verified_default : unverified_default }) }),
1387
+ /* @__PURE__ */ jsx7(CopyText, { value: details.data.to, children: shortString(details.data.to) })
1388
+ ] })
1389
+ ] }),
1390
+ /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1391
+ /* @__PURE__ */ jsx7("div", { children: "Hex Data" }),
1392
+ /* @__PURE__ */ jsx7(CopyText, { value: details.data.data, children: shortString(details.data.data) })
1393
+ ] }),
1394
+ functionContent && /* @__PURE__ */ jsxs4("div", { className: transactionDetails_module_default.row, children: [
1395
+ /* @__PURE__ */ jsx7("div", { children: "Function" }),
1396
+ /* @__PURE__ */ jsx7("div", { className: transactionDetails_module_default.right, children: functionContent })
1397
+ ] })
1398
+ ] });
1399
+ };
1400
+ var transactionDetails_default = TransactionDetails;
1401
+
1402
+ // esbuild-scss-modules-plugin:./sign.module.scss
1403
+ var digest8 = "3ab1a455562ae7e24c2ac49572897e615b9e9275066fd0d64f0cf24844521bab";
1404
+ var classes8 = { "modalContent": "_modalContent_aoysu_1", "closeBtn": "_closeBtn_aoysu_5", "signTitle": "_signTitle_aoysu_11", "chainInfo": "_chainInfo_aoysu_16", "addressContainer": "_addressContainer_aoysu_29", "addressInfo": "_addressInfo_aoysu_34", "detailsContent": "_detailsContent_aoysu_49", "fill": "_fill_aoysu_58", "unsignedMessage": "_unsignedMessage_aoysu_61", "estimatedGas": "_estimatedGas_aoysu_76", "signBtn": "_signBtn_aoysu_81", "notRemind": "_notRemind_aoysu_85" };
1405
+ var css8 = `._modalContent_aoysu_1{color:#fff;text-align:center}._modalContent_aoysu_1 ._closeBtn_aoysu_5{cursor:pointer;position:absolute;right:16px;top:16px}._modalContent_aoysu_1 ._signTitle_aoysu_11{font-size:20px;font-weight:600;margin-bottom:10px}._modalContent_aoysu_1 ._chainInfo_aoysu_16{align-items:center;display:flex;flex-direction:row;font-size:12px;gap:8px;justify-content:center;margin-bottom:8px}._modalContent_aoysu_1 ._chainInfo_aoysu_16 img{height:18px;width:18px}._modalContent_aoysu_1 ._addressContainer_aoysu_29{height:28px;margin-bottom:16px;margin-top:8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34{align-items:center;background:rgba(58,58,58,.635);border-radius:20px;display:flex;flex-direction:row;font-size:12px;gap:4px;justify-content:center;padding:4px 8px}._modalContent_aoysu_1 ._addressContainer_aoysu_29 ._addressInfo_aoysu_34 img{height:18px;width:18px}._modalContent_aoysu_1 ._detailsContent_aoysu_49{max-height:0;overflow-y:auto;transition:max-height .3s linear;width:100%}._modalContent_aoysu_1 ._detailsContent_aoysu_49::-webkit-scrollbar{display:none}._modalContent_aoysu_1 ._detailsContent_aoysu_49._fill_aoysu_58{max-height:500px}._modalContent_aoysu_1 ._detailsContent_aoysu_49 ._unsignedMessage_aoysu_61{background:#232529;border:1px solid #252525;border-radius:8px;box-sizing:border-box;color:#fff;font-size:14px;padding:8px;width:100%;word-wrap:break-word;color:hsla(0,0%,100%,.631);text-align:left;white-space:pre-wrap}._modalContent_aoysu_1 ._estimatedGas_aoysu_76{color:hsla(0,0%,100%,.631);font-size:12px;margin-top:24px}._modalContent_aoysu_1 ._signBtn_aoysu_81{margin-top:24px;min-width:200px}._modalContent_aoysu_1 ._notRemind_aoysu_85{align-items:center;color:hsla(0,0%,100%,.631);cursor:pointer;display:inline-flex;font-size:12px;gap:4px;margin-top:16px}._modalContent_aoysu_1 ._notRemind_aoysu_85:hover{opacity:.85}`;
1406
+ (function() {
1407
+ if (typeof document !== "undefined" && !document.getElementById(digest8)) {
1408
+ var ele = document.createElement("style");
1409
+ ele.id = digest8;
1410
+ ele.textContent = css8;
1411
+ document.head.appendChild(ele);
1412
+ }
1413
+ })();
1414
+ var sign_module_default = classes8;
1415
+
1416
+ // src/components/signModal/index.tsx
1417
+ import { Fragment as Fragment3, jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
1418
+ var SignModal = ({ open, onClose, onOpen }) => {
1419
+ const [userOpBundle, setUserOpBundle] = useState5();
1420
+ const [notRemindChecked, setNotRemindChecked] = useState5(false);
1421
+ const [loading, setLoading] = useState5(false);
1422
+ const [deserializeLoading, setDeserializeLoading] = useState5(false);
1423
+ const [deserializeResult, setDeserializeResult] = useState5();
1424
+ const [disabled, setDisabled] = useState5(false);
1425
+ const [showNotRemind, setShowNotRemind] = useState5(true);
1426
+ const [nativeBalance, setNativeBalance] = useState5();
1427
+ const { accountContract } = useAccountContract();
1428
+ const [requestArguments, setRequestArguments] = useState5();
1429
+ const { chainId, publicClient, evmAccount, provider } = useETHProvider();
1430
+ const { smartAccount } = useConnectProvider();
1431
+ useEffect4(() => {
1432
+ if (!open) {
1433
+ setDeserializeResult(void 0);
1434
+ setUserOpBundle(void 0);
1435
+ setRequestArguments(void 0);
1436
+ setLoading(false);
1437
+ setDisabled(false);
1438
+ setDeserializeLoading(false);
1439
+ setNativeBalance(void 0);
1440
+ }
1441
+ }, [open]);
1442
+ useEffect4(() => {
1443
+ if (open) {
1444
+ const notRemind = txConfirmUtils_default.isNotRemind();
1445
+ setShowNotRemind(!notRemind);
1446
+ if (!notRemind) {
1447
+ setNotRemindChecked(false);
1448
+ }
1449
+ }
1450
+ }, [open]);
1451
+ const chainInfo = useMemo4(() => {
1452
+ if (chainId) {
1453
+ return chains2.getEVMChainInfoById(chainId);
1454
+ }
1455
+ }, [chainId]);
1456
+ useEffect4(() => {
1457
+ const onSendUserOp = (opBundle) => {
1458
+ setUserOpBundle(opBundle);
1459
+ onOpen();
1460
+ };
1461
+ const onPersonalSign = (arg) => {
1462
+ setRequestArguments(arg);
1463
+ onOpen();
1464
+ };
1465
+ const onSignTypedData = (arg) => {
1466
+ setRequestArguments(arg);
1467
+ onOpen();
1468
+ };
1469
+ eventUtils_default.on("sendUserOp" /* sendUserOp */, onSendUserOp);
1470
+ eventUtils_default.on("personalSign" /* personalSign */, onPersonalSign);
1471
+ eventUtils_default.on("signTypedData" /* signTypedData */, onSignTypedData);
1472
+ return () => {
1473
+ eventUtils_default.off("sendUserOp" /* sendUserOp */, onSendUserOp);
1474
+ eventUtils_default.off("personalSign" /* personalSign */, onPersonalSign);
1475
+ eventUtils_default.off("signTypedData" /* signTypedData */, onSignTypedData);
1476
+ };
1477
+ }, [onOpen, setUserOpBundle]);
1478
+ const deserializeUserOp = useCallback5(() => __async(void 0, null, function* () {
1479
+ if (userOpBundle && smartAccount) {
1480
+ const addresses = yield smartAccount.provider.request({ method: "eth_accounts" });
1481
+ const owner = addresses[0];
1482
+ const result = yield smartAccount.sendRpc({
1483
+ method: "particle_aa_deserializeUserOp",
1484
+ params: [
1485
+ {
1486
+ name: accountContract.name,
1487
+ version: accountContract.version,
1488
+ ownerAddress: owner
1489
+ },
1490
+ userOpBundle.userOp
1491
+ ]
1492
+ });
1493
+ return result;
1494
+ }
1495
+ }), [userOpBundle, smartAccount, accountContract]);
1496
+ useEffect4(() => {
1497
+ if (userOpBundle && open) {
1498
+ setDeserializeLoading(true);
1499
+ deserializeUserOp().then((result) => {
1500
+ setDeserializeResult(result);
1501
+ }).catch((error) => {
1502
+ eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1503
+ error
1504
+ });
1505
+ onClose();
1506
+ });
1507
+ }
1508
+ }, [deserializeUserOp, userOpBundle, open, onClose]);
1509
+ useEffect4(() => {
1510
+ if (open && publicClient && evmAccount && userOpBundle) {
1511
+ publicClient.getBalance({ address: evmAccount }).then((result) => setNativeBalance(result)).catch((error) => {
1512
+ eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1513
+ error
1514
+ });
1515
+ onClose();
1516
+ });
1517
+ }
1518
+ }, [open, publicClient, evmAccount, userOpBundle, onClose]);
1519
+ useEffect4(() => {
1520
+ if (nativeBalance != null && deserializeResult != null) {
1521
+ setDeserializeLoading(false);
1522
+ }
1523
+ }, [nativeBalance, deserializeResult]);
1524
+ const toggleNotRemind = () => {
1525
+ setNotRemindChecked(!notRemindChecked);
1526
+ txConfirmUtils_default.setNotRemind(!notRemindChecked);
1527
+ };
1528
+ const gasFee = useMemo4(() => {
1529
+ if (userOpBundle == null ? void 0 : userOpBundle.userOp) {
1530
+ return caculateNativeFee(userOpBundle == null ? void 0 : userOpBundle.userOp);
1531
+ }
1532
+ return BigInt(0);
1533
+ }, [userOpBundle]);
1534
+ const closeModal = () => {
1535
+ var _a;
1536
+ let event;
1537
+ if (userOpBundle) {
1538
+ event = "sendUserOpResult" /* sendUserOpResult */;
1539
+ } else if ((requestArguments == null ? void 0 : requestArguments.method) === "personal_sign" /* personalSign */) {
1540
+ event = "personalSignResult" /* personalSignResult */;
1541
+ } else if ((_a = requestArguments == null ? void 0 : requestArguments.method) == null ? void 0 : _a.startsWith("eth_signTypedData" /* signTypedData */)) {
1542
+ event = "signTypedDataResult" /* signTypedDataResult */;
1543
+ }
1544
+ if (event) {
1545
+ eventUtils_default.emit(event, {
1546
+ error: {
1547
+ code: 4001,
1548
+ message: "The user rejected the request."
1549
+ }
1550
+ });
1551
+ }
1552
+ onClose();
1553
+ };
1554
+ const confirmTx = useCallback5(() => __async(void 0, null, function* () {
1555
+ if (smartAccount && provider) {
1556
+ setLoading(true);
1557
+ if (userOpBundle) {
1558
+ try {
1559
+ const hash = yield smartAccount.sendUserOperation(userOpBundle);
1560
+ eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, { result: hash });
1561
+ } catch (error) {
1562
+ eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
1563
+ error
1564
+ });
1565
+ } finally {
1566
+ setLoading(false);
1567
+ }
1568
+ } else if (requestArguments) {
1569
+ try {
1570
+ const hash = yield provider.request(requestArguments);
1571
+ eventUtils_default.emit(
1572
+ requestArguments.method == "personal_sign" /* personalSign */ ? "personalSignResult" /* personalSignResult */ : "signTypedDataResult" /* signTypedDataResult */,
1573
+ { result: hash }
1574
+ );
1575
+ } catch (error) {
1576
+ eventUtils_default.emit(
1577
+ requestArguments.method == "personal_sign" /* personalSign */ ? "personalSignResult" /* personalSignResult */ : "signTypedDataResult" /* signTypedDataResult */,
1578
+ {
1579
+ error
1580
+ }
1581
+ );
1582
+ } finally {
1583
+ setLoading(false);
1584
+ }
1585
+ }
1586
+ onClose();
1587
+ }
1588
+ }), [smartAccount, provider, requestArguments, userOpBundle, onClose]);
1589
+ useEffect4(() => {
1590
+ if (userOpBundle && nativeBalance != null && deserializeResult) {
1591
+ const nativeChange = deserializeResult.filter(
1592
+ (item) => {
1593
+ var _a, _b;
1594
+ return ((_b = (_a = item.estimatedChanges.natives) == null ? void 0 : _a[0]) == null ? void 0 : _b.nativeChange) && item.estimatedChanges.natives[0].nativeChange.startsWith("-");
1595
+ }
1596
+ ).map((item) => {
1597
+ var _a, _b, _c, _d;
1598
+ return BigInt(((_d = (_c = (_b = (_a = item.estimatedChanges) == null ? void 0 : _a.natives) == null ? void 0 : _b[0]) == null ? void 0 : _c.nativeChange) == null ? void 0 : _d.replace("-", "")) || 0);
1599
+ }).reduce((accumulator, currentValue) => accumulator + currentValue, BigInt(0));
1600
+ if (userOpBundle.userOp.paymasterAndData.length > 2) {
1601
+ setDisabled(nativeBalance < nativeChange);
1602
+ } else {
1603
+ setDisabled(nativeBalance < gasFee + nativeChange);
1604
+ }
1605
+ }
1606
+ }, [userOpBundle, gasFee, nativeBalance, deserializeResult]);
1607
+ const unsignedMessage = useMemo4(() => {
1608
+ var _a, _b;
1609
+ if (!requestArguments) {
1610
+ return void 0;
1611
+ }
1612
+ if (requestArguments.method === "personal_sign" /* personalSign */) {
1613
+ const message = ((_a = requestArguments.params) == null ? void 0 : _a[0]) || "0x";
1614
+ return hexToString(message);
1615
+ } else {
1616
+ const typedData = (_b = requestArguments.params) == null ? void 0 : _b[1];
1617
+ const obj = typeof typedData === "string" ? JSON.parse(typedData) : typedData;
1618
+ return JSON.stringify(obj, null, 2);
1619
+ }
1620
+ }, [requestArguments]);
1621
+ return /* @__PURE__ */ jsx8(modal_default, { open, onClose, isDismissable: false, contentClassName: sign_module_default.modalContent, children: /* @__PURE__ */ jsxs5(Fragment3, { children: [
1622
+ /* @__PURE__ */ jsx8("img", { className: sign_module_default.closeBtn, src: close_default, onClick: closeModal }),
1623
+ requestArguments && /* @__PURE__ */ jsx8("div", { className: sign_module_default.signTitle, children: requestArguments.method == "personal_sign" /* personalSign */ ? "Sign Message" : "Sign Typed Data" }),
1624
+ /* @__PURE__ */ jsxs5("div", { className: sign_module_default.chainInfo, children: [
1625
+ /* @__PURE__ */ jsx8("img", { src: chainInfo == null ? void 0 : chainInfo.icon }),
1626
+ chainInfo == null ? void 0 : chainInfo.fullname.replace("Mainnet", "")
1627
+ ] }),
1628
+ /* @__PURE__ */ jsx8("div", { className: sign_module_default.addressContainer, children: /* @__PURE__ */ jsx8(CopyText, { value: evmAccount, style: { textDecorationLine: "none" }, children: /* @__PURE__ */ jsxs5("div", { className: sign_module_default.addressInfo, children: [
1629
+ shortString(evmAccount),
1630
+ /* @__PURE__ */ jsx8("img", { src: copy_default })
1631
+ ] }) }) }),
1632
+ /* @__PURE__ */ jsxs5("div", { className: sign_module_default.detailsContent + (deserializeResult || requestArguments ? ` ${sign_module_default.fill}` : ""), children: [
1633
+ deserializeResult && deserializeResult.map((details, index) => /* @__PURE__ */ jsx8(transactionDetails_default, { details }, `${details.type}-${index}`)),
1634
+ unsignedMessage && /* @__PURE__ */ jsx8("div", { className: sign_module_default.unsignedMessage, children: unsignedMessage })
1635
+ ] }),
1636
+ gasFee && /* @__PURE__ */ jsx8("div", { className: sign_module_default.estimatedGas, children: `Estimated gas fee: ${formatEther(gasFee)} ${chainInfo == null ? void 0 : chainInfo.nativeCurrency.symbol}` }),
1637
+ /* @__PURE__ */ jsx8(
1638
+ button_default,
1639
+ {
1640
+ onClick: confirmTx,
1641
+ className: sign_module_default.signBtn,
1642
+ isLoading: loading || deserializeLoading,
1643
+ isDisabled: disabled,
1644
+ children: deserializeLoading ? "LOADING" : disabled ? "INSUFFICIENT FEE" : "CONFIRM"
1645
+ }
1646
+ ),
1647
+ showNotRemind && /* @__PURE__ */ jsxs5("div", { className: sign_module_default.notRemind, onClick: toggleNotRemind, children: [
1648
+ /* @__PURE__ */ jsx8("img", { src: notRemindChecked ? check_box_default : check_box_blank_default }),
1649
+ "Do not remind me again"
1650
+ ] })
1651
+ ] }) });
1652
+ };
1653
+ var signModal_default = SignModal;
1654
+
1655
+ // src/evmSigner/index.ts
1656
+ import { intToHex as intToHex2 } from "@ethereumjs/util";
1657
+ import { chains as chains3 } from "@particle-network/chains";
1658
+ import { EventEmitter as EventEmitter3 } from "events";
1659
+ import {
1660
+ InvalidParamsRpcError,
1661
+ SwitchChainError,
1662
+ UnsupportedProviderMethodError,
1663
+ createPublicClient,
1664
+ hashMessage,
1665
+ hashTypedData,
1666
+ http
1667
+ } from "viem";
1668
+ var AASignerProvider = class {
1669
+ constructor(supportChainIds, projectId, clientKey, rpcUrls) {
1670
+ this.supportChainIds = supportChainIds;
1671
+ this.projectId = projectId;
1672
+ this.clientKey = clientKey;
1673
+ this.rpcUrls = rpcUrls;
1674
+ this.chainId = 1;
1675
+ this.personalSign = (message) => __async(this, null, function* () {
1676
+ throw new Error("Wallet not connected!");
1677
+ });
1678
+ this.getPublicKey = () => __async(this, null, function* () {
1679
+ throw new Error("Wallet not connected!");
1680
+ });
1681
+ this.getPublicClient = () => {
1682
+ var _a, _b;
1683
+ const rpcUrl = ((_a = this == null ? void 0 : this.rpcUrls) == null ? void 0 : _a[this.chainId]) || ((_b = chains3.getEVMChainInfoById(this.chainId || 1)) == null ? void 0 : _b.rpcUrl);
1684
+ return createPublicClient({
1685
+ transport: http(rpcUrl)
1686
+ });
1687
+ };
1688
+ this.events = new EventEmitter3();
1689
+ this.events.setMaxListeners(100);
1690
+ if (typeof window !== "undefined") {
1691
+ const localChainId = localStorage.getItem("connect-evm-chain-id");
1692
+ if (localChainId && supportChainIds.includes(Number(localChainId))) {
1693
+ this.chainId = Number(localChainId);
1694
+ } else {
1695
+ const chainId = supportChainIds[0];
1696
+ if (chainId) {
1697
+ localStorage.setItem("connect-evm-chain-id", chainId.toString());
1698
+ this.chainId = chainId;
1699
+ }
1700
+ }
1701
+ }
1702
+ this.publicClient = this.getPublicClient();
1703
+ }
1704
+ request(arg) {
1705
+ return __async(this, null, function* () {
1706
+ var _a, _b;
1707
+ if (arg.method === "eth_sendTransaction" || arg.method === "wallet_addEthereumChain" || arg.method === "wallet_watchAsset" || arg.method === "eth_sign") {
1708
+ throw new UnsupportedProviderMethodError(new Error("The Provider does not support the requested method."));
1709
+ }
1710
+ if (arg.method === "eth_accounts" || arg.method === "eth_requestAccounts") {
1711
+ const pubKey = yield this.getPublicKey();
1712
+ const address = pubKeyToEVMAddress(pubKey);
1713
+ return [address];
1714
+ } else if (arg.method === "eth_chainId") {
1715
+ return `0x${this.chainId.toString(16)}`;
1716
+ } else if (arg.method === "personal_sign" /* personalSign */) {
1717
+ let message = (_a = arg.params) == null ? void 0 : _a[0];
1718
+ if (message.length !== 66) {
1719
+ const hash = hashMessage({ raw: message });
1720
+ message = hash;
1721
+ }
1722
+ const result = yield this.personalSign(message || "");
1723
+ const convertResult = convertSignature(result);
1724
+ if (!convertResult) {
1725
+ throw new Error("sign error");
1726
+ }
1727
+ return convertResult;
1728
+ } else if (arg.method === "eth_signTypedData" || arg.method === "eth_signTypedData_v4") {
1729
+ const typedData = (_b = arg.params) == null ? void 0 : _b[1];
1730
+ const hash = hashTypedData(typeof typedData === "string" ? JSON.parse(typedData) : typedData);
1731
+ const result = yield this.personalSign(hash || "");
1732
+ const convertResult = convertSignature(result);
1733
+ if (!convertResult) {
1734
+ throw new Error("sign error");
1735
+ }
1736
+ return convertResult;
1737
+ } else if (arg.method === "wallet_switchEthereumChain") {
1738
+ if (arg.params && arg.params instanceof Array && arg.params[0] && arg.params[0].chainId) {
1739
+ const chainId = Number(arg.params[0].chainId);
1740
+ if (this.supportChainIds.includes(this.chainId)) {
1741
+ this.chainId = chainId;
1742
+ localStorage.setItem("connect-evm-chain-id", this.chainId.toString());
1743
+ this.publicClient = this.getPublicClient();
1744
+ setTimeout(() => this.events.emit("chainChanged", intToHex2(this.chainId)), 0);
1745
+ return Promise.resolve(null);
1746
+ }
1747
+ throw new SwitchChainError(new Error(`The chain: ${chainId} is not supported`));
1748
+ } else {
1749
+ throw new InvalidParamsRpcError(new Error("Invalid Params"));
1750
+ }
1751
+ } else {
1752
+ const result = yield this.publicClient.request(arg);
1753
+ return result;
1754
+ }
1755
+ });
1756
+ }
1757
+ removeListener(event, listener) {
1758
+ this.events.removeListener(event, listener);
1759
+ return this;
1760
+ }
1761
+ on(event, listener) {
1762
+ this.events.on(event, listener);
1763
+ return this;
1764
+ }
1765
+ once(event, listener) {
1766
+ this.events.once(event, listener);
1767
+ return this;
1768
+ }
1769
+ off(event, listener) {
1770
+ this.events.off(event, listener);
1771
+ return this;
1772
+ }
1773
+ emit(event, ...args) {
1774
+ this.events.emit(event, args);
1775
+ }
1776
+ };
1777
+
1778
+ // src/hooks/useModalStateValue.ts
1779
+ import { useCallback as useCallback6, useState as useState6 } from "react";
1780
+ var useModalStateValue = () => {
1781
+ const [isModalOpen, setModalOpen] = useState6(false);
1782
+ return {
1783
+ closeModal: useCallback6(() => setModalOpen(false), []),
1784
+ isModalOpen,
1785
+ openModal: useCallback6(() => setModalOpen(true), [])
1786
+ };
1787
+ };
1788
+ var useModalStateValue_default = useModalStateValue;
1789
+
1790
+ // src/context/index.tsx
1791
+ import { jsx as jsx9, jsxs as jsxs6 } from "react/jsx-runtime";
1792
+ var ConnectContext = createContext({});
1793
+ var SAContractKey = "particle-sa-config";
1794
+ var ConnectProvider = ({
1795
+ children,
1796
+ options,
1797
+ connectors,
1798
+ autoConnect = true
1799
+ }) => {
1800
+ var _a, _b, _c;
1801
+ const {
1802
+ closeModal: closeConnectModal,
1803
+ isModalOpen: connectModalOpen,
1804
+ openModal: openConnectModal
1805
+ } = useModalStateValue_default();
1806
+ const { closeModal: closeSignModal, isModalOpen: signModalOpen, openModal: openSignModal } = useModalStateValue_default();
1807
+ const [connectorId, setConnectorId] = useState7();
1808
+ const [accounts, setAccounts] = useState7([]);
1809
+ const [evmAccount, setEVMAccount] = useState7();
1810
+ const [accountContract, _setAccountContract] = useState7({
1811
+ name: ((_a = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _a[0]) || "BTC",
1812
+ version: ((_c = options.aaOptions.accountContracts[((_b = Object.keys(options.aaOptions.accountContracts)) == null ? void 0 : _b[0]) || "BTC"]) == null ? void 0 : _c[0].version) || "1.0.0"
1813
+ });
1814
+ const setAccountContract = useCallback7(
1815
+ (config) => {
1816
+ if (!checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1817
+ throw new Error("Invalid Account Contract");
1818
+ }
1819
+ localStorage.setItem(SAContractKey, JSON.stringify(config));
1820
+ _setAccountContract(config);
1821
+ },
1822
+ [options.aaOptions.accountContracts, _setAccountContract]
1823
+ );
1824
+ useEffect5(() => {
1825
+ const id = localStorage.getItem("current-connector-id");
1826
+ if (autoConnect && id) {
1827
+ setConnectorId(id);
1828
+ }
1829
+ }, [autoConnect]);
1830
+ const evmSupportChainIds = useMemo5(() => {
1831
+ var _a2;
1832
+ let chainIds = (_a2 = options.aaOptions.accountContracts[accountContract.name]) == null ? void 0 : _a2.filter((item) => item.version === accountContract.version).map((item) => item.chainIds).reduce((a, b) => {
1833
+ a.push(...b);
1834
+ return a;
1835
+ }, []);
1836
+ chainIds = Array.from(new Set(chainIds || []));
1837
+ return chainIds;
1838
+ }, [options.aaOptions.accountContracts, accountContract]);
1839
+ const connector = useMemo5(() => {
1840
+ return connectors.find((item) => item.metadata.id === connectorId);
1841
+ }, [connectorId, connectors]);
1842
+ const getPublicKey = useCallback7(() => __async(void 0, null, function* () {
1843
+ if (!connector) {
1844
+ throw new Error("Wallet not connected!");
1845
+ }
1846
+ const pubKey = yield connector.getPublicKey();
1847
+ return pubKey;
1848
+ }), [connector]);
1849
+ const signMessage = useCallback7(
1850
+ (message) => __async(void 0, null, function* () {
1851
+ if (!connector) {
1852
+ throw new Error("Wallet not connected!");
1853
+ }
1854
+ const signature = yield connector.signMessage(message);
1855
+ return signature;
1856
+ }),
1857
+ [connector]
1858
+ );
1859
+ const sendBitcoin = useCallback7(
1860
+ (toAddress, satoshis, options2) => __async(void 0, null, function* () {
1861
+ if (!connector) {
1862
+ throw new Error("Wallet not connected!");
1863
+ }
1864
+ const signature = yield connector.sendBitcoin(toAddress, satoshis, options2);
1865
+ return signature;
1866
+ }),
1867
+ [connector]
1868
+ );
1869
+ const getNetwork = useCallback7(() => __async(void 0, null, function* () {
1870
+ if (!connector) {
1871
+ throw new Error("Wallet not connected!");
1872
+ }
1873
+ const network = yield connector.getNetwork();
1874
+ return network;
1875
+ }), [connector]);
1876
+ const switchNetwork = useCallback7(
1877
+ (network) => __async(void 0, null, function* () {
1878
+ if (!connector) {
1879
+ throw new Error("Wallet not connected!");
1880
+ }
1881
+ yield connector.switchNetwork(network);
1882
+ }),
1883
+ [connector]
1884
+ );
1885
+ const smartAccount = useMemo5(() => {
1886
+ if (typeof window === "undefined") {
1887
+ return void 0;
1888
+ }
1889
+ if (!window.__bitcoinSmartAccount || (window == null ? void 0 : window.__bitcoinSmartAccount) && ((window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.version) !== accountContract.version || (window == null ? void 0 : window.__bitcoinSmartAccount.smartAccountContract.name) !== accountContract.name)) {
1890
+ const smartAccount2 = new SmartAccount(
1891
+ new AASignerProvider(evmSupportChainIds, options.projectId, options.clientKey, options.rpcUrls),
1892
+ options
1893
+ );
1894
+ smartAccount2.setSmartAccountContract(accountContract);
1895
+ window.__bitcoinSmartAccount = smartAccount2;
1896
+ }
1897
+ window.__bitcoinSmartAccount.provider.getPublicKey = getPublicKey;
1898
+ window.__bitcoinSmartAccount.provider.personalSign = signMessage;
1899
+ return window.__bitcoinSmartAccount;
1900
+ }, [options, evmSupportChainIds, getPublicKey, signMessage, accountContract]);
1901
+ useEffect5(() => {
1902
+ if (accounts.length > 0 && smartAccount) {
1903
+ getBTCAAAddress(smartAccount, accounts[0], accountContract.name, accountContract.version).then((res) => {
1904
+ setEVMAccount(res);
1905
+ }).catch((e) => {
1906
+ setEVMAccount(void 0);
1907
+ });
1908
+ } else {
1909
+ setEVMAccount(void 0);
1910
+ }
1911
+ }, [accountContract, accounts, smartAccount]);
1912
+ const getSmartAccountInfo = useCallback7(() => __async(void 0, null, function* () {
1913
+ if (accounts.length > 0 && smartAccount) {
1914
+ const accountInfo = yield getBTCAccountInfo(
1915
+ smartAccount,
1916
+ accounts[0],
1917
+ accountContract.name,
1918
+ accountContract.version
1919
+ );
1920
+ setEVMAccount(accountInfo.smartAccountAddress);
1921
+ return accountInfo;
1922
+ }
1923
+ return void 0;
1924
+ }), [accounts, smartAccount, accountContract, setEVMAccount]);
1925
+ const requestAccount = useCallback7(
1926
+ (connector2) => __async(void 0, null, function* () {
1927
+ let accounts2 = yield connector2.getAccounts();
1928
+ if (accounts2.length === 0 && autoConnect) {
1929
+ accounts2 = yield connector2.requestAccounts();
1930
+ }
1931
+ setAccounts(accounts2);
1932
+ }),
1933
+ [autoConnect]
1934
+ );
1935
+ useEffect5(() => {
1936
+ if (connector) {
1937
+ requestAccount(connector).catch((e) => {
1938
+ setAccounts([]);
1939
+ });
1940
+ } else {
1941
+ setAccounts([]);
1942
+ }
1943
+ }, [connector, requestAccount]);
1944
+ useEffect5(() => {
1945
+ const onAccountChange = (accounts2) => {
1946
+ setAccounts(accounts2);
1947
+ };
1948
+ connector == null ? void 0 : connector.on("accountsChanged", onAccountChange);
1949
+ return () => {
1950
+ connector == null ? void 0 : connector.removeListener("accountsChanged", onAccountChange);
1951
+ };
1952
+ }, [connector]);
1953
+ const provider = useMemo5(() => {
1954
+ var _a2;
1955
+ if (connectorId) {
1956
+ return (_a2 = connectors.find((item) => item.metadata.id === connectorId)) == null ? void 0 : _a2.getProvider();
1957
+ }
1958
+ }, [connectorId, connectors]);
1959
+ const disconnect = useCallback7(() => {
1960
+ localStorage.removeItem("current-connector-id");
1961
+ txConfirmUtils_default.reset();
1962
+ if (connector) {
1963
+ connector.disconnect();
1964
+ }
1965
+ setConnectorId(void 0);
1966
+ }, [connector]);
1967
+ useEffect5(() => {
1968
+ const config = JSON.parse(localStorage.getItem(SAContractKey) || "{}");
1969
+ if (config.name && config.version && checkBTCVersion(options.aaOptions.accountContracts, config.name, config.version)) {
1970
+ _setAccountContract(config);
1971
+ }
1972
+ }, [options.aaOptions.accountContracts, _setAccountContract]);
1973
+ useEffect5(() => {
1974
+ var _a2, _b2;
1975
+ if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
1976
+ const supportChains = evmSupportChainIds.map((id) => chains4.getEVMChainInfoById(id));
1977
+ if (supportChains.some((chain) => !chain)) {
1978
+ throw new Error(`Please config valid chain ids, ${JSON.stringify(evmSupportChainIds)}`);
1979
+ }
1980
+ walletEntryPlugin.init(
1981
+ {
1982
+ projectId: options.projectId,
1983
+ clientKey: options.clientKey,
1984
+ appId: options.appId
1985
+ },
1986
+ __spreadProps(__spreadValues({}, options.walletOptions), {
1987
+ erc4337: accountContract,
1988
+ customStyle: __spreadProps(__spreadValues({}, (_b2 = options.walletOptions) == null ? void 0 : _b2.customStyle), {
1989
+ supportChains
1990
+ })
1991
+ })
1992
+ );
1993
+ }
1994
+ }, [options, evmSupportChainIds, accountContract]);
1995
+ useEffect5(() => {
1996
+ var _a2;
1997
+ if (smartAccount && ((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
1998
+ walletEntryPlugin.setWalletCore({
1999
+ ethereum: smartAccount.provider
2000
+ });
2001
+ }
2002
+ }, [smartAccount, options]);
2003
+ useEffect5(() => {
2004
+ var _a2;
2005
+ if (((_a2 = options.walletOptions) == null ? void 0 : _a2.visible) !== false) {
2006
+ if (evmAccount) {
2007
+ walletEntryPlugin.walletEntryCreate();
2008
+ } else {
2009
+ walletEntryPlugin.walletEntryDestroy();
2010
+ }
2011
+ }
2012
+ }, [evmAccount, smartAccount, options]);
2013
+ useEffect5(() => {
2014
+ if (accounts.length === 0) {
2015
+ closeConnectModal();
2016
+ closeSignModal();
2017
+ if (eventUtils_default.listenerCount("sendUserOpResult" /* sendUserOpResult */) > 0) {
2018
+ eventUtils_default.emit("sendUserOpResult" /* sendUserOpResult */, {
2019
+ error: {
2020
+ code: -32600,
2021
+ message: "Wallet disconnected"
2022
+ }
2023
+ });
2024
+ } else if (eventUtils_default.listenerCount("personalSignResult" /* personalSignResult */) > 0) {
2025
+ eventUtils_default.emit("personalSignResult" /* personalSignResult */, {
2026
+ error: {
2027
+ code: -32600,
2028
+ message: "Wallet disconnected"
2029
+ }
2030
+ });
2031
+ } else if (eventUtils_default.listenerCount("signTypedDataResult" /* signTypedDataResult */) > 0) {
2032
+ eventUtils_default.emit("signTypedDataResult" /* signTypedDataResult */, {
2033
+ error: {
2034
+ code: -32600,
2035
+ message: "Wallet disconnected"
2036
+ }
2037
+ });
2038
+ }
2039
+ }
2040
+ }, [accounts, closeConnectModal, closeSignModal]);
2041
+ return /* @__PURE__ */ jsxs6(
2042
+ ConnectContext.Provider,
2043
+ {
2044
+ value: {
2045
+ connectorId,
2046
+ setConnectorId,
2047
+ connector,
2048
+ connectors,
2049
+ openConnectModal,
2050
+ closeConnectModal,
2051
+ accounts,
2052
+ provider,
2053
+ disconnect,
2054
+ getPublicKey,
2055
+ signMessage,
2056
+ evmAccount,
2057
+ smartAccount,
2058
+ getNetwork,
2059
+ switchNetwork,
2060
+ sendBitcoin,
2061
+ accountContract,
2062
+ setAccountContract,
2063
+ getSmartAccountInfo
2064
+ },
2065
+ children: [
2066
+ children,
2067
+ /* @__PURE__ */ jsx9(connectModal_default, { open: connectModalOpen, onClose: closeConnectModal }),
2068
+ /* @__PURE__ */ jsx9(signModal_default, { open: signModalOpen, onClose: closeSignModal, onOpen: openSignModal })
2069
+ ]
2070
+ }
2071
+ );
2072
+ };
2073
+ var useConnectProvider = () => {
2074
+ const context = useContext(ConnectContext);
2075
+ return context;
2076
+ };
2077
+
2078
+ // src/components/btcWalletSelectorContext.tsx
2079
+ import React, { useContext as useContext2, useEffect as useEffect6, useMemo as useMemo6, useRef, useState as useState8 } from "react";
2080
+
2081
+ // src/components/confirmBox/Modal.tsx
2082
+ import { jsx as jsx10, jsxs as jsxs7 } from "react/jsx-runtime";
2083
+ function Modal2({ children, onClose, style = {} }) {
2084
+ return /* @__PURE__ */ jsxs7("div", { children: [
2085
+ /* @__PURE__ */ jsx10("div", { className: "layer" }),
2086
+ /* @__PURE__ */ jsxs7("div", { className: "modal", style, children: [
2087
+ /* @__PURE__ */ jsx10("div", { className: "close", onClick: () => {
2088
+ onClose && onClose();
2089
+ }, children: /* @__PURE__ */ jsx10("svg", { width: "12", height: "12", viewBox: "0 0 12 12", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx10("path", { d: "M7.73284 5.99997L11.7359 1.99698C12.0368 1.69598 12.0882 1.25928 11.8507 1.02188L10.9779 0.149088C10.7404 -0.0884114 10.3043 -0.0363117 10.0028 0.264487L6.00013 4.26737L1.99719 0.264587C1.69619 -0.0367116 1.25948 -0.0884115 1.02198 0.149388L0.149174 1.02228C-0.0882276 1.25938 -0.0368271 1.69608 0.264576 1.99708L4.26761 5.99997L0.264576 10.0032C-0.0363271 10.304 -0.0884276 10.7404 0.149174 10.9779L1.02198 11.8507C1.25948 12.0882 1.69619 12.0367 1.99719 11.7358L6.00033 7.73266L10.0029 11.7352C10.3044 12.0368 10.7405 12.0882 10.978 11.8507L11.8508 10.9779C12.0882 10.7404 12.0368 10.304 11.736 10.0028L7.73284 5.99997Z", fill: "#808095" }) }) }),
2090
+ children
2091
+ ] })
2092
+ ] });
2093
+ }
2094
+
2095
+ // src/components/confirmBox/index.tsx
2096
+ import { Fragment as Fragment4, jsx as jsx11, jsxs as jsxs8 } from "react/jsx-runtime";
2097
+ function ComfirmBox({ onClose, status = 1, fromChain = {
2098
+ name: "NEAR"
2099
+ }, toChain = {
2100
+ name: "BTC"
2101
+ }, hash }) {
2102
+ return /* @__PURE__ */ jsxs8(Modal2, { onClose, children: [
2103
+ /* @__PURE__ */ jsx11("div", { className: "title", children: "Transaction Detail" }),
2104
+ /* @__PURE__ */ jsx11("div", { className: "chians", children: status === 0 ? /* @__PURE__ */ jsx11("svg", { className: "loading", width: "54", height: "54", viewBox: "0 0 54 54", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx11("path", { d: "M52.0766 10.7867C53.0482 11.0471 53.6273 12.0399 53.3741 13.0134C53.1219 13.977 52.1361 14.5546 51.1725 14.3024L47.6172 13.3498L46.3268 18.1657C44.8261 23.7665 40.0219 27.6146 34.2721 28.6546C38.7381 32.4056 40.9681 38.1648 39.4673 43.7656L38.1769 48.5815L41.6972 49.5248C42.6655 49.7843 43.2401 50.7794 42.9806 51.7477C42.7212 52.7159 41.726 53.2905 40.7578 53.031L2.02593 42.6529L1.71657 42.5396C0.800668 42.1375 0.383843 41.0689 0.785965 40.153C1.15472 39.3126 2.09436 38.8809 2.97262 39.1481L6.52126 40.0989L7.81144 35.2839C9.31216 29.6832 14.1131 25.8341 19.8661 24.795C15.3968 21.0432 13.1702 15.2848 14.6709 9.68407L15.9615 4.86764L12.4128 3.91679C11.4445 3.65734 10.87 2.66223 11.1295 1.69395C11.3889 0.725662 12.384 0.151138 13.3523 0.410589L52.0766 10.7867ZM44.0959 12.4063L19.471 5.80801L18.1871 10.5994C17.0693 14.7711 18.671 19.3131 22.2022 22.3268C23.2549 23.2994 23.6544 24.61 23.3544 25.7297C23.0485 27.0126 21.9665 27.9627 20.6551 28.1007C16.1146 28.9516 12.432 32.0776 11.3175 36.2502L10.0214 41.0874L11.982 41.6127L12.5291 39.571C13.5385 35.8039 16.032 32.0464 21.0065 30.689L21.8135 30.4937C23.6047 30.2306 25.3145 29.1151 26.9388 27.1507C27.1931 29.441 28.1726 31.2771 29.8857 32.6567C34.4351 36.8 34.1706 41.1245 33.1094 45.0849L32.5623 47.1267L34.6428 47.6841L35.9323 42.8715C37.0501 38.6998 35.4522 34.1588 31.9215 31.1412C30.8693 30.1687 30.4684 28.8613 30.7693 27.7383C31.1136 26.4535 32.114 25.5215 33.4676 25.3711C38.0072 24.5235 41.6865 21.3966 42.8052 17.2216L44.0959 12.4063ZM40.7578 15.6185C40.1797 19.9295 35.6431 22.9023 32.7256 23.2863C30.9809 23.5169 29.1741 24.3456 27.3087 25.7742C26.4809 23.6244 25.3731 22.0143 23.9948 20.9474C21.5041 19.0198 20.6551 17.2216 20.3797 15.1185L40.7578 15.6185Z", fill: "white", "fill-opacity": "0.21" }) }) : /* @__PURE__ */ jsxs8("svg", { width: "54", height: "54", viewBox: "0 0 54 54", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [
2105
+ /* @__PURE__ */ jsx11("circle", { cx: "27", cy: "27", r: "21", fill: "#33FFDA" }),
2106
+ /* @__PURE__ */ jsx11("circle", { cx: "27", cy: "27", r: "24", stroke: "#33FFDA", "stroke-opacity": "0.3", "stroke-width": "6" }),
2107
+ /* @__PURE__ */ jsx11("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M37.342 19.6604C38.2111 20.5494 38.2205 22.0006 37.363 22.9016L24.8987 36L17.651 28.5196C16.7858 27.6266 16.7826 26.1754 17.6439 25.2783C18.5052 24.3813 19.9048 24.378 20.77 25.271L24.8705 29.5031L34.2159 19.6822C35.0733 18.7812 36.4729 18.7714 37.342 19.6604Z", fill: "black" })
2108
+ ] }) }),
2109
+ status === 0 && /* @__PURE__ */ jsxs8(Fragment4, { children: [
2110
+ /* @__PURE__ */ jsx11("div", { className: "time", children: "Est Time: 5 mins" }),
2111
+ /* @__PURE__ */ jsx11("div", { className: "processing", children: "Transaction is processing." })
2112
+ ] }),
2113
+ status === 1 && /* @__PURE__ */ jsxs8(Fragment4, { children: [
2114
+ /* @__PURE__ */ jsx11("div", { className: "time", children: "Bridge Completed" }),
2115
+ /* @__PURE__ */ jsxs8("div", { className: "processing", children: [
2116
+ "You can view your transaction on the ",
2117
+ /* @__PURE__ */ jsx11("a", { href: "/history", children: "bridge transaction history." })
2118
+ ] })
2119
+ ] }),
2120
+ !!hash && /* @__PURE__ */ jsx11(Fragment4, { children: /* @__PURE__ */ jsxs8("div", { className: "srcBtn", onClick: () => {
2121
+ if (fromChain.name === "BTC") {
2122
+ window.open(`https://mempool.space/testnet/tx/${hash}`);
2123
+ } else if (fromChain.name === "NEAR") {
2124
+ window.open(`https://testnet.nearblocks.io/txns/${hash}`);
2125
+ }
2126
+ }, children: [
2127
+ "SRC TX ",
2128
+ /* @__PURE__ */ jsx11("svg", { width: "8", height: "8", viewBox: "0 0 8 8", fill: "none", xmlns: "http://www.w3.org/2000/svg", children: /* @__PURE__ */ jsx11("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M5.97871 8H2.02129C0.907217 8 0 7.09294 0 5.97905V2.02095C0 0.907063 0.907217 0 2.02129 0H3.73973C3.98175 0 4.17779 0.196012 4.17779 0.437986C4.17779 0.679959 3.98175 0.875972 3.73973 0.875972H2.02129C1.71573 0.875972 1.42775 0.994931 1.21142 1.21122C0.995099 1.42751 0.87612 1.71544 0.87612 2.02095V5.97769C0.87612 6.2832 0.995099 6.57114 1.21142 6.78743C1.42775 7.00372 1.71573 7.12268 2.02129 7.12268H5.97871C6.61011 7.12268 7.12388 6.60899 7.12388 5.97769V4.12977C7.12388 3.97432 7.20771 3.82832 7.34291 3.74992C7.40916 3.71206 7.48487 3.69179 7.56194 3.69179C7.63901 3.69179 7.71472 3.71206 7.78097 3.74992C7.91617 3.82832 8 3.97296 8 4.12977V5.97769C8 7.09294 7.09414 8 5.97871 8ZM7.35223 2.78066C7.41578 2.81715 7.48879 2.83608 7.56179 2.83608C7.6348 2.83608 7.70781 2.8158 7.77271 2.7793C7.90251 2.70496 7.98228 2.56572 7.98228 2.41702V0.438001C7.98228 0.206844 7.79434 0.0189453 7.56315 0.0189453H5.58378C5.35258 0.0189453 5.16465 0.206844 5.16465 0.438001C5.16465 0.669157 5.35258 0.857056 5.58378 0.857056H6.55077L3.70328 3.70405L3.70058 3.70676C3.62658 3.7861 3.58634 3.89111 3.58835 3.99958C3.59037 4.10806 3.6345 4.21149 3.7114 4.28803C3.79117 4.36779 3.89527 4.41105 4.00749 4.41105C4.1143 4.41105 4.2157 4.37049 4.29277 4.29885L4.29412 4.2975L7.14267 1.44944V2.41838C7.14267 2.56707 7.22379 2.70631 7.35223 2.78066Z", fill: "#FF7A00" }) })
2129
+ ] }) })
2130
+ ] });
2131
+ }
2132
+
2133
+ // src/components/btcWalletSelectorContext.tsx
2134
+ import { jsx as jsx12, jsxs as jsxs9 } from "react/jsx-runtime";
2135
+ var WalletSelectorContext = React.createContext(null);
2136
+ function BtcWalletSelectorContextProvider({ children }) {
2137
+ const [isProcessing, setIsProcessing] = useState8(false);
2138
+ const walletSelectorContextValue = useMemo6(() => {
2139
+ return {
2140
+ setIsProcessing
2141
+ };
2142
+ }, []);
2143
+ return /* @__PURE__ */ jsx12(WalletSelectorContext.Provider, { value: walletSelectorContextValue, children: /* @__PURE__ */ jsxs9(
2144
+ ConnectProvider,
2145
+ {
2146
+ options: {
2147
+ projectId: "btc",
2148
+ clientKey: "btc",
2149
+ appId: "btc",
2150
+ aaOptions: {
2151
+ accountContracts: {
2152
+ BTC: [
2153
+ {
2154
+ chainIds: [686868],
2155
+ version: "1.0.0"
2156
+ }
2157
+ ]
2158
+ }
2159
+ },
2160
+ walletOptions: {
2161
+ visible: true
2162
+ }
2163
+ },
2164
+ autoConnect: true,
2165
+ connectors: [new UnisatConnector()],
2166
+ children: [
2167
+ children,
2168
+ isProcessing && /* @__PURE__ */ jsx12(ComfirmBox, { hash: "", status: 0, onClose: () => {
2169
+ setIsProcessing(false);
2170
+ } })
2171
+ ]
2172
+ }
2173
+ ) });
2174
+ }
2175
+ function useBtcWalletSelector() {
2176
+ const { openConnectModal, openConnectModalAsync, disconnect } = useConnectModal();
2177
+ const { accounts, sendBitcoin, getPublicKey, provider, signMessage } = useBTCProvider();
2178
+ const publicKey = useRef(null);
2179
+ const signMessageFn = useRef(null);
2180
+ const [updater, setUpdater] = useState8(1);
2181
+ const context = useContext2(WalletSelectorContext);
2182
+ useEffect6(() => {
2183
+ if (provider) {
2184
+ getPublicKey().then((res) => {
2185
+ publicKey.current = res;
2186
+ });
2187
+ }
2188
+ }, [provider, updater]);
2189
+ useEffect6(() => {
2190
+ signMessageFn.current = signMessage;
2191
+ }, [signMessage]);
2192
+ return {
2193
+ login: () => __async(this, null, function* () {
2194
+ setUpdater(updater + 1);
2195
+ if (openConnectModal) {
2196
+ yield openConnectModal();
2197
+ }
2198
+ return null;
2199
+ }),
2200
+ logout: () => {
2201
+ disconnect && disconnect();
2202
+ },
2203
+ account: accounts && accounts.length ? accounts[0] : null,
2204
+ getPublicKey: () => __async(this, null, function* () {
2205
+ let times = 0;
2206
+ while (!publicKey.current) {
2207
+ yield sleep(1e3);
2208
+ if (times++ > 10) {
2209
+ return null;
2210
+ }
2211
+ }
2212
+ return publicKey.current;
2213
+ }),
2214
+ signMessage: (msg) => {
2215
+ return signMessageFn.current(msg);
2216
+ },
2217
+ getContext: () => {
2218
+ return context;
2219
+ }
2220
+ };
2221
+ }
2222
+ function sleep(time) {
2223
+ return new Promise(function(resolve) {
2224
+ setTimeout(resolve, time);
2225
+ });
2226
+ }
2227
+
2228
+ // src/utils/setupBTCWallet.ts
2229
+ import { providers, transactions } from "near-api-js";
2230
+ import { actionCreators } from "@near-js/transactions";
2231
+ import { PublicKey } from "near-api-js/lib/utils/key_pair";
2232
+ import { encodeTransaction } from "near-api-js/lib/transaction";
2233
+ import { baseDecode } from "@near-js/utils";
2234
+ import bs58 from "bs58";
2235
+ import { sha256 } from "js-sha256";
2236
+
2237
+ // src/utils/initWalletButton.ts
2238
+ function setupWalletButton(network, wallet, originalWallet) {
2239
+ if (document.getElementById("satoshi-wallet-button"))
2240
+ return;
2241
+ const iframe = createIframe({
2242
+ iframeUrl: network === "testnet" ? "https://wallet-dev.satoshibridge.top" : "https://wallet.satoshibridge.top",
2243
+ iframeStyle: { width: "400px", height: "650px" }
2244
+ });
2245
+ const button = createFloatingButtonWithIframe({
2246
+ openImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn.png",
2247
+ closeImageUrl: "https://assets.deltatrade.ai/wallet-assets/wallet-btn-active.png",
2248
+ iframe
2249
+ });
2250
+ setupButtonClickHandler(button, iframe, wallet, originalWallet);
2251
+ }
2252
+ function createFloatingButtonWithIframe({
2253
+ openImageUrl,
2254
+ closeImageUrl,
2255
+ iframe
2256
+ }) {
2257
+ const button = document.createElement("img");
2258
+ button.id = "satoshi-wallet-button";
2259
+ button.src = openImageUrl;
2260
+ Object.assign(button.style, {
2261
+ position: "fixed",
2262
+ bottom: "20px",
2263
+ right: "20px",
2264
+ zIndex: "100000",
2265
+ width: "60px",
2266
+ height: "60px",
2267
+ borderRadius: "50%",
2268
+ cursor: "pointer",
2269
+ transition: "transform 0.15s ease"
2270
+ });
2271
+ document.body.appendChild(button);
2272
+ const iframeVisible = localStorage.getItem("iframeVisible") === "true" || localStorage.getItem("iframeVisible") === null;
2273
+ button.src = iframeVisible ? closeImageUrl : openImageUrl;
2274
+ iframe.style.display = iframeVisible ? "block" : "none";
2275
+ button.onclick = function() {
2276
+ const isCurrentlyVisible = iframe.style.display === "block";
2277
+ button.style.transform = "scale(0.8)";
2278
+ setTimeout(() => {
2279
+ button.style.transform = "scale(1)";
2280
+ }, 150);
2281
+ iframe.style.display = isCurrentlyVisible ? "none" : "block";
2282
+ button.src = isCurrentlyVisible ? openImageUrl : closeImageUrl;
2283
+ localStorage.setItem("iframeVisible", String(!isCurrentlyVisible));
2284
+ };
2285
+ return button;
2286
+ }
2287
+ function createIframe({
2288
+ iframeUrl,
2289
+ iframeStyle = {}
2290
+ }) {
2291
+ const iframe = document.createElement("iframe");
2292
+ iframe.id = "satoshi-wallet-iframe";
2293
+ iframe.src = iframeUrl;
2294
+ Object.assign(iframe.style, __spreadValues({
2295
+ position: "fixed",
2296
+ bottom: "90px",
2297
+ right: "20px",
2298
+ zIndex: "100000",
2299
+ boxShadow: "0 0 10px rgba(0, 0, 0, 0.1)",
2300
+ borderRadius: "10px",
2301
+ display: "block"
2302
+ }, iframeStyle));
2303
+ document.body.appendChild(iframe);
2304
+ return iframe;
2305
+ }
2306
+ function setupButtonClickHandler(button, iframe, wallet, originalWallet) {
2307
+ return __async(this, null, function* () {
2308
+ var _a;
2309
+ const accountId = (_a = yield wallet == null ? void 0 : wallet.getAccounts()) == null ? void 0 : _a[0].accountId;
2310
+ const originalAccountId = originalWallet.account;
2311
+ const originalPublicKey = yield originalWallet.getPublicKey();
2312
+ const iframeSrc = new URL(iframe.src);
2313
+ iframeSrc.searchParams.set("origin", window.location.origin);
2314
+ if (accountId)
2315
+ iframeSrc.searchParams.set("accountId", accountId);
2316
+ if (originalAccountId)
2317
+ iframeSrc.searchParams.set("originalAccountId", originalAccountId);
2318
+ if (originalPublicKey)
2319
+ iframeSrc.searchParams.set("originalPublicKey", originalPublicKey);
2320
+ iframe.src = iframeSrc.toString();
2321
+ window.addEventListener("message", (event) => __async(this, null, function* () {
2322
+ var _a2, _b;
2323
+ if (event.origin !== iframeSrc.origin)
2324
+ return;
2325
+ const { action, requestId, params } = event.data;
2326
+ if (action === "signAndSendTransaction") {
2327
+ try {
2328
+ const result = yield wallet.signAndSendTransaction(params);
2329
+ (_a2 = event.source) == null ? void 0 : _a2.postMessage(
2330
+ {
2331
+ requestId,
2332
+ result,
2333
+ success: true
2334
+ },
2335
+ { targetOrigin: event.origin }
2336
+ );
2337
+ } catch (error) {
2338
+ (_b = event.source) == null ? void 0 : _b.postMessage(
2339
+ {
2340
+ requestId,
2341
+ error: error.message,
2342
+ success: false
2343
+ },
2344
+ { targetOrigin: event.origin }
2345
+ );
2346
+ }
2347
+ }
2348
+ }));
2349
+ });
2350
+ }
2351
+ function removeWalletButton() {
2352
+ const button = document.getElementById("satoshi-wallet-button");
2353
+ button == null ? void 0 : button.remove();
2354
+ const iframe = document.getElementById("satoshi-wallet-iframe");
2355
+ iframe == null ? void 0 : iframe.remove();
2356
+ }
2357
+
2358
+ // src/utils/setupBTCWallet.ts
2359
+ var { signedDelegate, transfer, functionCall } = actionCreators;
2360
+ var base_url = "https://api.dev.satoshibridge.top/v1";
2361
+ var token = "nbtc1-nsp.testnet";
2362
+ var contractId = "dev1-nsp.testnet";
2363
+ var state = {
2364
+ saveAccount(account) {
2365
+ window.localStorage.setItem("btc-wallet-account", account);
2366
+ },
2367
+ removeAccount() {
2368
+ window.localStorage.removeItem("btc-wallet-account");
2369
+ },
2370
+ savePublicKey(publicKey) {
2371
+ window.localStorage.setItem("btc-wallet-publickey", publicKey);
2372
+ },
2373
+ removePublicKey() {
2374
+ window.localStorage.removeItem("btc-wallet-publickey");
2375
+ },
2376
+ saveBtcPublicKey(publicKey) {
2377
+ window.localStorage.setItem("btc-wallet-btc-publickey", publicKey);
2378
+ },
2379
+ removeBtcPublicKey() {
2380
+ window.localStorage.removeItem("btc-wallet-btc-publickey");
2381
+ },
2382
+ clear() {
2383
+ this.removeAccount();
2384
+ this.removePublicKey();
2385
+ this.removeBtcPublicKey();
2386
+ },
2387
+ save(account, publicKey) {
2388
+ this.saveAccount(account);
2389
+ this.savePublicKey(publicKey);
2390
+ },
2391
+ getAccount() {
2392
+ return window.localStorage.getItem("btc-wallet-account");
2393
+ },
2394
+ getPublicKey() {
2395
+ return window.localStorage.getItem("btc-wallet-publickey");
2396
+ },
2397
+ getBtcPublicKey() {
2398
+ return window.localStorage.getItem("btc-wallet-btc-publickey");
2399
+ }
2400
+ };
2401
+ var BTCWallet = (_0) => __async(void 0, [_0], function* ({
2402
+ metadata,
2403
+ options,
2404
+ store,
2405
+ emitter,
2406
+ logger,
2407
+ id,
2408
+ provider
2409
+ }) {
2410
+ const wallet = {
2411
+ signIn,
2412
+ signOut,
2413
+ getAccounts,
2414
+ verifyOwner,
2415
+ signMessage,
2416
+ signAndSendTransaction,
2417
+ signAndSendTransactions
2418
+ };
2419
+ function viewMethod(_02) {
2420
+ return __async(this, arguments, function* ({ method, args = {} }) {
2421
+ const res = yield provider.query({
2422
+ request_type: "call_function",
2423
+ account_id: contractId,
2424
+ method_name: method,
2425
+ args_base64: Buffer.from(JSON.stringify(args)).toString("base64"),
2426
+ finality: "optimistic"
2427
+ });
2428
+ return JSON.parse(Buffer.from(res.result).toString());
2429
+ });
2430
+ }
2431
+ ;
2432
+ function signIn(_02) {
2433
+ return __async(this, arguments, function* ({ contractId: contractId2, methodNames }) {
2434
+ const accountId = state.getAccount();
2435
+ const publicKey = state.getPublicKey();
2436
+ const btcContext = window.btcContext;
2437
+ if (accountId && publicKey) {
2438
+ return [{
2439
+ accountId,
2440
+ publicKey
2441
+ }];
2442
+ }
2443
+ const btcAccount = yield btcContext.login();
2444
+ const btcPublicKey = yield btcContext.getPublicKey();
2445
+ const nearTempAddress = yield viewMethod({
2446
+ method: "get_chain_signature_near_account",
2447
+ args: { "btc_public_key": btcPublicKey }
2448
+ });
2449
+ const nearTempPublicKey = yield viewMethod({
2450
+ method: "get_chain_signature_near_account_public_key",
2451
+ args: { "btc_public_key": btcPublicKey }
2452
+ });
2453
+ state.saveAccount(nearTempAddress);
2454
+ state.savePublicKey(nearTempPublicKey);
2455
+ state.saveBtcPublicKey(btcPublicKey);
2456
+ return [
2457
+ {
2458
+ accountId: nearTempAddress,
2459
+ publicKey: nearTempPublicKey
2460
+ }
2461
+ ];
2462
+ });
2463
+ }
2464
+ function signOut() {
2465
+ return __async(this, null, function* () {
2466
+ const btcContext = window.btcContext;
2467
+ btcContext.logout();
2468
+ state.clear();
2469
+ window.localStorage.removeItem("near-wallet-selector:selectedWalletId");
2470
+ removeWalletButton();
2471
+ });
2472
+ }
2473
+ function getAccounts() {
2474
+ return __async(this, null, function* () {
2475
+ const accountId = state.getAccount();
2476
+ initWalletButton(options.network.networkId, accountId, wallet);
2477
+ return [{ accountId: state.getAccount() }];
2478
+ });
2479
+ }
2480
+ function verifyOwner() {
2481
+ return __async(this, null, function* () {
2482
+ throw new Error(`Method not supported by ${metadata.name}`);
2483
+ });
2484
+ }
2485
+ function signMessage() {
2486
+ return __async(this, null, function* () {
2487
+ throw new Error(`Method not supported by ${metadata.name}`);
2488
+ });
2489
+ }
2490
+ function signAndSendTransaction(_02) {
2491
+ return __async(this, arguments, function* ({ signerId, receiverId, actions }) {
2492
+ const btcContext = window.btcContext;
2493
+ const accountId = state.getAccount();
2494
+ const publicKey = state.getPublicKey();
2495
+ const newActions = actions.map((action) => {
2496
+ switch (action.type) {
2497
+ case "FunctionCall":
2498
+ return functionCall(action.params.methodName, action.params.args, action.params.gas, action.params.deposit);
2499
+ case "Transfer":
2500
+ return transfer(action.params.deposit);
2501
+ }
2502
+ });
2503
+ const { header } = yield provider.block({ finality: "final" });
2504
+ const rawAccessKey = yield provider.query({
2505
+ request_type: "view_access_key",
2506
+ account_id: accountId,
2507
+ public_key: publicKey,
2508
+ finality: "final"
2509
+ });
2510
+ const accessKey = __spreadProps(__spreadValues({}, rawAccessKey), {
2511
+ nonce: BigInt(rawAccessKey.nonce || 0)
2512
+ });
2513
+ const publicKeyFromat = PublicKey.from(publicKey);
2514
+ let nearNonceNumber = accessKey.nonce + BigInt(1);
2515
+ const nearNonceApi = yield getNearNonceFromApi(accountId);
2516
+ if (nearNonceApi) {
2517
+ nearNonceNumber = nearNonceApi.result_data && Number(nearNonceApi.result_data) > 0 ? BigInt(Number(nearNonceApi.result_data)) : accessKey.nonce + BigInt(1);
2518
+ }
2519
+ const _transiton = yield transactions.createTransaction(
2520
+ accountId,
2521
+ publicKeyFromat,
2522
+ receiverId,
2523
+ nearNonceNumber,
2524
+ newActions,
2525
+ baseDecode(header.hash)
2526
+ );
2527
+ const tx_bytes = encodeTransaction(_transiton);
2528
+ const hash = bs58.encode(new Uint8Array(sha256.array(tx_bytes)));
2529
+ const accountInfo = yield viewMethod({
2530
+ method: "get_account",
2531
+ args: { "account_id": accountId }
2532
+ });
2533
+ const nonceApi = yield getNonceFromApi(accountId);
2534
+ const nonce = (nonceApi == null ? void 0 : nonceApi.result_data) ? Number(nonceApi == null ? void 0 : nonceApi.result_data) : accountInfo.nonce;
2535
+ const outcome = {
2536
+ near_transactions: Array.from(tx_bytes),
2537
+ nonce: Number(nonce),
2538
+ chain_id: 397,
2539
+ csna: accountId,
2540
+ btcPublicKey: state.getBtcPublicKey(),
2541
+ nearPublicKey: publicKey
2542
+ };
2543
+ const intention = {
2544
+ chain_id: outcome.chain_id.toString(),
2545
+ csna: outcome.csna,
2546
+ near_transactions: [outcome.near_transactions],
2547
+ "gas_token": token,
2548
+ "gas_limit": "3000",
2549
+ nonce: Number(outcome.nonce).toString()
2550
+ };
2551
+ const strIntention = JSON.stringify(intention);
2552
+ const signature = yield btcContext.signMessage(strIntention);
2553
+ const result = yield uploadCAWithdraw({
2554
+ sig: signature,
2555
+ btcPubKey: outcome.btcPublicKey,
2556
+ data: toHex(strIntention),
2557
+ near_nonce: [Number(nearNonceNumber)]
2558
+ });
2559
+ if (result.result_code === 0) {
2560
+ const result2 = yield pollTransactionStatus(options.network.networkId, hash);
2561
+ return result2;
2562
+ } else {
2563
+ return null;
2564
+ }
2565
+ });
2566
+ }
2567
+ function signAndSendTransactions(_02) {
2568
+ return __async(this, arguments, function* ({ transactions: transactions2 }) {
2569
+ const result = yield Promise.all(transactions2.map(
2570
+ (transaction) => __async(this, null, function* () {
2571
+ return yield signAndSendTransaction(transaction);
2572
+ })
2573
+ ));
2574
+ return result;
2575
+ });
2576
+ }
2577
+ return wallet;
2578
+ });
2579
+ function getNonceFromApi(accountId) {
2580
+ return fetch(`${base_url}/nonce?csna=${accountId}`, {
2581
+ method: "GET",
2582
+ headers: {
2583
+ "Content-Type": "application/json"
2584
+ }
2585
+ }).then((res) => res.json());
2586
+ }
2587
+ function getNearNonceFromApi(accountId) {
2588
+ return fetch(`${base_url}/nonceNear?csna=${accountId}`, {
2589
+ method: "GET",
2590
+ headers: {
2591
+ "Content-Type": "application/json"
2592
+ }
2593
+ }).then((res) => res.json());
2594
+ }
2595
+ function uploadCAWithdraw(data) {
2596
+ return fetch(`${base_url}/receiveTransaction`, {
2597
+ method: "POST",
2598
+ headers: {
2599
+ "Content-Type": "application/json"
2600
+ },
2601
+ body: JSON.stringify(data)
2602
+ }).then((res) => res.json());
2603
+ }
2604
+ function setupBTCWallet({
2605
+ iconUrl = "https://assets.deltatrade.ai/assets/chain/btc.svg",
2606
+ deprecated = false,
2607
+ btcContext
2608
+ }) {
2609
+ const btcWallet = () => __async(this, null, function* () {
2610
+ return {
2611
+ id: "btc-wallet",
2612
+ type: "injected",
2613
+ metadata: {
2614
+ name: "BTC Wallet",
2615
+ description: "BTC Wallet",
2616
+ iconUrl,
2617
+ downloadUrl: iconUrl,
2618
+ deprecated,
2619
+ available: true,
2620
+ btcContext
2621
+ },
2622
+ init: BTCWallet
2623
+ };
2624
+ });
2625
+ return btcWallet;
2626
+ }
2627
+ function toHex(originalString) {
2628
+ let charArray = originalString.split("");
2629
+ let asciiArray = charArray.map((char) => char.charCodeAt(0));
2630
+ let hexArray = asciiArray.map((code) => code.toString(16));
2631
+ let hexString = hexArray.join("");
2632
+ hexString = hexString.replace(/(^0+)/g, "");
2633
+ return hexString;
2634
+ }
2635
+ function initWalletButton(network, accountId, wallet) {
2636
+ const checkAndSetupWalletButton = () => {
2637
+ if (accountId && window.btcContext.account) {
2638
+ setupWalletButton(network, wallet, window.btcContext);
2639
+ } else {
2640
+ removeWalletButton();
2641
+ setTimeout(() => {
2642
+ checkAndSetupWalletButton();
2643
+ }, 5e3);
2644
+ }
2645
+ };
2646
+ checkAndSetupWalletButton();
2647
+ }
2648
+ var rcpUrls = {
2649
+ mainnet: ["https://near.lava.build", "https://rpc.mainnet.near.org", "https://free.rpc.fastnear.com", "https://near.drpc.org"],
2650
+ testnet: ["https://near-testnet.lava.build", "https://rpc.testnet.near.org", "https://near-testnet.drpc.org"]
2651
+ };
2652
+ function delay(ms) {
2653
+ return new Promise((resolve) => setTimeout(resolve, ms));
2654
+ }
2655
+ function pollTransactionStatus(network, hash) {
2656
+ return __async(this, null, function* () {
2657
+ const provider = new providers.FailoverRpcProvider(
2658
+ Object.values(rcpUrls[network]).map(
2659
+ (url) => new providers.JsonRpcProvider({ url })
2660
+ )
2661
+ );
2662
+ const maxAttempts = 3;
2663
+ let attempt = 0;
2664
+ while (attempt < maxAttempts) {
2665
+ attempt++;
2666
+ const result = yield provider.txStatus(hash, "unused", "FINAL").catch((error) => {
2667
+ if (attempt === maxAttempts) {
2668
+ throw new Error(`Transaction not found: ${hash}`);
2669
+ }
2670
+ return;
2671
+ });
2672
+ if (result && result.status) {
2673
+ return result;
2674
+ }
2675
+ yield delay(1e4);
2676
+ }
2677
+ });
2678
+ }
2679
+
2680
+ // src/components/hook.tsx
2681
+ import { useEffect as useEffect7 } from "react";
2682
+ function InitContextHook() {
2683
+ const btcContext = useBtcWalletSelector();
2684
+ useEffect7(() => {
2685
+ window.btcContext = btcContext;
2686
+ }, [btcContext]);
2687
+ return null;
2688
+ }
2689
+
2690
+ // src/index.ts
2691
+ var getVersion = () => {
2692
+ return "0.0.1";
2693
+ };
2694
+ if (typeof window !== "undefined") {
2695
+ window.__PARTICLE_BTC_CONNECT_VERSION = getVersion();
2696
+ }
2697
+ export {
2698
+ BaseConnector,
2699
+ BitgetConnector,
2700
+ BtcWalletSelectorContextProvider,
2701
+ BybitConnector,
2702
+ ConnectProvider,
2703
+ InitContextHook,
2704
+ InjectedConnector,
2705
+ OKXConnector,
2706
+ TokenPocketConnector,
2707
+ UnisatConnector,
2708
+ WizzConnector,
2709
+ XverseConnector,
2710
+ getVersion,
2711
+ setupBTCWallet,
2712
+ useAccountContract,
2713
+ useAccounts,
2714
+ useBTCProvider,
2715
+ useBtcWalletSelector,
2716
+ useConnectModal,
2717
+ useConnector,
2718
+ useETHProvider
2719
+ };
2720
+ //# sourceMappingURL=index.js.map