UNPKG

@j0nnyboi/amman

Version:

A modern mandatory toolbelt to help test solana SDK libraries and apps on a locally running validator.

97 lines 4.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initValidator = exports.DEFAULT_VALIDATOR_CONFIG = void 0; const amman_client_1 = require("@j0nnyboi/amman-client"); const child_process_1 = require("child_process"); const assets_1 = require("../assets"); const server_1 = require("../relay/server"); const storage_1 = require("../storage"); const utils_1 = require("../utils"); const http_1 = require("../utils/http"); const solana_validator_1 = require("./solana-validator"); /** * @private */ exports.DEFAULT_VALIDATOR_CONFIG = { killRunningValidators: true, programs: [], accountsCluster: 'https://metaplex.devnet.rpcpool.com', accounts: [], jsonRpcUrl: amman_client_1.LOCALHOST, websocketUrl: '', commitment: 'confirmed', ledgerDir: (0, utils_1.tmpLedgerDir)(), resetLedger: true, limitLedgerSize: 1e4, verifyFees: false, detached: process.env.CI != null, }; /** * @private */ async function initValidator(config, forceClone) { const { killRunningValidators, programs, accounts, jsonRpcUrl, ledgerDir, verifyFees, detached, } = config.validator; const { killRunningRelay, accountProviders, accountRenderers, enabled: relayEnabled, } = config.relay; // ----------------- // Kill running validators // ----------------- if (killRunningValidators) { try { (0, child_process_1.execSync)('pkill -f solana-test-validator'); (0, utils_1.logInfo)('Killed currently running solana-test-validator'); await (0, utils_1.sleep)(1000); } catch (err) { } } // ----------------- // Launch Validator // ----------------- (0, utils_1.logInfo)('Launching new solana-test-validator with programs predeployed and ledger at %s', ledgerDir); const { args, persistedAccountInfos, persistedSnapshotAccountInfos, snapshotAccounts, accountsFolder, keypairs, cleanupConfig, } = await (0, solana_validator_1.buildSolanaValidatorArgs)(config, forceClone !== null && forceClone !== void 0 ? forceClone : false); const validator = await (0, solana_validator_1.startSolanaValidator)(args, detached); const ammanState = { validator, detached, config, }; // ----------------- // Launch relay server in parallel // ----------------- if (relayEnabled) { const accountInfos = (0, assets_1.mapPersistedAccountInfos)([ ...persistedAccountInfos, ...persistedSnapshotAccountInfos, ]); server_1.Relay.startServer(ammanState, accountProviders, accountRenderers, programs, [...accounts, ...snapshotAccounts], accountInfos, keypairs, accountsFolder, config.snapshot.snapshotFolder, killRunningRelay) .then(({ app }) => { (0, utils_1.logInfo)('Successfully launched Relay at %s', (0, http_1.resolveServerAddress)(app)); }) .catch((err) => { const msg = 'Failed to launch Relay'; (0, utils_1.logError)(msg); (0, utils_1.logError)(err); }); } // ----------------- // Launch Storage server in parallel as well // ----------------- if (config.storage.enabled) { (0, http_1.killRunningServer)(amman_client_1.AMMAN_STORAGE_PORT) .then(() => storage_1.MockStorageServer.createInstance(config.storage).then((storage) => storage.start())) .then((server) => { (0, utils_1.logInfo)('Successfully launched MockStorageServer at %s', (0, http_1.resolveServerAddress)(server)); }) .catch((err) => { const msg = 'Failed to launch MockStorageServer'; (0, utils_1.logError)(msg); (0, utils_1.logError)(err); }); } // ----------------- // Wait for validator to come up and cleanup // ----------------- await (0, solana_validator_1.waitForValidator)(jsonRpcUrl, verifyFees, cleanupConfig); return ammanState; } exports.initValidator = initValidator; //# sourceMappingURL=init-validator.js.map