@vleap/warps-adapter-solana 0.1.0-beta.4 → 0.1.0-beta.6

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.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { WarpChainAsset, AdapterFactory, WarpChain, WarpChainEnv, AdapterWarpDataLoader, WarpClientConfig, WarpChainInfo, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpOutput, Warp, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpNativeValue, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpAdapterGenericTransaction } from '@vleap/warps';
1
+ import { WarpChainAsset, AdapterFactory, WarpChain, WarpChainEnv, AdapterWarpDataLoader, WarpClientConfig, WarpChainInfo, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpOutput, Warp, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpNativeValue, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WalletProvider, WarpAdapterGenericTransaction } from '@vleap/warps';
2
2
  import { Transaction } from '@solana/web3.js';
3
3
 
4
4
  declare const NativeTokenSol: WarpChainAsset;
@@ -166,7 +166,11 @@ declare class WarpSolanaWallet implements AdapterWarpWallet {
166
166
  private config;
167
167
  private chain;
168
168
  private connection;
169
- constructor(config: WarpClientConfig, chain: WarpChainInfo);
169
+ private walletProvider;
170
+ private cachedAddress;
171
+ private cachedPublicKey;
172
+ constructor(config: WarpClientConfig, chain: WarpChainInfo, walletProvider?: WalletProvider);
173
+ private initializeCache;
170
174
  signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction>;
171
175
  signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]>;
172
176
  signMessage(message: string): Promise<string>;
@@ -184,7 +188,6 @@ declare class WarpSolanaWallet implements AdapterWarpWallet {
184
188
  };
185
189
  getAddress(): string | null;
186
190
  getPublicKey(): string | null;
187
- private getKeypair;
188
191
  }
189
192
 
190
193
  export { type ExplorerName, ExplorerUrls, KnownTokens, NativeTokenSol, SolanaExplorerMap, SolanaExplorerNames, SolanaExplorerUrls, SolanaExplorers, type TokenBalance, type TokenMetadata, WarpSolanaConstants, WarpSolanaDataLoader, WarpSolanaExecutor, WarpSolanaExplorer, WarpSolanaOutput, WarpSolanaSerializer, WarpSolanaWallet, findKnownTokenById, getKnownTokensForChain, getSolanaAdapter };
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WarpChainAsset, AdapterFactory, WarpChain, WarpChainEnv, AdapterWarpDataLoader, WarpClientConfig, WarpChainInfo, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpOutput, Warp, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpNativeValue, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WarpAdapterGenericTransaction } from '@vleap/warps';
1
+ import { WarpChainAsset, AdapterFactory, WarpChain, WarpChainEnv, AdapterWarpDataLoader, WarpClientConfig, WarpChainInfo, WarpChainAccount, WarpChainAction, WarpDataLoaderOptions, AdapterWarpExecutor, WarpExecutable, WarpActionExecutionResult, AdapterWarpExplorer, AdapterWarpOutput, Warp, WarpActionIndex, WarpAdapterGenericRemoteTransaction, ResolvedInput, WarpNativeValue, WarpExecutionOutput, AdapterWarpSerializer, WarpSerializer, WarpActionInputType, BaseWarpActionInputType, WarpAdapterGenericType, AdapterWarpWallet, WalletProvider, WarpAdapterGenericTransaction } from '@vleap/warps';
2
2
  import { Transaction } from '@solana/web3.js';
3
3
 
4
4
  declare const NativeTokenSol: WarpChainAsset;
@@ -166,7 +166,11 @@ declare class WarpSolanaWallet implements AdapterWarpWallet {
166
166
  private config;
167
167
  private chain;
168
168
  private connection;
169
- constructor(config: WarpClientConfig, chain: WarpChainInfo);
169
+ private walletProvider;
170
+ private cachedAddress;
171
+ private cachedPublicKey;
172
+ constructor(config: WarpClientConfig, chain: WarpChainInfo, walletProvider?: WalletProvider);
173
+ private initializeCache;
170
174
  signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction>;
171
175
  signTransactions(txs: WarpAdapterGenericTransaction[]): Promise<WarpAdapterGenericTransaction[]>;
172
176
  signMessage(message: string): Promise<string>;
@@ -184,7 +188,6 @@ declare class WarpSolanaWallet implements AdapterWarpWallet {
184
188
  };
185
189
  getAddress(): string | null;
186
190
  getPublicKey(): string | null;
187
- private getKeypair;
188
191
  }
