@solana-developers/helpers
Version:
Solana helper functions
123 lines • 5.07 kB
JavaScript
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeKeypairs = exports.addKeypairToEnvFile = exports.getKeypairFromEnvironment = exports.getKeypairFromFile = exports.keypairToSecretKeyJSON = void 0;
const web3_js_1 = require("@solana/web3.js");
const bs58_1 = __importDefault(require("bs58"));
// Default value from Solana CLI
const DEFAULT_FILEPATH = "~/.config/solana/id.json";
const keypairToSecretKeyJSON = (keypair) => {
return JSON.stringify(Array.from(keypair.secretKey));
};
exports.keypairToSecretKeyJSON = keypairToSecretKeyJSON;
const getKeypairFromFile = async (filepath) => {
// Node-specific imports
const path = await Promise.resolve().then(() => __importStar(require("node:path")));
// Work out correct file name
if (!filepath) {
filepath = DEFAULT_FILEPATH;
}
if (filepath[0] === "~") {
const home = process.env.HOME || null;
if (home) {
filepath = path.join(home, filepath.slice(1));
}
}
// Get contents of file
let fileContents;
try {
// Node-specific imports
const { readFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
const fileContentsBuffer = await readFile(filepath);
fileContents = fileContentsBuffer.toString();
}
catch (error) {
throw new Error(`Could not read keypair from file at '${filepath}'`);
}
// Parse contents of file
let parsedFileContents;
try {
parsedFileContents = Uint8Array.from(JSON.parse(fileContents));
}
catch (thrownObject) {
const error = thrownObject;
if (!error.message.includes("Unexpected token")) {
throw error;
}
throw new Error(`Invalid secret key file at '${filepath}'!`);
}
return web3_js_1.Keypair.fromSecretKey(parsedFileContents);
};
exports.getKeypairFromFile = getKeypairFromFile;
const getKeypairFromEnvironment = (variableName) => {
const secretKeyString = process.env[variableName];
if (!secretKeyString) {
throw new Error(`Please set '${variableName}' in environment.`);
}
// Try the shorter base58 format first
let decodedSecretKey;
try {
decodedSecretKey = bs58_1.default.decode(secretKeyString);
return web3_js_1.Keypair.fromSecretKey(decodedSecretKey);
}
catch (throwObject) {
const error = throwObject;
if (!error.message.includes("Non-base58 character")) {
throw new Error(`Invalid secret key in environment variable '${variableName}'!`);
}
}
// Try the longer JSON format
try {
decodedSecretKey = Uint8Array.from(JSON.parse(secretKeyString));
}
catch (error) {
throw new Error(`Invalid secret key in environment variable '${variableName}'!`);
}
return web3_js_1.Keypair.fromSecretKey(decodedSecretKey);
};
exports.getKeypairFromEnvironment = getKeypairFromEnvironment;
const addKeypairToEnvFile = async (keypair, variableName, envFileName) => {
// Node-specific imports
const { appendFile } = await Promise.resolve().then(() => __importStar(require("node:fs/promises")));
if (!envFileName) {
envFileName = ".env";
}
const existingSecretKey = process.env[variableName];
if (existingSecretKey) {
throw new Error(`'${variableName}' already exists in env file.`);
}
const secretKeyString = (0, exports.keypairToSecretKeyJSON)(keypair);
await appendFile(envFileName, `\n# Solana Address: ${keypair.publicKey.toBase58()}\n${variableName}=${secretKeyString}`);
};
exports.addKeypairToEnvFile = addKeypairToEnvFile;
// Shout out to Dean from WBA for this technique
const makeKeypairs = (amount) => {
return Array.from({ length: amount }, () => web3_js_1.Keypair.generate());
};
exports.makeKeypairs = makeKeypairs;
//# sourceMappingURL=keypair.js.map
;