Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
542 commits
Select commit Hold shift + click to select a range
f066808
fix: format
jjramirezn Apr 30, 2026
f1212fd
Merge pull request #1927 from peanutprotocol/chore/squid-naming-cleanup
jjramirezn Apr 30, 2026
965dfe6
fix(tokens): fetch token price + wallet balances via api-ts backend
jjramirezn Apr 30, 2026
e3baf83
debug: TEMP overlay below Review button to surface disabled-gate state
jjramirezn Apr 30, 2026
5aa1ef5
fix(tokens-price): use serverFetch instead of apiFetch
jjramirezn Apr 30, 2026
319cc87
fix(tokens-price): call backend directly, no Next.js proxy
jjramirezn Apr 30, 2026
47b23bd
feat(rhino): drop USDC/USDT restriction on cross-chain withdraw token
jjramirezn Apr 30, 2026
b39bedb
fix(proxy): forward Authorization header in withFormData proxy
jjramirezn Apr 30, 2026
b984284
fix(rhino-sda): call backend directly, no Next.js proxy
jjramirezn Apr 30, 2026
8cf1674
feat(rhino): bridge path for non-stablecoin cross-token withdraw
jjramirezn May 4, 2026
44274c3
fix(rhino-bridge): pass tokenIn=USDC + tokenOut=destination + isSwap
jjramirezn May 4, 2026
213f85d
fix(withdraw): route cross-token same-chain through Rhino path
jjramirezn May 4, 2026
bededd1
fix(rhino-bridge): prepend USDC.approve(bridgeContract, amount) to us…
jjramirezn May 4, 2026
56fa351
fix(rhino-bridge): use mode='pay' for cross-chain swap routes
jjramirezn May 4, 2026
c252869
feat(rhino-bridge): support cross-chain via depositWithId
jjramirezn May 4, 2026
e7e5be7
fix: format
jjramirezn May 4, 2026
2d7cef5
Merge pull request #1929 from peanutprotocol/fix/mobula-via-backend
jjramirezn May 4, 2026
93749d3
fix(card): unstick users post-Sumsub by polling instead of single re-…
jjramirezn May 5, 2026
86bff35
refactor(card): DRY post-apply routing into a shared callback
jjramirezn May 5, 2026
a9db7cf
fix(card): abort post-Sumsub poll on unmount
jjramirezn May 5, 2026
88c4c35
Merge pull request #1931 from peanutprotocol/feat/card-improvements
jjramirezn May 5, 2026
655197d
chore: resolve merge conflicts syncing main into dev
kushagrasarathe May 5, 2026
1b9da41
fix: resolve typecheck errors from main→dev merge
kushagrasarathe May 5, 2026
e496cc4
fix: address CTO review findings
kushagrasarathe May 5, 2026
de242aa
fix: address remaining CodeRabbit review comments
kushagrasarathe May 5, 2026
2c47f92
Merge pull request #1932 from peanutprotocol/chore/sync-main-into-dev
kushagrasarathe May 5, 2026
5d56694
feat: add /dev/kyc-flows page with mermaid state machine diagrams
kushagrasarathe May 5, 2026
8bd1f68
refactor: read mermaid diagrams from mono repo instead of hardcoding
kushagrasarathe May 5, 2026
62069d3
chore: remove SimpleFi from active code paths
jjramirezn May 5, 2026
8fb3412
fix: prettier formatting
kushagrasarathe May 5, 2026
659cdba
Merge pull request #1934 from peanutprotocol/feat/kyc-flow-diagrams
kushagrasarathe May 5, 2026
a6dc4e7
chore: post-SimpleFi cleanup from review
jjramirezn May 5, 2026
e03acc0
Merge branch 'dev' into chore/remove-simplefi
jjramirezn May 5, 2026
9b453fc
Merge pull request #1935 from peanutprotocol/chore/remove-simplefi
jjramirezn May 5, 2026
c720bc2
feat(manteca): pay QR from Rain card collateral when smart wallet is low
jjramirezn May 5, 2026
9f4d562
fix(manteca): address PR review (correctness + DRY + UX)
jjramirezn May 5, 2026
22246b4
Merge pull request #1937 from peanutprotocol/feat/manteca-collateral
jjramirezn May 5, 2026
813deb9
docs(rain): clarify cents-in / wei-out asymmetry on /withdraw boundaries
jjramirezn May 6, 2026
b747450
Merge pull request #1939 from peanutprotocol/feat/manteca-collateral
jjramirezn May 6, 2026
ab263f1
fix(crosschain-withdraw): use source USDC amount in 'pay'-mode quote
jjramirezn May 6, 2026
21319ba
Merge pull request #1941 from peanutprotocol/fix/crosschain-withdraw-…
jjramirezn May 6, 2026
e1f287f
fix(crosschain-withdraw): force mode='pay' for same-chain swap too
jjramirezn May 6, 2026
3ee497a
Merge pull request #1942 from peanutprotocol/fix/crosschain-withdraw-…
jjramirezn May 6, 2026
c44e154
fix(card): credit-card icon for Rain card-spend receipts
jjramirezn May 7, 2026
da3ca5e
Merge pull request #1944 from peanutprotocol/fix/card-pay-icon
jjramirezn May 7, 2026
50a2767
fix(card): action label + title-case names + drop Charged-in row
jjramirezn May 7, 2026
586d7dd
Merge pull request #1945 from peanutprotocol/fix/card-pay-label-title…
jjramirezn May 7, 2026
a39c5cb
fix(activity-card): only treat currency.amount as USD when code is USD
jjramirezn May 7, 2026
81254da
Merge pull request #1946 from peanutprotocol/fix/activity-card-usd-guard
jjramirezn May 7, 2026
d15b6df
fix(withdraw): record cross-chain payments even when collateral-routed
jjramirezn May 7, 2026
db1a114
Merge pull request #1947 from peanutprotocol/fix/cross-chain-withdraw…
jjramirezn May 7, 2026
d364319
fix(spend-flows): use txHash fallback for collateral-only sendMoney
jjramirezn May 7, 2026
994e22e
Merge pull request #1950 from peanutprotocol/feat/sendmoney-spend-bundle
jjramirezn May 7, 2026
ff7f625
feat(manteca-withdraw): switch to signSpend for collateral-only support
jjramirezn May 7, 2026
a806512
sync: cherry-pick bridge KYC state machine changes onto dev
kushagrasarathe May 7, 2026
b954a92
fix: update qr-pay and add-money tests with mocks for new KYC hooks
kushagrasarathe May 7, 2026
b55e5e1
fix: restore capacitor native routing overwritten by cherry-pick
kushagrasarathe May 7, 2026
b190665
fix: revert animations submodule to dev pointer
kushagrasarathe May 7, 2026
09eb992
Merge pull request #1952 from peanutprotocol/sync/cherry-pick-kyc-to-dev
kushagrasarathe May 7, 2026
7517baf
fix(manteca-withdraw): CodeRabbit follow-ups
jjramirezn May 7, 2026
edec755
Merge pull request #1951 from peanutprotocol/feat/manteca-withdraw-sp…
jjramirezn May 7, 2026
b6bc628
legal: read terms + privacy from content/, repoint hardcoded notion u…
0xkkonrad May 8, 2026
2cb6d6b
Update content submodule to latest main
github-actions[bot] May 8, 2026
062db94
Merge pull request #1954 from peanutprotocol/auto/update-content-2026…
Hugo0 May 8, 2026
8280ce3
feat(card): manual-grant users bypass maintenance gate
jjramirezn May 8, 2026
e8ab682
fix(card): bail maintenance redirect on cardInfo fetch error
jjramirezn May 8, 2026
77d7697
Merge pull request #1958 from peanutprotocol/feat/card-access-bypass-…
jjramirezn May 8, 2026
2435c8f
fix: correct profile menu item positioning
jjramirezn May 8, 2026
f80e8e2
Merge pull request #1960 from peanutprotocol/feat/fix-card
jjramirezn May 8, 2026
2eb1da3
feat(card): return collateral on lock/cancel via 1-tap signed withdraw
jjramirezn May 9, 2026
ab1f5c2
Merge pull request #1961 from peanutprotocol/feat/card-lock-cancel-co…
jjramirezn May 9, 2026
881833c
merge: sync main hotfixes into dev
kushagrasarathe May 10, 2026
e1afb44
fix: resolve typecheck errors from merge
kushagrasarathe May 10, 2026
c1a5358
Merge pull request #1963 from peanutprotocol/sync/main-to-dev-resolved
Hugo0 May 10, 2026
5f010da
fix(navigation): stop router.back() loops in add-money + card flows
Hugo0 May 11, 2026
459843c
fix(receipt): keep sender data visible after cancelling their own sen…
Hugo0 May 11, 2026
4a61a43
fix(navigation): address CodeRabbit findings
Hugo0 May 11, 2026
e1447dc
feat(card): receipt + decline copy reads synthetic declineCategory
jjramirezn May 11, 2026
ee1d102
fix(card-decline): nonBlank, narrow types, document fallthrough, tests
jjramirezn May 11, 2026
0ed4547
Merge pull request #1967 from peanutprotocol/feat/card-push-notificat…
jjramirezn May 11, 2026
543dec5
fix(qr-pay): replace all router.back() with explicit /home exit
Hugo0 May 12, 2026
1b53d32
review: lock cancelled-non-sendlink tokenAndNetwork + extract field gate
Hugo0 May 12, 2026
95df05d
Merge pull request #1966 from peanutprotocol/fix/cancelled-sendlink-r…
Hugo0 May 12, 2026
65981a0
refactor(navigation): consolidate back-button bug class behind useSaf…
Hugo0 May 12, 2026
808c2ba
fix(icons): restore MUI-era 18/16px sizing for Lucide icons in buttons
Hugo0 May 12, 2026
fce4ad8
refactor(navigation): simplify useSafeBack per /simplify review
Hugo0 May 12, 2026
0a1d7b5
refactor(button): extract icon sizes into Record map
Hugo0 May 12, 2026
26a4c42
Merge pull request #1971 from peanutprotocol/fix/lucide-icon-button-s…
Hugo0 May 12, 2026
a9f78fc
fix(icons): pass explicit size to Lucide icons rendered as Button chi…
Hugo0 May 12, 2026
a84aff9
feat(useSafeBack): add { replace: true } option for terminal flows
Hugo0 May 12, 2026
28c5522
Merge pull request #1965 from peanutprotocol/fix/navigation-back-butt…
Hugo0 May 12, 2026
447bff7
fix(proxy): honor long-running API calls; return 504 on upstream abort
Hugo0 May 12, 2026
b6457e7
fix(receipt): route entry-type gates through dual-shape predicates
Hugo0 May 12, 2026
b862e63
fix(flags): alias circle-flags' european_union.svg to /flags/eu.svg
Hugo0 May 12, 2026
b21c935
Merge pull request #1974 from peanutprotocol/fix/eu-flag-asset
Hugo0 May 12, 2026
1bc8f27
refactor: positive-identity provider gate + Provider/IntentKind types
Hugo0 May 12, 2026
e1acc88
chore: placeholder ESLint config with router.back() guard (commented)
Hugo0 May 12, 2026
c07e37f
fix(avatar): onError fallback to bank icon + integrity test for flag …
Hugo0 May 12, 2026
7a499e3
fix(icons): cap remaining Lucide icons at 24px to match MUI clamp
Hugo0 May 12, 2026
1ba725b
Merge pull request #1972 from peanutprotocol/fix/icon-children-sizing…
Hugo0 May 12, 2026
fe93ac8
Merge pull request #1977 from peanutprotocol/fix/flag-fallback-and-in…
Hugo0 May 12, 2026
543a531
chore(lint): wire ESLint as advisory CI job, rename misnamed 'lint' t…
Hugo0 May 12, 2026
7516aa8
refactor: type HistoryEntry.extraData, drop dead Bridge TI branch, fi…
Hugo0 May 12, 2026
4153e90
Merge pull request #1976 from peanutprotocol/chore/eslint-router-back
Hugo0 May 12, 2026
1c3ecea
Merge pull request #1973 from peanutprotocol/fix/post-decomplexify-en…
Hugo0 May 12, 2026
886a0b0
fix(useTransactionHistory): call both queries unconditionally to fix …
Hugo0 May 12, 2026
115d841
fix(test): narrow mode per-branch to satisfy hook overload signatures
Hugo0 May 12, 2026
8eaf694
Merge pull request #1978 from peanutprotocol/fix/use-transaction-hist…
Hugo0 May 12, 2026
8a5eb05
fix(card): decline-reason mapping + de-emphasize declined rows by gra…
jjramirezn May 12, 2026
c1bae36
merge: sync main hotfixes into dev (2026-05-12)
kushagrasarathe May 12, 2026
e4bc3a5
chore(test): add history rendering snapshot harness
May 12, 2026
273e17d
Merge pull request #1979 from peanutprotocol/feat/card-decline-rebala…
jjramirezn May 12, 2026
385fdcc
refactor(history): collapse strategies to single kind-keyed dispatch
May 12, 2026
b5a0fa2
refactor(history): kind-keyed completeHistoryEntry + ?kind= receipt URLs
May 12, 2026
2f2bfae
chore(history): delete EHistoryEntryType enum
May 12, 2026
f121ef7
feat(card): receipt-drawer copy for hold-release + pending auth
jjramirezn May 12, 2026
fabd8ba
docs(history): drop M2/M3/decomplexify narrative comments
May 12, 2026
48c9661
style: apply prettier formatting
May 12, 2026
671a8af
fix(card-auth-lifecycle): mutual-exclusion on receipt notes; sync-com…
jjramirezn May 12, 2026
ae19f30
Merge pull request #1980 from peanutprotocol/sync/main-to-dev-2026-05-12
kushagrasarathe May 12, 2026
479c4e7
Merge pull request #1981 from peanutprotocol/feat/card-auth-lifecycle
jjramirezn May 12, 2026
2ee6ad0
refactor(history): apply simplify review — kill narrative, add runtim…
May 12, 2026
3d8092e
test(history): bake render-snapshot baseline + apply FE QA audit find…
May 12, 2026
8ebb82c
style: prettier on render-snapshot fixtures
May 12, 2026
235f68f
fix(history): address CodeRabbit FE review findings
May 12, 2026
2d96d08
test(snapshot): populate render-baseline.json from real staging data
May 12, 2026
f403315
refactor(rain): rename outbound TransactionIntentKind → RainCollatera…
May 12, 2026
432410b
style: prettier on render-snapshot fixtures (post-real-data bake)
May 12, 2026
cf3b946
chore(test): redact EVM addresses + tx hashes from snapshot fixtures
May 12, 2026
e514e72
test(snapshot): re-bake fixture with new BE extraData fields
May 12, 2026
32ff2d3
chore(fixtures): fetch BE render-snapshot baseline at CI, drop FE copy
May 12, 2026
aa759b5
Merge pull request #1982 from peanutprotocol/decomplexify-phase-2
Hugo0 May 12, 2026
bf6ebdd
refactor: delete Next.js proxy layer — call PEANUT_API_URL directly
Hugo0 May 12, 2026
b4b3b0a
feat(country-list): surface top corridors above the alphabetical list
Hugo0 May 12, 2026
efb48e9
Merge pull request #1986 from peanutprotocol/feat/country-list-prefer…
Hugo0 May 12, 2026
55d72df
refactor: unify apiFetch+serverFetch; route fetchUser through apiFetch
Hugo0 May 12, 2026
dbebf08
Merge pull request #1975 from peanutprotocol/fix/proxy-timeout-honor-…
Hugo0 May 12, 2026
2d6cf0c
feat(auth): consume sliding-refresh JWT from /get-user
Hugo0 May 12, 2026
a432968
chore(activation): remove FE escape hatch made redundant by BE #749
Hugo0 May 12, 2026
00325ed
fix(auth): strip token unconditionally to handle falsy values
Hugo0 May 12, 2026
238a96a
Merge pull request #1988 from peanutprotocol/feat/jwt-sliding-refresh
Hugo0 May 12, 2026
1ec41ad
fix(carousel): add 7-day dismissal cooldown + suppress completed-acti…
Hugo0 May 12, 2026
0dae215
Merge pull request #1990 from peanutprotocol/fix/cta-cooldown-and-com…
Hugo0 May 12, 2026
06457ed
Merge pull request #1989 from peanutprotocol/chore/remove-activation-…
Hugo0 May 12, 2026
4c00363
fix(recipient): always prefer username, drop type-coupled predicate
Hugo0 May 12, 2026
71f4e15
hotfix(passkey): default PASSKEY_SERVER_URL to PEANUT_API_URL/passkeys
May 12, 2026
993e936
chore: prettier format zerodev.consts.ts
May 12, 2026
d39df0e
Merge remote-tracking branch 'origin/dev' into fix/recipient-display-…
Hugo0 May 12, 2026
0ac5b17
Merge pull request #1992 from peanutprotocol/fix/recipient-display-re…
Hugo0 May 12, 2026
9a8b21d
hotfix(passkey): same-origin rewrite + drop env-var footgun
May 12, 2026
3686c09
fix(history): drop wei→decimal parse for SEND_LINK amounts
Hugo0 May 12, 2026
35a2d02
fix(history): drop wei→decimal parse for SEND_LINK amounts (#1993)
Hugo0 May 12, 2026
886a718
test(history): regression guards for completeHistoryEntry amount cont…
Hugo0 May 12, 2026
2cd5124
fix(payments): payment input shows spendable balance and waits for co…
jjramirezn May 13, 2026
355b9c0
Merge pull request #1995 from peanutprotocol/fix/request-pay-spendable
jjramirezn May 13, 2026
73f73bc
feat(payments): pass chargeId to Rain withdraw prepare for request pa…
jjramirezn May 13, 2026
47a01cc
fix(payments): thread chargeId through confirm-view same-chain send too
jjramirezn May 13, 2026
8a388ec
Merge pull request #1996 from peanutprotocol/fix/request-pay-spendable
jjramirezn May 13, 2026
889a6cf
fix(navigation): close back-button gaps left by #1965
Hugo0 May 13, 2026
7100640
fix(navigation): migrate payment flow wrappers to useSafeBack
Hugo0 May 13, 2026
c1665c1
chore(rpc): drop Infura + Alchemy from client-side rpcUrls
Hugo0 May 13, 2026
1cd4ba5
fix(navigation): simplify review findings — add-to-wallet onDone + 6 …
Hugo0 May 13, 2026
cf6d941
chore(eslint): expand back-button guard to sibling patterns
Hugo0 May 13, 2026
92cd8f6
chore(rpc): also comment out verified-broken public RPCs
Hugo0 May 13, 2026
087b17f
chore(posthog): rename proxy /ingest/ → /relay/ to dodge ad blockers
Hugo0 May 13, 2026
2470f6f
chore(kernel): lazy-build non-Arb kernel clients via ensureClientForC…
Hugo0 May 13, 2026
db45b5c
merge: sync main into dev (Founder House badge) 2026-05-13
Hugo0 May 13, 2026
68f7b67
Merge pull request #1999 from peanutprotocol/sync/main-to-dev-2026-05-13
Hugo0 May 13, 2026
d12de68
chore(simplify): drop dead arbitrum import + unused infura/alchemy he…
Hugo0 May 13, 2026
0c8c0b3
chore(eslint): ban barrel imports + self-imports
Hugo0 May 13, 2026
ad4d784
Merge pull request #1997 from peanutprotocol/fix/card-subpage-back-loops
Hugo0 May 13, 2026
90e1328
Merge pull request #1994 from peanutprotocol/test/history-utils-regre…
Hugo0 May 13, 2026
df62fbb
fix(kernel): revert user dep on primary-init effect — caused rebuild …
Hugo0 May 13, 2026
c516016
Merge pull request #1998 from peanutprotocol/chore/remove-infura-alch…
Hugo0 May 13, 2026
a24b3c1
feat(sentry): tag events by environment so staging is filterable
May 13, 2026
27e8047
feat(history): pass data-testid through Global Card to TransactionCard
Hugo0 May 13, 2026
65850c3
Merge pull request #2001 from peanutprotocol/feat/transaction-card-te…
Hugo0 May 13, 2026
9bae410
fix(ui): icon sizing follow-ups + slider thumb fit
Hugo0 May 13, 2026
0c2a15d
fix(carousel): make the home-screen + notifications CTAs actually work
Hugo0 May 13, 2026
e57e351
fix(ui): bump home-carousel CTA close icon 10→16
Hugo0 May 13, 2026
ddb8894
fix(ui): shrink bottom-nav QR CTA icon 56→32
Hugo0 May 13, 2026
a7a601e
chore(console): drop Vercel Analytics, kill Base WAGMI 403s, exclude …
Hugo0 May 13, 2026
8dbef7c
fix(qr-drawer): prevent dismiss-on-drag-down duplication
Hugo0 May 13, 2026
becdbc9
refactor(carousel): simplify pass on the CTA fix
Hugo0 May 13, 2026
f63ee76
fix(ui): pin slider thumb height to h-12
Hugo0 May 13, 2026
9862d77
Merge pull request #2005 from peanutprotocol/fix/qr-drawer-duplication
Hugo0 May 13, 2026
92289de
Merge pull request #2004 from peanutprotocol/chore/post-merge-console…
Hugo0 May 13, 2026
53d14be
feat(ui): slider thumb passes over 'Slide to Proceed' label
Hugo0 May 13, 2026
db6626c
Merge pull request #2002 from peanutprotocol/fix/back-chevron-and-sup…
Hugo0 May 13, 2026
e970806
Merge pull request #2000 from peanutprotocol/feat/sentry-env-tagging
Hugo0 May 13, 2026
4b18ee9
fix(history): shorten UUID identifiers in feed + drawer
Hugo0 May 13, 2026
2785d8b
fix(ui): use lucide Ban icon for cancel-link/cancel-deposit buttons
Hugo0 May 13, 2026
b184409
Merge pull request #2006 from peanutprotocol/fix/history-uuid-display
Hugo0 May 13, 2026
2c16130
fix(pwa-status): use useSyncExternalStore for hydration-safe client s…
Hugo0 May 13, 2026
e2ab807
Merge pull request #2007 from peanutprotocol/fix/cancel-icon-match-sh…
Hugo0 May 13, 2026
03c8e7a
fix(qr-drawer): restore drag-down by adding a peek snap point
Hugo0 May 13, 2026
dbb7b07
Merge pull request #2008 from peanutprotocol/fix/qr-drawer-drag-feel
Hugo0 May 13, 2026
76e77aa
fix(ui): vertically center bottom-nav Home + Support
Hugo0 May 13, 2026
84b1817
Merge pull request #2009 from peanutprotocol/fix/bottom-nav-vertical-…
Hugo0 May 13, 2026
c57c28f
Merge pull request #2003 from peanutprotocol/fix/carousel-cta-click-p…
Hugo0 May 13, 2026
770341b
fix(receipt): trim CTA stack, host-aware share URLs, gate public page
Hugo0 May 13, 2026
9514c1b
refactor: simplify pass on shareableUrl + extend to invite/request links
Hugo0 May 13, 2026
353f1db
Merge pull request #2010 from peanutprotocol/fix/receipt-cta-overload…
Hugo0 May 13, 2026
19e325c
fix(qr-drawer): use buffer snap to absorb hard drags without duplication
Hugo0 May 13, 2026
7fada5a
Merge pull request #2012 from peanutprotocol/fix/qr-drawer-buffer-snap
Hugo0 May 13, 2026
83b0de2
fix(ui): revert bottom-nav QR button to qr-code icon
Hugo0 May 13, 2026
377f0f1
Merge pull request #2013 from peanutprotocol/fix/revert-scan-qr-to-qr…
Hugo0 May 13, 2026
373dc05
fix(payments): surface Rain cooldown error verbatim on every collater…
jjramirezn May 13, 2026
411e4df
fix(friendly-error): replace any with unknown + safe narrowing
jjramirezn May 13, 2026
16d0ebe
Merge pull request #2014 from peanutprotocol/fix/surface-rain-cooldow…
jjramirezn May 13, 2026
79064b0
fix(claim-link): fall back to latest contract version when link URL i…
jjramirezn May 13, 2026
b560872
fix: missing flag SVGs (Bonaire +5) and strip invite share copy
Hugo0 May 13, 2026
8e8d548
fix(carousel): handle Brave SDK-fail, kill QR-payment flicker, surfac…
Hugo0 May 13, 2026
e48f812
Merge pull request #2016 from peanutprotocol/fix/flags-and-share-copy
Hugo0 May 13, 2026
80d930c
fix(qr): mount scanner overlay once per layout
Hugo0 May 13, 2026
771992b
Merge pull request #2015 from peanutprotocol/fix/claim-link-version-f…
jjramirezn May 13, 2026
f8bfec5
fix(ui): icon sizing follow-ups from Koshagra QA
Hugo0 May 13, 2026
67f40fa
Merge pull request #2020 from peanutprotocol/fix/icon-sizing-qa-followup
Hugo0 May 13, 2026
74808c5
refactor(qr-overlay): drop parameter mutation + rename shadowed local
Hugo0 May 13, 2026
fe0e383
refactor(carousel): simplify pass — fix toast re-render loop, reuse d…
Hugo0 May 13, 2026
d9f4049
Merge pull request #2017 from peanutprotocol/fix/carousel-cta-brave-a…
Hugo0 May 13, 2026
06b11ef
fix(qr-overlay): re-cast recognizeQr() result to EQrType + prettier
Hugo0 May 13, 2026
6286468
fix(qr-overlay): apply CodeRabbit review fixes
Hugo0 May 13, 2026
a9ab864
revert: keep raw payload in qr_scanned PostHog event
Hugo0 May 13, 2026
063d927
Merge pull request #2019 from peanutprotocol/fix/qr-overlay-singleton
Hugo0 May 13, 2026
8aba664
test(types): assert no UI-callable route requires api-key
Hugo0 May 13, 2026
649316e
Merge pull request #2021 from peanutprotocol/fix/api-key-contract-test
Hugo0 May 13, 2026
f91d2e2
fix(xchain-withdraw): pass principal+fee USDC as kernel-required amount
jjramirezn May 13, 2026
47f08bb
fix(semantic-request): pass requiredUsdcAmount on cross-chain pay too
jjramirezn May 13, 2026
7ffef55
Merge pull request #2022 from peanutprotocol/fix/xchain-withdraw-pay-…
jjramirezn May 13, 2026
9198be7
fix(ui): profile copy-username icon size 24 → 20 (match sibling)
Hugo0 May 13, 2026
c050d2f
Merge pull request #2023 from peanutprotocol/fix/profile-copy-icon-size
Hugo0 May 13, 2026
9b66edc
Merge pull request #2026 from peanutprotocol/fix/stale-tos-requiremen…
kushagrasarathe May 14, 2026
423fb2b
Merge remote-tracking branch 'origin/main' into sync/main-to-dev-2026…
Hugo0 May 14, 2026
b8d0dfa
Merge pull request #2029 from peanutprotocol/sync/main-to-dev-2026-05-14
Hugo0 May 14, 2026
0d96a46
chore(types): refresh openapi snapshot from staging — pick up 7 new B…
Hugo0 May 14, 2026
e0444bf
feat(bug-bounty): home-carousel CTA + SUPPORT_SURVIVOR badge utils (#…
Hugo0 May 14, 2026
ad76a8b
chore(types): prettier-format api.openapi.json after regen
Hugo0 May 14, 2026
2d338d5
chore(prettier): ignore openapi snapshot + generated types
Hugo0 May 14, 2026
3a4a390
ci(openapi): auto-sync workflow — pull staging spec daily, open PR if…
Hugo0 May 14, 2026
65782ef
Merge pull request #2030 from peanutprotocol/chore/refresh-openapi-sn…
Hugo0 May 14, 2026
5842b4f
feat(observability): wire posthog.sentryIntegration for Sentry ↔ Post…
Hugo0 May 14, 2026
1b4cd7d
Merge pull request #2031 from peanutprotocol/feat/posthog-sentry-inte…
Hugo0 May 14, 2026
35371dc
feat(activity): lazy ENS reverse-lookup for unknown counterparties
Hugo0 May 14, 2026
5d48f88
simplify: trim ens-lookup comment to one line, inline hook arg
Hugo0 May 14, 2026
81695bd
Merge pull request #2032 from peanutprotocol/feat/ens-fallback-histor…
Hugo0 May 14, 2026
0045c3f
feat(invites): map 'survivor' invite code → SUPPORT_SURVIVOR badge
Hugo0 May 14, 2026
de75a0b
Merge pull request #2033 from peanutprotocol/feat/support-survivor-in…
Hugo0 May 14, 2026
722f257
chore(sentry): document Vercel env-scope footgun + force staging rebuild
Hugo0 May 14, 2026
9082d74
Merge pull request #2034 from peanutprotocol/chore/sentry-staging-reb…
Hugo0 May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .cursorrules
21 changes: 19 additions & 2 deletions .env.example
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
# ⚠ LOCAL DEV: start from mono root with ./scripts/dev — NOT `pnpm dev` here.
# The harness (engineering/qa/lib/servers.sh) overrides PEANUT_API_URL,
# NEXT_PUBLIC_PEANUT_API_URL, ports, chain IDs, bundler URLs, and the passkey
# check flag at process-start. Values below are ONLY used when you run
# `pnpm dev` in this subrepo directly (escape hatch — points at staging).
# Full docs: ../GETTING-STARTED.md → "Running the app locally"

export PEANUT_API_URL="https://api.staging.peanut.me"
export NEXT_PUBLIC_PEANUT_API_URL="https://api.staging.peanut.me"
export NEXT_PUBLIC_PEANUT_WS_URL="wss://api.staging.peanut.me"
# export PEANUT_API_URL="http://127.0.0.1:5000/" # If running api locally
# export NEXT_PUBLIC_PEANUT_API_URL="http://127.0.0.1:5000/" # If running api locally
# For local API (via mono/scripts/manual-test.sh the harness sets these itself):
# export PEANUT_API_URL="http://localhost:5050"
# export NEXT_PUBLIC_PEANUT_API_URL="http://localhost:5050"
# export NEXT_PUBLIC_PEANUT_WS_URL="ws://localhost:5050"

export PEANUT_API_KEY="" # See in docs.peanut.me

Expand Down Expand Up @@ -44,6 +53,14 @@ export NEXT_PUBLIC_ZERO_DEV_PASSKEY_SERVER_URL=""
export NEXT_PUBLIC_ZERO_DEV_RECOVERY_BUNDLER_URL=""
export NEXT_PUBLIC_POLYGON_PAYMASTER_URL=""
export NEXT_PUBLIC_POLYGON_BUNDLER_URL=""

# Peanut wallet chain & token (defaults to Arbitrum mainnet USDC)
# Override for testnets/other chains. Token values in raw units (USDC = 6 decimals)
export NEXT_PUBLIC_PEANUT_WALLET_CHAIN_ID=""
export NEXT_PUBLIC_PEANUT_WALLET_TOKEN=""
export NEXT_PUBLIC_PEANUT_WALLET_TOKEN_DECIMALS=""
export NEXT_PUBLIC_PEANUT_WALLET_TOKEN_SYMBOL=""
export NEXT_PUBLIC_PEANUT_WALLET_TOKEN_NAME=""
export NEXT_PUBLIC_BALANCE_WARNING_THRESHOLD=1
export NEXT_PUBLIC_BALANCE_WARNING_EXPIRY=15

Expand Down
5 changes: 5 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Snapshot baseline for the FE render contract — generated by the
# render-snapshot test in SNAPSHOT_MODE=write. Marking as
# linguist-generated collapses it in GitHub PR diffs (still tracked,
# still git-history-preserved).
src/components/TransactionDetails/__tests__/fixtures/render-baseline.json linguist-generated=true
76 changes: 76 additions & 0 deletions .github/workflows/capgo-deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Deploy OTA Update (Capgo)

on:
push:
branches: [main, dev]
workflow_dispatch:
inputs:
channel:
description: 'Capgo channel to deploy to'
required: true
default: 'staging'
type: choice
options:
- development
- staging
- production

concurrency:
group: capgo-deploy-${{ github.ref }}
cancel-in-progress: true

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: true
token: ${{ secrets.SUBMODULE_TOKEN }}

- uses: pnpm/action-setup@v4
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed
with:
version: 10

- uses: actions/setup-node@v4
with:
node-version: '21.1.0'
cache: 'pnpm'

- name: Install dependencies
run: pnpm install

- name: Build native static export
run: node scripts/native-build.js

- name: Verify build output
run: |
test -d out && test -f out/index.html || (echo "ERROR: out/ directory missing or incomplete" && exit 1)
echo "Bundle ready. File count: $(find out -type f | wc -l)"

- name: Determine channel
id: channel
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
echo "name=${{ github.event.inputs.channel }}" >> $GITHUB_OUTPUT
elif [ "${{ github.ref }}" = "refs/heads/main" ]; then
echo "name=production" >> $GITHUB_OUTPUT
else
echo "name=staging" >> $GITHUB_OUTPUT
fi

- name: Upload bundle to Capgo
run: |
npx @capgo/cli@latest bundle upload \
--channel ${{ steps.channel.outputs.name }} \
--apikey ${{ secrets.CAPGO_API_KEY }} \
--path ./out \
--auto-min-update-version \
--comment "${{ github.event.head_commit.message || 'Manual deploy' }}"
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical | ⚡ Quick win

Code injection vulnerability via unsanitized commit message.

The workflow directly interpolates ${{ github.event.head_commit.message }} into a shell command without sanitization. An attacker who can control commit messages (e.g., via a compromised account or malicious PR merge) could inject arbitrary shell commands.

🔒 Proposed fix: pass commit message via environment variable
         - name: Upload bundle to Capgo
+          env:
+            COMMIT_MSG: ${{ github.event.head_commit.message || 'Manual deploy' }}
           run: |
               npx `@capgo/cli`@latest bundle upload \
                 --channel ${{ steps.channel.outputs.name }} \
                 --apikey ${{ secrets.CAPGO_API_KEY }} \
                 --path ./out \
                 --auto-min-update-version \
-                --comment "${{ github.event.head_commit.message || 'Manual deploy' }}"
+                --comment "$COMMIT_MSG"

Environment variables are safely interpolated by the shell and prevent command injection.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
--comment "${{ github.event.head_commit.message || 'Manual deploy' }}"
- name: Upload bundle to Capgo
env:
COMMIT_MSG: ${{ github.event.head_commit.message || 'Manual deploy' }}
run: |
npx `@capgo/cli`@latest bundle upload \
--channel ${{ steps.channel.outputs.name }} \
--apikey ${{ secrets.CAPGO_API_KEY }} \
--path ./out \
--auto-min-update-version \
--comment "$COMMIT_MSG"
🧰 Tools
🪛 GitHub Check: CodeQL

[warning] 69-69: Code injection
Potential code injection in ${{ github.event.head_commit.message || 'Manual deploy' }}, which may be controlled by an external user.

🤖 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 @.github/workflows/capgo-deploy.yml at line 69, The workflow interpolates the
commit message directly into a shell arg using --comment "${{
github.event.head_commit.message || 'Manual deploy' }}", which allows command
injection; fix by setting an environment variable (e.g., COMMIT_MESSAGE: ${{
github.event.head_commit.message || 'Manual deploy' }}) on the job or step and
then reference that env var in the command as --comment "$COMMIT_MESSAGE"
(ensure double quotes around the shell variable) so the shell treats the value
as data, not code.


