/ src / lib / server / credentials / credential-repository.ts
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 }