Skip to content

Commit 4bff235

Browse files
committed
feat: integrate Clerk for authentication and add faucet functionality
1 parent dc2af1b commit 4bff235

File tree

8 files changed

+375
-4
lines changed

8 files changed

+375
-4
lines changed

package-lock.json

Lines changed: 104 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"watch:codegen:poco": "graphql-codegen --config codegenPoco.ts --watch"
1919
},
2020
"dependencies": {
21+
"@clerk/clerk-react": "^5.51.0",
2122
"@fontsource-variable/anybody": "^5.2.6",
2223
"@fontsource-variable/mulish": "^5.2.6",
2324
"@fontsource/space-mono": "^5.2.8",

src/components/navbar/NavBar.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ export function Navbar() {
2626
<div className="mr-8 flex items-center gap-4 md:mr-0">
2727
{isConnected && (
2828
<div className="hidden md:flex">
29+
<Button variant="link" asChild className="text-foreground">
30+
<ChainLink to="/faucet">Faucet</ChainLink>
31+
</Button>
2932
<Button variant="link" asChild className="text-foreground">
3033
<ChainLink to={`/address/${userAddress}?from=my_activity`}>
3134
My activity

src/config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export const TABLE_REFETCH_INTERVAL = 10_000;
1212

1313
export const IPFS_GATEWAY_URL = 'https://ipfs.iex.ec';
1414
export const API_COINGECKO_URL = 'https://api.coingecko.com/api/v3/simple/';
15+
export const FAUCET_API_URL = 'https://dev-rlc-faucet.iex.ec';
1516

1617
export const SUPPORTED_CHAINS = [
1718
{

src/main.tsx

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { ClerkProvider } from '@clerk/clerk-react';
12
import '@fontsource-variable/anybody/wdth.css';
23
import '@fontsource-variable/mulish/index.css';
34
import {
@@ -24,8 +25,12 @@ const { rollbar, rollbarConfig } = initRollbarAlerting();
2425
const queryClient = initQueryClient({ rollbar });
2526

2627
const router = initRouter(queryClient);
27-
2828
const rootElement = document.getElementById('root')!;
29+
const PUBLISHABLE_KEY = import.meta.env.VITE_CLERK_PUBLISHABLE_KEY;
30+
31+
if (!PUBLISHABLE_KEY) {
32+
throw new Error('Add your Clerk Publishable Key to the .env file');
33+
}
2934
if (!rootElement.innerHTML) {
3035
const root = createRoot(rootElement);
3136
root.render(
@@ -37,7 +42,9 @@ if (!rootElement.innerHTML) {
3742
>
3843
<RollbarErrorBoundary>
3944
<ThemeProvider defaultTheme="dark" storageKey="vite-ui-theme">
40-
<RouterProvider router={router} />
45+
<ClerkProvider publishableKey={PUBLISHABLE_KEY}>
46+
<RouterProvider router={router} />
47+
</ClerkProvider>
4148
</ThemeProvider>
4249
</RollbarErrorBoundary>
4350
</RollbarProvider>
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { ChainLink } from '@/components/ChainLink';
2+
import {
3+
Breadcrumb,
4+
BreadcrumbItem,
5+
BreadcrumbLink,
6+
BreadcrumbList,
7+
BreadcrumbPage,
8+
BreadcrumbSeparator,
9+
} from '@/components/ui/breadcrumb';
10+
11+
export function FaucetBreadcrumbs() {
12+
return (
13+
<Breadcrumb>
14+
<BreadcrumbList>
15+
<BreadcrumbItem>
16+
<BreadcrumbLink asChild>
17+
<ChainLink to="/">Homepage</ChainLink>
18+
</BreadcrumbLink>
19+
</BreadcrumbItem>
20+
<BreadcrumbSeparator />
21+
<BreadcrumbItem>
22+
<BreadcrumbPage>Faucets</BreadcrumbPage>
23+
</BreadcrumbItem>
24+
</BreadcrumbList>
25+
</Breadcrumb>
26+
);
27+
}

src/routeTree.gen.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import { Route as ChainSlugLayoutRouteImport } from './routes/$chainSlug/_layout
1616
import { Route as ChainSlugLayoutIndexRouteImport } from './routes/$chainSlug/_layout/index'
1717
import { Route as ChainSlugLayoutWorkerpoolsRouteImport } from './routes/$chainSlug/_layout/workerpools'
1818
import { Route as ChainSlugLayoutTasksRouteImport } from './routes/$chainSlug/_layout/tasks'
19+
import { Route as ChainSlugLayoutFaucetRouteImport } from './routes/$chainSlug/_layout/faucet'
1920
import { Route as ChainSlugLayoutDealsRouteImport } from './routes/$chainSlug/_layout/deals'
2021
import { Route as ChainSlugLayoutDatasetsRouteImport } from './routes/$chainSlug/_layout/datasets'
2122
import { Route as ChainSlugLayoutAppsRouteImport } from './routes/$chainSlug/_layout/apps'
@@ -62,6 +63,11 @@ const ChainSlugLayoutTasksRoute = ChainSlugLayoutTasksRouteImport.update({
6263
path: '/tasks',
6364
getParentRoute: () => ChainSlugLayoutRoute,
6465
} as any)
66+
const ChainSlugLayoutFaucetRoute = ChainSlugLayoutFaucetRouteImport.update({
67+
id: '/faucet',
68+
path: '/faucet',
69+
getParentRoute: () => ChainSlugLayoutRoute,
70+
} as any)
6571
const ChainSlugLayoutDealsRoute = ChainSlugLayoutDealsRouteImport.update({
6672
id: '/deals',
6773
path: '/deals',
@@ -143,6 +149,7 @@ export interface FileRoutesByFullPath {
143149
'/$chainSlug/apps': typeof ChainSlugLayoutAppsRoute
144150
'/$chainSlug/datasets': typeof ChainSlugLayoutDatasetsRoute
145151
'/$chainSlug/deals': typeof ChainSlugLayoutDealsRoute
152+
'/$chainSlug/faucet': typeof ChainSlugLayoutFaucetRoute
146153
'/$chainSlug/tasks': typeof ChainSlugLayoutTasksRoute
147154
'/$chainSlug/workerpools': typeof ChainSlugLayoutWorkerpoolsRoute
148155
'/$chainSlug/': typeof ChainSlugLayoutIndexRoute
@@ -163,6 +170,7 @@ export interface FileRoutesByTo {
163170
'/$chainSlug/apps': typeof ChainSlugLayoutAppsRoute
164171
'/$chainSlug/datasets': typeof ChainSlugLayoutDatasetsRoute
165172
'/$chainSlug/deals': typeof ChainSlugLayoutDealsRoute
173+
'/$chainSlug/faucet': typeof ChainSlugLayoutFaucetRoute
166174
'/$chainSlug/tasks': typeof ChainSlugLayoutTasksRoute
167175
'/$chainSlug/workerpools': typeof ChainSlugLayoutWorkerpoolsRoute
168176
'/$chainSlug/address/$addressAddress': typeof ChainSlugLayoutAddressAddressAddressRoute
@@ -184,6 +192,7 @@ export interface FileRoutesById {
184192
'/$chainSlug/_layout/apps': typeof ChainSlugLayoutAppsRoute
185193
'/$chainSlug/_layout/datasets': typeof ChainSlugLayoutDatasetsRoute
186194
'/$chainSlug/_layout/deals': typeof ChainSlugLayoutDealsRoute
195+
'/$chainSlug/_layout/faucet': typeof ChainSlugLayoutFaucetRoute
187196
'/$chainSlug/_layout/tasks': typeof ChainSlugLayoutTasksRoute
188197
'/$chainSlug/_layout/workerpools': typeof ChainSlugLayoutWorkerpoolsRoute
189198
'/$chainSlug/_layout/': typeof ChainSlugLayoutIndexRoute
@@ -206,6 +215,7 @@ export interface FileRouteTypes {
206215
| '/$chainSlug/apps'
207216
| '/$chainSlug/datasets'
208217
| '/$chainSlug/deals'
218+
| '/$chainSlug/faucet'
209219
| '/$chainSlug/tasks'
210220
| '/$chainSlug/workerpools'
211221
| '/$chainSlug/'
@@ -226,6 +236,7 @@ export interface FileRouteTypes {
226236
| '/$chainSlug/apps'
227237
| '/$chainSlug/datasets'
228238
| '/$chainSlug/deals'
239+
| '/$chainSlug/faucet'
229240
| '/$chainSlug/tasks'
230241
| '/$chainSlug/workerpools'
231242
| '/$chainSlug/address/$addressAddress'
@@ -246,6 +257,7 @@ export interface FileRouteTypes {
246257
| '/$chainSlug/_layout/apps'
247258
| '/$chainSlug/_layout/datasets'
248259
| '/$chainSlug/_layout/deals'
260+
| '/$chainSlug/_layout/faucet'
249261
| '/$chainSlug/_layout/tasks'
250262
| '/$chainSlug/_layout/workerpools'
251263
| '/$chainSlug/_layout/'
@@ -308,6 +320,13 @@ declare module '@tanstack/react-router' {
308320
preLoaderRoute: typeof ChainSlugLayoutTasksRouteImport
309321
parentRoute: typeof ChainSlugLayoutRoute
310322
}
323+
'/$chainSlug/_layout/faucet': {
324+
id: '/$chainSlug/_layout/faucet'
325+
path: '/faucet'
326+
fullPath: '/$chainSlug/faucet'
327+
preLoaderRoute: typeof ChainSlugLayoutFaucetRouteImport
328+
parentRoute: typeof ChainSlugLayoutRoute
329+
}
311330
'/$chainSlug/_layout/deals': {
312331
id: '/$chainSlug/_layout/deals'
313332
path: '/deals'
@@ -408,6 +427,7 @@ interface ChainSlugLayoutRouteChildren {
408427
ChainSlugLayoutAppsRoute: typeof ChainSlugLayoutAppsRoute
409428
ChainSlugLayoutDatasetsRoute: typeof ChainSlugLayoutDatasetsRoute
410429
ChainSlugLayoutDealsRoute: typeof ChainSlugLayoutDealsRoute
430+
ChainSlugLayoutFaucetRoute: typeof ChainSlugLayoutFaucetRoute
411431
ChainSlugLayoutTasksRoute: typeof ChainSlugLayoutTasksRoute
412432
ChainSlugLayoutWorkerpoolsRoute: typeof ChainSlugLayoutWorkerpoolsRoute
413433
ChainSlugLayoutIndexRoute: typeof ChainSlugLayoutIndexRoute
@@ -427,6 +447,7 @@ const ChainSlugLayoutRouteChildren: ChainSlugLayoutRouteChildren = {
427447
ChainSlugLayoutAppsRoute: ChainSlugLayoutAppsRoute,
428448
ChainSlugLayoutDatasetsRoute: ChainSlugLayoutDatasetsRoute,
429449
ChainSlugLayoutDealsRoute: ChainSlugLayoutDealsRoute,
450+
ChainSlugLayoutFaucetRoute: ChainSlugLayoutFaucetRoute,
430451
ChainSlugLayoutTasksRoute: ChainSlugLayoutTasksRoute,
431452
ChainSlugLayoutWorkerpoolsRoute: ChainSlugLayoutWorkerpoolsRoute,
432453
ChainSlugLayoutIndexRoute: ChainSlugLayoutIndexRoute,

0 commit comments

Comments
 (0)