@talken/talkenkit 2.4.7 → 2.4.8

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/index.js CHANGED
@@ -30,7 +30,7 @@ import {
30
30
  isTestnet,
31
31
  networkToChainId,
32
32
  networks_exports
33
- } from "./chunk-5524HDQP.js";
33
+ } from "./chunk-KCMRHCAB.js";
34
34
  import "./chunk-DFWCI4QG.js";
35
35
  import {
36
36
  darkTheme
@@ -3207,7 +3207,7 @@ function setRainbowKitVersion({ version }) {
3207
3207
  }
3208
3208
  function useFingerprint() {
3209
3209
  const fingerprint = useCallback4(() => {
3210
- setRainbowKitVersion({ version: "2.4.7" });
3210
+ setRainbowKitVersion({ version: "2.4.8" });
3211
3211
  }, []);
3212
3212
  useEffect12(() => {
3213
3213
  fingerprint();
@@ -12508,10 +12508,8 @@ function PinProvider({ children }) {
12508
12508
  }
12509
12509
  const enteredPinHash = await hashPin(pin);
12510
12510
  if (enteredPinHash !== storedPinHash) {
12511
- console.log("[PinProvider] \u274C PIN verification failed");
12512
12511
  throw new Error("Incorrect PIN. Please try again.");
12513
12512
  }
12514
- console.log("[PinProvider] \u2705 PIN verified successfully");
12515
12513
  pinResolver(pin);
12516
12514
  setIsModalOpen(false);
12517
12515
  setPinResolver(null);
@@ -12543,7 +12541,6 @@ function PinProvider({ children }) {
12543
12541
  provider.setRequestPinCallback(() => requestPin("transaction"));
12544
12542
  }
12545
12543
  } catch (error3) {
12546
- console.error("[PinProvider] Failed to set PIN callback:", error3);
12547
12544
  }
12548
12545
  };
12549
12546
  getProvider();
@@ -12555,7 +12552,6 @@ function PinProvider({ children }) {
12555
12552
  provider.setRequestPinCallback(void 0);
12556
12553
  }
12557
12554
  } catch (error3) {
12558
- console.error("[PinProvider] Failed to cleanup PIN callback:", error3);
12559
12555
  }
12560
12556
  };
12561
12557
  cleanup();
@@ -12579,14 +12575,14 @@ function PinProvider({ children }) {
12579
12575
  }
12580
12576
  function usePin() {
12581
12577
  const context = useContext31(PinContext);
12582
- if (typeof window === "undefined") {
12583
- return {
12584
- requestPin: async () => {
12585
- throw new Error("PIN requests are only available on the client side");
12586
- }
12587
- };
12588
- }
12589
12578
  if (!context) {
12579
+ if (typeof window === "undefined") {
12580
+ return {
12581
+ requestPin: async () => {
12582
+ throw new Error("PIN requests are only available on the client side");
12583
+ }
12584
+ };
12585
+ }
12590
12586
  throw new Error("usePin must be used within PinProvider");
12591
12587
  }
12592
12588
  return context;
@@ -12648,7 +12644,7 @@ function useBitcoinWallet() {
12648
12644
  });
12649
12645
  return;
12650
12646
  }
12651
- const { AbcBitcoinProvider, createAbcWaasApiClient: createAbcWaasApiClient2 } = await import("./abcWallet-X2GWIVEI.js");
12647
+ const { AbcBitcoinProvider, createAbcWaasApiClient: createAbcWaasApiClient2 } = await import("./abcWallet-U5ZRWNFY.js");
12652
12648
  const client = createAbcWaasApiClient2({
12653
12649
  waasUrl: process.env.NEXT_PUBLIC_ABC_WAAS_URL || "",
12654
12650
  plain: "",
@@ -12761,7 +12757,7 @@ function useSolanaWallet() {
12761
12757
  });
12762
12758
  return;
12763
12759
  }
