@talken/talkenkit 2.4.21 → 2.4.22

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 (175) hide show
  1. package/LICENSE +9 -0
  2. package/dist/abcWallet-4RS3B4ZG.js +188 -0
  3. package/dist/abcWallet-EBOW2RJB.js +188 -0
  4. package/dist/abcWallet-RS4EOJ4I.js +188 -0
  5. package/dist/abcWallet-SNEZVK7V.js +188 -0
  6. package/dist/abcWallet-TC7M2JYX.js +188 -0
  7. package/dist/abcWallet-VZMW2DR3.js +188 -0
  8. package/dist/abcWallet-XJ3WSUVI.js +188 -0
  9. package/dist/abcWallet-XNCBZAIQ.js +188 -0
  10. package/dist/chunk-6FLQAAC4.js +7213 -0
  11. package/dist/chunk-7GIIMIPN.js +7213 -0
  12. package/dist/chunk-IBFA37SC.js +7228 -0
  13. package/dist/chunk-O5ZOC4NJ.js +7215 -0
  14. package/dist/chunk-OPOAKGEX.js +7216 -0
  15. package/dist/chunk-OTIHVCVR.js +7213 -0
  16. package/dist/chunk-P77BVZZF.js +7369 -0
  17. package/dist/chunk-RFLXXSQH.js +7139 -0
  18. package/dist/components/ConfirmationModal/NonEvmConfirmationModal.css.d.ts +11 -0
  19. package/dist/components/ConfirmationModal/NonEvmSignConfirmationModal.d.ts +9 -0
  20. package/dist/components/ConfirmationModal/NonEvmTransferConfirmationModal.d.ts +9 -0
  21. package/dist/components/ConfirmationModal/SignConfirmationModal.css.d.ts +1 -19
  22. package/dist/components/ConfirmationModal/TransactionConfirmationModal.css.d.ts +1 -20
  23. package/dist/components/ConfirmationModal/commonStyles.css.d.ts +19 -0
  24. package/dist/components/ConfirmationModal/index.d.ts +2 -0
  25. package/dist/components/ConfirmationModal/utils.d.ts +2 -1
  26. package/dist/hooks/useWalletCapabilities.d.ts +2 -0
  27. package/dist/index.css +227 -307
  28. package/dist/index.d.ts +4 -2
  29. package/dist/index.js +2004 -1064
  30. package/dist/providers/SignConfirmationProvider/NonEvmConfirmationContext.d.ts +6 -0
  31. package/dist/providers/SignConfirmationProvider/index.d.ts +2 -1
  32. package/dist/providers/SignConfirmationProvider/requestParsers.d.ts +6 -1
  33. package/dist/providers/SignConfirmationProvider/types.d.ts +35 -1
  34. package/dist/wallets/capabilities/detectCapabilities.d.ts +7 -0
  35. package/dist/wallets/capabilities/requestWalletAction.d.ts +8 -0
  36. package/dist/wallets/capabilities/types.d.ts +50 -0
  37. package/dist/wallets/walletConnectors/abcWallet/abcApi.js +3 -3
  38. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +3 -3
  39. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.d.ts +10 -0
  40. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.js +1 -1
  41. package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +5 -5
  42. package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +9 -0
  43. package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +3 -3
  44. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +10 -0
  45. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +1 -1
  46. package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.d.ts +16 -0
  47. package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +115 -33
  48. package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.d.ts +16 -0
  49. package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.js +1 -1
  50. package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +7 -7
  51. package/dist/wallets/walletConnectors/abcWallet/api/AuthApi.js +4 -4
  52. package/dist/wallets/walletConnectors/abcWallet/api/BaseApiClient.js +3 -3
  53. package/dist/wallets/walletConnectors/abcWallet/api/BitcoinApi.js +4 -4
  54. package/dist/wallets/walletConnectors/abcWallet/api/GasApi.js +4 -4
  55. package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.js +4 -4
  56. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +9 -4
  57. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +2 -2
  58. package/dist/wallets/walletConnectors/abcWallet/api/TransactionApi.js +4 -4
  59. package/dist/wallets/walletConnectors/abcWallet/api/TronApi.js +4 -4
  60. package/dist/wallets/walletConnectors/abcWallet/api/WalletApi.js +4 -4
  61. package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +4 -4
  62. package/dist/wallets/walletConnectors/abcWallet/api/index.js +13 -13
  63. package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +5 -4
  64. package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
  65. package/dist/wallets/walletConnectors/abcWallet/index.js +21 -21
  66. package/dist/wallets/walletConnectors/abcWallet/types.d.ts +31 -1
  67. package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
  68. package/dist/wallets/walletConnectors/berasigWallet/berasigWallet.js +2 -2
  69. package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
  70. package/dist/wallets/walletConnectors/binanceWallet/binanceWallet.js +2 -2
  71. package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
  72. package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
  73. package/dist/wallets/walletConnectors/chunk-2IZBLAHI.js +52 -0
  74. package/dist/wallets/walletConnectors/chunk-32IJ3ILH.js +71 -0
  75. package/dist/wallets/walletConnectors/chunk-3AX66UHT.js +479 -0
  76. package/dist/wallets/walletConnectors/chunk-3BVPV64G.js +36 -0
  77. package/dist/wallets/walletConnectors/chunk-3DGFHWI3.js +302 -0
  78. package/dist/wallets/walletConnectors/chunk-4FKUVQCM.js +655 -0
  79. package/dist/wallets/walletConnectors/chunk-56SF4VRC.js +640 -0
  80. package/dist/wallets/walletConnectors/chunk-5KOE7NJW.js +52 -0
  81. package/dist/wallets/walletConnectors/chunk-6CVXZ3ZW.js +771 -0
  82. package/dist/wallets/walletConnectors/chunk-6GCWEPU7.js +643 -0
  83. package/dist/wallets/walletConnectors/chunk-6YFP3Q2I.js +118 -0
  84. package/dist/wallets/walletConnectors/chunk-7EEPPULA.js +118 -0
  85. package/dist/wallets/walletConnectors/chunk-7QL42XTB.js +302 -0
  86. package/dist/wallets/walletConnectors/chunk-A7ZSPSFX.js +577 -0
  87. package/dist/wallets/walletConnectors/chunk-AI3CT254.js +302 -0
  88. package/dist/wallets/walletConnectors/chunk-AMNVH7CZ.js +151 -0
  89. package/dist/wallets/walletConnectors/chunk-AOREXGRM.js +350 -0
  90. package/dist/wallets/walletConnectors/chunk-BLO7E54F.js +302 -0
  91. package/dist/wallets/walletConnectors/chunk-BNRH5PYS.js +52 -0
  92. package/dist/wallets/walletConnectors/chunk-BOV5FXU6.js +151 -0
  93. package/dist/wallets/walletConnectors/chunk-BR25RFNF.js +260 -0
  94. package/dist/wallets/walletConnectors/chunk-BXQ2UWJ3.js +91 -0
  95. package/dist/wallets/walletConnectors/chunk-CAMPW7O2.js +874 -0
  96. package/dist/wallets/walletConnectors/chunk-CLMFCNP7.js +52 -0
  97. package/dist/wallets/walletConnectors/chunk-DSZOE65L.js +107 -0
  98. package/dist/wallets/walletConnectors/chunk-DU6RCLWT.js +272 -0
  99. package/dist/wallets/walletConnectors/chunk-ENN6UGGA.js +421 -0
  100. package/dist/wallets/walletConnectors/chunk-EXWDLN5V.js +204 -0
  101. package/dist/wallets/walletConnectors/chunk-FFU26Y5Y.js +272 -0
  102. package/dist/wallets/walletConnectors/chunk-FGS2WHVA.js +118 -0
  103. package/dist/wallets/walletConnectors/chunk-FJJ3QI4R.js +91 -0
  104. package/dist/wallets/walletConnectors/chunk-FS2OOQYF.js +204 -0
  105. package/dist/wallets/walletConnectors/chunk-G5X3COSW.js +205 -0
  106. package/dist/wallets/walletConnectors/chunk-H53R4SFZ.js +204 -0
  107. package/dist/wallets/walletConnectors/chunk-J4QGDATF.js +71 -0
  108. package/dist/wallets/walletConnectors/chunk-JIJNCMJR.js +874 -0
  109. package/dist/wallets/walletConnectors/chunk-JSGZYU4A.js +52 -0
  110. package/dist/wallets/walletConnectors/chunk-JVT7R2GZ.js +771 -0
  111. package/dist/wallets/walletConnectors/chunk-K3JNN5UK.js +71 -0
  112. package/dist/wallets/walletConnectors/chunk-KBHPY3NA.js +302 -0
  113. package/dist/wallets/walletConnectors/chunk-KEX6WS23.js +640 -0
  114. package/dist/wallets/walletConnectors/chunk-KHYKVVR7.js +52 -0
  115. package/dist/wallets/walletConnectors/chunk-LOL7ZZ3S.js +302 -0
  116. package/dist/wallets/walletConnectors/chunk-LOSXI36Y.js +479 -0
  117. package/dist/wallets/walletConnectors/chunk-M2U5QGM7.js +260 -0
  118. package/dist/wallets/walletConnectors/chunk-M73AWLIV.js +107 -0
  119. package/dist/wallets/walletConnectors/chunk-MAUC46AE.js +302 -0
  120. package/dist/wallets/walletConnectors/chunk-MBRXYEQC.js +272 -0
  121. package/dist/wallets/walletConnectors/chunk-MDDD4LG2.js +874 -0
  122. package/dist/wallets/walletConnectors/chunk-MMR2QAEU.js +642 -0
  123. package/dist/wallets/walletConnectors/chunk-MNZZRFUC.js +302 -0
  124. package/dist/wallets/walletConnectors/chunk-OIRY24PH.js +302 -0
  125. package/dist/wallets/walletConnectors/chunk-ORBX4JE2.js +52 -0
  126. package/dist/wallets/walletConnectors/chunk-OXJFFDW7.js +761 -0
  127. package/dist/wallets/walletConnectors/chunk-QD3PPWTN.js +272 -0
  128. package/dist/wallets/walletConnectors/chunk-RCIABMG5.js +259 -0
  129. package/dist/wallets/walletConnectors/chunk-RHC4SVLB.js +71 -0
  130. package/dist/wallets/walletConnectors/chunk-S2CB4KFC.js +71 -0
  131. package/dist/wallets/walletConnectors/chunk-S6HZD4XZ.js +302 -0
  132. package/dist/wallets/walletConnectors/chunk-S72LCNVX.js +272 -0
  133. package/dist/wallets/walletConnectors/chunk-SCWE5EEX.js +91 -0
  134. package/dist/wallets/walletConnectors/chunk-TKEL4D4E.js +151 -0
  135. package/dist/wallets/walletConnectors/chunk-TKJEMEBZ.js +71 -0
  136. package/dist/wallets/walletConnectors/chunk-TZ44ZREA.js +302 -0
  137. package/dist/wallets/walletConnectors/chunk-UGQSI3US.js +547 -0
  138. package/dist/wallets/walletConnectors/chunk-UU4JYY3C.js +205 -0
  139. package/dist/wallets/walletConnectors/chunk-V5P5BL6Z.js +302 -0
  140. package/dist/wallets/walletConnectors/chunk-VH6DIRPF.js +71 -0
  141. package/dist/wallets/walletConnectors/chunk-VPNZAMW5.js +205 -0
  142. package/dist/wallets/walletConnectors/chunk-W6QN6QXO.js +52 -0
  143. package/dist/wallets/walletConnectors/chunk-WDULICVN.js +302 -0
  144. package/dist/wallets/walletConnectors/chunk-WGGHGODM.js +272 -0
  145. package/dist/wallets/walletConnectors/chunk-XUCMTLM3.js +52 -0
  146. package/dist/wallets/walletConnectors/chunk-Y5WAX6WO.js +52 -0
  147. package/dist/wallets/walletConnectors/chunk-Y62PFBWE.js +640 -0
  148. package/dist/wallets/walletConnectors/chunk-Z6ABK6G6.js +107 -0
  149. package/dist/wallets/walletConnectors/chunk-ZCA5QSIM.js +71 -0
  150. package/dist/wallets/walletConnectors/chunk-ZJDZJW55.js +479 -0
  151. package/dist/wallets/walletConnectors/chunk-ZOF7ZDGU.js +52 -0
  152. package/dist/wallets/walletConnectors/chunk-ZUU57RHO.js +36 -0
  153. package/dist/wallets/walletConnectors/chunk-ZWFGRREM.js +36 -0
  154. package/dist/wallets/walletConnectors/chunk-ZY5BCHP2.js +302 -0
  155. package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
  156. package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
  157. package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
  158. package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
  159. package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
  160. package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
  161. package/dist/wallets/walletConnectors/index.js +91 -91
  162. package/dist/wallets/walletConnectors/iopayWallet/iopayWallet.js +2 -2
  163. package/dist/wallets/walletConnectors/kaiaWallet/kaiaWallet.js +2 -2
  164. package/dist/wallets/walletConnectors/kaikasWallet/kaikasWallet.js +2 -2
  165. package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
  166. package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
  167. package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
  168. package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
  169. package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
  170. package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
  171. package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
  172. package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
  173. package/dist/wallets/walletConnectors/zealWallet/zealWallet.js +2 -2
  174. package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
  175. package/package.json +11 -12
