Upgrade libphonenumber-js to 1.12.4 ## Reason closes PX-1307 when testing, we#497
Upgrade libphonenumber-js to 1.12.4
## Reason
closes PX-1307
when testing, we#497github-actions[bot] wants to merge 6 commits intomainfrom
Conversation
## Reason closes PX-1307 when testing, we found out that **Benin** updated its phone number length from 8 to 10 in **Nov 2025** Since our libphonenumber-js hasn't been updated since may of that year, we weren't getting the updated benin information Update the libphonenumber-js dependency to the latest version to benefit from bug fixes, performance improvements, and any new features provided in the 1.12.4 release. ## Overview Upgraded libphonenumber-js from version 1.11.1 to 1.12.4 in the uma-bridge package dependencies. ## Test Plan Existing tests pass. The upgrade is a patch/minor version bump with no breaking changes expected, so no additional testing is required beyond standard CI validation. https://claude.ai/code/session_01XVarofPM6V7mJs8Tp9BnK2 GitOrigin-RevId: a4dfb2b6b4833dfb368cbdaa8830bff409965e5f
|
The following public packages have changed files:
There are no existing changesets for this branch. If the changes in this PR should result in new published versions for the packages above please add a changeset. Any packages that depend on the planned releases will be updated and released automatically in a separate PR. Each changeset corresponds to an update in the CHANGELOG for the packages listed in the changeset. Therefore, you should add a changeset for each noteable package change that this PR contains. For example, if a PR adds two features - one feature for packages A and B and one feature for package C - you should add two changesets. One changeset for packages A and B and one changeset for package C, with a description of each feature. The feature description will end up being the CHANGELOG entry for the packages in the changeset. No releases planned. Last updated by commit be5ed4e |
## Summary - Migrate Ops from default Lightspark theme to the origin/Nage design system with SuisseIntl font family, updated color palette, and consistent styling - Add local ops-specific Select, TextInput, Dropdown, DataManagerTable, and OpsCommandCenter (⌘K) components with Nage-consistent styling - Make ops Select support caller-provided style overrides (merged on top of defaults) and use compact 12px/32px styling in the header to match the command center trigger button - Migrate all ~40 ops pages from `@lightsparkdev/ui` Select to the local ops Select ## Test Plan - [ ] Verify Ops app loads with new Nage theme (SuisseIntl fonts, updated colors) - [ ] Verify header CoreService select visually matches OpsCommandCenter trigger button height - [ ] Verify all ops pages render correctly with the local Select component - [ ] Verify OpsCommandCenter opens with ⌘K and functions correctly - [ ] Verify theme toggle (Light/Dark/Hardcore) still works - [ ] `yarn workspace @lightsparkdev/ops tsc --noEmit` passes <img width="1293" height="541" alt="Screenshot 2026-02-13 at 7 11 10 PM" src="https://github.com/user-attachments/assets/3ed30972-934e-40e3-a087-c36011d167d2" /> <img width="904" height="395" alt="Screenshot 2026-02-13 at 7 12 01 PM" src="https://github.com/user-attachments/assets/cfb514b6-dbb3-4dbc-8f0e-16fa5f701a57" /> <img width="1358" height="557" alt="Screenshot 2026-02-13 at 7 12 32 PM" src="https://github.com/user-attachments/assets/3d1ef6aa-ebc6-4c1d-a3e4-d123b52a87aa" /> <img width="1287" height="554" alt="Screenshot 2026-02-13 at 7 12 57 PM" src="https://github.com/user-attachments/assets/1231a16d-70ab-4972-b168-445a739a4259" /> <img width="513" height="433" alt="Screenshot 2026-02-13 at 6 32 10 PM" src="https://github.com/user-attachments/assets/9cef811b-34ca-4a00-a6da-1f0e8d14aa66" /> <img width="499" height="427" alt="Screenshot 2026-02-13 at 6 32 22 PM" src="https://github.com/user-attachments/assets/c8c2ddbb-e8a0-4ace-9f84-2ae497e46bd4" /> 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <[email protected]> GitOrigin-RevId: 54b3c84110731cc615218c1249da505abe077367
…e digits only (#23867) ## Reason Add validation to ensure bank account numbers and related fields contain only digits for Tazapay integrations. This prevents users from entering invalid characters that would cause payment failures. Previously, users were able to enter information that would immediately fail on the server. This brings the validation more in line with the backend ## Overview - Added a new `digitsOnly` validator in `useFields.tsx` to check if input contains only digits - Applied this validator to account numbers, sort codes, bank codes, and branch codes for various Tazapay currency accounts (GBP, CAD, HKD, MYR, SGD, THB) - Updated backend validation in Python to explicitly check that account numbers contain only digits for MYR, SGD, and THB accounts ## Test Plan - Verified the new validator rejects inputs with non-digit characters - Tested form validation for each affected currency type - Confirmed backend validation correctly identifies and rejects non-digit account numbers with appropriate error messages GitOrigin-RevId: 3e8ce54fdb8ec2143b935c8a3ac5a5fd9a1b2bf2
## Summary
Converts all 25 remaining `Table`/`CN1Table` usages in the ops app to
`DataManagerTable`, adding cursor-based pagination, URL-persisted
filters, and consistent table styling across all ops pages.
## Changed Tables
### Simple Table → DataManagerTable (pagination only, no filters)
| File | Changes/Caveats |
|------|----------------|
| **BakeryTable.tsx** | Renamed `$size` → `$first`, added cursor
pagination. Preserves modal for approve/deny/consume baking requests. |
| **BobbyTable.tsx** | Standard conversion. Uses
`useCoreServiceSchema()` for dynamic schema. |
| **CeleryTable.tsx** | Has `@ts-expect-error` on columns prop —
pre-existing mismatch where "sql" column key doesn't exist in row data
type. |
| **Pasta.tsx** | Renamed `$size` → `$first`, added cursor pagination.
Keeps "Cook some pasta!" button and CardPage wrapper. |
| **OpsBridgeZeroHashReceiveOperations.tsx** | `PAGE_SIZES = [50, 100]`.
Replaced custom `Empty` styled component with DataManagerTable's
`emptyState` prop. |
| **OpsBridgeReservedUmas.tsx** | Keeps "Reserve an UMA" form and
"Release" action links below/in table. |
| **OpsBridgeBannedClabes.tsx** | Keeps "Ban Form" above table and
"Unban/Release" action links. |
| **LedgerAccounts.tsx** | `PAGE_SIZES = [30, 50, 100]`. Complex
`onClickRow` with `getAccountId` lookup to navigate to account details.
|
| **CrossRiverWebhooks.tsx** | No cursor pagination — query returns flat
array (not a connection type). Uses `pageSizes={[100]}` with
`resultCount={rows.length}`. |
| **ManagePaycoreUmaaasPlatformCurrency.tsx** | Was importing `Table`
from public `@lightsparkdev/ui`. Query already had `$after`; added
`page_info`. |
### Fragment-Based Tables (styling swap only, no query/pagination)
| File | Changes/Caveats |
|------|----------------|
| **OpsManualReviewTicketSenderTransactions.tsx** |
`showHeader={false}`, `pageSizes={[100]}`. Receives data as props. |
| **OpsManualReviewTicketSenderTickets.tsx** | Keeps `onClickRow` for
navigation. Receives data as props. |
| **OpsGkListTable.tsx** | CN1Table → DataManagerTable. Keeps
`onClickRow` navigation and `.fragments` static property. |
| **WebhookTesterListTable.tsx** | CN1Table → DataManagerTable. Keeps
TrashCan delete action column with mutation. Keeps `.fragments` static
property. |
### Filter Migration (existing filters → DataManagerTable built-in
filters)
| File | Filter Changes | Caveats |
|------|---------------|---------|
| **OpsSparkSspTransactions.tsx** | 3 `Select` dropdowns → 3 ENUM
filters (Status, Network, Type) | Removed `Settings`/`Label` styled
components. Custom enum mapping via `statusMap`/`networkMap`/`typeMap`.
|
| **OpsManualReview.tsx** | `ButtonRow` toggle → ENUM filter
(Open/Closed) | `PAYOPS_tickets` does **not** support `after` argument —
removed `$after` from query while keeping `end_cursor` in `page_info`. |
| **OpsOnboarding.tsx** | Multi-select `ButtonRow` → ENUM filter with
`isMulti: true` | Default filter value:
`[AccountGoLiveStatus.Requested]`. |
| **OpsBridgeBitsoReceiveOperations.tsx** | UMA `TextInput` + Button →
STRING filter | Keeps `Toggle` for CREATED status as separate
client-side post-fetch filter (not migrated into DataManagerTable). |
| **OpsCompliance.tsx** | CN1Table + `Select` dropdown → ENUM filter |
Custom status mapping: "Manual Review" → `[VerificationPending,
ReVerificationPending]`, "Verified" → `[VerificationSucceeded]`,
"Declined" → `[VerificationFailed]`. |
| **OpsBillingInvoices.tsx** | CN1Table + `Select` + `TextInput` → ENUM
filter + STRING filter | Status filter wraps single selection in array
for `$statuses` variable. Account ID uses `isStringFilterState`. |
| **OpsBillingPlans.tsx** | CN1Table + Radio buttons → 2 BOOLEAN filters
(Is Public, Is Enabled) | Uses `FilterType.BOOLEAN` with
`isBooleanFilterState`. Keeps the "Create Billing Plan" form below the
table. |
### Client-Side Filtering (kept external, DataManagerTable for styling
only)
| File | Changes/Caveats |
|------|----------------|
| **OpsBridgeUsers.tsx** | Keeps `Select` dropdowns above table for
client-side status/VASP filtering. GraphQL query doesn't support filter
variables. |
| **OpsPerms.tsx** | Keeps `TextInput` search above table. Two queries
combined client-side. `showHeader={false}`, `pageSizes={[100]}`. |
| **Knobs.tsx** | Keeps `TextInput` search + "Create Knob" button above
table. `pageSizes={[1000]}`. Keeps modal for CRUD operations. |
| **SofiViewReports.tsx** | Multiple tables inside `.map()` loop — both
inner tables converted. Keeps lazy query search UI and all styled
components. |
## GraphQL Changes
- Added `$after: String` variable and `after: $after` argument to 17
queries for cursor-based pagination
- Added `page_info { has_next_page end_cursor }` to all connection
queries
- Exception: `PAYOPS_tickets` does not support `after` — kept without it
- Exception: `CrossRiverWebhooks` returns a flat array, not a connection
type — no pagination changes
- Auto-generated `graphql.tsx` updated via `yarn gql-codegen`
## What's NOT converted (out of scope)
- `OpsBillingInvoice.tsx` — single invoice detail page (uses CN1Table
for layout, not a data listing)
- `OpsInspectorDetailsBridgeZeroHashSendOperation.tsx` — inspector
detail view (layout, not a table)
## Test plan
- [ ] Verify each converted table page loads correctly in the ops app
- [ ] Verify pagination works (page size selector, next/previous pages)
- [ ] Verify filters work for tables that had them (SSP transactions,
Manual Review, Onboarding, Bitso, Compliance, Billing)
- [ ] Verify client-side filtering still works (Bridge Users, Perms,
Knobs)
- [ ] Verify row click navigation works where applicable
- [ ] Verify modals/forms still work (Bakery approve/deny, Knobs CRUD,
Billing Plans create)
- [ ] Verify action columns work (BannedClabes unban, ReservedUmas
release, WebhookTester delete)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Sonnet 4.6 <[email protected]>
GitOrigin-RevId: a15f179b80a0cc680502e9c463ea2342756b13c4
## Reason Tazapay standardizes all fiat currencies to 2 decimal places in their API responses. This means currency amounts from Tazapay are stored in smallest units (1/100 of base unit) even for currencies that don't naturally have sub-units (e.g., IDR, VND). These currencies need to be treated the same as traditional cent-based currencies for proper display formatting. ## Overview Added 9 Tazapay-supported currencies to the `centCurrencies` array in the `formatCurrencyStr` function: - IDR (Indonesian Rupiah) - VND (Vietnamese Dong) - THB (Thai Baht) - MYR (Malaysian Ringgit) - CAD (Canadian Dollar) - DKK (Danish Krone) - AED (United Arab Emirates Dirham) - HKD (Hong Kong Dollar) - SGD (Singapore Dollar) These currencies will now be correctly divided by 100 when formatting for display, matching Tazapay's standardized decimal representation. ## Test Plan Existing currency formatting tests should continue to pass. The change is additive and follows the established pattern for cent-based currencies in the codebase. https://claude.ai/code/session_01AAn8DK9DjTuW7HQXjidhB6 GitOrigin-RevId: e315e8a632f8b5838624d5a9f65943bf394fc684
If this change should result in new package versions please add a changeset before merging. You can do so by clicking the link provided by changeset bot below.