@talken/talkenkit 2.5.0 → 2.5.2

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 (71) hide show
  1. package/dist/{AbcCredentialManager-DDHLW2IH.js → AbcCredentialManager-5W3B7GI4.js} +1 -1
  2. package/dist/{abcWallet-5GTT47V6.js → abcWallet-HRNBHY5Q.js} +2 -2
  3. package/dist/{chunk-ALBABQ53.js → chunk-PN6K4CMZ.js} +4 -1
  4. package/dist/{chunk-REVMSQIO.js → chunk-VCQZZ6SN.js} +478 -58
  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 +1341 -977
  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 +29 -3
  18. package/dist/wallets/walletConnectors/abcWallet/abcAccessKeyProvider.js +4 -4
  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 -8
  22. package/dist/wallets/walletConnectors/abcWallet/abcProvider.d.ts +8 -0
  23. package/dist/wallets/walletConnectors/abcWallet/abcProvider.js +5 -5
  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.js +9 -9
  30. package/dist/wallets/walletConnectors/abcWallet/api/ConfigApi.js +2 -2
  31. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.d.ts +25 -0
  32. package/dist/wallets/walletConnectors/abcWallet/api/TalkenApiClient.js +3 -3
  33. package/dist/wallets/walletConnectors/abcWallet/api/TokenApi.js +2 -2
  34. package/dist/wallets/walletConnectors/abcWallet/api/WalletscanApi.js +3 -3
  35. package/dist/wallets/walletConnectors/abcWallet/api/index.js +9 -9
  36. package/dist/wallets/walletConnectors/abcWallet/constants.d.ts +3 -0
  37. package/dist/wallets/walletConnectors/abcWallet/constants.js +1 -1
  38. package/dist/wallets/walletConnectors/abcWallet/index.d.ts +1 -1
  39. package/dist/wallets/walletConnectors/abcWallet/index.js +21 -21
  40. package/dist/wallets/walletConnectors/abcWallet/sessionUtils.js +2 -2
  41. package/dist/wallets/walletConnectors/abcWallet/types.d.ts +9 -0
  42. package/dist/wallets/walletConnectors/abcWallet/utils.js +2 -2
  43. package/dist/wallets/walletConnectors/abcWallet/walletGeneration.js +3 -3
  44. package/dist/wallets/walletConnectors/{chunk-VDWJ3NQ5.js → chunk-25ZDAJ3L.js} +1 -1
  45. package/dist/wallets/walletConnectors/{chunk-HWXOTEC3.js → chunk-2A5XTST5.js} +64 -14
  46. package/dist/wallets/walletConnectors/chunk-4JZPP3S7.js +380 -0
  47. package/dist/wallets/walletConnectors/{chunk-QSP2A4LA.js → chunk-4PDTJS5L.js} +3 -3
  48. package/dist/wallets/walletConnectors/{chunk-IN3HEGZM.js → chunk-645DT4TS.js} +46 -5
  49. package/dist/wallets/walletConnectors/{chunk-BHEVY4QY.js → chunk-ASYCOXE6.js} +50 -4
  50. package/dist/wallets/walletConnectors/chunk-BRXYKYKT.js +360 -0
  51. package/dist/wallets/walletConnectors/{chunk-MO2AXXLI.js → chunk-FKI5AZVH.js} +1 -1
  52. package/dist/wallets/walletConnectors/{chunk-JADQLTFW.js → chunk-H2AZTZMM.js} +1 -1
  53. package/dist/wallets/walletConnectors/{chunk-NULM3THX.js → chunk-HWRZGGGN.js} +1 -1
  54. package/dist/wallets/walletConnectors/chunk-IPH3SIC3.js +57 -0
  55. package/dist/wallets/walletConnectors/chunk-JBOKTW2Q.js +360 -0
  56. package/dist/wallets/walletConnectors/{chunk-TQHS6APN.js → chunk-L6FCF3FH.js} +89 -7
  57. package/dist/wallets/walletConnectors/{chunk-ACLPF2UW.js → chunk-LIGH2LEU.js} +1 -1
  58. package/dist/wallets/walletConnectors/chunk-MIX4TRKO.js +194 -0
  59. package/dist/wallets/walletConnectors/chunk-NP5PWUVU.js +873 -0
  60. package/dist/wallets/walletConnectors/{chunk-K66HU6GX.js → chunk-OASBABPG.js} +15 -1
  61. package/dist/wallets/walletConnectors/{chunk-A66MTFML.js → chunk-PF65YS3T.js} +1 -1
  62. package/dist/wallets/walletConnectors/{chunk-6WF4SXLB.js → chunk-QKK3OPQA.js} +1 -1
  63. package/dist/wallets/walletConnectors/{chunk-3LF7FVL6.js → chunk-RGYZNNB6.js} +1 -1
  64. package/dist/wallets/walletConnectors/{chunk-DPTDOCWL.js → chunk-RX2VOIUB.js} +4 -1
  65. package/dist/wallets/walletConnectors/chunk-TVZHPWFR.js +843 -0
  66. package/dist/wallets/walletConnectors/{chunk-YV6IZWGE.js → chunk-URS2KVYK.js} +45 -2
  67. package/dist/wallets/walletConnectors/chunk-WKP53WWR.js +57 -0
  68. package/dist/wallets/walletConnectors/{chunk-BXH3GDX5.js → chunk-YKFI6ZGM.js} +1 -1
  69. package/dist/wallets/walletConnectors/index.js +48 -48
  70. package/package.json +1 -1
  71. 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-A66MTFML.js";
