/** * Vault assets: API ↔ UI mapping and initial mock data. * Used by useVaultAssets and VaultScreen for /assets/get and /assets/create flows. */ import type { VaultAsset, VaultAssetType } from '../types'; // ----------------------------------------------------------------------------- // Types // ----------------------------------------------------------------------------- /** Shape returned by GET /assets/get (backend AssetOut) */ export interface ApiAsset { id: number; title: string; type?: string; author_id?: number; private_key_shard?: string; content_outer_encrypted?: string; created_at?: string; updated_at?: string; heir_id?: number; heir_email?: string; } // ----------------------------------------------------------------------------- // Constants // ----------------------------------------------------------------------------- export const VAULT_ASSET_TYPES: VaultAssetType[] = [ 'game_account', 'private_key', 'document', 'photo', 'will', 'custom', ]; export const initialVaultAssets: VaultAsset[] = []; // ----------------------------------------------------------------------------- // Mapping // ----------------------------------------------------------------------------- /** * Map backend API asset to VaultAsset for UI. */ export function mapApiAssetToVaultAsset(api: ApiAsset): VaultAsset { const type: VaultAssetType = api.type && VAULT_ASSET_TYPES.includes(api.type as VaultAssetType) ? (api.type as VaultAssetType) : 'custom'; return { id: String(api.id), type, label: api.title, createdAt: api.created_at ? new Date(api.created_at) : new Date(), updatedAt: api.updated_at ? new Date(api.updated_at) : new Date(), isEncrypted: true, heirEmail: api.heir_email, rawData: api, }; } /** * Map array of API assets to VaultAsset[]. */ export function mapApiAssetsToVaultAssets(apiList: ApiAsset[]): VaultAsset[] { return apiList.map(mapApiAssetToVaultAsset); }