feat: secure secret handling, per-tool docs, CSV exports (closes #145, #146, #147) - #165
Merged
dotunv merged 3 commits intoAug 31, 2026
Conversation
…tura#145, Savitura#146, Savitura#147) Savitura#145 — Zero wallet secret keys client-side after generation: - Add lib/secure-memory.ts (zeroBuffer, clearSecretString, randomBytes) with security rationale comments covering UTF-8/UTF-16 string data - Wallet Sandbox generates keypairs from a zeroable crypto.getRandomValues seed (Keypair.fromRawEd25519Seed) and wipes the seed buffer, clears prior secrets, and drops the secret reference on unmount - stellar-signer.ts wipes the keypair raw secret after signing Savitura#146 — Per-tool usage documentation for all 10 SaviTools: - Add /docs index and /docs/[tool] pages for all 10 tools, each covering overview, prerequisites, setup, usage steps, and troubleshooting - Link every tool UI page (inspector, sandbox, composer, simulator, webhooks, monitor, playground, contracts, sdk, network) to its docs page - Add docs index entry to README and document export endpoints in the API reference Savitura#147 — CSV export for inspector and ledger monitor results: - Add GET /inspector/tx/:hash/export returning the transaction breakdown as CSV with UTF-8 BOM and column headers matching the UI - Add GET /monitor/search (filters: watchId, eventType, q, from, to, pagination) and GET /monitor/search/export, which streams results in bounded chunks up to a 10,000-row limit with UTF-8 BOM - Add shared csv helpers with RFC 4180 escaping - Add Export CSV buttons to the Transaction Inspector and Ledger Monitor UI via a new downloadCsv() frontend helper - Add unit tests for CSV escaping, inspector export format, and monitor search/streaming/filtering/limits 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
Wire the new /monitor/search endpoint into the watch feed UI so users can filter events by hash, account, or asset. The Export CSV button now forwards the active search query, so exports match exactly what is on screen. 🤖 Generated with Codebuff Co-Authored-By: Codebuff <noreply@codebuff.com>
|
@vrse-vrde Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
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.
Solves #145, #146, and #147 in one PR.
🔐 security: Zero wallet secret keys client-side after generation — closes #145
apps/web/src/lib/secure-memory.ts:zeroBuffer,clearSecretString(handles UTF-8 and UTF-16 byte data), andrandomBytes, with comments documenting why zeroing reduces XSS / memory-inspection exposure.crypto.getRandomValuesseed (Keypair.fromRawEd25519Seed), wipes the seed buffer immediately after deriving the keypair, clears the previous secret before storing a new one, and drops the secret reference on unmount — no module-scoped secret storage.stellar-signer.tswipes the keypair's raw Ed25519 seed right after signing.📖 docs: Per-tool usage documentation for all 10 SaviTools — closes #146
/docsindex plus a static/docs/[tool]page for each of the 10 tools (Inspector, Sandbox, Composer, Simulator, Webhooks, Monitor, Playground, Contracts, SDK, Network).lib/tool-docs.tsfor a consistent tone.docsHrefonToolPageShell, plus links on the custom SDK/Network layouts). README docs table updated.📊 feat: CSV export for inspector and ledger monitor results — closes #147
GET /api/v1/inspector/tx/:hash/export— transaction breakdown as CSV with UTF-8 BOM and column headers matching the UI.GET /api/v1/monitor/search(new) — search watch events withwatchId,eventType,q,from,to, pagination.GET /api/v1/monitor/search/export— same filters, streamed in 1,000-row chunks up to a 10,000-row cap, UTF-8 BOM for Excel.apps/api/src/common/csv.ts).Verification
tsc --noEmitclean in bothapps/webandapps/api(only pre-existingcomposer.service.spec.tserrors remain, unrelated to this PR).next lintclean;next buildsucceeds (all/docs/[tool]pages pre-rendered).main— pre-existing, not introduced here.