feat: phase 10 data portability#95
Merged
Merged
Conversation
Phase 10: Data Portability - Implementation decisions documented - Phase boundary established Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 10: Data Portability - Standard stack identified (no new deps for export, CDN noble-*/fflate for recovery tool) - Architecture patterns documented (API endpoint, settings UI, standalone HTML recovery) - eciesjs v0.4.16 binary format verified from installed source (16-byte nonce, specific HKDF params) - Pitfalls catalogued (ECIES format, HKDF salt/info, AES-GCM tag handling, IPNS gateway) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 10: Data Portability - 3 plans in 2 waves - Wave 1: API export + web UI (10-01), standalone recovery HTML (10-02) [parallel] - Wave 2: Technical documentation with test vectors (10-03) - Ready for execution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create VaultExportDto with format/version/exportedAt fields - Add getExportData to VaultService with User join - Add GET /vault/export endpoint to VaultController - Register User entity in VaultModule - Regenerate API client with export function Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Create VaultExport component with export button and dialog - Reuse ConfirmDialog for security warning before export - Download vault as cipherbox-vault-export.json via Blob URL - Add terminal-aesthetic CSS for export section - Integrate VaultExport into SettingsPage below LinkedMethods Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Self-contained recovery tool with embedded CSS and JavaScript - 4-step guided walkthrough: load export, provide key, configure gateway, recover - ECIES decrypt matching eciesjs@0.4.16 format (65-byte ephemeral PK, 16-byte nonce, 16-byte tag) - AES-256-GCM decrypt for folder metadata (12-byte IV, hex+base64 format) and files - IPNS resolution via public delegated routing with ipfs.io fallback - Recursive folder traversal with per-file error handling - Zip download preserving folder structure via fflate - CDN imports only: @noble/curves, @noble/hashes, fflate - Dark terminal aesthetic, responsive layout, no CipherBox server dependencies Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tasks completed: 1/1 - Standalone recovery HTML page with ECIES/AES-GCM crypto SUMMARY: .planning/phases/10-data-portability/10-02-SUMMARY.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Tasks completed: 2/2 - API export endpoint and DTO - Web app VaultExport component on Settings page SUMMARY: .planning/phases/10-data-portability/10-01-SUMMARY.md Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Important Review skippedDraft detected. Please check the settings in the CodeRabbit UI or the You can disable this status message by setting the Use the checkbox below for a quick retry:
✨ Finishing touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
- Complete specification covering export JSON schema, ECIES binary format, AES-256-GCM parameters, encrypted folder metadata format - Step-by-step recovery procedure with pseudocode - ECIES byte offsets: ephemeralPK(65) + nonce(16) + tag(16) + ciphertext(N) - Documents 16-byte AES-GCM nonce in ECIES (non-standard, eciesjs specific) - HKDF-SHA256 with undefined salt/info matching eciesjs@0.4.16 - IPNS resolution methods for infrastructure-independent recovery - Security considerations and compatibility notes Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…SM1/cipher-box into feat/phase-10-data-portability
Phase 10 verified: 7/7 must-haves pass. PORT-01, PORT-02, PORT-03 requirements complete. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The VaultService gained a User repository dependency in phase 10 but the spec was never updated, causing all 31 existing tests to fail during module compilation and vault.service.ts coverage to drop to 19%. Adds the User repository mock to the test module and 5 tests covering getExportData: social login, external wallet, missing user, missing vault, and timestamp format. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This was referenced Mar 21, 2026
Closed
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
POST /vault/export) andVaultExportcomponent on the Settings pagerecovery.html— a single-file, zero-dependency page that decrypts vault exports using only Web3Auth + Web Crypto.cipherboxvault export format with full technical specification and test vector generation scriptStorageQuotawherefetchQuotawas called before auth was readyChanges
10-01: Vault Export
vault.controller.ts/vault.service.ts— new export endpoint returning encrypted vault metadataVaultExport.tsx— UI component with download trigger on Settings page10-02: Standalone Vault Recovery
recovery.html— self-contained recovery tool (no build step, no external deps)10-03: Export Format Documentation
docs/VAULT_EXPORT_FORMAT.md— complete technical specificationscripts/generate-test-vectors.ts— generates test vectors for format validationBug fix
fetchQuotacall behind auth check to prevent race conditionTest plan
.cipherboxfile downloadsrecovery.htmlin a browser, import the export file, authenticate, verify files are listednpx tsx scripts/generate-test-vectors.tsto verify test vector generation🤖 Generated with Claude Code