@talken/talkenkit 2.4.30 → 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.
Files changed (69) hide show
  1. package/dist/{AbcCredentialManager-DDHLW2IH.js → AbcCredentialManager-5W3B7GI4.js} +1 -1
  2. package/dist/{abcWallet-TLGPQAMU.js → abcWallet-O5IRLUXL.js} +2 -2
  3. package/dist/{chunk-ALBABQ53.js → chunk-PN6K4CMZ.js} +4 -1
  4. package/dist/{chunk-MI7TNBED.js → chunk-UHZL3WSM.js} +709 -86
  5. package/dist/components/TransactionResultModal/TransactionResultModal.css.d.ts +17 -0
  6. package/dist/components/TransactionResultModal/TransactionResultModal.d.ts +9 -0
  7. package/dist/index.css +138 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +1344 -980
  10. package/dist/providers/TransactionResultProvider/TransactionResultContext.d.ts +6 -0
  11. package/dist/providers/TransactionResultProvider/TransactionResultProvider.d.ts +7 -0
  12. package/dist/providers/TransactionResultProvider/TransactionResultSingleton.d.ts +16 -0
  13. package/dist/providers/TransactionResultProvider/index.d.ts +4 -0
  14. package/dist/providers/TransactionResultProvider/types.d.ts +14 -0
  15. package/dist/wallets/walletConnectors/abcWallet/AbcCredentialManager.js +2 -2
  16. package/dist/wallets/walletConnectors/abcWallet/AbcEvmAutoConnector.js +2 -2
  17. package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.d.ts +69 -0
  18. package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.js +11 -0
  19. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinConnector.js +3 -3
  20. package/dist/wallets/walletConnectors/abcWallet/abcBitcoinProvider.js +3 -3
  21. package/dist/wallets/walletConnectors/abcWallet/abcConnector.js +8 -6
  22. package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +8 -0
  23. package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +5 -4
  24. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +1 -0
  25. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +8 -8
  26. package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +3 -3
  27. package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.d.ts +1 -0
  28. package/dist/wallets/walletConnectors/abcWallet/abcTronProvider.js +3 -3
  29. package/dist/wallets/walletConnectors/abcWallet/abcWallet.d.ts +7 -0
  30. package/dist/wallets/walletConnectors/abcWallet/abcWallet.js +9 -7
  31. package/dist/wallets/walletConnectors/abcWallet/api/ConfigApi.js +2 -2
  32. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +25 -0
  33. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +3 -3
  34. package/dist/wallets/walletConnectors/abcWallet/api/TokenApi.js +2 -2
  35. package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +3 -3
  36. package/dist/wallets/walletConnectors/abcWallet/api/index.js +9 -9
  37. package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +3 -0
  38. package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
  39. package/dist/wallets/walletConnectors/abcWallet/index.d.ts +1 -1
  40. package/dist/wallets/walletConnectors/abcWallet/index.js +35 -33
  41. package/dist/wallets/walletConnectors/abcWallet/sessionUtils.js +2 -2
  42. package/dist/wallets/walletConnectors/abcWallet/types.d.ts +11 -0
  43. package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
  44. package/dist/wallets/walletConnectors/abcWallet/walletGeneration.js +3 -3
  45. package/dist/wallets/walletConnectors/{chunk-VDWJ3NQ5.js → chunk-25ZDAJ3L.js} +1 -1
  46. package/dist/wallets/walletConnectors/chunk-4JZPP3S7.js +380 -0
  47. package/dist/wallets/walletConnectors/{chunk-HHZ3JZRH.js → chunk-4YEALKXG.js} +74 -14
  48. package/dist/wallets/walletConnectors/{chunk-IN3HEGZM.js → chunk-645DT4TS.js} +46 -5
  49. package/dist/wallets/walletConnectors/{chunk-XNA5NIFE.js → chunk-6TAU7OQK.js} +7 -4
  50. package/dist/wallets/walletConnectors/{chunk-MO2AXXLI.js → chunk-FKI5AZVH.js} +1 -1
  51. package/dist/wallets/walletConnectors/{chunk-JADQLTFW.js → chunk-H2AZTZMM.js} +1 -1
  52. package/dist/wallets/walletConnectors/{chunk-NULM3THX.js → chunk-HWRZGGGN.js} +1 -1
  53. package/dist/wallets/walletConnectors/{chunk-BHEVY4QY.js → chunk-KIYXONNH.js} +35 -2
  54. package/dist/wallets/walletConnectors/{chunk-NU3ITJNK.js → chunk-L6FCF3FH.js} +94 -736
  55. package/dist/wallets/walletConnectors/{chunk-ACLPF2UW.js → chunk-LIGH2LEU.js} +1 -1
  56. package/dist/wallets/walletConnectors/chunk-OASBABPG.js +746 -0
  57. package/dist/wallets/walletConnectors/{chunk-A66MTFML.js → chunk-PF65YS3T.js} +1 -1
  58. package/dist/wallets/walletConnectors/{chunk-6WF4SXLB.js → chunk-QKK3OPQA.js} +1 -1
  59. package/dist/wallets/walletConnectors/{chunk-3LF7FVL6.js → chunk-RGYZNNB6.js} +1 -1
  60. package/dist/wallets/walletConnectors/{chunk-DPTDOCWL.js → chunk-RX2VOIUB.js} +4 -1
  61. package/dist/wallets/walletConnectors/{chunk-YV6IZWGE.js → chunk-URS2KVYK.js} +45 -2
  62. package/dist/wallets/walletConnectors/{chunk-BXH3GDX5.js → chunk-YKFI6ZGM.js} +1 -1
  63. package/dist/wallets/walletConnectors/index.js +47 -45
  64. package/package.json +1 -1
  65. package/dist/wallets/walletConnectors/chunk-CABLJOMU.js +0 -194
  66. package/dist/wallets/walletConnectors/chunk-J3YPHDHM.js +0 -827
  67. package/dist/wallets/walletConnectors/chunk-J566FC7T.js +0 -54
  68. package/dist/wallets/walletConnectors/chunk-OHQXPSR6.js +0 -300
  69. package/dist/wallets/walletConnectors/chunk-OMOYFHBT.js +0 -1485
@@ -7,7 +7,7 @@ import {
7
7
  TALKEN_API_ENDPOINTS,
8
8
  TOKEN_EXPIRY,
9
9
  getCredentialManager
10
- } from "./chunk-ALBABQ53.js";
10
+ } from "./chunk-PN6K4CMZ.js";
11
11
 
12
12
  // src/wallets/walletConnectors/abcWallet/abcWallet.ts
13
13
  import { setTalkenApiClient as setTalkenApiClient2 } from "@talken/talkenkit";
@@ -16,10 +16,6 @@ import { setTalkenApiClient as setTalkenApiClient2 } from "@talken/talkenkit";
16
16
  import { getTalkenApiClient as getTalkenApiClient3 } from "@talken/talkenkit";
17
17
  import { createConnector } from "wagmi";
18
18
 
19
- // src/wallets/walletConnectors/abcWallet/abcProvider.ts
20
- import { getTalkenApiClient } from "@talken/talkenkit";
21
- import { parseGwei } from "viem";
22
-
23
19
  // src/config/networks.ts
