Skip to content

Commit 449e9de

Browse files
github-actions[bot]matthappensbsiaotickchongclaudeLightspark Eng
authored
Updates to lightspark-cli, lightspark-sdk, crypto-wasm, oauth, core, ui (#497)
* Upgrade libphonenumber-js to 1.12.4 (#23790) ## 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 * Retheme Ops app with origin/Nage design system (#23775) ## 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 <noreply@anthropic.com> GitOrigin-RevId: 54b3c84110731cc615218c1249da505abe077367 * CI update lock file for PR * Confine account numbers and sort codes for gbp, myr, sgd and thb to be 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 * [ops] Convert all ops tables to DataManagerTable (#23871) ## 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 <noreply@anthropic.com> GitOrigin-RevId: a15f179b80a0cc680502e9c463ea2342756b13c4 * Add Tazapay currencies to cent-based currency formatting (#23949) ## 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 * fix: use unique keys for Dropdown list items (#24202) ## Summary - The `Dropdown` component used `dropdownItem.to` as the React list key, causing duplicate key warnings when multiple items share the same route (e.g. `AccountDropdown` where Account, Profile, Team, Security, and Billing all navigate to `/account` with different hash fragments) - Changed the key to a composite of `to`, `hash`, and index to ensure uniqueness across all dropdown items ## Root cause `Dropdown.tsx:420` rendered `<li key={dropdownItem.to}>`, but `AccountDropdown` passes 5-6 items all with `to: Routes.Account`, differentiated only by `hash`. React warned about duplicate `/account` keys on every render. ## Test plan - [ ] Open the site app locally, navigate to any page with the account dropdown - [ ] Verify no "duplicate key" warnings in the browser console - [ ] Verify dropdown items still render and navigate correctly (Account, Profile, Team, Security, Billing, Log out) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: c7a2095f7748e96835e998fec11a2b4d4983640e * Update currency formatting for African currencies (#24427) ## Reason <img width="231" height="181" alt="Screenshot 2026-03-03 at 5 44 02 PM" src="https://github.com/user-attachments/assets/a264a8bd-a394-45b0-a75f-33433afe35e8" /> Reorganize the currency formatting logic to properly categorize African currencies by their decimal place handling. This change separates Yellowcard's 2-decimal African currencies (MWK, ZMW) from other African currencies, ensuring correct formatting based on how each payment provider stores currency amounts. ## Overview - Moved `CurrencyUnit.TZS` and `CurrencyUnit.UGX` out of the 2-decimal African currencies section - Added `CurrencyUnit.MWK` and `CurrencyUnit.ZMW` as Yellowcard 2-decimal African currencies with a clarifying comment - Reordered `CurrencyUnit.BWP` for better logical grouping This change ensures that currency amounts are formatted correctly based on whether they're stored in smallest units (1/100 of base unit) by Yellowcard or use standard formatting. ## Test Plan N/A - This is a configuration change to currency formatting logic. Existing currency formatting tests will validate the behavior. https://claude.ai/code/session_01NdmcE1QoMxNwDK9zTCbPfA GitOrigin-RevId: 743ad2e3a323393c554c3f4aa474e99887f269a3 * [core] Improve Logger: add levels, timestamps, options API, and tests (#24478) ## Summary - Moves `Logger` from a single file (`Logger.ts`) to a `logger/` directory with barrel export - Adds `Debug`, `Warn`, and `Error` logging levels (previously only `Trace` and `Info`) - Adds timestamp formatting to log messages (configurable) - Adds `setOptions` API accepting string-based level names (e.g., `"DEBUG"`, `"info"`, `"Warn"`) - Adds new `warn()` and `error()` methods that use `console.warn`/`console.error` respectively - Adds unit tests for level name parsing, casing validation, and debug level filtering - Also fixes pre-existing prettier formatting in `SendWire.tsx` ## Backwards Compatibility These changes are **fully backwards compatible**: - `Logger`, `LoggingLevel`, and `logger` are still exported from `shared.ts` (the public API surface) - No external consumers import `Logger.ts` directly — they all go through `@lightsparkdev/core` barrel exports - The `Logger` constructor signature changed from `(context, getLoggingEnabled?)` to `(context, options?)`, but the default behavior (no second arg) is preserved - `setLevel()` and `setEnabled()` methods are preserved with identical signatures - `trace()` and `info()` methods behave identically - New exports (`LoggerOptions`, `LoggerOptionsArg`, `LoggingLevelArg`, `LoggingLevelName`) are additive only - New enum values (`Debug`, `Warn`, `Error`) are additive — existing `Trace` (0) and `Info` (2, was 1) numeric values shifted, but no external code should depend on the numeric values ⚠️ **One subtle change**: `LoggingLevel.Info` was previously `1`, now it's `2` (due to `Debug` being inserted). Code that stores/compares the numeric enum value (rather than the enum member) could be affected, but this is unlikely in practice. ## Test plan - [x] `yarn workspace @lightsparkdev/core build` passes - [x] `yarn workspace @lightsparkdev/core test` — all 69 tests pass (6 suites) - [x] `yarn format` passes (all 19 workspaces) - [ ] CI checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: 6dca7c383bd22121f6d819abebbc92acd23f1cb6 * Default to Node 20.x, matrix test 18+22, migrate to mise (#498) * Consolidate Node setup: default to 20.x, matrix test 18+22, migrate to mise - Default CI to Node 20.x (was 18 via .nvmrc) - Update matrix testing from [18, 20] to [18, 22] - Replace .nvmrc with .mise.toml (node pinned to 20) - Keep Node 24 for release job (npm trusted publishing requirement) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix JSON imports for Node 18+22 compat using createRequire `import ... assert` was removed in Node 22 and `import ... with` requires Node 20.10+. Use createRequire which works across all versions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Add type annotations for createRequire JSON imports Fixes eslint no-unsafe-assignment/no-unsafe-member-access errors caused by require() returning any. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> * [js] Make @lightsparkdev/tsconfig publishable (#24477) ## Summary - Makes `@lightsparkdev/tsconfig` publishable: removes `"private": true`, adds `exports`/`files` fields, adds `publint`/`attw` package checks - Fixes the base.json resolution bug: removes `baseUrl`, `outDir`, `include`, `exclude` — these resolved relative to the config package directory, not the consumer workspace - Upgrades `ts-node` 10.9.1 → 10.9.2 (patch) to fix package-name tsconfig extends resolution ([TypeStrong/ts-node#2090](TypeStrong/ts-node#2090)) - Converts all 17 workspace tsconfig `extends` from relative paths to `@lightsparkdev/tsconfig/*` package paths - Adds missing `@lightsparkdev/tsconfig` devDependency to `nodejs-scripts` - Fixes pre-existing prettier issue in `SendWire.tsx` ## Test plan - [x] `yarn checks` — all 74 tasks pass (lint, format, test, circular-deps, gql-codegen, package:checks) - [x] `yarn build` — all 16 build tasks pass - [x] `yarn deps:check` (manypkg) passes - [x] `yarn workspace @lightsparkdev/tsconfig package:checks` passes (publint + attw) - [x] ts-node, Jest, and gql-codegen all resolve `@lightsparkdev/tsconfig/*` extends correctly 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: dd8993dcfb2aa63c528ee55aec3c3df7672b9a81 * Consolidate Node/Yarn CI setup, default to Node 20, migrate to mise (#24505) ## Summary - Create `setup-node-yarn-install` composite action that consolidates the separate `actions/setup-node` + `yarn-nm-install` steps into a single reusable action (matching the pattern used in the spark repo) - Default CI to **Node 20.x** (was 18) - Replace `.nvmrc` files with mise config (`js/.mise.toml` pinned to node 20) - Delete all `.nvmrc` files (`js/.nvmrc`, `js/apps/private/{ops,site,uma-bridge}/.nvmrc`) ## Test plan - [ ] `js.yaml` workflow passes (update-lock-file, check, test, deploy jobs) - [ ] `licenses.yaml` workflow passes - [ ] `ui-test-hermetic.yaml` workflow passes - [ ] Verify node 20.x is used in CI logs 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: 892ba6f32336331d2ea605fe381d2e4f08ef7ceb * CI update lock file for PR * Add changesets for core and ui, fix create-release-pr workflow Add changesets summarizing public-facing changes since last release: - core: Logger API improvements (new levels, options, timestamps) and expanded currency formatting (African + Tazapay currencies) - ui: Dropdown key fix, DataManagerTable fixes, digitsOnly validator, dynamic font paths, theme updates Fix create-release-pr workflow to use node-version instead of deleted .nvmrc file. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update from public js-sdk main branch (#23597) Update public `js` sources with the latest code from the [public repository](https://github.com/lightsparkdev/js-sdk) main branch. This typically happens when new versions of the SDK are released and version updates need to be synced. The PR should be merged as soon as possible to avoid updates to webdev overwriting the changes in the js-sdk develop branch. --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Corey Martin <coreyn.martin@gmail.com> Co-authored-by: Lightspark Eng <engineering@lightspark.com> GitOrigin-RevId: 57509e652f38b40e4b6a4f554dffa3328339395a * CI update lock file for PR * Use Lightspark Copybara app for JS SDK → webdev sync Switch from the general APP_ID/APP_PRIVATE_KEY secrets to the dedicated LIGHTSPARK_COPYBARA_APP_ID/LIGHTSPARK_COPYBARA_PRIVATE_KEY secrets, matching lightsparkdev/webdev#24558. Scopes the token to the webdev repo. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Fix JSON imports for Node 22 compat (re-apply createRequire fix) The Copybara sync from webdev (#24505) reverted the import assertion fix from ce84ce8. Node 22.22.0 rejects `import ... assert { type: "json" }` syntax in jest's ESM VM modules. Replace with createRequire which works across Node 18, 20, and 22. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * [js] Migrate JS monorepo to ESLint 9 flat config (#24487) ## Summary - Migrates all 23 JS packages from ESLint 8 legacy `.eslintrc` configs to ESLint 9 flat config (`eslint.config.js/mjs`) - Upgrades `eslint-plugin-jest` v27 → v28 for ESLint 9 compatibility - Replaces `eslint-config-next` with direct `@next/eslint-plugin-next` (fixes `@rushstack/eslint-patch` incompatibility) - Adds `tseslint.configs.disableTypeChecked` overrides for markdown/mdx files - Fixes ~164 lint errors across 14 packages without any `eslint-disable` comments - All 19 custom ESLint rules validated to fire correctly on their target patterns ## Test plan - [x] `yarn lint` passes across all 23 packages - [x] `yarn format` passes across all packages - [x] Each custom rule in shared configs validated to flag correct patterns - [ ] CI checks pass 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: e8a0166dc7ac767d18cb5e87e7d1e94eb619d39b * CI update lock file for PR * [js] Make @lightsparkdev/eslint-config publishable (#24538) ## Summary - Removes `private: true` from `@lightsparkdev/eslint-config` and configures the package for npm publishing - Adds proper `exports` map for ESLint 9 flat configs (`base`, `react-lib`, `react-app`, `react-app-with-internal-ui`) - Reorganizes dependencies: runtime plugins in `dependencies`, `eslint`/`typescript` as `peerDependencies`, removes unused legacy devDeps (babel, webpack, prettier, eslint-config-next/prettier/universe) - Adds `publint` and `package:checks` script (matching `@lightsparkdev/tsconfig` pattern) ## Changes - `js/packages/eslint-config/package.json` — full rewrite for publishability - `js/yarn.lock` — lockfile update from dep reorganization ## Test plan - [x] `yarn install` succeeds - [x] `yarn workspace @lightsparkdev/core lint` passes (base config) - [x] `yarn workspace @lightsparkdev/lightspark-sdk lint` works (base config) - [x] `yarn workspace @lightsparkdev/ui lint` works (react-lib config) - [x] `publint` passes clean - [x] Pre-commit hooks pass (format across all packages) - [ ] CI checks 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> GitOrigin-RevId: 87b0993df9c8dc2a2dcbe1e6a4c32e434c01d55a * CI update lock file for PR * Fix JSON imports for Node 22 compat (re-apply after Copybara revert) Copybara syncs from webdev keep reverting `createRequire` back to `import ... assert { type: "json" }`. This needs to be fixed in webdev to stop the cycle. Re-applying for now. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Matt Davis <matthappens@gmail.com> Co-authored-by: Brian Siao Tick Chong <bsiaotickchong@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Lightspark Eng <engineering@lightspark.com> Co-authored-by: Corey Martin <coreyn.martin@gmail.com> Co-authored-by: lightspark-ci-js-sdk[bot] <134011073+lightspark-ci-js-sdk[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
1 parent 188e713 commit 449e9de

File tree

90 files changed

+2859
-1713
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

90 files changed

+2859
-1713
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lightsparkdev/core": minor
3+
---
4+
5+
Add new Logger API with configurable levels, timestamps, and options. New logging levels (Debug, Warn, Error) supplement existing Trace and Info levels. The `setOptions()` method enables batch configuration of logging behavior. Update currency formatting to support additional African currencies (MWK, ZMW) and Tazapay-supported currencies (IDR, VND, THB, MYR, CAD, DKK, AED, HKD, SGD).
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@lightsparkdev/ui": patch
3+
---
4+
5+
Fix unique key generation for Dropdown list items to prevent React rendering issues. Fix DataManagerTable pagination state and empty filter rendering. Add `digitsOnly` field validator for numeric-only input fields. Improve font loading to support sub-path deployments via dynamic BASE_URL resolution. Update Nage and Hardcore theme definitions.

.github/workflows/create-release-pr.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
env:
3131
SKIP_YARN_COREPACK_CHECK: true
3232
with:
33-
node-version-file: ".nvmrc"
33+
node-version: "20.x"
3434

3535
- name: yarn install with cache
3636
uses: ./.github/actions/yarn-nm-install

.github/workflows/test-release-sync.yaml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
env:
3636
SKIP_YARN_COREPACK_CHECK: true
3737
with:
38-
node-version-file: ".nvmrc"
38+
node-version: "20.x"
3939

4040
- name: "Install dependencies with yarn cache"
4141
uses: ./.github/actions/yarn-nm-install
@@ -69,7 +69,7 @@ jobs:
6969
runs-on: "ubuntu-22.04"
7070
strategy:
7171
matrix:
72-
node-version: ["18.x", "20.x"]
72+
node-version: ["18.x", "22.x"]
7373
steps:
7474
- name: "Checkout"
7575
uses: "actions/checkout@v3"
@@ -121,7 +121,7 @@ jobs:
121121
runs-on: "ubuntu-22.04"
122122
strategy:
123123
matrix:
124-
node-version: ["18.x", "20.x"]
124+
node-version: ["18.x", "22.x"]
125125
steps:
126126
- name: "Checkout"
127127
uses: "actions/checkout@v3"
@@ -277,8 +277,10 @@ jobs:
277277
id: generate_token
278278
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
279279
with:
280-
app_id: ${{ secrets.APP_ID }}
281-
private_key: ${{ secrets.APP_PRIVATE_KEY }}
280+
app-id: ${{ secrets.LIGHTSPARK_COPYBARA_APP_ID }}
281+
private-key: ${{ secrets.LIGHTSPARK_COPYBARA_PRIVATE_KEY }}
282+
owner: lightsparkdev
283+
repositories: webdev
282284

283285
- name: "Run Copybara"
284286
env:

.mise.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
MISE_NODE_COREPACK = true
33

44
[tools]
5-
node = "latest"
5+
node = "20"
66

77
[tasks.deps]
88
description = "Install all JS dependencies"

.nvmrc

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import base from "@lightsparkdev/eslint-config/base";
2+
3+
export default [
4+
...base,
5+
{
6+
files: ["**/*.cjs"],
7+
rules: {
8+
"@typescript-eslint/no-require-imports": "off",
9+
},
10+
},
11+
];

apps/examples/nodejs-scripts/package.json

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@
2020
"license": "ISC",
2121
"devDependencies": {
2222
"@lightsparkdev/eslint-config": "*",
23+
"@lightsparkdev/tsconfig": "0.0.1",
2324
"@types/jest": "^29.5.3",
2425
"@types/node": "^20.2.5",
25-
"eslint": "^8.3.0",
26+
"eslint": "^9.0.0",
2627
"eslint-watch": "^8.0.0",
2728
"jest": "^29.6.2",
2829
"prettier": "3.0.3",
2930
"prettier-plugin-organize-imports": "^3.2.4",
3031
"ts-jest": "^29.1.1",
31-
"ts-node": "^10.9.1",
32+
"ts-node": "^10.9.2",
3233
"tsc-absolute": "^1.0.1",
3334
"typescript": "^5.6.2"
3435
},

apps/examples/nodejs-scripts/src/lightspark-sdk/example.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -266,9 +266,9 @@ const address = await client.createNodeWalletAddress(nodeId);
266266
console.log(`Got a bitcoin address for ${nodeName}: ${address}`);
267267
console.log("");
268268

269-
// const withdrawal = await client.requestWithdrawal(node2Id, 1000000, address, WithdrawalMode.WALLET_THEN_CHANNELS);
270-
// console.log(`Money was withdrawn with ID = ${withdrawal.id}`);
271-
// console.log("");
269+
// const withdrawal = await client.requestWithdrawal(node2Id, 1000000, address,
270+
// WithdrawalMode.WALLET_THEN_CHANNELS); console.log(`Money was withdrawn with ID =
271+
// ${withdrawal.id}`); console.log("");
272272

273273
// Fetch the channels for Node 1
274274
const node = await client.executeRawQuery(getLightsparkNodeQuery(nodeId));

apps/examples/nodejs-scripts/src/lightspark-sdk/internal_example.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,9 @@ const address = await client.createNodeWalletAddress(node1Id);
267267
console.log(`Got a bitcoin address for ${node1Name}: ${address}`);
268268
console.log("");
269269

270-
// const withdrawal = await client.requestWithdrawal(node2Id, 1000000, address, WithdrawalMode.WALLET_THEN_CHANNELS);
271-
// console.log(`Money was withdrawn with ID = ${withdrawal.id}`);
272-
// console.log("");
270+
// const withdrawal = await client.requestWithdrawal(node2Id, 1000000, address,
271+
// WithdrawalMode.WALLET_THEN_CHANNELS); console.log(`Money was withdrawn with ID =
272+
// ${withdrawal.id}`); console.log("");
273273

274274
// Fetch the channels for Node 1
275275
const node1 = await client.executeRawQuery(getLightsparkNodeQuery(node1Id));

0 commit comments

Comments
 (0)