@vleap/warps-adapter-solana 0.1.0-beta.1 → 0.1.0-beta.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.
- package/dist/index.js +53 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +10 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -50,8 +50,11 @@ __export(index_exports, {
|
|
|
50
50
|
});
|
|
51
51
|
module.exports = __toCommonJS(index_exports);
|
|
52
52
|
|
|
53
|
+
// src/chains/solana.ts
|
|
54
|
+
var import_warps7 = require("@vleap/warps");
|
|
55
|
+
|
|
53
56
|
// src/WarpSolanaDataLoader.ts
|
|
54
|
-
var
|
|
57
|
+
var import_warps2 = require("@vleap/warps");
|
|
55
58
|
var import_web3 = require("@solana/web3.js");
|
|
56
59
|
var import_spl_token = require("@solana/spl-token");
|
|
57
60
|
|
|
@@ -111,7 +114,8 @@ var SolanaExplorerNames = {
|
|
|
111
114
|
var SolanaExplorerUrls = ExplorerUrls;
|
|
112
115
|
|
|
113
116
|
// src/tokens/solana.ts
|
|
114
|
-
var
|
|
117
|
+
var import_warps = require("@vleap/warps");
|
|
118
|
+
var SolanaChain = import_warps.WarpChainName.Solana;
|
|
115
119
|
var SolanaTokens = [
|
|
116
120
|
{
|
|
117
121
|
chain: SolanaChain,
|
|
@@ -168,9 +172,9 @@ var WarpSolanaDataLoader = class {
|
|
|
168
172
|
constructor(config, chain) {
|
|
169
173
|
this.config = config;
|
|
170
174
|
this.chain = chain;
|
|
171
|
-
const providerConfig = (0,
|
|
175
|
+
const providerConfig = (0, import_warps2.getProviderConfig)(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
172
176
|
this.connection = new import_web3.Connection(providerConfig.url, "confirmed");
|
|
173
|
-
this.cache = new
|
|
177
|
+
this.cache = new import_warps2.WarpCache(config.cache?.type);
|
|
174
178
|
}
|
|
175
179
|
async getAccount(address) {
|
|
176
180
|
try {
|
|
@@ -213,7 +217,7 @@ var WarpSolanaDataLoader = class {
|
|
|
213
217
|
if (identifier === this.chain.nativeToken.identifier || identifier === "SOL") {
|
|
214
218
|
return this.chain.nativeToken;
|
|
215
219
|
}
|
|
216
|
-
const cacheKey =
|
|
220
|
+
const cacheKey = import_warps2.WarpCacheKey.Asset(this.config.env, this.chain.name, identifier);
|
|
217
221
|
const cachedAsset = this.cache.get(cacheKey);
|
|
218
222
|
if (cachedAsset) {
|
|
219
223
|
return cachedAsset;
|
|
@@ -241,7 +245,7 @@ var WarpSolanaDataLoader = class {
|
|
|
241
245
|
decimals: metadata.decimals,
|
|
242
246
|
logoUrl: metadata.logoUrl
|
|
243
247
|
};
|
|
244
|
-
this.cache.set(cacheKey, asset,
|
|
248
|
+
this.cache.set(cacheKey, asset, import_warps2.CacheTtl.OneHour);
|
|
245
249
|
return asset;
|
|
246
250
|
} catch (error) {
|
|
247
251
|
return null;
|
|
@@ -372,21 +376,21 @@ var WarpSolanaDataLoader = class {
|
|
|
372
376
|
};
|
|
373
377
|
|
|
374
378
|
// src/WarpSolanaExecutor.ts
|
|
375
|
-
var
|
|
379
|
+
var import_warps5 = require("@vleap/warps");
|
|
376
380
|
var import_web34 = require("@solana/web3.js");
|
|
377
381
|
var import_spl_token2 = require("@solana/spl-token");
|
|
378
382
|
|
|
379
383
|
// src/WarpSolanaOutput.ts
|
|
380
|
-
var
|
|
384
|
+
var import_warps4 = require("@vleap/warps");
|
|
381
385
|
var import_web33 = require("@solana/web3.js");
|
|
382
386
|
|
|
383
387
|
// src/WarpSolanaSerializer.ts
|
|
384
|
-
var
|
|
388
|
+
var import_warps3 = require("@vleap/warps");
|
|
385
389
|
var import_web32 = require("@solana/web3.js");
|
|
386
390
|
var import_bs58 = __toESM(require("bs58"), 1);
|
|
387
391
|
var WarpSolanaSerializer = class {
|
|
388
392
|
constructor() {
|
|
389
|
-
this.coreSerializer = new
|
|
393
|
+
this.coreSerializer = new import_warps3.WarpSerializer();
|
|
390
394
|
}
|
|
391
395
|
typedToString(value) {
|
|
392
396
|
if (value && typeof value === "object" && "toBase58" in value && typeof value.toBase58 === "function") {
|
|
@@ -431,15 +435,15 @@ var WarpSolanaSerializer = class {
|
|
|
431
435
|
if (typeof value === "object" && value !== null && "identifier" in value && "amount" in value) {
|
|
432
436
|
const asset = value;
|
|
433
437
|
if (asset.decimals !== void 0) {
|
|
434
|
-
return `asset:${asset.identifier}${
|
|
438
|
+
return `asset:${asset.identifier}${import_warps3.WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}${import_warps3.WarpConstants.ArgCompositeSeparator}${asset.decimals}`;
|
|
435
439
|
}
|
|
436
|
-
return `asset:${asset.identifier}${
|
|
440
|
+
return `asset:${asset.identifier}${import_warps3.WarpConstants.ArgCompositeSeparator}${asset.amount.toString()}`;
|
|
437
441
|
}
|
|
438
442
|
if (Array.isArray(value)) {
|
|
439
443
|
if (value.length === 0) return `list:string:`;
|
|
440
|
-
const types = value.map((item) => this.typedToString(item).split(
|
|
444
|
+
const types = value.map((item) => this.typedToString(item).split(import_warps3.WarpConstants.ArgParamsSeparator)[0]);
|
|
441
445
|
const type = types[0];
|
|
442
|
-
const values = value.map((item) => this.typedToString(item).split(
|
|
446
|
+
const values = value.map((item) => this.typedToString(item).split(import_warps3.WarpConstants.ArgParamsSeparator)[1]);
|
|
443
447
|
return `list:${type}:${values.join(",")}`;
|
|
444
448
|
}
|
|
445
449
|
if (value === null || value === void 0) {
|
|
@@ -449,8 +453,8 @@ var WarpSolanaSerializer = class {
|
|
|
449
453
|
}
|
|
450
454
|
typedToNative(value) {
|
|
451
455
|
const stringValue = this.typedToString(value);
|
|
452
|
-
const [type, ...valueParts] = stringValue.split(
|
|
453
|
-
const nativeValue = valueParts.join(
|
|
456
|
+
const [type, ...valueParts] = stringValue.split(import_warps3.WarpConstants.ArgParamsSeparator);
|
|
457
|
+
const nativeValue = valueParts.join(import_warps3.WarpConstants.ArgParamsSeparator);
|
|
454
458
|
return [type, this.parseNativeValue(type, nativeValue)];
|
|
455
459
|
}
|
|
456
460
|
nativeToTyped(type, value) {
|
|
@@ -506,7 +510,7 @@ var WarpSolanaSerializer = class {
|
|
|
506
510
|
}
|
|
507
511
|
}
|
|
508
512
|
stringToTyped(value) {
|
|
509
|
-
const parts = value.split(
|
|
513
|
+
const parts = value.split(import_warps3.WarpConstants.ArgParamsSeparator, 2);
|
|
510
514
|
if (parts.length < 2) {
|
|
511
515
|
return value;
|
|
512
516
|
}
|
|
@@ -528,7 +532,7 @@ var WarpSolanaSerializer = class {
|
|
|
528
532
|
case "hex":
|
|
529
533
|
return stringValue;
|
|
530
534
|
case "asset":
|
|
531
|
-
const assetParts = stringValue.split(
|
|
535
|
+
const assetParts = stringValue.split(import_warps3.WarpConstants.ArgCompositeSeparator);
|
|
532
536
|
const identifier = assetParts[0] || "";
|
|
533
537
|
const amount = assetParts[1] ? BigInt(assetParts[1]) : 0n;
|
|
534
538
|
const decimals = assetParts[2] ? parseInt(assetParts[2], 10) : void 0;
|
|
@@ -571,13 +575,13 @@ var WarpSolanaOutput = class {
|
|
|
571
575
|
this.config = config;
|
|
572
576
|
this.chain = chain;
|
|
573
577
|
this.serializer = new WarpSolanaSerializer();
|
|
574
|
-
const providerConfig = (0,
|
|
578
|
+
const providerConfig = (0, import_warps4.getProviderConfig)(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
575
579
|
this.connection = new import_web33.Connection(providerConfig.url, "confirmed");
|
|
576
|
-
this.cache = new
|
|
580
|
+
this.cache = new import_warps4.WarpCache(config.cache?.type);
|
|
577
581
|
}
|
|
578
582
|
async getActionExecution(warp, actionIndex, tx) {
|
|
579
|
-
const inputs = this.cache.get(
|
|
580
|
-
const resolvedInputs = (0,
|
|
583
|
+
const inputs = this.cache.get(import_warps4.WarpCacheKey.WarpExecutable(this.config.env, warp.meta?.hash || "", actionIndex)) ?? [];
|
|
584
|
+
const resolvedInputs = (0, import_warps4.extractResolvedInputValues)(inputs);
|
|
581
585
|
if (!tx) {
|
|
582
586
|
return this.createFailedExecution(warp, actionIndex, resolvedInputs);
|
|
583
587
|
}
|
|
@@ -594,7 +598,7 @@ var WarpSolanaOutput = class {
|
|
|
594
598
|
status: "error",
|
|
595
599
|
warp,
|
|
596
600
|
action: actionIndex,
|
|
597
|
-
user: (0,
|
|
601
|
+
user: (0, import_warps4.getWarpWalletAddressFromConfig)(this.config, this.chain.name),
|
|
598
602
|
txHash: "",
|
|
599
603
|
tx: null,
|
|
600
604
|
next: null,
|
|
@@ -616,7 +620,7 @@ var WarpSolanaOutput = class {
|
|
|
616
620
|
status: success ? "success" : "error",
|
|
617
621
|
warp,
|
|
618
622
|
action: actionIndex,
|
|
619
|
-
user: (0,
|
|
623
|
+
user: (0, import_warps4.getWarpWalletAddressFromConfig)(this.config, this.chain.name),
|
|
620
624
|
txHash: transactionHash,
|
|
621
625
|
tx,
|
|
622
626
|
next: null,
|
|
@@ -646,7 +650,7 @@ var WarpSolanaOutput = class {
|
|
|
646
650
|
status: success ? "success" : "error",
|
|
647
651
|
warp,
|
|
648
652
|
action: actionIndex,
|
|
649
|
-
user: (0,
|
|
653
|
+
user: (0, import_warps4.getWarpWalletAddressFromConfig)(this.config, this.chain.name),
|
|
650
654
|
txHash: signature,
|
|
651
655
|
tx: {
|
|
652
656
|
signature,
|
|
@@ -683,8 +687,8 @@ var WarpSolanaOutput = class {
|
|
|
683
687
|
return value;
|
|
684
688
|
};
|
|
685
689
|
for (const [key, path] of Object.entries(warp.output)) {
|
|
686
|
-
if (path.startsWith(
|
|
687
|
-
const currentActionIndex = (0,
|
|
690
|
+
if (path.startsWith(import_warps4.WarpConstants.Transform.Prefix)) continue;
|
|
691
|
+
const currentActionIndex = (0, import_warps4.parseOutputOutIndex)(path);
|
|
688
692
|
if (currentActionIndex !== null && currentActionIndex !== actionIndex) {
|
|
689
693
|
output[key] = null;
|
|
690
694
|
continue;
|
|
@@ -695,7 +699,7 @@ var WarpSolanaOutput = class {
|
|
|
695
699
|
output[key] = path;
|
|
696
700
|
}
|
|
697
701
|
}
|
|
698
|
-
return { values, output: await (0,
|
|
702
|
+
return { values, output: await (0, import_warps4.evaluateOutputCommon)(warp, output, actionIndex, inputs, this.serializer.coreSerializer, this.config) };
|
|
699
703
|
}
|
|
700
704
|
async getTransactionStatus(txHash) {
|
|
701
705
|
try {
|
|
@@ -743,12 +747,12 @@ var WarpSolanaExecutor = class {
|
|
|
743
747
|
this.config = config;
|
|
744
748
|
this.chain = chain;
|
|
745
749
|
this.serializer = new WarpSolanaSerializer();
|
|
746
|
-
const providerConfig = (0,
|
|
750
|
+
const providerConfig = (0, import_warps5.getProviderConfig)(this.config, chain.name, this.config.env, this.chain.defaultApiUrl);
|
|
747
751
|
this.connection = new import_web34.Connection(providerConfig.url, "confirmed");
|
|
748
752
|
this.output = new WarpSolanaOutput(config, this.chain);
|
|
749
753
|
}
|
|
750
754
|
async createTransaction(executable) {
|
|
751
|
-
const action = (0,
|
|
755
|
+
const action = (0, import_warps5.getWarpActionByIndex)(executable.warp, executable.action);
|
|
752
756
|
let tx = null;
|
|
753
757
|
if (action.type === "transfer") {
|
|
754
758
|
tx = await this.createTransferTransaction(executable);
|
|
@@ -763,7 +767,7 @@ var WarpSolanaExecutor = class {
|
|
|
763
767
|
return tx;
|
|
764
768
|
}
|
|
765
769
|
async createTransferTransaction(executable) {
|
|
766
|
-
const userWallet = (0,
|
|
770
|
+
const userWallet = (0, import_warps5.getWarpWalletAddressFromConfig)(this.config, executable.chain.name);
|
|
767
771
|
if (!userWallet) throw new Error("WarpSolanaExecutor: createTransfer - user address not set");
|
|
768
772
|
let destinationPubkey;
|
|
769
773
|
try {
|
|
@@ -804,9 +808,9 @@ var WarpSolanaExecutor = class {
|
|
|
804
808
|
return this.setTransactionDefaults(transaction, fromPubkey);
|
|
805
809
|
}
|
|
806
810
|
async createContractCallTransaction(executable) {
|
|
807
|
-
const userWallet = (0,
|
|
811
|
+
const userWallet = (0, import_warps5.getWarpWalletAddressFromConfig)(this.config, executable.chain.name);
|
|
808
812
|
if (!userWallet) throw new Error("WarpSolanaExecutor: createContractCall - user address not set");
|
|
809
|
-
const action = (0,
|
|
813
|
+
const action = (0, import_warps5.getWarpActionByIndex)(executable.warp, executable.action);
|
|
810
814
|
if (!action || !("func" in action) || !action.func) throw new Error("WarpSolanaExecutor: Contract action must have a function name");
|
|
811
815
|
let programId;
|
|
812
816
|
try {
|
|
@@ -1019,7 +1023,7 @@ var WarpSolanaExecutor = class {
|
|
|
1019
1023
|
return this.setTransactionDefaults(transaction, fromPubkey);
|
|
1020
1024
|
}
|
|
1021
1025
|
async executeQuery(executable) {
|
|
1022
|
-
const action = (0,
|
|
1026
|
+
const action = (0, import_warps5.getWarpActionByIndex)(executable.warp, executable.action);
|
|
1023
1027
|
if (action.type !== "query") throw new Error(`WarpSolanaExecutor: Invalid action type for executeQuery: ${action.type}`);
|
|
1024
1028
|
if (!action.func) throw new Error("WarpSolanaExecutor: Query action must have a function name");
|
|
1025
1029
|
let queryAddress;
|
|
@@ -1071,23 +1075,23 @@ var WarpSolanaExecutor = class {
|
|
|
1071
1075
|
executable.action,
|
|
1072
1076
|
executable.resolvedInputs
|
|
1073
1077
|
);
|
|
1074
|
-
const next = (0,
|
|
1078
|
+
const next = (0, import_warps5.getNextInfo)(this.config, [], executable.warp, executable.action, output);
|
|
1075
1079
|
const destinationInput = executable.resolvedInputs.find(
|
|
1076
1080
|
(i) => i.input.position === "receiver" || i.input.position === "destination"
|
|
1077
1081
|
);
|
|
1078
1082
|
const destination = destinationInput?.value || executable.destination;
|
|
1079
|
-
const resolvedInputs = (0,
|
|
1083
|
+
const resolvedInputs = (0, import_warps5.extractResolvedInputValues)(executable.resolvedInputs);
|
|
1080
1084
|
return {
|
|
1081
1085
|
status: isSuccess ? "success" : "error",
|
|
1082
1086
|
warp: executable.warp,
|
|
1083
1087
|
action: executable.action,
|
|
1084
|
-
user: (0,
|
|
1088
|
+
user: (0, import_warps5.getWarpWalletAddressFromConfig)(this.config, executable.chain.name),
|
|
1085
1089
|
txHash: null,
|
|
1086
1090
|
tx: null,
|
|
1087
1091
|
next,
|
|
1088
1092
|
values,
|
|
1089
1093
|
output: { ...output, _DATA: decodedResult },
|
|
1090
|
-
messages: (0,
|
|
1094
|
+
messages: (0, import_warps5.applyOutputToMessages)(executable.warp, output, this.config),
|
|
1091
1095
|
destination,
|
|
1092
1096
|
resolvedInputs
|
|
1093
1097
|
};
|
|
@@ -1097,12 +1101,12 @@ var WarpSolanaExecutor = class {
|
|
|
1097
1101
|
(i) => i.input.position === "receiver" || i.input.position === "destination"
|
|
1098
1102
|
);
|
|
1099
1103
|
const destination = destinationInput?.value || executable.destination;
|
|
1100
|
-
const resolvedInputs = (0,
|
|
1104
|
+
const resolvedInputs = (0, import_warps5.extractResolvedInputValues)(executable.resolvedInputs);
|
|
1101
1105
|
return {
|
|
1102
1106
|
status: "error",
|
|
1103
1107
|
warp: executable.warp,
|
|
1104
1108
|
action: executable.action,
|
|
1105
|
-
user: (0,
|
|
1109
|
+
user: (0, import_warps5.getWarpWalletAddressFromConfig)(this.config, executable.chain.name),
|
|
1106
1110
|
txHash: null,
|
|
1107
1111
|
tx: null,
|
|
1108
1112
|
next: null,
|
|
@@ -1289,7 +1293,7 @@ var WarpSolanaExplorer = class {
|
|
|
1289
1293
|
};
|
|
1290
1294
|
|
|
1291
1295
|
// src/WarpSolanaWallet.ts
|
|
1292
|
-
var
|
|
1296
|
+
var import_warps6 = require("@vleap/warps");
|
|
1293
1297
|
var import_web35 = require("@solana/web3.js");
|
|
1294
1298
|
var bip39 = __toESM(require("@scure/bip39"), 1);
|
|
1295
1299
|
var import_english = require("@scure/bip39/wordlists/english");
|
|
@@ -1298,7 +1302,7 @@ var WarpSolanaWallet = class {
|
|
|
1298
1302
|
constructor(config, chain) {
|
|
1299
1303
|
this.config = config;
|
|
1300
1304
|
this.chain = chain;
|
|
1301
|
-
const providerConfig = (0,
|
|
1305
|
+
const providerConfig = (0, import_warps6.getProviderConfig)(config, chain.name, config.env, chain.defaultApiUrl);
|
|
1302
1306
|
this.connection = new import_web35.Connection(providerConfig.url, "confirmed");
|
|
1303
1307
|
}
|
|
1304
1308
|
async signTransaction(tx) {
|
|
@@ -1438,7 +1442,7 @@ var WarpSolanaWallet = class {
|
|
|
1438
1442
|
}
|
|
1439
1443
|
}
|
|
1440
1444
|
getKeypair() {
|
|
1441
|
-
const privateKey = (0,
|
|
1445
|
+
const privateKey = (0, import_warps6.getWarpWalletPrivateKeyFromConfig)(this.config, this.chain.name);
|
|
1442
1446
|
if (privateKey) {
|
|
1443
1447
|
try {
|
|
1444
1448
|
const secretKey = import_bs582.default.decode(privateKey);
|
|
@@ -1456,7 +1460,7 @@ var WarpSolanaWallet = class {
|
|
|
1456
1460
|
throw new Error("Invalid private key format");
|
|
1457
1461
|
}
|
|
1458
1462
|
}
|
|
1459
|
-
const mnemonic = (0,
|
|
1463
|
+
const mnemonic = (0, import_warps6.getWarpWalletMnemonicFromConfig)(this.config, this.chain.name);
|
|
1460
1464
|
if (mnemonic) {
|
|
1461
1465
|
const seed = bip39.mnemonicToSeedSync(mnemonic);
|
|
1462
1466
|
return import_web35.Keypair.fromSeed(seed.slice(0, 32));
|
|
@@ -1487,16 +1491,16 @@ var createSolanaAdapter = (chainName, chainInfos) => {
|
|
|
1487
1491
|
|
|
1488
1492
|
// src/chains/solana.ts
|
|
1489
1493
|
var NativeTokenSol = {
|
|
1490
|
-
chain:
|
|
1494
|
+
chain: import_warps7.WarpChainName.Solana,
|
|
1491
1495
|
identifier: "SOL",
|
|
1492
1496
|
symbol: "SOL",
|
|
1493
1497
|
name: "Solana",
|
|
1494
1498
|
decimals: 9,
|
|
1495
1499
|
logoUrl: "https://vleap.ai/images/tokens/sol.svg"
|
|
1496
1500
|
};
|
|
1497
|
-
var getSolanaAdapter = createSolanaAdapter(
|
|
1501
|
+
var getSolanaAdapter = createSolanaAdapter(import_warps7.WarpChainName.Solana, {
|
|
1498
1502
|
mainnet: {
|
|
1499
|
-
name:
|
|
1503
|
+
name: import_warps7.WarpChainName.Solana,
|
|
1500
1504
|
displayName: "Solana Mainnet",
|
|
1501
1505
|
chainId: "101",
|
|
1502
1506
|
blockTime: 400,
|
|
@@ -1506,7 +1510,7 @@ var getSolanaAdapter = createSolanaAdapter("solana", {
|
|
|
1506
1510
|
nativeToken: NativeTokenSol
|
|
1507
1511
|
},
|
|
1508
1512
|
testnet: {
|
|
1509
|
-
name:
|
|
1513
|
+
name: import_warps7.WarpChainName.Solana,
|
|
1510
1514
|
displayName: "Solana Testnet",
|
|
1511
1515
|
chainId: "103",
|
|
1512
1516
|
blockTime: 400,
|
|
@@ -1516,7 +1520,7 @@ var getSolanaAdapter = createSolanaAdapter("solana", {
|
|
|
1516
1520
|
nativeToken: NativeTokenSol
|
|
1517
1521
|
},
|
|
1518
1522
|
devnet: {
|
|
1519
|
-
name:
|
|
1523
|
+
name: import_warps7.WarpChainName.Solana,
|
|
1520
1524
|
displayName: "Solana Devnet",
|
|
1521
1525
|
chainId: "103",
|
|
1522
1526
|
blockTime: 400,
|