@talken/talkenkit 2.4.13 → 2.4.14

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 (172) hide show
  1. package/dist/abcWallet-25AKGPRG.js +184 -0
  2. package/dist/abcWallet-2SXWQ2M6.js +184 -0
  3. package/dist/abcWallet-3E6Y5QS4.js +184 -0
  4. package/dist/abcWallet-3HKYSDOS.js +184 -0
  5. package/dist/abcWallet-6VIUP4H3.js +184 -0
  6. package/dist/abcWallet-7CXDTXHX.js +184 -0
  7. package/dist/abcWallet-A3PX6AEW.js +184 -0
  8. package/dist/abcWallet-A6CRIFP2.js +184 -0
  9. package/dist/abcWallet-ACAOT2F3.js +184 -0
  10. package/dist/abcWallet-AWALYVJ7.js +184 -0
  11. package/dist/abcWallet-CEW3E2AX.js +184 -0
  12. package/dist/abcWallet-CEZAQ3ES.js +184 -0
  13. package/dist/abcWallet-CURD64AW.js +184 -0
  14. package/dist/abcWallet-E2A433S3.js +184 -0
  15. package/dist/abcWallet-ER37COEQ.js +184 -0
  16. package/dist/abcWallet-ETWMKZKD.js +184 -0
  17. package/dist/abcWallet-F6JAVHHQ.js +184 -0
  18. package/dist/abcWallet-GEHOIOZN.js +184 -0
  19. package/dist/abcWallet-H22OANDE.js +184 -0
  20. package/dist/abcWallet-H5BBPLGS.js +184 -0
  21. package/dist/abcWallet-I5BENZSH.js +184 -0
  22. package/dist/abcWallet-LABFRLNR.js +184 -0
  23. package/dist/abcWallet-MB2IAXV5.js +184 -0
  24. package/dist/abcWallet-MH6OGFBO.js +184 -0
  25. package/dist/abcWallet-NJGYOH52.js +184 -0
  26. package/dist/abcWallet-OG6ZQORS.js +184 -0
  27. package/dist/abcWallet-OJ7VCWHZ.js +184 -0
  28. package/dist/abcWallet-PBEQA5UT.js +184 -0
  29. package/dist/abcWallet-PMJEDGRW.js +184 -0
  30. package/dist/abcWallet-SX35BIXB.js +184 -0
  31. package/dist/abcWallet-TQTXUPJZ.js +184 -0
  32. package/dist/abcWallet-VKVKBQYN.js +184 -0
  33. package/dist/abcWallet-W6OZE7QD.js +184 -0
  34. package/dist/abcWallet-WH2J2YAV.js +184 -0
  35. package/dist/abcWallet-XA5DX7XK.js +184 -0
  36. package/dist/abcWallet-XANCTLMU.js +184 -0
  37. package/dist/abcWallet-XDP764EW.js +184 -0
  38. package/dist/abcWallet-Y3DONK5H.js +184 -0
  39. package/dist/abcWallet-YLBGJ5K6.js +184 -0
  40. package/dist/abcWallet-ZSL4HH7M.js +184 -0
  41. package/dist/chunk-2D6TXDN2.js +7450 -0
  42. package/dist/chunk-3K7INMEV.js +7470 -0
  43. package/dist/chunk-5FE4YAGR.js +7423 -0
  44. package/dist/chunk-5LD4QGWP.js +7423 -0
  45. package/dist/chunk-64RMUCRE.js +7447 -0
  46. package/dist/chunk-6KTOC6CY.js +7464 -0
  47. package/dist/chunk-6QW7GFF5.js +7450 -0
  48. package/dist/chunk-6RCVLZFG.js +7462 -0
  49. package/dist/chunk-7Y3M3LG3.js +7446 -0
  50. package/dist/chunk-A3EBU637.js +7441 -0
  51. package/dist/chunk-BVBWXZCX.js +7450 -0
  52. package/dist/chunk-CAXCHVY2.js +7469 -0
  53. package/dist/chunk-CBJW7X7O.js +7382 -0
  54. package/dist/chunk-CD36XA5S.js +7417 -0
  55. package/dist/chunk-EAKUQPJO.js +7463 -0
  56. package/dist/chunk-ER7H33CO.js +7450 -0
  57. package/dist/chunk-FCENPWP5.js +7452 -0
  58. package/dist/chunk-FPMB7NJE.js +7366 -0
  59. package/dist/chunk-GWIJVQBX.js +7420 -0
  60. package/dist/chunk-HGOFSTGT.js +7474 -0
  61. package/dist/chunk-JJ4CTD2J.js +7428 -0
  62. package/dist/chunk-JMBGLDYV.js +7368 -0
  63. package/dist/chunk-KBMHNBKL.js +7449 -0
  64. package/dist/chunk-KZRFIJW2.js +7452 -0
  65. package/dist/chunk-L6TCA4IF.js +7378 -0
  66. package/dist/chunk-LTRXFRER.js +7472 -0
  67. package/dist/chunk-MRLTYAPE.js +7451 -0
  68. package/dist/chunk-N3QOWEYR.js +7393 -0
  69. package/dist/chunk-NII34OZB.js +7442 -0
  70. package/dist/chunk-OAHLI7TU.js +7368 -0
  71. package/dist/chunk-RFJBWB7F.js +7467 -0
  72. package/dist/chunk-SBRDMKB6.js +7408 -0
  73. package/dist/chunk-SDRSLETV.js +7428 -0
  74. package/dist/chunk-SWO7BZQD.js +7463 -0
  75. package/dist/chunk-TR4Q6WOC.js +7427 -0
  76. package/dist/chunk-UBBAWTXE.js +7370 -0
  77. package/dist/chunk-VEOSJOVN.js +7377 -0
  78. package/dist/chunk-VGF34W25.js +7370 -0
  79. package/dist/chunk-VXSGQUAL.js +7458 -0
  80. package/dist/chunk-Z3FKXPV6.js +7430 -0
  81. package/dist/hooks/useSolanaWallet.d.ts +33 -1
  82. package/dist/index.css +24 -24
  83. package/dist/index.js +1809 -1578
  84. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.d.ts +52 -4
  85. package/dist/wallets/walletConnectors/abcWallet/abcSolanaProvider.js +1 -1
  86. package/dist/wallets/walletConnectors/abcWallet/abcSolanaWalletAdapter.js +1 -1
  87. package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.d.ts +52 -1
  88. package/dist/wallets/walletConnectors/abcWallet/api/SolanaApi.js +1 -1
  89. package/dist/wallets/walletConnectors/abcWallet/api/index.js +5 -5
  90. package/dist/wallets/walletConnectors/abcWallet/index.js +4 -4
  91. package/dist/wallets/walletConnectors/abcWallet/types.d.ts +2 -2
  92. package/dist/wallets/walletConnectors/chunk-2FUWP3CE.js +330 -0
  93. package/dist/wallets/walletConnectors/chunk-2HZI5GNW.js +422 -0
  94. package/dist/wallets/walletConnectors/chunk-2OTYM5YW.js +461 -0
  95. package/dist/wallets/walletConnectors/chunk-2PVZZB7V.js +179 -0
  96. package/dist/wallets/walletConnectors/chunk-2SKUK3XZ.js +336 -0
  97. package/dist/wallets/walletConnectors/chunk-2THGB26Q.js +483 -0
  98. package/dist/wallets/walletConnectors/chunk-353AHAZG.js +420 -0
  99. package/dist/wallets/walletConnectors/chunk-3AV4L2Z3.js +63 -0
  100. package/dist/wallets/walletConnectors/chunk-3DMYAF74.js +495 -0
  101. package/dist/wallets/walletConnectors/chunk-3EVUNPYA.js +63 -0
  102. package/dist/wallets/walletConnectors/chunk-45FLFWVV.js +473 -0
  103. package/dist/wallets/walletConnectors/chunk-4JRATGCT.js +484 -0
  104. package/dist/wallets/walletConnectors/chunk-5AL2CK6V.js +336 -0
  105. package/dist/wallets/walletConnectors/chunk-5FSXV7UD.js +63 -0
  106. package/dist/wallets/walletConnectors/chunk-5JHX6GDO.js +63 -0
  107. package/dist/wallets/walletConnectors/chunk-5QGNWYOO.js +63 -0
  108. package/dist/wallets/walletConnectors/chunk-6I7AIIUA.js +330 -0
  109. package/dist/wallets/walletConnectors/chunk-A2AVZXFM.js +467 -0
  110. package/dist/wallets/walletConnectors/chunk-AB6IIS4Y.js +359 -0
  111. package/dist/wallets/walletConnectors/chunk-AB6NV5DJ.js +469 -0
  112. package/dist/wallets/walletConnectors/chunk-AYAW5CRA.js +459 -0
  113. package/dist/wallets/walletConnectors/chunk-BCO6YLPB.js +505 -0
  114. package/dist/wallets/walletConnectors/chunk-BK65Y46D.js +494 -0
  115. package/dist/wallets/walletConnectors/chunk-BKJVG4GQ.js +463 -0
  116. package/dist/wallets/walletConnectors/chunk-BWVC6F6J.js +467 -0
  117. package/dist/wallets/walletConnectors/chunk-D3USECVX.js +333 -0
  118. package/dist/wallets/walletConnectors/chunk-DCBHTSF2.js +63 -0
  119. package/dist/wallets/walletConnectors/chunk-DSTCYPGN.js +314 -0
  120. package/dist/wallets/walletConnectors/chunk-DWPUUKA4.js +63 -0
  121. package/dist/wallets/walletConnectors/chunk-E33VQYPO.js +302 -0
  122. package/dist/wallets/walletConnectors/chunk-EBBETASF.js +424 -0
  123. package/dist/wallets/walletConnectors/chunk-GMEXP6OH.js +314 -0
  124. package/dist/wallets/walletConnectors/chunk-HB7QT3ZB.js +332 -0
  125. package/dist/wallets/walletConnectors/chunk-HDXQ7BO6.js +314 -0
  126. package/dist/wallets/walletConnectors/chunk-HQQESMZJ.js +299 -0
  127. package/dist/wallets/walletConnectors/chunk-HWWFK52B.js +63 -0
  128. package/dist/wallets/walletConnectors/chunk-HYADQWNX.js +47 -0
  129. package/dist/wallets/walletConnectors/chunk-I56RJQOO.js +63 -0
  130. package/dist/wallets/walletConnectors/chunk-JY4WWUAC.js +503 -0
  131. package/dist/wallets/walletConnectors/chunk-KIKTI2QW.js +313 -0
  132. package/dist/wallets/walletConnectors/chunk-KPXEV65I.js +481 -0
  133. package/dist/wallets/walletConnectors/chunk-KXRUCXYG.js +63 -0
  134. package/dist/wallets/walletConnectors/chunk-L3ZUQ2FT.js +494 -0
  135. package/dist/wallets/walletConnectors/chunk-LKM4HFVX.js +63 -0
  136. package/dist/wallets/walletConnectors/chunk-LKSMH5O4.js +63 -0
  137. package/dist/wallets/walletConnectors/chunk-NSAHMWXK.js +468 -0
  138. package/dist/wallets/walletConnectors/chunk-NY3HZ7C7.js +428 -0
  139. package/dist/wallets/walletConnectors/chunk-OA6D52JF.js +303 -0
  140. package/dist/wallets/walletConnectors/chunk-OSJ2GO4U.js +63 -0
  141. package/dist/wallets/walletConnectors/chunk-OYDALF2T.js +63 -0
  142. package/dist/wallets/walletConnectors/chunk-P5CZ24LM.js +312 -0
  143. package/dist/wallets/walletConnectors/chunk-PER2ACFG.js +443 -0
  144. package/dist/wallets/walletConnectors/chunk-PGPH245S.js +63 -0
  145. package/dist/wallets/walletConnectors/chunk-PNE3IGZM.js +63 -0
  146. package/dist/wallets/walletConnectors/chunk-Q2WYW3LQ.js +63 -0
  147. package/dist/wallets/walletConnectors/chunk-Q3KCTIZB.js +458 -0
  148. package/dist/wallets/walletConnectors/chunk-Q3W2LKFS.js +498 -0
  149. package/dist/wallets/walletConnectors/chunk-QAD7DCJI.js +473 -0
  150. package/dist/wallets/walletConnectors/chunk-QG6HVKA7.js +458 -0
  151. package/dist/wallets/walletConnectors/chunk-QHCY3K35.js +466 -0
  152. package/dist/wallets/walletConnectors/chunk-QHRV2IC7.js +63 -0
  153. package/dist/wallets/walletConnectors/chunk-QWEA3UTQ.js +313 -0
  154. package/dist/wallets/walletConnectors/chunk-QYUVI6LM.js +500 -0
  155. package/dist/wallets/walletConnectors/chunk-RFNPDZJ5.js +299 -0
  156. package/dist/wallets/walletConnectors/chunk-SUBWGTWM.js +459 -0
  157. package/dist/wallets/walletConnectors/chunk-TASM5LUN.js +276 -0
  158. package/dist/wallets/walletConnectors/chunk-U4DSASHD.js +63 -0
  159. package/dist/wallets/walletConnectors/chunk-UCKLTSEQ.js +467 -0
  160. package/dist/wallets/walletConnectors/chunk-UWC6AXPI.js +63 -0
  161. package/dist/wallets/walletConnectors/chunk-V5LV4P2L.js +63 -0
  162. package/dist/wallets/walletConnectors/chunk-VP6SWGCN.js +63 -0
  163. package/dist/wallets/walletConnectors/chunk-W4MD4LZF.js +464 -0
  164. package/dist/wallets/walletConnectors/chunk-XHNXMXXX.js +493 -0
  165. package/dist/wallets/walletConnectors/chunk-XHOWI6QG.js +399 -0
  166. package/dist/wallets/walletConnectors/chunk-YDCQB2MV.js +309 -0
  167. package/dist/wallets/walletConnectors/chunk-Z4LE4R6P.js +63 -0
  168. package/dist/wallets/walletConnectors/chunk-ZE3USY6D.js +156 -0
  169. package/dist/wallets/walletConnectors/chunk-ZHHPZPSF.js +489 -0
  170. package/dist/wallets/walletConnectors/chunk-ZOJTTG4G.js +63 -0
  171. package/dist/wallets/walletConnectors/index.js +45 -45
  172. package/package.json +2 -1
