1#!/usr/bin/env node 2import chalk from 'chalk'; 3 4import { Command } from './cli'; 5import { requireArg, assertArgs, getProjectRoot } from './utils/args'; 6import * as Log from './utils/log'; 7 8export const generateCodeSigning: Command = async (argv) => { 9 const args = assertArgs( 10 { 11 // Types 12 '--help': Boolean, 13 '--key-output-directory': String, 14 '--certificate-output-directory': String, 15 '--certificate-validity-duration-years': Number, 16 '--certificate-common-name': String, 17 // Aliases 18 '-h': '--help', 19 }, 20 argv ?? [] 21 ); 22 23 if (args['--help']) { 24 Log.exit( 25 chalk` 26{bold Description} 27Generate expo-updates private key, public key, and code signing certificate using that public key (self-signed by the private key) 28 29{bold Usage} 30 {dim $} npx expo-updates codesigning:generate --key-output-directory <dir> --certificate-output-directory <dir> --certificate-validity-duration-years <num years> --certificate-common-name <name> 31 32 Options 33 --key-output-directory <string> Directory in which to put the generated private and public keys 34 --certificate-output-directory <string> Directory in which to put the generated certificate 35 --certificate-validity-duration-years <number> Certificate validity duration in years (number of years before certificate needs rotation) 36 --certificate-common-name <string> Common name attribute for certificate (generally the human readable name of the organization owning this application) 37 -h, --help Output usage information 38 `, 39 0 40 ); 41 } 42 43 const { generateCodeSigningAsync } = await import('./generateCodeSigningAsync.js'); 44 45 const keyOutput = requireArg(args, '--key-output-directory'); 46 const certificateOutput = requireArg(args, '--certificate-output-directory'); 47 const certificateValidityDurationYears = requireArg( 48 args, 49 '--certificate-validity-duration-years' 50 ); 51 const certificateCommonName = requireArg(args, '--certificate-common-name'); 52 53 return await generateCodeSigningAsync(getProjectRoot(args), { 54 certificateValidityDurationYears, 55 keyOutput, 56 certificateOutput, 57 certificateCommonName, 58 }); 59}; 60