@talken/talkenkit 2.5.0 → 2.5.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.
- package/dist/{AbcCredentialManager-DDHLW2IH.js → AbcCredentialManager-5W3B7GI4.js} +1 -1
- package/dist/{abcWallet-5GTT47V6.js → abcWallet-O5IRLUXL.js} +2 -2
- package/dist/{chunk-ALBABQ53.js → chunk-PN6K4CMZ.js} +4 -1
- package/dist/{chunk-REVMSQIO.js → chunk-UHZL3WSM.js} +465 -58
- package/dist/components/TransactionResultModal/TransactionResultModal.css.d.ts +17 -0
- package/dist/components/TransactionResultModal/TransactionResultModal.d.ts +9 -0
- package/dist/index.css +138 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +1344 -980
- package/dist/providers/TransactionResultProvider/TransactionResultContext.d.ts +6 -0
- package/dist/providers/TransactionResultProvider/TransactionResultProvider.d.ts +7 -0
- package/dist/providers/TransactionResultProvider/TransactionResultSingleton.d.ts +16 -0
- package/dist/providers/TransactionResultProvider/index.d.ts +4 -0
- package/dist/providers/TransactionResultProvider/types.d.ts +14 -0
- package/dist/wallets/walletConnectors/abcWallet/AbcCredentialManager.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/AbcEvmAutoConnector.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.d.ts +29 -3
- package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.js +4 -4
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +8 -8
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +8 -0
- package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +5 -5
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +1 -0
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +8 -8
- package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.d.ts +1 -0
- package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +9 -9
- package/dist/wallets/walletConnectors/abcWallet/api/ConfigApi.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +25 -0
- package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/api/TokenApi.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +3 -3
- package/dist/wallets/walletConnectors/abcWallet/api/index.js +9 -9
- package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +3 -0
- package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
- package/dist/wallets/walletConnectors/abcWallet/index.d.ts +1 -1
- package/dist/wallets/walletConnectors/abcWallet/index.js +34 -34
- package/dist/wallets/walletConnectors/abcWallet/sessionUtils.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/types.d.ts +9 -0
- package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
- package/dist/wallets/walletConnectors/abcWallet/walletGeneration.js +3 -3
- package/dist/wallets/walletConnectors/{chunk-VDWJ3NQ5.js → chunk-25ZDAJ3L.js} +1 -1
- package/dist/wallets/walletConnectors/chunk-4JZPP3S7.js +380 -0
- package/dist/wallets/walletConnectors/{chunk-HWXOTEC3.js → chunk-4YEALKXG.js} +66 -16
- package/dist/wallets/walletConnectors/{chunk-IN3HEGZM.js → chunk-645DT4TS.js} +46 -5
- package/dist/wallets/walletConnectors/{chunk-QSP2A4LA.js → chunk-6TAU7OQK.js} +3 -3
- package/dist/wallets/walletConnectors/{chunk-MO2AXXLI.js → chunk-FKI5AZVH.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-JADQLTFW.js → chunk-H2AZTZMM.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-NULM3THX.js → chunk-HWRZGGGN.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-BHEVY4QY.js → chunk-KIYXONNH.js} +35 -2
- package/dist/wallets/walletConnectors/{chunk-TQHS6APN.js → chunk-L6FCF3FH.js} +89 -7
- package/dist/wallets/walletConnectors/{chunk-ACLPF2UW.js → chunk-LIGH2LEU.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-K66HU6GX.js → chunk-OASBABPG.js} +15 -1
- package/dist/wallets/walletConnectors/{chunk-A66MTFML.js → chunk-PF65YS3T.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-6WF4SXLB.js → chunk-QKK3OPQA.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-3LF7FVL6.js → chunk-RGYZNNB6.js} +1 -1
- package/dist/wallets/walletConnectors/{chunk-DPTDOCWL.js → chunk-RX2VOIUB.js} +4 -1
- package/dist/wallets/walletConnectors/{chunk-YV6IZWGE.js → chunk-URS2KVYK.js} +45 -2
- package/dist/wallets/walletConnectors/{chunk-BXH3GDX5.js → chunk-YKFI6ZGM.js} +1 -1
- package/dist/wallets/walletConnectors/index.js +36 -36
- package/package.json +1 -1
- package/dist/wallets/walletConnectors/chunk-S2SQYPGR.js +0 -220
|
@@ -887,6 +887,7 @@ export interface TalkenTxEvmRequest {
|
|
|
887
887
|
maxFeePerGas?: string;
|
|
888
888
|
maxPriorityFeePerGas?: string;
|
|
889
889
|
email?: string;
|
|
890
|
+
waitForReceipt?: boolean;
|
|
890
891
|
}
|
|
891
892
|
export interface TalkenTxSvmRequest {
|
|
892
893
|
toAddress: string;
|
|
@@ -897,6 +898,7 @@ export interface TalkenTxSvmRequest {
|
|
|
897
898
|
mintAddress?: string;
|
|
898
899
|
amount?: string;
|
|
899
900
|
decimals?: number;
|
|
901
|
+
waitForConfirmation?: boolean;
|
|
900
902
|
}
|
|
901
903
|
export type TalkenBtcNetwork = 'bitcoin' | 'bitcoin_testnet';
|
|
902
904
|
export type TalkenBtcAction = 'transfer' | 'generate' | 'signHash' | 'finalize';
|
|
@@ -958,9 +960,16 @@ export interface TalkenTxTvmRequest {
|
|
|
958
960
|
confirmMaxAttempts?: number;
|
|
959
961
|
email?: string;
|
|
960
962
|
}
|
|
963
|
+
export interface TalkenTxReceipt {
|
|
964
|
+
status: number | null;
|
|
965
|
+
blockNumber: number | null;
|
|
966
|
+
gasUsed: string | null;
|
|
967
|
+
}
|
|
961
968
|
export interface TalkenTxResponse {
|
|
962
969
|
txHash: string;
|
|
963
970
|
rawTransaction?: string;
|
|
971
|
+
receipt?: TalkenTxReceipt;
|
|
972
|
+
confirmation?: any;
|
|
964
973
|
}
|
|
965
974
|
export interface TalkenGasEstimateRequest {
|
|
966
975
|
network: string;
|
|
@@ -16,9 +16,9 @@ import {
|
|
|
16
16
|
saveToStorage,
|
|
17
17
|
validateEmail,
|
|
18
18
|
validatePin
|
|
19
|
-
} from "../chunk-
|
|
19
|
+
} from "../chunk-PF65YS3T.js";
|
|
20
20
|
import "../chunk-4P3SPC44.js";
|
|
21
|
-
import "../chunk-
|
|
21
|
+
import "../chunk-RX2VOIUB.js";
|
|
22
22
|
export {
|
|
23
23
|
calculateExpiryTimestamp,
|
|
24
24
|
clearAuthState,
|
|
@@ -3,11 +3,11 @@ import {
|
|
|
3
3
|
generateMpcWallets,
|
|
4
4
|
recoverMpcWallets,
|
|
5
5
|
validateMpcWallets
|
|
6
|
-
} from "../chunk-
|
|
6
|
+
} from "../chunk-H2AZTZMM.js";
|
|
7
7
|
import "../chunk-O4AU63LK.js";
|
|
8
8
|
import "../chunk-4P3SPC44.js";
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-
|
|
9
|
+
import "../chunk-QKK3OPQA.js";
|
|
10
|
+
import "../chunk-RX2VOIUB.js";
|
|
11
11
|
export {
|
|
12
12
|
generateMpcWallets,
|
|
13
13
|
recoverMpcWallets,
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
getChainKey,
|
|
4
|
+
getNetworkName
|
|
5
|
+
} from "./chunk-OASBABPG.js";
|
|
6
|
+
import {
|
|
7
|
+
hexToNumber,
|
|
8
|
+
numberToHex
|
|
9
|
+
} from "./chunk-PF65YS3T.js";
|
|
10
|
+
|
|
11
|
+
// src/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.ts
|
|
12
|
+
var EventEmitter = class {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.events = /* @__PURE__ */ new Map();
|
|
15
|
+
}
|
|
16
|
+
on(event, listener) {
|
|
17
|
+
if (!this.events.has(event))
|
|
18
|
+
this.events.set(event, []);
|
|
19
|
+
this.events.get(event).push(listener);
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
off(event, listener) {
|
|
23
|
+
const listeners = this.events.get(event);
|
|
24
|
+
if (listeners) {
|
|
25
|
+
const idx = listeners.indexOf(listener);
|
|
26
|
+
if (idx !== -1)
|
|
27
|
+
listeners.splice(idx, 1);
|
|
28
|
+
}
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
removeListener(event, listener) {
|
|
32
|
+
return this.off(event, listener);
|
|
33
|
+
}
|
|
34
|
+
emit(event, ...args) {
|
|
35
|
+
const listeners = this.events.get(event);
|
|
36
|
+
if (listeners) {
|
|
37
|
+
for (const listener of listeners)
|
|
38
|
+
listener(...args);
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
removeAllListeners(event) {
|
|
44
|
+
if (event)
|
|
45
|
+
this.events.delete(event);
|
|
46
|
+
else
|
|
47
|
+
this.events.clear();
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
var ErrorCode = {
|
|
52
|
+
USER_REJECTED: 4001,
|
|
53
|
+
UNAUTHORIZED: 4100,
|
|
54
|
+
UNSUPPORTED_METHOD: 4200,
|
|
55
|
+
DISCONNECTED: 4900,
|
|
56
|
+
INVALID_PARAMS: -32602,
|
|
57
|
+
INTERNAL_ERROR: -32603
|
|
58
|
+
};
|
|
59
|
+
var ProviderRpcError = class extends Error {
|
|
60
|
+
constructor(code, message, data) {
|
|
61
|
+
super(message);
|
|
62
|
+
this.code = code;
|
|
63
|
+
this.data = data;
|
|
64
|
+
this.name = "ProviderRpcError";
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var AbcAccessKeyProvider = class extends EventEmitter {
|
|
68
|
+
constructor(accessKey, apiBaseUrl) {
|
|
69
|
+
super();
|
|
70
|
+
this.wallet = null;
|
|
71
|
+
this.chainId = 1;
|
|
72
|
+
this.connected = false;
|
|
73
|
+
this.accessKey = accessKey;
|
|
74
|
+
this.apiBaseUrl = apiBaseUrl || (typeof window !== "undefined" ? window.__TALKEN_API_URL__ || "" : "");
|
|
75
|
+
}
|
|
76
|
+
// ── Wallet management ─────────────────────────────────────
|
|
77
|
+
setWallet(wallet) {
|
|
78
|
+
this.wallet = wallet;
|
|
79
|
+
this.chainId = wallet.chainId || 1;
|
|
80
|
+
this.connected = true;
|
|
81
|
+
}
|
|
82
|
+
clearWallet() {
|
|
83
|
+
this.wallet = null;
|
|
84
|
+
this.connected = false;
|
|
85
|
+
}
|
|
86
|
+
isConnected() {
|
|
87
|
+
return this.connected && !!this.wallet;
|
|
88
|
+
}
|
|
89
|
+
getWallet() {
|
|
90
|
+
return this.wallet;
|
|
91
|
+
}
|
|
92
|
+
getChainId() {
|
|
93
|
+
return this.chainId;
|
|
94
|
+
}
|
|
95
|
+
setAccessKey(key) {
|
|
96
|
+
this.accessKey = key;
|
|
97
|
+
}
|
|
98
|
+
// ── EIP-1193 request ──────────────────────────────────────
|
|
99
|
+
async request(args) {
|
|
100
|
+
const { method, params } = args;
|
|
101
|
+
switch (method) {
|
|
102
|
+
case "eth_requestAccounts":
|
|
103
|
+
case "eth_accounts":
|
|
104
|
+
return this.wallet ? [this.wallet.address] : [];
|
|
105
|
+
case "eth_chainId":
|
|
106
|
+
return numberToHex(this.chainId);
|
|
107
|
+
case "wallet_switchEthereumChain": {
|
|
108
|
+
const p = params?.[0];
|
|
109
|
+
if (p?.chainId) {
|
|
110
|
+
this.chainId = hexToNumber(p.chainId);
|
|
111
|
+
this.emit("chainChanged", numberToHex(this.chainId));
|
|
112
|
+
}
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
case "eth_sendTransaction":
|
|
116
|
+
return this.sendTransaction(params);
|
|
117
|
+
case "personal_sign":
|
|
118
|
+
return this.personalSign(params);
|
|
119
|
+
case "eth_signTypedData":
|
|
120
|
+
case "eth_signTypedData_v4":
|
|
121
|
+
return this.signTypedData(params);
|
|
122
|
+
case "eth_signAuthorization":
|
|
123
|
+
return this.signAuthorization(params);
|
|
124
|
+
case "eth_estimateGas":
|
|
125
|
+
return this.estimateGas(params);
|
|
126
|
+
case "eth_getTransactionCount":
|
|
127
|
+
return this.getTransactionCount(params);
|
|
128
|
+
case "eth_call":
|
|
129
|
+
return this.ethCall(params);
|
|
130
|
+
case "eth_getBalance":
|
|
131
|
+
return this.getBalance(params);
|
|
132
|
+
case "wallet_getCapabilities":
|
|
133
|
+
return {
|
|
134
|
+
supportsTypedDataV4: true,
|
|
135
|
+
supports7702Authorization: true,
|
|
136
|
+
supports5792Batch: false,
|
|
137
|
+
supportsPaymasterService: false,
|
|
138
|
+
supportsPermit2RelayHints: true,
|
|
139
|
+
walletType: "abc-embedded"
|
|
140
|
+
};
|
|
141
|
+
default:
|
|
142
|
+
throw new ProviderRpcError(
|
|
143
|
+
ErrorCode.UNSUPPORTED_METHOD,
|
|
144
|
+
`Method not supported: ${method}`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// ── Signing (same endpoints as AbcEvmProvider, no PIN) ────
|
|
149
|
+
/**
|
|
150
|
+
* Send transaction via POST /wallet/tx/evm
|
|
151
|
+
* PIN/email auto-injected server-side from access-key delegated credentials.
|
|
152
|
+
*/
|
|
153
|
+
async sendTransaction(params) {
|
|
154
|
+
this.ensureWallet();
|
|
155
|
+
const tx = params?.[0];
|
|
156
|
+
if (!tx) {
|
|
157
|
+
throw new ProviderRpcError(
|
|
158
|
+
ErrorCode.INVALID_PARAMS,
|
|
159
|
+
"Missing transaction params"
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
if (!tx.to) {
|
|
163
|
+
throw new ProviderRpcError(
|
|
164
|
+
ErrorCode.INVALID_PARAMS,
|
|
165
|
+
"Contract deployment (missing `to`) is not supported in access-key mode"
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
const chainKey = getChainKey(this.chainId);
|
|
169
|
+
const hexValue = tx.value || "0x0";
|
|
170
|
+
const amountWei = BigInt(hexValue).toString();
|
|
171
|
+
const result = await this.apiPost("/wallet/tx/evm", {
|
|
172
|
+
chainKey,
|
|
173
|
+
to: tx.to,
|
|
174
|
+
amountWei,
|
|
175
|
+
data: tx.data || "0x",
|
|
176
|
+
...tx.gas && { gasLimit: tx.gas },
|
|
177
|
+
...tx.gasLimit && { gasLimit: tx.gasLimit },
|
|
178
|
+
...tx.maxFeePerGas && { maxFeePerGas: tx.maxFeePerGas },
|
|
179
|
+
...tx.maxPriorityFeePerGas && {
|
|
180
|
+
maxPriorityFeePerGas: tx.maxPriorityFeePerGas
|
|
181
|
+
}
|
|
182
|
+
// No pin, no email — auto-injected by enrichWithDelegatedCredentials
|
|
183
|
+
});
|
|
184
|
+
return result?.txHash || result?.hash;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Personal sign via POST /wallet/sign/evm/personal
|
|
188
|
+
*/
|
|
189
|
+
async personalSign(params) {
|
|
190
|
+
const wallet = this.ensureWallet();
|
|
191
|
+
const p = params;
|
|
192
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
193
|
+
throw new ProviderRpcError(
|
|
194
|
+
ErrorCode.INVALID_PARAMS,
|
|
195
|
+
"Invalid personal_sign params"
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
const [message, address] = p;
|
|
199
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
200
|
+
throw new ProviderRpcError(
|
|
201
|
+
ErrorCode.UNAUTHORIZED,
|
|
202
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
203
|
+
);
|
|
204
|
+
}
|
|
205
|
+
const network = getNetworkName(this.chainId);
|
|
206
|
+
const result = await this.apiPost("/wallet/sign/evm/personal", {
|
|
207
|
+
network,
|
|
208
|
+
message,
|
|
209
|
+
address: wallet.address
|
|
210
|
+
// No pin — auto-injected
|
|
211
|
+
});
|
|
212
|
+
return result?.signature ?? result?.serializedTx ?? "";
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Sign typed data via POST /wallet/sign/evm/typed
|
|
216
|
+
*/
|
|
217
|
+
async signTypedData(params) {
|
|
218
|
+
const wallet = this.ensureWallet();
|
|
219
|
+
const p = params;
|
|
220
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
221
|
+
throw new ProviderRpcError(
|
|
222
|
+
ErrorCode.INVALID_PARAMS,
|
|
223
|
+
"Invalid signTypedData params"
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
const [address, typedData] = p;
|
|
227
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
228
|
+
throw new ProviderRpcError(
|
|
229
|
+
ErrorCode.UNAUTHORIZED,
|
|
230
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
const network = getNetworkName(this.chainId);
|
|
234
|
+
const result = await this.apiPost("/wallet/sign/evm/typed", {
|
|
235
|
+
network,
|
|
236
|
+
typedData: typeof typedData === "string" ? typedData : JSON.stringify(typedData)
|
|
237
|
+
// No pin — auto-injected
|
|
238
|
+
});
|
|
239
|
+
return result?.signature;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Sign EIP-7702 authorization via POST /wallet/sign/authorization
|
|
243
|
+
* Params: [address, authorization] — matches PIN mode (abcProvider.ts)
|
|
244
|
+
*/
|
|
245
|
+
async signAuthorization(params) {
|
|
246
|
+
const wallet = this.ensureWallet();
|
|
247
|
+
const p = params;
|
|
248
|
+
if (!Array.isArray(p) || p.length < 2) {
|
|
249
|
+
throw new ProviderRpcError(
|
|
250
|
+
ErrorCode.INVALID_PARAMS,
|
|
251
|
+
"Expected [address, authorization]"
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
const [address, auth] = p;
|
|
255
|
+
if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
|
|
256
|
+
throw new ProviderRpcError(
|
|
257
|
+
ErrorCode.UNAUTHORIZED,
|
|
258
|
+
`Address mismatch: requested ${address}, connected ${wallet.address}`
|
|
259
|
+
);
|
|
260
|
+
}
|
|
261
|
+
if (!auth) {
|
|
262
|
+
throw new ProviderRpcError(
|
|
263
|
+
ErrorCode.INVALID_PARAMS,
|
|
264
|
+
"Missing authorization object"
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
const network = getNetworkName(this.chainId);
|
|
268
|
+
const result = await this.apiPost("/wallet/sign/authorization", {
|
|
269
|
+
network,
|
|
270
|
+
authorization: {
|
|
271
|
+
chainId: auth.chainId,
|
|
272
|
+
address: auth.address,
|
|
273
|
+
nonce: auth.nonce?.toString()
|
|
274
|
+
}
|
|
275
|
+
// No pin — auto-injected
|
|
276
|
+
});
|
|
277
|
+
return result?.authorization || result;
|
|
278
|
+
}
|
|
279
|
+
// ── Helpers ───────────────────────────────────────────────
|
|
280
|
+
ensureWallet() {
|
|
281
|
+
if (!this.wallet) {
|
|
282
|
+
throw new ProviderRpcError(
|
|
283
|
+
ErrorCode.UNAUTHORIZED,
|
|
284
|
+
"Wallet not connected"
|
|
285
|
+
);
|
|
286
|
+
}
|
|
287
|
+
return this.wallet;
|
|
288
|
+
}
|
|
289
|
+
/** GET /wallet/address/balance — API uses `network` param (WaaS network name) */
|
|
290
|
+
async getBalance(params) {
|
|
291
|
+
const p = params;
|
|
292
|
+
const address = p?.[0] || this.wallet?.address;
|
|
293
|
+
const network = getNetworkName(this.chainId);
|
|
294
|
+
const result = await this.apiGet(
|
|
295
|
+
`/wallet/address/balance?network=${network}&address=${address}`
|
|
296
|
+
);
|
|
297
|
+
return result?.balance ?? "0x0";
|
|
298
|
+
}
|
|
299
|
+
/** GET /wallet/nonce — API uses `network` param (WaaS network name) */
|
|
300
|
+
async getTransactionCount(params) {
|
|
301
|
+
const p = params;
|
|
302
|
+
const address = p?.[0] || this.wallet?.address;
|
|
303
|
+
const network = getNetworkName(this.chainId);
|
|
304
|
+
const result = await this.apiGet(
|
|
305
|
+
`/wallet/nonce?network=${network}&address=${address}`
|
|
306
|
+
);
|
|
307
|
+
const nonce = result?.nonce ?? 0;
|
|
308
|
+
return `0x${Number(nonce).toString(16)}`;
|
|
309
|
+
}
|
|
310
|
+
/** POST /wallet/contract/eth-call */
|
|
311
|
+
async ethCall(params) {
|
|
312
|
+
const p = params;
|
|
313
|
+
const tx = p?.[0];
|
|
314
|
+
const network = getNetworkName(this.chainId);
|
|
315
|
+
const result = await this.apiPost("/wallet/contract/eth-call", {
|
|
316
|
+
network,
|
|
317
|
+
to: tx?.to,
|
|
318
|
+
data: tx?.data,
|
|
319
|
+
from: tx?.from || this.wallet?.address
|
|
320
|
+
});
|
|
321
|
+
return result?.result ?? result?.data ?? "0x";
|
|
322
|
+
}
|
|
323
|
+
/** POST /wallet/tx/evm with dry-run for gas estimation */
|
|
324
|
+
async estimateGas(params) {
|
|
325
|
+
const p = params;
|
|
326
|
+
const tx = p?.[0];
|
|
327
|
+
try {
|
|
328
|
+
const result = await this.apiPost("/wallet/contract/eth-call", {
|
|
329
|
+
network: getNetworkName(this.chainId),
|
|
330
|
+
to: tx?.to,
|
|
331
|
+
data: tx?.data,
|
|
332
|
+
from: tx?.from || this.wallet?.address,
|
|
333
|
+
value: tx?.value,
|
|
334
|
+
estimateGas: true
|
|
335
|
+
});
|
|
336
|
+
return result?.gasEstimate ?? result?.gas ?? "0x5208";
|
|
337
|
+
} catch {
|
|
338
|
+
return "0x5208";
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
async apiGet(path) {
|
|
342
|
+
const url = `${this.apiBaseUrl}${path}`;
|
|
343
|
+
const res = await fetch(url, {
|
|
344
|
+
headers: { "X-Access-Key": this.accessKey }
|
|
345
|
+
});
|
|
346
|
+
if (!res.ok) {
|
|
347
|
+
const err = await res.json().catch(() => ({ message: res.statusText }));
|
|
348
|
+
throw new ProviderRpcError(
|
|
349
|
+
ErrorCode.INTERNAL_ERROR,
|
|
350
|
+
err?.error?.message || err?.message || `API error: ${res.status}`
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
const json = await res.json();
|
|
354
|
+
return json?.data || json;
|
|
355
|
+
}
|
|
356
|
+
async apiPost(path, body) {
|
|
357
|
+
const url = `${this.apiBaseUrl}${path}`;
|
|
358
|
+
const res = await fetch(url, {
|
|
359
|
+
method: "POST",
|
|
360
|
+
headers: {
|
|
361
|
+
"Content-Type": "application/json",
|
|
362
|
+
"X-Access-Key": this.accessKey
|
|
363
|
+
},
|
|
364
|
+
body: JSON.stringify(body)
|
|
365
|
+
});
|
|
366
|
+
if (!res.ok) {
|
|
367
|
+
const err = await res.json().catch(() => ({ message: res.statusText }));
|
|
368
|
+
throw new ProviderRpcError(
|
|
369
|
+
ErrorCode.INTERNAL_ERROR,
|
|
370
|
+
err?.error?.message || err?.message || `API error: ${res.status}`
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
const json = await res.json();
|
|
374
|
+
return json?.data || json;
|
|
375
|
+
}
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
export {
|
|
379
|
+
AbcAccessKeyProvider
|
|
380
|
+
};
|
|
@@ -5,9 +5,12 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
resolveTalkenApiUrl
|
|
7
7
|
} from "./chunk-GFWUFYT2.js";
|
|
8
|
+
import {
|
|
9
|
+
createTalkenApiClient
|
|
10
|
+
} from "./chunk-KIYXONNH.js";
|
|
8
11
|
import {
|
|
9
12
|
AbcAccessKeyProvider
|
|
10
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-4JZPP3S7.js";
|
|
11
14
|
import {
|
|
12
15
|
setGlobalDefaultBitcoinNetwork,
|
|
13
16
|
setGlobalDefaultChainId,
|
|
@@ -15,20 +18,17 @@ import {
|
|
|
15
18
|
} from "./chunk-O4AU63LK.js";
|
|
16
19
|
import {
|
|
17
20
|
createAbcEvmProvider
|
|
18
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-L6FCF3FH.js";
|
|
19
22
|
import {
|
|
20
23
|
clearAuthState,
|
|
21
24
|
clearStorage,
|
|
22
25
|
loadAuthState,
|
|
23
26
|
loadFromStorage,
|
|
24
27
|
saveAuthState
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import {
|
|
27
|
-
createTalkenApiClient
|
|
28
|
-
} from "./chunk-BHEVY4QY.js";
|
|
28
|
+
} from "./chunk-PF65YS3T.js";
|
|
29
29
|
import {
|
|
30
30
|
getCredentialManager
|
|
31
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-QKK3OPQA.js";
|
|
32
32
|
|
|
33
33
|
// src/wallets/walletConnectors/abcWallet/abcConnector.ts
|
|
34
34
|
import { getTalkenApiClient } from "@talken/talkenkit";
|
|
@@ -73,13 +73,59 @@ function abcConnector(options) {
|
|
|
73
73
|
if (!authState || !authState.isAuthenticated || !authState.wallet) {
|
|
74
74
|
throw new Error("ABC_LOGIN_REQUIRED");
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
76
|
+
if (isAccessKeyMode) {
|
|
77
|
+
let w = authState.wallet;
|
|
78
|
+
if (!w.uid || !w.sessionId) {
|
|
79
|
+
try {
|
|
80
|
+
const apiUrl = resolveTalkenApiUrl(config.talkenApiUrl);
|
|
81
|
+
const res = await fetch(`${apiUrl}/wallet/mpc`, {
|
|
82
|
+
method: "POST",
|
|
83
|
+
headers: {
|
|
84
|
+
"Content-Type": "application/json",
|
|
85
|
+
"X-Access-Key": config.accessKey
|
|
86
|
+
},
|
|
87
|
+
body: JSON.stringify({ action: "info" })
|
|
88
|
+
});
|
|
89
|
+
const data = await res.json();
|
|
90
|
+
const acct = data?.data?.accounts?.[0] || data?.data;
|
|
91
|
+
if (acct?.ethAddress || acct?.address) {
|
|
92
|
+
w = {
|
|
93
|
+
address: acct.ethAddress || acct.address || w.address,
|
|
94
|
+
chainId: w.chainId || config.defaultChainId || 1,
|
|
95
|
+
uid: acct.uid || data?.data?.uid || "",
|
|
96
|
+
sessionId: acct.sid || acct.sessionId || "",
|
|
97
|
+
keyId: acct.keyId || (acct.wid != null ? String(acct.wid) : "") || (data?.data?.wid != null ? String(data.data.wid) : ""),
|
|
98
|
+
encryptedShare: acct.encryptedShare || acct.pvencstr || "",
|
|
99
|
+
sid: acct.sid || "",
|
|
100
|
+
type: "evm",
|
|
101
|
+
email: authState.user?.email || acct.email || data?.data?.email || ""
|
|
102
|
+
};
|
|
103
|
+
saveAuthState({ ...authState, wallet: w });
|
|
104
|
+
}
|
|
105
|
+
} catch (_) {
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const fullWallet = {
|
|
109
|
+
address: w.address,
|
|
110
|
+
chainId: w.chainId || config.defaultChainId || 1,
|
|
111
|
+
uid: w.uid || "",
|
|
112
|
+
sessionId: w.sessionId || "",
|
|
113
|
+
keyId: w.keyId || "",
|
|
114
|
+
encryptedShare: w.encryptedShare || "",
|
|
115
|
+
sid: w.sid || "",
|
|
116
|
+
type: "evm",
|
|
117
|
+
email: w.email || authState.user?.email || ""
|
|
118
|
+
};
|
|
119
|
+
provider.setWallet(fullWallet);
|
|
120
|
+
} else {
|
|
121
|
+
provider.setWallet(authState.wallet);
|
|
122
|
+
if (authState.accessToken && authState.refreshToken && authState.expiresAt) {
|
|
123
|
+
talkenApi.setTokens(
|
|
124
|
+
authState.accessToken,
|
|
125
|
+
authState.refreshToken,
|
|
126
|
+
authState.expiresAt
|
|
127
|
+
);
|
|
128
|
+
}
|
|
83
129
|
}
|
|
84
130
|
const accounts = await provider.request({
|
|
85
131
|
method: "eth_requestAccounts"
|
|
@@ -200,8 +246,12 @@ function abcConnector(options) {
|
|
|
200
246
|
*/
|
|
201
247
|
async isAuthorized() {
|
|
202
248
|
try {
|
|
203
|
-
if (isAccessKeyMode
|
|
204
|
-
|
|
249
|
+
if (isAccessKeyMode) {
|
|
250
|
+
if (provider.isConnected())
|
|
251
|
+
return true;
|
|
252
|
+
const hasKey = !!config.accessKey || typeof localStorage !== "undefined" && !!localStorage.getItem("talken_ak");
|
|
253
|
+
const authState2 = loadAuthState();
|
|
254
|
+
return hasKey && !!authState2?.wallet?.address;
|
|
205
255
|
}
|
|
206
256
|
const authState = loadAuthState();
|
|
207
257
|
if (!authState || !authState.isAuthenticated) {
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
WalletscanApi
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HWRZGGGN.js";
|
|
5
5
|
import {
|
|
6
6
|
getCredentialManager
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-QKK3OPQA.js";
|
|
8
8
|
|
|
9
9
|
// src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
|
|
10
|
-
import {
|
|
10
|
+
import {
|
|
11
|
+
getShowPendingTransaction,
|
|
12
|
+
getTalkenApiClient,
|
|
13
|
+
getUpdateTransactionResult
|
|
14
|
+
} from "@talken/talkenkit";
|
|
11
15
|
|
|
12
16
|
// src/utils/apiClientFactory.ts
|
|
13
17
|
function createWalletscanApi() {
|
|
@@ -331,6 +335,15 @@ var AbcSolanaProvider = class extends EventEmitter {
|
|
|
331
335
|
});
|
|
332
336
|
const api = this.getTalkenApiClientOrThrow();
|
|
333
337
|
const apiNetwork = this.wallet.network === "solana" ? "solana" : "solana_devnet";
|
|
338
|
+
const showPending = getShowPendingTransaction();
|
|
339
|
+
if (showPending) {
|
|
340
|
+
showPending({
|
|
341
|
+
txHash: "",
|
|
342
|
+
network: apiNetwork,
|
|
343
|
+
chain: "solana",
|
|
344
|
+
explorerUrl: void 0
|
|
345
|
+
});
|
|
346
|
+
}
|
|
334
347
|
if (params.mintAddress) {
|
|
335
348
|
const walletscanApi = createWalletscanApi();
|
|
336
349
|
const tokenMeta = await walletscanApi.getContractTokenWithTimeout({
|
|
@@ -346,9 +359,11 @@ var AbcSolanaProvider = class extends EventEmitter {
|
|
|
346
359
|
amount: String(rawAmount),
|
|
347
360
|
decimals,
|
|
348
361
|
network: apiNetwork,
|
|
349
|
-
pin: pinHash
|
|
362
|
+
pin: pinHash,
|
|
363
|
+
waitForConfirmation: true
|
|
350
364
|
});
|
|
351
365
|
console.log("[AbcSolanaProvider] SPL transfer result:", result2);
|
|
366
|
+
this.updateTransactionResult(result2, apiNetwork);
|
|
352
367
|
return { signature: result2.txHash };
|
|
353
368
|
}
|
|
354
369
|
const { LAMPORTS_PER_SOL } = await import("@solana/web3.js");
|
|
@@ -363,9 +378,11 @@ var AbcSolanaProvider = class extends EventEmitter {
|
|
|
363
378
|
toAddress: params.toAddress,
|
|
364
379
|
amountLamports: String(amountLamports),
|
|
365
380
|
network: apiNetwork,
|
|
366
|
-
pin: pinHash
|
|
381
|
+
pin: pinHash,
|
|
382
|
+
waitForConfirmation: true
|
|
367
383
|
});
|
|
368
384
|
console.log("[AbcSolanaProvider] native transfer result:", result);
|
|
385
|
+
this.updateTransactionResult(result, apiNetwork);
|
|
369
386
|
return { signature: result.txHash };
|
|
370
387
|
} catch (error) {
|
|
371
388
|
console.error("[AbcSolanaProvider] transfer FAILED:", {
|
|
@@ -438,6 +455,30 @@ var AbcSolanaProvider = class extends EventEmitter {
|
|
|
438
455
|
);
|
|
439
456
|
}
|
|
440
457
|
}
|
|
458
|
+
updateTransactionResult(result, network) {
|
|
459
|
+
const updateResult = getUpdateTransactionResult();
|
|
460
|
+
if (!updateResult)
|
|
461
|
+
return;
|
|
462
|
+
let receipt = result.receipt;
|
|
463
|
+
if (!receipt && result.confirmation) {
|
|
464
|
+
const data = result.confirmation?.data?.result ?? result.confirmation?.result ?? result.confirmation;
|
|
465
|
+
const slot = data?.slot;
|
|
466
|
+
const meta = data?.meta;
|
|
467
|
+
receipt = {
|
|
468
|
+
status: meta?.err === null ? 1 : 0,
|
|
469
|
+
blockNumber: slot ?? null,
|
|
470
|
+
gasUsed: meta?.fee != null ? String(meta.fee) : null
|
|
471
|
+
};
|
|
472
|
+
}
|
|
473
|
+
const cluster = network.includes("devnet") ? "?cluster=devnet" : "";
|
|
474
|
+
updateResult({
|
|
475
|
+
txHash: result.txHash,
|
|
476
|
+
network,
|
|
477
|
+
chain: "solana",
|
|
478
|
+
receipt,
|
|
479
|
+
explorerUrl: `https://explorer.solana.com/tx/${result.txHash}${cluster}`
|
|
480
|
+
});
|
|
481
|
+
}
|
|
441
482
|
};
|
|
442
483
|
|
|
443
484
|
export {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
3
|
abcConnector
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4YEALKXG.js";
|
|
5
5
|
import {
|
|
6
6
|
resolveTalkenApiUrl
|
|
7
7
|
} from "./chunk-GFWUFYT2.js";
|
|
8
8
|
import {
|
|
9
9
|
createTalkenApiClient
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KIYXONNH.js";
|
|
11
11
|
import {
|
|
12
12
|
ABC_WALLET_METADATA
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RX2VOIUB.js";
|
|
14
14
|
|
|
15
15
|
// src/wallets/walletConnectors/abcWallet/abcWallet.ts
|
|
16
16
|
import { setTalkenApiClient } from "@talken/talkenkit";
|