solanaCli.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { Language } from "./getLanguage";
  2. import { RenderContext } from "./getRenderContext";
  3. import {
  4. spawnCommand,
  5. hasCommand,
  6. readStdout,
  7. waitForCommand,
  8. } from "./runCommands";
  9. export async function generateKeypair(ctx: RenderContext): Promise<string> {
  10. const hasSolanaKeygen = await hasCommand("solana-keygen");
  11. if (!hasSolanaKeygen) {
  12. throw new Error(ctx.language.errors.solanaKeygenNotFound);
  13. }
  14. // Run the solana-keygen command to generate a new keypair.
  15. const child = spawnCommand("solana-keygen", [
  16. "new",
  17. "--no-bip39-passphrase",
  18. "--outfile",
  19. `${ctx.programDirectory}/keypair.json`,
  20. ]);
  21. // Wait for the command to finish and read the stdout.
  22. const [stdout] = await Promise.all([
  23. readStdout(child),
  24. waitForCommand(child),
  25. ]);
  26. // Update the render context with the generated address.
  27. const address = stdout.join("").match(/pubkey: (\w+)/)?.[1];
  28. if (!address) {
  29. throw new Error(ctx.language.errors.solanaKeygenFailed);
  30. }
  31. ctx.programAddress = address;
  32. return address;
  33. }
  34. export function toMinorSolanaVersion(
  35. language: Language,
  36. version: string
  37. ): string {
  38. const validVersion = version.match(/^(\d+\.\d+)/);
  39. if (!validVersion) {
  40. throw new Error(
  41. language.errors.invalidSolanaVersion.replace("$version", version)
  42. );
  43. }
  44. return validVersion[0];
  45. }