19
+ } from "../chunk-PF65YS3T.js";
20
20
  import "../chunk-4P3SPC44.js";
21
- import "../chunk-DPTDOCWL.js";
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-JADQLTFW.js";
6
+ } from "../chunk-H2AZTZMM.js";
7
7
  import "../chunk-O4AU63LK.js";
8
8
  import "../chunk-4P3SPC44.js";
9
- import "../chunk-6WF4SXLB.js";
10
- import "../chunk-DPTDOCWL.js";
9
+ import "../chunk-QKK3OPQA.js";
10
+ import "../chunk-RX2VOIUB.js";
11
11
  export {
12
12
  generateMpcWallets,
13
13
  recoverMpcWallets,
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import {
3
3
  TALKEN_API_ENDPOINTS
4
- } from "./chunk-DPTDOCWL.js";
4
+ } from "./chunk-RX2VOIUB.js";
5
5
 
6
6
  // src/wallets/walletConnectors/abcWallet/api/ConfigApi.ts
7
7
  import { getTalkenApiClient } from "@talken/talkenkit";
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-GFWUFYT2.js";
8
8
  import {
9
9
  AbcAccessKeyProvider
10
- } from "./chunk-S2SQYPGR.js";
10
+ } from "./chunk-4JZPP3S7.js";
11
11
  import {
12
12
  setGlobalDefaultBitcoinNetwork,
13
13
  setGlobalDefaultChainId,
@@ -15,20 +15,20 @@ import {
15
15
  } from "./chunk-O4AU63LK.js";
16
16
  import {
17
17
  createAbcEvmProvider
18
- } from "./chunk-TQHS6APN.js";
18
+ } from "./chunk-L6FCF3FH.js";
19
19
  import {
20
20
  clearAuthState,
21
21
  clearStorage,
22
22
  loadAuthState,
23
23
  loadFromStorage,
24
24
  saveAuthState
25
- } from "./chunk-A66MTFML.js";
25
+ } from "./chunk-PF65YS3T.js";
26
26
  import {
27
27
  createTalkenApiClient
28
- } from "./chunk-BHEVY4QY.js";
28
+ } from "./chunk-NP5PWUVU.js";
29
29
  import {
30
30
  getCredentialManager
31
- } from "./chunk-6WF4SXLB.js";
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
- provider.setWallet(authState.wallet);
77
- if (authState.accessToken && authState.refreshToken && authState.expiresAt) {
78
- talkenApi.setTokens(
79
- authState.accessToken,
80
- authState.refreshToken,
81
- authState.expiresAt
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 && provider.isConnected()) {
204
- return true;
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) {
@@ -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
+ };
@@ -1,16 +1,16 @@
1
1
  "use client";
2
2
  import {
3
3
  abcConnector
4
- } from "./chunk-HWXOTEC3.js";
4
+ } from "./chunk-BRXYKYKT.js";
5
5
  import {
6
6
  resolveTalkenApiUrl
7
7
  } from "./chunk-GFWUFYT2.js";
8
8
  import {
9
9
  createTalkenApiClient
10
- } from "./chunk-BHEVY4QY.js";
10
+ } from "./chunk-NP5PWUVU.js";
11
11
  import {
12
12
  ABC_WALLET_METADATA
13
- } from "./chunk-DPTDOCWL.js";
13
+ } from "./chunk-RX2VOIUB.js";
14
14
 
15
15
  // src/wallets/walletConnectors/abcWallet/abcWallet.ts
16
16
  import { setTalkenApiClient } from "@talken/talkenkit";
@@ -1,13 +1,17 @@
1
1
  "use client";
2
2
  import {
3
3
  WalletscanApi
4
- } from "./chunk-NULM3THX.js";
4
+ } from "./chunk-HWRZGGGN.js";
5
5
  import {
6
6
  getCredentialManager
7
- } from "./chunk-6WF4SXLB.js";
7
+ } from "./chunk-QKK3OPQA.js";
8
8
 
9
9
  // src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
10
- import { getTalkenApiClient } from "@talken/talkenkit";
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 {