├── .commitlintrc.json ├── .eslintignore ├── .eslintrc.cjs ├── .gitignore ├── .husky ├── commit-msg └── pre-commit ├── .nvmrc ├── .prettierignore ├── .vscode ├── extensions.json ├── launch.json ├── settings.json └── tasks.json ├── LICENSE ├── README.md ├── app ├── (dashboard) │ └── dashboard │ │ ├── layout.tsx │ │ ├── page.tsx │ │ ├── profile │ │ └── page.tsx │ │ ├── submit │ │ └── page.tsx │ │ └── subscription │ │ └── page.tsx ├── (general) │ ├── chain │ │ └── [chainSlug] │ │ │ └── page.tsx │ ├── layout.tsx │ ├── page.tsx │ ├── pricing │ │ └── page.tsx │ ├── privacy │ │ └── page.tsx │ └── terms │ │ └── page.tsx ├── api │ ├── app │ │ ├── user │ │ │ └── route.ts │ │ └── users │ │ │ └── route.ts │ ├── arbitrum │ │ └── label │ │ │ └── route.ts │ ├── auth │ │ └── [...nextauth] │ │ │ └── route.ts │ ├── base │ │ └── label │ │ │ └── route.ts │ ├── bitcoin │ │ └── label │ │ │ └── route.ts │ ├── chain │ │ └── [chainSlug] │ │ │ └── route.ts │ ├── dashboard │ │ └── user │ │ │ └── route.ts │ ├── ethereum │ │ ├── label │ │ │ └── route.ts │ │ ├── mev_labels │ │ │ └── route.ts │ │ ├── mev_search │ │ │ └── route.ts │ │ └── search │ │ │ └── route.ts │ ├── labels │ │ └── [chainSlug] │ │ │ ├── filter │ │ │ └── route.ts │ │ │ └── route.ts │ ├── optimism │ │ └── label │ │ │ └── route.ts │ ├── payment │ │ └── create-checkout │ │ │ └── route.ts │ ├── pricing │ │ └── tiers │ │ │ └── route.ts │ ├── solana │ │ ├── label │ │ │ └── route.ts │ │ └── search │ │ │ └── route.ts │ ├── swagger.json │ └── webhook │ │ └── route.ts ├── auth │ ├── signin │ │ └── page.tsx │ └── verify-request │ │ └── page.tsx ├── layout.tsx └── template.tsx ├── assets └── fonts │ ├── Inter-Bold.ttf │ ├── Inter-Regular.ttf │ └── SF-Pro-Display-Medium.otf ├── commitlint.config.js ├── components.json ├── components ├── app │ ├── app-account-form.tsx │ ├── app-activity-filter.tsx │ ├── app-custom-hits.tsx │ ├── app-finding-filter.tsx │ ├── app-grid.tsx │ ├── app-pricing-radio.tsx │ ├── app-users-table.tsx │ ├── chain-community-columns.tsx │ ├── chain-community-data-table-filter-bar.tsx │ ├── chain-community-data-table-filter-checkbox.tsx │ ├── chain-community-data-table-filter-command.tsx │ ├── chain-community-data-table-filter-reset-button.tsx │ ├── chain-community-data-table-pagination.tsx │ ├── chain-community-data-table.tsx │ ├── dashboard-copy-apikey.tsx │ ├── dashboard-free-tier-card.tsx │ ├── dashboard-generate-apikeys-dialog.tsx │ ├── dashboard-payment-method-section.tsx │ ├── dashboard-pricing-card.tsx │ ├── dashboard-submit-bulk-labels.tsx │ ├── dashboard-submit-label-confirm.tsx │ ├── dashboard-submit-label.tsx │ ├── dashboard-summary-section.tsx │ ├── dashboard-table-apikeys.tsx │ ├── pricing-client.tsx │ ├── pricing-loading.tsx │ ├── subscription-actions.tsx │ ├── subscription-client.tsx │ └── subscription-loading.tsx ├── layout │ ├── chain-beam.tsx │ ├── footer.tsx │ ├── logged-user.tsx │ ├── main-nav.tsx │ ├── page-header.tsx │ ├── page-section.tsx │ ├── sidebar-nav.tsx │ └── site-header.tsx ├── providers │ ├── framer-wrapper.tsx │ ├── root-provider.tsx │ ├── search-wrapper.tsx │ └── tailwind-indicator.tsx ├── shared │ ├── bento.tsx │ ├── copy-button.tsx │ ├── counting-up.tsx │ ├── delete-apikey.tsx │ ├── icons.tsx │ ├── is-dark-theme.tsx │ ├── is-light-theme.tsx │ ├── light-dark-image.tsx │ ├── link-component.tsx │ ├── list-item.tsx │ ├── mode-toggle.tsx │ ├── number-ticker.tsx │ ├── opensource.tsx │ ├── pricing-info.tsx │ ├── search-bar.tsx │ ├── search-box.tsx │ ├── table │ │ ├── table-body.tsx │ │ ├── table-core.tsx │ │ ├── table-head.tsx │ │ └── table-pagination.tsx │ ├── time-from-epoch.tsx │ ├── time-from-utc.tsx │ └── update-apikey-name.tsx ├── suggest-chain-modal.tsx └── ui │ ├── accordion.tsx │ ├── address.tsx │ ├── alert-dialog.tsx │ ├── animated-beam.tsx │ ├── avatar.tsx │ ├── avatarGroup.tsx │ ├── badge.tsx │ ├── bento-grid.tsx │ ├── button.tsx │ ├── card.tsx │ ├── checkbox.tsx │ ├── command.tsx │ ├── dialog.tsx │ ├── dropdown-menu.tsx │ ├── file-upload.tsx │ ├── floating-label.tsx │ ├── form.tsx │ ├── glowing-stars.tsx │ ├── gradual-spacing.tsx │ ├── hover-border-gradient.tsx │ ├── input-with-addons.tsx │ ├── input.tsx │ ├── kbd.tsx │ ├── label.tsx │ ├── multi-select.tsx │ ├── navigation-menu.tsx │ ├── page-header.tsx │ ├── popover.tsx │ ├── progress.tsx │ ├── radio-group.tsx │ ├── scroll-area.tsx │ ├── select.tsx │ ├── separator.tsx │ ├── sheet.tsx │ ├── shell.tsx │ ├── skeleton.tsx │ ├── spotlight.tsx │ ├── switch.tsx │ ├── table.tsx │ ├── tabs.tsx │ ├── textarea.tsx │ ├── toast.tsx │ ├── toaster.tsx │ ├── toggle-group.tsx │ ├── toggle.tsx │ ├── tooltip.tsx │ └── wobble-card.tsx ├── config ├── badge-categories.ts ├── blockchain-networks.ts ├── chains.ts ├── data-table.ts ├── design.ts ├── lemonsqueezy.ts ├── menu-dashboard.ts ├── menu-resources.ts ├── schema.ts ├── site.ts └── theme.ts ├── data └── walletlabels-api-endpoints.ts ├── env.mjs ├── integrations └── siwe │ └── README.md ├── lib ├── app │ ├── actions.ts │ ├── api-key.ts │ ├── get-app-users.ts │ ├── label.ts │ └── user-profile.ts ├── assemble-types.ts ├── fonts.ts ├── get-crypto-icons.ts ├── hooks │ ├── use-clipboard.tsx │ ├── use-data-table.ts │ ├── use-debounce.ts │ ├── use-grid-columns.ts │ ├── use-grid-content.ts │ ├── use-intersection-observer.ts │ ├── use-is-mounted.tsx │ ├── use-scroll.ts │ ├── use-tiers.ts │ ├── use-toast.ts │ ├── use-update-search-params.ts │ └── use-user.ts ├── mongodb.ts ├── prisma.ts ├── query-params.ts ├── session.ts ├── state │ └── color-mode.ts ├── typeguards.ts ├── types │ ├── api.ts │ └── apigee.ts └── utils │ ├── api.ts │ ├── color-picker.ts │ ├── get-network-color.ts │ ├── index.ts │ ├── label.ts │ └── motion.ts ├── lint-staged.config.js ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── prettier.config.js ├── prisma ├── generated │ └── client │ │ ├── default.d.ts │ │ ├── default.js │ │ ├── edge.d.ts │ │ ├── edge.js │ │ ├── index-browser.js │ │ ├── index.d.ts │ │ ├── index.js │ │ ├── package.json │ │ ├── query_engine-windows.dll.node │ │ ├── runtime │ │ ├── edge-esm.js │ │ ├── edge.js │ │ ├── index-browser.d.ts │ │ ├── index-browser.js │ │ ├── library.d.ts │ │ ├── library.js │ │ ├── react-native.js │ │ └── wasm.js │ │ ├── schema.prisma │ │ ├── wasm.d.ts │ │ └── wasm.js ├── migrations │ ├── 20241219052250_new │ │ └── migration.sql │ └── migration_lock.toml └── schema.prisma ├── public ├── assets │ ├── 32 │ │ └── color │ │ │ ├── $pac.png │ │ │ ├── 0xbtc.png │ │ │ ├── 1inch.png │ │ │ ├── 2give.png │ │ │ ├── aave.png │ │ │ ├── abt.png │ │ │ ├── act.png │ │ │ ├── actn.png │ │ │ ├── ada.png │ │ │ ├── add.png │ │ │ ├── adx.png │ │ │ ├── ae.png │ │ │ ├── aeon.png │ │ │ ├── aeur.png │ │ │ ├── agi.png │ │ │ ├── agrs.png │ │ │ ├── aion.png │ │ │ ├── algo.png │ │ │ ├── amb.png │ │ │ ├── amp.png │ │ │ ├── ampl.png │ │ │ ├── ankr.png │ │ │ ├── ant.png │ │ │ ├── ape.png │ │ │ ├── apex.png │ │ │ ├── appc.png │ │ │ ├── ardr.png │ │ │ ├── arg.png │ │ │ ├── ark.png │ │ │ ├── arn.png │ │ │ ├── arnx.png │ │ │ ├── ary.png │ │ │ ├── ast.png │ │ │ ├── atlas.png │ │ │ ├── atm.png │ │ │ ├── atom.png │ │ │ ├── audr.png │ │ │ ├── aury.png │ │ │ ├── auto.png │ │ │ ├── avax.png │ │ │ ├── aywa.png │ │ │ ├── bab.png │ │ │ ├── bal.png │ │ │ ├── band.png │ │ │ ├── bat.png │ │ │ ├── bay.png │ │ │ ├── bcbc.png │ │ │ ├── bcc.png │ │ │ ├── bcd.png │ │ │ ├── bch.png │ │ │ ├── bcio.png │ │ │ ├── bcn.png │ │ │ ├── bco.png │ │ │ ├── bcpt.png │ │ │ ├── bdl.png │ │ │ ├── beam.png │ │ │ ├── bela.png │ │ │ ├── bix.png │ │ │ ├── blcn.png │ │ │ ├── blk.png │ │ │ ├── block.png │ │ │ ├── blz.png │ │ │ ├── bnb.png │ │ │ ├── bnt.png │ │ │ ├── bnty.png │ │ │ ├── booty.png │ │ │ ├── bos.png │ │ │ ├── bpt.png │ │ │ ├── bq.png │ │ │ ├── brd.png │ │ │ ├── bsd.png │ │ │ ├── bsv.png │ │ │ ├── btc.png │ │ │ ├── btcd.png │ │ │ ├── btch.png │ │ │ ├── btcp.png │ │ │ ├── btcz.png │ │ │ ├── btdx.png │ │ │ ├── btg.png │ │ │ ├── btm.png │ │ │ ├── bts.png │ │ │ ├── btt.png │ │ │ ├── btx.png │ │ │ ├── burst.png │ │ │ ├── bze.png │ │ │ ├── call.png │ │ │ ├── cc.png │ │ │ ├── cdn.png │ │ │ ├── cdt.png │ │ │ ├── cenz.png │ │ │ ├── chain.png │ │ │ ├── chat.png │ │ │ ├── chips.png │ │ │ ├── chsb.png │ │ │ ├── chz.png │ │ │ ├── cix.png │ │ │ ├── clam.png │ │ │ ├── cloak.png │ │ │ ├── cmm.png │ │ │ ├── cmt.png │ │ │ ├── cnd.png │ │ │ ├── cnx.png │ │ │ ├── cny.png │ │ │ ├── cob.png │ │ │ ├── colx.png │ │ │ ├── comp.png │ │ │ ├── coqui.png │ │ │ ├── cred.png │ │ │ ├── crpt.png │ │ │ ├── crv.png │ │ │ ├── crw.png │ │ │ ├── cs.png │ │ │ ├── ctr.png │ │ │ ├── ctxc.png │ │ │ ├── cvc.png │ │ │ ├── d.png │ │ │ ├── dai.png │ │ │ ├── dash.png │ │ │ ├── dat.png │ │ │ ├── data.png │ │ │ ├── dbc.png │ │ │ ├── dcn.png │ │ │ ├── dcr.png │ │ │ ├── deez.png │ │ │ ├── dent.png │ │ │ ├── dew.png │ │ │ ├── dgb.png │ │ │ ├── dgd.png │ │ │ ├── dlt.png │ │ │ ├── dnt.png │ │ │ ├── dock.png │ │ │ ├── doge.png │ │ │ ├── dot.png │ │ │ ├── drgn.png │ │ │ ├── drop.png │ │ │ ├── dta.png │ │ │ ├── dth.png │ │ │ ├── dtr.png │ │ │ ├── ebst.png │ │ │ ├── eca.png │ │ │ ├── edg.png │ │ │ ├── edo.png │ │ │ ├── edoge.png │ │ │ ├── ela.png │ │ │ ├── elec.png │ │ │ ├── elf.png │ │ │ ├── elix.png │ │ │ ├── ella.png │ │ │ ├── emb.png │ │ │ ├── emc.png │ │ │ ├── emc2.png │ │ │ ├── eng.png │ │ │ ├── enj.png │ │ │ ├── entrp.png │ │ │ ├── eon.png │ │ │ ├── eop.png │ │ │ ├── eos.png │ │ │ ├── eqli.png │ │ │ ├── equa.png │ │ │ ├── etc.png │ │ │ ├── eth.png │ │ │ ├── ethos.png │ │ │ ├── etn.png │ │ │ ├── etp.png │ │ │ ├── eur.png │ │ │ ├── evx.png │ │ │ ├── exmo.png │ │ │ ├── exp.png │ │ │ ├── fair.png │ │ │ ├── fct.png │ │ │ ├── fida.png │ │ │ ├── fil.png │ │ │ ├── fjc.png │ │ │ ├── fldc.png │ │ │ ├── flo.png │ │ │ ├── flux.png │ │ │ ├── fsn.png │ │ │ ├── ftc.png │ │ │ ├── fuel.png │ │ │ ├── fun.png │ │ │ ├── game.png │ │ │ ├── gas.png │ │ │ ├── gbp.png │ │ │ ├── gbx.png │ │ │ ├── gbyte.png │ │ │ ├── generic.png │ │ │ ├── gin.png │ │ │ ├── glxt.png │ │ │ ├── gmr.png │ │ │ ├── gmt.png │ │ │ ├── gno.png │ │ │ ├── gnt.png │ │ │ ├── gold.png │ │ │ ├── grc.png │ │ │ ├── grin.png │ │ │ ├── grs.png │ │ │ ├── grt.png │ │ │ ├── gsc.png │ │ │ ├── gto.png │ │ │ ├── gup.png │ │ │ ├── gusd.png │ │ │ ├── gvt.png │ │ │ ├── gxs.png │ │ │ ├── gzr.png │ │ │ ├── hight.png │ │ │ ├── hns.png │ │ │ ├── hodl.png │ │ │ ├── hot.png │ │ │ ├── hpb.png │ │ │ ├── hsr.png │ │ │ ├── ht.png │ │ │ ├── html.png │ │ │ ├── huc.png │ │ │ ├── husd.png │ │ │ ├── hush.png │ │ │ ├── icn.png │ │ │ ├── icp.png │ │ │ ├── icx.png │ │ │ ├── ignis.png │ │ │ ├── ilk.png │ │ │ ├── ink.png │ │ │ ├── ins.png │ │ │ ├── ion.png │ │ │ ├── iop.png │ │ │ ├── iost.png │ │ │ ├── iotx.png │ │ │ ├── iq.png │ │ │ ├── itc.png │ │ │ ├── jnt.png │ │ │ ├── jpy.png │ │ │ ├── kcs.png │ │ │ ├── kin.png │ │ │ ├── klown.png │ │ │ ├── kmd.png │ │ │ ├── knc.png │ │ │ ├── krb.png │ │ │ ├── ksm.png │ │ │ ├── lbc.png │ │ │ ├── lend.png │ │ │ ├── leo.png │ │ │ ├── link.png │ │ │ ├── lkk.png │ │ │ ├── loom.png │ │ │ ├── lpt.png │ │ │ ├── lrc.png │ │ │ ├── lsk.png │ │ │ ├── ltc.png │ │ │ ├── lun.png │ │ │ ├── maid.png │ │ │ ├── mana.png │ │ │ ├── matic.png │ │ │ ├── max.png │ │ │ ├── mcap.png │ │ │ ├── mco.png │ │ │ ├── mda.png │ │ │ ├── mds.png │ │ │ ├── med.png │ │ │ ├── meetone.png │ │ │ ├── mft.png │ │ │ ├── miota.png │ │ │ ├── mith.png │ │ │ ├── mkr.png │ │ │ ├── mln.png │ │ │ ├── mnx.png │ │ │ ├── mnz.png │ │ │ ├── moac.png │ │ │ ├── mod.png │ │ │ ├── mona.png │ │ │ ├── msr.png │ │ │ ├── mth.png │ │ │ ├── mtl.png │ │ │ ├── music.png │ │ │ ├── mzc.png │ │ │ ├── nano.png │ │ │ ├── nas.png │ │ │ ├── nav.png │ │ │ ├── ncash.png │ │ │ ├── ndz.png │ │ │ ├── nebl.png │ │ │ ├── neo.png │ │ │ ├── neos.png │ │ │ ├── neu.png │ │ │ ├── nexo.png │ │ │ ├── ngc.png │ │ │ ├── nio.png │ │ │ ├── nkn.png │ │ │ ├── nlc2.png │ │ │ ├── nlg.png │ │ │ ├── nmc.png │ │ │ ├── nmr.png │ │ │ ├── npxs.png │ │ │ ├── ntbc.png │ │ │ ├── nuls.png │ │ │ ├── nxs.png │ │ │ ├── nxt.png │ │ │ ├── oax.png │ │ │ ├── ok.png │ │ │ ├── omg.png │ │ │ ├── omni.png │ │ │ ├── one.png │ │ │ ├── ong.png │ │ │ ├── ont.png │ │ │ ├── oot.png │ │ │ ├── ost.png │ │ │ ├── ox.png │ │ │ ├── oxt.png │ │ │ ├── oxy.png │ │ │ ├── part.png │ │ │ ├── pasc.png │ │ │ ├── pasl.png │ │ │ ├── pax.png │ │ │ ├── paxg.png │ │ │ ├── pay.png │ │ │ ├── payx.png │ │ │ ├── pink.png │ │ │ ├── pirl.png │ │ │ ├── pivx.png │ │ │ ├── plr.png │ │ │ ├── poa.png │ │ │ ├── poe.png │ │ │ ├── polis.png │ │ │ ├── poly.png │ │ │ ├── pot.png │ │ │ ├── powr.png │ │ │ ├── ppc.png │ │ │ ├── ppp.png │ │ │ ├── ppt.png │ │ │ ├── pre.png │ │ │ ├── prl.png │ │ │ ├── pungo.png │ │ │ ├── pura.png │ │ │ ├── qash.png │ │ │ ├── qiwi.png │ │ │ ├── qlc.png │ │ │ ├── qnt.png │ │ │ ├── qrl.png │ │ │ ├── qsp.png │ │ │ ├── qtum.png │ │ │ ├── r.png │ │ │ ├── rads.png │ │ │ ├── rap.png │ │ │ ├── ray.png │ │ │ ├── rcn.png │ │ │ ├── rdd.png │ │ │ ├── rdn.png │ │ │ ├── ren.png │ │ │ ├── rep.png │ │ │ ├── repv2.png │ │ │ ├── req.png │ │ │ ├── rhoc.png │ │ │ ├── ric.png │ │ │ ├── rise.png │ │ │ ├── rlc.png │ │ │ ├── rpx.png │ │ │ ├── rub.png │ │ │ ├── rvn.png │ │ │ ├── ryo.png │ │ │ ├── safe.png │ │ │ ├── safemoon.png │ │ │ ├── sai.png │ │ │ ├── salt.png │ │ │ ├── san.png │ │ │ ├── sand.png │ │ │ ├── sbd.png │ │ │ ├── sberbank.png │ │ │ ├── sc.png │ │ │ ├── ser.png │ │ │ ├── shift.png │ │ │ ├── sib.png │ │ │ ├── sin.png │ │ │ ├── skl.png │ │ │ ├── sky.png │ │ │ ├── slr.png │ │ │ ├── sls.png │ │ │ ├── smart.png │ │ │ ├── sngls.png │ │ │ ├── snm.png │ │ │ ├── snt.png │ │ │ ├── snx.png │ │ │ ├── soc.png │ │ │ ├── sol.png │ │ │ ├── spacehbit.png │ │ │ ├── spank.png │ │ │ ├── sphtx.png │ │ │ ├── srn.png │ │ │ ├── stak.png │ │ │ ├── start.png │ │ │ ├── steem.png │ │ │ ├── storj.png │ │ │ ├── storm.png │ │ │ ├── stox.png │ │ │ ├── stq.png │ │ │ ├── strat.png │ │ │ ├── stx.png │ │ │ ├── sub.png │ │ │ ├── sumo.png │ │ │ ├── sushi.png │ │ │ ├── sys.png │ │ │ ├── taas.png │ │ │ ├── tau.png │ │ │ ├── tbx.png │ │ │ ├── tel.png │ │ │ ├── ten.png │ │ │ ├── tern.png │ │ │ ├── tgch.png │ │ │ ├── theta.png │ │ │ ├── tix.png │ │ │ ├── tkn.png │ │ │ ├── tks.png │ │ │ ├── tnb.png │ │ │ ├── tnc.png │ │ │ ├── tnt.png │ │ │ ├── tomo.png │ │ │ ├── tpay.png │ │ │ ├── trig.png │ │ │ ├── trtl.png │ │ │ ├── trx.png │ │ │ ├── tusd.png │ │ │ ├── tzc.png │ │ │ ├── ubq.png │ │ │ ├── uma.png │ │ │ ├── uni.png │ │ │ ├── unity.png │ │ │ ├── usd.png │ │ │ ├── usdc.png │ │ │ ├── usdt.png │ │ │ ├── utk.png │ │ │ ├── veri.png │ │ │ ├── vet.png │ │ │ ├── via.png │ │ │ ├── vib.png │ │ │ ├── vibe.png │ │ │ ├── vivo.png │ │ │ ├── vrc.png │ │ │ ├── vrsc.png │ │ │ ├── vtc.png │ │ │ ├── vtho.png │ │ │ ├── wabi.png │ │ │ ├── wan.png │ │ │ ├── waves.png │ │ │ ├── wax.png │ │ │ ├── wbtc.png │ │ │ ├── wgr.png │ │ │ ├── wicc.png │ │ │ ├── wings.png │ │ │ ├── wpr.png │ │ │ ├── wtc.png │ │ │ ├── x.png │ │ │ ├── xas.png │ │ │ ├── xbc.png │ │ │ ├── xbp.png │ │ │ ├── xby.png │ │ │ ├── xcp.png │ │ │ ├── xdn.png │ │ │ ├── xem.png │ │ │ ├── xin.png │ │ │ ├── xlm.png │ │ │ ├── xmcc.png │ │ │ ├── xmg.png │ │ │ ├── xmo.png │ │ │ ├── xmr.png │ │ │ ├── xmy.png │ │ │ ├── xp.png │ │ │ ├── xpa.png │ │ │ ├── xpm.png │ │ │ ├── xpr.png │ │ │ ├── xrp.png │ │ │ ├── xsg.png │ │ │ ├── xtz.png │ │ │ ├── xuc.png │ │ │ ├── xvc.png │ │ │ ├── xvg.png │ │ │ ├── xzc.png │ │ │ ├── yfi.png │ │ │ ├── yoyow.png │ │ │ ├── zcl.png │ │ │ ├── zec.png │ │ │ ├── zel.png │ │ │ ├── zen.png │ │ │ ├── zest.png │ │ │ ├── zil.png │ │ │ ├── zilla.png │ │ │ └── zrx.png │ ├── logo.svg │ └── placeholder.png ├── bento │ ├── arkham-data-logo.jpg │ ├── etherscan-logo.png │ └── nansen-logo.png ├── crypto │ ├── ethereum-eth-logo.png │ └── solana-sol-logo.png ├── favicon.ico ├── favicons │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── apple-touch-icon.png │ ├── favicon-16x16.png │ └── favicon-32x32.png ├── icons │ ├── MoonIcon.svg │ ├── NetworkArbitrumTest.svg │ ├── NetworkAvalanche.svg │ ├── NetworkBaseTest.svg │ ├── NetworkCelo.svg │ ├── NetworkCeloTest.svg │ ├── NetworkEthereum.svg │ ├── NetworkEthereumTest.svg │ ├── NetworkGnosis.svg │ └── SunIcon.svg ├── integrations │ ├── aave.png │ ├── aave │ │ └── logos │ │ │ ├── arbitrum.png │ │ │ ├── ethereum.png │ │ │ ├── optimism.png │ │ │ └── polygon.png │ ├── arweave-dark.png │ ├── arweave-light.png │ ├── connext.png │ ├── connext │ │ └── logos │ │ │ ├── assets │ │ │ ├── aleth.png │ │ │ ├── alusd.png │ │ │ ├── bnb.png │ │ │ ├── boba.png │ │ │ ├── btc.png │ │ │ ├── dai.png │ │ │ ├── eth.png │ │ │ ├── fei.png │ │ │ ├── gno.png │ │ │ ├── grt.png │ │ │ ├── kp3r.png │ │ │ ├── magic.png │ │ │ ├── matic.png │ │ │ ├── nextdai.png │ │ │ ├── nextkp3r.png │ │ │ ├── nextmatic.png │ │ │ ├── nextusdc.png │ │ │ ├── nextusdt.png │ │ │ ├── nextweth.png │ │ │ ├── nextwxdai.png │ │ │ ├── test.png │ │ │ ├── tkn.png │ │ │ ├── usdc.png │ │ │ ├── usdt.png │ │ │ ├── wbtc.png │ │ │ ├── weth.png │ │ │ ├── wmatic.png │ │ │ ├── wxdai.png │ │ │ ├── xdai.png │ │ │ └── xoc.png │ │ │ └── chains │ │ │ ├── arbitrum.png │ │ │ ├── avalanche.png │ │ │ ├── binance.png │ │ │ ├── boba.png │ │ │ ├── cronos.png │ │ │ ├── ethereum.png │ │ │ ├── evmos.png │ │ │ ├── fantom.png │ │ │ ├── fuse.png │ │ │ ├── gnosis.png │ │ │ ├── goerli.png │ │ │ ├── harmony.png │ │ │ ├── kava.png │ │ │ ├── linea.png │ │ │ ├── milkomeda.png │ │ │ ├── moonbase.png │ │ │ ├── moonbeam.png │ │ │ ├── nova.png │ │ │ ├── optimism.png │ │ │ ├── polygon.png │ │ │ └── zksync.png │ ├── defi-llama.png │ ├── discoDark.png │ ├── discoLight.png │ ├── erc1155-icon.png │ ├── erc20-icon.png │ ├── erc20.png │ ├── erc721-icon.png │ ├── etherscan-dark.svg │ ├── etherscan-light.svg │ ├── gelato-dark.svg │ ├── gelato-light.svg │ ├── gitcoin-passport.svg │ ├── lensprotocol-dark.svg │ ├── lensprotocol-light.svg │ ├── lit-protocol.png │ ├── livepeer.svg │ ├── moralis.png │ ├── openai-dark.svg │ ├── openai-light.svg │ ├── pooltogether.svg │ ├── prisma.svg │ ├── push.svg │ ├── rainbowkit.svg │ ├── session-keys.png │ └── siwe.svg ├── logo-dark.png ├── logo-light.png ├── manifest.json ├── noise.webp └── og.png ├── styles ├── app.css └── globals.css ├── tailwind.config.ts ├── tsconfig.json ├── types ├── api.d.ts ├── balance.d.ts ├── hashcode.d.ts ├── index.d.ts ├── label.d.ts ├── nav.d.ts ├── pricing.ts └── site.d.ts ├── wagmi.config.ts └── yarn.lock /.commitlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["@commitlint/config-conventional"] 3 | } 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/generated/**-wagmi.ts 2 | **/generated/blockchain.ts 3 | **/components/shared/table/** 4 | **/generated 5 | .next/** 6 | tailwind.config.js 7 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | /apps 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | .zip 38 | .gz 39 | .pack.gz 40 | 41 | apigee_key.json -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | npx commitlint --edit $1 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | pnpm run lint 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v18.16.0 -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .next 4 | build 5 | pnpm-lock.yaml 6 | **/generated/**-wagmi.ts 7 | **/generated/blockchain.ts 8 | **/generated/ -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "esbenp.prettier-vscode", 5 | "mikestead.dotenv", 6 | "csstools.postcss", 7 | "bradlc.vscode-tailwindcss", 8 | "Orta.vscode-jest" 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "chrome", 9 | "request": "launch", 10 | "name": "Next: Chrome", 11 | "url": "http://localhost:3000", 12 | "webRoot": "${workspaceFolder}" 13 | }, 14 | { 15 | "type": "node", 16 | "request": "launch", 17 | "name": "Next: Node", 18 | "program": "${workspaceFolder}/node_modules/.bin/next", 19 | "args": ["dev"], 20 | "autoAttachChildProcesses": true, 21 | "skipFiles": ["/**"], 22 | "console": "integratedTerminal" 23 | } 24 | ], 25 | "compounds": [ 26 | { 27 | "name": "Next: Full", 28 | "configurations": ["Next: Node", "Next: Chrome"] 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "Project wide type checking with TypeScript", 8 | "type": "npm", 9 | "script": "check-types", 10 | "problemMatcher": ["$tsc"], 11 | "group": { 12 | "kind": "build", 13 | "isDefault": true 14 | }, 15 | "presentation": { 16 | "clear": true, 17 | "reveal": "never" 18 | } 19 | } 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /app/(dashboard)/dashboard/subscription/page.tsx: -------------------------------------------------------------------------------- 1 | import { SubscriptionClient } from "@/components/app/subscription-client" 2 | 3 | import { getTiers } from "@/app/api/pricing/tiers/route" 4 | 5 | export default async function SubscriptionPage() { 6 | // Fetch tiers data on the server 7 | const tiers = await getTiers() 8 | 9 | return 10 | } 11 | -------------------------------------------------------------------------------- /app/(general)/pricing/page.tsx: -------------------------------------------------------------------------------- 1 | import { Suspense } from "react" 2 | 3 | import { PricingClient } from "@/components/app/pricing-client" 4 | 5 | import { getTiers } from "@/app/api/pricing/tiers/route" 6 | 7 | function PricingFallback() { 8 | return 9 | } 10 | 11 | export default async function PricingPage() { 12 | const tiers = await getTiers() 13 | 14 | return ( 15 | }> 16 | 17 | 18 | ) 19 | } 20 | -------------------------------------------------------------------------------- /app/api/app/users/route.ts: -------------------------------------------------------------------------------- 1 | import { env } from "@/env.mjs" 2 | 3 | import { prisma } from "@/lib/prisma" 4 | 5 | export type Users = Awaited> 6 | 7 | export async function GET(req: Request) { 8 | try { 9 | let users: Users = [] 10 | if (env.DATABASE_URL_SUPABASE) { 11 | users = await prisma.user.findMany() 12 | } 13 | return new Response(JSON.stringify({ users, object: "Users" })) 14 | } catch (error) { 15 | const errorMessage = error instanceof Error ? error.message : String(error) 16 | return new Response(errorMessage, { status: 500 }) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/api/dashboard/user/route.ts: -------------------------------------------------------------------------------- 1 | import { getServerSession } from "next-auth" 2 | import { authOptions } from "@/app/api/auth/[...nextauth]/route" 3 | 4 | import { prisma } from "@/lib/prisma" 5 | 6 | export async function GET(req: Request) { 7 | const session = await getServerSession(authOptions) 8 | 9 | if (!session?.user?.email) { 10 | return new Response( 11 | JSON.stringify({ 12 | isLoggedIn: false, 13 | }), 14 | { status: 200, headers: { "Content-Type": "application/json" } } 15 | ) 16 | } 17 | 18 | const user = await prisma.user.findUnique({ 19 | where: { email: session.user.email }, 20 | }) 21 | 22 | return new Response( 23 | JSON.stringify({ 24 | user, 25 | isLoggedIn: true, 26 | }), 27 | { status: 200, headers: { "Content-Type": "application/json" } } 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /app/template.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { motion } from "framer-motion" 4 | 5 | export default function Template({ children }: { children: React.ReactNode }) { 6 | return ( 7 | 17 | {children} 18 | 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /assets/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/function03-labs/WalletLabels/ffe0659ee58ee04299cb73f3adf9609ec0460b0a/assets/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/function03-labs/WalletLabels/ffe0659ee58ee04299cb73f3adf9609ec0460b0a/assets/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/SF-Pro-Display-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/function03-labs/WalletLabels/ffe0659ee58ee04299cb73f3adf9609ec0460b0a/assets/fonts/SF-Pro-Display-Medium.otf -------------------------------------------------------------------------------- /commitlint.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { extends: ["@commitlint/config-conventional"] } 2 | -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "styles/app.css", 9 | "baseColor": "slate", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils/index.ts" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /components/app/app-custom-hits.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { useHits } from "react-instantsearch" 4 | 5 | import { Grid } from "@/components/app/app-grid" 6 | 7 | export function CustomHits({ chainSlug }: { chainSlug: string }) { 8 | const { hits } = useHits() 9 | 10 | const props = { 11 | data: { 12 | data: hits.map((hit) => ({ 13 | _id: hit.id as string, 14 | address: hit.address as string, 15 | address_name: hit.address_name as string, 16 | label_type: hit.label_type as string, 17 | label_subtype: hit.label_subtype as string, 18 | label: hit.label as string, 19 | tag: hit.tag as string, 20 | })), 21 | }, 22 | } 23 | 24 | //@ts-ignore: Unreachable code error 25 | return 26 | } 27 | -------------------------------------------------------------------------------- /components/providers/search-wrapper.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { Configure, InstantSearch } from "react-instantsearch" 4 | 5 | import { searchClient } from "@/lib/assemble-types" 6 | import { indexMap } from "@/lib/query-params" 7 | 8 | export function SearchWrapper({ 9 | chainSlug, 10 | children, 11 | }: { 12 | chainSlug: string 13 | children: React.ReactNode 14 | }) { 15 | if (!(chainSlug in indexMap)) { 16 | return null 17 | } 18 | 19 | return ( 20 | 25 | 26 | {children} 27 | 28 | ) 29 | } 30 | -------------------------------------------------------------------------------- /components/providers/tailwind-indicator.tsx: -------------------------------------------------------------------------------- 1 | export function TailwindIndicator() { 2 | if (process.env.NODE_ENV === "production") return null 3 | 4 | return ( 5 |
6 |
xs
7 |
8 | sm 9 |
10 |
md
11 |
lg
12 |
xl
13 |
2xl
14 |
15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /components/shared/counting-up.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import CountUp from "react-countup" 4 | 5 | export function CountingUp({ 6 | start, 7 | end, 8 | duration, 9 | decimals, 10 | prefix, 11 | suffix, 12 | className, 13 | seperator, 14 | }: { 15 | start: number 16 | end: number 17 | duration: number 18 | decimals: number 19 | prefix: string 20 | suffix: string 21 | className: string 22 | seperator?: string 23 | }) { 24 | return ( 25 | 35 | ) 36 | } 37 | -------------------------------------------------------------------------------- /components/shared/is-dark-theme.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { ReactNode } from "react" 4 | import { useTheme } from "next-themes" 5 | 6 | interface IsDarkThemeProps { 7 | children: ReactNode 8 | } 9 | 10 | export const IsDarkTheme = ({ children }: IsDarkThemeProps) => { 11 | const { resolvedTheme } = useTheme() 12 | 13 | if (resolvedTheme === "dark") return <>{children} 14 | 15 | return null 16 | } 17 | -------------------------------------------------------------------------------- /components/shared/is-light-theme.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import { ReactNode } from "react" 4 | import { useTheme } from "next-themes" 5 | 6 | interface IsLightThemeProps { 7 | children: ReactNode 8 | } 9 | 10 | export const IsLightTheme = ({ children }: IsLightThemeProps) => { 11 | const { resolvedTheme } = useTheme() 12 | 13 | if (resolvedTheme === "light") return <>{children} 14 | 15 | return null 16 | } 17 | -------------------------------------------------------------------------------- /components/shared/light-dark-image.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import Image from "next/image" 4 | import { useTheme } from "next-themes" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | interface LightDarkImageProps { 9 | LightImage: string 10 | DarkImage: string 11 | alt: string 12 | height: number 13 | width: number 14 | className?: string 15 | } 16 | const LightDarkImage = ({ 17 | LightImage, 18 | DarkImage, 19 | alt, 20 | height, 21 | width, 22 | className, 23 | }: LightDarkImageProps) => { 24 | const { resolvedTheme } = useTheme() 25 | 26 | let imageUrl = LightImage 27 | if (resolvedTheme === "dark") { 28 | imageUrl = DarkImage 29 | } 30 | 31 | return ( 32 | {alt} 39 | ) 40 | } 41 | 42 | export { LightDarkImage } 43 | -------------------------------------------------------------------------------- /components/shared/pricing-info.tsx: -------------------------------------------------------------------------------- 1 | export const frequencies = [ 2 | { value: "monthly", label: "Monthly", priceSuffix: "/month" }, 3 | { 4 | value: "biannually", 5 | label: "Biannually", 6 | priceSuffix: "/6 months", 7 | discount: 20, 8 | }, 9 | { 10 | value: "annually", 11 | label: "Annually", 12 | priceSuffix: "/year", 13 | discount: 30, 14 | }, 15 | ] 16 | -------------------------------------------------------------------------------- /components/shared/time-from-epoch.tsx: -------------------------------------------------------------------------------- 1 | import { HTMLAttributes, useEffect, useState } from "react" 2 | import { DateTime } from "luxon" 3 | 4 | interface TimeFromEpochProps extends HTMLAttributes { 5 | epoch?: number | string 6 | } 7 | 8 | export const TimeFromEpoch = ({ 9 | className, 10 | epoch, 11 | ...props 12 | }: TimeFromEpochProps) => { 13 | const [timestamp, setTimestamp] = useState() 14 | useEffect(() => { 15 | if (epoch) { 16 | setTimestamp( 17 | DateTime.fromSeconds(Number(epoch)).toLocaleString( 18 | DateTime.DATETIME_MED 19 | ) 20 | ) 21 | } 22 | }, []) 23 | return ( 24 | 25 | {timestamp} 26 | 27 | ) 28 | } 29 | 30 | export default TimeFromEpoch 31 | -------------------------------------------------------------------------------- /components/shared/time-from-utc.tsx: -------------------------------------------------------------------------------- 1 | import { HTMLAttributes, useEffect, useState } from "react" 2 | import { DateTime } from "luxon" 3 | 4 | interface TimeFromUtcProps extends HTMLAttributes { 5 | date: string 6 | } 7 | 8 | export const TimeFromUtc = ({ 9 | className, 10 | date, 11 | ...props 12 | }: TimeFromUtcProps) => { 13 | const [timestamp, setTimestamp] = useState() 14 | useEffect(() => { 15 | if (date) { 16 | setTimestamp(DateTime.fromISO(date).toLocaleString(DateTime.DATETIME_MED)) 17 | } 18 | }, []) 19 | return ( 20 | 21 | {timestamp} 22 | 23 | ) 24 | } 25 | -------------------------------------------------------------------------------- /components/ui/input.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | export interface InputProps 6 | extends React.InputHTMLAttributes {} 7 | 8 | const Input = React.forwardRef( 9 | ({ className, type, ...props }, ref) => { 10 | return ( 11 | 20 | ) 21 | } 22 | ) 23 | Input.displayName = "Input" 24 | 25 | export { Input } 26 | -------------------------------------------------------------------------------- /components/ui/label.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as LabelPrimitive from "@radix-ui/react-label" 5 | import { cva, type VariantProps } from "class-variance-authority" 6 | 7 | import { cn } from "@/lib/utils" 8 | 9 | const labelVariants = cva( 10 | "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70" 11 | ) 12 | 13 | const Label = React.forwardRef< 14 | React.ElementRef, 15 | React.ComponentPropsWithoutRef & 16 | VariantProps 17 | >(({ className, ...props }, ref) => ( 18 | 23 | )) 24 | Label.displayName = LabelPrimitive.Root.displayName 25 | 26 | export { Label } 27 | -------------------------------------------------------------------------------- /components/ui/page-header.tsx: -------------------------------------------------------------------------------- 1 | export function PageHeader({ 2 | title, 3 | description, 4 | }: { 5 | title: string 6 | description: string 7 | }) { 8 | return ( 9 |
10 |

{title}

11 |

12 | {description} 13 |

14 |
15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /components/ui/progress.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as ProgressPrimitive from "@radix-ui/react-progress" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | const Progress = React.forwardRef< 9 | React.ElementRef, 10 | React.ComponentPropsWithoutRef 11 | >(({ className, value, ...props }, ref) => ( 12 | 20 | 24 | 25 | )) 26 | Progress.displayName = ProgressPrimitive.Root.displayName 27 | 28 | export { Progress } 29 | -------------------------------------------------------------------------------- /components/ui/separator.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as SeparatorPrimitive from "@radix-ui/react-separator" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | const Separator = React.forwardRef< 9 | React.ElementRef, 10 | React.ComponentPropsWithoutRef 11 | >( 12 | ( 13 | { className, orientation = "horizontal", decorative = true, ...props }, 14 | ref 15 | ) => ( 16 | 27 | ) 28 | ) 29 | Separator.displayName = SeparatorPrimitive.Root.displayName 30 | 31 | export { Separator } 32 | -------------------------------------------------------------------------------- /components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /components/ui/textarea.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | export interface TextareaProps 6 | extends React.TextareaHTMLAttributes {} 7 | 8 | const Textarea = React.forwardRef( 9 | ({ className, ...props }, ref) => { 10 | return ( 11 |