🌳
pt0/deployF/secretF/genSecretAI.mts
7import fs from 'fs'
9const confirmGenSecret = ({secPath, autoYes}: {secPath: string, autoYes?: boolean}) => {
10 if (autoYes) return true
11 return 'y' === promptSync(`${secPath} does not exist. generate w/ random value y/n?`)
14export const genPlainSecretIfMissing = async ({secretName, genValue, autoYes=false}: {secretName: string, genValue?: () => string, autoYes?: boolean}) => {
15 const secPath = pathDownJoin(secretsDir, secretName)
16 if (fs.existsSync(secPath)) {
17 return await fs1Promises.readFile(secPath, 'utf8')
18 }
20 if (!confirmGenSecret({secPath, autoYes})) return
22 const genVal = genValue?.() ?? randomUrlSafeBytes(32)
23 betLog('genPlainSecretIfMissing', secPath)
24 await fs1Promises.writeFile(secPath, genVal)
25 return genVal
28export const genJsonSecretIfMissing = async ({secretName, genValue, autoYes}: {secretName: string, genValue: () => unknown, autoYes?: boolean}) => {
29 const secPath = pathDownJoin(secretsDir, secretName)
30 if (fs.existsSync(secPath)) return
32 if (!confirmGenSecret({secPath, autoYes})) return
34 const genVal = genValue()
35 betLog('genJsonSecretIfMissing', secPath, genVal)
36 await fs1Promises.writeFile(secPath, JSON.stringify(genVal))