+ We will send an email confirmation that we received your request. We
+ will then follow up with a zip file containing all your personal data
+ saved on StreamETH.
+
+
+
+
+ );
+};
+
+export default CreateRequest;
diff --git a/packages/app/app/(legal)/data-request/page.tsx b/packages/app/app/(legal)/data-request/page.tsx
new file mode 100644
index 000000000..9fbe0e96f
--- /dev/null
+++ b/packages/app/app/(legal)/data-request/page.tsx
@@ -0,0 +1,38 @@
+'use server';
+
+import { Card, CardTitle, CardFooter } from '@/components/ui/card';
+import Image from 'next/image';
+import Footer from '@/components/Layout/Footer';
+import AuthorizationMessage from '@/components/authorization/AuthorizationMessage';
+import CheckAuthorization from '@/components/authorization/CheckAuthorization';
+import CreateRequest from './components/createRequest';
+
+const DataRequest = async () => {
+ const year = new Date().getFullYear();
+
+ const isAuthorized = await CheckAuthorization();
+ if (!isAuthorized) {
+ return ;
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default DataRequest;
diff --git a/packages/app/app/(legal)/privacy/page.tsx b/packages/app/app/(legal)/privacy/page.tsx
index dde6c4ce3..515f53431 100644
--- a/packages/app/app/(legal)/privacy/page.tsx
+++ b/packages/app/app/(legal)/privacy/page.tsx
@@ -1,16 +1,16 @@
-import { Card, CardTitle, CardFooter } from '@/components/ui/card'
-import { promises as fs } from 'fs'
-import Image from 'next/image'
-import Footer from '@/components/Layout/Footer'
-import Markdown from 'react-markdown'
-import remarkGfm from 'remark-gfm'
+import { Card, CardTitle, CardFooter } from '@/components/ui/card';
+import { promises as fs } from 'fs';
+import Image from 'next/image';
+import Footer from '@/components/Layout/Footer';
+import Markdown from 'react-markdown';
+import remarkGfm from 'remark-gfm';
-const Terms = async () => {
- const year = new Date().getFullYear()
+const Privacy = async () => {
+ const year = new Date().getFullYear();
const file = await fs.readFile(
process.cwd() + '/public/legal/privacy.md',
'utf8'
- )
+ );
return (
@@ -24,18 +24,19 @@ export default function Error({
Oops, something went wrong!
- We are sorry, but an unexpected error has occurred. Please
- try again later or contact support if the issue persists.
+ We are sorry, but an unexpected error has occurred. Please try again
+ later or contact support if the issue persists.
+ prefetch={false}
+ >
Go to Homepage
- )
+ );
}
diff --git a/packages/app/app/layout.tsx b/packages/app/app/layout.tsx
index fda2e27ca..eb0f5f010 100644
--- a/packages/app/app/layout.tsx
+++ b/packages/app/app/layout.tsx
@@ -1,29 +1,30 @@
-import './globals.css'
-import { Inter } from 'next/font/google'
-import GeneralContext from '@/lib/context/GeneralContext'
-import { MobileContextProvider } from '@/lib/context/MobileContext'
-import { LoadingContextProvider } from '@/lib/context/LoadingContext'
-import { TopNavbarContextProvider } from '@/lib/context/TopNavbarContext'
-import { generalMetadata } from '@/lib/utils/metadata'
-import { Toaster } from '@/components/ui/sonner'
-import CookieBanner from '@/components/misc/interact/CookieBanner'
-import { TooltipProvider } from '@/components/ui/tooltip'
+import './globals.css';
+import { Inter } from 'next/font/google';
+import GeneralContext from '@/lib/context/GeneralContext';
+import { MobileContextProvider } from '@/lib/context/MobileContext';
+import { LoadingContextProvider } from '@/lib/context/LoadingContext';
+import { TopNavbarContextProvider } from '@/lib/context/TopNavbarContext';
+import { generalMetadata } from '@/lib/utils/metadata';
+import { Toaster } from '@/components/ui/sonner';
+import CookieBanner from '@/components/misc/interact/CookieBanner';
+import { TooltipProvider } from '@/components/ui/tooltip';
const inter = Inter({
subsets: ['latin'],
variable: '--font-inter',
-})
+});
export default function RootLayout({
children,
}: {
- children: React.ReactNode
+ children: React.ReactNode;
}) {
return (
+ className={`${inter.variable} mx-auto flex min-h-screen w-full flex-col bg-background`}
+ >
@@ -42,7 +43,7 @@ export default function RootLayout({
- )
+ );
}
-export const metadata = generalMetadata
+export const metadata = generalMetadata;
diff --git a/packages/app/app/not-found.tsx b/packages/app/app/not-found.tsx
index 97a58b931..f100bc458 100644
--- a/packages/app/app/not-found.tsx
+++ b/packages/app/app/not-found.tsx
@@ -1,4 +1,4 @@
-import Link from 'next/link'
+import Link from 'next/link';
export default function Component() {
return (
@@ -14,11 +14,12 @@ export default function Component() {
+ prefetch={false}
+ >
Go Back
- )
+ );
}
diff --git a/packages/app/app/redirect/google/page.tsx b/packages/app/app/redirect/google/page.tsx
index 758c4f428..cf21008af 100644
--- a/packages/app/app/redirect/google/page.tsx
+++ b/packages/app/app/redirect/google/page.tsx
@@ -1,27 +1,25 @@
-import Footer from '@/components/Layout/Footer'
-import { Button } from '@/components/ui/button'
-import Image from 'next/image'
-import Link from 'next/link'
-import React from 'react'
+import Footer from '@/components/Layout/Footer';
+import { Button } from '@/components/ui/button';
+import Image from 'next/image';
+import Link from 'next/link';
+import React from 'react';
const GoogleRedirect = ({
searchParams,
}: {
- searchParams: { authuser: string }
+ searchParams: { authuser: string };
}) => {
return (
-
- Enable live streaming on YouTube
-
+
Enable live streaming on YouTube
- To stream and repurpose content to YouTube, YouTube requires
- you to enable live streaming on your channel. To do this,
- follow these steps:{' '}
+ To stream and repurpose content to YouTube, YouTube requires you to
+ enable live streaming on your channel. To do this, follow these steps:{' '}
1. Go to your YouTube live dashboard
+ href={`https://www.youtube.com/signin?authuser=${searchParams.authuser}&next=%2Flive_dashboard&app=desktop`}
+ >
Open Youtube Live Dashboard
2. Follow YouTube's steps to enable live streaming.
- 3. Once live streaming is enabled, return to StreamEth and
- connect again. It often takes 24-48 hours to be approved.
+ 3. Once live streaming is enabled, return to StreamEth and connect
+ again. It often takes 24-48 hours to be approved.
- Drag and drop your thumbnail to upload... Or just
- click here!
+ Drag and drop your thumbnail to upload... Or just click here!
- Maximum image file size is 1MB. Best resolution of
- 1920 x 1080. Aspect ratio of 16:9
+ Maximum image file size is 1MB. Best resolution of 1920 x 1080.
+ Aspect ratio of 16:9
)}
- )
+ );
}
-)
+);
-ImageDropzone.displayName = 'ImageDropzone'
+ImageDropzone.displayName = 'ImageDropzone';
-export default ImageDropzone
+export default ImageDropzone;
diff --git a/packages/app/app/studio/[organization]/library/[session]/components/SessionAccordion.tsx b/packages/app/app/studio/[organization]/library/[session]/components/SessionAccordion.tsx
index 80d1c929e..91da69355 100644
--- a/packages/app/app/studio/[organization]/library/[session]/components/SessionAccordion.tsx
+++ b/packages/app/app/studio/[organization]/library/[session]/components/SessionAccordion.tsx
@@ -1,7 +1,7 @@
-'use client'
-import { useForm } from 'react-hook-form'
-import { zodResolver } from '@hookform/resolvers/zod'
-import * as z from 'zod'
+'use client';
+import { useForm } from 'react-hook-form';
+import { zodResolver } from '@hookform/resolvers/zod';
+import * as z from 'zod';
import {
Form,
FormControl,
@@ -9,32 +9,31 @@ import {
FormItem,
FormLabel,
FormMessage,
-} from '@/components/ui/form'
-import { useRouter } from 'next/navigation'
-import { Input } from '@/components/ui/input'
-import { Textarea } from '@/components/ui/textarea'
-import { Button } from '@/components/ui/button'
-import ImageUpload from '@/components/misc/form/imageUpload'
-import { sessionSchema } from '@/lib/schema'
-import { useState } from 'react'
-import { toast } from 'sonner'
+} from '@/components/ui/form';
+import { useRouter } from 'next/navigation';
+import { Input } from '@/components/ui/input';
+import { Textarea } from '@/components/ui/textarea';
+import { Button } from '@/components/ui/button';
+import ImageUpload from '@/components/misc/form/imageUpload';
+import { sessionSchema } from '@/lib/schema';
+import { useState } from 'react';
+import { toast } from 'sonner';
import {
updateSessionAction,
deleteSessionAction,
-} from '@/lib/actions/sessions'
-import { IExtendedSession } from '@/lib/types'
-import { Loader2 } from 'lucide-react'
+} from '@/lib/actions/sessions';
+import { IExtendedSession } from '@/lib/types';
+import { Loader2 } from 'lucide-react';
const SessionAccordion = ({
session,
organizationSlug,
}: {
- session: IExtendedSession
- organizationSlug: string
+ session: IExtendedSession;
+ organizationSlug: string;
}) => {
- const router = useRouter()
- const [isUpdatingSession, setIsUpdatingSession] =
- useState(false)
+ const router = useRouter();
+ const [isUpdatingSession, setIsUpdatingSession] = useState(false);
const form = useForm>({
resolver: zodResolver(sessionSchema),
defaultValues: {
@@ -42,11 +41,11 @@ const SessionAccordion = ({
description: session.description,
coverImage: session.coverImage,
},
- })
+ });
// 2. Define a submit handler.
function onSubmit(values: z.infer) {
- setIsUpdatingSession(true)
+ setIsUpdatingSession(true);
updateSessionAction({
session: {
...values,
@@ -62,47 +61,43 @@ const SessionAccordion = ({
})
.then((response) => {
if (response) {
- toast.success('Session updated')
+ toast.success('Session updated');
} else {
- toast.error('Error updating session')
+ toast.error('Error updating session');
}
})
.catch(() => {
- toast.error('Error updating session')
+ toast.error('Error updating session');
})
.finally(() => {
- setIsUpdatingSession(false)
- })
+ setIsUpdatingSession(false);
+ });
}
const handleDeleteSession = (e: any) => {
- e.preventDefault()
- if (
- window.confirm('Are you sure you want to delete this session?')
- ) {
+ e.preventDefault();
+ if (window.confirm('Are you sure you want to delete this session?')) {
deleteSessionAction({
organizationId: session.organizationId as string,
sessionId: session._id!,
})
.then((response) => {
if (response) {
- toast.success('Session deleted')
- router.push(`/studio/${organizationSlug}?settings=videos`)
+ toast.success('Session deleted');
+ router.push(`/studio/${organizationSlug}?settings=videos`);
} else {
- toast.error('Error deleting session')
+ toast.error('Error deleting session');
}
})
.catch(() => {
- toast.error('Error deleting session')
- })
+ toast.error('Error deleting session');
+ });
}
- }
+ };
return (
- Copy and paste the stream key into your streaming
- software. Use either the RTMP or SRT ingest, depending on
- your use-case. The RTMP ingest is more common with OBS
- users
+ Copy and paste the stream key into your streaming software. Use
+ either the RTMP or SRT ingest, depending on your use-case. The RTMP
+ ingest is more common with OBS users
)}
>
- )
-}
+ );
+};
-export default StreamConfigWithPlayer
+export default StreamConfigWithPlayer;
diff --git a/packages/app/app/studio/[organization]/livestreams/[streamId]/components/StreamHeader.tsx b/packages/app/app/studio/[organization]/livestreams/[streamId]/components/StreamHeader.tsx
index e9ed3b771..7c80f9991 100644
--- a/packages/app/app/studio/[organization]/livestreams/[streamId]/components/StreamHeader.tsx
+++ b/packages/app/app/studio/[organization]/livestreams/[streamId]/components/StreamHeader.tsx
@@ -1,26 +1,26 @@
-'use client'
+'use client';
-import { IExtendedStage } from '@/lib/types'
-import React, { useEffect, useState } from 'react'
-import Link from 'next/link'
-import { ArrowLeft } from 'lucide-react'
+import { IExtendedStage } from '@/lib/types';
+import React, { useEffect, useState } from 'react';
+import Link from 'next/link';
+import { ArrowLeft } from 'lucide-react';
const StreamHeader = ({
stream,
organization,
isLiveStreamPage,
}: {
- stream: IExtendedStage
- organization: string
- isLiveStreamPage?: boolean
+ stream: IExtendedStage;
+ organization: string;
+ isLiveStreamPage?: boolean;
}) => {
- const [url, setUrl] = useState('')
+ const [url, setUrl] = useState('');
useEffect(() => {
// This code will only run on the client side
- if (typeof window === 'undefined') return
+ if (typeof window === 'undefined') return;
- setUrl(window.location.origin)
- }, [])
+ setUrl(window.location.origin);
+ }, []);
return (
- Allows you to add a Custom RTMP or more than 1 channel of
- the same platform from our list of supported platforms.
+ Allows you to add a Custom RTMP or more than 1 channel of the same
+ platform from our list of supported platforms.
- )
-}
+ );
+};
-export default CreateCustomStream
+export default CreateCustomStream;
diff --git a/packages/app/app/studio/[organization]/livestreams/[streamId]/page.tsx b/packages/app/app/studio/[organization]/livestreams/[streamId]/page.tsx
index 796f972f7..1983dc73d 100644
--- a/packages/app/app/studio/[organization]/livestreams/[streamId]/page.tsx
+++ b/packages/app/app/studio/[organization]/livestreams/[streamId]/page.tsx
@@ -1,33 +1,28 @@
-'use server'
+'use server';
-import React from 'react'
-import LivestreamEmbedCode from './components/LivestreamEmbedCode'
-import { fetchStage } from '@/lib/services/stageService'
-import { LivestreamPageParams } from '@/lib/types'
-import StreamConfigWithPlayer from './components/StreamConfigWithPlayer'
-import StreamHeader from './components/StreamHeader'
-import ShareButton from '@/components/misc/interact/ShareButton'
-import NotFound from '@/app/not-found'
-import {
- Tabs,
- TabsContent,
- TabsList,
- TabsTrigger,
-} from '@/components/ui/tabs'
-import { Card, CardTitle } from '@/components/ui/card'
-import Destinations from './components/Destinations'
-import StreamHealth from './components/StreamHealth'
-import { Button } from '@/components/ui/button'
-import { ArrowRight } from 'lucide-react'
-import Link from 'next/link'
-import ShareLivestream from '../components/ShareLivestream'
+import React from 'react';
+import LivestreamEmbedCode from './components/LivestreamEmbedCode';
+import { fetchStage } from '@/lib/services/stageService';
+import { LivestreamPageParams } from '@/lib/types';
+import StreamConfigWithPlayer from './components/StreamConfigWithPlayer';
+import StreamHeader from './components/StreamHeader';
+import ShareButton from '@/components/misc/interact/ShareButton';
+import NotFound from '@/app/not-found';
+import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
+import { Card, CardTitle } from '@/components/ui/card';
+import Destinations from './components/Destinations';
+import StreamHealth from './components/StreamHealth';
+import { Button } from '@/components/ui/button';
+import { ArrowRight } from 'lucide-react';
+import Link from 'next/link';
+import ShareLivestream from '../components/ShareLivestream';
const Livestream = async ({ params }: LivestreamPageParams) => {
- if (!params.streamId) return null
- const stream = await fetchStage({ stage: params.streamId })
+ if (!params.streamId) return null;
+ const stream = await fetchStage({ stage: params.streamId });
if (!stream) {
- return NotFound()
+ return NotFound();
}
return (
@@ -68,7 +63,8 @@ const Livestream = async ({ params }: LivestreamPageParams) => {
+ target="_blank"
+ >
View Livestream
- Couldn't schedule. The date and time selected are
- too far in the past.
+ Couldn't schedule. The date and time selected are too far
+ in the past.
)}
@@ -244,9 +235,7 @@ const EditLivestream = ({
name="streamEndDate"
render={({ field }) => (
-
- Stream End Date
-
+ Stream End Date (
-
- Stream End Time
-
+ Stream End Time
{validateEndDate && (
- Couldn't schedule. End date and time selected
- are too far in the past.
+ Couldn't schedule. End date and time selected are too
+ far in the past.
{' '}
- {formatDate(
- new Date(video.createdAt as string),
- 'MMM. D, YYYY'
- )}
+ {formatDate(new Date(video.createdAt as string), 'MMM. D, YYYY')}
))}
- )
-}
+ );
+};
-export default AddMediaTabItem
+export default AddMediaTabItem;
diff --git a/packages/app/app/studio/[organization]/nfts/create/components/CollectionDetails.tsx b/packages/app/app/studio/[organization]/nfts/create/components/CollectionDetails.tsx
index 272be478c..ff4e6423b 100644
--- a/packages/app/app/studio/[organization]/nfts/create/components/CollectionDetails.tsx
+++ b/packages/app/app/studio/[organization]/nfts/create/components/CollectionDetails.tsx
@@ -1,9 +1,9 @@
-'use client'
-import DatePicker from '@/components/misc/form/datePicker'
-import ImageUpload from '@/components/misc/form/imageUpload'
-import TimePicker from '@/components/misc/form/timePicker'
-import { CardTitle } from '@/components/ui/card'
-import Combobox from '@/components/ui/combo-box'
+'use client';
+import DatePicker from '@/components/misc/form/datePicker';
+import ImageUpload from '@/components/misc/form/imageUpload';
+import TimePicker from '@/components/misc/form/timePicker';
+import { CardTitle } from '@/components/ui/card';
+import Combobox from '@/components/ui/combo-box';
import {
Form,
FormControl,
@@ -11,32 +11,32 @@ import {
FormItem,
FormLabel,
FormMessage,
-} from '@/components/ui/form'
-import { Input } from '@/components/ui/input'
-import { Textarea } from '@/components/ui/textarea'
+} from '@/components/ui/form';
+import { Input } from '@/components/ui/input';
+import { Textarea } from '@/components/ui/textarea';
-import React from 'react'
-import { UseFormReturn } from 'react-hook-form'
-import { NftCollectionType } from 'streameth-new-server/src/interfaces/nft.collection.interface'
+import React from 'react';
+import { UseFormReturn } from 'react-hook-form';
+import { NftCollectionType } from 'streameth-new-server/src/interfaces/nft.collection.interface';
const CollectionDetails = ({
form,
type,
}: {
- type: NftCollectionType
+ type: NftCollectionType;
form: UseFormReturn<{
- description: string
- name: string
- symbol: string
- mintFee: string
- thumbnail: string
+ description: string;
+ name: string;
+ symbol: string;
+ mintFee: string;
+ thumbnail: string;
// startDate: Date
// startTime: string
// endDate: Date
// endTime: string
- limitedSupply: string
- maxSupply: string
- }>
+ limitedSupply: string;
+ maxSupply: string;
+ }>;
}) => {
return (
@@ -75,9 +75,8 @@ const CollectionDetails = ({
Drag or click to upload your logo image here.{' '}
- You may change this after deploying your contract.
- Recommended size: 500 x 500. File types: JPG, PNG, SVG
- or GIF
+ You may change this after deploying your contract. Recommended
+ size: 500 x 500. File types: JPG, PNG, SVG or GIF
@@ -30,8 +30,7 @@ const Settings = async ({
Edit yout channel
- Header logo and description will appear on your channel
- page
+ Header logo and description will appear on your channel page
@@ -42,7 +41,7 @@ const Settings = async ({
- )
-}
+ );
+};
-export default Settings
+export default Settings;
diff --git a/packages/app/app/studio/[organization]/team/components/AddTeamMembers.tsx b/packages/app/app/studio/[organization]/team/components/AddTeamMembers.tsx
index 9278e0c03..125a2788a 100644
--- a/packages/app/app/studio/[organization]/team/components/AddTeamMembers.tsx
+++ b/packages/app/app/studio/[organization]/team/components/AddTeamMembers.tsx
@@ -1,13 +1,13 @@
-'use client'
-import React, { useState } from 'react'
-import { Input } from '@/components/ui/input'
-import { Button } from '@/components/ui/button'
-import { addOrganizationMemberAction } from '@/lib/actions/organizations'
-import { toast } from 'sonner'
-import { addOrganizationMemberSchema } from '@/lib/schema'
-import { zodResolver } from '@hookform/resolvers/zod'
-import * as z from 'zod'
-import { useForm } from 'react-hook-form'
+'use client';
+import React, { useState } from 'react';
+import { Input } from '@/components/ui/input';
+import { Button } from '@/components/ui/button';
+import { addOrganizationMemberAction } from '@/lib/actions/organizations';
+import { toast } from 'sonner';
+import { addOrganizationMemberSchema } from '@/lib/schema';
+import { zodResolver } from '@hookform/resolvers/zod';
+import * as z from 'zod';
+import { useForm } from 'react-hook-form';
import {
Form,
FormControl,
@@ -15,50 +15,45 @@ import {
FormItem,
FormLabel,
FormMessage,
-} from '@/components/ui/form'
+} from '@/components/ui/form';
-const AddTeamMembers = ({
- organizationId,
-}: {
- organizationId: string
-}) => {
- const [isAddingMember, setIsAddingMember] = useState(false)
+const AddTeamMembers = ({ organizationId }: { organizationId: string }) => {
+ const [isAddingMember, setIsAddingMember] = useState(false);
const form = useForm>({
resolver: zodResolver(addOrganizationMemberSchema),
defaultValues: {
memberAddress: '',
},
- })
- function onSubmit(
- values: z.infer
- ) {
- setIsAddingMember(true)
+ });
+ function onSubmit(values: z.infer) {
+ setIsAddingMember(true);
addOrganizationMemberAction({
memberAddress: values.memberAddress,
organizationId,
})
.then((response) => {
if (response) {
- toast.success('Member Added to Organization')
- form.reset()
+ toast.success('Member Added to Organization');
+ form.reset();
} else {
- toast.error('Error adding team member')
+ toast.error('Error adding team member');
}
})
.catch(() => {
- toast.error('Error adding team member')
+ toast.error('Error adding team member');
})
.finally(() => {
- setIsAddingMember(false)
- })
+ setIsAddingMember(false);
+ });
}
return (