first deployment

This commit is contained in:
Sewmina 2024-07-31 20:24:05 +05:30
parent 87eaf79afc
commit 68371c7c57
6 changed files with 2655 additions and 333 deletions

2825
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,12 +14,17 @@
"dependencies": { "dependencies": {
"@headlessui/react": "^1.7.3", "@headlessui/react": "^1.7.3",
"@heroicons/react": "^2.0.12", "@heroicons/react": "^2.0.12",
"@privy-io/react-auth": "1.76.4", "@privy-io/react-auth": "^1.76.4",
"@privy-io/server-auth": "1.9.5", "@privy-io/server-auth": "1.9.5",
"@privy-io/wagmi": "^0.2.12",
"@privy-io/wagmi-connector": "^0.1.13",
"@tailwindcss/forms": "^0.5.3", "@tailwindcss/forms": "^0.5.3",
"@tanstack/react-query": "^5.51.15",
"axios": "^1.7.2",
"next": "latest", "next": "latest",
"react": "18.2.0", "react": "18.2.0",
"react-dom": "18.2.0" "react-dom": "18.2.0",
"wagmi": "^1.4.13"
}, },
"devDependencies": { "devDependencies": {
"@tsconfig/next": "^2.0.0", "@tsconfig/next": "^2.0.0",

View File

@ -2,6 +2,29 @@ import "../styles/globals.css";
import type { AppProps } from "next/app"; import type { AppProps } from "next/app";
import Head from "next/head"; import Head from "next/head";
import { PrivyProvider } from "@privy-io/react-auth"; import { PrivyProvider } from "@privy-io/react-auth";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { PrivyWagmiConnector } from '@privy-io/wagmi-connector';
import { mainnet, sepolia, configureChains } from 'wagmi';
import { alchemyProvider } from 'wagmi/providers/alchemy';
import { infuraProvider } from 'wagmi/providers/infura';
import { jsonRpcProvider } from 'wagmi/providers/jsonRpc';
// Configure chains and providers
const configureChainsConfig = configureChains(
[mainnet, sepolia],
[
alchemyProvider({ apiKey: 'XrSV5mVhj-BIUnneNRm66ReQeuO19jJ-' }),
infuraProvider({ apiKey: '25c9f1810f234c278a4f13736a897836' }),
jsonRpcProvider({
rpc: (chain) => {
if (chain.id === mainnet.id) return { http: `https://mainnet.infura.io/v3/25c9f1810f234c278a4f13736a897836` };
if (chain.id === sepolia.id) return { http: `https://sepolia.infura.io/v3/25c9f1810f234c278a4f13736a897836` };
return null; // Replace with your fallback RPC if needed
}
})
]
);
function MyApp({ Component, pageProps }: AppProps) { function MyApp({ Component, pageProps }: AppProps) {
return ( return (
@ -48,7 +71,9 @@ function MyApp({ Component, pageProps }: AppProps) {
}, },
}} }}
> >
<Component {...pageProps} /> <PrivyWagmiConnector wagmiChainsConfig={configureChainsConfig}>
<Component {...pageProps} />
</PrivyWagmiConnector>
</PrivyProvider> </PrivyProvider>
</> </>
); );

75
pages/auth.tsx Normal file
View File

@ -0,0 +1,75 @@
"use client";
import { useEffect, useState } from 'react';
import axios from 'axios';
import { PrivyProvider, usePrivy } from '@privy-io/react-auth';
import Link from 'next/link';
const Home: React.FC = () => {
const { login, ready, user } = usePrivy();
useEffect(() => {
const setResult = async (result: string, wallet: string) => {
const params = new URLSearchParams(window.location.search);
const requestIdFromUrl = params.get('request_id');
if(!result.includes('privy')){
return;
}
try {
await axios({
method: 'get',
url: `https://vps.playpoolstudios.com/metahunt/api/launcher/set_request_response.php`,
withCredentials: false,
params: {
id: requestIdFromUrl,
result: result
},
});
console.log(`https://vps.playpoolstudios.com/metahunt/api/launcher/set_request_response.php?id=${requestIdFromUrl}&result=${result}`);
await axios({
method: 'get',
url: `https://vps.playpoolstudios.com/metahunt/api/launcher/set_wallet.php`,
withCredentials: false,
params: {
id: result,
wallet: wallet
},
});
} catch (error) {
console.error('Error making GET request:', error);
}
};
const requestIdFromUrl = new URLSearchParams(window.location.search).get('request_id');
if (!ready) {
console.log("not ready yet");
}
else if (requestIdFromUrl) {
setResult(user?.id ?? "", user?.wallet?.address ?? "no wallet"); // Replace 'some_result' with the actual result you want to send
}
}, [ready, user]);
return (
<div className='flex items-center justify-center bg-black h-screen text-white'>
{user && ready ? (
<div className='justify-center grid-flow-row grid items-center flex-col '>
<h1 className='neon-text mb-4 text-3xl'>Login Success. You may close this now.</h1>
<Link href="/dashboard">
<div className='bg-purple-700 w-36 items-center justify-center flex rounded-xl h-10'>Dashboard</div>
</Link>
</div>
) : (
<>
<h1 className='neon-text mb-4 text-3xl'>Complete W3B Wallet Login</h1>
<button className='bg-green-700 rounded-full p-1 px-4 text-lg m-5' onClick={login}>Login</button>
</>
)}
</div>
);
};
export default Home;

