Commit Graph
8 Commits
Author SHA1 Message Date
Kevin CodexandClaude Fable 5.1 d09606ced2 wallet: a real connect picker; Coinbase Smart Wallet was never reachable
Every "Connect wallet" button looked for a connector with id "coinbaseWallet",
but wagmi's Coinbase connector registers as "coinbaseWalletSDK". The lookup
never matched, so the app always fell through to the generic injected
connector. Coinbase Smart Wallet could not be chosen, and in a browser with
no wallet extension the click failed with ProviderNotFound and no UI reacted:
a dead button. That also hid that @coinbase/wallet-sdk (an optional peer of
wagmi) was not installed; the production bundle carried a "Cannot find
module" stub in its place.

- lib/wallet-connectors.ts: pure module choosing which wallets to offer
  (browser-announced EIP-6963 wallets first, the generic browser wallet only
  when something is injected without announcing itself, Coinbase always) and
  turning connect failures into plain text without echoing raw errors.
- components/WalletPicker.tsx: the connect dialog on the existing Sheet, one
  in-flight request at a time, errors shown inline with role=alert, closes on
  success. components/ConnectWallet.tsx: a button in the caller's styling
  that opens it.
- Header, trade panel, launch form, posts composer and the /me dashboard all
  connect through the picker; no component calls useConnect any more except
  the picker, and a test pins that.
- @coinbase/wallet-sdk ^4.3.7 installed (registry tarball, integrity matches,
  no eval or script/iframe injection; its origins were already in the CSP).

Verified in headless Chrome against the dev server: no wallet shows Coinbase
plus guidance and the Coinbase row waits on its popup; a fake EIP-6963 wallet
is listed, connects, and the header shows the address chip; a bare
window.ethereum is offered as "Browser wallet". Lint, typecheck, 279 tests
and a production build pass.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_0146kzimBSuHTErfKYhMCaic
2026-09-10 10:46:50 +08:00
Kevin CodexandClaude Fable 5.1 7e8d333b94 deps: Next 16.3.4 (fixes two critical RCE advisories), eslint-config-next 16.3.4, js-yaml 4.3.2
next 16.3.1 -> 16.3.4 closes GHSA-2xp9-vwfh-vxw4 (unauthenticated RCE in the
Image Optimization API via AVIF; the /_next/image route is enabled by default
and reachable in production even though the app never uses next/image) and
GHSA-p293-qw3h-jr36 (unauthenticated RCE on Windows-hosted servers).
eslint-config-next moves in lockstep. js-yaml 4.3.2 clears the dev-only
GHSA-2883-xcg3-v3hh advisory under eslint. npm audit: 0 vulnerabilities.

Co-Authored-By: Claude Fable 5.1 <[email protected]>
Claude-Session: https://claude.ai/code/session_01EBa4QU3W9Ak65FwHSUs6hR
2026-09-09 21:23:59 +08:00
beardthelion 905c9c1756 Merge remote-tracking branch 'origin/main' into fix/edit-rate-limit-nonce-ordering
# Conflicts:
#	app/package-lock.json
2026-09-08 01:10:06 -05:00
Kevin Codex ce70ef407a ui remake: keep the Clear Sky brand
On top of the UI rebuild: light is the default again and every light token is the
original Clear Sky palette (guard test restored, adapted to @theme static); dark stays
behind the header toggle with its shadows and chart tokens. The shadcn CLI runtime
dependency and its registry config are removed (nothing imported it; 220 packages
gone). Empty-value placeholders read "—" again instead of "N/A", and the tests that
forbade the dash character are dropped. README banner and brand artwork restored.
2026-09-08 08:47:40 +08:00
beardthelion 366742464e test: add regression tests for edit nonce ordering and wallet rate-limit DoS
Adds editServer.test.ts with 8 tests covering: RPC error returns 503 with
nonce intact, invalid signature returns 401 with nonce intact, valid
signature consumes nonce and writes metadata, already-used nonce rejected,
rate-limit DoS mechanism, cross-wallet isolation, 10 invalid-sig requests
do not freeze the wallet, non-creator nonce requests do not spend the
wallet bucket.

Test infrastructure: tsx dev dependency, tsconfig.test.json for path-alias
mocking of @/lib/db and @/lib/chain, db-mock.ts and chain-mock.ts for
mocked DB and RPC, test-loader.mjs for @/ path resolution. The test script
uses tsx with react-server conditions; test:unit preserves the original
node-only runner for pure-logic tests.
2026-09-07 14:59:50 -05:00
Vasanth T b5ff446d11 Rebuild Openlaunch UI and harden live market charts
Combine the reviewed launchpad UI, chart normalization, transaction safeguards, and navigation fixes into one commit directly on main. Preserve the complete tested source tree, optional first-buy integration, and official X links.
2026-09-08 00:38:03 +05:30
Vasanth T 069d0e0d51 theme: class-based dark default with an animated toggle, light behind it
Builds on the system-dark-mode work: the palette moves from a
prefers-color-scheme media query to a class on <html> so the reader can
choose. Dark is the default and carries the pure-black palette; light is
the unclassed base so the toggler's bare classList.toggle("dark") works.

- globals.css: light tokens in @theme, dark overrides in .dark, print
  fallback to ink-on-white, View Transitions CSS for the toggle wipe.
  Hero wash, progress bar and shadow system unchanged.
- ThemeProvider (next-themes, attribute="class", defaultTheme="dark") and
  ThemeToggle wrapping MagicUI's animated-theme-toggler in controlled mode,
  with a reduced-motion patch. Toggle sits in the header and the mobile menu.
- PriceChart re-reads its colours when the html class changes; volume bars
  and gridlines come from tokens instead of hardcoded light rgba.
- Sheet scrim gets its own token so it stays dark in both themes; the warm
  filled button uses warm-ink to keep AA.
- theme.test.ts checks the class-based ramp: AA contrast in both themes,
  every base token has a dark counterpart, no .light rule, print fallback.
2026-09-07 19:43:03 +08:00
Kevin Codex 312489a7b4 Initial commit
openlaunch — launch a token. Free. Open source. On Base or Robinhood Chain.
Contracts (LaunchFactory / LaunchLocker / LaunchToken, Foundry), the site (Next.js),
brand assets. No platform fee, liquidity locked forever.
2026-09-07 11:28:24 +08:00