# @suaveplan/password-formats - Universal import/export layer for common password-manager export formats — Apple Passwords CSV, Bitwarden JSON, Chrome CSV, KeePass XML ## Summary Universal import/export layer for common password-manager export formats. Parses Apple Passwords CSV, Bitwarden JSON, Chrome CSV, and KeePass XML into a normalized `PasswordEntry[]` array, and exports back to a universal CSV format. ## Documentation tree - [detector](./src/core/detector/format-detector.md) — _(no submodules)_ - [format-detector](./src/core/detector/format-detector.md) — _(no submodules)_ - [parse](./src/core/parse/parse.md) — _(no submodules)_ - [parse](./src/core/parse/parse.md) — _(no submodules)_ - [validator](./src/core/validator/validate.md) — _(no submodules)_ - [validate](./src/core/validator/validate.md) — _(no submodules)_ - [errors](./src/errors/password-formats-error.md) — _(no submodules)_ - [password-formats-error](./src/errors/password-formats-error.md) — _(no submodules)_ - [export](./src/export/csv-export.md) — _(no submodules)_ - [csv-export](./src/export/csv-export.md) — _(no submodules)_ - [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_ - [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_ - [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_ - [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_ - [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_ - [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_ - [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_ - [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_ - [format-detector](./src/core/detector/format-detector.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [validator](./src/core/validator/validate.md) — _(no submodules)_- [validate](./src/core/validator/validate.md) — _(no submodules)_- [errors](./src/errors/password-formats-error.md) — _(no submodules)_- [password-formats-error](./src/errors/password-formats-error.md) — _(no submodules)_- [export](./src/export/csv-export.md) — _(no submodules)_- [csv-export](./src/export/csv-export.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [format-detector](./src/core/detector/format-detector.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [validator](./src/core/validator/validate.md) — _(no submodules)_- [validate](./src/core/validator/validate.md) — _(no submodules)_- [errors](./src/errors/password-formats-error.md) — _(no submodules)_- [password-formats-error](./src/errors/password-formats-error.md) — _(no submodules)_- [export](./src/export/csv-export.md) — _(no submodules)_- [csv-export](./src/export/csv-export.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [format-detector](./src/core/detector/format-detector.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_- [validator](./src/core/validator/validate.md) — _(no submodules)_- [validate](./src/core/validator/validate.md) — _(no submodules)_- [errors](./src/errors/password-formats-error.md) — _(no submodules)_- [password-formats-error](./src/errors/password-formats-error.md) — _(no submodules)_- [export](./src/export/csv-export.md) — _(no submodules)_- [csv-export](./src/export/csv-export.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_- [format-detector](./src/core/detector/format-detector.md) — _(no submodules)_- [parse](./src/core/parse/parse.md) — _(no submodules)_ - [parse](./src/core/parse/parse.md) — _(no submodules)_- [validator](./src/core/validator/validate.md) — _(no submodules)_ - [validate](./src/core/validator/validate.md) — _(no submodules)_- [errors](./src/errors/password-formats-error.md) — _(no submodules)_ - [password-formats-error](./src/errors/password-formats-error.md) — _(no submodules)_- [export](./src/export/csv-export.md) — _(no submodules)_ - [csv-export](./src/export/csv-export.md) — _(no submodules)_- [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_ - [apple-passwords](./src/parsers/apple-passwords/apple-passwords.md) — _(no submodules)_- [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_ - [bitwarden](./src/parsers/bitwarden/bitwarden.md) — _(no submodules)_- [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_ - [chrome](./src/parsers/chrome/chrome.md) — _(no submodules)_- [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_ - [keepass](./src/parsers/keepass/keepass.md) — _(no submodules)_ ## Supported Formats | Format | Type | Detection | |--------|------|-----------| | Apple Passwords | CSV | `OTPAuth` + `Title` header columns | | Bitwarden | JSON | `items` / `encrypted` keys | | Chrome | CSV | `name,url,username,password` header | | KeePass | XML | ` ``` Auto-detects the format if not specified. Emits OTel metrics. ### `detect(input, filename?)` ```ts function detect(input: string | Uint8Array, filename?: string): PasswordFormat ``` Returns `"apple" | "bitwarden" | "chrome" | "keepass" | "unknown"`. ### `validate(entries)` ```ts function validate(entries: PasswordEntry[]): ValidationResult ``` Checks that every entry has a non-empty `title` and `password`. ### `exportToCsv(entries)` ```ts function exportToCsv(entries: PasswordEntry[]): string ``` Exports to a 7-column CSV: `title, url, username, password, notes, folder, tags`. ## Error Codes | Code | Meaning | |------|---------| | `PASSWORD_FORMATS.UNSUPPORTED_FORMAT` | Format could not be detected or is unsupported | | `PASSWORD_FORMATS.PARSE_ERROR` | Malformed content | | `PASSWORD_FORMATS.INVALID_INPUT` | Empty input | | `PASSWORD_FORMATS.ENCRYPTED_NOT_SUPPORTED` | Bitwarden encrypted vault | ## Dependencies No `@suaveplan/*` runtime dependencies. External deps: `papaparse`, `fast-xml-parser`, `fflate`, `zod`, `@opentelemetry/api`, `tslib`.