View File

@ -1,7 +1,9 @@
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { getAccessToken, usePrivy } from "@privy-io/react-auth"; import { getAccessToken, usePrivy } from "@privy-io/react-auth";
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import Head from "next/head"; import Head from "next/head";
import { useBalance } from 'wagmi';
async function verifyToken() { async function verifyToken() {
const url = "/api/verify"; const url = "/api/verify";
@ -16,26 +18,16 @@ async function verifyToken() {
} }
export default function DashboardPage() { export default function DashboardPage() {
const [verifyResult, setVerifyResult] = useState(); const [verifyResult, setVerifyResult] = useState(0);
const router = useRouter(); const router = useRouter();
const {
ready, const { ready, authenticated, user, logout, linkTwitter, unlinkTwitter, unlinkDiscord, linkDiscord, unlinkWallet, linkWallet } = usePrivy();
authenticated, const { data: balanceData } = useBalance({
user, // address: '0x4557B18E779944BFE9d78A672452331C186a9f48'
logout, address: user?.wallet?.address,
linkEmail, });
linkWallet, const balance = balanceData?.formatted;
unlinkEmail, const token = balanceData?.symbol;
linkPhone,
unlinkPhone,
unlinkWallet,
linkGoogle,
unlinkGoogle,
linkTwitter,
unlinkTwitter,
linkDiscord,
unlinkDiscord,
} = usePrivy();
useEffect(() => { useEffect(() => {
if (ready && !authenticated) { if (ready && !authenticated) {
@ -72,11 +64,22 @@ export default function DashboardPage() {
Logout Logout
</button> </button>
</div> </div>
<div className="items-center flex flex-wrap justify-center p-20"> <div className="flex flex-wrap items-center justify-center">
<h1 className="text-4xl">$0.1</h1> <div className="items-center justify-center p-20">
<h1 className="text-s">Vault Credits</h1>
<h1 className="text-4xl flex justify-center">1 VC</h1>
</div> </div>
<div className="items-center justify-center p-20">
<h1 className="text-xs">{user?.wallet?.address}</h1>
<h1 className="text-4xl flex justify-center">{balance || 0} {token}</h1>
</div>
<div className="items-center justify-center p-20">
<h1 className="text-s">Pre-hunt Points</h1>
<h1 className="text-4xl flex justify-center">1 PHP</h1>
</div>
</div>
<div className="mt-12 flex gap-4 flex-wrap"> <div className="mt-12 flex gap-4 flex-wrap">
{twitterSubject ? ( {twitterSubject ? (
<button <button
onClick={() => { onClick={() => {
@ -136,8 +139,10 @@ export default function DashboardPage() {
Connect wallet Connect wallet
</button> </button>
)} )}
<button onClick={linkWallet}>
Wallet
</button>
</div> </div>
</> </>
) : null} ) : null}
</main> </main>

View File

@ -7,7 +7,6 @@ import { useRouter } from "next/router";
export const getServerSideProps: GetServerSideProps = async ({ req }) => { export const getServerSideProps: GetServerSideProps = async ({ req }) => {
const cookieAuthToken = req.cookies["privy-token"]; const cookieAuthToken = req.cookies["privy-token"];
// If no cookie is found, skip any further checks // If no cookie is found, skip any further checks
if (!cookieAuthToken) return { props: {} }; if (!cookieAuthToken) return { props: {} };