@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.
- package/LICENSE +9 -0
- package/dist/abcWallet-4RS3B4ZG.js +188 -0
- package/dist/abcWallet-EBOW2RJB.js +188 -0
- package/dist/abcWallet-RS4EOJ4I.js +188 -0
- package/dist/abcWallet-SNEZVK7V.js +188 -0
- package/dist/abcWallet-TC7M2JYX.js +188 -0
- package/dist/abcWallet-VZMW2DR3.js +188 -0
- package/dist/abcWallet-XJ3WSUVI.js +188 -0
- package/dist/abcWallet-XNCBZAIQ.js +188 -0
- package/dist/chunk-6FLQAAC4.js +7213 -0
- package/dist/chunk-7GIIMIPN.js +7213 -0
- package/dist/chunk-IBFA37SC.js +7228 -0
- package/dist/chunk-O5ZOC4NJ.js +7215 -0
- package/dist/chunk-OPOAKGEX.js +7216 -0
- package/dist/chunk-OTIHVCVR.js +7213 -0
- package/dist/chunk-P77BVZZF.js +7369 -0
- package/dist/chunk-RFLXXSQH.js +7139 -0
- package/dist/components/ConfirmationModal/NonEvmConfirmationModal.css.d.ts +11 -0
- package/dist/components/ConfirmationModal/NonEvmSignConfirmationModal.d.ts +9 -0
- package/dist/components/ConfirmationModal/NonEvmTransferConfirmationModal.d.ts +9 -0
- package/dist/components/ConfirmationModal/SignConfirmationModal.css.d.ts +1 -19
- package/dist/components/ConfirmationModal/TransactionConfirmationModal.css.d.ts +1 -20
- package/dist/components/ConfirmationModal/commonStyles.css.d.ts +19 -0
- package/dist/components/ConfirmationModal/index.d.ts +2 -0
- package/dist/components/ConfirmationModal/utils.d.ts +2 -1
- package/dist/hooks/useWalletCapabilities.d.ts +2 -0
- package/dist/index.css +227 -307
- package/dist/index.d.ts +4 -2
- package/dist/index.js +2004 -1064
- package/dist/providers/SignConfirmationProvider/NonEvmConfirmationContext.d.ts +6 -0
- package/dist/providers/SignConfirmationProvider/index.d.ts +2 -1
- package/dist/providers/SignConfirmationProvider/requestParsers.d.ts +6 -1
- package/dist/providers/SignConfirmationProvider/types.d.ts +35 -1
- package/dist/wallets/capabilities/detectCapabilities.d.ts +7 -0
- package/dist/wallets/capabilities/requestWalletAction.d.ts +8 -0
- package/dist/wallets/capabilities/types.d.ts +50 -0
- package/dist/wallets/walletConnectors/abcWallet/abcApi.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.d.ts +10 -0
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +5 -5
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +9 -0
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +10 -0
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.d.ts +16 -0
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +115 -33
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.d.ts +16 -0
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +7 -7
- package/dist/wallets/walletConnectors/abcWallet/api/AuthApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/BaseApiClient.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/api/BitcoinApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/GasApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +9 -4
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/api/TransactionApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/TronApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/WalletApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/api/index.js +13 -13
- package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +5 -4
- package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/index.js +21 -21
- package/dist/wallets/walletConnectors/abcWallet/types.d.ts +31 -1
- package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
- package/dist/wallets/walletConnectors/berasigWallet/berasigWallet.js +2 -2
- package/dist/wallets/walletConnectors/bifrostWallet/bifrostWallet.js +2 -2
- package/dist/wallets/walletConnectors/binanceWallet/binanceWallet.js +2 -2
- package/dist/wallets/walletConnectors/bitgetWallet/bitgetWallet.js +2 -2
- package/dist/wallets/walletConnectors/bybitWallet/bybitWallet.js +2 -2
- package/dist/wallets/walletConnectors/chunk-2IZBLAHI.js +52 -0
- package/dist/wallets/walletConnectors/chunk-32IJ3ILH.js +71 -0
- package/dist/wallets/walletConnectors/chunk-3AX66UHT.js +479 -0
- package/dist/wallets/walletConnectors/chunk-3BVPV64G.js +36 -0
- package/dist/wallets/walletConnectors/chunk-3DGFHWI3.js +302 -0
- package/dist/wallets/walletConnectors/chunk-4FKUVQCM.js +655 -0
- package/dist/wallets/walletConnectors/chunk-56SF4VRC.js +640 -0
- package/dist/wallets/walletConnectors/chunk-5KOE7NJW.js +52 -0
- package/dist/wallets/walletConnectors/chunk-6CVXZ3ZW.js +771 -0
- package/dist/wallets/walletConnectors/chunk-6GCWEPU7.js +643 -0
- package/dist/wallets/walletConnectors/chunk-6YFP3Q2I.js +118 -0
- package/dist/wallets/walletConnectors/chunk-7EEPPULA.js +118 -0
- package/dist/wallets/walletConnectors/chunk-7QL42XTB.js +302 -0
- package/dist/wallets/walletConnectors/chunk-A7ZSPSFX.js +577 -0
- package/dist/wallets/walletConnectors/chunk-AI3CT254.js +302 -0
- package/dist/wallets/walletConnectors/chunk-AMNVH7CZ.js +151 -0
- package/dist/wallets/walletConnectors/chunk-AOREXGRM.js +350 -0
- package/dist/wallets/walletConnectors/chunk-BLO7E54F.js +302 -0
- package/dist/wallets/walletConnectors/chunk-BNRH5PYS.js +52 -0
- package/dist/wallets/walletConnectors/chunk-BOV5FXU6.js +151 -0
- package/dist/wallets/walletConnectors/chunk-BR25RFNF.js +260 -0
- package/dist/wallets/walletConnectors/chunk-BXQ2UWJ3.js +91 -0
- package/dist/wallets/walletConnectors/chunk-CAMPW7O2.js +874 -0
- package/dist/wallets/walletConnectors/chunk-CLMFCNP7.js +52 -0
- package/dist/wallets/walletConnectors/chunk-DSZOE65L.js +107 -0
- package/dist/wallets/walletConnectors/chunk-DU6RCLWT.js +272 -0
- package/dist/wallets/walletConnectors/chunk-ENN6UGGA.js +421 -0
- package/dist/wallets/walletConnectors/chunk-EXWDLN5V.js +204 -0
- package/dist/wallets/walletConnectors/chunk-FFU26Y5Y.js +272 -0
- package/dist/wallets/walletConnectors/chunk-FGS2WHVA.js +118 -0
- package/dist/wallets/walletConnectors/chunk-FJJ3QI4R.js +91 -0
- package/dist/wallets/walletConnectors/chunk-FS2OOQYF.js +204 -0
- package/dist/wallets/walletConnectors/chunk-G5X3COSW.js +205 -0
- package/dist/wallets/walletConnectors/chunk-H53R4SFZ.js +204 -0
- package/dist/wallets/walletConnectors/chunk-J4QGDATF.js +71 -0
- package/dist/wallets/walletConnectors/chunk-JIJNCMJR.js +874 -0
- package/dist/wallets/walletConnectors/chunk-JSGZYU4A.js +52 -0
- package/dist/wallets/walletConnectors/chunk-JVT7R2GZ.js +771 -0
- package/dist/wallets/walletConnectors/chunk-K3JNN5UK.js +71 -0
- package/dist/wallets/walletConnectors/chunk-KBHPY3NA.js +302 -0
- package/dist/wallets/walletConnectors/chunk-KEX6WS23.js +640 -0
- package/dist/wallets/walletConnectors/chunk-KHYKVVR7.js +52 -0
- package/dist/wallets/walletConnectors/chunk-LOL7ZZ3S.js +302 -0
- package/dist/wallets/walletConnectors/chunk-LOSXI36Y.js +479 -0
- package/dist/wallets/walletConnectors/chunk-M2U5QGM7.js +260 -0
- package/dist/wallets/walletConnectors/chunk-M73AWLIV.js +107 -0
- package/dist/wallets/walletConnectors/chunk-MAUC46AE.js +302 -0
- package/dist/wallets/walletConnectors/chunk-MBRXYEQC.js +272 -0
- package/dist/wallets/walletConnectors/chunk-MDDD4LG2.js +874 -0
- package/dist/wallets/walletConnectors/chunk-MMR2QAEU.js +642 -0
- package/dist/wallets/walletConnectors/chunk-MNZZRFUC.js +302 -0
- package/dist/wallets/walletConnectors/chunk-OIRY24PH.js +302 -0
- package/dist/wallets/walletConnectors/chunk-ORBX4JE2.js +52 -0
- package/dist/wallets/walletConnectors/chunk-OXJFFDW7.js +761 -0
- package/dist/wallets/walletConnectors/chunk-QD3PPWTN.js +272 -0
- package/dist/wallets/walletConnectors/chunk-RCIABMG5.js +259 -0
- package/dist/wallets/walletConnectors/chunk-RHC4SVLB.js +71 -0
- package/dist/wallets/walletConnectors/chunk-S2CB4KFC.js +71 -0
- package/dist/wallets/walletConnectors/chunk-S6HZD4XZ.js +302 -0
- package/dist/wallets/walletConnectors/chunk-S72LCNVX.js +272 -0
- package/dist/wallets/walletConnectors/chunk-SCWE5EEX.js +91 -0
- package/dist/wallets/walletConnectors/chunk-TKEL4D4E.js +151 -0
- package/dist/wallets/walletConnectors/chunk-TKJEMEBZ.js +71 -0
- package/dist/wallets/walletConnectors/chunk-TZ44ZREA.js +302 -0
- package/dist/wallets/walletConnectors/chunk-UGQSI3US.js +547 -0
- package/dist/wallets/walletConnectors/chunk-UU4JYY3C.js +205 -0
- package/dist/wallets/walletConnectors/chunk-V5P5BL6Z.js +302 -0
- package/dist/wallets/walletConnectors/chunk-VH6DIRPF.js +71 -0
- package/dist/wallets/walletConnectors/chunk-VPNZAMW5.js +205 -0
- package/dist/wallets/walletConnectors/chunk-W6QN6QXO.js +52 -0
- package/dist/wallets/walletConnectors/chunk-WDULICVN.js +302 -0
- package/dist/wallets/walletConnectors/chunk-WGGHGODM.js +272 -0
- package/dist/wallets/walletConnectors/chunk-XUCMTLM3.js +52 -0
- package/dist/wallets/walletConnectors/chunk-Y5WAX6WO.js +52 -0
- package/dist/wallets/walletConnectors/chunk-Y62PFBWE.js +640 -0
- package/dist/wallets/walletConnectors/chunk-Z6ABK6G6.js +107 -0
- package/dist/wallets/walletConnectors/chunk-ZCA5QSIM.js +71 -0
- package/dist/wallets/walletConnectors/chunk-ZJDZJW55.js +479 -0
- package/dist/wallets/walletConnectors/chunk-ZOF7ZDGU.js +52 -0
- package/dist/wallets/walletConnectors/chunk-ZUU57RHO.js +36 -0
- package/dist/wallets/walletConnectors/chunk-ZWFGRREM.js +36 -0
- package/dist/wallets/walletConnectors/chunk-ZY5BCHP2.js +302 -0
- package/dist/wallets/walletConnectors/clvWallet/clvWallet.js +2 -2
- package/dist/wallets/walletConnectors/coin98Wallet/coin98Wallet.js +2 -2
- package/dist/wallets/walletConnectors/coreWallet/coreWallet.js +2 -2
- package/dist/wallets/walletConnectors/foxWallet/foxWallet.js +2 -2
- package/dist/wallets/walletConnectors/frontierWallet/frontierWallet.js +2 -2
- package/dist/wallets/walletConnectors/gateWallet/gateWallet.js +2 -2
- package/dist/wallets/walletConnectors/index.js +91 -91
- package/dist/wallets/walletConnectors/iopayWallet/iopayWallet.js +2 -2
- package/dist/wallets/walletConnectors/kaiaWallet/kaiaWallet.js +2 -2
- package/dist/wallets/walletConnectors/kaikasWallet/kaikasWallet.js +2 -2
- package/dist/wallets/walletConnectors/metaMaskWallet/metaMaskWallet.js +2 -2
- package/dist/wallets/walletConnectors/okxWallet/okxWallet.js +2 -2
- package/dist/wallets/walletConnectors/rainbowWallet/rainbowWallet.js +2 -2
- package/dist/wallets/walletConnectors/roninWallet/roninWallet.js +2 -2
- package/dist/wallets/walletConnectors/safepalWallet/safepalWallet.js +2 -2
- package/dist/wallets/walletConnectors/subWallet/subWallet.js +2 -2
- package/dist/wallets/walletConnectors/tokenPocketWallet/tokenPocketWallet.js +2 -2
- package/dist/wallets/walletConnectors/trustWallet/trustWallet.js +2 -2
- package/dist/wallets/walletConnectors/zealWallet/zealWallet.js +2 -2
- package/dist/wallets/walletConnectors/zerionWallet/zerionWallet.js +2 -2
- package/package.json +11 -12
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
calculateExpiryTimestamp,
|
|
4
|
+
createAbcError,
|
|
5
|
+
isTokenExpired,
|
|
6
|
+
loadFromStorage,
|
|
7
|
+
parseApiError,
|
|
8
|
+
removeFromStorage,
|
|
9
|
+
saveToStorage
|
|
10
|
+
} from "./chunk-3AX66UHT.js";
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_HEADERS,
|
|
13
|
+
REQUEST_TIMEOUT
|
|
14
|
+
} from "./chunk-RCIABMG5.js";
|
|
15
|
+
|
|
16
|
+
// src/wallets/walletConnectors/abcWallet/api/BaseApiClient.ts
|
|
17
|
+
import { getTalkenApiClient } from "@talken/talkenkit";
|
|
18
|
+
var BaseApiClient = class {
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.accessToken = null;
|
|
21
|
+
this.refreshToken = null;
|
|
22
|
+
this.expiresAt = null;
|
|
23
|
+
this.isRefreshing = false;
|
|
24
|
+
this.refreshPromise = null;
|
|
25
|
+
this.config = config;
|
|
26
|
+
this.baseURL = config.waasUrl;
|
|
27
|
+
this.loadTokens();
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load tokens from storage
|
|
31
|
+
*/
|
|
32
|
+
loadTokens() {
|
|
33
|
+
this.accessToken = loadFromStorage("access_token" /* ACCESS_TOKEN */);
|
|
34
|
+
this.refreshToken = loadFromStorage("refresh_token" /* REFRESH_TOKEN */);
|
|
35
|
+
this.expiresAt = loadFromStorage("expires_at" /* EXPIRES_AT */);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Set tokens in client instance (useful when restoring from storage or state)
|
|
39
|
+
* Call this before making API requests if tokens are managed externally
|
|
40
|
+
*/
|
|
41
|
+
setTokens(accessToken, refreshToken, expiresAt) {
|
|
42
|
+
this.accessToken = accessToken;
|
|
43
|
+
this.refreshToken = refreshToken;
|
|
44
|
+
this.expiresAt = expiresAt;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Save tokens to storage
|
|
48
|
+
*/
|
|
49
|
+
saveTokens(accessToken, refreshToken, expiresIn) {
|
|
50
|
+
this.accessToken = accessToken;
|
|
51
|
+
this.refreshToken = refreshToken;
|
|
52
|
+
this.expiresAt = calculateExpiryTimestamp(expiresIn);
|
|
53
|
+
saveToStorage("access_token" /* ACCESS_TOKEN */, accessToken);
|
|
54
|
+
saveToStorage("refresh_token" /* REFRESH_TOKEN */, refreshToken);
|
|
55
|
+
saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Clear tokens
|
|
59
|
+
*/
|
|
60
|
+
clearTokens() {
|
|
61
|
+
this.accessToken = null;
|
|
62
|
+
this.refreshToken = null;
|
|
63
|
+
this.expiresAt = null;
|
|
64
|
+
removeFromStorage("access_token" /* ACCESS_TOKEN */);
|
|
65
|
+
removeFromStorage("refresh_token" /* REFRESH_TOKEN */);
|
|
66
|
+
removeFromStorage("expires_at" /* EXPIRES_AT */);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Check if access token is expired
|
|
70
|
+
*/
|
|
71
|
+
isTokenExpired() {
|
|
72
|
+
return isTokenExpired(this.expiresAt);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Get current access token
|
|
76
|
+
*/
|
|
77
|
+
getAccessToken() {
|
|
78
|
+
return this.accessToken;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Set access token manually
|
|
82
|
+
*/
|
|
83
|
+
setAccessToken(token) {
|
|
84
|
+
this.accessToken = token;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get base URL
|
|
88
|
+
*/
|
|
89
|
+
getBaseURL() {
|
|
90
|
+
return this.baseURL;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get configuration
|
|
94
|
+
*/
|
|
95
|
+
getConfig() {
|
|
96
|
+
return this.config;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Refresh access token via TalkenApiClient
|
|
100
|
+
*/
|
|
101
|
+
async refreshAccessToken() {
|
|
102
|
+
if (this.isRefreshing) {
|
|
103
|
+
if (this.refreshPromise) {
|
|
104
|
+
await this.refreshPromise;
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const api = getTalkenApiClient();
|
|
109
|
+
if (api) {
|
|
110
|
+
this.isRefreshing = true;
|
|
111
|
+
this.refreshPromise = (async () => {
|
|
112
|
+
try {
|
|
113
|
+
const res = await api.auth.refresh();
|
|
114
|
+
this.saveTokens(res.accessToken, res.refreshToken, res.expiresIn);
|
|
115
|
+
} finally {
|
|
116
|
+
this.isRefreshing = false;
|
|
117
|
+
this.refreshPromise = null;
|
|
118
|
+
}
|
|
119
|
+
})();
|
|
120
|
+
await this.refreshPromise;
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!this.refreshToken) {
|
|
124
|
+
throw createAbcError(
|
|
125
|
+
"TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
|
|
126
|
+
"No refresh token available"
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
throw createAbcError(
|
|
130
|
+
"TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
|
|
131
|
+
"TalkenApiClient not initialized for token refresh"
|
|
132
|
+
);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Make HTTP request with automatic token refresh
|
|
136
|
+
*/
|
|
137
|
+
async request(endpoint, options = {}) {
|
|
138
|
+
const {
|
|
139
|
+
method = "GET",
|
|
140
|
+
body,
|
|
141
|
+
headers = {},
|
|
142
|
+
skipAuth = false,
|
|
143
|
+
isRetry = false,
|
|
144
|
+
contentType = "form"
|
|
145
|
+
// Default to form-encoded for backward compatibility
|
|
146
|
+
} = options;
|
|
147
|
+
if (!skipAuth && this.isTokenExpired() && this.refreshToken) {
|
|
148
|
+
await this.refreshAccessToken();
|
|
149
|
+
}
|
|
150
|
+
const url = `${this.baseURL}${endpoint}`;
|
|
151
|
+
const requestHeaders = {
|
|
152
|
+
...DEFAULT_HEADERS,
|
|
153
|
+
...headers
|
|
154
|
+
};
|
|
155
|
+
if (contentType === "json") {
|
|
156
|
+
requestHeaders["Content-Type"] = "application/json";
|
|
157
|
+
requestHeaders["Accept"] = "application/json";
|
|
158
|
+
}
|
|
159
|
+
if (this.config.environment === "production") {
|
|
160
|
+
requestHeaders["User-Agent"] = "Android";
|
|
161
|
+
}
|
|
162
|
+
if (!skipAuth && this.accessToken) {
|
|
163
|
+
requestHeaders.Authorization = `Bearer ${this.accessToken}`;
|
|
164
|
+
}
|
|
165
|
+
if (this.config.apiKey) {
|
|
166
|
+
requestHeaders["X-API-Key"] = this.config.apiKey;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
const controller = new AbortController();
|
|
170
|
+
const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
|
|
171
|
+
const requestBody = body ? contentType === "json" ? JSON.stringify(body) : new URLSearchParams(body).toString() : void 0;
|
|
172
|
+
const response = await fetch(url, {
|
|
173
|
+
method,
|
|
174
|
+
headers: requestHeaders,
|
|
175
|
+
body: requestBody,
|
|
176
|
+
signal: controller.signal
|
|
177
|
+
});
|
|
178
|
+
clearTimeout(timeoutId);
|
|
179
|
+
const text = await response.text();
|
|
180
|
+
let data;
|
|
181
|
+
if (text) {
|
|
182
|
+
try {
|
|
183
|
+
data = JSON.parse(text);
|
|
184
|
+
} catch (parseError) {
|
|
185
|
+
console.error("[BaseApiClient] \u274C JSON parse error:", {
|
|
186
|
+
url,
|
|
187
|
+
method,
|
|
188
|
+
status: response.status,
|
|
189
|
+
responseText: text.substring(0, 200)
|
|
190
|
+
});
|
|
191
|
+
throw createAbcError(
|
|
192
|
+
"UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
|
|
193
|
+
"Invalid JSON response from server",
|
|
194
|
+
{ text, parseError }
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
} else {
|
|
198
|
+
data = { status: "success" };
|
|
199
|
+
}
|
|
200
|
+
if (response.status === 401 && !skipAuth && this.refreshToken && !isRetry) {
|
|
201
|
+
try {
|
|
202
|
+
await this.refreshAccessToken();
|
|
203
|
+
return await this.request(endpoint, {
|
|
204
|
+
...options,
|
|
205
|
+
isRetry: true
|
|
206
|
+
});
|
|
207
|
+
} catch (refreshError) {
|
|
208
|
+
console.error("Token refresh failed:", refreshError);
|
|
209
|
+
throw parseApiError({
|
|
210
|
+
response: {
|
|
211
|
+
status: response.status,
|
|
212
|
+
data
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!response.ok) {
|
|
218
|
+
if (response.status !== 409) {
|
|
219
|
+
console.error("[BaseApiClient] \u274C API Error:", {
|
|
220
|
+
url,
|
|
221
|
+
method,
|
|
222
|
+
status: response.status,
|
|
223
|
+
statusText: response.statusText,
|
|
224
|
+
data
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
throw parseApiError({
|
|
228
|
+
response: {
|
|
229
|
+
status: response.status,
|
|
230
|
+
data
|
|
231
|
+
}
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
return data;
|
|
235
|
+
} catch (error) {
|
|
236
|
+
if (error.response?.status !== 409 && error.code !== "WALLET_ALREADY_EXISTS") {
|
|
237
|
+
console.error("[BaseApiClient] \u274C Request failed:", {
|
|
238
|
+
url,
|
|
239
|
+
method,
|
|
240
|
+
error: error.message
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
if (error.name === "AbortError") {
|
|
244
|
+
throw createAbcError(
|
|
245
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
246
|
+
"Request timeout",
|
|
247
|
+
error
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
if (error.code && error.message) {
|
|
251
|
+
throw error;
|
|
252
|
+
}
|
|
253
|
+
throw parseApiError(error);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if user is authenticated
|
|
258
|
+
*/
|
|
259
|
+
isAuthenticated() {
|
|
260
|
+
return !!this.accessToken && !this.isTokenExpired();
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Logout (clear tokens)
|
|
264
|
+
*/
|
|
265
|
+
async logout() {
|
|
266
|
+
this.clearTokens();
|
|
267
|
+
}
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
export {
|
|
271
|
+
BaseApiClient
|
|
272
|
+
};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
BaseApiClient
|
|
4
|
+
} from "./chunk-MBRXYEQC.js";
|
|
5
|
+
import {
|
|
6
|
+
getSolanaNetwork
|
|
7
|
+
} from "./chunk-O4AU63LK.js";
|
|
8
|
+
import {
|
|
9
|
+
createAbcError
|
|
10
|
+
} from "./chunk-LOSXI36Y.js";
|
|
11
|
+
import {
|
|
12
|
+
DEFAULT_HEADERS
|
|
13
|
+
} from "./chunk-BR25RFNF.js";
|
|
14
|
+
|
|
15
|
+
// src/wallets/walletConnectors/abcWallet/api/WalletApi.ts
|
|
16
|
+
import { getTalkenApiClient } from "@talken/talkenkit";
|
|
17
|
+
var WalletApi = class extends BaseApiClient {
|
|
18
|
+
/**
|
|
19
|
+
* Generate or recover EVM wallet
|
|
20
|
+
* Delegates to TalkenApiClient unified wallet API
|
|
21
|
+
*/
|
|
22
|
+
async generateOrRecoverWallet(params) {
|
|
23
|
+
const api = getTalkenApiClient();
|
|
24
|
+
if (!api)
|
|
25
|
+
throw new Error("TalkenApiClient not initialized");
|
|
26
|
+
const response = await api.wallet.generate(params.pin);
|
|
27
|
+
const evm = response.evm;
|
|
28
|
+
return {
|
|
29
|
+
address: evm.address || "",
|
|
30
|
+
keyId: evm.keyId || "",
|
|
31
|
+
encryptedShare: evm.encryptedShare || "",
|
|
32
|
+
uid: evm.uid,
|
|
33
|
+
sid: evm.sid,
|
|
34
|
+
pubkey: evm.pubkey || null
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Get wallet info
|
|
39
|
+
* Uses TalkenApiClient unified wallet info endpoint
|
|
40
|
+
*/
|
|
41
|
+
async getWalletInfo(_uid) {
|
|
42
|
+
const api = getTalkenApiClient();
|
|
43
|
+
if (!api)
|
|
44
|
+
throw new Error("TalkenApiClient not initialized");
|
|
45
|
+
return api.wallet.getInfo();
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generate or recover Solana wallet (Ed25519)
|
|
49
|
+
*/
|
|
50
|
+
async generateSolanaWallet(pin, isRecover = false) {
|
|
51
|
+
const url = `${this.baseURL}/v3/wallet/${isRecover ? "recover" : "generate"}`;
|
|
52
|
+
const response = await fetch(url, {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: {
|
|
55
|
+
...DEFAULT_HEADERS,
|
|
56
|
+
...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
|
|
57
|
+
},
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
curve: "ed25519",
|
|
60
|
+
password: pin
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
const data = await response.json();
|
|
64
|
+
if (!response.ok || data.status !== "success") {
|
|
65
|
+
throw createAbcError(
|
|
66
|
+
"WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
|
|
67
|
+
"Failed to generate Solana wallet",
|
|
68
|
+
data
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
const result = data.result;
|
|
72
|
+
const solanaNetwork = getSolanaNetwork();
|
|
73
|
+
const addressResult = await this.getSolanaAddress(
|
|
74
|
+
result.public_key,
|
|
75
|
+
solanaNetwork
|
|
76
|
+
);
|
|
77
|
+
return {
|
|
78
|
+
uid: result.uid || "",
|
|
79
|
+
sessionId: result.share_id,
|
|
80
|
+
shareId: result.share_id,
|
|
81
|
+
publicKey: result.public_key,
|
|
82
|
+
address: addressResult,
|
|
83
|
+
keyId: result.key_id || result.share_id,
|
|
84
|
+
encryptedShare: result.encrypted_share || "",
|
|
85
|
+
network: solanaNetwork
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get Solana address from Ed25519 public key
|
|
90
|
+
*/
|
|
91
|
+
async getSolanaAddress(publicKey, network) {
|
|
92
|
+
const url = `${this.baseURL}/wapi/v2/solana/wallet/getAddress`;
|
|
93
|
+
const response = await fetch(url, {
|
|
94
|
+
method: "POST",
|
|
95
|
+
headers: {
|
|
96
|
+
...DEFAULT_HEADERS,
|
|
97
|
+
...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
|
|
98
|
+
},
|
|
99
|
+
body: JSON.stringify({
|
|
100
|
+
network,
|
|
101
|
+
publicKey
|
|
102
|
+
})
|
|
103
|
+
});
|
|
104
|
+
const data = await response.json();
|
|
105
|
+
if (!response.ok || data.status !== "success") {
|
|
106
|
+
throw createAbcError(
|
|
107
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
108
|
+
"Failed to get Solana address",
|
|
109
|
+
data
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
return data.result?.data?.address;
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
export {
|
|
117
|
+
WalletApi
|
|
118
|
+
};
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
BaseApiClient
|
|
4
|
+
} from "./chunk-MBRXYEQC.js";
|
|
5
|
+
import {
|
|
6
|
+
createAbcError
|
|
7
|
+
} from "./chunk-LOSXI36Y.js";
|
|
8
|
+
import {
|
|
9
|
+
ABC_ENDPOINTS
|
|
10
|
+
} from "./chunk-BR25RFNF.js";
|
|
11
|
+
|
|
12
|
+
// src/wallets/walletConnectors/abcWallet/api/TransactionApi.ts
|
|
13
|
+
var TransactionApi = class extends BaseApiClient {
|
|
14
|
+
/**
|
|
15
|
+
* Get transaction count (nonce)
|
|
16
|
+
*/
|
|
17
|
+
async getTransactionCount(address, network, block = "latest") {
|
|
18
|
+
const nonceUrl = `${this.baseURL}${ABC_ENDPOINTS.TRANSACTION_COUNT}?address=${address}&network=${network}&block=${block}`;
|
|
19
|
+
const response = await fetch(nonceUrl, {
|
|
20
|
+
method: "GET",
|
|
21
|
+
headers: {
|
|
22
|
+
...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
if (response.ok) {
|
|
26
|
+
const data = await response.json();
|
|
27
|
+
return Number.parseInt(data.result, 16);
|
|
28
|
+
}
|
|
29
|
+
throw createAbcError(
|
|
30
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
31
|
+
"Failed to get transaction count"
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Get suggested gas fees for EIP-1559
|
|
36
|
+
*/
|
|
37
|
+
async getSuggestedGasFees(network) {
|
|
38
|
+
const url = `${this.baseURL}${ABC_ENDPOINTS.GAS_SUGGESTED_FEES}?network=${network}`;
|
|
39
|
+
const response = await fetch(url, {
|
|
40
|
+
method: "GET",
|
|
41
|
+
headers: {
|
|
42
|
+
...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (response.ok) {
|
|
46
|
+
const data = await response.json();
|
|
47
|
+
return data;
|
|
48
|
+
}
|
|
49
|
+
throw createAbcError(
|
|
50
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
51
|
+
"Failed to get suggested gas fees"
|
|
52
|
+
);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Estimate gas limit for EIP-1559 transaction
|
|
56
|
+
*/
|
|
57
|
+
async estimateGas(params) {
|
|
58
|
+
const estimateBody = new URLSearchParams({
|
|
59
|
+
network: params.network,
|
|
60
|
+
to: params.to || "0x",
|
|
61
|
+
...params.from ? { from: params.from } : {},
|
|
62
|
+
...params.value ? { value: params.value } : {},
|
|
63
|
+
...params.data && params.data !== "0x" ? { data: params.data } : {},
|
|
64
|
+
...params.maxFeePerGas ? { maxFeePerGas: params.maxFeePerGas } : {},
|
|
65
|
+
...params.maxPriorityFeePerGas ? { maxPriorityFeePerGas: params.maxPriorityFeePerGas } : {}
|
|
66
|
+
});
|
|
67
|
+
const url = `${this.baseURL}${ABC_ENDPOINTS.GAS_ESTIMATE_EIP1559}`;
|
|
68
|
+
const response = await fetch(url, {
|
|
69
|
+
method: "POST",
|
|
70
|
+
headers: {
|
|
71
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
|
72
|
+
...this.accessToken ? { Authorization: `Bearer ${this.accessToken}` } : {}
|
|
73
|
+
},
|
|
74
|
+
body: estimateBody.toString()
|
|
75
|
+
});
|
|
76
|
+
const data = await response.json();
|
|
77
|
+
if (response.ok && data.result) {
|
|
78
|
+
return data.result;
|
|
79
|
+
}
|
|
80
|
+
const fallbackGasLimit = "0x2dc6c0";
|
|
81
|
+
console.warn("\u26A0\uFE0F Gas estimate failed, using fallback:", {
|
|
82
|
+
error: data.errorMessage || data.msg,
|
|
83
|
+
fallbackGasLimit
|
|
84
|
+
});
|
|
85
|
+
return fallbackGasLimit;
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
export {
|
|
90
|
+
TransactionApi
|
|
91
|
+
};
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
BaseApiClient
|
|
4
|
+
} from "./chunk-QD3PPWTN.js";
|
|
5
|
+
import {
|
|
6
|
+
createAbcError
|
|
7
|
+
} from "./chunk-ZJDZJW55.js";
|
|
8
|
+
|
|
9
|
+
// src/wallets/walletConnectors/abcWallet/api/AuthApi.ts
|
|
10
|
+
import { getTalkenApiClient } from "@talken/talkenkit";
|
|
11
|
+
var AuthApi = class extends BaseApiClient {
|
|
12
|
+
/**
|
|
13
|
+
* Login with email and password
|
|
14
|
+
*/
|
|
15
|
+
async loginWithEmail(email, password) {
|
|
16
|
+
const api = getTalkenApiClient();
|
|
17
|
+
if (api) {
|
|
18
|
+
const res = await api.auth.loginWithPassword(email, password);
|
|
19
|
+
this.saveTokens(res.accessToken, res.refreshToken, res.expiresIn);
|
|
20
|
+
return {
|
|
21
|
+
uid: res.uid,
|
|
22
|
+
email: res.email,
|
|
23
|
+
accessToken: res.accessToken,
|
|
24
|
+
refreshToken: res.refreshToken,
|
|
25
|
+
expiresIn: res.expiresIn
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
throw createAbcError(
|
|
29
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
30
|
+
"TalkenApiClient not initialized"
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Login with email and OTP
|
|
35
|
+
* NOTE: OTP login removed from server — use password login instead.
|
|
36
|
+
* This method kept for backward compatibility, delegates to loginWithEmail.
|
|
37
|
+
*/
|
|
38
|
+
async loginWithOtp(email, otpCode) {
|
|
39
|
+
return this.loginWithEmail(email, otpCode);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Login with social provider (Google, Apple, Kakao)
|
|
43
|
+
* Routes through TalkenApiClient → POST /wallet/auth { action: 'login', method: 'sns' }
|
|
44
|
+
*/
|
|
45
|
+
async loginWithSocial(provider, token, _email) {
|
|
46
|
+
const api = getTalkenApiClient();
|
|
47
|
+
if (api) {
|
|
48
|
+
const res = await api.auth.loginWithSns({
|
|
49
|
+
token,
|
|
50
|
+
service: provider
|
|
51
|
+
});
|
|
52
|
+
this.saveTokens(res.accessToken, res.refreshToken, res.expiresIn);
|
|
53
|
+
return {
|
|
54
|
+
uid: res.uid,
|
|
55
|
+
email: res.email,
|
|
56
|
+
accessToken: res.accessToken,
|
|
57
|
+
refreshToken: res.refreshToken,
|
|
58
|
+
expiresIn: res.expiresIn
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
throw createAbcError(
|
|
62
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
63
|
+
"TalkenApiClient not initialized"
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Request OTP code for email
|
|
68
|
+
*/
|
|
69
|
+
async requestOtpCode(email) {
|
|
70
|
+
const api = getTalkenApiClient();
|
|
71
|
+
if (api) {
|
|
72
|
+
await api.auth.sendOtp(email);
|
|
73
|
+
return { sent: true, expiresIn: 300 };
|
|
74
|
+
}
|
|
75
|
+
throw createAbcError(
|
|
76
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
77
|
+
"TalkenApiClient not initialized"
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Verify OTP code
|
|
82
|
+
*/
|
|
83
|
+
async verifyOtpCode(email, code) {
|
|
84
|
+
const api = getTalkenApiClient();
|
|
85
|
+
if (api) {
|
|
86
|
+
await api.auth.verifyOtp(email, code);
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
throw createAbcError(
|
|
90
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
91
|
+
"TalkenApiClient not initialized"
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if email already exists
|
|
96
|
+
*/
|
|
97
|
+
async emailCheck(_email) {
|
|
98
|
+
const api = getTalkenApiClient();
|
|
99
|
+
if (api) {
|
|
100
|
+
const res = await api.auth.checkEmail(_email);
|
|
101
|
+
return {
|
|
102
|
+
status: "success",
|
|
103
|
+
message: { code: res.code || 0, text: res.message || "" }
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
throw createAbcError(
|
|
107
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
108
|
+
"TalkenApiClient not initialized"
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Send OTP code to email for signup
|
|
113
|
+
*/
|
|
114
|
+
async sendOtpCode(_email) {
|
|
115
|
+
const api = getTalkenApiClient();
|
|
116
|
+
if (api) {
|
|
117
|
+
await api.auth.sendOtp(_email);
|
|
118
|
+
return { status: "success", data: { sent: true } };
|
|
119
|
+
}
|
|
120
|
+
throw createAbcError(
|
|
121
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
122
|
+
"TalkenApiClient not initialized"
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Verify OTP code for signup
|
|
127
|
+
*/
|
|
128
|
+
async verifyOtpCodeSignup(email, code) {
|
|
129
|
+
const api = getTalkenApiClient();
|
|
130
|
+
if (api) {
|
|
131
|
+
await api.auth.verifyOtp(email, code);
|
|
132
|
+
return {
|
|
133
|
+
status: "success",
|
|
134
|
+
data: { verified: true }
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
throw createAbcError(
|
|
138
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
139
|
+
"TalkenApiClient not initialized"
|
|
140
|
+
);
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Register new user with password
|
|
144
|
+
*/
|
|
145
|
+
async registerUser(params) {
|
|
146
|
+
const api = getTalkenApiClient();
|
|
147
|
+
if (api) {
|
|
148
|
+
const res = await api.auth.register({
|
|
149
|
+
email: params.username,
|
|
150
|
+
password: params.password,
|
|
151
|
+
otpCode: params.emailCode,
|
|
152
|
+
name: params.name
|
|
153
|
+
});
|
|
154
|
+
this.saveTokens(res.accessToken, res.refreshToken, res.expiresIn);
|
|
155
|
+
return { status: "success", data: res };
|
|
156
|
+
}
|
|
157
|
+
throw createAbcError(
|
|
158
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
159
|
+
"TalkenApiClient not initialized"
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Register new SNS user (email-based registration with OTP, no password)
|
|
164
|
+
*/
|
|
165
|
+
async registerSnsUser(params) {
|
|
166
|
+
const api = getTalkenApiClient();
|
|
167
|
+
if (api) {
|
|
168
|
+
const res = await api.auth.register({
|
|
169
|
+
email: params.username,
|
|
170
|
+
password: "",
|
|
171
|
+
otpCode: params.sixCode,
|
|
172
|
+
name: params.name
|
|
173
|
+
});
|
|
174
|
+
this.saveTokens(res.accessToken, res.refreshToken, res.expiresIn);
|
|
175
|
+
return { status: "success", data: res };
|
|
176
|
+
}
|
|
177
|
+
throw createAbcError(
|
|
178
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
179
|
+
"TalkenApiClient not initialized"
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Reset/Set password for existing user
|
|
184
|
+
*/
|
|
185
|
+
async resetPassword(params) {
|
|
186
|
+
const api = getTalkenApiClient();
|
|
187
|
+
if (api) {
|
|
188
|
+
const res = await api.auth.resetPassword(
|
|
189
|
+
params.username,
|
|
190
|
+
params.password,
|
|
191
|
+
params.emailCode
|
|
192
|
+
);
|
|
193
|
+
return { status: "success", data: res };
|
|
194
|
+
}
|
|
195
|
+
throw createAbcError(
|
|
196
|
+
"NETWORK_ERROR" /* NETWORK_ERROR */,
|
|
197
|
+
"TalkenApiClient not initialized"
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
export {
|
|
203
|
+
AuthApi
|
|
204
|
+
};
|