Repository navigation
Fix Bitwave CSV export issues - #6131
Merged
Merged
Conversation
Contributor
Author
j0ntz
marked this pull request as ready for review
August 3, 2026 20:49
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
peachbits
requested changes
Aug 6, 2026
peachbits
left a comment
Contributor
There was a problem hiding this comment.
Looks good. We currently test the csv and qbo output files let's add a bitwave file test as well
Contributor
Author
|
Added |
peachbits
approved these changes
Aug 6, 2026
Add explicit return types, replace truthy checks on nullable denominations with explicit null checks, and type catch callback variables as unknown.
j0ntz
force-pushed
the
jon/bitwave-csv-export-fixes
branch
from
August 6, 2026 20:18
148388c to
2baeeb1
Compare
j0ntz
enabled auto-merge
August 6, 2026 20:19
auto-merge was automatically disabled
August 6, 2026 20:37
Pull request was closed
j0ntz
enabled auto-merge
August 6, 2026 20:43
Bitwave changed its import requirements, so the export no longer matched what the importer accepts: - Timestamps use ISO 8601 UTC (YYYY-MM-DDTHH:MM:SSZ) instead of MM/DD/YY HH:MM. - The fee and fee ticker columns stay blank, since Bitwave now calculates fees itself and populated columns duplicate them after import. - The custom metadata 2 column mirrors the description column. - The account id keeps the case and spacing it was entered with. The input modal inherited the platform default of capitalizing the first character, which silently corrupted ids beginning with a lowercase letter and forced a manual fix on every import. Dropping the fee columns leaves the wallet and parent multiplier arguments unused, so they are removed along with the scene prop that supplied them.
j0ntz
force-pushed
the
jon/bitwave-csv-export-fixes
branch
from
August 6, 2026 20:45
2baeeb1 to
4e88627
Compare
j0ntz
disabled auto-merge
August 6, 2026 21:14
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.




Description
Asana task
Fixes the four Bitwave CSV export issues tracked on CSV - Bitwave Export issues. Bitwave changed its import requirements, so the export no longer matched what its importer accepts, and one input defect corrupted the account id.
Timestamps use ISO 8601 UTC (subtask).
makeBitwaveDateTimeemittedMM/DD/YY HH:MM; it now emitsYYYY-MM-DDTHH:MM:SSZ(4-digit year,Tseparator, seconds, trailingZ).Fee columns stay blank (subtask). Column G (
fee) and column H (feeTicker) now export as empty strings for every transaction. Bitwave calculates fees itself, so populated columns duplicated them after import. Dropping them leaves thewalletandparentMultiplierarguments unused, so those are removed along with the scene prop that suppliedparentMultiplier.Custom metadata 2 mirrors the description (subtask). Column W (
metadata:myCustomMetadata2) was the transaction notes; it now carries the same value as column R (description). The notes are still exported in column K (memo), so nothing is lost.Account id keeps the case and spacing it was entered with (subtask). Root cause: the account-id
TextInputModalnever passedautoCapitalize,TextInputModalforwards thatundefinedtoModalFilledTextInput, andFilledTextInputonly defaults it to'none'for secure inputs. So React Native's iOS default ofsentencesapplied and capitalized the first character, turningpgM8cDt7bySnWTzs2MyIintoPgM8cDt7bySnWTzs2MyI. The value was then persisted to disklet and reused as the modal's initial value, which is why the correction had to be reapplied at every import rather than sticking. The modal now passesautoCapitalize="none", and the entered value is trimmed since a pasted id often carries surrounding whitespace.Column letters map to the row object's key order, which
csv-stringifyuses for the header: Aid… Gfee, HfeeTicker, Itime, MaccountId, Rdescription, Wmetadata:myCustomMetadata2.Tests:
src/__tests__/exportBitwaveResult.csvis a reference output file compared against the whole export, matching the existing CSV and QBO reference-file tests. Four further tests assert the individual behaviors above, each checking the header name at the column index it uses first, so a reordered row object fails loudly instead of silently invalidating the assertions.CHANGELOG
Does this branch warrant an entry to the CHANGELOG?
Dependencies
none
Requirements
If you have made any visual changes to the GUI. Make sure you have:
Driven end to end on the iOS simulator against the
edge-fundsMy Zano wallet: Export Transactions → Bitwave CSV → account id → share sheet. The exported file was pulled off the device and parsed; across all 7 real transactions columns G and H are empty, every timestamp matches^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$, column W equals column R, and column M is exactlypgM8cDt7bySnWTzs2MyI.tsc, eslint (0 errors) and the full jest suite (95 suites, 576 tests) pass.Note
Low Risk
Scoped to transaction export formatting and Bitwave account-id input; no auth, payments, or core wallet logic changes.
Overview
Updates Bitwave CSV export so imports match Bitwave’s current rules:
timeis ISO 8601 UTC (YYYY-MM-DDTHH:MM:SSZ) instead ofMM/DD/YY HH:MM,feeandfeeTickerare always empty so Bitwave doesn’t double-count fees, andmetadata:myCustomMetadata2duplicatesdescription(transaction name) instead of notes (notes remain inmemo).exportTransactionsToBitwaveno longer takes the wallet or parent fee multiplier—onlyaccountId, transactions, currency, and exchange multiplier. The export scene collects the Bitwave account id withautoCapitalize="none"and trims pasted values so ids aren’t corrupted on iOS or by whitespace.Adds a reference CSV fixture plus focused tests (timestamps, blank fees, metadata, account id). Small TypeScript tweaks in CSV/QBO export paths and the export scene; those files are dropped from an eslint override list.
Reviewed by Cursor Bugbot for commit 4e88627. Bugbot is set up for automated code reviews on this repo. Configure here.