🌳
pt0/serverF/secretsF/getPlainSecAI.mts
1import fs from 'fs'
2import { pathDownJoin } from '../pathF.mts'
6export type secretNameType = string & { readonly __brand: unique symbol }
8export class SecretNotExistErr extends PtErr {
9 constructor(secretPath: string) {
10 super('!secretNotExist', { secretPath })
11 }
14export type secretStrType = string & { readonly __brand: unique symbol }
16const plainSecretsH : Record<secretNameType, secretStrType> = {}
18const readSecretOrThrow = (secretPath: string) => {
19 try { return fs.readFileSync(secretPath, 'utf-8').trim() }
20 catch (err) { if ((err as NodeJS.ErrnoException).code === 'ENOENT') throw new SecretNotExistErr(secretPath); throw err }
23export const getPlainNoMappedSec = (secName : secretNameType) => {
24 const secretPath = pathDownJoin(secretsDir, secName)
25 return plainSecretsH[secName] ||= readSecretOrThrow(secretPath) as secretStrType
28export const getPlainSecOpt = (secName: secretNameType): secretStrType | undefined => {
29 try { return getPlainNoMappedSec(secName) }
30 catch (err) { if (err instanceof SecretNotExistErr) return undefined; throw err }