42 lines
990 B
TypeScript
42 lines
990 B
TypeScript
import { z } from 'zod'
|
|
|
|
export interface SettingsCredentialCipher {
|
|
isAvailable(): boolean
|
|
encrypt(value: string): Buffer
|
|
decrypt(value: Buffer): string
|
|
}
|
|
|
|
export const encryptedSettingsCredentialSchema = z.object({
|
|
formatVersion: z.literal(1),
|
|
scheme: z.literal('electron-safe-storage'),
|
|
ciphertextBase64: z.string()
|
|
})
|
|
|
|
export type EncryptedSettingsCredential = z.infer<
|
|
typeof encryptedSettingsCredentialSchema
|
|
>
|
|
|
|
export function encryptSettingsCredential(
|
|
cipher: SettingsCredentialCipher,
|
|
payload: unknown
|
|
): EncryptedSettingsCredential {
|
|
return {
|
|
formatVersion: 1,
|
|
scheme: 'electron-safe-storage',
|
|
ciphertextBase64: cipher
|
|
.encrypt(JSON.stringify(payload))
|
|
.toString('base64')
|
|
}
|
|
}
|
|
|
|
export function decryptSettingsCredential(
|
|
cipher: SettingsCredentialCipher,
|
|
credential: EncryptedSettingsCredential
|
|
): unknown {
|
|
return JSON.parse(
|
|
cipher.decrypt(
|
|
Buffer.from(credential.ciphertextBase64, 'base64')
|
|
)
|
|
) as unknown
|
|
}
|