Skip to content

Commit

Permalink
add example for connectkit-nextjs-siwe (family#241)
Browse files Browse the repository at this point in the history
* add example for connectkit-next-js-siwe

* Rename .env.local.sample to .env.example

* Update README.md

* Update package.json

---------

Co-authored-by: Lochie Axon <lochieaxon@gmail.com>
  • Loading branch information
cctdaniel and lochie committed Jul 17, 2023
1 parent da891bd commit a697fbc
Show file tree
Hide file tree
Showing 22 changed files with 253 additions and 0 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,15 @@ and start the code bundler:

```sh
$ yarn dev:connectkit
$ yarn dev:connectkit-next-siwe
```

and then simply select the example you'd like to run:

```sh
$ yarn dev:vite # Vite
$ yarn dev:nextjs # Next.js
$ yarn dev:nextjs-siwe # Next.js with SIWE
$ yarn dev:cra # Create React App
```

Expand Down
3 changes: 3 additions & 0 deletions examples/nextjs-siwe/.env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID=
NEXT_PUBLIC_ALCHEMY_KEY=
SESSION_SECRET=
3 changes: 3 additions & 0 deletions examples/nextjs-siwe/.eslintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "next/core-web-vitals"
}
35 changes: 35 additions & 0 deletions examples/nextjs-siwe/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
9 changes: 9 additions & 0 deletions examples/nextjs-siwe/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# [Next.js](https://nextjs.org/) + [TypeScript](https://www.typescriptlang.org/) + [SIWE](https://login.xyz/) + ConnectKit Example

This is a simple example of how to implement ConnectKit with [Next.js](https://nextjs.org/) and [SIWE](https://docs.family.co/connectkit/authentication) in TypeScript. This example is based on the [SIWE with Next.js documentation](https://docs.family.co/connectkit/auth-with-nextjs) provided by Family.

## Running the example

- Have a look at the [instructions in the main README](https://github.com/family/connectkit/blob/main/README.md#running-examples-locally)
- Please copy the `.env.example` file to `.env.local` and fill in the values
- You'll want to set up an environment variable called `SESSION_SECRET` — a randomly generated, strong password of at least 32 characters
6 changes: 6 additions & 0 deletions examples/nextjs-siwe/next.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
reactStrictMode: true,
}

module.exports = nextConfig
29 changes: 29 additions & 0 deletions examples/nextjs-siwe/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"name": "nextjs-siwe",
"version": "0.1.0",
"private": true,
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
},
"dependencies": {
"connectkit": "workspace:packages/connectkit",
"connectkit-next-siwe": "workspace:packages/connectkit-next-siwe",
"next": "12.3.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"siwe": "^2.1.4",
"viem": "^1.1.0",
"wagmi": "^1.1.0"
},
"devDependencies": {
"@types/node": "18.7.18",
"@types/react": "^18.0.6",
"@types/react-dom": "^18.0.2",
"eslint": "8.23.1",
"eslint-config-next": "12.3.0",
"typescript": "^4.9.5"
}
}
6 changes: 6 additions & 0 deletions examples/nextjs-siwe/postcss.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}
Binary file added examples/nextjs-siwe/public/favicon.ico
Binary file not shown.
1 change: 1 addition & 0 deletions examples/nextjs-siwe/public/next.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions examples/nextjs-siwe/public/vercel.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions examples/nextjs-siwe/src/pages/_app.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import '@/styles/globals.css';
import { siweClient } from '@/utils/siweClient';
import { ConnectKitProvider, getDefaultConfig } from 'connectkit';
import type { AppProps } from 'next/app';
import { WagmiConfig, createConfig } from 'wagmi';

const config = createConfig(
getDefaultConfig({
alchemyId: process.env.NEXT_PUBLIC_ALCHEMY_KEY,
walletConnectProjectId: process.env.NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID!,
appName: 'My ConnectKit App',
})
);

export default function App({ Component, pageProps }: AppProps) {
return (
<WagmiConfig config={config}>
<siweClient.Provider>
<ConnectKitProvider>
<Component {...pageProps} />
</ConnectKitProvider>
</siweClient.Provider>
</WagmiConfig>
);
}
13 changes: 13 additions & 0 deletions examples/nextjs-siwe/src/pages/_document.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { Html, Head, Main, NextScript } from 'next/document'