24
20
  var NetworkType = /* @__PURE__ */ ((NetworkType2) => {
25
21
  NetworkType2["EVM"] = "EVM";
@@ -1051,8 +1047,381 @@ function numberToHex(num) {
1051
1047
  return `0x${num.toString(16)}`;
1052
1048
  }
1053
1049
 
1054
- // src/wallets/walletConnectors/abcWallet/abcProvider.ts
1050
+ // src/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.ts
1055
1051
  var EventEmitter = class {
1052
+ constructor() {
1053
+ this.events = /* @__PURE__ */ new Map();
1054
+ }
1055
+ on(event, listener) {
1056
+ if (!this.events.has(event))
1057
+ this.events.set(event, []);
1058
+ this.events.get(event).push(listener);
1059
+ return this;
1060
+ }
1061
+ off(event, listener) {
1062
+ const listeners = this.events.get(event);
1063
+ if (listeners) {
1064
+ const idx = listeners.indexOf(listener);
1065
+ if (idx !== -1)
1066
+ listeners.splice(idx, 1);
1067
+ }
1068
+ return this;
1069
+ }
1070
+ removeListener(event, listener) {
1071
+ return this.off(event, listener);
1072
+ }
1073
+ emit(event, ...args) {
1074
+ const listeners = this.events.get(event);
1075
+ if (listeners) {
1076
+ for (const listener of listeners)
1077
+ listener(...args);
1078
+ return true;
1079
+ }
1080
+ return false;
1081
+ }
1082
+ removeAllListeners(event) {
1083
+ if (event)
1084
+ this.events.delete(event);
1085
+ else
1086
+ this.events.clear();
1087
+ return this;
1088
+ }
1089
+ };
1090
+ var ErrorCode = {
1091
+ USER_REJECTED: 4001,
1092
+ UNAUTHORIZED: 4100,
1093
+ UNSUPPORTED_METHOD: 4200,
1094
+ DISCONNECTED: 4900,
1095
+ INVALID_PARAMS: -32602,
1096
+ INTERNAL_ERROR: -32603
1097
+ };
1098
+ var ProviderRpcError = class extends Error {
1099
+ constructor(code, message, data) {
1100
+ super(message);
1101
+ this.code = code;
1102
+ this.data = data;
1103
+ this.name = "ProviderRpcError";
1104
+ }
1105
+ };
1106
+ var AbcAccessKeyProvider = class extends EventEmitter {
1107
+ constructor(accessKey, apiBaseUrl) {
1108
+ super();
1109
+ this.wallet = null;
1110
+ this.chainId = 1;
1111
+ this.connected = false;
1112
+ this.accessKey = accessKey;
1113
+ this.apiBaseUrl = apiBaseUrl || (typeof window !== "undefined" ? window.__TALKEN_API_URL__ || "" : "");
1114
+ }
1115
+ // ── Wallet management ─────────────────────────────────────
1116
+ setWallet(wallet) {
1117
+ this.wallet = wallet;
1118
+ this.chainId = wallet.chainId || 1;
1119
+ this.connected = true;
1120
+ }
1121
+ clearWallet() {
1122
+ this.wallet = null;
1123
+ this.connected = false;
1124
+ }
1125
+ isConnected() {
1126
+ return this.connected && !!this.wallet;
1127
+ }
1128
+ getWallet() {
1129
+ return this.wallet;
1130
+ }
1131
+ getChainId() {
1132
+ return this.chainId;
1133
+ }
1134
+ setAccessKey(key) {
1135
+ this.accessKey = key;
1136
+ }
1137
+ // ── EIP-1193 request ──────────────────────────────────────
1138
+ async request(args) {
1139
+ const { method, params } = args;
1140
+ switch (method) {
1141
+ case "eth_requestAccounts":
1142
+ case "eth_accounts":
1143
+ return this.wallet ? [this.wallet.address] : [];
1144
+ case "eth_chainId":
1145
+ return numberToHex(this.chainId);
1146
+ case "wallet_switchEthereumChain": {
1147
+ const p = params?.[0];
1148
+ if (p?.chainId) {
1149
+ this.chainId = hexToNumber(p.chainId);
1150
+ this.emit("chainChanged", numberToHex(this.chainId));
1151
+ }
1152
+ return null;
1153
+ }
1154
+ case "eth_sendTransaction":
1155
+ return this.sendTransaction(params);
1156
+ case "personal_sign":
1157
+ return this.personalSign(params);
1158
+ case "eth_signTypedData":
1159
+ case "eth_signTypedData_v4":
1160
+ return this.signTypedData(params);
1161
+ case "eth_signAuthorization":
1162
+ return this.signAuthorization(params);
1163
+ case "eth_estimateGas":
1164
+ return this.estimateGas(params);
1165
+ case "eth_getTransactionCount":
1166
+ return this.getTransactionCount(params);
1167
+ case "eth_call":
1168
+ return this.ethCall(params);
1169
+ case "eth_getBalance":
1170
+ return this.getBalance(params);
1171
+ case "wallet_getCapabilities":
1172
+ return {
1173
+ supportsTypedDataV4: true,
1174
+ supports7702Authorization: true,
1175
+ supports5792Batch: false,
1176
+ supportsPaymasterService: false,
1177
+ supportsPermit2RelayHints: true,
1178
+ walletType: "abc-embedded"
1179
+ };
1180
+ default:
1181
+ throw new ProviderRpcError(
1182
+ ErrorCode.UNSUPPORTED_METHOD,
1183
+ `Method not supported: ${method}`
1184
+ );
1185
+ }
1186
+ }
1187
+ // ── Signing (same endpoints as AbcEvmProvider, no PIN) ────
1188
+ /**
1189
+ * Send transaction via POST /wallet/tx/evm
1190
+ * PIN/email auto-injected server-side from access-key delegated credentials.
1191
+ */
1192
+ async sendTransaction(params) {
1193
+ this.ensureWallet();
1194
+ const tx = params?.[0];
1195
+ if (!tx) {
1196
+ throw new ProviderRpcError(
1197
+ ErrorCode.INVALID_PARAMS,
1198
+ "Missing transaction params"
1199
+ );
1200
+ }
1201
+ if (!tx.to) {
1202
+ throw new ProviderRpcError(
1203
+ ErrorCode.INVALID_PARAMS,
1204
+ "Contract deployment (missing `to`) is not supported in access-key mode"
1205
+ );
1206
+ }
1207
+ const chainKey = getChainKey(this.chainId);
1208
+ const hexValue = tx.value || "0x0";
1209
+ const amountWei = BigInt(hexValue).toString();
1210
+ const result = await this.apiPost("/wallet/tx/evm", {
1211
+ chainKey,
1212
+ to: tx.to,
1213
+ amountWei,
1214
+ data: tx.data || "0x",
1215
+ ...tx.gas && { gasLimit: tx.gas },
1216
+ ...tx.gasLimit && { gasLimit: tx.gasLimit },
1217
+ ...tx.maxFeePerGas && { maxFeePerGas: tx.maxFeePerGas },
1218
+ ...tx.maxPriorityFeePerGas && {
1219
+ maxPriorityFeePerGas: tx.maxPriorityFeePerGas
1220
+ }
1221
+ // No pin, no email — auto-injected by enrichWithDelegatedCredentials
1222
+ });
1223
+ return result?.txHash || result?.hash;
1224
+ }
1225
+ /**
1226
+ * Personal sign via POST /wallet/sign/evm/personal
1227
+ */
1228
+ async personalSign(params) {
1229
+ const wallet = this.ensureWallet();
1230
+ const p = params;
1231
+ if (!Array.isArray(p) || p.length < 2) {
1232
+ throw new ProviderRpcError(
1233
+ ErrorCode.INVALID_PARAMS,
1234
+ "Invalid personal_sign params"
1235
+ );
1236
+ }
1237
+ const [message, address] = p;
1238
+ if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
1239
+ throw new ProviderRpcError(
1240
+ ErrorCode.UNAUTHORIZED,
1241
+ `Address mismatch: requested ${address}, connected ${wallet.address}`
1242
+ );
1243
+ }
1244
+ const network = getNetworkName(this.chainId);
1245
+ const result = await this.apiPost("/wallet/sign/evm/personal", {
1246
+ network,
1247
+ message,
1248
+ address: wallet.address
1249
+ // No pin — auto-injected
1250
+ });
1251
+ return result?.signature ?? result?.serializedTx ?? "";
1252
+ }
1253
+ /**
1254
+ * Sign typed data via POST /wallet/sign/evm/typed
1255
+ */
1256
+ async signTypedData(params) {
1257
+ const wallet = this.ensureWallet();
1258
+ const p = params;
1259
+ if (!Array.isArray(p) || p.length < 2) {
1260
+ throw new ProviderRpcError(
1261
+ ErrorCode.INVALID_PARAMS,
1262
+ "Invalid signTypedData params"
1263
+ );
1264
+ }
1265
+ const [address, typedData] = p;
1266
+ if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
1267
+ throw new ProviderRpcError(
1268
+ ErrorCode.UNAUTHORIZED,
1269
+ `Address mismatch: requested ${address}, connected ${wallet.address}`
1270
+ );
1271
+ }
1272
+ const network = getNetworkName(this.chainId);
1273
+ const result = await this.apiPost("/wallet/sign/evm/typed", {
1274
+ network,
1275
+ typedData: typeof typedData === "string" ? typedData : JSON.stringify(typedData)
1276
+ // No pin — auto-injected
1277
+ });
1278
+ return result?.signature;
1279
+ }
1280
+ /**
1281
+ * Sign EIP-7702 authorization via POST /wallet/sign/authorization
1282
+ * Params: [address, authorization] — matches PIN mode (abcProvider.ts)
1283
+ */
1284
+ async signAuthorization(params) {
1285
+ const wallet = this.ensureWallet();
1286
+ const p = params;
1287
+ if (!Array.isArray(p) || p.length < 2) {
1288
+ throw new ProviderRpcError(
1289
+ ErrorCode.INVALID_PARAMS,
1290
+ "Expected [address, authorization]"
1291
+ );
1292
+ }
1293
+ const [address, auth] = p;
1294
+ if (address && address.toLowerCase() !== wallet.address.toLowerCase()) {
1295
+ throw new ProviderRpcError(
1296
+ ErrorCode.UNAUTHORIZED,
1297
+ `Address mismatch: requested ${address}, connected ${wallet.address}`
1298
+ );
1299
+ }
1300
+ if (!auth) {
1301
+ throw new ProviderRpcError(
1302
+ ErrorCode.INVALID_PARAMS,
1303
+ "Missing authorization object"
1304
+ );
1305
+ }
1306
+ const network = getNetworkName(this.chainId);
1307
+ const result = await this.apiPost("/wallet/sign/authorization", {
1308
+ network,
1309
+ authorization: {
1310
+ chainId: auth.chainId,
1311
+ address: auth.address,
1312
+ nonce: auth.nonce?.toString()
1313
+ }
1314
+ // No pin — auto-injected
1315
+ });
1316
+ return result?.authorization || result;
1317
+ }
1318
+ // ── Helpers ───────────────────────────────────────────────
1319
+ ensureWallet() {
1320
+ if (!this.wallet) {
1321
+ throw new ProviderRpcError(
1322
+ ErrorCode.UNAUTHORIZED,
1323
+ "Wallet not connected"
1324
+ );
1325
+ }
1326
+ return this.wallet;
1327
+ }
1328
+ /** GET /wallet/address/balance — API uses `network` param (WaaS network name) */
1329
+ async getBalance(params) {
1330
+ const p = params;
1331
+ const address = p?.[0] || this.wallet?.address;
1332
+ const network = getNetworkName(this.chainId);
1333
+ const result = await this.apiGet(
1334
+ `/wallet/address/balance?network=${network}&address=${address}`
1335
+ );
1336
+ return result?.balance ?? "0x0";
1337
+ }
1338
+ /** GET /wallet/nonce — API uses `network` param (WaaS network name) */
1339
+ async getTransactionCount(params) {
1340
+ const p = params;
1341
+ const address = p?.[0] || this.wallet?.address;
1342
+ const network = getNetworkName(this.chainId);
1343
+ const result = await this.apiGet(
1344
+ `/wallet/nonce?network=${network}&address=${address}`
1345
+ );
1346
+ const nonce = result?.nonce ?? 0;
1347
+ return `0x${Number(nonce).toString(16)}`;
1348
+ }
1349
+ /** POST /wallet/contract/eth-call */
1350
+ async ethCall(params) {
1351
+ const p = params;
1352
+ const tx = p?.[0];
1353
+ const network = getNetworkName(this.chainId);
1354
+ const result = await this.apiPost("/wallet/contract/eth-call", {
1355
+ network,
1356
+ to: tx?.to,
1357
+ data: tx?.data,
1358
+ from: tx?.from || this.wallet?.address
1359
+ });
1360
+ return result?.result ?? result?.data ?? "0x";
1361
+ }
1362
+ /** POST /wallet/tx/evm with dry-run for gas estimation */
1363
+ async estimateGas(params) {
1364
+ const p = params;
1365
+ const tx = p?.[0];
1366
+ try {
1367
+ const result = await this.apiPost("/wallet/contract/eth-call", {
1368
+ network: getNetworkName(this.chainId),
1369
+ to: tx?.to,
1370
+ data: tx?.data,
1371
+ from: tx?.from || this.wallet?.address,
1372
+ value: tx?.value,
1373
+ estimateGas: true
1374
+ });
1375
+ return result?.gasEstimate ?? result?.gas ?? "0x5208";
1376
+ } catch {
1377
+ return "0x5208";
1378
+ }
1379
+ }
1380
+ async apiGet(path) {
1381
+ const url = `${this.apiBaseUrl}${path}`;
1382
+ const res = await fetch(url, {
1383
+ headers: { "X-Access-Key": this.accessKey }
1384
+ });
1385
+ if (!res.ok) {
1386
+ const err = await res.json().catch(() => ({ message: res.statusText }));
1387
+ throw new ProviderRpcError(
1388
+ ErrorCode.INTERNAL_ERROR,
1389
+ err?.error?.message || err?.message || `API error: ${res.status}`
1390
+ );
1391
+ }
1392
+ const json = await res.json();
1393
+ return json?.data || json;
1394
+ }
1395
+ async apiPost(path, body) {
1396
+ const url = `${this.apiBaseUrl}${path}`;
1397
+ const res = await fetch(url, {
1398
+ method: "POST",
1399
+ headers: {
1400
+ "Content-Type": "application/json",
1401
+ "X-Access-Key": this.accessKey
1402
+ },
1403
+ body: JSON.stringify(body)
1404
+ });
1405
+ if (!res.ok) {
1406
+ const err = await res.json().catch(() => ({ message: res.statusText }));
1407
+ throw new ProviderRpcError(
1408
+ ErrorCode.INTERNAL_ERROR,
1409
+ err?.error?.message || err?.message || `API error: ${res.status}`
1410
+ );
1411
+ }
1412
+ const json = await res.json();
1413
+ return json?.data || json;
1414
+ }
1415
+ };
1416
+
1417
+ // src/wallets/walletConnectors/abcWallet/abcProvider.ts
1418
+ import {
1419
+ getShowPendingTransaction,
1420
+ getTalkenApiClient,
1421
+ getUpdateTransactionResult
1422
+ } from "@talken/talkenkit";
1423
+ import { parseGwei } from "viem";
1424
+ var EventEmitter2 = class {
1056
1425
  constructor() {
1057
1426
  this.events = /* @__PURE__ */ new Map();
1058
1427
  }
@@ -1095,7 +1464,7 @@ var EventEmitter = class {
1095
1464
  return this;
1096
1465
  }
1097
1466
  };