@@ -0,0 +1,333 @@
1
+ "use client";
2
+ import {
3
+ BaseApiClient
4
+ } from "./chunk-MPFE6GP2.js";
5
+ import {
6
+ getSolanaNetwork
7
+ } from "./chunk-A7FIBI6X.js";
8
+ import {
9
+ createAbcError
10
+ } from "./chunk-5RSS3SRV.js";
11
+
12
+ // src/wallets/walletConnectors/abcWallet/api/SolanaApi.ts
13
+ import { PublicKey } from "@solana/web3.js";
14
+ var SolanaApi = class extends BaseApiClient {
15
+ /**
16
+ * Generate Solana wallet (Ed25519)
17
+ * Uses V3 API with Ed25519 curve
18
+ *
19
+ * @param pin - Hashed PIN (SHA-256)
20
+ * @param isRecover - Whether to recover existing wallet (default: false)
21
+ * @returns Solana wallet information
22
+ */
23
+ async generateSolanaWallet(pin, isRecover = false) {
24
+ const endpoint = `/v3/wallet/${isRecover ? "recover" : "generate"}`;
25
+ const network = getSolanaNetwork();
26
+ const response = await this.request(endpoint, {
27
+ method: "POST",
28
+ contentType: "json",
29
+ body: {
30
+ curve: "ed25519",
31
+ password: pin,
32
+ network
33
+ }
34
+ });
35
+ let result;
36
+ if (response.status === "success" && response.result) {
37
+ result = response.result;
38
+ } else if (response.encrypted_share && response.key_id) {
39
+ result = response;
40
+ } else {
41
+ throw createAbcError(
42
+ "WALLET_NOT_FOUND" /* WALLET_NOT_FOUND */,
43
+ `Failed to ${isRecover ? "recover" : "generate"} Solana wallet`,
44
+ response
45
+ );
46
+ }
47
+ let address;
48
+ try {
49
+ address = this.deriveAddressFromPublicKey(result.public_key);
50
+ } catch (_error) {
51
+ address = result.public_key.startsWith("0x") ? result.public_key.slice(2) : result.public_key;
52
+ }
53
+ return {
54
+ uid: result.uid || "",
55
+ sessionId: result.share_id,
56
+ shareId: result.share_id,
57
+ publicKey: result.public_key,
58
+ address,
59
+ keyId: result.key_id || result.share_id,
60
+ // API returns snake_case key_id
61
+ encryptedShare: result.encrypted_share || "",
62
+ // API returns snake_case encrypted_share
63
+ secretStore: result.secret_store || "",
64
+ // API returns snake_case secret_store
65
+ network
66
+ // Use network from request (already has correct value)
67
+ };
68
+ }
69
+ /**
70
+ * Recover Solana wallet (alias for generateSolanaWallet with isRecover=true)
71
+ *
72
+ * @param pin - Hashed PIN (SHA-256)
73
+ * @returns Recovered Solana wallet information
74
+ */
75
+ async recoverSolanaWallet(pin) {
76
+ return this.generateSolanaWallet(pin, true);
77
+ }
78
+ /**
79
+ * Derive Solana address from Ed25519 public key
80
+ * @param publicKey - Ed25519 public key (hex)
81
+ * @returns Solana address (base58)
82
+ */
83
+ deriveAddressFromPublicKey(publicKey) {
84
+ const cleanKey = publicKey.startsWith("0x") ? publicKey.slice(2) : publicKey;
85
+ const bytes = new Uint8Array(
86
+ cleanKey.match(/.{1,2}/g)?.map((byte) => Number.parseInt(byte, 16)) || []
87
+ );
88
+ try {
89
+ const pubkey = new PublicKey(bytes);
90
+ return pubkey.toBase58();
91
+ } catch (error) {
92
+ console.error("[SolanaApi] Failed to encode address:", error);
93
+ return cleanKey;
94
+ }
95
+ }
96
+ /**
97
+ * Sign Solana transaction with Ed25519
98
+ * Reference: /v3/wallet/sign API requires only 5 fields
99
+ */
100
+ async signSolanaTransaction(params) {
101
+ const network = getSolanaNetwork();
102
+ const response = await this.request("/v3/wallet/sign", {
103
+ method: "POST",
104
+ contentType: "json",
105
+ body: {
106
+ curve: "ed25519",
107
+ network,
108
+ key_id: params.keyId,
109
+ encrypted_share: params.encryptedShare,
110
+ secret_store: params.secretStore || "",
111
+ message: params.message
112
+ }
113
+ });
114
+ let signature;
115
+ if (response.status === "success" && response.result?.signature) {
116
+ signature = response.result.signature;
117
+ } else if (response.signature) {
118
+ signature = response.signature;
119
+ } else {
120
+ throw createAbcError(
121
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
122
+ "Failed to sign Solana transaction",
123
+ response
124
+ );
125
+ }
126
+ return {
127
+ signature
128
+ };
129
+ }
130
+ /**
131
+ * Sign Solana message with Ed25519
132
+ * Reference: /v3/wallet/sign API requires only 5 fields
133
+ */
134
+ async signSolanaMessage(params) {
135
+ const network = getSolanaNetwork();
136
+ const response = await this.request("/v3/wallet/sign", {
137
+ method: "POST",
138
+ contentType: "json",
139
+ body: {
140
+ curve: "ed25519",
141
+ network,
142
+ key_id: params.keyId,
143
+ encrypted_share: params.encryptedShare,
144
+ secret_store: params.secretStore || "",
145
+ message: params.message
146
+ }
147
+ });
148
+ let signature;
149
+ if (response.status === "success" && response.result?.signature) {
150
+ signature = response.result.signature;
151
+ } else if (response.signature) {
152
+ signature = response.signature;
153
+ } else {
154
+ throw createAbcError(
155
+ "SIGNATURE_FAILED" /* SIGNATURE_FAILED */,
156
+ "Failed to sign Solana message",
157
+ response
158
+ );
159
+ }
160
+ return {
161
+ signature
162
+ };
163
+ }
164
+ /**
165
+ * Generate Solana transfer transaction via ABC WaaS API
166
+ * This ensures the transaction uses the same RPC and blockhash as the server
167
+ */
168
+ async generateTransferTransaction(params) {
169
+ const response = await this.request(
170
+ "/wapi/v2/solana/tx/generateTransferSOLTransaction",
171
+ {
172
+ method: "POST",
173
+ contentType: "json",
174
+ body: {
175
+ network: params.network,
176
+ amount: params.amount,
177
+ fromAddress: params.fromAddress,
178
+ toAddress: params.toAddress,
179
+ feePayerAddress: params.feePayerAddress
180
+ }
181
+ }
182
+ );
183
+ const responseData = response;
184
+ const serializedTx = responseData.data?.serialized_tx || response.status === "success" && response.result?.data?.serialized_tx;
185
+ if (!serializedTx) {
186
+ throw createAbcError(
187
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
188
+ "Failed to generate Solana transaction",
189
+ response
190
+ );
191
+ }
192
+ return {
193
+ serialized_tx: serializedTx
194
+ };
195
+ }
196
+ /**
197
+ * Send Solana transaction (unsigned transaction + separate signatures)
198
+ * Used for server-generated transactions that need client signatures
199
+ */
200
+ async sendSolanaTransaction(params) {
201
+ const response = await this.request("/wapi/v2/solana/tx/sendTransaction", {
202
+ method: "POST",
203
+ contentType: "json",
204
+ body: {
205
+ network: params.network,
206
+ serializedTX: params.serializedTX,
207
+ signatures: params.signatures
208
+ }
209
+ });
210
+ const responseData = response;
211
+ const txHash = responseData.data || response.status === "success" && response.result?.data;
212
+ if (!txHash || typeof txHash !== "string") {
213
+ throw createAbcError(
214
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
215
+ "Failed to send Solana transaction",
216
+ response
217
+ );
218
+ }
219
+ return {
220
+ txHash
221
+ };
222
+ }
223
+ /**
224
+ * Send fully signed Solana transaction (for client-built transactions)
225
+ * Sends a completely signed transaction directly to Solana network
226
+ */
227
+ async sendSignedSolanaTransaction(params) {
228
+ const response = await this.request(
229
+ "/wapi/v2/solana/tx/sendSignedTransaction",
230
+ {
231
+ method: "POST",
232
+ contentType: "json",
233
+ body: {
234
+ network: params.network,
235
+ serializedTX: params.serializedTX
236
+ }
237
+ }
238
+ );
239
+ const responseData = response;
240
+ const txHash = responseData.data?.transactionHash || response.status === "success" && response.result?.data?.transactionHash;
241
+ if (!txHash || typeof txHash !== "string") {
242
+ throw createAbcError(
243
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
244
+ "Failed to send signed Solana transaction",
245
+ response
246
+ );
247
+ }
248
+ return {
249
+ txHash
250
+ };
251
+ }
252
+ /**
253
+ * Generate SPL token transfer transaction via ABC WaaS API
254
+ * Uses wallet addresses (not token accounts) - API resolves ATAs internally
255
+ *
256
+ * @param params - SPL transfer parameters
257
+ * @returns Serialized transaction
258
+ */
259
+ async generateSPLTransferTransaction(params) {
260
+ const response = await this.request(
261
+ "/wapi/v2/solana/tx/generateTransferFTTransaction",
262
+ {
263
+ method: "POST",
264
+ contentType: "json",
265
+ body: {
266
+ network: params.network,
267
+ mintAddress: params.mintAddress,
268
+ fromAddress: params.fromAddress,
269
+ toAddress: params.toAddress,
270
+ amount: params.amount,
271
+ ...params.decimals !== void 0 && { decimals: params.decimals },
272
+ ...params.feePayerAddress && {
273
+ feePayerAddress: params.feePayerAddress
274
+ },
275
+ ...params.latestBlockhash && {
276
+ latestBlockhash: params.latestBlockhash
277
+ }
278
+ }
279
+ }
280
+ );
281
+ const responseData = response;
282
+ const data = responseData.data || response.status === "success" && response.result;
283
+ if (!data?.serialized_tx) {
284
+ throw createAbcError(
285
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
286
+ "Failed to generate SPL transfer transaction",
287
+ response
288
+ );
289
+ }
290
+ return {
291
+ serialized_tx: data.serialized_tx,
292
+ estimated_fee: data.estimated_fee || { context: { Slot: 0 }, value: 0 },
293
+ latest_blockhash: data.latest_blockhash || ""
294
+ };
295
+ }
296
+ /**
297
+ * Get SPL token supply information
298
+ *
299
+ * @param params - Token query parameters
300
+ * @returns Token supply information
301
+ */
302
+ async getTokenInfo(params) {
303
+ const response = await this.request(
304
+ "/wapi/v2/solana/token/getTokenSupply",
305
+ {
306
+ method: "POST",
307
+ contentType: "json",
308
+ body: {
309
+ network: params.network,
310
+ tokenAddress: params.tokenAddress
311
+ }
312
+ }
313
+ );
314
+ const responseData = response;
315
+ const value = responseData.data?.value || response.status === "success" && response.result?.data?.value;
316
+ if (!value || typeof value.decimals !== "number") {
317
+ throw createAbcError(
318
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
319
+ "Failed to get token info",
320
+ response
321
+ );
322
+ }
323
+ return {
324
+ amount: value.amount,
325
+ decimals: value.decimals,
326
+ uiAmountString: value.uiAmountString
327
+ };
328
+ }
329
+ };
330
+
331
+ export {
332
+ SolanaApi
333
+ };
@@ -0,0 +1,63 @@
1
+ "use client";
2
+ import {
3
+ TransactionApi
4
+ } from "./chunk-DJKN2MCI.js";
5
+ import {
6
+ WalletApi
7
+ } from "./chunk-V33I7JGZ.js";
8
+ import {
9
+ AuthApi
10
+ } from "./chunk-ZNBWRE3K.js";
11
+ import {
12
+ BitcoinApi
13
+ } from "./chunk-V4Q3GNBX.js";
14
+ import {
15
+ SigningApi
16
+ } from "./chunk-7VZDITAJ.js";
17
+ import {
18
+ SolanaApi
19
+ } from "./chunk-P5CZ24LM.js";
20
+
21
+ // src/wallets/walletConnectors/abcWallet/api/index.ts
22
+ var AbcWaasApiClient = class {
23
+ constructor(config) {
24
+ this.auth = new AuthApi(config);
25
+ this.wallet = new WalletApi(config);
26
+ this.transaction = new TransactionApi(config);
27
+ this.signing = new SigningApi(config);
28
+ this.solana = new SolanaApi(config);
29
+ this.bitcoin = new BitcoinApi(config);
30
+ }
31
+ /**
32
+ * Check if user is authenticated
33
+ */
34
+ isAuthenticated() {
35
+ return this.auth.isAuthenticated();
36
+ }
37
+ /**
38
+ * Check if access token is expired
39
+ */
40
+ isTokenExpired() {
41
+ return this.auth.isTokenExpired();
42
+ }
43
+ /**
44
+ * Get current access token
45
+ */
46
+ getAccessToken() {
47
+ return this.auth.getAccessToken();
48
+ }
49
+ /**
50
+ * Logout (clear tokens)
51
+ */
52
+ async logout() {
53
+ await this.auth.logout();
54
+ }
55
+ };
56
+ function createAbcWaasApiClient(config) {
57
+ return new AbcWaasApiClient(config);
58
+ }
59
+
60
+ export {
61
+ AbcWaasApiClient,
62
+ createAbcWaasApiClient
63
+ };
@@ -0,0 +1,314 @@
1
+ "use client";
2
+ import {
3
+ secure_default
4
+ } from "./chunk-NDYGTKP5.js";
5
+ import {
6
+ calculateExpiryTimestamp,
7
+ createAbcError,
8
+ isTokenExpired,
9
+ loadFromStorage,
10
+ parseApiError,
11
+ removeFromStorage,
12
+ saveToStorage
13
+ } from "./chunk-5RSS3SRV.js";
14
+ import {
15
+ ABC_ENDPOINTS,
16
+ DEFAULT_HEADERS,
17
+ REQUEST_TIMEOUT
18
+ } from "./chunk-VETRBBA2.js";
19
+
20
+ // src/wallets/walletConnectors/abcWallet/api/BaseApiClient.ts
21
+ var BaseApiClient = class {
22
+ constructor(config) {
23
+ this.accessToken = null;
24
+ this.refreshToken = null;
25
+ this.expiresAt = null;
26
+ this.isRefreshing = false;
27
+ this.refreshPromise = null;
28
+ this.config = config;
29
+ this.baseURL = config.waasUrl;
30
+ this.secure = new secure_default(this.baseURL);
31
+ this.loadTokens();
32
+ }
33
+ /**
34
+ * Load tokens from storage
35
+ */
36
+ loadTokens() {
37
+ this.accessToken = loadFromStorage("access_token" /* ACCESS_TOKEN */);
38
+ this.refreshToken = loadFromStorage("refresh_token" /* REFRESH_TOKEN */);
39
+ this.expiresAt = loadFromStorage("expires_at" /* EXPIRES_AT */);
40
+ }
41
+ /**
42
+ * Set tokens in client instance (useful when restoring from storage or state)
43
+ * Call this before making API requests if tokens are managed externally
44
+ */
45
+ setTokens(accessToken, refreshToken, expiresAt) {
46
+ this.accessToken = accessToken;
47
+ this.refreshToken = refreshToken;
48
+ this.expiresAt = expiresAt;
49
+ }
50
+ /**
51
+ * Save tokens to storage
52
+ */
53
+ saveTokens(accessToken, refreshToken, expiresIn) {
54
+ this.accessToken = accessToken;
55
+ this.refreshToken = refreshToken;
56
+ this.expiresAt = calculateExpiryTimestamp(expiresIn);
57
+ saveToStorage("access_token" /* ACCESS_TOKEN */, accessToken);
58
+ saveToStorage("refresh_token" /* REFRESH_TOKEN */, refreshToken);
59
+ saveToStorage("expires_at" /* EXPIRES_AT */, this.expiresAt);
60
+ }
61
+ /**
62
+ * Clear tokens
63
+ */
64
+ clearTokens() {
65
+ this.accessToken = null;
66
+ this.refreshToken = null;
67
+ this.expiresAt = null;
68
+ removeFromStorage("access_token" /* ACCESS_TOKEN */);
69
+ removeFromStorage("refresh_token" /* REFRESH_TOKEN */);
70
+ removeFromStorage("expires_at" /* EXPIRES_AT */);
71
+ }
72
+ /**
73
+ * Check if access token is expired
74
+ */
75
+ isTokenExpired() {
76
+ return isTokenExpired(this.expiresAt);
77
+ }
78
+ /**
79
+ * Get current access token
80
+ */
81
+ getAccessToken() {
82
+ return this.accessToken;
83
+ }
84
+ /**
85
+ * Set access token manually
86
+ */
87
+ setAccessToken(token) {
88
+ this.accessToken = token;
89
+ }
90
+ /**
91
+ * Get base URL
92
+ */
93
+ getBaseURL() {
94
+ return this.baseURL;
95
+ }
96
+ /**
97
+ * Get configuration
98
+ */
99
+ getConfig() {
100
+ return this.config;
101
+ }
102
+ /**
103
+ * Refresh access token
104
+ */
105
+ async refreshAccessToken() {
106
+ if (this.isRefreshing) {
107
+ if (this.refreshPromise) {
108
+ await this.refreshPromise;
109
+ }
110
+ return;
111
+ }
112
+ if (!this.refreshToken) {
113
+ throw createAbcError(
114
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
115
+ "No refresh token available"
116
+ );
117
+ }
118
+ this.isRefreshing = true;
119
+ this.refreshPromise = (async () => {
120
+ try {
121
+ const isIframe = typeof window !== "undefined" && window.self !== window.top;
122
+ const talkenApiUrl = process.env.NEXT_PUBLIC_API_SERVER || "https://dev.walletapi.talken.io";
123
+ const isProd = this.config.environment === "production";
124
+ const headers = { ...DEFAULT_HEADERS };
125
+ if (isProd) {
126
+ headers["User-Agent"] = "Android";
127
+ }
128
+ const response = await fetch(
129
+ `${talkenApiUrl}${ABC_ENDPOINTS.REFRESH_TOKEN}`,
130
+ {
131
+ method: "POST",
132
+ headers,
133
+ credentials: "include",
134
+ body: new URLSearchParams({
135
+ refresh_token: this.refreshToken || "",
136
+ isIframe: String(isIframe)
137
+ }).toString()
138
+ }
139
+ );
140
+ const text = await response.text();
141
+ const data = text ? JSON.parse(text) : {};
142
+ if (response.ok && data.access_token) {
143
+ const expiresIn = data.expire_in || 3600;
144
+ this.saveTokens(
145
+ data.access_token,
146
+ data.refresh_token || this.refreshToken,
147
+ expiresIn
148
+ );
149
+ } else {
150
+ throw createAbcError(
151
+ "TOKEN_EXPIRED" /* TOKEN_EXPIRED */,
152
+ "Failed to refresh token"
153
+ );
154
+ }
155
+ } finally {
156
+ this.isRefreshing = false;
157
+ this.refreshPromise = null;
158
+ }
159
+ })();
160
+ await this.refreshPromise;
161
+ }
162
+ /**
163
+ * Make HTTP request with automatic token refresh
164
+ */
165
+ async request(endpoint, options = {}) {
166
+ const {
167
+ method = "GET",
168
+ body,
169
+ headers = {},
170
+ skipAuth = false,
171
+ isRetry = false,
172
+ contentType = "form"
173
+ // Default to form-encoded for backward compatibility
174
+ } = options;
175
+ if (!skipAuth && this.isTokenExpired() && this.refreshToken) {
176
+ await this.refreshAccessToken();
177
+ }
178
+ const url = `${this.baseURL}${endpoint}`;
179
+ const requestHeaders = {
180
+ ...DEFAULT_HEADERS,
181
+ ...headers
182
+ };
183
+ if (contentType === "json") {
184
+ requestHeaders["Content-Type"] = "application/json";
185
+ requestHeaders["Accept"] = "application/json";
186
+ }
187
+ if (this.config.environment === "production") {
188
+ requestHeaders["User-Agent"] = "Android";
189
+ }
190
+ if (!skipAuth && this.accessToken) {
191
+ requestHeaders.Authorization = `Bearer ${this.accessToken}`;
192
+ }
193
+ if (this.config.apiKey) {
194
+ requestHeaders["X-API-Key"] = this.config.apiKey;
195
+ }
196
+ try {
197
+ const controller = new AbortController();
198
+ const timeoutId = setTimeout(() => controller.abort(), REQUEST_TIMEOUT);
199
+ const requestBody = body ? contentType === "json" ? JSON.stringify(body) : new URLSearchParams(body).toString() : void 0;
200
+ const response = await fetch(url, {
201
+ method,
202
+ headers: requestHeaders,
203
+ body: requestBody,
204
+ signal: controller.signal
205
+ });
206
+ clearTimeout(timeoutId);
207
+ const text = await response.text();
208
+ let data;
209
+ if (text) {
210
+ try {
211
+ data = JSON.parse(text);
212
+ } catch (parseError) {
213
+ console.error("[BaseApiClient] \u274C JSON parse error:", {
214
+ url,
215
+ method,
216
+ status: response.status,
217
+ responseText: text.substring(0, 200)
218
+ });
219
+ throw createAbcError(
220
+ "UNKNOWN_ERROR" /* UNKNOWN_ERROR */,
221
+ "Invalid JSON response from server",
222
+ { text, parseError }
223
+ );
224
+ }
225
+ } else {
226
+ data = { status: "success" };
227
+ }
228
+ if (response.status === 401 && !skipAuth && this.refreshToken && !isRetry) {
229
+ try {
230
+ await this.refreshAccessToken();
231
+ return await this.request(endpoint, {
232
+ ...options,
233
+ isRetry: true
234
+ });
235
+ } catch (refreshError) {
236
+ console.error("Token refresh failed:", refreshError);
237
+ throw parseApiError({
238
+ response: {
239
+ status: response.status,
240
+ data
241
+ }
242
+ });
243
+ }
244
+ }
245
+ if (!response.ok) {
246
+ if (response.status !== 409) {
247
+ console.error("[BaseApiClient] \u274C API Error:", {
248
+ url,
249
+ method,
250
+ status: response.status,
251
+ statusText: response.statusText,
252
+ data
253
+ });
254
+ if (response.status === 500 && data) {
255
+ console.error("[BaseApiClient] 500 Error Details:", {
256
+ message: data.message,
257
+ detail: data.detail,
258
+ code: data.code,
259
+ fullResponse: JSON.stringify(data, null, 2)
260
+ });
261
+ }
262
+ }
263
+ throw parseApiError({
264
+ response: {
265
+ status: response.status,
266
+ data
267
+ }
268
+ });
269
+ }
270
+ return data;
271
+ } catch (error) {
272
+ if (error.response?.status !== 409 && error.code !== "WALLET_ALREADY_EXISTS") {
273
+ console.error("[BaseApiClient] \u274C Request failed:", {
274
+ url,
275
+ method,
276
+ error: error.message
277
+ });
278
+ }
279
+ if (error.name === "AbortError") {
280
+ throw createAbcError(
281
+ "NETWORK_ERROR" /* NETWORK_ERROR */,
282
+ "Request timeout",
283
+ error
284
+ );
285
+ }
286
+ if (error.code && error.message) {
287
+ throw error;
288
+ }
289
+ throw parseApiError(error);
290
+ }
291
+ }
292
+ /**
293
+ * Check if user is authenticated
294
+ */
295
+ isAuthenticated() {
296
+ return !!this.accessToken && !this.isTokenExpired();
297
+ }
298
+ /**
299
+ * Logout (clear tokens)
300
+ */
301
+ async logout() {
302
+ this.clearTokens();
303
+ }
304
+ /**
305
+ * Get secure service instance
306
+ */
307
+ getSecureService() {
308
+ return this.secure;
309
+ }
310
+ };
311
+
312
+ export {
313
+ BaseApiClient
314
+ };