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 150 tabId?: number;151 origin?: string;152 153154155156157 browser?: "chrome" | "firefox";158 159 challenge?: string;160 161 userHandle?: string;162}163164export interface PasskeyProviderState {165 supported: boolean;166 enabled: boolean;167 attached: boolean;168 browserLabel: string;169 statusLabel: string;170 conflict?: string;171}172173export interface StoredVault {174 175 176 177 version: 1;178 salt: string; 179 nonce: string; 180 ciphertext: string; 181 tag: string; 182 183 recovery_salt?: string; 184 recovery_wrapped_root_key?: string; 185 recovery_nonce?: string; 186 recovery_tag?: string; 187 188 189 190 191 pw_root_ciphertext?: string; 192 pw_root_nonce?: string; 193 pw_root_tag?: string; 194}195196197198199export type MessageType =200 | "CLEAR_CLIPBOARD"201 | "GET_SYNC_ALERTS"202 | "DISMISS_SYNC_ALERTS"203 | "GET_PENDING_VOUCHED_DEVICES"204 | "CONFIRM_VOUCHED_DEVICE"205 | "REJECT_VOUCHED_DEVICE"206 | "VOUCHED_DEVICE_PENDING"207 | "ROTATE_SYNC_IDENTITY"208 | "DEVICE_KEY_ROTATED"209 | "UNLOCK"210 | "UNLOCK_WITH_PIN"211 | "GET_PIN_STATUS"212 | "LOCK"213 | "IS_UNLOCKED"214 | "HAS_VAULT"215 | "GET_ENTRIES"216 | "EXPORT_ENTRIES"217 | "ADD_ENTRY"218 | "BATCH_ADD_ENTRIES"219 | "RESTORE_ENTRIES"220 | "CLEAR_VAULT_ENTRIES"221 | "UPDATE_ENTRY"222 | "ADD_ADDITIONAL_URL"223 | "REQUEST_REMEMBER_SITE"224 | "DELETE_ENTRY"225 | "AUTOFILL_QUERY"226 | "COPY"227 | "CREATE_VAULT"228 | "CREATE_VAULT_FROM_ROOT_KEY"229 | "GET_ENTRY_FOR_FILL"230 | "GET_ENTRY_FOR_EDIT"231 | "CHECK_ALL_BREACHES"232 | "GET_SETTINGS"233 | "UPDATE_SETTINGS"234 | "SETUP_PIN"235 | "DISABLE_PIN"236 | "FIRE_CANARY_PING"237 | "ACTIVATE_LICENSE"238 | "GET_LICENSE"239 | "GET_LICENSE_KEY"240 | "IS_DURESS_ENABLED"241 | "SETUP_DURESS"242 | "DISABLE_DURESS"243 | "VERIFY_MAIN_PASSWORD"244 | "CHANGE_PASSWORD"245 | "GET_SITE_PASSWORD_POLICY"246 | "GET_LOCAL_IDENTITY"247 | "LIST_PAIRED_DEVICES"248 | "RENAME_PAIRED_DEVICE"249 | "UNPAIR_DEVICE"250 | "RENAME_LOCAL_DEVICE"251 252 253 | "START_ADOPTION_SOURCE"254 | "START_ADOPTION_RECEIVER"255 | "LIST_PENDING_ADOPTION_HOLDERS"256 | "REMOVE_PENDING_ADOPTION_HOLDER"257 | "CANCEL_ADOPTION_SOURCE"258 | "SOURCE_SAS_DECISION"259 | "RECEIVER_SAS_DECISION"260 | "ADOPTION_SOURCE_SAS"261 | "ADOPTION_SOURCE_RESULT"262 | "TRIGGER_SYNC"263 | "GET_SYNC_STATE"264 | "GET_SYNC_GENERATION"265 | "SECURE_RESET"266 | "GET_SYNC_SETTINGS"267 | "SET_SYNC_SETTINGS"268 | "GET_PENDING_PASSKEY"269 | "APPROVE_PASSKEY"270 | "DENY_PASSKEY"271 | "GET_PASSKEY_PROVIDER_STATE"272 | "SET_PASSKEY_PROVIDER_ENABLED"273 | "GET_DELETED_ENTRIES"274 | "RESTORE_ENTRY"275 | "PURGE_ENTRY"276 | "PURGE_EXPIRED_TRASH"277 | "GET_VAULT_HISTORY"278 | "RESTORE_VAULT_SNAPSHOT"279 | "COUNT_DUPLICATES"280 | "DEDUPLICATE_ENTRIES"281 | "RECORD_MANUAL_SUMMON"282 | "DECLINE_CARD_SAVE"283 | "IS_CARD_DECLINED"284 | "GET_VAULT_STATUS"285 | "GET_ADVANCED_HEALTH_REPORT"286 | "DEACTIVATE_LICENSE"287 | "GET_IDENTITIES"288 | "DESTROY_VAULT"289 | "INITIATE_FIREFOX_PASSKEY_CREATE"290 | "COMPLETE_FIREFOX_PASSKEY_CREATE"291 | "PASSKEY_OFFER_DECLINE"292 | "GET_PASSKEY_OFFER_DECLINED"293 | "GET_PASSKEY_FOR_DOMAIN"294 | "MARK_PASSKEY_BANNER_SHOWN"295 296 297 298 | "PASSKEY_HAS_CREDENTIALS"299 | "PASSKEY_CREATE"300 | "PASSKEY_GET"301 302 | "VALIDATE_RECOVERY_WORDS"303 | "RECOVER_WITH_WORDS"304 | "GET_RECOVERY_WORDS"305 | "GET_RECOVERY_CONFIRM_PENDING"306 | "SET_RECOVERY_CONFIRM_PENDING"307 | "CLEAR_RECOVERY_CONFIRM_PENDING"308 | "GET_IDENTITY_SUGGESTIONS"309 | "TOUCH_AUTO_LOCK"310 | "SAVE_NOTE"311 | "DELETE_NOTE"312 | "GET_NOTES"313 | "SEARCH_VAULT"314 | "ML_INIT"315 | "ML_PREDICT_BATCH"316 317 318 319 320 | "PING" 321 | "SUMMON_AUTOFILL" 322 | "VAULT_LOCKED" 323 | "VAULT_UNLOCKED" 324 | "VAULT_ENTRIES_CHANGED" 325 | "PRO_GATE_TRIGGERED" 326 | "PASSKEY_PRO_GATE" 327 | "OPEN_PRO_GATE" 328 | "OPEN_POPUP" 329 | "REQUEST_REMEMBER_SITE" 330 | "OPEN_DETACHED_POPUP" 331 | "SHOW_PASSKEY_TOAST" 332 | "DISMISS_PASSKEY_TOAST" 333 | "PASSKEY_AUTH_RESPONSE" 334 | "SHOULD_PLAY_CELEBRATION"335 | "MARK_CELEBRATION_PLAYED"336 337 338 | "GET_CODEX_VAULT_DATA"339 | "ESTIMATE_CODEX_PAGES"340 | "GENERATE_CODEX"341 | "RESTORE_FROM_CODEX";342343export type ProFeature =344 | "sync"345 | "passkeys"346 | "advanced_health"347 | "ios_app"348 | "codex"349 | "canary_entry"350 | "duress_vault";351352353354355356export interface PeachLicenseExport {357 key: string;358 activatedAt?: number;359}360361export interface AdvancedHealthEntryReport {362 id: string;363 title: string;364 domain: string;365 url?: string;366 score: number;367 ageDays: number;368 reasons: string[];369 factors: {370 breached: boolean;371 breachCount: number;372 reused: boolean;373 aged: boolean;374 weak: boolean;375 missingTotpOnSensitive: boolean;376 };377}378379export interface AdvancedHealthReport {380 vaultScore: number;381 generatedAt: number;382 entryCount: number;383 reusedGroups: number;384 agedCount: number;385 remediation: AdvancedHealthEntryReport[];386}387388export const ACCENT_COLORS = [389 { name: "peach", hex: "#F49C70" },390 { name: "rose", hex: "#FF8AA6" },391 { name: "plum", hex: "#D597F2" },392 { name: "lavender", hex: "#A6A8FF" },393 { name: "sky", hex: "#5BC8EE" },394 { name: "mint", hex: "#5EE0B0" },395 { name: "sage", hex: "#B5D870" },396 { name: "butter", hex: "#FFD45A" },397 { name: "sand", hex: "#EDBC85" },398 { name: "clay", hex: "#F08660" },399 { name: "slate", hex: "#80BEDE" },400 { name: "stone", hex: "#C8B8A8" },401] as const;402403export type AccentColorName = typeof ACCENT_COLORS[number]["name"];404405export interface SavedIdentity {406 value: string;407 type: "email" | "username";408 lastUsed: number;409 useCount: number;410 exampleDomain?: string;411}412413export interface PasswordPolicy {414 minLength?: number;415 maxLength?: number;416 requiresUppercase?: boolean;417 requiresLowercase?: boolean;418 requiresNumbers?: boolean;419 requiresSymbols?: boolean;420 forbidsSymbols?: boolean;421 allowedSymbols?: string;422 423 forbiddenChars?: string;424}425426427428429430431432433434435436437export interface VaultSnapshot {438 id: string;439 savedAt: number;440 reason: "local_save" | "sync_received" | "import" | "restore";441 vault_a: string;442 vault_b: string;443 444445446447448449 entryCount: number | null;450}451452export interface VaultHistory {453 454 snapshots: VaultSnapshot[];455}456457export interface Message {458 type: MessageType;459 payload?: unknown;460}461462export interface MessageResponse {463 ok: boolean;464 data?: unknown;465 error?: string;466 vaultId?: string;467 unlocked?: boolean;468 469 470 canRestoreFromHistory?: boolean;471 472 473 clearSeconds?: number;474}