@@ -0,0 +1,874 @@
1
+ "use client";
2
+ import {
3
+ getNetworkName
4
+ } from "./chunk-7QHCSJDN.js";
5
+ import {
6
+ calculateExpiryTimestamp,
7
+ createAbcError,
8
+ isTokenExpired,
9
+ loadFromStorage,
10
+ parseApiError,
11
+ removeFromStorage,
12
+ saveToStorage
13
+ } from "./chunk-LOSXI36Y.js";
14
+ import {
15
+ ABC_AUDIENCE,
16
+ ABC_ENDPOINTS,
17
+ DEFAULT_HEADERS,
18
+ REQUEST_TIMEOUT
19
+ } from "./chunk-BR25RFNF.js";
20
+
21
+ // src/wallets/walletConnectors/abcWallet/abcApi.ts
22
+ import { getTalkenApiClient } from "@talken/talkenkit";
23
+ var AbcWaasClient = class {
24
+ constructor(config) {
25
+ this.accessToken = null;
26
+ this.refreshToken = null;
27
+ this.expiresAt = null;
28
+ this.isRefreshing = false;
29
+ this.refreshPromise = null;
30
+ this.talkenAuthPath = "/wallet/auth";
31
+ this.config = config;
32
+ this.baseURL = config.waasUrl;
33
+ this.loadTokens();
34
+ }
35
+ getTalkenApiUrl() {
36
+ return process.env.NEXT_PUBLIC_API_URL || "http://localhost:3001/api/v1";
37
+ }
38
+ async requestWalletAuth(body) {
39
+ const response = await fetch(
40
+ `${this.getTalkenApiUrl()}${this.talkenAuthPath}`,
41
+ {
42
+ method: "POST",
43
+ headers: {
44
+ "Content-Type": "application/json",
45
+ Accept: "application/json"
46
+ },
47
+ credentials: "include",
48
+ body: JSON.stringify(body)
49
+ }
50
+ );
51
+ const text = await response.text();
52
+ const data = text ? JSON.parse(text) : {};
53
+ if (!response.ok) {
54
+ throw parseApiError({
55
+ response: {
56
+ status: response.status,
57
+ data
58
+ }
59
+ });
60
+ }
61
+ return data;
62
+ }
63
+ /**
64
+ * Load tokens from storage
65
+ */
66
+ loadTokens() {
67
+ this.accessToken = loadFromStorage("access_token" /* ACCESS_TOKEN */);
68
+ this.refreshToken = loadFromStorage("refresh_token" /* REFRESH_TOKEN */);
69
+ this.expiresAt = loadFromStorage("expires_at" /* EXPIRES_AT */);
70
+ }
71
+ /**
72
+ * Save tokens to storage
73
+ */
74
+ saveTokens(accessToken, refreshToken, expiresIn) {
75
+ this.accessToken = accessToken;
76
+ this.refreshToken = refreshToken;
77
+ this.expiresAt = calculateExpiryTimestamp(expiresIn);
78
+ saveToStorage("access_token" /* ACCESS_TOKEN */, accessToken);
79
+ saveToStorage("refresh_token" /* REFRESH_TOKEN */, refreshToken);
80
+ saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
81
+ }
82
+ /**
83
+ * Clear tokens
84
+ */
85
+ clearTokens() {
86
+ this.accessToken = null;
87
+ this.refreshToken = null;
88
+ this.expiresAt = null;
89
+ removeFromStorage("access_token" /* ACCESS_TOKEN */);
90
+ removeFromStorage("refresh_token" /* REFRESH_TOKEN */);
91
+ removeFromStorage("expires_at" /* EXPIRES_AT */);
92
+ }
93
+ /**
94
+ * Check if access token is expired
95
+ */
96
+ isTokenExpired() {
97
+ return isTokenExpired(this.expiresAt);
98
+ }
99
+ /**
100
+ * Get current access token
101
+ */
102
+ getAccessToken() {
103
+ return this.accessToken;
104
+ }
105
+ /**
106
+ * Refresh access token
107
+ */
108
+ async refreshAccessToken() {
109
+ if (this.isRefreshing) {
110
+ if (this.refreshPromise) {
111
+ await this.refreshPromise;
112
+ }
113
+ return;
114
+ }
115
+ if (!this.refreshToken) {
116
+ throw createAbcError(
117
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
118
+ "No refresh token available"
119
+ );
120
+ }
121
+ this.isRefreshing = true;
122
+ this.refreshPromise = (async () => {
123
+ try {
124
+ const isIframe = typeof window !== "undefined" && window.self !== window.top;
125
+ const response = await this.requestWalletAuth({
126
+ action: "token.refresh",
127
+ refreshToken: this.refreshToken || "",
128
+ isIframe
129
+ });
130
+ const data = response?.data || {};
131
+ if (response?.success && data.access_token) {
132
+ const expiresIn = data.expires_in || data.expire_in || 3600;
133
+ this.saveTokens(
134
+ data.access_token,
135
+ data.refresh_token || this.refreshToken,
136
+ // Keep old if not provided
137
+ expiresIn
138
+ );
139
+ } else {
140
+ throw createAbcError(
141
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
142
+ "Failed to refresh token"
143
+ );
144
+ }
145
+ } finally {
146
+ this.isRefreshing = false;
147
+ this.refreshPromise = null;
148
+ }
149
+ })();
150
+ await this.refreshPromise;
151
+ }
152
+ /**
153
+ * Make HTTP request
154
+ */
155
+ async request(endpoint, options = {}) {
156
+ const {
157
+ method = "GET",
158
+ body,
159
+ headers = {},
160
+ skipAuth = false,
161
+ isRetry = false
162
+ } = options;
163
+ if (!skipAuth && this.isTokenExpired() && this.refreshToken) {
164
+ await this.refreshAccessToken();
165
+ }
166
+ const url = `${this.baseURL}${endpoint}`;
167
+ const requestHeaders = {
168
+ ...DEFAULT_HEADERS,
169
+ ...headers
170
+ };
171
+ if (!skipAuth && this.accessToken) {
172
+ requestHeaders.Authorization = `Bearer ${this.accessToken}`;
173
+ }
174
+ if (this.config.apiKey) {
175
+ requestHeaders["X-API-Key"] = this.config.apiKey;
176
+ }
177
+ try {
178
+ const controller = new AbortController();
179
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
180
+ const requestBody = body ? new URLSearchParams(body).toString() : void 0;
181
+ const response = await fetch(url, {
182
+ method,
183
+ headers: requestHeaders,
184
+ body: requestBody,
185
+ signal: controller.signal
186
+ });
187
+ clearTimeout(timeoutId);
188
+ const text = await response.text();
189
+ let data;
190
+ if (text) {
191
+ try {
192
+ data = JSON.parse(text);
193
+ } catch (parseError) {
194
+ console.error("[AbcWaasClient] \u274C JSON parse error:", {
195
+ url,
196
+ method,
197
+ status: response.status,
198
+ responseText: text.substring(0, 200)
199
+ // Log first 200 chars
200
+ });
201
+ throw createAbcError(
202
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
203
+ "Invalid JSON response from server",
204
+ { text, parseError }
205
+ );
206
+ }
207
+ } else {
208
+ console.log("[AbcWaasClient] \u2139\uFE0F Empty response received:", {
209
+ url,
210
+ method,
211
+ status: response.status
212
+ });
213
+ data = { status: "success" };
214
+ }
215
+ if (response.status === 401 && !skipAuth && this.refreshToken && !isRetry) {
216
+ try {
217
+ await this.refreshAccessToken();
218
+ return await this.request(endpoint, {
219
+ ...options,
220
+ isRetry: true
221
+ // Prevent infinite retry loop
222
+ });
223
+ } catch (refreshError) {
224
+ console.error("Token refresh failed:", refreshError);
225
+ throw parseApiError({
226
+ response: {
227
+ status: response.status,
228
+ data
229
+ }
230
+ });
231
+ }
232
+ }
233
+ if (!response.ok) {
234
+ console.error("[AbcWaasClient] \u274C API Error:", {
235
+ url,
236
+ method,
237
+ status: response.status,
238
+ statusText: response.statusText,
239
+ data
240
+ });
241
+ throw parseApiError({
242
+ response: {
243
+ status: response.status,
244
+ data
245
+ }
246
+ });
247
+ }
248
+ return data;
249
+ } catch (error) {
250
+ console.error("[AbcWaasClient] \u274C Request failed:", {
251
+ url,
252
+ method,
253
+ error: error.message,
254
+ errorName: error.name,
255
+ errorType: error.constructor.name,
256
+ stack: error.stack
257
+ });
258
+ if (error.name === "AbortError") {
259
+ throw createAbcError(
260
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
261
+ "Request timeout",
262
+ error
263
+ );
264
+ }
265
+ if (error.code && error.message) {
266
+ throw error;
267
+ }
268
+ throw parseApiError(error);
269
+ }
270
+ }
271
+ /**
272
+ * Login with email and password
273
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
274
+ */
275
+ async loginWithEmail(email, password) {
276
+ const response = await this.request(
277
+ ABC_ENDPOINTS.SNS_LOGIN,
278
+ {
279
+ method: "POST",
280
+ body: {
281
+ email,
282
+ token: password,
283
+ // Use password as token
284
+ service: "email",
285
+ audience: ABC_AUDIENCE
286
+ },
287
+ skipAuth: true
288
+ }
289
+ );
290
+ if (response.status === "success" && response.data) {
291
+ this.accessToken = response.data.accessToken;
292
+ this.refreshToken = response.data.refreshToken;
293
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
294
+ console.log(
295
+ "[AbcWaasClient] \u2705 Login successful, tokens stored in memory (not persisted yet)"
296
+ );
297
+ return response.data;
298
+ }
299
+ throw createAbcError(
300
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
301
+ "Email login failed",
302
+ response
303
+ );
304
+ }
305
+ /**
306
+ * Login with email and OTP (for PIN recovery)
307
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
308
+ */
309
+ async loginWithOtp(email, otpCode) {
310
+ const response = await this.request(
311
+ ABC_ENDPOINTS.SNS_LOGIN,
312
+ {
313
+ method: "POST",
314
+ body: {
315
+ email,
316
+ token: otpCode,
317
+ service: "email",
318
+ audience: ABC_AUDIENCE
319
+ },
320
+ skipAuth: true
321
+ }
322
+ );
323
+ if (response.status === "success" && response.data) {
324
+ this.accessToken = response.data.accessToken;
325
+ this.refreshToken = response.data.refreshToken;
326
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
327
+ console.log(
328
+ "[AbcWaasClient] \u2705 OTP login successful, tokens stored in memory (not persisted yet)"
329
+ );
330
+ return response.data;
331
+ }
332
+ throw createAbcError(
333
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
334
+ "OTP login failed",
335
+ response
336
+ );
337
+ }
338
+ /**
339
+ * Login with social provider
340
+ * NOTE: Tokens are stored in memory only. Call persistTokens() after PIN verification to save to localStorage.
341
+ */
342
+ async loginWithSocial(provider, token, email) {
343
+ const response = await this.request(
344
+ ABC_ENDPOINTS.SNS_LOGIN,
345
+ {
346
+ method: "POST",
347
+ body: {
348
+ token,
349
+ service: provider,
350
+ audience: ABC_AUDIENCE,
351
+ email
352
+ },
353
+ skipAuth: true
354
+ }
355
+ );
356
+ if (response.status === "success" && response.data) {
357
+ this.accessToken = response.data.accessToken;
358
+ this.refreshToken = response.data.refreshToken;
359
+ this.expiresAt = calculateExpiryTimestamp(response.data.expiresIn);
360
+ console.log(
361
+ "[AbcWaasClient] \u2705 Social login successful, tokens stored in memory (not persisted yet)"
362
+ );
363
+ return response.data;
364
+ }
365
+ throw createAbcError(
366
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
367
+ "Social login failed",
368
+ response
369
+ );
370
+ }
371
+ /**
372
+ * Refresh access token using refresh token (public wrapper)
373
+ */
374
+ async refreshTokens(refreshTokenValue) {
375
+ const oldRefreshToken = this.refreshToken;
376
+ this.refreshToken = refreshTokenValue;
377
+ try {
378
+ await this.refreshAccessToken();
379
+ return {
380
+ accessToken: this.accessToken,
381
+ refreshToken: this.refreshToken,
382
+ expiresIn: Math.floor((this.expiresAt - Date.now()) / 1e3)
383
+ };
384
+ } catch (error) {
385
+ this.refreshToken = oldRefreshToken;
386
+ throw error;
387
+ }
388
+ }
389
+ /**
390
+ * Request OTP code for email
391
+ */
392
+ async requestOtpCode(email) {
393
+ const response = await this.request(
394
+ ABC_ENDPOINTS.SEND_OTP,
395
+ {
396
+ method: "POST",
397
+ body: { email },
398
+ skipAuth: true
399
+ }
400
+ );
401
+ if (response.status === "success" && response.data) {
402
+ return response.data;
403
+ }
404
+ throw createAbcError(
405
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
406
+ "Failed to request OTP",
407
+ response
408
+ );
409
+ }
410
+ /**
411
+ * Verify OTP code
412
+ */
413
+ async verifyOtpCode(email, code) {
414
+ const response = await this.request(ABC_ENDPOINTS.VERIFY_OTP, {
415
+ method: "POST",
416
+ body: { email, code },
417
+ skipAuth: true
418
+ });
419
+ return response.status === "success";
420
+ }
421
+ /**
422
+ * Check if email already exists
423
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:63-69
424
+ */
425
+ async emailCheck(email) {
426
+ const result = await this.requestWalletAuth({
427
+ action: "email.check",
428
+ email
429
+ });
430
+ return result?.data || result;
431
+ }
432
+ /**
433
+ * Send OTP code to email for signup
434
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:105-110
435
+ * Note: Uses ABC WaaS endpoint, not Talken API
436
+ */
437
+ async sendOtpCode(email) {
438
+ const result = await this.requestWalletAuth({
439
+ action: "otp.send",
440
+ email
441
+ });
442
+ return result?.data || result;
443
+ }
444
+ /**
445
+ * Verify OTP code for signup
446
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:112-123
447
+ * Note: Uses ABC WaaS endpoint, not Talken API
448
+ */
449
+ async verifyOtpCodeSignup(email, code) {
450
+ const result = await this.requestWalletAuth({
451
+ action: "otp.verify",
452
+ email,
453
+ otpCode: code
454
+ });
455
+ return result?.data || result;
456
+ }
457
+ /**
458
+ * SNS (Social) Login via Google/Apple/Kakao
459
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:43-51
460
+ * Note: Uses Talken API server, not ABC WaaS
461
+ */
462
+ async snsLogin(params) {
463
+ try {
464
+ const result = await this.requestWalletAuth({
465
+ action: "login",
466
+ method: "sns",
467
+ token: params.token,
468
+ service: params.service,
469
+ audience: params.audience
470
+ });
471
+ const data = result?.data || {};
472
+ if (!data.access_token) {
473
+ throw createAbcError(
474
+ "INVALID_CREDENTIALS" /* INVALID_CREDENTIALS */,
475
+ "SNS login failed: Invalid response from server",
476
+ { service: params.service, response: data }
477
+ );
478
+ }
479
+ console.log("[AbcWaasClient] \u2705 SNS login successful");
480
+ return {
481
+ uid: "",
482
+ // Will be fetched later via info() API
483
+ email: params.email,
484
+ access_token: data.access_token,
485
+ refresh_token: data.refresh_token,
486
+ user_type: "existing"
487
+ // Default to existing, will be determined later
488
+ };
489
+ } catch (error) {
490
+ if (error.name === "AbortError") {
491
+ throw createAbcError(
492
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
493
+ "SNS login request timeout",
494
+ error
495
+ );
496
+ }
497
+ throw error;
498
+ }
499
+ }
500
+ /**
501
+ * Register new user
502
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:71-78
503
+ * Note: Uses Talken API server, not ABC WaaS
504
+ */
505
+ async registerUser(params) {
506
+ const result = await this.requestWalletAuth({
507
+ action: "register",
508
+ email: params.username,
509
+ otpCode: params.emailCode,
510
+ password: params.password,
511
+ name: params.name
512
+ });
513
+ return result?.data || result;
514
+ }
515
+ /**
516
+ * Register new SNS user (email-based registration with OTP)
517
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:80-87
518
+ * Note: Uses Talken API server, not ABC WaaS
519
+ */
520
+ async registerSnsUser(params) {
521
+ const talkenApiUrl = this.getTalkenApiUrl();
522
+ const response = await fetch(`${talkenApiUrl}/auth/signup`, {
523
+ method: "POST",
524
+ headers: {
525
+ ...DEFAULT_HEADERS
526
+ },
527
+ credentials: "include",
528
+ body: new URLSearchParams(params).toString()
529
+ });
530
+ const text = await response.text();
531
+ const data = text ? JSON.parse(text) : { status: "success" };
532
+ if (!response.ok) {
533
+ throw parseApiError({
534
+ response: {
535
+ status: response.status,
536
+ data
537
+ }
538
+ });
539
+ }
540
+ return data;
541
+ }
542
+ /**
543
+ * Reset/Set password for existing user
544
+ * Reference: tg-wallet-frontend src/features/user/api/index.ts:89-95
545
+ * Note: Uses Talken API server, not ABC WaaS
546
+ */
547
+ async resetPassword(params) {
548
+ const result = await this.requestWalletAuth({
549
+ action: "password.reset",
550
+ email: params.username,
551
+ newPassword: params.password,
552
+ emailCode: params.emailCode
553
+ });
554
+ return result?.data || result;
555
+ }
556
+ /**
557
+ * Generate or recover wallet
558
+ */
559
+ async generateOrRecoverWallet(params) {
560
+ const response = await this.request(
561
+ // Use 'any' to get raw API response
562
+ ABC_ENDPOINTS.MPC_WALLETS,
563
+ // Use correct EVM endpoint, not WALLETS_V3 (Solana only)
564
+ {
565
+ method: "POST",
566
+ body: {
567
+ uid: params.uid,
568
+ pin: params.pin,
569
+ chainId: params.chainId,
570
+ network: params.network || "mainnet"
571
+ }
572
+ }
573
+ );
574
+ if (response.status === "success" && response.data) {
575
+ const raw = response.data;
576
+ return {
577
+ address: raw.sid || "",
578
+ // sid is the EVM address
579
+ keyId: raw.key_id || raw.keyId || raw.sid,
580
+ encryptedShare: raw.encrypted_share || raw.key_id || "",
581
+ uid: raw.uid,
582
+ sid: raw.sid,
583
+ pubkey: raw.pubkey || null
584
+ };
585
+ }
586
+ throw createAbcError(
587
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
588
+ "Failed to generate wallet",
589
+ response
590
+ );
591
+ }
592
+ // v2 signing methods removed (signTransaction, signMessage, signTypedData, sendRawTransaction)
593
+ // All signing now routes through TalkenApiClient → talken-api backend.
594
+ /**
595
+ * @deprecated v2 signing removed. Use TalkenApiClient.evm.sendTransaction() instead.
596
+ */
597
+ async signTransaction(_params) {
598
+ throw createAbcError(
599
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
600
+ "v2 signing removed. Use TalkenApiClient.evm.sendTransaction() instead."
601
+ );
602
+ }
603
+ /**
604
+ * @deprecated v2 signing removed. Use TalkenApiClient.evm.personalSign() instead.
605
+ */
606
+ async signMessage(_params) {
607
+ throw createAbcError(
608
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
609
+ "v2 signing removed. Use TalkenApiClient.evm.personalSign() instead."
610
+ );
611
+ }
612
+ /**
613
+ * @deprecated v2 signing removed. Use TalkenApiClient.evm.signTypedData() instead.
614
+ */
615
+ async signTypedData(_params) {
616
+ throw createAbcError(
617
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
618
+ "v2 signing removed. Use TalkenApiClient.evm.signTypedData() instead."
619
+ );
620
+ }
621
+ /**
622
+ * @deprecated v2 sendRawTransaction removed. Use TalkenApiClient.evm.sendRawTransaction() instead.
623
+ */
624
+ async sendRawTransaction(_chainId, _signedTransaction) {
625
+ throw createAbcError(
626
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
627
+ "v2 sendRawTransaction removed. Use TalkenApiClient.evm.sendRawTransaction() instead."
628
+ );
629
+ }
630
+ /**
631
+ * Estimate gas for EIP-1559 transaction
632
+ * Routes through TalkenApiClient (talken-api proxy)
633
+ */
634
+ async estimateGas(params) {
635
+ const network = getNetworkName(params.chainId);
636
+ const api = getTalkenApiClient();
637
+ if (!api) {
638
+ throw createAbcError(
639
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
640
+ "TalkenApiClient not initialized"
641
+ );
642
+ }
643
+ try {
644
+ const result = await api.evm.estimateGas({
645
+ network,
646
+ from: params.from || "",
647
+ to: params.to,
648
+ value: params.value,
649
+ data: params.data
650
+ });
651
+ if (result.result) {
652
+ return result.result;
653
+ }
654
+ throw createAbcError(
655
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
656
+ "No result in gas estimate response"
657
+ );
658
+ } catch (error) {
659
+ if (error?.code === "NETWORK_ERROR" /* NETWORK_ERROR */) {
660
+ throw error;
661
+ }
662
+ throw createAbcError(
663
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
664
+ error.message || "Failed to estimate gas"
665
+ );
666
+ }
667
+ }
668
+ /**
669
+ * Get transaction count (nonce) via TalkenApiClient
670
+ */
671
+ async getTransactionCount(params) {
672
+ const network = getNetworkName(params.chainId);
673
+ const api = getTalkenApiClient();
674
+ if (!api) {
675
+ throw createAbcError(
676
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
677
+ "TalkenApiClient not initialized"
678
+ );
679
+ }
680
+ try {
681
+ const res = await api.evm.getNonce(network, params.address);
682
+ if (res.result !== void 0) {
683
+ return typeof res.result === "number" ? `0x${res.result.toString(16)}` : res.result;
684
+ }
685
+ throw createAbcError(
686
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
687
+ "No result in nonce response"
688
+ );
689
+ } catch (error) {
690
+ if (error?.code === "NETWORK_ERROR" /* NETWORK_ERROR */) {
691
+ throw error;
692
+ }
693
+ throw createAbcError(
694
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
695
+ error.message || "Failed to get transaction count"
696
+ );
697
+ }
698
+ }
699
+ /**
700
+ * Get wallet info
701
+ */
702
+ async getWalletInfo(uid) {
703
+ const response = await this.request(ABC_ENDPOINTS.INFO, {
704
+ method: "POST",
705
+ body: { uid }
706
+ });
707
+ if (response.status === "success") {
708
+ return response.data;
709
+ }
710
+ throw createAbcError(
711
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
712
+ "Failed to get wallet info",
713
+ response
714
+ );
715
+ }
716
+ /**
717
+ * Logout (clear tokens)
718
+ */
719
+ async logout() {
720
+ this.clearTokens();
721
+ }
722
+ /**
723
+ * Check if user is authenticated
724
+ */
725
+ isAuthenticated() {
726
+ return !!this.accessToken && !this.isTokenExpired();
727
+ }
728
+ /**
729
+ * Set tokens in client instance (useful when restoring from storage or state)
730
+ * Call this before persistTokens() if you need to set tokens from external source
731
+ */
732
+ setTokens(accessToken, refreshToken, expiresAt) {
733
+ this.accessToken = accessToken;
734
+ this.refreshToken = refreshToken;
735
+ this.expiresAt = expiresAt;
736
+ }
737
+ /**
738
+ * Persist tokens to localStorage
739
+ * Call this after PIN verification is complete
740
+ *
741
+ * SECURITY NOTE: This should only be called after full authentication (password + PIN)
742
+ * to ensure tokens are only persisted after the user has proven ownership of both credentials.
743
+ */
744
+ persistTokens() {
745
+ if (!this.accessToken || !this.refreshToken || !this.expiresAt) {
746
+ console.warn(
747
+ "[AbcWaasClient] \u26A0\uFE0F No tokens to persist - ensure login was successful first"
748
+ );
749
+ return;
750
+ }
751
+ console.log(
752
+ "[AbcWaasClient] \u{1F4BE} Persisting tokens to localStorage after PIN verification"
753
+ );
754
+ saveToStorage("access_token" /* ACCESS_TOKEN */, this.accessToken);
755
+ saveToStorage("refresh_token" /* REFRESH_TOKEN */, this.refreshToken);
756
+ saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
757
+ }
758
+ // ==========================================================================
759
+ // Solana Methods
760
+ // ==========================================================================
761
+ /**
762
+ * Generate or recover Solana wallet (Ed25519)
763
+ * Reference: SigningService.ts:56-72, wallet/api/index.ts:56-72
764
+ */
765
+ async generateSolanaWallet(pin, isRecover = false) {
766
+ const api = getTalkenApiClient();
767
+ if (!api) {
768
+ throw createAbcError(
769
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
770
+ "TalkenApiClient not initialized"
771
+ );
772
+ }
773
+ const response = isRecover ? await api.wallet.recover(pin) : await api.wallet.generate(pin);
774
+ if (!response.solana) {
775
+ throw createAbcError(
776
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
777
+ `Solana wallet not returned from ${isRecover ? "recovery" : "generation"}`
778
+ );
779
+ }
780
+ return response.solana;
781
+ }
782
+ /**
783
+ * Get Solana address from Ed25519 public key
784
+ * Reference: wallet/api/index.ts:74-82
785
+ */
786
+ async getSolanaAddress(_publicKey, _network) {
787
+ const api = getTalkenApiClient();
788
+ if (!api) {
789
+ throw createAbcError(
790
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
791
+ "TalkenApiClient not initialized"
792
+ );
793
+ }
794
+ const addresses = await api.wallet.getAddresses();
795
+ if (!addresses.solana) {
796
+ throw createAbcError(
797
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
798
+ "Solana address not available"
799
+ );
800
+ }
801
+ return addresses.solana;
802
+ }
803
+ /**
804
+ * Sign Solana transaction with Ed25519 (via talken-api proxy)
805
+ */
806
+ async signSolanaTransaction(params) {
807
+ const api = getTalkenApiClient();
808
+ if (!api) {
809
+ throw createAbcError(
810
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
811
+ "TalkenApiClient not initialized"
812
+ );
813
+ }
814
+ const result = await api.solana.sign({
815
+ message: params.message,
816
+ pin: params.pin,
817
+ keyId: params.keyId,
818
+ encryptedShare: params.encryptedShare,
819
+ secretStore: params.secretStore,
820
+ network: params.network
821
+ });
822
+ if (!result.signature) {
823
+ throw createAbcError(
824
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
825
+ "Failed to sign Solana transaction"
826
+ );
827
+ }
828
+ return { signature: result.signature };
829
+ }
830
+ /**
831
+ * Sign Solana message with Ed25519 (via talken-api proxy)
832
+ */
833
+ async signSolanaMessage(params) {
834
+ const api = getTalkenApiClient();
835
+ if (!api) {
836
+ throw createAbcError(
837
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
838
+ "TalkenApiClient not initialized"
839
+ );
840
+ }
841
+ const result = await api.solana.sign({
842
+ message: params.message,
843
+ keyId: params.keyId,
844
+ encryptedShare: params.encryptedShare,
845
+ secretStore: params.secretStore,
846
+ network: params.network
847
+ });
848
+ if (!result.signature) {
849
+ throw createAbcError(
850
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
851
+ "Failed to sign Solana message"
852
+ );
853
+ }
854
+ return { signature: result.signature };
855
+ }
856
+ /**
857
+ * Send Solana transaction (via talken-api proxy)
858
+ * @deprecated Use TalkenApiClient.solana.transfer() for integrated flow
859
+ */
860
+ async sendSolanaTransaction(_params) {
861
+ throw createAbcError(
862
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
863
+ "sendSolanaTransaction is deprecated. Use TalkenApiClient.solana.transfer() instead."
864
+ );
865
+ }
866
+ };
867
+ function createAbcWaasClient(config) {
868
+ return new AbcWaasClient(config);
869
+ }
870
+
871
+ export {
872
+ AbcWaasClient,
873
+ createAbcWaasClient
874
+ };