12764
- const { AbcSolanaProvider, createAbcWaasApiClient: createAbcWaasApiClient2 } = await import("./abcWallet-X2GWIVEI.js");
12760
+ const { AbcSolanaProvider, createAbcWaasApiClient: createAbcWaasApiClient2 } = await import("./abcWallet-U5ZRWNFY.js");
12765
12761
  const client = createAbcWaasApiClient2({
12766
12762
  waasUrl: process.env.NEXT_PUBLIC_ABC_WAAS_URL || "",
12767
12763
  plain: "",
@@ -12769,6 +12765,7 @@ function useSolanaWallet() {
12769
12765
  });
12770
12766
  const solanaProvider = new AbcSolanaProvider(client);
12771
12767
  solanaProvider.setWallet(solanaWallet);
12768
+ solanaProvider.setRequestPinCallback(requestPin);
12772
12769
  setAbcWallet({
12773
12770
  address: solanaWallet.address,
12774
12771
  publicKey: solanaWallet.publicKey,
@@ -12841,59 +12838,10 @@ function useSolanaWallet() {
12841
12838
  };
12842
12839
  const sendTransaction = async (params) => {
12843
12840
  if (activeWallet.type === "abc") {
12844
- if (!abcWallet.address) {
12845
- throw new Error("ABC wallet not connected");
12846
- }
12847
- const pin = await requestPin();
12848
- const encoder = new TextEncoder();
12849
- const data = encoder.encode(pin);
12850
- const hashBuffer = await crypto.subtle.digest("SHA-256", data);
12851
- const hashArray = Array.from(new Uint8Array(hashBuffer));
12852
- const pinHash = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
12853
- const storedPinHash = localStorage.getItem("talkenkit_abc_pin_hash");
12854
- if (storedPinHash && pinHash !== storedPinHash) {
12855
- throw new Error("Incorrect PIN");
12856
- }
12857
- const { LAMPORTS_PER_SOL } = await import("@solana/web3.js");
12858
- const { createAbcWaasApiClient: createAbcWaasApiClient2 } = await import("./abcWallet-X2GWIVEI.js");
12859
- const authState = localStorage.getItem("talkenkit_abc_auth_state");
12860
- if (!authState) {
12861
- throw new Error("Not authenticated");
12862
- }
12863
- const authData = JSON.parse(authState);
12864
- const solanaWalletData = authData.solanaWallet;
12865
- if (!solanaWalletData) {
12866
- throw new Error("Solana wallet not found");
12841
+ if (!abcWallet.provider) {
12842
+ throw new Error("ABC Solana provider not available");
12867
12843
  }
12868
- const client = createAbcWaasApiClient2({
12869
- waasUrl: process.env.NEXT_PUBLIC_ABC_WAAS_URL || "",
12870
- plain: "",
12871
- environment: process.env.NEXT_PUBLIC_ENVIRONMENT || "development"
12872
- });
12873
- const network = abcWallet.network || "solana_devnet";
12874
- const amountLamports = params.amount * LAMPORTS_PER_SOL;
12875
- const txGenResponse = await client.solana.generateTransferTransaction({
12876
- network,
12877
- amount: amountLamports,
12878
- fromAddress: abcWallet.address,
12879
- toAddress: params.toAddress,
12880
- feePayerAddress: abcWallet.address
12881
- });
12882
- const signatureResponse = await client.solana.signSolanaTransaction({
12883
- keyId: solanaWalletData.keyId || solanaWalletData.key_id,
12884
- encryptedShare: solanaWalletData.encryptedShare || solanaWalletData.encrypted_share,
12885
- secretStore: solanaWalletData.secretStore || solanaWalletData.secret_store || "",
12886
- message: txGenResponse.serialized_tx
12887
- });
12888
- const result = await client.solana.sendSolanaTransaction({
12889
- network,
12890
- serializedTX: txGenResponse.serialized_tx,
12891
- signatures: [signatureResponse.signature]
12892
- });
12893
- return {
12894
- signature: result.txHash,
12895
- serializedTx: txGenResponse.serialized_tx
12896
- };
12844
+ return await abcWallet.provider.sendTransaction(params);
12897
12845
  }
12898
12846
  if (activeWallet.type === "external") {
12899
12847
  if (!externalWallet.publicKey || !externalWallet.sendTransaction) {
@@ -33,6 +33,7 @@ export declare class AbcSolanaProvider extends EventEmitter {
33
33
  private client;
34
34
  private wallet;
35
35
  private connected;
36
+ private requestPinCallback;
36
37
  constructor(client: AbcWaasApiClient);
37
38
  /**
38
39
  * Set wallet information
@@ -43,9 +44,9 @@ export declare class AbcSolanaProvider extends EventEmitter {
43
44
  */
44
45
  clearWallet(): void;
45
46
  /**
46
- * Set PIN request callback for transaction signing (not used - kept for API compatibility)
47
+ * Set PIN request callback for transaction signing
47
48
  */
48
- setRequestPinCallback(_callback: () => Promise<string>): void;
49
+ setRequestPinCallback(callback: () => Promise<string>): void;
49
50
  /**
50
51
  * Check if connected
51
52
  */
@@ -71,6 +72,16 @@ export declare class AbcSolanaProvider extends EventEmitter {
71
72
  * Use the high-level sendTransaction() flow instead
72
73
  */
73
74
  signTransaction(_transaction: any, _params?: any): Promise<any>;
75
+ /**
76
+ * Send Solana transaction (with PIN verification)
77
+ */
78
+ sendTransaction(params: {
79
+ toAddress: string;
80
+ amount: number;
81
+ }): Promise<{
82
+ signature: string;
83
+ serializedTx?: string;
84
+ }>;
74
85
  /**
75
86
  * Get wallet info
76
87
  */
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  AbcSolanaProvider,
4
4
  SolanaProviderError
5
- } from "../chunk-URJDAG63.js";
5
+ } from "../chunk-BH2VZAMQ.js";
6
6
  export {
7
7
  AbcSolanaProvider,
8
8
  SolanaProviderError
@@ -34,7 +34,7 @@ import {
34
34
  import {
35
35
  AbcSolanaProvider,
36
36
  SolanaProviderError
37
- } from "../chunk-URJDAG63.js";
37
+ } from "../chunk-BH2VZAMQ.js";
38
38
  import "../chunk-KXEAFXAA.js";
39
39
  import "../chunk-MPFE6GP2.js";
40
40
  import {
@@ -0,0 +1,259 @@
1
+ "use client";
2
+
3
+ // src/wallets/walletConnectors/abcWallet/abcSolanaProvider.ts
4
+ var EventEmitter = class {
5
+ constructor() {
6
+ this.events = /* @__PURE__ */ new Map();
7
+ }
8
+ on(event, listener) {
9
+ if (!this.events.has(event)) {
10
+ this.events.set(event, []);
11
+ }
12
+ this.events.get(event).push(listener);
13
+ return this;
14
+ }
15
+ off(event, listener) {
16
+ const listeners = this.events.get(event);
17
+ if (listeners) {
18
+ const index = listeners.indexOf(listener);
19
+ if (index !== -1) {
20
+ listeners.splice(index, 1);
21
+ }
22
+ }
23
+ return this;
24
+ }
25
+ removeListener(event, listener) {
26
+ return this.off(event, listener);
27
+ }
28
+ emit(event, ...args) {
29
+ const listeners = this.events.get(event);
30
+ if (listeners) {
31
+ for (const listener of listeners) {
32
+ listener(...args);
33
+ }
34
+ return true;
35
+ }
36
+ return false;
37
+ }
38
+ removeAllListeners(event) {
39
+ if (event) {
40
+ this.events.delete(event);
41
+ } else {
42
+ this.events.clear();
43
+ }
44
+ return this;
45
+ }
46
+ };
47
+ var SolanaErrorCode = {
48
+ USER_REJECTED: 4001,
49
+ UNAUTHORIZED: 4100,
50
+ UNSUPPORTED_METHOD: 4200,
51
+ DISCONNECTED: 4900,
52
+ INVALID_PARAMS: -32602,
53
+ INTERNAL_ERROR: -32603
54
+ };
55
+ var SolanaProviderError = class extends Error {
56
+ constructor(code, message, data) {
57
+ super(message);
58
+ this.code = code;
59
+ this.data = data;
60
+ this.name = "SolanaProviderError";
61
+ }
62
+ };
63
+ var AbcSolanaProvider = class extends EventEmitter {
64
+ constructor(client) {
65
+ super();
66
+ this.wallet = null;
67
+ this.connected = false;
68
+ this.requestPinCallback = null;
69
+ this.client = client;
70
+ }
71
+ /**
72
+ * Set wallet information
73
+ */
74
+ setWallet(wallet) {
75
+ const previousAddress = this.wallet?.address;
76
+ this.wallet = wallet;
77
+ this.connected = true;
78
+ if (previousAddress !== wallet.address) {
79
+ this.emit("accountsChanged", [wallet.address]);
80
+ }
81
+ this.emit("connect", {
82
+ address: wallet.address,
83
+ network: wallet.network
84
+ });
85
+ }
86
+ /**
87
+ * Clear wallet (disconnect)
88
+ */
89
+ clearWallet() {
90
+ this.wallet = null;
91
+ this.connected = false;
92
+ this.emit("disconnect");
93
+ this.emit("accountsChanged", []);
94
+ }
95
+ /**
96
+ * Set PIN request callback for transaction signing
97
+ */
98
+ setRequestPinCallback(callback) {
99
+ this.requestPinCallback = callback;
100
+ }
101
+ /**
102
+ * Check if connected
103
+ */
104
+ isConnected() {
105
+ return this.connected && this.wallet !== null;
106
+ }
107
+ /**
108
+ * Get Solana address
109
+ */
110
+ async getAddress() {
111
+ if (!this.wallet) {
112
+ throw new SolanaProviderError(
113
+ SolanaErrorCode.DISCONNECTED,
114
+ "Wallet not connected"
115
+ );
116
+ }
117
+ return this.wallet.address;
118
+ }
119
+ /**
120
+ * Get public key
121
+ */
122
+ async getPublicKey() {
123
+ if (!this.wallet) {
124
+ throw new SolanaProviderError(
125
+ SolanaErrorCode.DISCONNECTED,
126
+ "Wallet not connected"
127
+ );
128
+ }
129
+ return this.wallet.publicKey;
130
+ }
131
+ /**
132
+ * Sign Solana message (no PIN required)
133
+ * Uses encrypted_share which doesn't require PIN
134
+ */
135
+ async signMessage(encodedMessage, _display) {
136
+ if (!this.wallet) {
137
+ throw new SolanaProviderError(
138
+ SolanaErrorCode.DISCONNECTED,
139
+ "Wallet not connected"
140
+ );
141
+ }
142
+ try {
143
+ const messageHex = `0x${Array.from(encodedMessage).map((b) => b.toString(16).padStart(2, "0")).join("")}`;
144
+ const result = await this.client.solana.signSolanaMessage({
145
+ message: messageHex,
146
+ encryptedShare: this.wallet.encryptedShare,
147
+ keyId: this.wallet.keyId,
148
+ secretStore: this.wallet.secretStore || ""
149
+ });
150
+ const signatureHex = result.signature.startsWith("0x") ? result.signature.slice(2) : result.signature;
151
+ const signatureBytes = new Uint8Array(
152
+ signatureHex.match(/.{1,2}/g)?.map((byte) => Number.parseInt(byte, 16)) || []
153
+ );
154
+ return { signature: signatureBytes };
155
+ } catch (error) {
156
+ this.emit("error", error);
157
+ throw new SolanaProviderError(
158
+ SolanaErrorCode.INTERNAL_ERROR,
159
+ "Failed to sign message",
160
+ error
161
+ );
162
+ }
163
+ }
164
+ /**
165
+ * Sign Solana transaction (not used - ABC WaaS handles signing server-side)
166
+ * This method is kept for compatibility but not recommended for direct use
167
+ * Use the high-level sendTransaction() flow instead
168
+ */
169
+ async signTransaction(_transaction, _params) {
170
+ throw new SolanaProviderError(
171
+ SolanaErrorCode.UNSUPPORTED_METHOD,
172
+ "Direct transaction signing not supported. Use useSolanaWallet.sendTransaction() which handles the full flow via ABC WaaS API."
173
+ );
174
+ }
175
+ /**
176
+ * Send Solana transaction (with PIN verification)
177
+ */
178
+ async sendTransaction(params) {
179
+ if (!this.wallet) {
180
+ throw new SolanaProviderError(
181
+ SolanaErrorCode.DISCONNECTED,
182
+ "Wallet not connected"
183
+ );
184
+ }
185
+ if (!this.requestPinCallback) {
186
+ throw new SolanaProviderError(
187
+ SolanaErrorCode.UNAUTHORIZED,
188
+ "PIN callback not set"
189
+ );
190
+ }
191
+ try {
192
+ const pin = await this.requestPinCallback();
193
+ const encoder = new TextEncoder();
194
+ const data = encoder.encode(pin);
195
+ const hashBuffer = await crypto.subtle.digest("SHA-256", data);
196
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
197
+ const pinHash = hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
198
+ const storedPinHash = localStorage.getItem("talkenkit_abc_pin_hash");
199
+ if (storedPinHash && pinHash !== storedPinHash) {
200
+ throw new SolanaProviderError(
201
+ SolanaErrorCode.UNAUTHORIZED,
202
+ "Incorrect PIN"
203
+ );
204
+ }
205
+ const { LAMPORTS_PER_SOL } = await import("@solana/web3.js");
206
+ const network = this.wallet.network || "solana_devnet";
207
+ const amountLamports = params.amount * LAMPORTS_PER_SOL;
208
+ const txGenResponse = await this.client.solana.generateTransferTransaction({
209
+ network,
210
+ amount: amountLamports,
211
+ fromAddress: this.wallet.address,
212
+ toAddress: params.toAddress,
213
+ feePayerAddress: this.wallet.address
214
+ });
215
+ const signatureResponse = await this.client.solana.signSolanaTransaction({
216
+ keyId: this.wallet.keyId,
217
+ encryptedShare: this.wallet.encryptedShare,
218
+ secretStore: this.wallet.secretStore || "",
219
+ message: txGenResponse.serialized_tx
220
+ });
221
+ const result = await this.client.solana.sendSolanaTransaction({
222
+ network,
223
+ serializedTX: txGenResponse.serialized_tx,
224
+ signatures: [signatureResponse.signature]
225
+ });
226
+ return {
227
+ signature: result.txHash,
228
+ serializedTx: txGenResponse.serialized_tx
229
+ };
230
+ } catch (error) {
231
+ if (error.code === 4001 || error.cancelled) {
232
+ throw error;
233
+ }
234
+ this.emit("error", error);
235
+ throw new SolanaProviderError(
236
+ SolanaErrorCode.INTERNAL_ERROR,
237
+ "Failed to send transaction",
238
+ error
239
+ );
240
+ }
241
+ }
242
+ /**
243
+ * Get wallet info
244
+ */
245
+ getWalletInfo() {
246
+ if (!this.wallet)
247
+ return null;
248
+ return {
249
+ address: this.wallet.address,
250
+ publicKey: this.wallet.publicKey,
251
+ network: this.wallet.network
252
+ };
253
+ }
254
+ };
255
+
256
+ export {
257
+ SolanaProviderError,
258
+ AbcSolanaProvider
259
+ };
@@ -38,12 +38,12 @@ import {
38
38
  import {
39
39
  safeheronWallet
40
40
  } from "./chunk-PHF4VWKP.js";
41
- import {
42
- safepalWallet
43
- } from "./chunk-LRYS2XBT.js";
44
41
  import {
45
42
  seifWallet
46
43
  } from "./chunk-Y3E6EZ7J.js";
44
+ import {
45
+ safepalWallet
46
+ } from "./chunk-LRYS2XBT.js";
47
47
  import {
48
48
  subWallet
49
49
  } from "./chunk-OWSLCYOF.js";
@@ -59,24 +59,24 @@ import {
59
59
  import {
60
60
  tokenaryWallet
61
61
  } from "./chunk-U24COF36.js";
62
- import {
63
- oneKeyWallet
64
- } from "./chunk-6UGYPEQE.js";
65
62
  import {
66
63
  paraSwapWallet
67
64
  } from "./chunk-FF7ZXD5C.js";
65
+ import {
66
+ oneInchWallet
67
+ } from "./chunk-OJT577AY.js";
68
68
  import {
69
69
  phantomWallet
70
70
  } from "./chunk-DMQ4RXIY.js";
71
71
  import {
72
- rabbyWallet
73
- } from "./chunk-3RMYBZQG.js";
72
+ ramperWallet
73
+ } from "./chunk-OX3PQBV2.js";
74
74
  import {
75
75
  rainbowWallet
76
76
  } from "./chunk-6C3GUS6I.js";
77
77
  import {
78
- ramperWallet
79
- } from "./chunk-OX3PQBV2.js";
78
+ rabbyWallet
79
+ } from "./chunk-3RMYBZQG.js";
80
80
  import {
81
81
  roninWallet
82
82
  } from "./chunk-DSTY7YNG.js";
@@ -98,33 +98,33 @@ import {
98
98
  import {
99
99
  oktoWallet
100
100
  } from "./chunk-7SSXG35M.js";
101
- import {
102
- okxWallet
103
- } from "./chunk-GF7RKBNV.js";
104
101
  import {
105
102
  omniWallet
106
103
  } from "./chunk-RGPO7AY3.js";
107
104
  import {
108
- oneInchWallet
109
- } from "./chunk-OJT577AY.js";
105
+ okxWallet
106
+ } from "./chunk-GF7RKBNV.js";
107
+ import {
108
+ oneKeyWallet
109
+ } from "./chunk-6UGYPEQE.js";
110
110
  import {
111
111
  imTokenWallet
112
112
  } from "./chunk-EHE2536P.js";
113
113
  import {
114
114
  injectedWallet
115
115
  } from "./chunk-GDGRUMZB.js";
116
- import {
117
- iopayWallet
118
- } from "./chunk-A2XAHJNR.js";
119
116
  import {
120
117
  kaiaWallet
121
118
  } from "./chunk-KE6RMEB7.js";
122
- import {
123
- kaikasWallet
124
- } from "./chunk-MUJPEDFF.js";
125
119
  import {
126
120
  krakenWallet
127
121
  } from "./chunk-CYOZFCR6.js";
122
+ import {
123
+ iopayWallet
124
+ } from "./chunk-A2XAHJNR.js";
125
+ import {
126
+ kaikasWallet
127
+ } from "./chunk-MUJPEDFF.js";
128
128
  import {
129
129
  kresusWallet
130
130
  } from "./chunk-CM3VR7OM.js";
@@ -132,8 +132,8 @@ import {
132
132
  ledgerWallet
133
133
  } from "./chunk-BF3VSNPL.js";
134
134
  import {
135
- coreWallet
136
- } from "./chunk-I6ONK6DO.js";
135
+ compassWallet
136
+ } from "./chunk-3OO564GS.js";
137
137
  import {
138
138
  dawnWallet
139
139
  } from "./chunk-YMP3W2MO.js";
@@ -177,8 +177,11 @@ import {
177
177
  coinbaseWallet
178
178
  } from "./chunk-PNEDRY6O.js";
179
179
  import {
180
- compassWallet
181
- } from "./chunk-3OO564GS.js";
180
+ coreWallet
181
+ } from "./chunk-I6ONK6DO.js";
182
+ import {
183
+ argentWallet
184
+ } from "./chunk-XT2WYPN5.js";
182
185
  import {
183
186
  berasigWallet
184
187
  } from "./chunk-UZWMFUJU.js";
@@ -186,14 +189,11 @@ import {
186
189
  bestWallet
187
190
  } from "./chunk-OPAPBEA5.js";
188
191
  import {
189
- argentWallet
190
- } from "./chunk-XT2WYPN5.js";
192
+ bifrostWallet
193
+ } from "./chunk-WXXI4WBF.js";
191
194
  import {
192
195
  binanceWallet
193
196
  } from "./chunk-TUDZHFVC.js";
194
- import {
195
- bifrostWallet
196
- } from "./chunk-WXXI4WBF.js";
197
197
  import {
198
198
  bitgetWallet
199
199
  } from "./chunk-ITLTDJ3D.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talken/talkenkit",
3
- "version": "2.4.7",
3
+ "version": "2.4.8",
4
4
  "description": "The best way to connect a wallet",
5
5
  "files": [
6
6
  "dist",