Files
suaveplan/openspec/archive/2026-04-19-enterprise-password-formats/proposal.md
2026-05-27 23:29:53 +01:00

39 lines
2.0 KiB
Markdown

# OpenSpec Change: enterprise-password-formats
- **Change ID**: enterprise-password-formats
- **Package**: `@suaveplan/password-formats`
- **Category**: universal
- **Target path**: `universal/auth/password-formats`
- **Status**: PROPOSED
- **Date**: 2026-04-19
- **Reference spec**: `/mnt/s/web/suaveplan/enterprise/password-formats.md`
## Summary
Universal import/export layer for common password-manager export formats — Apple Passwords CSV, Bitwarden JSON, Chrome CSV, KeePass XML, LastPass CSV, 1Password `.1pux` archive and CSV. Produces a normalised `PasswordEntry[]` plus reverse CSV export.
## Current-state audit (genesis)
Package does not exist yet — fresh build.
## Dependencies
- Workspace: none (leaf)
- External (via catalog): `zod`, `papaparse`, `fast-xml-parser`, `fflate` → appropriate catalogs; `tslib`; `@opentelemetry/api`
- Dev (via catalog): `vitest`, `@vitest/coverage-istanbul`, `fast-check`, `mitata`
## Preserved public surface
- `detect(input): PasswordFormat` — sniff format from filename/content
- `parse(input, format?): Promise<PasswordEntry[]>` — unified parse entry point
- `validate(entries): ValidationResult` — structural validation
- `exportToCsv(entries): string`
- Format-specific parsers: `parseApplePasswordsCsv`, `parseBitwardenJson`, `parseChromeCsv`, `parseKeePassXml`, `parseLastPassCsv`, `parseOnePassword1Pux`, `parseOnePasswordCsv`
- Types: `PasswordEntry`, `PasswordFormat`, `ValidationResult`, `ParseOptions`
## New genesis additions
- Codes: `PASSWORD_FORMATS.UNKNOWN_FORMAT`, `PASSWORD_FORMATS.PARSE_ERROR`, `PASSWORD_FORMATS.VALIDATION_FAILED`, `PASSWORD_FORMATS.ENCRYPTED_INPUT`.
- Zod schema for `PasswordEntry` (+ per-format raw-row schemas).
- OTel histogram `password_formats.parse.duration_ms{format}`; counter `password_formats.entries.total{format}`.
- Property tests: CSV round-trip (`parse(exportToCsv(entries))` ≈ `entries` after normalisation).
## Impact
- Adds one new package: `universal/auth/password-formats`
- Adds one new spec capability: `password-formats`