├── .nvmrc ├── apps ├── web │ ├── .eslintrc.json │ ├── public │ │ ├── favicon.ico │ │ └── meta-mask-fox.svg │ ├── utils │ │ ├── inter.ts │ │ ├── capitalize.ts │ │ ├── useLastAddress.tsx │ │ ├── firebase-config.ts │ │ ├── history.ts │ │ ├── use-media-query.ts │ │ ├── balance.ts │ │ ├── captcha-verify.ts │ │ ├── firebase.client.ts │ │ └── firebase.serverside.ts │ ├── @ │ │ ├── lib │ │ │ └── utils.ts │ │ └── components │ │ │ └── ui │ │ │ ├── label.tsx │ │ │ ├── input.tsx │ │ │ ├── button.tsx │ │ │ └── card.tsx │ ├── pages │ │ ├── _document.tsx │ │ ├── _app.tsx │ │ ├── api │ │ │ ├── auth │ │ │ │ └── [...nextauth].ts │ │ │ └── faucet.ts │ │ └── [chain].tsx │ ├── next.config.js │ ├── components.json │ ├── .gitignore │ ├── tsconfig.json │ ├── styles │ │ ├── FaucetHeader.module.css │ │ ├── Form.module.css │ │ ├── globals.css │ │ └── Home.module.css │ ├── components │ │ ├── mode-toggle.tsx │ │ ├── logo.tsx │ │ ├── faucet-header.tsx │ │ ├── github-auth.tsx │ │ ├── faucet-status.tsx │ │ ├── setup-button.tsx │ │ └── request-form.tsx │ ├── types │ │ └── index.ts │ ├── package.json │ ├── config │ │ └── chains.ts │ └── README.md └── firebase │ ├── firebase.json │ ├── scripts │ ├── tsconfig.json │ └── cli.ts │ ├── jest.config.js │ ├── .firebaserc │ ├── .vscode │ └── extensions.json │ ├── src │ ├── get-qualified-mount.ts │ ├── utils.ts │ ├── index.ts │ ├── get-qualified-mount.test.ts │ ├── celo-adapter.ts │ ├── metrics.ts │ ├── config.ts │ ├── celo-adapter.test.ts │ └── database-helper.ts │ ├── tsconfig.json │ ├── README.md │ ├── package.json │ ├── database-rules.bolt │ └── LICENSE ├── .yarnrc.yml ├── prettier.config.js ├── postcss.config.mjs ├── .github ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── FEATURE-FORM.yml │ └── BUG-FORM.yml ├── CODEOWNERS ├── pull_request_template.md └── workflows │ ├── ci.yaml │ └── deploy-chain.yaml ├── .husky └── pre-commit ├── .mergify.yml ├── .vscode ├── extensions.json ├── settings.json └── launch.json ├── package.json ├── renovate.json ├── .gitignore ├── CONTRIBUTING.md ├── readme.md ├── .eslintrc.js └── LICENSE /.nvmrc: -------------------------------------------------------------------------------- 1 | 20 2 | -------------------------------------------------------------------------------- /apps/web/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-4.3.1.cjs 4 | -------------------------------------------------------------------------------- /apps/web/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/celo-org/faucet/HEAD/apps/web/public/favicon.ico -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | tabWidth: 2, 3 | semi: false, 4 | singleQuote: true, 5 | } 6 | -------------------------------------------------------------------------------- /apps/web/utils/inter.ts: -------------------------------------------------------------------------------- 1 | import { Inter } from 'next/font/google' 2 | export const inter = Inter({ subsets: ['latin'] }) 3 | -------------------------------------------------------------------------------- /postcss.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | plugins: { 3 | '@tailwindcss/postcss': {}, 4 | }, 5 | } 6 | 7 | export default config 8 | -------------------------------------------------------------------------------- /apps/web/@/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from 'clsx' 2 | import { twMerge } from 'tailwind-merge' 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: true 2 | contact_links: 3 | - name: Github Discussions 4 | url: https://github.com/celo-org/faucet/discussions 5 | about: Please ask and answer questions here. 6 | -------------------------------------------------------------------------------- /apps/firebase/firebase.json: -------------------------------------------------------------------------------- 1 | { 2 | "functions": { 3 | "source": ".", 4 | "predeploy": ["yarn lint", "yarn build", "yarn build:rules"] 5 | }, 6 | "database": [{ "target": "faucet", "rules": "database-rules.bolt" }] 7 | } 8 | -------------------------------------------------------------------------------- /apps/firebase/scripts/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "noEmit": true, 5 | "rootDir": "." 6 | }, 7 | "include": ["."], 8 | "references": [{ "path": ".." }] 9 | } 10 | -------------------------------------------------------------------------------- /apps/web/utils/capitalize.ts: -------------------------------------------------------------------------------- 1 | export function capitalize(word: string) { 2 | const words = word.split('-') 3 | return words 4 | .map((w) => w[0].toUpperCase() + w.slice(1).toLowerCase()) 5 | .join(' ') 6 | .trim() 7 | // } 8 | } 9 | -------------------------------------------------------------------------------- /apps/firebase/jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | collectCoverageFrom: ['**/src/**/*.ts?(x)', '!**/*.d.ts'], 3 | moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], 4 | testMatch: ['**/?(*.)(spec|test).ts?(x)'], 5 | transform: { 6 | '\\.(ts|tsx)$': 'ts-jest', 7 | '^.+\\.jsx?$': 'babel-jest', 8 | }, 9 | } 10 | -------------------------------------------------------------------------------- /apps/web/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import { Head, Html, Main, NextScript } from 'next/document' 2 | 3 | export default function Document() { 4 | return ( 5 | 6 |
8 | 9 |