- name: Deployment summary
run: |
echo "## OTA Deployment" >> $GITHUB_STEP_SUMMARY
echo "- **Channel:** ${{ steps.channel.outputs.name }}" >> $GITHUB_STEP_SUMMARY
echo "- **Commit:** ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY
echo "- **Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed
160 changes: 160 additions & 0 deletions .github/workflows/code-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
name: Code analysis

# Static-analysis diff comment on every PR. Runs the painscore +
# complexity + dup + churn analyzers on HEAD and base, posts the diff
# as an idempotent PR comment.
#
# Tool lives in mono/engineering/code-analysis. CI clones mono using
# SUBMODULE_TOKEN (same secret used for peanut-content sync) at the
# ref pinned by the MONO_REF repo variable (default 'main').
#
# Threshold gate is advisory for the first 2 weeks (continue-on-error).
# Tighten by removing continue-on-error once the team is acclimatised.

on:
pull_request:
branches: [main, master, dev]
# Skip code-analysis on doc-only commits — pure overhead. Not a
# required gate (just a comment), so paths-ignore is safe here.
paths-ignore:
- '**/*.md'
- 'docs/**'
- '.gitignore'
- '.editorconfig'
- 'src/content/**'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read
pull-requests: write

env:
MONO_REF: ${{ vars.MONO_REF || 'main' }}

