feat: add Stellar, mobile, and UI Kit bounty fixes#708
Conversation
|
Caution Review failedFailed to post review comments 📝 WalkthroughWalkthroughThis PR integrates multiple feature enhancements across the monorepo: a new Field form-wrapper component with accessibility testing infrastructure; improved Stellar SDK error handling for RPC failures and transaction XDR submission; mobile wallet payment URI parsing and futurenet network support; UI-kit polish with toast variants and component accessibility tests; and relayer infrastructure improvements including typed request logging, unified redaction markers, and futurenet network recognition. Supporting changes include web dashboard hook improvements, extension wallet configuration adjustments, contract documentation updates, and build script refinements. ChangesForm Component Infrastructure and Accessibility
Stellar SDK Error Handling and Transaction Submission
Mobile Wallet Deep Linking and Network Configuration
UI-Kit and Component Refinements
Extension Wallet and Web Dashboard Infrastructure
Relayer Service Infrastructure and Stellar Network Support
Supporting Documentation and Utility Updates
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
✨ Finishing Touches🧪 Generate unit tests (beta)
⚔️ Resolve merge conflicts
|
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Nitpick comments (4)
packages/stellar/src/__tests__/client.test.ts (1)
460-474: LGTM!Consider adding a case where
TransactionBuilder.fromXDRthrows (malformed XDR) to lock in the corrected behavior from the client-side decode fix.Want me to draft that test once the decode-hoisting change lands?
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/stellar/src/__tests__/client.test.ts` around lines 460 - 474, Add a new test case to StellarClient's submitTransaction spec that simulates TransactionBuilder.fromXDR throwing for malformed XDR and asserts that client.submitTransaction rejects with that error; specifically, reuse the existing test setup (StellarClient instantiation, getHorizonMock(client)) but make mockTransactionFromXDR.mockImplementationOnce(() => { throw new Error('malformed XDR') }) and then await expect(client.submitTransaction('bad-xdr' as unknown as Transaction)).rejects.toThrow('malformed XDR'), and also assert that horizon.submitTransaction is not called—this verifies the client correctly surfaces decode errors before attempting submission.apps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.ts (1)
22-22: 💤 Low valueVestigial
retryCountstate after backoff removal.With retry/backoff logic gone,
retryCountis always0(initialized at line 55, reset to0on error) and never incremented. It's still spread into the returned object via...state, so consumers may read a perpetually-zero field. Consider dropping it fromStateand the error handler to avoid confusion.Also applies to: 114-114
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.ts` at line 22, Remove the vestigial retryCount property and all references to it in usePaginatedTransactionHistory: delete retryCount from the State type, from the initial state object, and from any error handler resets that set retryCount = 0; also remove it from any places that read or spread state (e.g., the returned "...state" payload) so consumers no longer see a perpetually-zero field and state shape stays consistent.apps/mobile-wallet/src/linking/__tests__/paymentUri.test.ts (1)
19-24: 💤 Low valueConsider asserting the
amount=1case explicitly. The combined test labels this an "invalid amount" check, butstellar:pay?amount=1returnsnullbecause the destination is missing, not because of the amount. A dedicated vector with a valid destination plus an invalid amount (e.g.amount=1.123456789oramount=-1) would better cover theisValidAmountbranch.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/mobile-wallet/src/linking/__tests__/paymentUri.test.ts` around lines 19 - 24, The test currently conflates a missing-destination case with invalid-amount behavior; update the test for parsePaymentUri to (1) keep an explicit assertion that 'stellar:pay?amount=1' returns null due to missing destination, and (2) add a separate assertion that a URI with a valid destination and an invalid amount (e.g. `stellar:pay?destination=${DESTINATION}&amount=1.123456789` or `amount=-1`) returns null so the isValidAmount branch is exercised; locate and modify the test in paymentUri.test.ts where parsePaymentUri is used to add the distinct invalid-amount vector.apps/extension-wallet/src/hooks/__tests__/useSendTransaction.schedule.test.ts (1)
16-18: ⚡ Quick winConsider adding a comment explaining the timezone offset logic.
The offset adjustment correctly compensates for
toISOString()'s UTC conversion to produce a local-time string for the datetime-local input. However, the logic is not immediately obvious.📝 Optional clarifying comment
+ // Adjust for timezone to get local time string from toISOString() + // datetime-local expects YYYY-MM-DDTHH:mm in local time without TZ suffix const future = new Date(Date.now() + 2 * 60 * 60 * 1000); const offsetMs = future.getTimezoneOffset() * 60 * 1000; const startAt = new Date(future.getTime() - offsetMs).toISOString().slice(0, 16);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@apps/extension-wallet/src/hooks/__tests__/useSendTransaction.schedule.test.ts` around lines 16 - 18, Add a clarifying inline comment above the timezone adjustment in the test that explains why we compute offsetMs and subtract it from future before calling toISOString() — e.g., state that toISOString() returns UTC and this subtraction converts the Date to the local timezone so slicing to 16 chars yields a value suitable for a datetime-local input; place the comment near the variables future, offsetMs and startAt to make intent obvious to future readers.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@apps/mobile-wallet/src/components/TransactionHistoryList.tsx`:
- Line 37: The UI strings and separator in TransactionHistoryList are rendering
a literal '?' instead of the intended ellipsis or middle-dot; update the JSX in
the TransactionHistoryList component so all loading labels use an ellipsis
character (…) (e.g., "Loading transactions…" / "Refreshing…" / "Loading more…")
and replace the asset↔timestamp separator '?' with a middle-dot (·) in the
transaction row rendering code (the JSX that composes amount/asset and
timestamp). Ensure you change the occurrences referenced (the return that
renders "Loading transactions?", plus the similar strings and the separator used
when mapping transaction rows).
In `@apps/mobile-wallet/src/linking/paymentUri.ts`:
- Line 7: The DESTINATION_RE currently allows invalid base32 characters because
it uses [A-Z0-9]; update the regex used by DESTINATION_RE to restrict the
character class to RFC4648 base32 characters (A-Z2-7) and keep the length
requirement (55 chars) and leading 'G' the same so only valid Stellar public
keys match; modify the constant DESTINATION_RE accordingly.
In `@apps/mobile-wallet/src/navigation/__tests__/onboarding.test.tsx`:
- Line 1: Replace the Jest-oriented import in the test setup so Vitest registers
DOM matchers: in the onboarding.test.tsx file, change the top-level import of
"`@testing-library/jest-dom`" to the Vitest entrypoint
"`@testing-library/jest-dom/vitest`" so the Vitest runner picks up and registers
the jest-dom matchers for tests like those in this file.
In `@packages/stellar/src/client.ts`:
- Around line 447-487: Hoist XDR decoding out of the withRetry callback by
calling resolveSignedTransaction(transaction) before entering withRetry to
ensure decoding errors are not retried, and provide a custom isRetryable
predicate on retryOptions (or pass augmented options into withRetry) that
returns false for TransactionError instances representing permanent failure
codes and for decoding/validation errors (so TransactionError and XDR-decoding
errors are not retried); update submitTransaction to use the decoded Transaction
and augmented retryOptions when calling withRetry, keeping existing handling of
RetryExhaustedError / error.lastError logic intact.
In `@packages/ui-kit/src/components/Form/Field.tsx`:
- Around line 39-43: The controlProps object in Field.tsx currently sets id,
aria-describedby and aria-invalid but omits the required state for assistive
tech; update controlProps (the variable defined with id: inputId,
'aria-describedby': describedBy, 'aria-invalid': ...) to also include
'aria-required': required ? true : childProps?.['aria-required'] and when the
incoming childProps represent a native control, forward the boolean required
prop as well (merge required into childProps for native inputs) so screen
readers receive both aria-required and the native required attribute.
In `@packages/ui-kit/src/components/TransactionItem.tsx`:
- Line 70: In TransactionItem, the address display uses a stray "?" between
addresses; update the JSX that renders formatAddress(transaction.from) ?
formatAddress(transaction.to) to use a proper separator (e.g., a hyphen, arrow,
or "→") or conditional logic to only show a separator when both transaction.from
and transaction.to exist—modify the expression in the component rendering (where
formatAddress is called) to concatenate or render the chosen separator instead
of the literal "?" so the row shows a clear from → to format.
---
Nitpick comments:
In
`@apps/extension-wallet/src/hooks/__tests__/useSendTransaction.schedule.test.ts`:
- Around line 16-18: Add a clarifying inline comment above the timezone
adjustment in the test that explains why we compute offsetMs and subtract it
from future before calling toISOString() — e.g., state that toISOString()
returns UTC and this subtraction converts the Date to the local timezone so
slicing to 16 chars yields a value suitable for a datetime-local input; place
the comment near the variables future, offsetMs and startAt to make intent
obvious to future readers.
In `@apps/mobile-wallet/src/linking/__tests__/paymentUri.test.ts`:
- Around line 19-24: The test currently conflates a missing-destination case
with invalid-amount behavior; update the test for parsePaymentUri to (1) keep an
explicit assertion that 'stellar:pay?amount=1' returns null due to missing
destination, and (2) add a separate assertion that a URI with a valid
destination and an invalid amount (e.g.
`stellar:pay?destination=${DESTINATION}&amount=1.123456789` or `amount=-1`)
returns null so the isValidAmount branch is exercised; locate and modify the
test in paymentUri.test.ts where parsePaymentUri is used to add the distinct
invalid-amount vector.
In `@apps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.ts`:
- Line 22: Remove the vestigial retryCount property and all references to it in
usePaginatedTransactionHistory: delete retryCount from the State type, from the
initial state object, and from any error handler resets that set retryCount = 0;
also remove it from any places that read or spread state (e.g., the returned
"...state" payload) so consumers no longer see a perpetually-zero field and
state shape stays consistent.
In `@packages/stellar/src/__tests__/client.test.ts`:
- Around line 460-474: Add a new test case to StellarClient's submitTransaction
spec that simulates TransactionBuilder.fromXDR throwing for malformed XDR and
asserts that client.submitTransaction rejects with that error; specifically,
reuse the existing test setup (StellarClient instantiation,
getHorizonMock(client)) but make
mockTransactionFromXDR.mockImplementationOnce(() => { throw new Error('malformed
XDR') }) and then await expect(client.submitTransaction('bad-xdr' as unknown as
Transaction)).rejects.toThrow('malformed XDR'), and also assert that
horizon.submitTransaction is not called—this verifies the client correctly
surfaces decode errors before attempting submission.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: cdf9d5fc-bd50-4b62-9e0a-e861c273b2f7
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (30)
apps/extension-wallet/src/components/TransferNoteInput.tsxapps/extension-wallet/src/hooks/__tests__/useSendTransaction.schedule.test.tsapps/mobile-wallet/src/components/TransactionHistoryList.tsxapps/mobile-wallet/src/index.tsapps/mobile-wallet/src/linking/__tests__/paymentUri.test.tsapps/mobile-wallet/src/linking/index.tsapps/mobile-wallet/src/linking/paymentUri.tsapps/mobile-wallet/src/navigation/__tests__/onboarding.test.tsxapps/mobile-wallet/src/screens/history/__tests__/TransactionHistoryList.test.tsxapps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.tsapps/mobile-wallet/src/security/hooks/useBiometricUnlock.tspackages/stellar/src/__tests__/client.test.tspackages/stellar/src/client.tspackages/stellar/src/errors.tspackages/stellar/src/fee-stats.tspackages/types/src/index.tspackages/ui-kit/package.jsonpackages/ui-kit/src/__tests__/Form/Field.test.tsxpackages/ui-kit/src/__tests__/test-utils/a11y.tspackages/ui-kit/src/components/Form/Field.stories.tsxpackages/ui-kit/src/components/Form/Field.tsxpackages/ui-kit/src/components/Form/index.tspackages/ui-kit/src/components/Toast/NotificationProvider.tsxpackages/ui-kit/src/components/Toast/Toast.tsxpackages/ui-kit/src/components/Toast/ToastContainer.tsxpackages/ui-kit/src/components/TransactionItem.tsxpackages/ui-kit/src/components/ui/button.test.tsxpackages/ui-kit/src/components/ui/input.test.tsxpackages/ui-kit/src/index.tspackages/ui-kit/tsconfig.json
There was a problem hiding this comment.
Actionable comments posted: 5
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/stellar/src/client.ts (1)
484-491:⚠️ Potential issue | 🟠 Major | ⚡ Quick winPreserve
RetryExhaustedErrorfor exhausted 429s here too.This catch unwraps every
NetworkError, so a rate-limitedsubmitTransaction()loses the retry-exhaustion signal thatgetAccount()now preserves forstatusCode === 429. That makes a retried-and-exhausted 429 indistinguishable from a single network failure.🐛 Proposed fix
if (error instanceof RetryExhaustedError && error.lastError) { if ( error.lastError instanceof TransactionError || - error.lastError instanceof NetworkError + (error.lastError instanceof NetworkError && error.lastError.statusCode !== 429) ) { throw error.lastError; } }🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@packages/stellar/src/client.ts` around lines 484 - 491, The catch currently unwraps all NetworkError instances from a RetryExhaustedError and throws them, which loses the retry-exhausted signal for rate-limited 429s; change the logic in the catch block (around RetryExhaustedError, lastError, NetworkError, TransactionError in submitTransaction) to only throw error.lastError when it is a TransactionError or a NetworkError whose statusCode is NOT 429, and otherwise rethrow the original RetryExhaustedError so exhausted 429s are preserved (consistent with getAccount).
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/core-sdk/src/fiat-formatter.ts`:
- Around line 12-15: The doc comment for the locale fallback is incorrect:
resolveSupportedLocale() currently returns 'en-US' immediately when resolution
fails, so update the comment on fiat-formatter.ts (the JSDoc around the
locale/default lines and any related comments at lines ~56-58) to state that the
function falls back directly to 'en-US', or alternatively restore the intended
behavior by modifying resolveSupportedLocale() to attempt a
system/default-locale fallback before returning 'en-US'; reference the
resolveSupportedLocale() function and the JSDoc block for the locale/default to
locate where to change either the documentation or the fallback logic.
In `@packages/stellar/src/client.ts`:
- Around line 447-450: The call to resolveSignedTransaction in submitTransaction
currently runs before the method's try/catch so XDR decode errors escape as raw
SDK exceptions; move the resolveSignedTransaction(transaction) call inside
submitTransaction's try block (the same try that catches network/submit errors)
and, on any error from resolveSignedTransaction, wrap/throw a NetworkError (or
the same public error type used elsewhere in submitTransaction) that includes
the original error details so malformed XDR is normalized by submitTransaction's
documented error path.
In `@services/relayer/src/logging/__tests__/logger.test.ts`:
- Around line 36-38: The test description for the case using redactAccountId is
inaccurate: it mentions "ellipsis" but the assertion expects a question mark;
update the it(...) description to reflect the actual behavior (e.g., "truncates
to first 8 chars + question mark for longer values" or "replaces truncated chars
with '?' for longer values") so the test description matches the assertion
referencing redactAccountId.
- Around line 55-58: The test description for the unit that calls
redactSessionKey is inaccurate: it says "ellipsis" while the assertion expects a
question mark; update the it(...) description to reflect the actual expectation
(e.g., "truncates to first 8 chars + question mark for longer values") so the
test text matches the assertion using redactSessionKey.
- Around line 187-198: The tests expect redaction to append a '?' but the logger
implementation (redactAccountId and redactSessionKey in
services/relayer/src/logging/logger.ts) appends an ellipsis '…'; update either
the tests or the redaction functions so they match: modify redactAccountId and
redactSessionKey to append '?' after truncating to the first 8 characters (so
entries like 'GBXXX123?' and 'abcdef12?'), or alternatively change the
expectations in services/relayer/src/logging/__tests__/logger.test.ts to assert
the ellipsis version; ensure the chosen change is applied consistently for both
accountId and sessionKey references used by createRequestLogger and the tests.
---
Outside diff comments:
In `@packages/stellar/src/client.ts`:
- Around line 484-491: The catch currently unwraps all NetworkError instances
from a RetryExhaustedError and throws them, which loses the retry-exhausted
signal for rate-limited 429s; change the logic in the catch block (around
RetryExhaustedError, lastError, NetworkError, TransactionError in
submitTransaction) to only throw error.lastError when it is a TransactionError
or a NetworkError whose statusCode is NOT 429, and otherwise rethrow the
original RetryExhaustedError so exhausted 429s are preserved (consistent with
getAccount).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: c8d028d4-147e-4b5e-afbe-a2e4295c20a8
⛔ Files ignored due to path filters (1)
pnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (32)
README.mdapps/extension-wallet/src/config/__tests__/urls.test.tsapps/extension-wallet/src/config/urls.tsapps/extension-wallet/src/hooks/__tests__/useSendTransaction.schedule.test.tsapps/mobile-wallet/src/linking/__tests__/paymentUri.test.tsapps/mobile-wallet/src/linking/index.tsapps/mobile-wallet/src/linking/paymentUri.tsapps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.tsapps/web-dashboard/src/hooks/useAccountState.tsapps/web-dashboard/src/hooks/useSplitBill.tsapps/web-dashboard/src/pages/SplitBill.tsxapps/web-dashboard/src/services/__tests__/bulk-payouts.test.tsapps/web-dashboard/src/services/bulk-payouts.tsapps/web-dashboard/src/services/scheduler-client.tsapps/web-dashboard/src/test/setup.tscontracts/validation-modules/README.mdpackages/account-abstraction/src/transaction-builder.tspackages/core-sdk/src/fiat-formatter.tspackages/stellar/src/__tests__/client.test.tspackages/stellar/src/client.tspackages/ui-kit/package.jsonpackages/ui-kit/src/__tests__/Form/Field.test.tsxpackages/ui-kit/src/__tests__/test-utils/a11y.tspackages/ui-kit/src/components/Form/Field.stories.tsxpackages/ui-kit/src/components/Form/Field.tsxscripts/check-wasm-size.jsservices/relayer/src/handlers/executeRelay.tsservices/relayer/src/handlers/validateRelay.tsservices/relayer/src/logging/__tests__/logger.test.tsservices/relayer/src/logging/index.tsservices/relayer/src/middleware/__tests__/requestLogger.test.tsservices/relayer/src/middleware/requestLogger.ts
💤 Files with no reviewable changes (1)
- apps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.ts
✅ Files skipped from review due to trivial changes (6)
- apps/web-dashboard/src/services/tests/bulk-payouts.test.ts
- packages/account-abstraction/src/transaction-builder.ts
- apps/web-dashboard/src/services/bulk-payouts.ts
- apps/extension-wallet/src/config/tests/urls.test.ts
- apps/web-dashboard/src/pages/SplitBill.tsx
- apps/extension-wallet/src/config/urls.ts
🚧 Files skipped from review as they are similar to previous changes (9)
- packages/ui-kit/src/components/Form/Field.stories.tsx
- apps/mobile-wallet/src/linking/tests/paymentUri.test.ts
- apps/mobile-wallet/src/linking/index.ts
- packages/ui-kit/src/tests/Form/Field.test.tsx
- packages/ui-kit/src/tests/test-utils/a11y.ts
- apps/extension-wallet/src/hooks/tests/useSendTransaction.schedule.test.ts
- packages/ui-kit/src/components/Form/Field.tsx
- apps/mobile-wallet/src/linking/paymentUri.ts
- packages/stellar/src/tests/client.test.ts
|
Updated after review. CodeRabbit's actionable threads are addressed and resolved; the remaining jest-dom/vitest suggestion was kept as-is because apps/mobile-wallet uses Jest via jest.config.cjs, and the /vitest entry fails under that runner. I also refreshed the PR description with the current verification list. Follow-up checks run locally include stellar client tests/build/lint, mobile-wallet TransactionHistoryList test/build/lint, ui-kit build/test/lint, relayer build/test/lint, and pnpm format:check. |
There was a problem hiding this comment.
Great job so far, can you fix conflicts and tag me once its fixed @gshaowei6
…i-bounties # Conflicts: # apps/mobile-wallet/src/screens/history/usePaginatedTransactionHistory.ts # packages/stellar/src/client.ts # packages/stellar/src/fee-stats.ts # packages/ui-kit/tsconfig.json # pnpm-lock.yaml
22e87ce to
6d8b796
Compare
Description
Adds the requested Stellar, mobile wallet, and UI Kit improvements in one pass:
NetworkErrorhandling.submitTransactionto accept signed XDR, decode it with the configured network passphrase, normalize malformed XDR asNetworkError, and map Horizon result details intoTransactionError.stellar:payandweb+stellar:paylinks with destination and amount validation.Fieldwrapper with label, description, error, required-state wiring, Storybook coverage, tests, and usage in the extension send form note field.This also fixes build/test stability issues that blocked local verification: UI Kit declaration exports, mobile Jest matcher usage, local-time snapshot stability, an unused mobile history retry stub, an extension schedule test whose fixed future-date assumption had expired, dashboard test setup parity, relayer request logging types, and deterministic fiat locale fallback.
Type of Change
Testing
Commands run locally on Windows:
pnpm --filter @ancore/types buildpnpm --filter @ancore/types lintpnpm --filter @ancore/stellar buildpnpm --filter @ancore/stellar lintpnpm --filter @ancore/stellar testpnpm --filter @ancore/mobile-wallet buildpnpm --filter @ancore/mobile-wallet lintpnpm --filter @ancore/mobile-wallet testpnpm --filter @ancore/ui-kit buildpnpm --filter @ancore/ui-kit lintpnpm --filter @ancore/ui-kit testpnpm --filter @ancore/extension-wallet buildpnpm --filter @ancore/extension-wallet testpnpm --filter @ancore/extension-wallet lintexits 0 with existing warnings in unrelated files.pnpm --filter @ancore/relayer buildpnpm --filter @ancore/relayer lintexits 0 with the existingserver.tswarning.pnpm --filter @ancore/relayer testpnpm --filter @ancore/web-dashboard buildpnpm --filter @ancore/web-dashboard lintexits 0 with existing warnings in unrelated files.pnpm --filter @ancore/web-dashboard testpnpm --filter @ancore/core-sdk buildpnpm --filter @ancore/core-sdk lintexits 0 with existing warnings in unrelated files.pnpm --filter @ancore/core-sdk testpnpm format:checkFollow-up review validation:
pnpm --filter @ancore/stellar test -- --runInBand packages/stellar/src/__tests__/client.test.tspnpm --filter @ancore/stellar buildpnpm --filter @ancore/stellar lintpnpm --filter @ancore/mobile-wallet test -- TransactionHistoryListpnpm --filter @ancore/mobile-wallet buildpnpm --filter @ancore/mobile-wallet lintpnpm --filter @ancore/ui-kit buildpnpm --filter @ancore/ui-kit testpnpm --filter @ancore/ui-kit lintpnpm --filter @ancore/relayer buildpnpm --filter @ancore/relayer lintpnpm --filter @ancore/relayer testpnpm format:checkSecurity Considerations
No secrets, signing material, storage encryption, or contract logic are changed. The Stellar changes improve Horizon error classification and transaction submission error reporting. The mobile URI parser validates inputs and does not submit transactions.
Checklist
Summary by CodeRabbit
New Features
Bug Fixes
Improvements