@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
JavaScript
;
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