diff --git a/apps/events/src/components/export-wallet.tsx b/apps/events/src/components/export-wallet.tsx new file mode 100644 index 00000000..3db3530c --- /dev/null +++ b/apps/events/src/components/export-wallet.tsx @@ -0,0 +1,20 @@ +import { Button } from '@/components/ui/button'; +import { usePrivy } from '@privy-io/react-auth'; + +export const ExportWallet = () => { + const { ready, authenticated, user, exportWallet } = usePrivy(); + const isAuthenticated = ready && authenticated; + // check that your user has an embedded wallet + const hasEmbeddedWallet = !!user?.linkedAccounts.find( + (account) => account.type === 'wallet' && account.walletClientType === 'privy' && account.chainType === 'ethereum', + ); + + return ( + <> +

Export Wallet

+ + + ); +}; diff --git a/apps/events/src/lib/create-ethereum-account.ts b/apps/events/src/lib/create-ethereum-account.ts new file mode 100644 index 00000000..12c01ad6 --- /dev/null +++ b/apps/events/src/lib/create-ethereum-account.ts @@ -0,0 +1,11 @@ +import { bytesToHex, randomBytes } from '@noble/hashes/utils'; +import { privateKeyToAccount } from 'viem/accounts'; + +export const createEthereumAccount = () => { + const privateKey = `0x${bytesToHex(randomBytes(32))}` as `0x${string}`; + const account = privateKeyToAccount(privateKey); + return { + privateKey, + address: account.address, + }; +}; diff --git a/apps/events/src/routeTree.gen.ts b/apps/events/src/routeTree.gen.ts index db86e05e..4894b762 100644 --- a/apps/events/src/routeTree.gen.ts +++ b/apps/events/src/routeTree.gen.ts @@ -15,6 +15,7 @@ import { createFileRoute } from '@tanstack/react-router' import { Route as rootRoute } from './routes/__root' import { Route as IndexImport } from './routes/index' import { Route as SpaceSpaceIdImport } from './routes/space/$spaceId' +import { Route as SettingsExportWalletImport } from './routes/settings/export-wallet' // Create Virtual Routes @@ -40,6 +41,12 @@ const SpaceSpaceIdRoute = SpaceSpaceIdImport.update({ getParentRoute: () => rootRoute, } as any) +const SettingsExportWalletRoute = SettingsExportWalletImport.update({ + id: '/settings/export-wallet', + path: '/settings/export-wallet', + getParentRoute: () => rootRoute, +} as any) + // Populate the FileRoutesByPath interface declare module '@tanstack/react-router' { @@ -58,6 +65,13 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof LoginLazyImport parentRoute: typeof rootRoute } + '/settings/export-wallet': { + id: '/settings/export-wallet' + path: '/settings/export-wallet' + fullPath: '/settings/export-wallet' + preLoaderRoute: typeof SettingsExportWalletImport + parentRoute: typeof rootRoute + } '/space/$spaceId': { id: '/space/$spaceId' path: '/space/$spaceId' @@ -73,12 +87,14 @@ declare module '@tanstack/react-router' { export interface FileRoutesByFullPath { '/': typeof IndexRoute '/login': typeof LoginLazyRoute + '/settings/export-wallet': typeof SettingsExportWalletRoute '/space/$spaceId': typeof SpaceSpaceIdRoute } export interface FileRoutesByTo { '/': typeof IndexRoute '/login': typeof LoginLazyRoute + '/settings/export-wallet': typeof SettingsExportWalletRoute '/space/$spaceId': typeof SpaceSpaceIdRoute } @@ -86,27 +102,35 @@ export interface FileRoutesById { __root__: typeof rootRoute '/': typeof IndexRoute '/login': typeof LoginLazyRoute + '/settings/export-wallet': typeof SettingsExportWalletRoute '/space/$spaceId': typeof SpaceSpaceIdRoute } export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/' | '/login' | '/space/$spaceId' + fullPaths: '/' | '/login' | '/settings/export-wallet' | '/space/$spaceId' fileRoutesByTo: FileRoutesByTo - to: '/' | '/login' | '/space/$spaceId' - id: '__root__' | '/' | '/login' | '/space/$spaceId' + to: '/' | '/login' | '/settings/export-wallet' | '/space/$spaceId' + id: + | '__root__' + | '/' + | '/login' + | '/settings/export-wallet' + | '/space/$spaceId' fileRoutesById: FileRoutesById } export interface RootRouteChildren { IndexRoute: typeof IndexRoute LoginLazyRoute: typeof LoginLazyRoute + SettingsExportWalletRoute: typeof SettingsExportWalletRoute SpaceSpaceIdRoute: typeof SpaceSpaceIdRoute } const rootRouteChildren: RootRouteChildren = { IndexRoute: IndexRoute, LoginLazyRoute: LoginLazyRoute, + SettingsExportWalletRoute: SettingsExportWalletRoute, SpaceSpaceIdRoute: SpaceSpaceIdRoute, } @@ -122,6 +146,7 @@ export const routeTree = rootRoute "children": [ "/", "/login", + "/settings/export-wallet", "/space/$spaceId" ] }, @@ -131,6 +156,9 @@ export const routeTree = rootRoute "/login": { "filePath": "login.lazy.tsx" }, + "/settings/export-wallet": { + "filePath": "settings/export-wallet.tsx" + }, "/space/$spaceId": { "filePath": "space/$spaceId.tsx" } diff --git a/apps/events/src/routes/__root.tsx b/apps/events/src/routes/__root.tsx index 287ad96d..92992d86 100644 --- a/apps/events/src/routes/__root.tsx +++ b/apps/events/src/routes/__root.tsx @@ -30,7 +30,10 @@ export const Route = createRootRoute({