1098
- var ProviderRpcError = class extends Error {
1467
+ var ProviderRpcError2 = class extends Error {
1099
1468
  constructor(code, message, data) {
1100
1469
  super(message);
1101
1470
  this.code = code;
@@ -1103,7 +1472,7 @@ var ProviderRpcError = class extends Error {
1103
1472
  this.name = "ProviderRpcError";
1104
1473
  }
1105
1474
  };
1106
- var ErrorCode = {
1475
+ var ErrorCode2 = {
1107
1476
  USER_REJECTED: 4001,
1108
1477
  UNAUTHORIZED: 4100,
1109
1478
  UNSUPPORTED_METHOD: 4200,
@@ -1112,7 +1481,7 @@ var ErrorCode = {
1112
1481
  INVALID_PARAMS: -32602,
1113
1482
  INTERNAL_ERROR: -32603
1114
1483
  };
1115
- var AbcEvmProvider = class extends EventEmitter {
1484
+ var AbcEvmProvider = class extends EventEmitter2 {
1116
1485
  constructor(talkenApi) {
1117
1486
  super();
1118
1487
  this.wallet = null;
@@ -1152,7 +1521,7 @@ var AbcEvmProvider = class extends EventEmitter {
1152
1521
  this.wallet = null;
1153
1522
  this.connected = false;
1154
1523
  this.emit("disconnect", {
1155
- code: ErrorCode.DISCONNECTED,
1524
+ code: ErrorCode2.DISCONNECTED,
1156
1525
  message: "User disconnected"
1157
1526
  });
1158
1527
  this.emit("accountsChanged", []);
@@ -1174,8 +1543,8 @@ var AbcEvmProvider = class extends EventEmitter {
1174
1543
  getTalkenApiClientOrThrow() {
1175
1544
  const api = this.talkenApi || getTalkenApiClient();
1176
1545
  if (!api) {
1177
- throw new ProviderRpcError(
1178
- ErrorCode.INTERNAL_ERROR,
1546
+ throw new ProviderRpcError2(
1547
+ ErrorCode2.INTERNAL_ERROR,
1179
1548
  "TalkenApiClient not initialized"
1180
1549
  );
1181
1550
  }
@@ -1216,8 +1585,8 @@ var AbcEvmProvider = class extends EventEmitter {
1216
1585
  console.warn(
1217
1586
  "[AbcProvider] Cannot refresh signing credentials \u2014 PIN hash or email missing"
1218
1587
  );
1219
- throw new ProviderRpcError(
1220
- ErrorCode.UNAUTHORIZED,
1588
+ throw new ProviderRpcError2(
1589
+ ErrorCode2.UNAUTHORIZED,
1221
1590
  "Session expired. Please reconnect and verify your PIN."
1222
1591
  );
1223
1592
  }
@@ -1295,23 +1664,25 @@ var AbcEvmProvider = class extends EventEmitter {
1295
1664
  return this.eth_getTransactionCount(
1296
1665
  Array.isArray(params) ? params : []
1297
1666
  );
1298
- case "eth_blockNumber":
1299
1667
  case "eth_call":
1300
- case "eth_gasPrice":
1668
+ return this.eth_call(params);
1301
1669
  case "eth_getBalance":
1670
+ return this.eth_getBalance(params);
1671
+ case "eth_blockNumber":
1672
+ case "eth_gasPrice":
1302
1673
  case "eth_getBlockByHash":
1303
1674
  case "eth_getBlockByNumber":
1304
1675
  case "eth_getCode":
1305
1676
  case "eth_getStorageAt":
1306
1677
  case "eth_getTransactionByHash":
1307
1678
  case "eth_getTransactionReceipt":
1308
- throw new ProviderRpcError(
1309
- ErrorCode.UNSUPPORTED_METHOD,
1679
+ throw new ProviderRpcError2(
1680
+ ErrorCode2.UNSUPPORTED_METHOD,
1310
1681
  `Method ${method} should be handled by RPC provider`
1311
1682
  );
1312
1683
  default:
1313
- throw new ProviderRpcError(
1314
- ErrorCode.UNSUPPORTED_METHOD,
1684
+ throw new ProviderRpcError2(
1685
+ ErrorCode2.UNSUPPORTED_METHOD,
1315
1686
  `Method ${method} not supported`
1316
1687
  );
1317
1688
  }
@@ -1321,8 +1692,8 @@ var AbcEvmProvider = class extends EventEmitter {
1321
1692
  */
1322
1693
  async eth_requestAccounts() {
1323
1694
  if (!this.wallet) {
1324
- throw new ProviderRpcError(
1325
- ErrorCode.UNAUTHORIZED,
1695
+ throw new ProviderRpcError2(
1696
+ ErrorCode2.UNAUTHORIZED,
1326
1697
  "Wallet not connected"
1327
1698
  );
1328
1699
  }
@@ -1348,14 +1719,14 @@ var AbcEvmProvider = class extends EventEmitter {
1348
1719
  */
1349
1720
  async eth_sendTransaction(params) {
1350
1721
  if (!this.wallet) {
1351
- throw new ProviderRpcError(
1352
- ErrorCode.UNAUTHORIZED,
1722
+ throw new ProviderRpcError2(
1723
+ ErrorCode2.UNAUTHORIZED,
1353
1724
  "Wallet not connected"
1354
1725
  );
1355
1726
  }
1356
1727
  if (!Array.isArray(params) || params.length === 0) {
1357
- throw new ProviderRpcError(
1358
- ErrorCode.INVALID_PARAMS,
1728
+ throw new ProviderRpcError2(
1729
+ ErrorCode2.INVALID_PARAMS,
1359
1730
  "Invalid transaction params"
1360
1731
  );
1361
1732
  }
@@ -1406,25 +1777,35 @@ var AbcEvmProvider = class extends EventEmitter {
1406
1777
  if (isContractDeployment) {
1407
1778
  tx.to = "0x";
1408
1779
  } else if (!tx.to) {
1409
- throw new ProviderRpcError(
1410
- ErrorCode.INVALID_PARAMS,
1780
+ throw new ProviderRpcError2(
1781
+ ErrorCode2.INVALID_PARAMS,
1411
1782
  'Transaction must have "to" field'
1412
1783
  );
1413
1784
  }
1414
1785
  const pinHash = getCredentialManager().getPinHash();
1415
1786
  if (!pinHash) {
1416
- throw new ProviderRpcError(
1417
- ErrorCode.INTERNAL_ERROR,
1787
+ throw new ProviderRpcError2(
1788
+ ErrorCode2.INTERNAL_ERROR,
1418
1789
  "PIN hash not found. Please login again."
1419
1790
  );
1420
1791
  }
1421
1792
  const hexValue = tx.value || "0x0";
1422
1793
  const amountWei = BigInt(hexValue).toString();
1423
1794
  const email = this.getRecoveryEmail();
1795
+ const chainKey = getChainKey(this.chainId);
1796
+ const showPending = getShowPendingTransaction();
1797
+ if (showPending) {
1798
+ showPending({
1799
+ txHash: "",
1800
+ network: chainKey,
1801
+ chain: "evm",
1802
+ explorerUrl: void 0
1803
+ });
1804
+ }
1424
1805
  const api = this.getTalkenApiClientOrThrow();
1425
1806
  const result = await this.withSigningCredentialRetry(
1426
1807
  () => api.evm.sendTransaction({
1427
- chainKey: getChainKey(this.chainId),
1808
+ chainKey,
1428
1809
  to: tx.to,
1429
1810
  amountWei,
1430
1811
  pin: pinHash,
@@ -1432,9 +1813,20 @@ var AbcEvmProvider = class extends EventEmitter {
1432
1813
  gasLimit: tx.gas || tx.gasLimit,
1433
1814
  maxFeePerGas: tx.maxFeePerGas,
1434
1815
  maxPriorityFeePerGas: tx.maxPriorityFeePerGas,
1816
+ waitForReceipt: true,
1435
1817
  ...email && { email }
1436
1818
  })
1437
1819
  );
1820
+ const updateResult = getUpdateTransactionResult();
1821
+ if (updateResult) {
1822
+ updateResult({
1823
+ txHash: result.txHash,
1824
+ network: chainKey,
1825
+ chain: "evm",
1826
+ receipt: result.receipt ?? null,
1827
+ explorerUrl: getExplorerTxUrl(this.chainId, result.txHash)
1828
+ });
1829
+ }
1438
1830
  return result.txHash;
1439
1831
  }
1440
1832
  /**
@@ -1442,14 +1834,14 @@ var AbcEvmProvider = class extends EventEmitter {
1442
1834
  */
1443
1835
  async eth_signTransaction(params) {
1444
1836
  if (!this.wallet) {
1445
- throw new ProviderRpcError(
1446
- ErrorCode.UNAUTHORIZED,
1837
+ throw new ProviderRpcError2(
1838
+ ErrorCode2.UNAUTHORIZED,
1447
1839
  "Wallet not connected"
1448
1840
  );
1449
1841
  }
1450
1842
  if (!Array.isArray(params) || params.length === 0) {
1451
- throw new ProviderRpcError(
1452
- ErrorCode.INVALID_PARAMS,
1843
+ throw new ProviderRpcError2(
1844
+ ErrorCode2.INVALID_PARAMS,
1453
1845
  "Invalid transaction params"
1454
1846
  );
1455
1847
  }
@@ -1509,15 +1901,15 @@ var AbcEvmProvider = class extends EventEmitter {
1509
1901
  async personal_sign(params) {
1510
1902
  if (!this.wallet) {
1511
1903
  console.error("[AbcProvider] \u274C Wallet not connected");
1512
- throw new ProviderRpcError(
1513
- ErrorCode.UNAUTHORIZED,
1904
+ throw new ProviderRpcError2(
1905
+ ErrorCode2.UNAUTHORIZED,
1514
1906
  "Wallet not connected"
1515
1907
  );
1516
1908
  }
1517
1909
  if (!Array.isArray(params) || params.length < 2) {
1518
1910
  console.error("[AbcProvider] \u274C Invalid params:", params);
1519
- throw new ProviderRpcError(
1520
- ErrorCode.INVALID_PARAMS,
1911
+ throw new ProviderRpcError2(
1912
+ ErrorCode2.INVALID_PARAMS,
1521
1913
  "Invalid personal_sign params"
1522
1914
  );
1523
1915
  }
@@ -1525,8 +1917,8 @@ var AbcEvmProvider = class extends EventEmitter {
1525
1917
  const [message, address] = params;
1526
1918
  if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
1527
1919
  console.error("[AbcProvider] \u274C Address mismatch");
1528
- throw new ProviderRpcError(
1529
- ErrorCode.INVALID_PARAMS,
1920
+ throw new ProviderRpcError2(
1921
+ ErrorCode2.INVALID_PARAMS,
1530
1922
  "Address does not match connected wallet"
1531
1923
  );
1532
1924
  }
@@ -1550,8 +1942,8 @@ var AbcEvmProvider = class extends EventEmitter {
1550
1942
  */
1551
1943
  async eth_sign(params) {
1552
1944
  if (!Array.isArray(params) || params.length < 2) {
1553
- throw new ProviderRpcError(
1554
- ErrorCode.INVALID_PARAMS,
1945
+ throw new ProviderRpcError2(
1946
+ ErrorCode2.INVALID_PARAMS,
1555
1947
  "Invalid eth_sign params"
1556
1948
  );
1557
1949
  }
@@ -1563,22 +1955,22 @@ var AbcEvmProvider = class extends EventEmitter {
1563
1955
  */
1564
1956
  async eth_signTypedData(params) {
1565
1957
  if (!this.wallet) {
1566
- throw new ProviderRpcError(
1567
- ErrorCode.UNAUTHORIZED,
1958
+ throw new ProviderRpcError2(
1959
+ ErrorCode2.UNAUTHORIZED,
1568
1960
  "Wallet not connected"
1569
1961
  );
1570
1962
  }
1571
1963
  if (!Array.isArray(params) || params.length < 2) {
1572
- throw new ProviderRpcError(
1573
- ErrorCode.INVALID_PARAMS,
1964
+ throw new ProviderRpcError2(
1965
+ ErrorCode2.INVALID_PARAMS,
1574
1966
  "Invalid signTypedData params"
1575
1967
  );
1576
1968
  }
1577
1969
  await this.callInterceptor("eth_signTypedData_v4", params);
1578
1970
  const [address, typedData] = params;
1579
1971
  if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
1580
- throw new ProviderRpcError(
1581
- ErrorCode.INVALID_PARAMS,
1972
+ throw new ProviderRpcError2(
1973
+ ErrorCode2.INVALID_PARAMS,
1582
1974
  "Address does not match connected wallet"
1583
1975
  );
1584
1976
  }
@@ -1615,27 +2007,27 @@ var AbcEvmProvider = class extends EventEmitter {
1615
2007
  */
1616
2008
  async eth_signAuthorization(params) {
1617
2009
  if (!this.wallet) {
1618
- throw new ProviderRpcError(
1619
- ErrorCode.UNAUTHORIZED,
2010
+ throw new ProviderRpcError2(
2011
+ ErrorCode2.UNAUTHORIZED,
1620
2012
  "Wallet not connected"
1621
2013
  );
1622
2014
  }
1623
2015
  if (!Array.isArray(params) || params.length < 2) {
1624
- throw new ProviderRpcError(
1625
- ErrorCode.INVALID_PARAMS,
2016
+ throw new ProviderRpcError2(
2017
+ ErrorCode2.INVALID_PARAMS,
1626
2018
  "Invalid signAuthorization params"
1627
2019
  );
1628
2020
  }
1629
2021
  const [address, authorization] = params;
1630
2022
  if (address.toLowerCase() !== this.wallet.address.toLowerCase()) {
1631
- throw new ProviderRpcError(
1632
- ErrorCode.INVALID_PARAMS,
2023
+ throw new ProviderRpcError2(
2024
+ ErrorCode2.INVALID_PARAMS,
1633
2025
  "Address does not match connected wallet"
1634
2026
  );
1635
2027
  }
1636
2028
  if (!authorization?.address || authorization.chainId == null || authorization.nonce == null) {
1637
- throw new ProviderRpcError(
1638
- ErrorCode.INVALID_PARAMS,
2029
+ throw new ProviderRpcError2(
2030
+ ErrorCode2.INVALID_PARAMS,
1639
2031
  "Authorization payload is incomplete"
1640
2032
  );
1641
2033
  }
@@ -1666,8 +2058,8 @@ var AbcEvmProvider = class extends EventEmitter {
1666
2058
  */
1667
2059
  async wallet_switchEthereumChain(params) {
1668
2060
  if (!Array.isArray(params) || params.length === 0) {
1669
- throw new ProviderRpcError(
1670
- ErrorCode.INVALID_PARAMS,
2061
+ throw new ProviderRpcError2(
2062
+ ErrorCode2.INVALID_PARAMS,
1671
2063
  "Invalid switchEthereumChain params"
1672
2064
  );
1673
2065
  }
@@ -1696,8 +2088,8 @@ var AbcEvmProvider = class extends EventEmitter {
1696
2088
  async eth_getTransactionCount(params) {
1697
2089
  const address = params[0]?.toLowerCase();
1698
2090
  if (!address) {
1699
- throw new ProviderRpcError(
1700
- ErrorCode.INVALID_PARAMS,
2091
+ throw new ProviderRpcError2(
2092
+ ErrorCode2.INVALID_PARAMS,
1701
2093
  "Missing address parameter"
1702
2094
  );
1703
2095
  }
@@ -1718,8 +2110,8 @@ var AbcEvmProvider = class extends EventEmitter {
1718
2110
  "[AbcEvmProvider] \u274C Failed to get transaction count from ABC WaaS:",
1719
2111
  error
1720
2112
  );
1721
- throw new ProviderRpcError(
1722
- ErrorCode.INTERNAL_ERROR,
2113
+ throw new ProviderRpcError2(
2114
+ ErrorCode2.INTERNAL_ERROR,
1723
2115
  `Failed to get transaction count: ${error instanceof Error ? error.message : String(error)}`
1724
2116
  );
1725
2117
  }
@@ -1730,15 +2122,15 @@ var AbcEvmProvider = class extends EventEmitter {
1730
2122
  */
1731
2123
  async eth_estimateGas(params) {
1732
2124
  if (!Array.isArray(params) || params.length === 0) {
1733
- throw new ProviderRpcError(
1734
- ErrorCode.INVALID_PARAMS,
2125
+ throw new ProviderRpcError2(
2126
+ ErrorCode2.INVALID_PARAMS,
1735
2127
  "Invalid estimateGas params"
1736
2128
  );
1737
2129
  }
1738
2130
  const tx = params[0];
1739
2131
  if (!tx.to) {
1740
- throw new ProviderRpcError(
1741
- ErrorCode.INVALID_PARAMS,
2132
+ throw new ProviderRpcError2(
2133
+ ErrorCode2.INVALID_PARAMS,
1742
2134
  'Transaction must have "to" field'
1743
2135
  );
1744
2136
  }
@@ -1765,6 +2157,60 @@ var AbcEvmProvider = class extends EventEmitter {
1765
2157
  return "0x5208";
1766
2158
  }
1767
2159
  }
2160
+ /**
2161
+ * Execute read-only eth_call via talken-api
2162
+ */
2163
+ async eth_call(params) {
2164
+ const p = Array.isArray(params) ? params : [];
2165
+ const tx = p[0];
2166
+ if (!tx?.to || !tx?.data) {
2167
+ throw new ProviderRpcError2(
2168
+ ErrorCode2.INVALID_PARAMS,
2169
+ "eth_call requires to and data"
2170
+ );
2171
+ }
2172
+ try {
2173
+ const api = this.getTalkenApiClientOrThrow();
2174
+ const response = await api.evm.ethCall({
2175
+ network: getNetworkName(this.chainId),
2176
+ to: tx.to,
2177
+ data: tx.data,
2178
+ from: tx.from || this.wallet?.address
2179
+ });
2180
+ return response?.result ?? response?.data ?? "0x";
2181
+ } catch (error) {
2182
+ throw new ProviderRpcError2(
2183
+ ErrorCode2.INTERNAL_ERROR,
2184
+ `eth_call failed: ${error instanceof Error ? error.message : String(error)}`
2185
+ );
2186
+ }
2187
+ }
2188
+ /**
2189
+ * Get native balance via talken-api
2190
+ */
2191
+ async eth_getBalance(params) {
2192
+ const p = Array.isArray(params) ? params : [];
2193
+ const address = p[0] || this.wallet?.address;
2194
+ if (!address) {
2195
+ throw new ProviderRpcError2(
2196
+ ErrorCode2.INVALID_PARAMS,
2197
+ "Missing address parameter"
2198
+ );
2199
+ }
2200
+ try {
2201
+ const api = this.getTalkenApiClientOrThrow();
2202
+ const response = await api.evm.getBalance(
2203
+ getNetworkName(this.chainId),
2204
+ address
2205
+ );
2206
+ return response?.balance ?? "0x0";
2207
+ } catch (error) {
2208
+ throw new ProviderRpcError2(
2209
+ ErrorCode2.INTERNAL_ERROR,
2210
+ `eth_getBalance failed: ${error instanceof Error ? error.message : String(error)}`
2211
+ );
2212
+ }
2213
+ }
1768
2214
  /**
1769
2215
  * Check if connected
1770
2216
  */
@@ -2143,6 +2589,21 @@ var TalkenEvmModule = class {
2143
2589
  const qs = new URLSearchParams({ network, address }).toString();
2144
2590
  return this.client.get(`${TALKEN_API_ENDPOINTS.NONCE}?${qs}`);
2145
2591
  }
2592
+ /**
2593
+ * Get native balance for address
2594
+ * GET /wallet/address/balance?network=&address=
2595
+ */
2596
+ async getBalance(network, address) {
2597
+ const qs = new URLSearchParams({ network, address }).toString();
2598
+ return this.client.get(`${TALKEN_API_ENDPOINTS.ADDRESS_BALANCE}?${qs}`);
2599
+ }
2600
+ /**
2601
+ * Execute read-only eth_call
2602
+ * POST /wallet/contract/eth-call { network, to, data, from? }
2603
+ */
2604
+ async ethCall(params) {
2605
+ return this.client.post(TALKEN_API_ENDPOINTS.ETH_CALL, params);
2606
+ }
2146
2607
  };
2147
2608
  var TalkenSolanaModule = class {
2148
2609
  constructor(client) {
@@ -2314,6 +2775,24 @@ var TalkenTronModule = class {
2314
2775
  params
2315
2776
  );
2316
2777
  }
2778
+ /**
2779
+ * Get TRON account info (balance, resource, permissions)
2780
+ * GET /wallet/tron?mode=account&network=&address=
2781
+ */
2782
+ async getAccount(network, address) {
2783
+ return this.client.get(
2784
+ `${TALKEN_API_ENDPOINTS.TRON_UTIL}?mode=account&network=${encodeURIComponent(network)}&address=${encodeURIComponent(address)}`
2785
+ );
2786
+ }
2787
+ /**
2788
+ * Get TRC20 token balance
2789
+ * GET /wallet/tron?mode=trc20Balance&network=&address=&contractAddress=
2790
+ */
2791
+ async getTrc20Balance(network, address, contractAddress) {
2792
+ return this.client.get(
2793
+ `${TALKEN_API_ENDPOINTS.TRON_UTIL}?mode=trc20Balance&network=${encodeURIComponent(network)}&address=${encodeURIComponent(address)}&contractAddress=${encodeURIComponent(contractAddress)}`
2794
+ );
2795
+ }
2317
2796
  };
2318
2797
  var TalkenWalletscanModule = class {
2319
2798
  constructor(client) {
@@ -2722,7 +3201,11 @@ function abcConnector(options) {
2722
3201
  defaultChainId: config.defaultChainId
2723
3202
  });
2724
3203
  setTalkenApiClient(talkenApi);
2725
- const provider = createAbcEvmProvider(talkenApi);
3204
+ const isAccessKeyMode = !!config.accessKey;
3205
+ const provider = isAccessKeyMode ? new AbcAccessKeyProvider(
3206
+ config.accessKey,
3207
+ resolveTalkenApiUrl(config.talkenApiUrl)
3208
+ ) : createAbcEvmProvider(talkenApi);
2726
3209
  let accountsChangedHandler;
2727
3210
  let chainChangedHandler;
2728
3211
  let disconnectHandler;
@@ -2739,13 +3222,59 @@ function abcConnector(options) {
2739
3222
  if (!authState || !authState.isAuthenticated || !authState.wallet) {
2740
3223
  throw new Error("ABC_LOGIN_REQUIRED");
2741
3224
  }
2742
- provider.setWallet(authState.wallet);
2743
- if (authState.accessToken && authState.refreshToken && authState.expiresAt) {
2744
- talkenApi.setTokens(
2745
- authState.accessToken,
2746
- authState.refreshToken,
2747
- authState.expiresAt
2748
- );
3225
+ if (isAccessKeyMode) {
3226
+ let w = authState.wallet;
3227
+ if (!w.uid || !w.sessionId) {
3228
+ try {
3229
+ const apiUrl = resolveTalkenApiUrl(config.talkenApiUrl);
3230
+ const res = await fetch(`${apiUrl}/wallet/mpc`, {
3231
+ method: "POST",
3232
+ headers: {
3233
+ "Content-Type": "application/json",
3234
+ "X-Access-Key": config.accessKey
3235
+ },
3236
+ body: JSON.stringify({ action: "info" })
3237
+ });
3238
+ const data = await res.json();
3239
+ const acct = data?.data?.accounts?.[0] || data?.data;
3240
+ if (acct?.ethAddress || acct?.address) {
3241
+ w = {
3242
+ address: acct.ethAddress || acct.address || w.address,
3243
+ chainId: w.chainId || config.defaultChainId || 1,
3244
+ uid: acct.uid || data?.data?.uid || "",
3245
+ sessionId: acct.sid || acct.sessionId || "",
3246
+ keyId: acct.keyId || (acct.wid != null ? String(acct.wid) : "") || (data?.data?.wid != null ? String(data.data.wid) : ""),
3247
+ encryptedShare: acct.encryptedShare || acct.pvencstr || "",
3248
+ sid: acct.sid || "",
3249
+ type: "evm",
3250
+ email: authState.user?.email || acct.email || data?.data?.email || ""
3251
+ };
3252
+ saveAuthState({ ...authState, wallet: w });
3253
+ }
3254
+ } catch (_) {
3255
+ }
3256
+ }
3257
+ const fullWallet = {
3258
+ address: w.address,
3259
+ chainId: w.chainId || config.defaultChainId || 1,
3260
+ uid: w.uid || "",
3261
+ sessionId: w.sessionId || "",
3262
+ keyId: w.keyId || "",
3263
+ encryptedShare: w.encryptedShare || "",
3264
+ sid: w.sid || "",
3265
+ type: "evm",
3266
+ email: w.email || authState.user?.email || ""
3267
+ };
3268
+ provider.setWallet(fullWallet);
3269
+ } else {
3270
+ provider.setWallet(authState.wallet);
3271
+ if (authState.accessToken && authState.refreshToken && authState.expiresAt) {
3272
+ talkenApi.setTokens(
3273
+ authState.accessToken,
3274
+ authState.refreshToken,
3275
+ authState.expiresAt
3276
+ );
3277
+ }
2749
3278
  }
2750
3279
  const accounts = await provider.request({
2751
3280
  method: "eth_requestAccounts"
@@ -2866,6 +3395,13 @@ function abcConnector(options) {
2866
3395
  */
2867
3396
  async isAuthorized() {
2868
3397
  try {
3398
+ if (isAccessKeyMode) {
3399
+ if (provider.isConnected())
3400
+ return true;
3401
+ const hasKey = !!config.accessKey || typeof localStorage !== "undefined" && !!localStorage.getItem("talken_ak");
3402
+ const authState2 = loadAuthState();
3403
+ return hasKey && !!authState2?.wallet?.address;
3404
+ }
2869
3405
  const authState = loadAuthState();
2870
3406
  if (!authState || !authState.isAuthenticated) {
2871
3407
  return false;
@@ -2976,6 +3512,7 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
2976
3512
  debug: specificOptions?.environment === "development"
2977
3513
  });
2978
3514
  setTalkenApiClient2(talkenApi);
3515
+ const accessKey = specificOptions?.accessKey || (typeof localStorage !== "undefined" ? localStorage.getItem("talken_ak") : null) || null;
2979
3516
  const config = {
2980
3517
  talkenApiUrl,
2981
3518
  apiKey: specificOptions?.apiKey,
@@ -2985,7 +3522,8 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
2985
3522
  defaultChainId: specificOptions?.defaultChainId,
2986
3523
  defaultSolanaNetwork: specificOptions?.defaultSolanaNetwork,
2987
3524
  defaultBitcoinNetwork: specificOptions?.defaultBitcoinNetwork,
2988
- projectId
3525
+ projectId,
3526
+ ...accessKey && { accessKey }
2989
3527
  };
2990
3528
  return {
2991
3529
  id: ABC_WALLET_METADATA.id,
@@ -2998,6 +3536,7 @@ var abcWallet = (specificOptions) => ({ projectId }) => {
2998
3536
  // No download URLs for embedded wallet
2999
3537
  downloadUrls: void 0,
3000
3538
  // Create connector - wrapper function required by Wallet type
3539
+ // If accessKey exists, abcConnector will use AbcAccessKeyProvider internally
3001
3540
  createConnector: (_walletDetails) => abcConnector({ config }),
3002
3541
  // Embedded wallet always available
3003
3542
  hidden: () => false
@@ -3527,7 +4066,7 @@ import { getTalkenApiClient as getTalkenApiClient10 } from "@talken/talkenkit";
3527
4066
  function isTalkenApiClient(client) {
3528
4067
  return typeof client?.bitcoin?.getUtxos === "function";
3529
4068
  }
3530
- var EventEmitter2 = class {
4069
+ var EventEmitter3 = class {
3531
4070
  constructor() {
3532
4071
  this.events = /* @__PURE__ */ new Map();
3533
4072
  }
@@ -3600,7 +4139,7 @@ var BITCOIN_NETWORKS = {
3600
4139
  explorer: "https://blockstream.info/testnet"
3601
4140
  }
3602
4141
  };
3603
- var AbcBitcoinProvider = class extends EventEmitter2 {
4142
+ var AbcBitcoinProvider = class extends EventEmitter3 {
3604
4143
  constructor(client) {
3605
4144
  super();
3606
4145
  this.wallet = null;
@@ -4371,7 +4910,11 @@ function createAbcBitcoinConnector(config) {
4371
4910
  }
4372
4911
 
4373
4912
  // src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
4374
- import { getTalkenApiClient as getTalkenApiClient12 } from "@talken/talkenkit";
4913
+ import {
4914
+ getShowPendingTransaction as getShowPendingTransaction2,
4915
+ getTalkenApiClient as getTalkenApiClient12,
4916
+ getUpdateTransactionResult as getUpdateTransactionResult2
4917
+ } from "@talken/talkenkit";
4375
4918
 
4376
4919
  // src/utils/apiClientFactory.ts
4377
4920
  function createWalletscanApi() {
@@ -4391,7 +4934,7 @@ function createSolanaApi() {
4391
4934
  }
4392
4935
 
4393
4936
  // src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
4394
- var EventEmitter3 = class {
4937
+ var EventEmitter4 = class {
4395
4938
  constructor() {
4396
4939
  this.events = /* @__PURE__ */ new Map();
4397
4940
  }
@@ -4450,7 +4993,7 @@ var SolanaProviderError = class extends Error {
4450
4993
  this.name = "SolanaProviderError";
4451
4994
  }
4452
4995
  };
4453
- var AbcSolanaProvider = class extends EventEmitter3 {
4996
+ var AbcSolanaProvider = class extends EventEmitter4 {
4454
4997
  constructor(talkenApi) {
4455
4998
  super();
4456
4999
  this.wallet = null;
@@ -4707,6 +5250,15 @@ var AbcSolanaProvider = class extends EventEmitter3 {
4707
5250
  });
4708
5251
  const api = this.getTalkenApiClientOrThrow();
4709
5252
  const apiNetwork = this.wallet.network === "solana" ? "solana" : "solana_devnet";
5253
+ const showPending = getShowPendingTransaction2();
5254
+ if (showPending) {
5255
+ showPending({
5256
+ txHash: "",
5257
+ network: apiNetwork,
5258
+ chain: "solana",
5259
+ explorerUrl: void 0
5260
+ });
5261
+ }
4710
5262
  if (params.mintAddress) {
4711
5263
  const walletscanApi = createWalletscanApi();
4712
5264
  const tokenMeta = await walletscanApi.getContractTokenWithTimeout({
@@ -4722,9 +5274,11 @@ var AbcSolanaProvider = class extends EventEmitter3 {
4722
5274
  amount: String(rawAmount),
4723
5275
  decimals,
4724
5276
  network: apiNetwork,
4725
- pin: pinHash
5277
+ pin: pinHash,
5278
+ waitForConfirmation: true
4726
5279
  });
4727
5280
  console.log("[AbcSolanaProvider] SPL transfer result:", result2);
5281
+ this.updateTransactionResult(result2, apiNetwork);
4728
5282
  return { signature: result2.txHash };
4729
5283
  }
4730
5284
  const { LAMPORTS_PER_SOL } = await import("@solana/web3.js");
@@ -4739,9 +5293,11 @@ var AbcSolanaProvider = class extends EventEmitter3 {
4739
5293
  toAddress: params.toAddress,
4740
5294
  amountLamports: String(amountLamports),
4741
5295
  network: apiNetwork,
4742
- pin: pinHash
5296
+ pin: pinHash,
5297
+ waitForConfirmation: true
4743
5298
  });
4744
5299
  console.log("[AbcSolanaProvider] native transfer result:", result);
5300
+ this.updateTransactionResult(result, apiNetwork);
4745
5301
  return { signature: result.txHash };
4746
5302
  } catch (error) {
4747
5303
  console.error("[AbcSolanaProvider] transfer FAILED:", {
@@ -4814,10 +5370,38 @@ var AbcSolanaProvider = class extends EventEmitter3 {
4814
5370
  );
4815
5371
  }
4816
5372
  }
5373
+ updateTransactionResult(result, network) {
5374
+ const updateResult = getUpdateTransactionResult2();
5375
+ if (!updateResult)
5376
+ return;
5377
+ let receipt = result.receipt;
5378
+ if (!receipt && result.confirmation) {
5379
+ const data = result.confirmation?.data?.result ?? result.confirmation?.result ?? result.confirmation;
5380
+ const slot = data?.slot;
5381
+ const meta = data?.meta;
5382
+ receipt = {
5383
+ status: meta?.err === null ? 1 : 0,
5384
+ blockNumber: slot ?? null,
5385
+ gasUsed: meta?.fee != null ? String(meta.fee) : null
5386
+ };
5387
+ }
5388
+ const cluster = network.includes("devnet") ? "?cluster=devnet" : "";
5389
+ updateResult({
5390
+ txHash: result.txHash,
5391
+ network,
5392
+ chain: "solana",
5393
+ receipt,
5394
+ explorerUrl: `https://explorer.solana.com/tx/${result.txHash}${cluster}`
5395
+ });
5396
+ }
4817
5397
  };
4818
5398
 
4819
5399
  // src/wallets/walletConnectors/abcWallet/abcTronProvider.ts
4820
- import { getTalkenApiClient as getTalkenApiClient13 } from "@talken/talkenkit";
5400
+ import {
5401
+ getShowPendingTransaction as getShowPendingTransaction3,
5402
+ getTalkenApiClient as getTalkenApiClient13,
5403
+ getUpdateTransactionResult as getUpdateTransactionResult3
5404
+ } from "@talken/talkenkit";
4821
5405
  import { keccak256 } from "viem";
4822
5406
  function isTalkenApiClient2(client) {
4823
5407
  return typeof client?.tron?.transferTrx === "function";
@@ -4851,7 +5435,7 @@ var TRON_NETWORKS = {
4851
5435
  explorer: "https://nile.tronscan.org"
4852
5436
  }
4853
5437
  };
4854
- var EventEmitter4 = class {
5438
+ var EventEmitter5 = class {
4855
5439
  constructor() {
4856
5440
  this.events = /* @__PURE__ */ new Map();
4857
5441
  }
@@ -4891,7 +5475,7 @@ var EventEmitter4 = class {
4891
5475
  return this;
4892
5476
  }
4893
5477
  };
4894
- var AbcTronProvider = class extends EventEmitter4 {
5478
+ var AbcTronProvider = class extends EventEmitter5 {
4895
5479
  constructor(client) {
4896
5480
  super();
4897
5481
  this.wallet = null;
@@ -5138,6 +5722,7 @@ ${msgBytes.length}`
5138
5722
  toAddress: params.toAddress,
5139
5723
  amountSun: amountRaw,
5140
5724
  pin: pinHash,
5725
+ waitForConfirmation: true,
5141
5726
  ...email && { email }
5142
5727
  } : {
5143
5728
  kind: "trc20",
@@ -5147,10 +5732,21 @@ ${msgBytes.length}`
5147
5732
  amount: amountRaw,
5148
5733
  feeLimit: params.feeLimit,
5149
5734
  pin: pinHash,
5735
+ waitForConfirmation: true,
5150
5736
  ...email && { email }
5151
5737
  };
5738
+ const showPending = getShowPendingTransaction3();
5739
+ if (showPending) {
5740
+ showPending({
5741
+ txHash: "",
5742
+ network: this.network.type,
5743
+ chain: "tron",
5744
+ explorerUrl: void 0
5745
+ });
5746
+ }
5152
5747
  const result = await api.tron.transferTrx(request);
5153
5748
  const txHash = result.txHash;
5749
+ this.updateTransactionResult(result);
5154
5750
  console.log(
5155
5751
  `[TronProvider] \u2705 ${txType === "NATIVE" ? "TRX" : "TRC-20"} transaction complete via TalkenApiClient:`,
5156
5752
  txHash
@@ -5197,6 +5793,33 @@ ${msgBytes.length}`
5197
5793
  network: this.network.type
5198
5794
  };
5199
5795
  }
5796
+ updateTransactionResult(result) {
5797
+ const updateResult = getUpdateTransactionResult3();
5798
+ if (!updateResult)
5799
+ return;
5800
+ let receipt = result.receipt;
5801
+ if (!receipt && result.confirmation) {
5802
+ const conf = result.confirmation;
5803
+ const info = conf?.info ?? conf;
5804
+ const tx = conf?.transaction ?? conf;
5805
+ const blockNumber = info?.blockNumber ?? info?.result?.blockNumber ?? null;
5806
+ const rcpt = info?.receipt ?? info?.result?.receipt;
5807
+ const ret = tx?.ret ?? tx?.result?.ret;
5808
+ const contractRet = Array.isArray(ret) ? ret[0]?.contractRet : void 0;
5809
+ receipt = {
5810
+ status: contractRet === "SUCCESS" ? 1 : contractRet ? 0 : null,
5811
+ blockNumber,
5812
+ gasUsed: rcpt?.energy_usage_total != null ? String(rcpt.energy_usage_total) : null
5813
+ };
5814
+ }
5815
+ updateResult({
5816
+ txHash: result.txHash,
5817
+ network: this.network.type,
5818
+ chain: "tron",
5819
+ receipt,
5820
+ explorerUrl: `${this.network.explorer}/#/transaction/${result.txHash}`
5821
+ });
5822
+ }
5200
5823
  };
5201
5824
 
5202
5825
  // src/wallets/walletConnectors/abcWallet/walletGeneration.ts