export default function Document() {
return (
<Html lang="en">
<Head />
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
3 changes: 3 additions & 0 deletions examples/nextjs-siwe/src/pages/api/siwe/[...route].ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { siweServer } from '@/utils/siweServer' // Your path to siweServer.ts

export default siweServer.apiRouteHandler
11 changes: 11 additions & 0 deletions examples/nextjs-siwe/src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { ConnectKitButton, useSIWE } from 'connectkit';

export default function Home({ address }: { address?: string }) {
const { data, isSignedIn, signOut, signIn } = useSIWE();
console.log({ data, isSignedIn, signOut, signIn });
return (
<div className="flex items-center justify-center min-h-screen py-2">
<ConnectKitButton />
</div>
);
}
27 changes: 27 additions & 0 deletions examples/nextjs-siwe/src/styles/globals.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

:root {
--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-end-rgb: 255, 255, 255;
}

@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 0, 0, 0;
--background-end-rgb: 0, 0, 0;
}
}

body {
color: rgb(var(--foreground-rgb));
background: linear-gradient(
to bottom,
transparent,
rgb(var(--background-end-rgb))
)
rgb(var(--background-start-rgb));
}
6 changes: 6 additions & 0 deletions examples/nextjs-siwe/src/utils/siweClient.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { configureClientSIWE } from 'connectkit-next-siwe'

export const siweClient = configureClientSIWE({
apiRoutePrefix: '/api/siwe', // Your API route directory
statement: 'Sign In With Ethereum to prove you control this wallet.', // optional
})
11 changes: 11 additions & 0 deletions examples/nextjs-siwe/src/utils/siweServer.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { configureServerSideSIWE } from 'connectkit-next-siwe';

export const siweServer = configureServerSideSIWE({
session: {
cookieName: 'connectkit-next-siwe',
password: process.env.SESSION_SECRET,
cookieOptions: {
secure: process.env.NODE_ENV === 'production',
},
},
});
18 changes: 18 additions & 0 deletions examples/nextjs-siwe/tailwind.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
],
theme: {
extend: {
backgroundImage: {
'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
'gradient-conic':
'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
},
},
},
plugins: [],
}
23 changes: 23 additions & 0 deletions examples/nextjs-siwe/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve",
"incremental": true,
"paths": {
"@/*": ["./src/*"]
}
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@
"dev:connectkit-next-siwe": "yarn workspace connectkit-next-siwe run dev",
"dev:cra": "yarn workspace cra run dev",
"dev:nextjs": "yarn workspace nextjs run dev",
"dev:nextjs-siwe": "yarn workspace nextjs-siwe run dev",
"dev:vite": "yarn workspace vite run dev",
"dev:testbench": "yarn workspace testbench run dev",
"build": "yarn workspace connectkit run build && cp README.md packages/connectkit/README.md",
"build:connectkit-next-siwe": "yarn workspace connectkit-next-siwe run build",
"build:cra": "yarn build && yarn workspace cra build",
"build:nextjs": "yarn build && yarn workspace nextjs build",
"build:nextjs-siwe": "yarn build && yarn workspace nextjs-siwe build",
"build:vite": "yarn build && yarn workspace vite build",
"build:testbench": "yarn build && yarn build:connectkit-next-siwe && yarn workspace testbench build",
"build:ci": "yarn workspaces foreach -R run build",
Expand Down
19 changes: 19 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -12863,6 +12863,25 @@ __metadata:
languageName: node
linkType: hard

"nextjs-siwe@workspace:examples/nextjs-siwe":
version: 0.0.0-use.local
resolution: "nextjs-siwe@workspace:examples/nextjs-siwe"
dependencies:
"@types/node": 18.7.18
"@types/react": ^18.0.6
"@types/react-dom": ^18.0.2
connectkit: "workspace:packages/connectkit"
eslint: 8.23.1
eslint-config-next: 12.3.0
next: 12.3.0
react: ^18.0.0
react-dom: ^18.0.0
typescript: ^4.9.5
viem: ~0.3.19
wagmi: ^1.0.0
languageName: unknown
linkType: soft

"nextjs@workspace:examples/nextjs":
version: 0.0.0-use.local
resolution: "nextjs@workspace:examples/nextjs"
Expand Down

0 comments on commit a697fbc

Please sign in to comment.