189
192
 
190
193
  export { type ExplorerName, ExplorerUrls, KnownTokens, NativeTokenSol, SolanaExplorerMap, SolanaExplorerNames, SolanaExplorerUrls, SolanaExplorers, type TokenBalance, type TokenMetadata, WarpSolanaConstants, WarpSolanaDataLoader, WarpSolanaExecutor, WarpSolanaExplorer, WarpSolanaOutput, WarpSolanaSerializer, WarpSolanaWallet, findKnownTokenById, getKnownTokensForChain, getSolanaAdapter };
package/dist/index.js CHANGED
@@ -51,7 +51,7 @@ __export(index_exports, {
51
51
  module.exports = __toCommonJS(index_exports);
52
52
 
53
53
  // src/chains/solana.ts
54
- var import_warps7 = require("@vleap/warps");
54
+ var import_warps8 = require("@vleap/warps");
55
55
 
56
56
  // src/WarpSolanaDataLoader.ts
57
57
  var import_warps2 = require("@vleap/warps");
@@ -1271,20 +1271,41 @@ var WarpSolanaExplorer = class {
1271
1271
  };
1272
1272
 
1273
1273
  // src/WarpSolanaWallet.ts
1274
- var import_warps6 = require("@vleap/warps");
1274
+ var bip392 = __toESM(require("@scure/bip39"), 1);
1275
+ var import_english = require("@scure/bip39/wordlists/english.js");
1276
+ var import_web36 = require("@solana/web3.js");
1277
+ var import_warps7 = require("@vleap/warps");
1278
+ var import_bs583 = __toESM(require("bs58"), 1);
1279
+
1280
+ // src/providers/SolanaWalletProvider.ts
1275
1281
  var import_web35 = require("@solana/web3.js");
1276
1282
  var bip39 = __toESM(require("@scure/bip39"), 1);
1277
- var import_english = require("@scure/bip39/wordlists/english.js");
1278
1283
  var import_bs582 = __toESM(require("bs58"), 1);
1279
- var WarpSolanaWallet = class {
1280
- constructor(config, chain) {
1284
+ var import_warps6 = require("@vleap/warps");
1285
+ var SolanaWalletProvider = class {
1286
+ constructor(config, chain, connection) {
1281
1287
  this.config = config;
1282
1288
  this.chain = chain;
1283
- const providerConfig = (0, import_warps6.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
1284
- this.connection = new import_web35.Connection(providerConfig.url, "confirmed");
1289
+ this.connection = connection;
1290
+ this.keypair = null;
1291
+ }
1292
+ async getAddress() {
1293
+ try {
1294
+ const keypair = this.getKeypair();
1295
+ return keypair.publicKey.toBase58();
1296
+ } catch {
1297
+ return null;
1298
+ }
1299
+ }
1300
+ async getPublicKey() {
1301
+ try {
1302
+ const keypair = this.getKeypair();
1303
+ return keypair.publicKey.toBase58();
1304
+ } catch {
1305
+ return null;
1306
+ }
1285
1307
  }
1286
1308
  async signTransaction(tx) {
1287
- if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
1288
1309
  const keypair = this.getKeypair();
1289
1310
  if (tx instanceof import_web35.VersionedTransaction) {
1290
1311
  tx.sign([keypair]);
@@ -1311,28 +1332,6 @@ var WarpSolanaWallet = class {
1311
1332
  }
1312
1333
  throw new Error("Invalid transaction format");
1313
1334
  }
1314
- async signTransactions(txs) {
1315
- if (txs.length === 0) return [];
1316
- const keypair = this.getKeypair();
1317
- return Promise.all(
1318
- txs.map(async (tx) => {
1319
- if (tx instanceof import_web35.VersionedTransaction) {
1320
- tx.sign([keypair]);
1321
- return tx;
1322
- }
1323
- if (tx instanceof import_web35.Transaction) {
1324
- tx.sign(keypair);
1325
- return tx;
1326
- }
1327
- if (tx.transaction && typeof tx.transaction === "object") {
1328
- const transaction = import_web35.Transaction.from(tx.transaction);
1329
- transaction.sign(keypair);
1330
- return { ...tx, transaction: transaction.serialize() };
1331
- }
1332
- throw new Error("Invalid transaction format");
1333
- })
1334
- );
1335
- }
1336
1335
  async signMessage(message) {
1337
1336
  const keypair = this.getKeypair();
1338
1337
  const messageBytes = new TextEncoder().encode(message);
@@ -1349,26 +1348,90 @@ var WarpSolanaWallet = class {
1349
1348
  const signature = nacl.sign.detached(messageBytes, privateKeyBytes);
1350
1349
  return import_bs582.default.encode(signature);
1351
1350
  }
1351
+ getKeypairInstance() {
1352
+ return this.getKeypair();
1353
+ }
1354
+ getKeypair() {
1355
+ if (this.keypair) return this.keypair;
1356
+ const privateKey = (0, import_warps6.getWarpWalletPrivateKeyFromConfig)(this.config, this.chain.name);
1357
+ if (privateKey) {
1358
+ try {
1359
+ const secretKey = import_bs582.default.decode(privateKey);
1360
+ if (secretKey.length === 64) {
1361
+ this.keypair = import_web35.Keypair.fromSecretKey(secretKey);
1362
+ return this.keypair;
1363
+ } else if (secretKey.length === 32) {
1364
+ this.keypair = import_web35.Keypair.fromSeed(secretKey);
1365
+ return this.keypair;
1366
+ } else {
1367
+ throw new Error(`Invalid private key length: expected 32 or 64 bytes, got ${secretKey.length}`);
1368
+ }
1369
+ } catch (error) {
1370
+ if (error instanceof Error) {
1371
+ throw new Error(`Invalid private key format: ${error.message}`);
1372
+ }
1373
+ throw new Error("Invalid private key format");
1374
+ }
1375
+ }
1376
+ const mnemonic = (0, import_warps6.getWarpWalletMnemonicFromConfig)(this.config, this.chain.name);
1377
+ if (mnemonic) {
1378
+ const seed = bip39.mnemonicToSeedSync(mnemonic);
1379
+ this.keypair = import_web35.Keypair.fromSeed(seed.slice(0, 32));
1380
+ return this.keypair;
1381
+ }
1382
+ throw new Error("No private key or mnemonic provided");
1383
+ }
1384
+ };
1385
+
1386
+ // src/WarpSolanaWallet.ts
1387
+ var WarpSolanaWallet = class {
1388
+ constructor(config, chain, walletProvider) {
1389
+ this.config = config;
1390
+ this.chain = chain;
1391
+ this.cachedAddress = null;
1392
+ this.cachedPublicKey = null;
1393
+ const providerConfig = (0, import_warps7.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
1394
+ this.connection = new import_web36.Connection(providerConfig.url, "confirmed");
1395
+ this.walletProvider = walletProvider || new SolanaWalletProvider(config, chain, this.connection);
1396
+ this.initializeCache();
1397
+ }
1398
+ initializeCache() {
1399
+ (0, import_warps7.initializeWalletCache)(this.walletProvider).then((cache) => {
1400
+ this.cachedAddress = cache.address;
1401
+ this.cachedPublicKey = cache.publicKey;
1402
+ });
1403
+ }
1404
+ async signTransaction(tx) {
1405
+ if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
1406
+ return await this.walletProvider.signTransaction(tx);
1407
+ }
1408
+ async signTransactions(txs) {
1409
+ if (txs.length === 0) return [];
1410
+ return Promise.all(txs.map(async (tx) => this.signTransaction(tx)));
1411
+ }
1412
+ async signMessage(message) {
1413
+ return await this.walletProvider.signMessage(message);
1414
+ }
1352
1415
  async sendTransaction(tx) {
1353
1416
  if (!tx || typeof tx !== "object") throw new Error("Invalid transaction object");
1354
1417
  let transaction;
1355
- if (tx instanceof import_web35.VersionedTransaction) {
1418
+ if (tx instanceof import_web36.VersionedTransaction) {
1356
1419
  transaction = tx;
1357
- } else if (tx instanceof import_web35.Transaction) {
1420
+ } else if (tx instanceof import_web36.Transaction) {
1358
1421
  transaction = tx;
1359
1422
  } else if (tx.transaction) {
1360
- if (tx.transaction instanceof import_web35.Transaction) {
1423
+ if (tx.transaction instanceof import_web36.Transaction) {
1361
1424
  transaction = tx.transaction;
1362
- } else if (tx.transaction instanceof import_web35.VersionedTransaction) {
1425
+ } else if (tx.transaction instanceof import_web36.VersionedTransaction) {
1363
1426
  transaction = tx.transaction;
1364
1427
  } else if (typeof tx.transaction === "object") {
1365
1428
  try {
1366
- transaction = import_web35.Transaction.from(tx.transaction);
1429
+ transaction = import_web36.Transaction.from(tx.transaction);
1367
1430
  } catch {
1368
1431
  throw new Error("Invalid transaction format");
1369
1432
  }
1370
1433
  } else if (Buffer.isBuffer(tx.transaction) || typeof tx.transaction === "string") {
1371
- transaction = import_web35.Transaction.from(tx.transaction);
1434
+ transaction = import_web36.Transaction.from(tx.transaction);
1372
1435
  } else {
1373
1436
  throw new Error("Transaction must be signed before sending");
1374
1437
  }
@@ -1385,65 +1448,29 @@ var WarpSolanaWallet = class {
1385
1448
  return Promise.all(txs.map(async (tx) => this.sendTransaction(tx)));
1386
1449
  }
1387
1450
  create(mnemonic) {
1388
- const seed = bip39.mnemonicToSeedSync(mnemonic);
1389
- const keypair = import_web35.Keypair.fromSeed(seed.slice(0, 32));
1451
+ const seed = bip392.mnemonicToSeedSync(mnemonic);
1452
+ const keypair = import_web36.Keypair.fromSeed(seed.slice(0, 32));
1390
1453
  return {
1391
1454
  address: keypair.publicKey.toBase58(),
1392
- privateKey: import_bs582.default.encode(keypair.secretKey),
1455
+ privateKey: import_bs583.default.encode(keypair.secretKey),
1393
1456
  mnemonic
1394
1457
  };
1395
1458
  }
1396
1459
  generate() {
1397
- const keypair = import_web35.Keypair.generate();
1460
+ const keypair = import_web36.Keypair.generate();
1398
1461
  const entropy = keypair.secretKey.slice(0, 16);
1399
- const mnemonic = bip39.entropyToMnemonic(entropy, import_english.wordlist);
1462
+ const mnemonic = bip392.entropyToMnemonic(entropy, import_english.wordlist);
1400
1463
  return {
1401
1464
  address: keypair.publicKey.toBase58(),
1402
- privateKey: import_bs582.default.encode(keypair.secretKey),
1465
+ privateKey: import_bs583.default.encode(keypair.secretKey),
1403
1466
  mnemonic
1404
1467
  };
1405
1468
  }
1406
1469
  getAddress() {
1407
- try {
1408
- const keypair = this.getKeypair();
1409
- return keypair.publicKey.toBase58();
1410
- } catch {
1411
- return null;
1412
- }
1470
+ return this.cachedAddress;
1413
1471
  }
1414
1472
  getPublicKey() {
1415
- try {
1416
- const keypair = this.getKeypair();
1417
- return keypair.publicKey.toBase58();
1418
- } catch {
1419
- return null;
1420
- }
1421
- }
1422
- getKeypair() {
1423
- const privateKey = (0, import_warps6.getWarpWalletPrivateKeyFromConfig)(this.config, this.chain.name);
1424
- if (privateKey) {
1425
- try {
1426
- const secretKey = import_bs582.default.decode(privateKey);
1427
- if (secretKey.length === 64) {
1428
- return import_web35.Keypair.fromSecretKey(secretKey);
1429
- } else if (secretKey.length === 32) {
1430
- return import_web35.Keypair.fromSeed(secretKey);
1431
- } else {
1432
- throw new Error(`Invalid private key length: expected 32 or 64 bytes, got ${secretKey.length}`);
1433
- }
1434
- } catch (error) {
1435
- if (error instanceof Error) {
1436
- throw new Error(`Invalid private key format: ${error.message}`);
1437
- }
1438
- throw new Error("Invalid private key format");
1439
- }
1440
- }
1441
- const mnemonic = (0, import_warps6.getWarpWalletMnemonicFromConfig)(this.config, this.chain.name);
1442
- if (mnemonic) {
1443
- const seed = bip39.mnemonicToSeedSync(mnemonic);
1444
- return import_web35.Keypair.fromSeed(seed.slice(0, 32));
1445
- }
1446
- throw new Error("No private key or mnemonic provided");
1473
+ return this.cachedPublicKey;
1447
1474
  }
1448
1475
  };
1449
1476
 
@@ -1469,42 +1496,42 @@ var createSolanaAdapter = (chainName, chainInfos) => {
1469
1496
 
1470
1497
  // src/chains/solana.ts
1471
1498
  var NativeTokenSol = {
1472
- chain: import_warps7.WarpChainName.Solana,
1499
+ chain: import_warps8.WarpChainName.Solana,
1473
1500
  identifier: "SOL",
1474
1501
  symbol: "SOL",
1475
1502
  name: "Solana",
1476
1503
  decimals: 9,
1477
- logoUrl: "https://vleap.ai/images/tokens/sol.svg"
1504
+ logoUrl: "https://joai.ai/images/tokens/sol.svg"
1478
1505
  };
1479
- var getSolanaAdapter = createSolanaAdapter(import_warps7.WarpChainName.Solana, {
1506
+ var getSolanaAdapter = createSolanaAdapter(import_warps8.WarpChainName.Solana, {
1480
1507
  mainnet: {
1481
- name: import_warps7.WarpChainName.Solana,
1508
+ name: import_warps8.WarpChainName.Solana,
1482
1509
  displayName: "Solana Mainnet",
1483
1510
  chainId: "101",
1484
1511
  blockTime: 400,
1485
1512
  addressHrp: "",
1486
1513
  defaultApiUrl: "https://api.mainnet-beta.solana.com",
1487
- logoUrl: "https://vleap.ai/images/chains/solana.svg",
1514
+ logoUrl: "https://joai.ai/images/chains/solana.svg",
1488
1515
  nativeToken: NativeTokenSol
1489
1516
  },
1490
1517
  testnet: {
1491
- name: import_warps7.WarpChainName.Solana,
1518
+ name: import_warps8.WarpChainName.Solana,
1492
1519
  displayName: "Solana Testnet",
1493
1520
  chainId: "103",
1494
1521
  blockTime: 400,
1495
1522
  addressHrp: "",
1496
1523
  defaultApiUrl: "https://api.testnet.solana.com",
1497
- logoUrl: "https://vleap.ai/images/chains/solana.svg",
1524
+ logoUrl: "https://joai.ai/images/chains/solana.svg",
1498
1525
  nativeToken: NativeTokenSol
1499
1526
  },
1500
1527
  devnet: {
1501
- name: import_warps7.WarpChainName.Solana,
1528
+ name: import_warps8.WarpChainName.Solana,
1502
1529
  displayName: "Solana Devnet",
1503
1530
  chainId: "103",
1504
1531
  blockTime: 400,
1505
1532
  addressHrp: "",
1506
1533
  defaultApiUrl: "https://api.devnet.solana.com",
1507
- logoUrl: "https://vleap.ai/images/chains/solana.svg",
1534
+ logoUrl: "https://joai.ai/images/chains/solana.svg",
1508
1535
  nativeToken: NativeTokenSol
1509
1536
  }
1510
1537
  });