@voyage_ai/v402-web-ts 0.3.0 → 1.0.0
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.d.mts +5 -3
- package/dist/index.d.ts +5 -3
- package/dist/index.js +183 -5
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +183 -5
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +102 -3
- package/dist/react/index.d.ts +102 -3
- package/dist/react/index.js +966 -133
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +963 -135
- package/dist/react/index.mjs.map +1 -1
- package/dist/react/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -173,9 +173,27 @@ function getWalletDisplayName(networkType) {
|
|
|
173
173
|
return "Unknown Wallet";
|
|
174
174
|
}
|
|
175
175
|
}
|
|
176
|
+
function getAllConnectedWalletIds() {
|
|
177
|
+
if (typeof window === "undefined") {
|
|
178
|
+
return {};
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
const cached = localStorage.getItem(CONNECTED_WALLET_IDS_KEY);
|
|
182
|
+
return cached ? JSON.parse(cached) : {};
|
|
183
|
+
} catch (error) {
|
|
184
|
+
console.error("Failed to parse connected wallet IDs:", error);
|
|
185
|
+
return {};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
function getConnectedWalletId(networkType) {
|
|
189
|
+
const walletIds = getAllConnectedWalletIds();
|
|
190
|
+
return walletIds[networkType] || null;
|
|
191
|
+
}
|
|
192
|
+
var CONNECTED_WALLET_IDS_KEY;
|
|
176
193
|
var init_wallet = __esm({
|
|
177
194
|
"src/utils/wallet.ts"() {
|
|
178
195
|
"use strict";
|
|
196
|
+
CONNECTED_WALLET_IDS_KEY = "connected_wallet_ids";
|
|
179
197
|
}
|
|
180
198
|
});
|
|
181
199
|
|
|
@@ -196,6 +214,51 @@ import {
|
|
|
196
214
|
init_wallet();
|
|
197
215
|
|
|
198
216
|
// src/utils/wallet-discovery.ts
|
|
217
|
+
init_wallet();
|
|
218
|
+
var SOLANA_WALLETS = [
|
|
219
|
+
{
|
|
220
|
+
id: "phantom",
|
|
221
|
+
name: "Phantom",
|
|
222
|
+
// Phantom official icon
|
|
223
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9IiNBQjlGRjIiLz4KPHBhdGggZD0iTTExMC41IDY0QzExMC41IDg5Ljk1NjggODkuMjAxIDExMSA2My41IDExMUg0MS41QzM2LjI1MzMgMTExIDMyIDEwNi43NDcgMzIgMTAxLjVWNTQuNUMzMiAzMS4wMjggNTEuMDI4IDEyIDc0LjUgMTJDOTcuOTcyIDEyIDExNyAzMS4wMjggMTE3IDU0LjVWNTUuNUMxMTcgNTguNTM3NiAxMTQuNTM4IDYxIDExMS41IDYxSDEwOS41QzEwNi40NjIgNjEgMTA0IDYzLjQ2MjQgMTA0IDY2LjVWNjhDMTA0IDcxLjg2NiAxMDcuMTM0IDc1IDExMSA3NUgxMTEuNUMxMTQuNTM4IDc1IDExNyA3Mi41Mzc2IDExNyA2OS41VjY0SDExMC41WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyOF8xMjgpIi8+CjxwYXRoIGQ9Ik00OC41IDY3QzUxLjUzNzYgNjcgNTQgNjQuNTM3NiA1NCA2MS41QzU0IDU4LjQ2MjQgNTEuNTM3NiA1NiA0OC41IDU2QzQ1LjQ2MjQgNTYgNDMgNTguNDYyNCA0MyA2MS41QzQzIDY0LjUzNzYgNDUuNDYyNCA2NyA0OC41IDY3WiIgZmlsbD0iIzFCMUIxQiIvPgo8cGF0aCBkPSJNNzMuNSA2N0M3Ni41Mzc2IDY3IDc5IDY0LjUzNzYgNzkgNjEuNUM3OSA1OC40NjI0IDc2LjUzNzYgNTYgNzMuNSA1NkM3MC40NjI0IDU2IDY4IDU4LjQ2MjQgNjggNjEuNUM2OCA2NC41Mzc2IDcwLjQ2MjQgNjcgNzMuNSA2N1oiIGZpbGw9IiMxQjFCMUIiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xMjhfMTI4IiB4MT0iMTE3IiB5MT0iMTIiIHgyPSIxMTciIHkyPSIxMTEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iI0ZGRkZGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNGRkZGRkYiIHN0b3Atb3BhY2l0eT0iMC44MiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPg==",
|
|
224
|
+
detect: () => window.phantom?.solana
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
id: "solflare",
|
|
228
|
+
name: "Solflare",
|
|
229
|
+
// Solflare icon
|
|
230
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9IiNGQzZEMDEiLz4KPHBhdGggZD0iTTk2IDY0TDY0IDMyTDMyIDY0TDY0IDk2TDk2IDY0WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+",
|
|
231
|
+
detect: () => window.solflare
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
id: "backpack",
|
|
235
|
+
name: "Backpack",
|
|
236
|
+
// Backpack icon (red coral color)
|
|
237
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9IiNFMzM0MzAiLz4KPHBhdGggZD0iTTQwIDQ4SDg4VjgwQzg4IDg4LjgzNjYgODAuODM2NiA5NiA3MiA5Nkg1NkM0Ny4xNjM0IDk2IDQwIDg4LjgzNjYgNDAgODBWNDhaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNTIgMzJINzZWNDhINTJWMzJaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4=",
|
|
238
|
+
detect: () => window.backpack
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
id: "okx-solana",
|
|
242
|
+
name: "OKX Wallet",
|
|
243
|
+
// OKX icon
|
|
244
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9ImJsYWNrIi8+CjxyZWN0IHg9IjI0IiB5PSIyNCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0id2hpdGUiLz4KPHJlY3QgeD0iNTIiIHk9IjI0IiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSI0IiBmaWxsPSJ3aGl0ZSIvPgo8cmVjdCB4PSI4MCIgeT0iMjQiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgcng9IjQiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjI0IiB5PSI1MiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0id2hpdGUiLz4KPHJlY3QgeD0iODAiIHk9IjUyIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSI0IiBmaWxsPSJ3aGl0ZSIvPgo8cmVjdCB4PSIyNCIgeT0iODAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgcng9IjQiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjUyIiB5PSI4MCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNCIgZmlsbD0id2hpdGUiLz4KPHJlY3QgeD0iODAiIHk9IjgwIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHJ4PSI0IiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4=",
|
|
245
|
+
detect: () => window.okxwallet?.solana
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
id: "coinbase-solana",
|
|
249
|
+
name: "Coinbase Wallet",
|
|
250
|
+
// Coinbase icon (blue)
|
|
251
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9IiMwMDUyRkYiLz4KPGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iMzYiIGZpbGw9IndoaXRlIi8+CjxyZWN0IHg9IjQ4IiB5PSI1NiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjE2IiByeD0iNCIgZmlsbD0iIzAwNTJGRiIvPgo8L3N2Zz4=",
|
|
252
|
+
detect: () => window.coinbaseSolana
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: "trust-solana",
|
|
256
|
+
name: "Trust Wallet",
|
|
257
|
+
// Trust Wallet icon
|
|
258
|
+
icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYiIGZpbGw9IiMwNTAwRkYiLz4KPHBhdGggZD0iTTY0IDI0QzY0IDI0IDk2IDQwIDk2IDY0Qzk2IDg4IDY0IDEwNCA2NCAxMDRDNjQgMTA0IDMyIDg4IDMyIDY0QzMyIDQwIDY0IDI0IDY0IDI0WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI2IiBmaWxsPSJub25lIi8+Cjwvc3ZnPg==",
|
|
259
|
+
detect: () => window.trustwallet?.solana
|
|
260
|
+
}
|
|
261
|
+
];
|
|
199
262
|
var evmWallets = /* @__PURE__ */ new Map();
|
|
200
263
|
var evmDiscoveryListeners = /* @__PURE__ */ new Set();
|
|
201
264
|
var evmDiscoveryInitialized = false;
|
|
@@ -210,10 +273,111 @@ function initEVMWalletDiscovery() {
|
|
|
210
273
|
}));
|
|
211
274
|
window.dispatchEvent(new Event("eip6963:requestProvider"));
|
|
212
275
|
}
|
|
276
|
+
function getEVMWallets() {
|
|
277
|
+
const wallets = [];
|
|
278
|
+
const detectedNames = /* @__PURE__ */ new Set();
|
|
279
|
+
evmWallets.forEach((detail, uuid) => {
|
|
280
|
+
if (!detectedNames.has(detail.info.name)) {
|
|
281
|
+
wallets.push({
|
|
282
|
+
id: uuid,
|
|
283
|
+
name: detail.info.name,
|
|
284
|
+
icon: detail.info.icon,
|
|
285
|
+
networkType: "evm" /* EVM */,
|
|
286
|
+
provider: detail.provider,
|
|
287
|
+
installed: true
|
|
288
|
+
});
|
|
289
|
+
detectedNames.add(detail.info.name);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
if (wallets.length === 0 && typeof window !== "undefined" && window.ethereum) {
|
|
293
|
+
const ethereum = window.ethereum;
|
|
294
|
+
const walletName = ethereum.isMetaMask ? "MetaMask" : ethereum.isCoinbaseWallet ? "Coinbase Wallet" : ethereum.isOkxWallet ? "OKX Wallet" : "Browser Wallet";
|
|
295
|
+
if (!detectedNames.has(walletName)) {
|
|
296
|
+
wallets.push({
|
|
297
|
+
id: "injected",
|
|
298
|
+
name: walletName,
|
|
299
|
+
icon: "",
|
|
300
|
+
// Will use first letter as avatar
|
|
301
|
+
networkType: "evm" /* EVM */,
|
|
302
|
+
provider: ethereum,
|
|
303
|
+
installed: true
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
return wallets;
|
|
308
|
+
}
|
|
309
|
+
function getSolanaWallets() {
|
|
310
|
+
if (typeof window === "undefined") return [];
|
|
311
|
+
const wallets = [];
|
|
312
|
+
const detectedProviders = /* @__PURE__ */ new Set();
|
|
313
|
+
const detectedNames = /* @__PURE__ */ new Set();
|
|
314
|
+
for (const wallet of SOLANA_WALLETS) {
|
|
315
|
+
const provider = wallet.detect();
|
|
316
|
+
if (provider && !detectedNames.has(wallet.name)) {
|
|
317
|
+
wallets.push({
|
|
318
|
+
id: wallet.id,
|
|
319
|
+
name: wallet.name,
|
|
320
|
+
icon: wallet.icon,
|
|
321
|
+
networkType: "solana" /* SOLANA */,
|
|
322
|
+
provider,
|
|
323
|
+
installed: true
|
|
324
|
+
});
|
|
325
|
+
detectedProviders.add(provider);
|
|
326
|
+
detectedNames.add(wallet.name);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
const windowSolana = window.solana;
|
|
330
|
+
if (windowSolana && !detectedProviders.has(windowSolana)) {
|
|
331
|
+
const walletName = windowSolana.isPhantom ? "Phantom" : windowSolana.isSolflare ? "Solflare" : windowSolana.isBackpack ? "Backpack" : windowSolana.walletName || "Solana Wallet";
|
|
332
|
+
if (!detectedNames.has(walletName)) {
|
|
333
|
+
wallets.push({
|
|
334
|
+
id: "solana-unknown",
|
|
335
|
+
name: walletName,
|
|
336
|
+
icon: "",
|
|
337
|
+
// Will use first letter as avatar
|
|
338
|
+
networkType: "solana" /* SOLANA */,
|
|
339
|
+
provider: windowSolana,
|
|
340
|
+
installed: true
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
return wallets;
|
|
345
|
+
}
|
|
346
|
+
function getWalletsForNetwork(networkType) {
|
|
347
|
+
switch (networkType) {
|
|
348
|
+
case "evm" /* EVM */:
|
|
349
|
+
return getEVMWallets();
|
|
350
|
+
case "solana" /* SOLANA */:
|
|
351
|
+
case "svm" /* SVM */:
|
|
352
|
+
return getSolanaWallets();
|
|
353
|
+
default:
|
|
354
|
+
return [];
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function getWalletByName(name, networkType) {
|
|
358
|
+
const wallets = getWalletsForNetwork(networkType);
|
|
359
|
+
return wallets.find((w) => w.name === name) || null;
|
|
360
|
+
}
|
|
361
|
+
function restoreConnectedWallet(networkType) {
|
|
362
|
+
const savedWalletName = getConnectedWalletId(networkType);
|
|
363
|
+
if (!savedWalletName) return null;
|
|
364
|
+
const wallet = getWalletByName(savedWalletName, networkType);
|
|
365
|
+
if (wallet) {
|
|
366
|
+
currentConnectedWallet = wallet;
|
|
367
|
+
console.log(`\u2705 Restored wallet provider: ${wallet.name}`);
|
|
368
|
+
return wallet;
|
|
369
|
+
}
|
|
370
|
+
console.warn(`\u26A0\uFE0F Could not find wallet with name: ${savedWalletName}`);
|
|
371
|
+
return null;
|
|
372
|
+
}
|
|
213
373
|
function getWalletProviderForPayment(networkType) {
|
|
214
374
|
if (currentConnectedWallet && currentConnectedWallet.networkType === networkType) {
|
|
215
375
|
return currentConnectedWallet.provider;
|
|
216
376
|
}
|
|
377
|
+
const restoredWallet = restoreConnectedWallet(networkType);
|
|
378
|
+
if (restoredWallet) {
|
|
379
|
+
return restoredWallet.provider;
|
|
380
|
+
}
|
|
217
381
|
if (typeof window === "undefined") return null;
|
|
218
382
|
switch (networkType) {
|
|
219
383
|
case "evm" /* EVM */:
|
|
@@ -491,7 +655,7 @@ function createEvmPaymentFetch(config) {
|
|
|
491
655
|
// src/utils/payment-helpers.ts
|
|
492
656
|
init_common();
|
|
493
657
|
import { ethers as ethers2 } from "ethers";
|
|
494
|
-
async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, additionalParams) {
|
|
658
|
+
async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, additionalParams, expectedAddress) {
|
|
495
659
|
const fullEndpoint = `${endpoint}/${merchantId}`;
|
|
496
660
|
let response;
|
|
497
661
|
const requestInit = additionalParams && Object.keys(additionalParams).length > 0 ? {
|
|
@@ -503,11 +667,19 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
503
667
|
if (networkType === "solana" /* SOLANA */ || networkType === "svm" /* SVM */) {
|
|
504
668
|
const solana = getWalletProviderForPayment(networkType);
|
|
505
669
|
if (!solana) {
|
|
506
|
-
throw new Error("
|
|
670
|
+
throw new Error("Please connect your Solana wallet first.");
|
|
507
671
|
}
|
|
508
672
|
if (!solana.isConnected) {
|
|
509
673
|
await solana.connect();
|
|
510
674
|
}
|
|
675
|
+
if (expectedAddress && solana.publicKey) {
|
|
676
|
+
const currentAddress = solana.publicKey.toString();
|
|
677
|
+
if (currentAddress !== expectedAddress) {
|
|
678
|
+
throw new Error(
|
|
679
|
+
`Wallet account mismatch: the current wallet account is ${currentAddress.slice(0, 8)}...\uFF0CBut the desired account is ${expectedAddress.slice(0, 8)}.... Please switch to the correct account in your wallet.`
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
511
683
|
response = await handleSvmPayment(fullEndpoint, {
|
|
512
684
|
wallet: solana,
|
|
513
685
|
network: "solana"
|
|
@@ -516,12 +688,18 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
516
688
|
} else if (networkType === "evm" /* EVM */) {
|
|
517
689
|
const ethereum = getWalletProviderForPayment(networkType);
|
|
518
690
|
if (!ethereum) {
|
|
519
|
-
throw new Error("
|
|
691
|
+
throw new Error("Please connect the EVM wallet first");
|
|
520
692
|
}
|
|
521
693
|
const provider = new ethers2.BrowserProvider(ethereum);
|
|
522
694
|
const signer = await provider.getSigner();
|
|
695
|
+
const currentAddress = await signer.getAddress();
|
|
696
|
+
if (expectedAddress && currentAddress.toLowerCase() !== expectedAddress.toLowerCase()) {
|
|
697
|
+
throw new Error(
|
|
698
|
+
`Wallet account mismatch: the current wallet account is ${currentAddress.slice(0, 8)}...\uFF0CBut the desired account is ${expectedAddress.slice(0, 8)}.... Please switch to the correct account in your wallet.`
|
|
699
|
+
);
|
|
700
|
+
}
|
|
523
701
|
const wallet = {
|
|
524
|
-
address:
|
|
702
|
+
address: currentAddress,
|
|
525
703
|
signTypedData: async (domain, types, message) => {
|
|
526
704
|
return await signer.signTypedData(domain, types, message);
|
|
527
705
|
},
|
|
@@ -544,7 +722,7 @@ async function makePayment(networkType, merchantId, endpoint = PROD_BACK_URL, ad
|
|
|
544
722
|
// Will use backend's network configuration
|
|
545
723
|
}, requestInit);
|
|
546
724
|
} else {
|
|
547
|
-
throw new Error(
|
|
725
|
+
throw new Error(`Unsupported network types: ${networkType}`);
|
|
548
726
|
}
|
|
549
727
|
return response;
|
|
550
728
|
}
|