jobs:
analyze:
runs-on: ubuntu-latest
steps:
- name: Checkout PR head
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: false

- uses: pnpm/action-setup@v4
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed
with:
version: 10

- uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'

- name: Clone mono (for analyzer)
env:
TOKEN: ${{ secrets.MONO_READ_TOKEN }}
run: |
git clone --depth 1 --branch "$MONO_REF" \
"https://x-access-token:${TOKEN}@github.com/peanutprotocol/mono.git" /tmp/mono

- name: Install analyzer deps
working-directory: /tmp/mono/engineering/code-analysis
run: pnpm install --frozen-lockfile

# ---- HEAD analysis
- name: Analyze HEAD
run: |
node /tmp/mono/engineering/code-analysis/bin/analyze.mjs \
--root . \
--include src \
--extensions .ts,.tsx \
--analyzers complexity,cognitive,structural-dup,dead-code,import-graph,churn,type-errors,ts-quality,react,nextjs \
--filter jsx-aware \
--use-ast \
--parallel \
--label peanut-ui-head \
--out-dir analysis-head

# ---- BASE analysis (fetch + worktree the PR base ref)
- name: Checkout base ref into a worktree
run: |
git fetch origin "${{ github.base_ref }}":base-ref
git worktree add ../base-tree base-ref

