123456789101112export interface ManualSummonRecord {13 firstSummonedAt: number;14 summonCount: number;15 lastSummonedAt: number;16}1718export interface Canary {19 webhookUrl: string;20 label?: string;21 lastPinged?: number;22 pingCount?: number;23}2425export type CardNetwork = "visa" | "mastercard" | "amex" | "discover" | "unknown";26272829303132333435363738export interface PasskeyData {39 rpId: string;40 rpName: string;41 credentialId: string;42 publicKeyCose: string;43 privateKeyJwk?: JsonWebKey;44 userHandle: string;45 userName: string;46 userDisplayName: string;47 algorithm: -7 | -8;48 signCount: number;49 aaguid: string;50 backupEligible: boolean;51 backupState: boolean;52 lastUsedAt?: number;53 browser?: "chrome" | "firefox";54 transports?: string[];55 56 createdAt: number;57}5859{@link VaultEntry.passwordHistory}60export interface PasswordHistoryItem {61 62 password: string;63 64656667 changedAt: number;68}6970export interface VaultEntry {71 id: string; 72 73 type?: "login" | "note" | "passkey" | "card";74 title: string;75 username?: string; 76 email?: string; 77 password?: string; 78 url?: string; 79 808182838485 additionalUrls?: string[];86 totp?: string; 87 88899091 totpAlgorithm?: "SHA1" | "SHA256" | "SHA512";92 totpDigits?: number;93 totpPeriod?: number;94 notes?: string;95 breach?: number; 96 979899100 passwordChangedAt?: number;101 102103104105106107108 passwordHistory?: PasswordHistoryItem[];109 canary?: Canary;110 createdAt: number; 111 modifiedAt: number;112 deletedAt?: number;113 tags?: string[];114 115 passkey?: PasskeyData;116 117 cardholderName?: string;118 cardNumber?: string; 119 expMonth?: string;120 expYear?: string;121 cvc?: string;122 cardNickname?: string;123 network?: CardNetwork;124 last4?: string;125}126127128export function hasPasskey(entry: VaultEntry): boolean {129 return entry.passkey !== undefined && entry.passkey.credentialId.length > 0;130}131132133export function isPasskeyOnly(entry: VaultEntry): boolean {134 135 136 137 138 139 return hasPasskey(entry) && !entry.password && !entry.totp && !entry.email;140}141142export interface PendingPasskeyRequest {143 requestId: number;144 type: "create" | "get";145 rpId: string;146 rpName: string;147 userName: string;148 userDisplayName?: string;149 150151152153154 browser?: "chrome" | "firefox";155 156 challenge?: string;157 158 userHandle?: string;159}160161export interface PasskeyProviderState {162 supported: boolean;163 enabled: boolean;164 attached: boolean;165 browserLabel: string;166 statusLabel: string;167 conflict?: string;168}169170export interface StoredVault {171 172 173 174 version: 1;175 salt: string; 176 nonce: string; 177 ciphertext: string; 178 tag: string; 179 180 recovery_salt?: string; 181 recovery_wrapped_root_key?: string; 182 recovery_nonce?: string; 183 recovery_tag?: string; 184 185 186 187 188 pw_root_ciphertext?: string; 189 pw_root_nonce?: string; 190 pw_root_tag?: string; 191}192193194195196export type MessageType =197 | "GET_SYNC_ALERTS"198 | "CLEAR_CLIPBOARD"199 | "GET_PENDING_VOUCHED_DEVICES"200 | "CONFIRM_VOUCHED_DEVICE"201 | "REJECT_VOUCHED_DEVICE"202 | "VOUCHED_DEVICE_PENDING"203 | "ROTATE_SYNC_IDENTITY"204 | "DEVICE_KEY_ROTATED"205 | "UNLOCK"206 | "UNLOCK_WITH_PIN"207 | "GET_PIN_STATUS"208 | "LOCK"209 | "IS_UNLOCKED"210 | "HAS_VAULT"211 | "GET_ENTRIES"212 | "ADD_ENTRY"213 | "BATCH_ADD_ENTRIES"214 | "RESTORE_ENTRIES"215 | "CLEAR_VAULT_ENTRIES"216 | "UPDATE_ENTRY"217 | "ADD_ADDITIONAL_URL"218 | "DELETE_ENTRY"219 | "AUTOFILL_QUERY"220 | "COPY"221 | "CREATE_VAULT"222 | "CREATE_VAULT_FROM_ROOT_KEY"223 | "GET_ENTRY_FOR_FILL"224 | "GET_ENTRY_FOR_EDIT"225 | "CHECK_ALL_BREACHES"226 | "GET_SETTINGS"227 | "UPDATE_SETTINGS"228 | "SETUP_PIN"229 | "DISABLE_PIN"230 | "FIRE_CANARY_PING"231 | "ACTIVATE_LICENSE"232 | "GET_LICENSE"233 | "GET_LICENSE_KEY"234 | "IS_DURESS_ENABLED"235 | "SETUP_DURESS"236 | "DISABLE_DURESS"237 | "VERIFY_MAIN_PASSWORD"238 | "CHANGE_PASSWORD"239 | "GET_SITE_PASSWORD_POLICY"240 | "GET_LOCAL_IDENTITY"241 | "LIST_PAIRED_DEVICES"242 | "RENAME_PAIRED_DEVICE"243 | "UNPAIR_DEVICE"244 | "RENAME_LOCAL_DEVICE"245 246 247 | "START_ADOPTION_SOURCE"248 | "START_ADOPTION_RECEIVER"249 | "CANCEL_ADOPTION_SOURCE"250 | "SOURCE_SAS_DECISION"251 | "ADOPTION_SOURCE_SAS"252 | "ADOPTION_SOURCE_RESULT"253 | "TRIGGER_SYNC"254 | "GET_SYNC_STATE"255 | "GET_SYNC_SETTINGS"256 | "SET_SYNC_SETTINGS"257 | "GET_PENDING_PASSKEY"258 | "APPROVE_PASSKEY"259 | "DENY_PASSKEY"260 | "GET_PASSKEY_PROVIDER_STATE"261 | "SET_PASSKEY_PROVIDER_ENABLED"262 | "GET_DELETED_ENTRIES"263 | "RESTORE_ENTRY"264 | "PURGE_ENTRY"265 | "PURGE_EXPIRED_TRASH"266 | "GET_VAULT_HISTORY"267 | "RESTORE_VAULT_SNAPSHOT"268 | "COUNT_DUPLICATES"269 | "DEDUPLICATE_ENTRIES"270 | "RECORD_MANUAL_SUMMON"271 | "DECLINE_CARD_SAVE"272 | "IS_CARD_DECLINED"273 | "GET_VAULT_STATUS"274 | "GET_ADVANCED_HEALTH_REPORT"275 | "DEACTIVATE_LICENSE"276 | "GET_IDENTITIES"277 | "DESTROY_VAULT"278 | "INITIATE_FIREFOX_PASSKEY_CREATE"279 | "COMPLETE_FIREFOX_PASSKEY_CREATE"280 | "PASSKEY_OFFER_DECLINE"281 | "GET_PASSKEY_OFFER_DECLINED"282 | "GET_PASSKEY_FOR_DOMAIN"283 284 285 286 | "PASSKEY_HAS_CREDENTIALS"287 | "PASSKEY_CREATE"288 | "PASSKEY_GET"289 290 | "VALIDATE_RECOVERY_WORDS"291 | "RECOVER_WITH_WORDS"292 | "GET_RECOVERY_WORDS"293 | "GET_RECOVERY_CONFIRM_PENDING"294 | "SET_RECOVERY_CONFIRM_PENDING"295 | "CLEAR_RECOVERY_CONFIRM_PENDING"296 | "GET_IDENTITY_SUGGESTIONS"297 | "TOUCH_AUTO_LOCK"298 | "SAVE_NOTE"299 | "DELETE_NOTE"300 | "GET_NOTES"301 | "SEARCH_VAULT"302 | "ML_INIT"303 | "ML_PREDICT_BATCH"304 305 306 307 308 | "PING" 309 | "SUMMON_AUTOFILL" 310 | "VAULT_LOCKED" 311 | "VAULT_UNLOCKED" 312 | "PRO_GATE_TRIGGERED" 313 | "PASSKEY_PRO_GATE" 314 | "OPEN_PRO_GATE" 315 | "OPEN_POPUP" 316 | "OPEN_DETACHED_POPUP" 317 | "SHOW_PASSKEY_TOAST" 318 | "DISMISS_PASSKEY_TOAST" 319 | "PASSKEY_AUTH_RESPONSE" 320 | "SHOULD_PLAY_CELEBRATION"321 | "MARK_CELEBRATION_PLAYED"322 323 324 | "GET_CODEX_VAULT_DATA"325 | "ESTIMATE_CODEX_PAGES"326 | "GENERATE_CODEX"327 | "RESTORE_FROM_CODEX";328329export type ProFeature =330 | "sync"331 | "passkeys"332 | "advanced_health"333 | "ios_app"334 | "codex"335 | "canary_entry"336 | "duress_vault";337338339340341342export interface PeachLicenseExport {343 key: string;344 activatedAt?: number;345}346347export interface AdvancedHealthEntryReport {348 id: string;349 title: string;350 domain: string;351 url?: string;352 score: number;353 ageDays: number;354 reasons: string[];355 factors: {356 breached: boolean;357 breachCount: number;358 reused: boolean;359 aged: boolean;360 weak: boolean;361 missingTotpOnSensitive: boolean;362 };363}364365export interface AdvancedHealthReport {366 vaultScore: number;367 generatedAt: number;368 entryCount: number;369 reusedGroups: number;370 agedCount: number;371 remediation: AdvancedHealthEntryReport[];372}373374export const ACCENT_COLORS = [375 { name: "peach", hex: "#F49C70" },376 { name: "rose", hex: "#FF8AA6" },377 { name: "plum", hex: "#D597F2" },378 { name: "lavender", hex: "#A6A8FF" },379 { name: "sky", hex: "#5BC8EE" },380 { name: "mint", hex: "#5EE0B0" },381 { name: "sage", hex: "#B5D870" },382 { name: "butter", hex: "#FFD45A" },383 { name: "sand", hex: "#EDBC85" },384 { name: "clay", hex: "#F08660" },385 { name: "slate", hex: "#80BEDE" },386 { name: "stone", hex: "#C8B8A8" },387] as const;388389export type AccentColorName = typeof ACCENT_COLORS[number]["name"];390391export interface SavedIdentity {392 value: string;393 type: "email" | "username";394 lastUsed: number;395 useCount: number;396 exampleDomain?: string;397}398399export interface PasswordPolicy {400 minLength?: number;401 maxLength?: number;402 requiresUppercase?: boolean;403 requiresLowercase?: boolean;404 requiresNumbers?: boolean;405 requiresSymbols?: boolean;406 forbidsSymbols?: boolean;407 allowedSymbols?: string;408 409 forbiddenChars?: string;410}411412413414415416417418419420421422423export interface VaultSnapshot {424 id: string;425 savedAt: number;426 reason: "local_save" | "sync_received" | "import" | "restore";427 vault_a: string;428 vault_b: string;429 430431432433434435 entryCount: number | null;436}437438export interface VaultHistory {439 440 snapshots: VaultSnapshot[];441}442443export interface Message {444 type: MessageType;445 payload?: unknown;446}447448export interface MessageResponse {449 ok: boolean;450 data?: unknown;451 error?: string;452 vaultId?: string;453 unlocked?: boolean;454 455 456 canRestoreFromHistory?: boolean;457 458 459 clearSeconds?: number;460}