credential-repository.ts
1 import type { Credential } from '@/types' 2 3 import { 4 decryptKey, 5 deleteCredential as deleteStoredCredential, 6 encryptKey, 7 loadCredentials as loadStoredCredentials, 8 saveCredentials as saveStoredCredentials, 9 upsertStoredItem, 10 } from '@/lib/server/storage' 11 import { createRecordRepository } from '@/lib/server/persistence/repository-utils' 12 13 export type StoredCredential = Credential & { 14 encryptedKey?: string | null 15 updatedAt?: number 16 [key: string]: unknown 17 } 18 19 export const credentialRepository = createRecordRepository<StoredCredential>( 20 'credentials', 21 { 22 get(id) { 23 return (loadStoredCredentials() as Record<string, StoredCredential>)[id] || null 24 }, 25 list() { 26 return loadStoredCredentials() as Record<string, StoredCredential> 27 }, 28 upsert(id, value) { 29 upsertStoredItem('credentials', id, value) 30 }, 31 replace(data) { 32 saveStoredCredentials(data) 33 }, 34 delete(id) { 35 deleteStoredCredential(id) 36 }, 37 }, 38 ) 39 40 export const loadCredentials = () => credentialRepository.list() 41 export const loadCredential = (id: string) => credentialRepository.get(id) 42 export const saveCredentials = (items: Record<string, StoredCredential | Record<string, unknown>>) => credentialRepository.replace(items as Record<string, StoredCredential>) 43 export const saveCredential = (id: string, value: StoredCredential | Record<string, unknown>) => credentialRepository.upsert(id, value as StoredCredential) 44 export const deleteCredential = (id: string) => credentialRepository.delete(id) 45 46 export { decryptKey, encryptKey }