- name: Analyze base
run: |
node /tmp/mono/engineering/code-analysis/bin/analyze.mjs \
--root ../base-tree \
--include src \
--extensions .ts,.tsx \
--analyzers complexity,cognitive,structural-dup,dead-code,import-graph,churn,type-errors,ts-quality,react,nextjs \
--filter jsx-aware \
--use-ast \
--parallel \
--label peanut-ui-base \
--out-dir analysis-base

# ---- Diff
- name: Diff
run: |
node /tmp/mono/engineering/code-analysis/bin/diff.mjs \
--base analysis-base \
--head analysis-head \
--out diff.md \
--out-json diff.json

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: code-analysis-${{ github.event.pull_request.number }}
path: |
analysis-head/
diff.md
diff.json
retention-days: 14

# ---- PR comment (idempotent — re-edits prior comment)
- name: Comment on PR
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const body = fs.readFileSync('diff.md', 'utf-8');
const { data: comments } = await github.rest.issues.listComments({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const tag = '<!-- code-analysis -->';
const existing = comments.find(c => c.body && c.body.includes(tag));
const final = tag + '\n' + body;
if (existing) {
await github.rest.issues.updateComment({
comment_id: existing.id,
owner: context.repo.owner,
repo: context.repo.repo,
body: final,
});
} else {
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: final,
});
}

# ---- Regression gate (advisory for first 2 weeks)
- name: Fail if regression > 50 net findings
continue-on-error: true
run: |
NET=$(node -e "console.log(require('./diff.json').counts.net)")
echo "Net new findings: $NET"
if [ "$NET" -gt 50 ]; then
echo "::warning::+$NET net findings (threshold: 50)"
exit 1
fi
2 changes: 1 addition & 1 deletion .github/workflows/indexnow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
submodules: true
token: ${{ secrets.SUBMODULE_TOKEN }}

- uses: pnpm/action-setup@v4
- uses: pnpm/action-setup@7088e561eb65bb68695d245aa206f005ef30921d # v4.1.0
- uses: actions/setup-node@v4
with:
node-version-file: '.node-version'
Expand Down
8 changes: 8 additions & 0 deletions .github/workflows/preview.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ on:
branches:
- main
- dev
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
Deploy-Preview:
Expand Down
47 changes: 47 additions & 0 deletions .github/workflows/supply-chain-check.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: Supply-chain freshness

# Blocks PRs that add or upgrade a dependency to a version published less than
# 14 days ago. Defense against compromised npm packages that get yanked within
# hours of publish. Policy doc: AGENTS.md → "Supply chain".

on:
pull_request:
branches: ['**']
paths:
- 'package.json'
- 'pnpm-lock.yaml'
- '.npmrc'
- 'scripts/check-min-release-age.mjs'
- '.github/workflows/supply-chain-check.yml'
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true

jobs:
check-min-release-age:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-node@v4
with:
node-version: '21.1.0'

- uses: pnpm/action-setup@v4
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed
with:
version: 10

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Resolve base package.json
run: |
git fetch origin "${{ github.base_ref }}"
git show "origin/${{ github.base_ref }}:package.json" > /tmp/base-package.json

- name: Check min release age
run: node scripts/check-min-release-age.mjs --base /tmp/base-package.json
Comment thread
jjramirezn marked this conversation as resolved.
Dismissed
Loading
Loading