-
Billing
+
Billing
{isMissingOrInactiveOrFreePlan && (
diff --git a/apps/web/src/app/(dashboard)/settings/password/page.tsx b/apps/web/src/app/(dashboard)/settings/password/page.tsx
index 701335180..dd344a1d1 100644
--- a/apps/web/src/app/(dashboard)/settings/password/page.tsx
+++ b/apps/web/src/app/(dashboard)/settings/password/page.tsx
@@ -1,19 +1,5 @@
-import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
+import { redirect } from 'next/navigation';
-import { PasswordForm } from '~/components/forms/password';
-
-export default async function PasswordSettingsPage() {
- const { user } = await getRequiredServerComponentSession();
-
- return (
-
-
Password
-
-
Here you can update your password.
-
-
-
-
-
- );
+export default function PasswordSettingsPage() {
+ redirect('/settings/security');
}
diff --git a/apps/web/src/app/(dashboard)/settings/profile/page.tsx b/apps/web/src/app/(dashboard)/settings/profile/page.tsx
index b577ec93e..cb64fb9cd 100644
--- a/apps/web/src/app/(dashboard)/settings/profile/page.tsx
+++ b/apps/web/src/app/(dashboard)/settings/profile/page.tsx
@@ -7,7 +7,7 @@ export default async function ProfileSettingsPage() {
return (
-
Profile
+
Profile
Here you can edit your personal details.
diff --git a/apps/web/src/app/(dashboard)/settings/security/page.tsx b/apps/web/src/app/(dashboard)/settings/security/page.tsx
new file mode 100644
index 000000000..9e99b73e8
--- /dev/null
+++ b/apps/web/src/app/(dashboard)/settings/security/page.tsx
@@ -0,0 +1,46 @@
+import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
+
+import { AuthenticatorApp } from '~/components/forms/2fa/authenticator-app';
+import { RecoveryCodes } from '~/components/forms/2fa/recovery-codes';
+import { PasswordForm } from '~/components/forms/password';
+
+export default async function SecuritySettingsPage() {
+ const { user } = await getRequiredServerComponentSession();
+
+ return (
+
+
Security
+
+
+ Here you can manage your password and security settings.
+
+
+
+
+
+
+
+
+
Two Factor Authentication
+
+
+ Add and manage your two factor security settings to add an extra layer of security to your
+ account!
+
+
+
+
Two-factor methods
+
+
+
+
+ {user.twoFactorEnabled && (
+
+
Recovery methods
+
+
+
+ )}
+
+ );
+}
diff --git a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
index 67af3c7fa..54757667a 100644
--- a/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/complete/page.tsx
@@ -2,6 +2,7 @@ import Link from 'next/link';
import { notFound } from 'next/navigation';
import { CheckCircle2, Clock8 } from 'lucide-react';
+import { getServerSession } from 'next-auth';
import { match } from 'ts-pattern';
import signingCelebration from '@documenso/assets/images/signing-celebration.png';
@@ -53,6 +54,9 @@ export default async function CompletedSigningPage({
fields.find((field) => field.type === FieldType.NAME)?.customText ||
recipient.email;
+ const sessionData = await getServerSession();
+ const isLoggedIn = !!sessionData?.user;
+
return (
{/* Card with recipient */}
@@ -63,18 +67,24 @@ export default async function CompletedSigningPage({
/>
- {match(document.status)
- .with(DocumentStatus.COMPLETED, () => (
+ {match({ status: document.status, deletedAt: document.deletedAt })
+ .with({ status: DocumentStatus.COMPLETED }, () => (
Everyone has signed
))
- .otherwise(() => (
+ .with({ deletedAt: null }, () => (
Waiting for others to sign
+ ))
+ .otherwise(() => (
+
+
+ Document no longer available to sign
+
))}
@@ -82,16 +92,22 @@ export default async function CompletedSigningPage({
"{document.title}"
- {match(document.status)
- .with(DocumentStatus.COMPLETED, () => (
+ {match({ status: document.status, deletedAt: document.deletedAt })
+ .with({ status: DocumentStatus.COMPLETED }, () => (
Everyone has signed! You will receive an Email copy of the signed document.
))
- .otherwise(() => (
+ .with({ deletedAt: null }, () => (
You will receive an Email copy of the signed document once everyone has signed.
+ ))
+ .otherwise(() => (
+
+ This document has been cancelled by the owner and is no longer available for others to
+ sign.
+
))}
@@ -105,15 +121,21 @@ export default async function CompletedSigningPage({
/>
-
- Want to send slick signing links like this one?{' '}
-
- Check out Documenso.
+ {isLoggedIn ? (
+
+ Go Back Home
-
+ ) : (
+
+ Want to send slick signing links like this one?{' '}
+
+ Check out Documenso.
+
+
+ )}
);
diff --git a/apps/web/src/app/(signing)/sign/[token]/form.tsx b/apps/web/src/app/(signing)/sign/[token]/form.tsx
index 57b737c0c..66f3cb5a7 100644
--- a/apps/web/src/app/(signing)/sign/[token]/form.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/form.tsx
@@ -8,7 +8,6 @@ import { useSession } from 'next-auth/react';
import { useForm } from 'react-hook-form';
import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics';
-import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token';
import { sortFieldsByPosition, validateFieldsInserted } from '@documenso/lib/utils/fields';
import type { Document, Field, Recipient } from '@documenso/prisma/client';
import { FieldToolTip } from '@documenso/ui/components/field/field-tooltip';
@@ -36,6 +35,9 @@ export const SigningForm = ({ document, recipient, fields }: SigningFormProps) =
const { fullName, signature, setFullName, setSignature } = useRequiredSigningContext();
const [validateUninsertedFields, setValidateUninsertedFields] = useState(false);
+ const { mutateAsync: completeDocumentWithToken } =
+ trpc.recipient.completeDocumentWithToken.useMutation();
+
const {
handleSubmit,
formState: { isSubmitting },
diff --git a/apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx b/apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx
new file mode 100644
index 000000000..8c7051caa
--- /dev/null
+++ b/apps/web/src/app/(signing)/sign/[token]/no-longer-available.tsx
@@ -0,0 +1,66 @@
+import React from 'react';
+
+import Link from 'next/link';
+
+import { Clock8 } from 'lucide-react';
+import { useSession } from 'next-auth/react';
+
+import signingCelebration from '@documenso/assets/images/signing-celebration.png';
+import type { Document, Signature } from '@documenso/prisma/client';
+import { SigningCard3D } from '@documenso/ui/components/signing-card';
+
+type NoLongerAvailableProps = {
+ document: Document;
+ recipientName: string;
+ recipientSignature: Signature;
+};
+
+export const NoLongerAvailable = ({
+ document,
+ recipientName,
+ recipientSignature,
+}: NoLongerAvailableProps) => {
+ const { data: session } = useSession();
+
+ return (
+
+
+
+
+
+
+ Document Cancelled
+
+
+
+ "{document.title}"
+ is no longer available to sign
+
+
+
+ This document has been cancelled by the owner.
+
+
+ {session?.user ? (
+
+ Go Back Home
+
+ ) : (
+
+ Want to send slick signing links like this one?{' '}
+
+ Check out Documenso.
+
+
+ )}
+
+
+ );
+};
diff --git a/apps/web/src/app/(signing)/sign/[token]/page.tsx b/apps/web/src/app/(signing)/sign/[token]/page.tsx
index 67e679412..97babb82f 100644
--- a/apps/web/src/app/(signing)/sign/[token]/page.tsx
+++ b/apps/web/src/app/(signing)/sign/[token]/page.tsx
@@ -8,6 +8,7 @@ import { getDocumentAndSenderByToken } from '@documenso/lib/server-only/document
import { viewedDocument } from '@documenso/lib/server-only/document/viewed-document';
import { getFieldsForToken } from '@documenso/lib/server-only/field/get-fields-for-token';
import { getRecipientByToken } from '@documenso/lib/server-only/recipient/get-recipient-by-token';
+import { getRecipientSignatures } from '@documenso/lib/server-only/recipient/get-recipient-signatures';
import { DocumentStatus, FieldType, SigningStatus } from '@documenso/prisma/client';
import { Card, CardContent } from '@documenso/ui/primitives/card';
import { ElementVisible } from '@documenso/ui/primitives/element-visible';
@@ -17,6 +18,7 @@ import { DateField } from './date-field';
import { EmailField } from './email-field';
import { SigningForm } from './form';
import { NameField } from './name-field';
+import { NoLongerAvailable } from './no-longer-available';
import { SigningProvider } from './provider';
import { SignatureField } from './signature-field';
@@ -55,6 +57,18 @@ export default async function SigningPage({ params: { token } }: SigningPageProp
redirect(`/sign/${token}/complete`);
}
+ const [recipientSignature] = await getRecipientSignatures({ recipientId: recipient.id });
+
+ if (document.deletedAt) {
+ return (
+
+ );
+ }
+
return (
{
return;
}
+ const value = source === 'local' && localSignature ? localSignature : providedSignature ?? '';
+
+ if (!value) {
+ return;
+ }
+
await signFieldWithToken({
token: recipient.token,
fieldId: field.id,
- value: source === 'local' && localSignature ? localSignature : providedSignature ?? '',
+ value,
isBase64: true,
});
diff --git a/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx b/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx
new file mode 100644
index 000000000..f671fb101
--- /dev/null
+++ b/apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx
@@ -0,0 +1,97 @@
+import Link from 'next/link';
+
+import { AlertTriangle, CheckCircle2, XCircle, XOctagon } from 'lucide-react';
+
+import { verifyEmail } from '@documenso/lib/server-only/user/verify-email';
+import { Button } from '@documenso/ui/primitives/button';
+
+export type PageProps = {
+ params: {
+ token: string;
+ };
+};
+
+export default async function VerifyEmailPage({ params: { token } }: PageProps) {
+ if (!token) {
+ return (
+
+
+
+
+
+
No token provided
+
+ It seems that there is no token provided. Please check your email and try again.
+
+
+ );
+ }
+
+ const verified = await verifyEmail({ token });
+
+ if (verified === null) {
+ return (
+
+
+
+
+
Something went wrong
+
+
+ We were unable to verify your email. If your email is not verified already, please try
+ again.
+
+
+
+
+
+ );
+ }
+
+ if (!verified) {
+ return (
+
+
+
+
+
+
+
Your token has expired!
+
+
+ It seems that the provided token has expired. We've just sent you another token, please
+ check your email and try again.
+
+
+
+
+
+ );
+ }
+
+ return (
+
+
+
+
+
+
+
Email Confirmed!
+
+
+ Your email has been successfully confirmed! You can now use all features of Documenso.
+
+
+
+
+
+ );
+}
diff --git a/apps/web/src/app/(unauthenticated)/verify-email/page.tsx b/apps/web/src/app/(unauthenticated)/verify-email/page.tsx
new file mode 100644
index 000000000..04202d19b
--- /dev/null
+++ b/apps/web/src/app/(unauthenticated)/verify-email/page.tsx
@@ -0,0 +1,28 @@
+import Link from 'next/link';
+
+import { XCircle } from 'lucide-react';
+
+import { Button } from '@documenso/ui/primitives/button';
+
+export default function EmailVerificationWithoutTokenPage() {
+ return (
+
+
+
+
+
+
+
Uh oh! Looks like you're missing a token
+
+
+ It seems that there is no token provided, if you are trying to verify your email please
+ follow the link in your email.
+
+
+
+
+
+ );
+}
diff --git a/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx b/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx
index 333cc6134..7429d8ee5 100644
--- a/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx
+++ b/apps/web/src/components/(dashboard)/avatar/stack-avatars-with-tooltip.tsx
@@ -69,15 +69,7 @@ export const StackAvatarsWithTooltip = ({
Waiting
{waitingRecipients.map((recipient: Recipient) => (
-
-
- {recipient.email}
-
+
))}
)}
diff --git a/apps/web/src/components/(dashboard)/common/command-menu.tsx b/apps/web/src/components/(dashboard)/common/command-menu.tsx
index 8d21f8d6a..ab0bba6af 100644
--- a/apps/web/src/components/(dashboard)/common/command-menu.tsx
+++ b/apps/web/src/components/(dashboard)/common/command-menu.tsx
@@ -4,7 +4,7 @@ import { useCallback, useMemo, useState } from 'react';
import { useRouter } from 'next/navigation';
-import { Monitor, Moon, Sun } from 'lucide-react';
+import { Loader, Monitor, Moon, Sun } from 'lucide-react';
import { useTheme } from 'next-themes';
import { useHotkeys } from 'react-hotkeys-hook';
@@ -12,6 +12,7 @@ import {
DOCUMENTS_PAGE_SHORTCUT,
SETTINGS_PAGE_SHORTCUT,
} from '@documenso/lib/constants/keyboard-shortcuts';
+import { trpc as trpcReact } from '@documenso/trpc/react';
import {
CommandDialog,
CommandEmpty,
@@ -29,13 +30,20 @@ const DOCUMENTS_PAGES = [
shortcut: DOCUMENTS_PAGE_SHORTCUT.replace('+', ''),
},
{ label: 'Draft documents', path: '/documents?status=DRAFT' },
- { label: 'Completed documents', path: '/documents?status=COMPLETED' },
+ {
+ label: 'Completed documents',
+ path: '/documents?status=COMPLETED',
+ },
{ label: 'Pending documents', path: '/documents?status=PENDING' },
{ label: 'Inbox documents', path: '/documents?status=INBOX' },
];
const SETTINGS_PAGES = [
- { label: 'Settings', path: '/settings', shortcut: SETTINGS_PAGE_SHORTCUT.replace('+', '') },
+ {
+ label: 'Settings',
+ path: '/settings',
+ shortcut: SETTINGS_PAGE_SHORTCUT.replace('+', ''),
+ },
{ label: 'Profile', path: '/settings/profile' },
{ label: 'Password', path: '/settings/password' },
];
@@ -53,6 +61,29 @@ export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
const [search, setSearch] = useState('');
const [pages, setPages] = useState([]);
+ const { data: searchDocumentsData, isLoading: isSearchingDocuments } =
+ trpcReact.document.searchDocuments.useQuery(
+ {
+ query: search,
+ },
+ {
+ keepPreviousData: true,
+ },
+ );
+
+ const searchResults = useMemo(() => {
+ if (!searchDocumentsData) {
+ return [];
+ }
+
+ return searchDocumentsData.map((document) => ({
+ label: document.title,
+ path: `/documents/${document.id}`,
+ value:
+ document.title + ' ' + document.Recipient.map((recipient) => recipient.email).join(' '),
+ }));
+ }, [searchDocumentsData]);
+
const currentPage = pages[pages.length - 1];
const toggleOpen = () => {
@@ -113,7 +144,13 @@ export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
};
return (
-
+
- No results found.
+ {isSearchingDocuments ? (
+
+
+
+
+
+
+
+ ) : (
+ No results found.
+ )}
{!currentPage && (
<>
@@ -133,6 +180,11 @@ export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
addPage('theme')}>Change theme
+ {searchResults.length > 0 && (
+
+
+
+ )}
>
)}
{currentPage === 'theme' && }
@@ -146,10 +198,14 @@ const Commands = ({
pages,
}: {
push: (_path: string) => void;
- pages: { label: string; path: string; shortcut?: string }[];
+ pages: { label: string; path: string; shortcut?: string; value?: string }[];
}) => {
- return pages.map((page) => (
- push(page.path)}>
+ return pages.map((page, idx) => (
+ push(page.path)}
+ >
{page.label}
{page.shortcut && {page.shortcut}}
diff --git a/apps/web/src/components/(dashboard)/layout/desktop-nav.tsx b/apps/web/src/components/(dashboard)/layout/desktop-nav.tsx
index a78c69704..76077cb04 100644
--- a/apps/web/src/components/(dashboard)/layout/desktop-nav.tsx
+++ b/apps/web/src/components/(dashboard)/layout/desktop-nav.tsx
@@ -1,7 +1,7 @@
'use client';
import type { HTMLAttributes } from 'react';
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
import { Search } from 'lucide-react';
@@ -15,9 +15,14 @@ export type DesktopNavProps = HTMLAttributes;
export const DesktopNav = ({ className, ...props }: DesktopNavProps) => {
// const pathname = usePathname();
const [open, setOpen] = useState(false);
+ const [modifierKey, setModifierKey] = useState(() => 'Ctrl');
- const isMacOS = /Macintosh|Mac\s+OS\s+X/i.test(navigator?.userAgent || 'unknown');
- const modifierKey = isMacOS ? '⌘' : 'Ctrl';
+ useEffect(() => {
+ const userAgent = typeof navigator !== 'undefined' ? navigator.userAgent : 'unknown';
+ const isMacOS = /Macintosh|Mac\s+OS\s+X/i.test(userAgent);
+
+ setModifierKey(isMacOS ? '⌘' : 'Ctrl');
+ }, []);
return (
{
-
diff --git a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
index d699dea4b..e488ba6e9 100644
--- a/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
+++ b/apps/web/src/components/(dashboard)/layout/profile-dropdown.tsx
@@ -4,7 +4,7 @@ import Link from 'next/link';
import {
CreditCard,
- Key,
+ Lock,
LogOut,
User as LucideUser,
Monitor,
@@ -20,7 +20,7 @@ import { LuGithub } from 'react-icons/lu';
import { useFeatureFlags } from '@documenso/lib/client-only/providers/feature-flag';
import { isAdmin } from '@documenso/lib/next-auth/guards/is-admin';
import { recipientInitials } from '@documenso/lib/utils/recipient-formatter';
-import { User } from '@documenso/prisma/client';
+import type { User } from '@documenso/prisma/client';
import { Avatar, AvatarFallback } from '@documenso/ui/primitives/avatar';
import { Button } from '@documenso/ui/primitives/button';
import {
@@ -56,7 +56,11 @@ export const ProfileDropdown = ({ user }: ProfileDropdownProps) => {
return (
-
-
+
-
- Password
+
+ Security
diff --git a/apps/web/src/components/forms/2fa/authenticator-app.tsx b/apps/web/src/components/forms/2fa/authenticator-app.tsx
new file mode 100644
index 000000000..1d164bd22
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/authenticator-app.tsx
@@ -0,0 +1,58 @@
+'use client';
+
+import { useState } from 'react';
+
+import { Button } from '@documenso/ui/primitives/button';
+
+import { DisableAuthenticatorAppDialog } from './disable-authenticator-app-dialog';
+import { EnableAuthenticatorAppDialog } from './enable-authenticator-app-dialog';
+
+type AuthenticatorAppProps = {
+ isTwoFactorEnabled: boolean;
+};
+
+export const AuthenticatorApp = ({ isTwoFactorEnabled }: AuthenticatorAppProps) => {
+ const [modalState, setModalState] = useState<'enable' | 'disable' | null>(null);
+
+ const isEnableDialogOpen = modalState === 'enable';
+ const isDisableDialogOpen = modalState === 'disable';
+
+ return (
+ <>
+
+
+
Authenticator app
+
+
+ Create one-time passwords that serve as a secondary authentication method for confirming
+ your identity when requested during the sign-in process.
+
+
+
+
+ {isTwoFactorEnabled ? (
+ setModalState('disable')} size="sm">
+ Disable 2FA
+
+ ) : (
+ setModalState('enable')} size="sm">
+ Enable 2FA
+
+ )}
+
+
+
+ !open && setModalState(null)}
+ />
+
+ !open && setModalState(null)}
+ />
+ >
+ );
+};
diff --git a/apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx b/apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx
new file mode 100644
index 000000000..eac574181
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx
@@ -0,0 +1,161 @@
+import { useRouter } from 'next/navigation';
+
+import { zodResolver } from '@hookform/resolvers/zod';
+import { flushSync } from 'react-dom';
+import { useForm } from 'react-hook-form';
+import { z } from 'zod';
+
+import { trpc } from '@documenso/trpc/react';
+import { Button } from '@documenso/ui/primitives/button';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from '@documenso/ui/primitives/dialog';
+import {
+ Form,
+ FormControl,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from '@documenso/ui/primitives/form/form';
+import { Input } from '@documenso/ui/primitives/input';
+import { useToast } from '@documenso/ui/primitives/use-toast';
+
+export const ZDisableTwoFactorAuthenticationForm = z.object({
+ password: z.string().min(6).max(72),
+ backupCode: z.string(),
+});
+
+export type TDisableTwoFactorAuthenticationForm = z.infer<
+ typeof ZDisableTwoFactorAuthenticationForm
+>;
+
+export type DisableAuthenticatorAppDialogProps = {
+ open: boolean;
+ onOpenChange: (_open: boolean) => void;
+};
+
+export const DisableAuthenticatorAppDialog = ({
+ open,
+ onOpenChange,
+}: DisableAuthenticatorAppDialogProps) => {
+ const router = useRouter();
+ const { toast } = useToast();
+
+ const { mutateAsync: disableTwoFactorAuthentication } =
+ trpc.twoFactorAuthentication.disable.useMutation();
+
+ const disableTwoFactorAuthenticationForm = useForm({
+ defaultValues: {
+ password: '',
+ backupCode: '',
+ },
+ resolver: zodResolver(ZDisableTwoFactorAuthenticationForm),
+ });
+
+ const { isSubmitting: isDisableTwoFactorAuthenticationSubmitting } =
+ disableTwoFactorAuthenticationForm.formState;
+
+ const onDisableTwoFactorAuthenticationFormSubmit = async ({
+ password,
+ backupCode,
+ }: TDisableTwoFactorAuthenticationForm) => {
+ try {
+ await disableTwoFactorAuthentication({ password, backupCode });
+
+ toast({
+ title: 'Two-factor authentication disabled',
+ description:
+ 'Two-factor authentication has been disabled for your account. You will no longer be required to enter a code from your authenticator app when signing in.',
+ });
+
+ flushSync(() => {
+ onOpenChange(false);
+ });
+
+ router.refresh();
+ } catch (_err) {
+ toast({
+ title: 'Unable to disable two-factor authentication',
+ description:
+ 'We were unable to disable two-factor authentication for your account. Please ensure that you have entered your password and backup code correctly and try again.',
+ variant: 'destructive',
+ });
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx b/apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx
new file mode 100644
index 000000000..8bf835ef5
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/enable-authenticator-app-dialog.tsx
@@ -0,0 +1,283 @@
+import { useMemo } from 'react';
+
+import { useRouter } from 'next/navigation';
+
+import { zodResolver } from '@hookform/resolvers/zod';
+import { flushSync } from 'react-dom';
+import { useForm } from 'react-hook-form';
+import { match } from 'ts-pattern';
+import { renderSVG } from 'uqr';
+import { z } from 'zod';
+
+import { trpc } from '@documenso/trpc/react';
+import { Button } from '@documenso/ui/primitives/button';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from '@documenso/ui/primitives/dialog';
+import {
+ Form,
+ FormControl,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from '@documenso/ui/primitives/form/form';
+import { Input } from '@documenso/ui/primitives/input';
+import { useToast } from '@documenso/ui/primitives/use-toast';
+
+import { RecoveryCodeList } from './recovery-code-list';
+
+export const ZSetupTwoFactorAuthenticationForm = z.object({
+ password: z.string().min(6).max(72),
+});
+
+export type TSetupTwoFactorAuthenticationForm = z.infer;
+
+export const ZEnableTwoFactorAuthenticationForm = z.object({
+ token: z.string(),
+});
+
+export type TEnableTwoFactorAuthenticationForm = z.infer;
+
+export type EnableAuthenticatorAppDialogProps = {
+ open: boolean;
+ onOpenChange: (_open: boolean) => void;
+};
+
+export const EnableAuthenticatorAppDialog = ({
+ open,
+ onOpenChange,
+}: EnableAuthenticatorAppDialogProps) => {
+ const router = useRouter();
+ const { toast } = useToast();
+
+ const { mutateAsync: setupTwoFactorAuthentication, data: setupTwoFactorAuthenticationData } =
+ trpc.twoFactorAuthentication.setup.useMutation();
+
+ const { mutateAsync: enableTwoFactorAuthentication, data: enableTwoFactorAuthenticationData } =
+ trpc.twoFactorAuthentication.enable.useMutation();
+
+ const setupTwoFactorAuthenticationForm = useForm({
+ defaultValues: {
+ password: '',
+ },
+ resolver: zodResolver(ZSetupTwoFactorAuthenticationForm),
+ });
+
+ const { isSubmitting: isSetupTwoFactorAuthenticationSubmitting } =
+ setupTwoFactorAuthenticationForm.formState;
+
+ const enableTwoFactorAuthenticationForm = useForm({
+ defaultValues: {
+ token: '',
+ },
+ resolver: zodResolver(ZEnableTwoFactorAuthenticationForm),
+ });
+
+ const { isSubmitting: isEnableTwoFactorAuthenticationSubmitting } =
+ enableTwoFactorAuthenticationForm.formState;
+
+ const step = useMemo(() => {
+ if (!setupTwoFactorAuthenticationData || isSetupTwoFactorAuthenticationSubmitting) {
+ return 'setup';
+ }
+
+ if (!enableTwoFactorAuthenticationData || isEnableTwoFactorAuthenticationSubmitting) {
+ return 'enable';
+ }
+
+ return 'view';
+ }, [
+ setupTwoFactorAuthenticationData,
+ isSetupTwoFactorAuthenticationSubmitting,
+ enableTwoFactorAuthenticationData,
+ isEnableTwoFactorAuthenticationSubmitting,
+ ]);
+
+ const onSetupTwoFactorAuthenticationFormSubmit = async ({
+ password,
+ }: TSetupTwoFactorAuthenticationForm) => {
+ try {
+ await setupTwoFactorAuthentication({ password });
+ } catch (_err) {
+ toast({
+ title: 'Unable to setup two-factor authentication',
+ description:
+ 'We were unable to setup two-factor authentication for your account. Please ensure that you have entered your password correctly and try again.',
+ variant: 'destructive',
+ });
+ }
+ };
+
+ const onEnableTwoFactorAuthenticationFormSubmit = async ({
+ token,
+ }: TEnableTwoFactorAuthenticationForm) => {
+ try {
+ await enableTwoFactorAuthentication({ code: token });
+
+ toast({
+ title: 'Two-factor authentication enabled',
+ description:
+ 'Two-factor authentication has been enabled for your account. You will now be required to enter a code from your authenticator app when signing in.',
+ });
+ } catch (_err) {
+ toast({
+ title: 'Unable to setup two-factor authentication',
+ description:
+ 'We were unable to setup two-factor authentication for your account. Please ensure that you have entered your password correctly and try again.',
+ variant: 'destructive',
+ });
+ }
+ };
+
+ const onCompleteClick = () => {
+ flushSync(() => {
+ onOpenChange(false);
+ });
+
+ router.refresh();
+ };
+
+ return (
+
+ );
+};
diff --git a/apps/web/src/components/forms/2fa/recovery-code-list.tsx b/apps/web/src/components/forms/2fa/recovery-code-list.tsx
new file mode 100644
index 000000000..d2efb0b4b
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/recovery-code-list.tsx
@@ -0,0 +1,57 @@
+import { Copy } from 'lucide-react';
+
+import { useCopyToClipboard } from '@documenso/lib/client-only/hooks/use-copy-to-clipboard';
+import { useToast } from '@documenso/ui/primitives/use-toast';
+
+export type RecoveryCodeListProps = {
+ recoveryCodes: string[];
+};
+
+export const RecoveryCodeList = ({ recoveryCodes }: RecoveryCodeListProps) => {
+ const { toast } = useToast();
+ const [, copyToClipboard] = useCopyToClipboard();
+
+ const onCopyRecoveryCodeClick = async (code: string) => {
+ try {
+ const result = await copyToClipboard(code);
+
+ if (!result) {
+ throw new Error('Unable to copy recovery code');
+ }
+
+ toast({
+ title: 'Recovery code copied',
+ description: 'Your recovery code has been copied to your clipboard.',
+ });
+ } catch (_err) {
+ toast({
+ title: 'Unable to copy recovery code',
+ description:
+ 'We were unable to copy your recovery code to your clipboard. Please try again.',
+ variant: 'destructive',
+ });
+ }
+ };
+
+ return (
+
+ {recoveryCodes.map((code) => (
+
+
{code}
+
+
+ void onCopyRecoveryCodeClick(code)}
+ >
+
+
+
+
+ ))}
+
+ );
+};
diff --git a/apps/web/src/components/forms/2fa/recovery-codes.tsx b/apps/web/src/components/forms/2fa/recovery-codes.tsx
new file mode 100644
index 000000000..7e8950227
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/recovery-codes.tsx
@@ -0,0 +1,43 @@
+'use client';
+
+import { useState } from 'react';
+
+import { Button } from '@documenso/ui/primitives/button';
+
+import { ViewRecoveryCodesDialog } from './view-recovery-codes-dialog';
+
+type RecoveryCodesProps = {
+ // backupCodes: string[] | null;
+ isTwoFactorEnabled: boolean;
+};
+
+export const RecoveryCodes = ({ isTwoFactorEnabled }: RecoveryCodesProps) => {
+ const [isOpen, setIsOpen] = useState(false);
+
+ return (
+ <>
+
+
+
Recovery Codes
+
+
+ Recovery codes are used to access your account in the event that you lose access to your
+ authenticator app.
+
+
+
+
+ setIsOpen(true)} disabled={!isTwoFactorEnabled} size="sm">
+ View Codes
+
+
+
+
+
+ >
+ );
+};
diff --git a/apps/web/src/components/forms/2fa/view-recovery-codes-dialog.tsx b/apps/web/src/components/forms/2fa/view-recovery-codes-dialog.tsx
new file mode 100644
index 000000000..6275f16d6
--- /dev/null
+++ b/apps/web/src/components/forms/2fa/view-recovery-codes-dialog.tsx
@@ -0,0 +1,151 @@
+import { useMemo } from 'react';
+
+import { zodResolver } from '@hookform/resolvers/zod';
+import { useForm } from 'react-hook-form';
+import { match } from 'ts-pattern';
+import { z } from 'zod';
+
+import { trpc } from '@documenso/trpc/react';
+import { Button } from '@documenso/ui/primitives/button';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogHeader,
+ DialogTitle,
+} from '@documenso/ui/primitives/dialog';
+import {
+ Form,
+ FormControl,
+ FormField,
+ FormItem,
+ FormLabel,
+ FormMessage,
+} from '@documenso/ui/primitives/form/form';
+import { Input } from '@documenso/ui/primitives/input';
+import { useToast } from '@documenso/ui/primitives/use-toast';
+
+import { RecoveryCodeList } from './recovery-code-list';
+
+export const ZViewRecoveryCodesForm = z.object({
+ password: z.string().min(6).max(72),
+});
+
+export type TViewRecoveryCodesForm = z.infer;
+
+export type ViewRecoveryCodesDialogProps = {
+ open: boolean;
+ onOpenChange: (_open: boolean) => void;
+};
+
+export const ViewRecoveryCodesDialog = ({ open, onOpenChange }: ViewRecoveryCodesDialogProps) => {
+ const { toast } = useToast();
+
+ const { mutateAsync: viewRecoveryCodes, data: viewRecoveryCodesData } =
+ trpc.twoFactorAuthentication.viewRecoveryCodes.useMutation();
+
+ const viewRecoveryCodesForm = useForm({
+ defaultValues: {
+ password: '',
+ },
+ resolver: zodResolver(ZViewRecoveryCodesForm),
+ });
+
+ const { isSubmitting: isViewRecoveryCodesSubmitting } = viewRecoveryCodesForm.formState;
+
+ const step = useMemo(() => {
+ if (!viewRecoveryCodesData || isViewRecoveryCodesSubmitting) {
+ return 'authenticate';
+ }
+
+ return 'view';
+ }, [viewRecoveryCodesData, isViewRecoveryCodesSubmitting]);
+
+ const onViewRecoveryCodesFormSubmit = async ({ password }: TViewRecoveryCodesForm) => {
+ try {
+ await viewRecoveryCodes({ password });
+ } catch (_err) {
+ toast({
+ title: 'Unable to view recovery codes',
+ description:
+ 'We were unable to view your recovery codes. Please ensure that you have entered your password correctly and try again.',
+ variant: 'destructive',
+ });
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/apps/web/src/components/forms/edit-document/add-fields.action.ts b/apps/web/src/components/forms/edit-document/add-fields.action.ts
deleted file mode 100644
index edc5e7e39..000000000
--- a/apps/web/src/components/forms/edit-document/add-fields.action.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-'use server';
-
-import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
-import { setFieldsForDocument } from '@documenso/lib/server-only/field/set-fields-for-document';
-import type { TAddFieldsFormSchema } from '@documenso/ui/primitives/document-flow/add-fields.types';
-
-export type AddFieldsActionInput = TAddFieldsFormSchema & {
- documentId: number;
-};
-
-export const addFields = async ({ documentId, fields }: AddFieldsActionInput) => {
- 'use server';
-
- const { user } = await getRequiredServerComponentSession();
-
- await setFieldsForDocument({
- userId: user.id,
- documentId,
- fields: fields.map((field) => ({
- id: field.nativeId,
- signerEmail: field.signerEmail,
- type: field.type,
- pageNumber: field.pageNumber,
- pageX: field.pageX,
- pageY: field.pageY,
- pageWidth: field.pageWidth,
- pageHeight: field.pageHeight,
- })),
- });
-};
diff --git a/apps/web/src/components/forms/edit-document/add-signers.action.ts b/apps/web/src/components/forms/edit-document/add-signers.action.ts
deleted file mode 100644
index c36d51c41..000000000
--- a/apps/web/src/components/forms/edit-document/add-signers.action.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-'use server';
-
-import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
-import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
-import type { TAddSignersFormSchema } from '@documenso/ui/primitives/document-flow/add-signers.types';
-
-export type AddSignersActionInput = TAddSignersFormSchema & {
- documentId: number;
-};
-
-export const addSigners = async ({ documentId, signers }: AddSignersActionInput) => {
- 'use server';
-
- const { user } = await getRequiredServerComponentSession();
-
- await setRecipientsForDocument({
- userId: user.id,
- documentId,
- recipients: signers.map((signer) => ({
- id: signer.nativeId,
- email: signer.email,
- name: signer.name,
- })),
- });
-};
diff --git a/apps/web/src/components/forms/edit-document/add-subject.action.ts b/apps/web/src/components/forms/edit-document/add-subject.action.ts
deleted file mode 100644
index 56d6f694d..000000000
--- a/apps/web/src/components/forms/edit-document/add-subject.action.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-'use server';
-
-import { getRequiredServerComponentSession } from '@documenso/lib/next-auth/get-server-component-session';
-import { upsertDocumentMeta } from '@documenso/lib/server-only/document-meta/upsert-document-meta';
-import { sendDocument } from '@documenso/lib/server-only/document/send-document';
-import type { TAddSubjectFormSchema } from '@documenso/ui/primitives/document-flow/add-subject.types';
-
-export type CompleteDocumentActionInput = TAddSubjectFormSchema & {
- documentId: number;
-};
-
-export const completeDocument = async ({ documentId, email }: CompleteDocumentActionInput) => {
- 'use server';
-
- const { user } = await getRequiredServerComponentSession();
-
- if (email.message || email.subject) {
- await upsertDocumentMeta({
- documentId,
- subject: email.subject,
- message: email.message,
- });
- }
-
- return await sendDocument({
- userId: user.id,
- documentId,
- });
-};
diff --git a/apps/web/src/components/forms/password.tsx b/apps/web/src/components/forms/password.tsx
index 5df5005f1..47cba1e88 100644
--- a/apps/web/src/components/forms/password.tsx
+++ b/apps/web/src/components/forms/password.tsx
@@ -20,9 +20,18 @@ import { FormErrorMessage } from '../form/form-error-message';
export const ZPasswordFormSchema = z
.object({
- currentPassword: z.string().min(6).max(72),
- password: z.string().min(6).max(72),
- repeatedPassword: z.string().min(6).max(72),
+ currentPassword: z
+ .string()
+ .min(6, { message: 'Password should contain at least 6 characters' })
+ .max(72, { message: 'Password should not contain more than 72 characters' }),
+ password: z
+ .string()
+ .min(6, { message: 'Password should contain at least 6 characters' })
+ .max(72, { message: 'Password should not contain more than 72 characters' }),
+ repeatedPassword: z
+ .string()
+ .min(6, { message: 'Password should contain at least 6 characters' })
+ .max(72, { message: 'Password should not contain more than 72 characters' }),
})
.refine((data) => data.password === data.repeatedPassword, {
message: 'Passwords do not match',
diff --git a/apps/web/src/components/forms/signin.tsx b/apps/web/src/components/forms/signin.tsx
index 43801038d..0d7dd723f 100644
--- a/apps/web/src/components/forms/signin.tsx
+++ b/apps/web/src/components/forms/signin.tsx
@@ -3,7 +3,6 @@
import { useState } from 'react';
import { zodResolver } from '@hookform/resolvers/zod';
-import { Eye, EyeOff } from 'lucide-react';
import { signIn } from 'next-auth/react';
import { useForm } from 'react-hook-form';
import { FcGoogle } from 'react-icons/fc';
@@ -12,23 +11,30 @@ import { z } from 'zod';
import { ErrorCode, isErrorCode } from '@documenso/lib/next-auth/error-codes';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
+import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@documenso/ui/primitives/dialog';
import { FormErrorMessage } from '@documenso/ui/primitives/form/form-error-message';
-import { Input } from '@documenso/ui/primitives/input';
+import { Input, PasswordInput } from '@documenso/ui/primitives/input';
import { Label } from '@documenso/ui/primitives/label';
import { useToast } from '@documenso/ui/primitives/use-toast';
-const ERROR_MESSAGES = {
+const ERROR_MESSAGES: Partial> = {
[ErrorCode.CREDENTIALS_NOT_FOUND]: 'The email or password provided is incorrect',
[ErrorCode.INCORRECT_EMAIL_PASSWORD]: 'The email or password provided is incorrect',
[ErrorCode.USER_MISSING_PASSWORD]:
'This account appears to be using a social login method, please sign in using that method',
+ [ErrorCode.INCORRECT_TWO_FACTOR_CODE]: 'The two-factor authentication code provided is incorrect',
+ [ErrorCode.INCORRECT_TWO_FACTOR_BACKUP_CODE]: 'The backup code provided is incorrect',
};
+const TwoFactorEnabledErrorCode = ErrorCode.TWO_FACTOR_MISSING_CREDENTIALS;
+
const LOGIN_REDIRECT_PATH = '/documents';
export const ZSignInFormSchema = z.object({
email: z.string().email().min(1),
password: z.string().min(6).max(72),
+ totpCode: z.string().trim().optional(),
+ backupCode: z.string().trim().optional(),
});
export type TSignInFormSchema = z.infer;
@@ -39,33 +45,84 @@ export type SignInFormProps = {
export const SignInForm = ({ className }: SignInFormProps) => {
const { toast } = useToast();
- const [showPassword, setShowPassword] = useState(false);
+ const [isTwoFactorAuthenticationDialogOpen, setIsTwoFactorAuthenticationDialogOpen] =
+ useState(false);
+
+ const [twoFactorAuthenticationMethod, setTwoFactorAuthenticationMethod] = useState<
+ 'totp' | 'backup'
+ >('totp');
const {
register,
handleSubmit,
+ setValue,
formState: { errors, isSubmitting },
} = useForm({
values: {
email: '',
password: '',
+ totpCode: '',
+ backupCode: '',
},
resolver: zodResolver(ZSignInFormSchema),
});
- const onFormSubmit = async ({ email, password }: TSignInFormSchema) => {
+ const onCloseTwoFactorAuthenticationDialog = () => {
+ setValue('totpCode', '');
+ setValue('backupCode', '');
+
+ setIsTwoFactorAuthenticationDialogOpen(false);
+ };
+
+ const onToggleTwoFactorAuthenticationMethodClick = () => {
+ const method = twoFactorAuthenticationMethod === 'totp' ? 'backup' : 'totp';
+
+ if (method === 'totp') {
+ setValue('backupCode', '');
+ }
+
+ if (method === 'backup') {
+ setValue('totpCode', '');
+ }
+
+ setTwoFactorAuthenticationMethod(method);
+ };
+
+ const onFormSubmit = async ({ email, password, totpCode, backupCode }: TSignInFormSchema) => {
try {
- const result = await signIn('credentials', {
+ const credentials: Record = {
email,
password,
+ };
+
+ if (totpCode) {
+ credentials.totpCode = totpCode;
+ }
+
+ if (backupCode) {
+ credentials.backupCode = backupCode;
+ }
+
+ const result = await signIn('credentials', {
+ ...credentials,
+
callbackUrl: LOGIN_REDIRECT_PATH,
redirect: false,
});
if (result?.error && isErrorCode(result.error)) {
+ if (result.error === TwoFactorEnabledErrorCode) {
+ setIsTwoFactorAuthenticationDialogOpen(true);
+
+ return;
+ }
+
+ const errorMessage = ERROR_MESSAGES[result.error];
+
toast({
variant: 'destructive',
- description: ERROR_MESSAGES[result.error],
+ title: 'Unable to sign in',
+ description: errorMessage ?? 'An unknown error occurred',
});
return;
@@ -118,31 +175,14 @@ export const SignInForm = ({ className }: SignInFormProps) => {
Password
-
-
-
- setShowPassword((show) => !show)}
- >
- {showPassword ? (
-
- ) : (
-
- )}
-
-
+
@@ -173,6 +213,67 @@ export const SignInForm = ({ className }: SignInFormProps) => {
Google
+
+
);
};
diff --git a/apps/web/src/components/forms/signup.tsx b/apps/web/src/components/forms/signup.tsx
index 8eb2ac0cc..862f4f83e 100644
--- a/apps/web/src/components/forms/signup.tsx
+++ b/apps/web/src/components/forms/signup.tsx
@@ -22,7 +22,10 @@ import { useToast } from '@documenso/ui/primitives/use-toast';
export const ZSignUpFormSchema = z.object({
name: z.string().trim().min(1, { message: 'Please enter a valid name.' }),
email: z.string().email().min(1),
- password: z.string().min(6).max(72),
+ password: z
+ .string()
+ .min(6, { message: 'Password should contain at least 6 characters' })
+ .max(72, { message: 'Password should not contain more than 72 characters' }),
signature: z.string().min(1, { message: 'We need your signature to sign documents' }),
});
@@ -141,6 +144,7 @@ export const SignUpForm = ({ className }: SignUpFormProps) => {
)}
+
diff --git a/apps/web/src/pages/api/health.ts b/apps/web/src/pages/api/health.ts
new file mode 100644
index 000000000..8fd17aba1
--- /dev/null
+++ b/apps/web/src/pages/api/health.ts
@@ -0,0 +1,21 @@
+import type { NextApiRequest, NextApiResponse } from 'next';
+
+import { prisma } from '@documenso/prisma';
+
+export default async function handler(_req: NextApiRequest, res: NextApiResponse) {
+ try {
+ await prisma.$queryRaw`SELECT 1`;
+
+ return res.json({
+ status: 'ok',
+ message: 'All systems operational',
+ });
+ } catch (err) {
+ console.error(err);
+
+ return res.status(500).json({
+ status: 'error',
+ message: err.message,
+ });
+ }
+}
diff --git a/apps/web/src/pages/api/trpc/[trpc].ts b/apps/web/src/pages/api/trpc/[trpc].ts
index a42844904..c43291ea1 100644
--- a/apps/web/src/pages/api/trpc/[trpc].ts
+++ b/apps/web/src/pages/api/trpc/[trpc].ts
@@ -2,6 +2,15 @@ import * as trpcNext from '@documenso/trpc/server/adapters/next';
import { createTrpcContext } from '@documenso/trpc/server/context';
import { appRouter } from '@documenso/trpc/server/router';
+export const config = {
+ maxDuration: 60,
+ api: {
+ bodyParser: {
+ sizeLimit: '50mb',
+ },
+ },
+};
+
export default trpcNext.createNextApiHandler({
router: appRouter,
createContext: async ({ req, res }) => createTrpcContext({ req, res }),
diff --git a/package-lock.json b/package-lock.json
index 72aa53273..61c4749e6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,10 +9,6 @@
"apps/*",
"packages/*"
],
- "dependencies": {
- "react-hotkeys-hook": "^4.4.1",
- "recharts": "^2.7.2"
- },
"devDependencies": {
"@commitlint/cli": "^17.7.1",
"@commitlint/config-conventional": "^17.7.0",
@@ -33,9 +29,10 @@
},
"apps/marketing": {
"name": "@documenso/marketing",
- "version": "0.1.0",
+ "version": "1.2.3",
"license": "AGPL-3.0",
"dependencies": {
+ "@documenso/assets": "*",
"@documenso/lib": "*",
"@documenso/tailwind-config": "*",
"@documenso/trpc": "*",
@@ -46,8 +43,8 @@
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"micro": "^10.0.1",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
"next-contentlayer": "^0.3.4",
"next-plausible": "^3.10.1",
"perfect-freehand": "^1.2.0",
@@ -74,11 +71,24 @@
"integrity": "sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==",
"dev": true
},
+ "apps/marketing/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"apps/web": {
"name": "@documenso/web",
- "version": "0.1.0",
+ "version": "1.2.3",
"license": "AGPL-3.0",
"dependencies": {
+ "@documenso/assets": "*",
"@documenso/ee": "*",
"@documenso/lib": "*",
"@documenso/prisma": "*",
@@ -92,8 +102,8 @@
"lucide-react": "^0.279.0",
"luxon": "^3.4.0",
"micro": "^10.0.1",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
"next-plausible": "^3.10.1",
"next-themes": "^0.2.1",
"perfect-freehand": "^1.2.0",
@@ -109,6 +119,7 @@
"sharp": "0.32.5",
"ts-pattern": "^5.0.5",
"typescript": "5.2.2",
+ "uqr": "^0.1.2",
"zod": "^3.22.4"
},
"devDependencies": {
@@ -125,6 +136,18 @@
"integrity": "sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==",
"dev": true
},
+ "apps/web/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"node_modules/@aashutoshrathi/word-wrap": {
"version": "1.2.6",
"resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
@@ -270,63 +293,65 @@
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
"node_modules/@aws-sdk/client-s3": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.430.0.tgz",
- "integrity": "sha512-KpK6mZsLyxfHTPfXA3Bnuu5li15QhhWCzhSPx6moH6XGPH0hVNHFy05DM9T/1exf6tEAQhi5FJrek9dM/sOdeA==",
+ "version": "3.456.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.456.0.tgz",
+ "integrity": "sha512-987Mls+9w+mpdq4Vpc/OEQ93afkM12H7l97lIejcidZySuLVo5tdOM9ErekmgjAuotFzBgu2ExL83XtYIMgA0g==",
"dependencies": {
"@aws-crypto/sha1-browser": "3.0.0",
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/client-sts": "3.430.0",
- "@aws-sdk/credential-provider-node": "3.430.0",
- "@aws-sdk/middleware-bucket-endpoint": "3.430.0",
- "@aws-sdk/middleware-expect-continue": "3.428.0",
- "@aws-sdk/middleware-flexible-checksums": "3.428.0",
- "@aws-sdk/middleware-host-header": "3.429.0",
- "@aws-sdk/middleware-location-constraint": "3.428.0",
- "@aws-sdk/middleware-logger": "3.428.0",
- "@aws-sdk/middleware-recursion-detection": "3.428.0",
- "@aws-sdk/middleware-sdk-s3": "3.429.0",
- "@aws-sdk/middleware-signing": "3.428.0",
- "@aws-sdk/middleware-ssec": "3.428.0",
- "@aws-sdk/middleware-user-agent": "3.428.0",
- "@aws-sdk/region-config-resolver": "3.430.0",
- "@aws-sdk/signature-v4-multi-region": "3.428.0",
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-endpoints": "3.428.0",
- "@aws-sdk/util-user-agent-browser": "3.428.0",
- "@aws-sdk/util-user-agent-node": "3.430.0",
+ "@aws-sdk/client-sts": "3.454.0",
+ "@aws-sdk/core": "3.451.0",
+ "@aws-sdk/credential-provider-node": "3.451.0",
+ "@aws-sdk/middleware-bucket-endpoint": "3.451.0",
+ "@aws-sdk/middleware-expect-continue": "3.451.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.451.0",
+ "@aws-sdk/middleware-host-header": "3.451.0",
+ "@aws-sdk/middleware-location-constraint": "3.451.0",
+ "@aws-sdk/middleware-logger": "3.451.0",
+ "@aws-sdk/middleware-recursion-detection": "3.451.0",
+ "@aws-sdk/middleware-sdk-s3": "3.451.0",
+ "@aws-sdk/middleware-signing": "3.451.0",
+ "@aws-sdk/middleware-ssec": "3.451.0",
+ "@aws-sdk/middleware-user-agent": "3.451.0",
+ "@aws-sdk/region-config-resolver": "3.451.0",
+ "@aws-sdk/signature-v4-multi-region": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-endpoints": "3.451.0",
+ "@aws-sdk/util-user-agent-browser": "3.451.0",
+ "@aws-sdk/util-user-agent-node": "3.451.0",
"@aws-sdk/xml-builder": "3.310.0",
- "@smithy/config-resolver": "^2.0.15",
- "@smithy/eventstream-serde-browser": "^2.0.11",
- "@smithy/eventstream-serde-config-resolver": "^2.0.11",
- "@smithy/eventstream-serde-node": "^2.0.11",
- "@smithy/fetch-http-handler": "^2.2.3",
- "@smithy/hash-blob-browser": "^2.0.11",
- "@smithy/hash-node": "^2.0.11",
- "@smithy/hash-stream-node": "^2.0.11",
- "@smithy/invalid-dependency": "^2.0.11",
- "@smithy/md5-js": "^2.0.11",
- "@smithy/middleware-content-length": "^2.0.13",
- "@smithy/middleware-endpoint": "^2.1.2",
- "@smithy/middleware-retry": "^2.0.17",
- "@smithy/middleware-serde": "^2.0.11",
- "@smithy/middleware-stack": "^2.0.5",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/node-http-handler": "^2.1.7",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
- "@smithy/util-base64": "^2.0.0",
+ "@smithy/config-resolver": "^2.0.18",
+ "@smithy/eventstream-serde-browser": "^2.0.13",
+ "@smithy/eventstream-serde-config-resolver": "^2.0.13",
+ "@smithy/eventstream-serde-node": "^2.0.13",
+ "@smithy/fetch-http-handler": "^2.2.6",
+ "@smithy/hash-blob-browser": "^2.0.14",
+ "@smithy/hash-node": "^2.0.15",
+ "@smithy/hash-stream-node": "^2.0.15",
+ "@smithy/invalid-dependency": "^2.0.13",
+ "@smithy/md5-js": "^2.0.15",
+ "@smithy/middleware-content-length": "^2.0.15",
+ "@smithy/middleware-endpoint": "^2.2.0",
+ "@smithy/middleware-retry": "^2.0.20",
+ "@smithy/middleware-serde": "^2.0.13",
+ "@smithy/middleware-stack": "^2.0.7",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.9",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
+ "@smithy/url-parser": "^2.0.13",
+ "@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.15",
- "@smithy/util-defaults-mode-node": "^2.0.20",
- "@smithy/util-retry": "^2.0.4",
- "@smithy/util-stream": "^2.0.16",
- "@smithy/util-utf8": "^2.0.0",
- "@smithy/util-waiter": "^2.0.11",
+ "@smithy/util-defaults-mode-browser": "^2.0.19",
+ "@smithy/util-defaults-mode-node": "^2.0.25",
+ "@smithy/util-endpoints": "^1.0.4",
+ "@smithy/util-retry": "^2.0.6",
+ "@smithy/util-stream": "^2.0.20",
+ "@smithy/util-utf8": "^2.0.2",
+ "@smithy/util-waiter": "^2.0.13",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
@@ -335,43 +360,45 @@
}
},
"node_modules/@aws-sdk/client-sso": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.430.0.tgz",
- "integrity": "sha512-NxQJkTZCgl6LpdY12MCwsqGned6Ax19WsTCGLEiA/tsNE4vNrYLHHBR317G0sGWbIUQuhwsoM7wIrqJO7CacuQ==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.451.0.tgz",
+ "integrity": "sha512-KkYSke3Pdv3MfVH/5fT528+MKjMyPKlcLcd4zQb0x6/7Bl7EHrPh1JZYjzPLHelb+UY5X0qN8+cb8iSu1eiwIQ==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.429.0",
- "@aws-sdk/middleware-logger": "3.428.0",
- "@aws-sdk/middleware-recursion-detection": "3.428.0",
- "@aws-sdk/middleware-user-agent": "3.428.0",
- "@aws-sdk/region-config-resolver": "3.430.0",
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-endpoints": "3.428.0",
- "@aws-sdk/util-user-agent-browser": "3.428.0",
- "@aws-sdk/util-user-agent-node": "3.430.0",
- "@smithy/config-resolver": "^2.0.15",
- "@smithy/fetch-http-handler": "^2.2.3",
- "@smithy/hash-node": "^2.0.11",
- "@smithy/invalid-dependency": "^2.0.11",
- "@smithy/middleware-content-length": "^2.0.13",
- "@smithy/middleware-endpoint": "^2.1.2",
- "@smithy/middleware-retry": "^2.0.17",
- "@smithy/middleware-serde": "^2.0.11",
- "@smithy/middleware-stack": "^2.0.5",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/node-http-handler": "^2.1.7",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
- "@smithy/util-base64": "^2.0.0",
+ "@aws-sdk/core": "3.451.0",
+ "@aws-sdk/middleware-host-header": "3.451.0",
+ "@aws-sdk/middleware-logger": "3.451.0",
+ "@aws-sdk/middleware-recursion-detection": "3.451.0",
+ "@aws-sdk/middleware-user-agent": "3.451.0",
+ "@aws-sdk/region-config-resolver": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-endpoints": "3.451.0",
+ "@aws-sdk/util-user-agent-browser": "3.451.0",
+ "@aws-sdk/util-user-agent-node": "3.451.0",
+ "@smithy/config-resolver": "^2.0.18",
+ "@smithy/fetch-http-handler": "^2.2.6",
+ "@smithy/hash-node": "^2.0.15",
+ "@smithy/invalid-dependency": "^2.0.13",
+ "@smithy/middleware-content-length": "^2.0.15",
+ "@smithy/middleware-endpoint": "^2.2.0",
+ "@smithy/middleware-retry": "^2.0.20",
+ "@smithy/middleware-serde": "^2.0.13",
+ "@smithy/middleware-stack": "^2.0.7",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.9",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
+ "@smithy/url-parser": "^2.0.13",
+ "@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.15",
- "@smithy/util-defaults-mode-node": "^2.0.20",
- "@smithy/util-retry": "^2.0.4",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.19",
+ "@smithy/util-defaults-mode-node": "^2.0.25",
+ "@smithy/util-endpoints": "^1.0.4",
+ "@smithy/util-retry": "^2.0.6",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -379,46 +406,48 @@
}
},
"node_modules/@aws-sdk/client-sts": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.430.0.tgz",
- "integrity": "sha512-njUY3QeZH0CG+tG/6jhoG+Zr7rI1aGoVkZi3l6woKTz57hIlkwu2jQlLbJujm7PKrLhPaN5+4AqBQuHFVgMobw==",
+ "version": "3.454.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.454.0.tgz",
+ "integrity": "sha512-0fDvr8WeB6IYO8BUCzcivWmahgGl/zDbaYfakzGnt4mrl5ztYaXE875WI6b7+oFcKMRvN+KLvwu5TtyFuNY+GQ==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/credential-provider-node": "3.430.0",
- "@aws-sdk/middleware-host-header": "3.429.0",
- "@aws-sdk/middleware-logger": "3.428.0",
- "@aws-sdk/middleware-recursion-detection": "3.428.0",
- "@aws-sdk/middleware-sdk-sts": "3.428.0",
- "@aws-sdk/middleware-signing": "3.428.0",
- "@aws-sdk/middleware-user-agent": "3.428.0",
- "@aws-sdk/region-config-resolver": "3.430.0",
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-endpoints": "3.428.0",
- "@aws-sdk/util-user-agent-browser": "3.428.0",
- "@aws-sdk/util-user-agent-node": "3.430.0",
- "@smithy/config-resolver": "^2.0.15",
- "@smithy/fetch-http-handler": "^2.2.3",
- "@smithy/hash-node": "^2.0.11",
- "@smithy/invalid-dependency": "^2.0.11",
- "@smithy/middleware-content-length": "^2.0.13",
- "@smithy/middleware-endpoint": "^2.1.2",
- "@smithy/middleware-retry": "^2.0.17",
- "@smithy/middleware-serde": "^2.0.11",
- "@smithy/middleware-stack": "^2.0.5",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/node-http-handler": "^2.1.7",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
- "@smithy/util-base64": "^2.0.0",
+ "@aws-sdk/core": "3.451.0",
+ "@aws-sdk/credential-provider-node": "3.451.0",
+ "@aws-sdk/middleware-host-header": "3.451.0",
+ "@aws-sdk/middleware-logger": "3.451.0",
+ "@aws-sdk/middleware-recursion-detection": "3.451.0",
+ "@aws-sdk/middleware-sdk-sts": "3.451.0",
+ "@aws-sdk/middleware-signing": "3.451.0",
+ "@aws-sdk/middleware-user-agent": "3.451.0",
+ "@aws-sdk/region-config-resolver": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-endpoints": "3.451.0",
+ "@aws-sdk/util-user-agent-browser": "3.451.0",
+ "@aws-sdk/util-user-agent-node": "3.451.0",
+ "@smithy/config-resolver": "^2.0.18",
+ "@smithy/fetch-http-handler": "^2.2.6",
+ "@smithy/hash-node": "^2.0.15",
+ "@smithy/invalid-dependency": "^2.0.13",
+ "@smithy/middleware-content-length": "^2.0.15",
+ "@smithy/middleware-endpoint": "^2.2.0",
+ "@smithy/middleware-retry": "^2.0.20",
+ "@smithy/middleware-serde": "^2.0.13",
+ "@smithy/middleware-stack": "^2.0.7",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.9",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
+ "@smithy/url-parser": "^2.0.13",
+ "@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.15",
- "@smithy/util-defaults-mode-node": "^2.0.20",
- "@smithy/util-retry": "^2.0.4",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.19",
+ "@smithy/util-defaults-mode-node": "^2.0.25",
+ "@smithy/util-endpoints": "^1.0.4",
+ "@smithy/util-retry": "^2.0.6",
+ "@smithy/util-utf8": "^2.0.2",
"fast-xml-parser": "4.2.5",
"tslib": "^2.5.0"
},
@@ -427,24 +456,37 @@
}
},
"node_modules/@aws-sdk/cloudfront-signer": {
- "version": "3.433.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/cloudfront-signer/-/cloudfront-signer-3.433.0.tgz",
- "integrity": "sha512-I86TTLVSAFb0nMVPWxNipVwkmf0dw0FEchoA1sJx5j9YPyBhc0gzg3Af1Qkzzty+Pkwwc+CtPbqHkYxbXI1tFg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/cloudfront-signer/-/cloudfront-signer-3.451.0.tgz",
+ "integrity": "sha512-qJ4p/6gbCaABB1fpQ8WvIV3nISNdkiUt0QC22Dc0ASSABHiapJzJx2KEMCJ8o5qX9e3hzUEE4m3ySaMCNnfTTg==",
"dependencies": {
- "@smithy/url-parser": "^2.0.12"
+ "@smithy/url-parser": "^2.0.13",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/core": {
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.451.0.tgz",
+ "integrity": "sha512-SamWW2zHEf1ZKe3j1w0Piauryl8BQIlej0TBS18A4ACzhjhWXhCs13bO1S88LvPR5mBFXok3XOT6zPOnKDFktw==",
+ "dependencies": {
+ "@smithy/smithy-client": "^2.1.15",
+ "tslib": "^2.5.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@aws-sdk/credential-provider-env": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.428.0.tgz",
- "integrity": "sha512-e6fbY174Idzw0r5ZMT1qkDh+dpOp1DX3ickhr7J6ipo3cUGLI45Y5lnR9nYXWfB5o/wiNv4zXgN+Y3ORJJHzyA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.451.0.tgz",
+ "integrity": "sha512-9dAav7DcRgaF7xCJEQR5ER9ErXxnu/tdnVJ+UPmb1NPeIZdESv1A3lxFDEq1Fs8c4/lzAj9BpshGyJVIZwZDKg==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -452,19 +494,19 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.430.0.tgz",
- "integrity": "sha512-m3NcmDyVYr/w8RV9kMArrA/0982aXMsvoSXi4wFVbgg/T5hO+6i5CY7fB/0xpKIuEJ+rw63rYNnBzLwwW48kWg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.451.0.tgz",
+ "integrity": "sha512-TySt64Ci5/ZbqFw1F9Z0FIGvYx5JSC9e6gqDnizIYd8eMnn8wFRUscRrD7pIHKfrhvVKN5h0GdYovmMO/FMCBw==",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.428.0",
- "@aws-sdk/credential-provider-process": "3.428.0",
- "@aws-sdk/credential-provider-sso": "3.430.0",
- "@aws-sdk/credential-provider-web-identity": "3.428.0",
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/credential-provider-env": "3.451.0",
+ "@aws-sdk/credential-provider-process": "3.451.0",
+ "@aws-sdk/credential-provider-sso": "3.451.0",
+ "@aws-sdk/credential-provider-web-identity": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -472,20 +514,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.430.0.tgz",
- "integrity": "sha512-ItOHJcqOhpI0QM+aho5uMrk2ZP34hsdisMHxd8/6FT41U8TOe9kQKaZ2l2AsVf4QuM6RJe2LangcVGGstCf8Sw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.451.0.tgz",
+ "integrity": "sha512-AEwM1WPyxUdKrKyUsKyFqqRFGU70e4qlDyrtBxJnSU9NRLZI8tfEZ67bN7fHSxBUBODgDXpMSlSvJiBLh5/3pw==",
"dependencies": {
- "@aws-sdk/credential-provider-env": "3.428.0",
- "@aws-sdk/credential-provider-ini": "3.430.0",
- "@aws-sdk/credential-provider-process": "3.428.0",
- "@aws-sdk/credential-provider-sso": "3.430.0",
- "@aws-sdk/credential-provider-web-identity": "3.428.0",
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/credential-provider-env": "3.451.0",
+ "@aws-sdk/credential-provider-ini": "3.451.0",
+ "@aws-sdk/credential-provider-process": "3.451.0",
+ "@aws-sdk/credential-provider-sso": "3.451.0",
+ "@aws-sdk/credential-provider-web-identity": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/credential-provider-imds": "^2.0.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -493,14 +535,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.428.0.tgz",
- "integrity": "sha512-UG2S2/4Wrskbkbgt9fBlnzwQ2hfTXvLJwUgGOluSOf6+mGCcoDku4zzc9EQdk1MwN5Us+ziyMrIMNY5sbdLg6g==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.451.0.tgz",
+ "integrity": "sha512-HQywSdKeD5PErcLLnZfSyCJO+6T+ZyzF+Lm/QgscSC+CbSUSIPi//s15qhBRVely/3KBV6AywxwNH+5eYgt4lQ==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -508,16 +550,16 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.430.0.tgz",
- "integrity": "sha512-6de/aH9OFI+Ah7hL4alrZFqiNw5D6F+R92tLbIpFRQg7DxO/TuQTTtK94mLkft/AP/mGzVVBENjsyS1nJt166w==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.451.0.tgz",
+ "integrity": "sha512-Usm/N51+unOt8ID4HnQzxIjUJDrkAQ1vyTOC0gSEEJ7h64NSSPGD5yhN7il5WcErtRd3EEtT1a8/GTC5TdBctg==",
"dependencies": {
- "@aws-sdk/client-sso": "3.430.0",
- "@aws-sdk/token-providers": "3.430.0",
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/client-sso": "3.451.0",
+ "@aws-sdk/token-providers": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -525,13 +567,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.428.0.tgz",
- "integrity": "sha512-ueuUPPlrJFvtDUVTGnClUGt1wxCbEiKArknah/w9cfcc/c1HtFd/M7x/z2Sm0gSItR45sVcK54qjzmhm29DMzg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.451.0.tgz",
+ "integrity": "sha512-Xtg3Qw65EfDjWNG7o2xD6sEmumPfsy3WDGjk2phEzVg8s7hcZGxf5wYwe6UY7RJvlEKrU0rFA+AMn6Hfj5oOzg==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -539,15 +581,15 @@
}
},
"node_modules/@aws-sdk/middleware-bucket-endpoint": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.430.0.tgz",
- "integrity": "sha512-oK0WTNpMQFewSIYcL3LPm+S46uUWFILlPYK0fEeYdMXn03380JqS9oIKOFFX7w6DhYY1ePHZI721ee1HiCtDvw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.451.0.tgz",
+ "integrity": "sha512-KWyZ1JGnYz2QbHuJtYTP1BVnMOfVopR8rP8dTinVb/JR5HfAYz4imICJlJUbOYRjN7wpA3PrRI8dNRjrSBjWJg==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@aws-sdk/util-arn-parser": "3.310.0",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
"@smithy/util-config-provider": "^2.0.0",
"tslib": "^2.5.0"
},
@@ -556,13 +598,13 @@
}
},
"node_modules/@aws-sdk/middleware-expect-continue": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.428.0.tgz",
- "integrity": "sha512-d/vWUs9RD4fuO1oi7gJby6aEPb6XTf2+jCbrs/hUEYFMxQu7wwQx2c6BWAjfQca8zVadh7FY0cDNtL2Ep2d8zA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.451.0.tgz",
+ "integrity": "sha512-vwG8o2Uk6biLDlOZnqXemsO4dS2HvrprUdxyouwu6hlzLFskg8nL122butn19JqXJKgcVLuSSLzT+xwqBWy2Rg==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -570,17 +612,17 @@
}
},
"node_modules/@aws-sdk/middleware-flexible-checksums": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.428.0.tgz",
- "integrity": "sha512-O54XmBSvi9A6ZBRVSYrEvoGH1BjtR1TT8042gOdJgouI0OVWtjqHT2ZPVTbQ/rKW5QeLXszVloXFW6eqOwrVTg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.451.0.tgz",
+ "integrity": "sha512-eOkpcC2zgAvqs1w7Yp5nsk9LBIj6qLU5kaZuZEBOiFbNKIrTnPo6dQuhgvDcKHD6Y5W/cUjSBiFMs/ROb5aoug==",
"dependencies": {
"@aws-crypto/crc32": "3.0.0",
"@aws-crypto/crc32c": "3.0.0",
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/is-array-buffer": "^2.0.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -588,13 +630,13 @@
}
},
"node_modules/@aws-sdk/middleware-host-header": {
- "version": "3.429.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.429.0.tgz",
- "integrity": "sha512-3v9WoDCmbfH28znQ43cQLvLlm8fhJFIDJLW19moFI8QbXMv85yojGEphBMlT2XZUw79+tyh7GWLFaNugYZ1o9A==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.451.0.tgz",
+ "integrity": "sha512-j8a5jAfhWmsK99i2k8oR8zzQgXrsJtgrLxc3js6U+525mcZytoiDndkWTmD5fjJ1byU1U2E5TaPq+QJeDip05Q==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -602,12 +644,12 @@
}
},
"node_modules/@aws-sdk/middleware-location-constraint": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.428.0.tgz",
- "integrity": "sha512-2YvAhkdzMITTc2fVIH7FS5Hqa7AuoHBg92W0CzPOiKBkC0D6m5hw8o5Z5RnH/M9ki2eB4dn+7uB6p7Lgs+VFdw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.451.0.tgz",
+ "integrity": "sha512-R4U2G7mybP0BMiQBJWTcB47g49F4PSXTiCsvMDp5WOEhpWvGQuO1ZIhTxCl5s5lgTSne063Os8W6KSdK2yG2TQ==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -615,12 +657,12 @@
}
},
"node_modules/@aws-sdk/middleware-logger": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.428.0.tgz",
- "integrity": "sha512-1P0V0quL9u2amdNOn6yYT7/ToQUmkLJqCKHPxsRyDB829vBThWndvvH5MkoItj/VgE1zWqMtrzN3xtzD7zx6Qg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.451.0.tgz",
+ "integrity": "sha512-0kHrYEyVeB2QBfP6TfbI240aRtatLZtcErJbhpiNUb+CQPgEL3crIjgVE8yYiJumZ7f0jyjo8HLPkwD1/2APaw==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -628,13 +670,13 @@
}
},
"node_modules/@aws-sdk/middleware-recursion-detection": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.428.0.tgz",
- "integrity": "sha512-xC0OMduCByyRdiQz324RXy4kunnCG4LUJCfvdoegM33Elp9ex0D3fcfO1mUgV8qiLwSennIsSRVXHuhNxE2HZA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.451.0.tgz",
+ "integrity": "sha512-J6jL6gJ7orjHGM70KDRcCP7so/J2SnkN4vZ9YRLTeeZY6zvBuHDjX8GCIgSqPn/nXFXckZO8XSnA7u6+3TAT0w==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -642,15 +684,15 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-s3": {
- "version": "3.429.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.429.0.tgz",
- "integrity": "sha512-wCT5GoExncHUzUbW8b9q/PN3uPsbxit4PUAHw/hkrIHDKOxd9H/ClM37ZeJHNEOml5hnJOPy+rOaF9jRqo8dGg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.451.0.tgz",
+ "integrity": "sha512-XF4Cw8HrYUwGLKOqKtWs6ss1WXoxvQUcgGLACGSqn9a0p51446NiS5671x7qJUsfBuygdKlIKcOc8pPr9a+5Ow==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@aws-sdk/util-arn-parser": "3.310.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -658,13 +700,13 @@
}
},
"node_modules/@aws-sdk/middleware-sdk-sts": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.428.0.tgz",
- "integrity": "sha512-Uutl2niYXTnNP8v84v6umWDHD5no7d5/OqkZE1DsmeKR/dje90J5unJWf7MOsqvYm0JGDEWF4lk9xGVyqsw+Aw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.451.0.tgz",
+ "integrity": "sha512-UJ6UfVUEgp0KIztxpAeelPXI5MLj9wUtUCqYeIMP7C1ZhoEMNm3G39VLkGN43dNhBf1LqjsV9jkKMZbVfYXuwg==",
"dependencies": {
- "@aws-sdk/middleware-signing": "3.428.0",
- "@aws-sdk/types": "3.428.0",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/middleware-signing": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -672,16 +714,16 @@
}
},
"node_modules/@aws-sdk/middleware-signing": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.428.0.tgz",
- "integrity": "sha512-oMSerTPwtsQAR7fIU/G0b0BA30wF+MC4gZSrJjbypF8MK8nPC2yMfKLR8+QavGOGEW7rUMQ0uklThMTTwQEXNQ==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.451.0.tgz",
+ "integrity": "sha512-s5ZlcIoLNg1Huj4Qp06iKniE8nJt/Pj1B/fjhWc6cCPCM7XJYUCejCnRh6C5ZJoBEYodjuwZBejPc1Wh3j+znA==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.7",
+ "@smithy/protocol-http": "^3.0.9",
"@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.3.5",
- "@smithy/util-middleware": "^2.0.4",
+ "@smithy/types": "^2.5.0",
+ "@smithy/util-middleware": "^2.0.6",
"tslib": "^2.5.0"
},
"engines": {
@@ -689,12 +731,12 @@
}
},
"node_modules/@aws-sdk/middleware-ssec": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.428.0.tgz",
- "integrity": "sha512-QPKisAErRHFoopmdFhgOmjZPcUM6rvWCtnoEY4Sw9F0aIyK6yCTn+nB5j+3FAPvUvblE22srM6aow8TcGx1gjA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.451.0.tgz",
+ "integrity": "sha512-hDkeBUiRsvuDbvsPha0/uJHE680WDzjAOoE6ZnLBoWsw7ry+Bw1ULMj0sCmpBVrQ7Gpivi/6zbezhClVmt3ITw==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -702,14 +744,14 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.428.0.tgz",
- "integrity": "sha512-+GAhObeHRick2D5jr3YkPckjcggt5v6uUVtEUQW2AdD65cE5PjIvmksv6FuM/mME/9nNA+wufQnHbLI8teLeaw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.451.0.tgz",
+ "integrity": "sha512-8NM/0JiKLNvT9wtAQVl1DFW0cEO7OvZyLSUBLNLTHqyvOZxKaZ8YFk7d8PL6l76LeUKRxq4NMxfZQlUIRe0eSA==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-endpoints": "3.428.0",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-endpoints": "3.451.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -717,14 +759,14 @@
}
},
"node_modules/@aws-sdk/region-config-resolver": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.430.0.tgz",
- "integrity": "sha512-9lqgtkcd4dqsQ2yN6V/i06blyDh4yLmS+fAS7LwEZih/NZZ2cBIR+5kb9c236auvTcuMcL1zFxVRloWwesYZjA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.451.0.tgz",
+ "integrity": "sha512-3iMf4OwzrFb4tAAmoROXaiORUk2FvSejnHIw/XHvf/jjR4EqGGF95NZP/n/MeFZMizJWVssrwS412GmoEyoqhg==",
"dependencies": {
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/types": "^2.3.5",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/types": "^2.5.0",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.4",
+ "@smithy/util-middleware": "^2.0.6",
"tslib": "^2.5.0"
},
"engines": {
@@ -732,17 +774,17 @@
}
},
"node_modules/@aws-sdk/s3-request-presigner": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.430.0.tgz",
- "integrity": "sha512-8+vatOoqEQTwhNXOG6QoTJ6Fszaagc+bQpgfKbRIotCLGh7g4/qgQXo73LVyFVLkS4Tg2bn/KHN8aG3qTPd1KQ==",
+ "version": "3.456.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.456.0.tgz",
+ "integrity": "sha512-f7xATU5D4Gn5CzdS1jWUv5LUoO8LInP1zLIIRX2jmwamIfIOBdix8jvEr6NQLGg2Bp7/ygNb9dbgQ6y0vmlWIA==",
"dependencies": {
- "@aws-sdk/signature-v4-multi-region": "3.428.0",
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-format-url": "3.428.0",
- "@smithy/middleware-endpoint": "^2.1.2",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/signature-v4-multi-region": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-format-url": "3.451.0",
+ "@smithy/middleware-endpoint": "^2.2.0",
+ "@smithy/protocol-http": "^3.0.9",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -750,16 +792,17 @@
}
},
"node_modules/@aws-sdk/signature-v4-crt": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-crt/-/signature-v4-crt-3.428.0.tgz",
- "integrity": "sha512-TP6hSSfUH/3RXwJUKcYj2e96/arCzAEYfbk1sBod5JwqqHxfTsssNFoWw6E+a1RtJrwiFjrYiArUuFGcdMZAWg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-crt/-/signature-v4-crt-3.451.0.tgz",
+ "integrity": "sha512-bWoHFsAg6yF+3lpmQfYPlTbioOS+o5PfsewZn8OouAalkiRmNzuW6Pcw1ebHL7OLlp7AUAXLLO79ji+5F3NyJw==",
"dependencies": {
- "@aws-sdk/signature-v4-multi-region": "3.428.0",
+ "@aws-sdk/signature-v4-multi-region": "3.451.0",
+ "@aws-sdk/util-user-agent-node": "3.451.0",
"@smithy/querystring-parser": "^2.0.0",
"@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.3.5",
- "@smithy/util-middleware": "^2.0.4",
- "aws-crt": "^1.15.9",
+ "@smithy/types": "^2.5.0",
+ "@smithy/util-middleware": "^2.0.6",
+ "aws-crt": "^1.18.3",
"tslib": "^2.5.0"
},
"engines": {
@@ -767,14 +810,14 @@
}
},
"node_modules/@aws-sdk/signature-v4-multi-region": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.428.0.tgz",
- "integrity": "sha512-ImuontXK1vEHtxK+qiPVfLTk/+bKSwYqrVkE2/o5rnsqD78/wySzTn5RnkA73Nb+UL4qSd0dkOcuubEee2aUpQ==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.451.0.tgz",
+ "integrity": "sha512-qQKY7/txeNUTLyRL3WxUWEwaZ5sf76EIZgu9kLaR96cAYSxwQi/qQB3ijbfD6u7sJIA8aROMxeYK0VmRsQg0CA==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/protocol-http": "^3.0.7",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/protocol-http": "^3.0.9",
"@smithy/signature-v4": "^2.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -782,44 +825,46 @@
}
},
"node_modules/@aws-sdk/token-providers": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.430.0.tgz",
- "integrity": "sha512-vE+QnqG0A4MWhMEFXXPg8gPXjw03b4Q3XZbHyrANoZ+tVrzh8JhpHIcbkesGh6WrjirNqId0UghzI9VanKxsLw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.451.0.tgz",
+ "integrity": "sha512-ij1L5iUbn6CwxVOT1PG4NFjsrsKN9c4N1YEM0lkl6DwmaNOscjLKGSNyj9M118vSWsOs1ZDbTwtj++h0O/BWrQ==",
"dependencies": {
"@aws-crypto/sha256-browser": "3.0.0",
"@aws-crypto/sha256-js": "3.0.0",
- "@aws-sdk/middleware-host-header": "3.429.0",
- "@aws-sdk/middleware-logger": "3.428.0",
- "@aws-sdk/middleware-recursion-detection": "3.428.0",
- "@aws-sdk/middleware-user-agent": "3.428.0",
- "@aws-sdk/types": "3.428.0",
- "@aws-sdk/util-endpoints": "3.428.0",
- "@aws-sdk/util-user-agent-browser": "3.428.0",
- "@aws-sdk/util-user-agent-node": "3.430.0",
- "@smithy/config-resolver": "^2.0.15",
- "@smithy/fetch-http-handler": "^2.2.3",
- "@smithy/hash-node": "^2.0.11",
- "@smithy/invalid-dependency": "^2.0.11",
- "@smithy/middleware-content-length": "^2.0.13",
- "@smithy/middleware-endpoint": "^2.1.2",
- "@smithy/middleware-retry": "^2.0.17",
- "@smithy/middleware-serde": "^2.0.11",
- "@smithy/middleware-stack": "^2.0.5",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/node-http-handler": "^2.1.7",
+ "@aws-sdk/middleware-host-header": "3.451.0",
+ "@aws-sdk/middleware-logger": "3.451.0",
+ "@aws-sdk/middleware-recursion-detection": "3.451.0",
+ "@aws-sdk/middleware-user-agent": "3.451.0",
+ "@aws-sdk/region-config-resolver": "3.451.0",
+ "@aws-sdk/types": "3.451.0",
+ "@aws-sdk/util-endpoints": "3.451.0",
+ "@aws-sdk/util-user-agent-browser": "3.451.0",
+ "@aws-sdk/util-user-agent-node": "3.451.0",
+ "@smithy/config-resolver": "^2.0.18",
+ "@smithy/fetch-http-handler": "^2.2.6",
+ "@smithy/hash-node": "^2.0.15",
+ "@smithy/invalid-dependency": "^2.0.13",
+ "@smithy/middleware-content-length": "^2.0.15",
+ "@smithy/middleware-endpoint": "^2.2.0",
+ "@smithy/middleware-retry": "^2.0.20",
+ "@smithy/middleware-serde": "^2.0.13",
+ "@smithy/middleware-stack": "^2.0.7",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/node-http-handler": "^2.1.9",
"@smithy/property-provider": "^2.0.0",
- "@smithy/protocol-http": "^3.0.7",
+ "@smithy/protocol-http": "^3.0.9",
"@smithy/shared-ini-file-loader": "^2.0.6",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
- "@smithy/util-base64": "^2.0.0",
+ "@smithy/smithy-client": "^2.1.15",
+ "@smithy/types": "^2.5.0",
+ "@smithy/url-parser": "^2.0.13",
+ "@smithy/util-base64": "^2.0.1",
"@smithy/util-body-length-browser": "^2.0.0",
"@smithy/util-body-length-node": "^2.1.0",
- "@smithy/util-defaults-mode-browser": "^2.0.15",
- "@smithy/util-defaults-mode-node": "^2.0.20",
- "@smithy/util-retry": "^2.0.4",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.19",
+ "@smithy/util-defaults-mode-node": "^2.0.25",
+ "@smithy/util-endpoints": "^1.0.4",
+ "@smithy/util-retry": "^2.0.6",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -827,11 +872,11 @@
}
},
"node_modules/@aws-sdk/types": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.428.0.tgz",
- "integrity": "sha512-4T0Ps2spjg3qbWE6ZK13Vd3FnzpfliaiotqjxUK5YhjDrKXeT36HJp46JhDupElQuHtTkpdiJOSYk2lvY2H4IA==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.451.0.tgz",
+ "integrity": "sha512-rhK+qeYwCIs+laJfWCcrYEjay2FR/9VABZJ2NRM89jV/fKqGVQR52E5DQqrI+oEIL5JHMhhnr4N4fyECMS35lw==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -850,11 +895,12 @@
}
},
"node_modules/@aws-sdk/util-endpoints": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.428.0.tgz",
- "integrity": "sha512-ToKMhYlUWJ0YrbggpJLZeyZZNDXtQ4NITxqo/oeGltTT9KG4o/LqVY59EveV0f8P32ObDyj9Vh1mnjxeo3DxGw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.451.0.tgz",
+ "integrity": "sha512-giqLGBTnRIcKkDqwU7+GQhKbtJ5Ku35cjGQIfMyOga6pwTBUbaK0xW1Sdd8sBQ1GhApscnChzI9o/R9x0368vw==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/util-endpoints": "^1.0.4",
"tslib": "^2.5.0"
},
"engines": {
@@ -862,13 +908,13 @@
}
},
"node_modules/@aws-sdk/util-format-url": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.428.0.tgz",
- "integrity": "sha512-Jx3VwsGXaIGtFNRVg9IqGWMm7wTDsdTRLn29Tn2a6N38TaqrRMpC3T0YK3YrWKjNYhClo5tUIJLi5QGk2d2vBg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.451.0.tgz",
+ "integrity": "sha512-gmcqSFTIISU9iN6rSbc8HVqB9ACluPbo4mS0ztkk9DaDz5zK/YxoKBJSfqkZFidMzxYiXeWruDCxD8ZgYRn6ug==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/querystring-builder": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/querystring-builder": "^2.0.13",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -887,24 +933,24 @@
}
},
"node_modules/@aws-sdk/util-user-agent-browser": {
- "version": "3.428.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.428.0.tgz",
- "integrity": "sha512-qlc2UoGsmCpuh1ErY3VayZuAGl74TWWcLmhhQMkeByFSb6KooBlwOmDpDzJRtgwJoe0KXnyHBO6lzl9iczcozg==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.451.0.tgz",
+ "integrity": "sha512-Ws5mG3J0TQifH7OTcMrCTexo7HeSAc3cBgjfhS/ofzPUzVCtsyg0G7I6T7wl7vJJETix2Kst2cpOsxygPgPD9w==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/types": "^2.5.0",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
- "version": "3.430.0",
- "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.430.0.tgz",
- "integrity": "sha512-DPpFPL3mFMPtipFxjY7TKQBjnhmsPzYCr4Y+qna0oR6ij8jZOz2ILQDK33GxTRNh3+bV9YYbx+ZGDOnxoK5Mhw==",
+ "version": "3.451.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.451.0.tgz",
+ "integrity": "sha512-TBzm6P+ql4mkGFAjPlO1CI+w3yUT+NulaiALjl/jNX/nnUp6HsJsVxJf4nVFQTG5KRV0iqMypcs7I3KIhH+LmA==",
"dependencies": {
- "@aws-sdk/types": "3.428.0",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/types": "^2.3.5",
+ "@aws-sdk/types": "3.451.0",
+ "@smithy/node-config-provider": "^2.1.5",
+ "@smithy/types": "^2.5.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -939,11 +985,11 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.4.tgz",
+ "integrity": "sha512-r1IONyb6Ia+jYR2vvIDhdWdlTGhqbBoFqLTQidzZ4kepUFH15ejXvFHxCVbtl7BOXIudsIubf4E81xeA3h3IXA==",
"dependencies": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
},
"engines": {
@@ -1056,11 +1102,11 @@
}
},
"node_modules/@babel/helper-function-name/node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
+ "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -1080,11 +1126,11 @@
}
},
"node_modules/@babel/helper-hoist-variables/node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
+ "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -1104,11 +1150,11 @@
}
},
"node_modules/@babel/helper-split-export-declaration/node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
+ "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -1117,9 +1163,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"engines": {
"node": ">=6.9.0"
}
@@ -1133,9 +1179,9 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
"chalk": "^2.4.2",
@@ -1210,9 +1256,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.4.tgz",
+ "integrity": "sha512-vf3Xna6UEprW+7t6EtOmFpHNAuxw3xqPZghy+brsnusscJRW5BMUzzHZc5ICjULee81WeUV2jjakG09MDglJXQ==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -1221,9 +1267,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.4.tgz",
+ "integrity": "sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -1245,11 +1291,11 @@
}
},
"node_modules/@babel/template/node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
+ "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -1258,18 +1304,18 @@
}
},
"node_modules/@babel/traverse": {
- "version": "7.17.3",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz",
- "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==",
+ "version": "7.23.2",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
+ "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.17.3",
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-function-name": "^7.16.7",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.17.3",
- "@babel/types": "^7.17.0",
+ "@babel/code-frame": "^7.22.13",
+ "@babel/generator": "^7.23.0",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.0",
+ "@babel/types": "^7.23.0",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -1277,6 +1323,33 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/traverse/node_modules/@babel/generator": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.4.tgz",
+ "integrity": "sha512-esuS49Cga3HcThFNebGhlgsrVLkvhqvYDTzgjfFFlHJcIfLe5jFmRRfCQ1KuBfc4Jrtn3ndLgKWAKjBE+IraYQ==",
+ "dependencies": {
+ "@babel/types": "^7.23.4",
+ "@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jsesc": "^2.5.1"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/traverse/node_modules/@babel/types": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.4.tgz",
+ "integrity": "sha512-7uIFwVYpoplT5jp/kVv6EF93VaJ8H+Yn5IczYiaAi98ajzjfoZfslet/e0sLh+wVBjb2qqIut1b0S26VSafsSQ==",
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/traverse/node_modules/globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
@@ -1298,16 +1371,16 @@
}
},
"node_modules/@commitlint/cli": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.0.tgz",
- "integrity": "sha512-D3LdyZYbiRyAChfJMNlAd9f2P9vNQ7GWbI9gN2o7L5hF07QJDqj4z/pcJF3PjDbJWOaUUXla287RdDmmKqH2WQ==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.8.1.tgz",
+ "integrity": "sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==",
"dev": true,
"dependencies": {
- "@commitlint/format": "^17.4.4",
- "@commitlint/lint": "^17.8.0",
- "@commitlint/load": "^17.8.0",
- "@commitlint/read": "^17.5.1",
- "@commitlint/types": "^17.4.4",
+ "@commitlint/format": "^17.8.1",
+ "@commitlint/lint": "^17.8.1",
+ "@commitlint/load": "^17.8.1",
+ "@commitlint/read": "^17.8.1",
+ "@commitlint/types": "^17.8.1",
"execa": "^5.0.0",
"lodash.isfunction": "^3.0.9",
"resolve-from": "5.0.0",
@@ -1322,9 +1395,9 @@
}
},
"node_modules/@commitlint/config-conventional": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.0.tgz",
- "integrity": "sha512-MgiFXujmqAvi7M33C7OSMTznwrVkckrbXe/aZWQ/+KFGLLF6IE50XIcjGrW0/uiDGb/im5qbqF2dh1dCFNa+sQ==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.8.1.tgz",
+ "integrity": "sha512-NxCOHx1kgneig3VLauWJcDWS40DVjg7nKOpBEEK9E5fjJpQqLCilcnKkIIjdBH98kEO1q3NpE5NSrZ2kl/QGJg==",
"dev": true,
"dependencies": {
"conventional-changelog-conventionalcommits": "^6.1.0"
@@ -1334,12 +1407,12 @@
}
},
"node_modules/@commitlint/config-validator": {
- "version": "17.6.7",
- "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.6.7.tgz",
- "integrity": "sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.8.1.tgz",
+ "integrity": "sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^17.4.4",
+ "@commitlint/types": "^17.8.1",
"ajv": "^8.11.0"
},
"engines": {
@@ -1347,12 +1420,12 @@
}
},
"node_modules/@commitlint/ensure": {
- "version": "17.6.7",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.6.7.tgz",
- "integrity": "sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.8.1.tgz",
+ "integrity": "sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^17.4.4",
+ "@commitlint/types": "^17.8.1",
"lodash.camelcase": "^4.3.0",
"lodash.kebabcase": "^4.1.1",
"lodash.snakecase": "^4.1.1",
@@ -1364,21 +1437,21 @@
}
},
"node_modules/@commitlint/execute-rule": {
- "version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
- "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz",
+ "integrity": "sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==",
"dev": true,
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/format": {
- "version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
- "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.8.1.tgz",
+ "integrity": "sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^17.4.4",
+ "@commitlint/types": "^17.8.1",
"chalk": "^4.1.0"
},
"engines": {
@@ -1386,12 +1459,12 @@
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.0.tgz",
- "integrity": "sha512-8bR6rxNcWaNprPBdE4ePIOwbxutTQGOsRPYWssX+zjGxnEljzaZSGzFUOMxapYILlf8Tts/O1wPQgG549Rdvdg==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz",
+ "integrity": "sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^17.4.4",
+ "@commitlint/types": "^17.8.1",
"semver": "7.5.4"
},
"engines": {
@@ -1399,30 +1472,30 @@
}
},
"node_modules/@commitlint/lint": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.0.tgz",
- "integrity": "sha512-4ihwnqOY4TcJN6iz5Jv1LeYavvBllONwFyGxOIWmCT5s4PNMb43cws2TUdbXTZL1Vq59etGKd5LWYDFPVbs5EA==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.8.1.tgz",
+ "integrity": "sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==",
"dev": true,
"dependencies": {
- "@commitlint/is-ignored": "^17.8.0",
- "@commitlint/parse": "^17.7.0",
- "@commitlint/rules": "^17.7.0",
- "@commitlint/types": "^17.4.4"
+ "@commitlint/is-ignored": "^17.8.1",
+ "@commitlint/parse": "^17.8.1",
+ "@commitlint/rules": "^17.8.1",
+ "@commitlint/types": "^17.8.1"
},
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/load": {
- "version": "17.8.0",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.0.tgz",
- "integrity": "sha512-9VnGXYJCP4tXmR4YrwP8n5oX6T5ZsHfPQq6WuUQOvAI+QsDQMaTGgTRXr7us+xsjz+b+mMBSagogqfUx2aixyw==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.8.1.tgz",
+ "integrity": "sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==",
"dev": true,
"dependencies": {
- "@commitlint/config-validator": "^17.6.7",
- "@commitlint/execute-rule": "^17.4.0",
- "@commitlint/resolve-extends": "^17.6.7",
- "@commitlint/types": "^17.4.4",
+ "@commitlint/config-validator": "^17.8.1",
+ "@commitlint/execute-rule": "^17.8.1",
+ "@commitlint/resolve-extends": "^17.8.1",
+ "@commitlint/types": "^17.8.1",
"@types/node": "20.5.1",
"chalk": "^4.1.0",
"cosmiconfig": "^8.0.0",
@@ -1432,28 +1505,28 @@
"lodash.uniq": "^4.5.0",
"resolve-from": "^5.0.0",
"ts-node": "^10.8.1",
- "typescript": "^4.6.4 || ^5.0.0"
+ "typescript": "^4.6.4 || ^5.2.2"
},
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/message": {
- "version": "17.4.2",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
- "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.8.1.tgz",
+ "integrity": "sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==",
"dev": true,
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/parse": {
- "version": "17.7.0",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.7.0.tgz",
- "integrity": "sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.8.1.tgz",
+ "integrity": "sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^17.4.4",
+ "@commitlint/types": "^17.8.1",
"conventional-changelog-angular": "^6.0.0",
"conventional-commits-parser": "^4.0.0"
},
@@ -1462,13 +1535,13 @@
}
},
"node_modules/@commitlint/read": {
- "version": "17.5.1",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
- "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.8.1.tgz",
+ "integrity": "sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==",
"dev": true,
"dependencies": {
- "@commitlint/top-level": "^17.4.0",
- "@commitlint/types": "^17.4.4",
+ "@commitlint/top-level": "^17.8.1",
+ "@commitlint/types": "^17.8.1",
"fs-extra": "^11.0.0",
"git-raw-commits": "^2.0.11",
"minimist": "^1.2.6"
@@ -1478,13 +1551,13 @@
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "17.6.7",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz",
- "integrity": "sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz",
+ "integrity": "sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==",
"dev": true,
"dependencies": {
- "@commitlint/config-validator": "^17.6.7",
- "@commitlint/types": "^17.4.4",
+ "@commitlint/config-validator": "^17.8.1",
+ "@commitlint/types": "^17.8.1",
"import-fresh": "^3.0.0",
"lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
@@ -1495,15 +1568,15 @@
}
},
"node_modules/@commitlint/rules": {
- "version": "17.7.0",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.7.0.tgz",
- "integrity": "sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.8.1.tgz",
+ "integrity": "sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==",
"dev": true,
"dependencies": {
- "@commitlint/ensure": "^17.6.7",
- "@commitlint/message": "^17.4.2",
- "@commitlint/to-lines": "^17.4.0",
- "@commitlint/types": "^17.4.4",
+ "@commitlint/ensure": "^17.8.1",
+ "@commitlint/message": "^17.8.1",
+ "@commitlint/to-lines": "^17.8.1",
+ "@commitlint/types": "^17.8.1",
"execa": "^5.0.0"
},
"engines": {
@@ -1511,18 +1584,18 @@
}
},
"node_modules/@commitlint/to-lines": {
- "version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
- "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.8.1.tgz",
+ "integrity": "sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==",
"dev": true,
"engines": {
"node": ">=v14"
}
},
"node_modules/@commitlint/top-level": {
- "version": "17.4.0",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
- "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.8.1.tgz",
+ "integrity": "sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==",
"dev": true,
"dependencies": {
"find-up": "^5.0.0"
@@ -1532,9 +1605,9 @@
}
},
"node_modules/@commitlint/types": {
- "version": "17.4.4",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
- "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
+ "version": "17.8.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.8.1.tgz",
+ "integrity": "sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==",
"dev": true,
"dependencies": {
"chalk": "^4.1.0"
@@ -1681,6 +1754,16 @@
"node": ">=12"
}
},
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "devOptional": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@documenso/app-tests": {
"resolved": "packages/app-tests",
"link": true
@@ -1710,11 +1793,11 @@
"link": true
},
"node_modules/@documenso/nodemailer-resend": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@documenso/nodemailer-resend/-/nodemailer-resend-1.0.0.tgz",
- "integrity": "sha512-rG+jBbBEsVJUBU6v/2hb+OQD1m3Lhn49TOzQjln73zzL1B/sZsHhYOKpNPlTX0/FafCP7P9fKerndEeIKn54Vw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@documenso/nodemailer-resend/-/nodemailer-resend-2.0.0.tgz",
+ "integrity": "sha512-fbcRrJ9cWJ7/GQIXe8j5HKPpu5TB29jEvpG3H2OZWYlTF3kWoVPixd9wQ9uZNyilyYxqSYxJ4r4WVnAmxNseYA==",
"dependencies": {
- "resend": "^1.1.0"
+ "resend": "^2.0.0"
},
"peerDependencies": {
"nodemailer": "^6.9.3"
@@ -1835,51 +1918,6 @@
"esbuild": "*"
}
},
- "node_modules/@esbuild/android-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
- "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
- "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
- "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/@esbuild/darwin-arm64": {
"version": "0.18.20",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
@@ -1895,276 +1933,6 @@
"node": ">=12"
}
},
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
- "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
- "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
- "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
- "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
- "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
- "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
- "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
- "cpu": [
- "loong64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
- "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
- "cpu": [
- "mips64el"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
- "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
- "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
- "cpu": [
- "riscv64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
- "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
- "cpu": [
- "s390x"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
- "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
- "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
- "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
- "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
- "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
- "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.18.20",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
- "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/@eslint-community/eslint-utils": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
@@ -2180,17 +1948,17 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz",
- "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==",
+ "version": "4.10.0",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
+ "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz",
- "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
+ "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -2230,9 +1998,9 @@
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"node_modules/@eslint/js": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz",
- "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.54.0.tgz",
+ "integrity": "sha512-ut5V+D+fOoWPgGGNj83GGjnntO39xDy6DWxO0wb7Jp3DcMX0TfIqdzHF85VTQkerdyGmuuMD9AKAo5KiNlf/AQ==",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
@@ -2260,9 +2028,9 @@
}
},
"node_modules/@floating-ui/react-dom": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.2.tgz",
- "integrity": "sha512-5qhlDvjaLmAst/rKb3VdlCinwTF4EYMiVxuuc/HVUjs46W0zgtbMmAZ1UTsDrRTxRmUEzl92mOtWbeeXL26lSQ==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz",
+ "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==",
"dependencies": {
"@floating-ui/dom": "^1.5.1"
},
@@ -2277,9 +2045,9 @@
"integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A=="
},
"node_modules/@grpc/grpc-js": {
- "version": "1.9.6",
- "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.6.tgz",
- "integrity": "sha512-yq3qTy23u++8zdvf+h4mz4ohDFi681JAkMZZPTKh8zmUVh0AKLisFlgxcn22FMNowXz15oJ6pqgwT7DJ+PdJvg==",
+ "version": "1.9.11",
+ "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.11.tgz",
+ "integrity": "sha512-QDhMfbTROOXUhLHMroow8f3EHiCKUOh6UwxMP5S3EuXMnWMNSVIhatGZRwkpg9OUTYdZPsDUVH3cOAkWhGFUJw==",
"dependencies": {
"@grpc/proto-loader": "^0.7.8",
"@types/node": ">=12.12.47"
@@ -2341,12 +2109,44 @@
"xtend": "^4.0.0"
}
},
- "node_modules/@humanwhocodes/config-array": {
- "version": "0.11.11",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
- "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
+ "node_modules/@httptoolkit/websocket-stream/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/@httptoolkit/websocket-stream/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dependencies": {
- "@humanwhocodes/object-schema": "^1.2.1",
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/@httptoolkit/websocket-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/@httptoolkit/websocket-stream/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "node_modules/@humanwhocodes/config-array": {
+ "version": "0.11.13",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
+ "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
+ "dependencies": {
+ "@humanwhocodes/object-schema": "^2.0.1",
"debug": "^4.1.1",
"minimatch": "^3.0.5"
},
@@ -2367,15 +2167,14 @@
}
},
"node_modules/@humanwhocodes/object-schema": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
- "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
+ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw=="
},
"node_modules/@isaacs/cliui": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -2392,7 +2191,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -2404,7 +2202,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -2450,12 +2247,12 @@
"integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg=="
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.9",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
- "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dependencies": {
- "@jridgewell/resolve-uri": "^3.0.3",
- "@jridgewell/sourcemap-codec": "^1.4.10"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@js-temporal/polyfill": {
@@ -2710,23 +2507,22 @@
}
},
"node_modules/@next/env": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.0.tgz",
- "integrity": "sha512-cIKhxkfVELB6hFjYsbtEeTus2mwrTC+JissfZYM0n+8Fv+g8ucUfOlm3VEDtwtwydZ0Nuauv3bl0qF82nnCAqA=="
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz",
+ "integrity": "sha512-7xRqh9nMvP5xrW4/+L0jgRRX+HoNRGnfJpD+5Wq6/13j3dsdzxO3BCXn7D3hMqsDb+vjZnJq+vI7+EtgrYZTeA=="
},
"node_modules/@next/eslint-plugin-next": {
- "version": "12.3.4",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz",
- "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==",
- "dev": true,
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz",
+ "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==",
"dependencies": {
"glob": "7.1.7"
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.0.tgz",
- "integrity": "sha512-HQKi159jCz4SRsPesVCiNN6tPSAFUkOuSkpJsqYTIlbHLKr1mD6be/J0TvWV6fwJekj81bZV9V/Tgx3C2HO9lA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.0.3.tgz",
+ "integrity": "sha512-64JbSvi3nbbcEtyitNn2LEDS/hcleAFpHdykpcnrstITFlzFgB/bW0ER5/SJJwUPj+ZPY+z3e+1jAfcczRLVGw==",
"cpu": [
"arm64"
],
@@ -2739,9 +2535,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.0.tgz",
- "integrity": "sha512-4YyQLMSaCgX/kgC1jjF3s3xSoBnwHuDhnF6WA1DWNEYRsbOOPWjcYhv8TKhRe2ApdOam+VfQSffC4ZD+X4u1Cg==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.0.3.tgz",
+ "integrity": "sha512-RkTf+KbAD0SgYdVn1XzqE/+sIxYGB7NLMZRn9I4Z24afrhUpVJx6L8hsRnIwxz3ERE2NFURNliPjJ2QNfnWicQ==",
"cpu": [
"x64"
],
@@ -2754,9 +2550,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.0.tgz",
- "integrity": "sha512-io7fMkJ28Glj7SH8yvnlD6naIhRDnDxeE55CmpQkj3+uaA2Hko6WGY2pT5SzpQLTnGGnviK85cy8EJ2qsETj/g==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.0.3.tgz",
+ "integrity": "sha512-3tBWGgz7M9RKLO6sPWC6c4pAw4geujSwQ7q7Si4d6bo0l6cLs4tmO+lnSwFp1Tm3lxwfMk0SgkJT7EdwYSJvcg==",
"cpu": [
"arm64"
],
@@ -2769,9 +2565,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.0.tgz",
- "integrity": "sha512-nC2h0l1Jt8LEzyQeSs/BKpXAMe0mnHIMykYALWaeddTqCv5UEN8nGO3BG8JAqW/Y8iutqJsaMe2A9itS0d/r8w==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.0.3.tgz",
+ "integrity": "sha512-v0v8Kb8j8T23jvVUWZeA2D8+izWspeyeDGNaT2/mTHWp7+37fiNfL8bmBWiOmeumXkacM/AB0XOUQvEbncSnHA==",
"cpu": [
"arm64"
],
@@ -2784,9 +2580,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.0.tgz",
- "integrity": "sha512-Wf+WjXibJQ7hHXOdNOmSMW5bxeJHVf46Pwb3eLSD2L76NrytQlif9NH7JpHuFlYKCQGfKfgSYYre5rIfmnSwQw==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.0.3.tgz",
+ "integrity": "sha512-VM1aE1tJKLBwMGtyBR21yy+STfl0MapMQnNrXkxeyLs0GFv/kZqXS5Jw/TQ3TSUnbv0QPDf/X8sDXuMtSgG6eg==",
"cpu": [
"x64"
],
@@ -2799,9 +2595,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.0.tgz",
- "integrity": "sha512-WTZb2G7B+CTsdigcJVkRxfcAIQj7Lf0ipPNRJ3vlSadU8f0CFGv/ST+sJwF5eSwIe6dxKoX0DG6OljDBaad+rg==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.0.3.tgz",
+ "integrity": "sha512-64EnmKy18MYFL5CzLaSuUn561hbO1Gk16jM/KHznYP3iCIfF9e3yULtHaMy0D8zbHfxset9LTOv6cuYKJgcOxg==",
"cpu": [
"x64"
],
@@ -2814,9 +2610,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.0.tgz",
- "integrity": "sha512-7R8/x6oQODmNpnWVW00rlWX90sIlwluJwcvMT6GXNIBOvEf01t3fBg0AGURNKdTJg2xNuP7TyLchCL7Lh2DTiw==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.0.3.tgz",
+ "integrity": "sha512-WRDp8QrmsL1bbGtsh5GqQ/KWulmrnMBgbnb+59qNTW1kVi1nG/2ndZLkcbs2GX7NpFLlToLRMWSQXmPzQm4tog==",
"cpu": [
"arm64"
],
@@ -2829,9 +2625,9 @@
}
},
"node_modules/@next/swc-win32-ia32-msvc": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.0.tgz",
- "integrity": "sha512-RLK1nELvhCnxaWPF07jGU4x3tjbyx2319q43loZELqF0+iJtKutZ+Lk8SVmf/KiJkYBc7Cragadz7hb3uQvz4g==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.0.3.tgz",
+ "integrity": "sha512-EKffQeqCrj+t6qFFhIFTRoqb2QwX1mU7iTOvMyLbYw3QtqTw9sMwjykyiMlZlrfm2a4fA84+/aeW+PMg1MjuTg==",
"cpu": [
"ia32"
],
@@ -2844,9 +2640,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.0.tgz",
- "integrity": "sha512-g6hLf1SUko+hnnaywQQZzzb3BRecQsoKkF3o/C+F+dOA4w/noVAJngUVkfwF0+2/8FzNznM7ofM6TGZO9svn7w==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.0.3.tgz",
+ "integrity": "sha512-ERhKPSJ1vQrPiwrs15Pjz/rvDHZmkmvbf/BjPN/UCOI++ODftT0GtasDPi0j+y6PPJi5HsXw+dpRaXUaw4vjuQ==",
"cpu": [
"x64"
],
@@ -2858,6 +2654,25 @@
"node": ">= 10"
}
},
+ "node_modules/@noble/ciphers": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.4.0.tgz",
+ "integrity": "sha512-xaUaUUDWbHIFSxaQ/pIe+33VG2mfJp6N/KxKLmZr5biWdNznCAmfu24QRhX10BbVAuqOahAoyp0S4M9md6GPDw==",
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
+ "node_modules/@noble/hashes": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz",
+ "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==",
+ "engines": {
+ "node": ">= 16"
+ },
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -3091,28 +2906,28 @@
}
},
"node_modules/@opentelemetry/context-async-hooks": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.17.1.tgz",
- "integrity": "sha512-up5I+RiQEkGrVEHtbAtmRgS+ZOnFh3shaDNHqZPBlGy+O92auL6yMmjzYpSKmJOGWowvs3fhVHePa8Exb5iHUg==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.18.1.tgz",
+ "integrity": "sha512-HHfJR32NH2x0b69CACCwH8m1dpNALoCTtpgmIWMNkeMGNUeKT48d4AX4xsF4uIRuUoRTbTgtSBRvS+cF97qwCQ==",
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/core": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.17.1.tgz",
- "integrity": "sha512-I6LrZvl1FF97FQXPR0iieWQmKnGxYtMbWA1GrAXnLUR+B1Hn2m8KqQNEIlZAucyv00GBgpWkpllmULmZfG8P3g==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.18.1.tgz",
+ "integrity": "sha512-kvnUqezHMhsQvdsnhnqTNfAJs3ox/isB0SVrM1dhVFw7SsB7TstuVa6fgWnN2GdPyilIFLUvvbTZoVRmx6eiRg==",
"dependencies": {
- "@opentelemetry/semantic-conventions": "1.17.1"
+ "@opentelemetry/semantic-conventions": "1.18.1"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/exporter-trace-otlp-grpc": {
@@ -3335,46 +3150,46 @@
}
},
"node_modules/@opentelemetry/propagator-b3": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.17.1.tgz",
- "integrity": "sha512-XEbXYb81AM3ayJLlbJqITPIgKBQCuby45ZHiB9mchnmQOffh6ZJOmXONdtZAV7TWzmzwvAd28vGSUk57Aw/5ZA==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.18.1.tgz",
+ "integrity": "sha512-oSTUOsnt31JDx5SoEy27B5jE1/tiPvvE46w7CDKj0R5oZhCCfYH2bbSGa7NOOyDXDNqQDkgqU1DIV/xOd3f8pw==",
"dependencies": {
- "@opentelemetry/core": "1.17.1"
+ "@opentelemetry/core": "1.18.1"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/propagator-jaeger": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.17.1.tgz",
- "integrity": "sha512-p+P4lf2pbqd3YMfZO15QCGsDwR2m1ke2q5+dq6YBLa/q0qiC2eq4cD/qhYBBed5/X4PtdamaVGHGsp+u3GXHDA==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.18.1.tgz",
+ "integrity": "sha512-Kh4M1Qewv0Tbmts6D8LgNzx99IjdE18LCmY/utMkgVyU7Bg31Yuj+X6ZyoIRKPcD2EV4rVkuRI16WVMRuGbhWA==",
"dependencies": {
- "@opentelemetry/core": "1.17.1"
+ "@opentelemetry/core": "1.18.1"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/resources": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.17.1.tgz",
- "integrity": "sha512-M2e5emqg5I7qRKqlzKx0ROkcPyF8PbcSaWEdsm72od9txP7Z/Pl8PDYOyu80xWvbHAWk5mDxOF6v3vNdifzclA==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.18.1.tgz",
+ "integrity": "sha512-JjbcQLYMttXcIabflLRuaw5oof5gToYV9fuXbcsoOeQ0BlbwUn6DAZi++PNsSz2jjPeASfDls10iaO/8BRIPRA==",
"dependencies": {
- "@opentelemetry/core": "1.17.1",
- "@opentelemetry/semantic-conventions": "1.17.1"
+ "@opentelemetry/core": "1.18.1",
+ "@opentelemetry/semantic-conventions": "1.18.1"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/sdk-logs": {
@@ -3484,44 +3299,44 @@
}
},
"node_modules/@opentelemetry/sdk-trace-base": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.17.1.tgz",
- "integrity": "sha512-pfSJJSjZj5jkCJUQZicSpzN8Iz9UKMryPWikZRGObPnJo6cUSoKkjZh6BM3j+D47G4olMBN+YZKYqkFM1L6zNA==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.18.1.tgz",
+ "integrity": "sha512-tRHfDxN5dO+nop78EWJpzZwHsN1ewrZRVVwo03VJa3JQZxToRDH29/+MB24+yoa+IArerdr7INFJiX/iN4gjqg==",
"dependencies": {
- "@opentelemetry/core": "1.17.1",
- "@opentelemetry/resources": "1.17.1",
- "@opentelemetry/semantic-conventions": "1.17.1"
+ "@opentelemetry/core": "1.18.1",
+ "@opentelemetry/resources": "1.18.1",
+ "@opentelemetry/semantic-conventions": "1.18.1"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/sdk-trace-node": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.17.1.tgz",
- "integrity": "sha512-J56DaG4cusjw5crpI7x9rv4bxDF27DtKYGxXJF56KIvopbNKpdck5ZWXBttEyqgAVPDwHMAXWDL1KchHzF0a3A==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.18.1.tgz",
+ "integrity": "sha512-ML0l9TNlfLoplLF1F8lb95NGKgdm6OezDS3Ymqav9sYxMd5bnH2LZVzd4xEF+ov5vpZJOGdWxJMs2nC9no7+xA==",
"dependencies": {
- "@opentelemetry/context-async-hooks": "1.17.1",
- "@opentelemetry/core": "1.17.1",
- "@opentelemetry/propagator-b3": "1.17.1",
- "@opentelemetry/propagator-jaeger": "1.17.1",
- "@opentelemetry/sdk-trace-base": "1.17.1",
+ "@opentelemetry/context-async-hooks": "1.18.1",
+ "@opentelemetry/core": "1.18.1",
+ "@opentelemetry/propagator-b3": "1.18.1",
+ "@opentelemetry/propagator-jaeger": "1.18.1",
+ "@opentelemetry/sdk-trace-base": "1.18.1",
"semver": "^7.5.2"
},
"engines": {
"node": ">=14"
},
"peerDependencies": {
- "@opentelemetry/api": ">=1.0.0 <1.7.0"
+ "@opentelemetry/api": ">=1.0.0 <1.8.0"
}
},
"node_modules/@opentelemetry/semantic-conventions": {
- "version": "1.17.1",
- "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.17.1.tgz",
- "integrity": "sha512-xbR2U+2YjauIuo42qmE8XyJK6dYeRMLJuOlUP5SO4auET4VtOHOzgkRVOq+Ik18N+Xf3YPcqJs9dZMiDddz1eQ==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.18.1.tgz",
+ "integrity": "sha512-+NLGHr6VZwcgE/2lw8zDIufOCGnzsA5CbQIMleXZTrgkBd0TanCX+MiDYJ1TOS4KL/Tqk0nFRxawnaYr6pkZkA==",
"engines": {
"node": ">=14"
}
@@ -3562,19 +3377,18 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
"optional": true,
"engines": {
"node": ">=14"
}
},
"node_modules/@playwright/test": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.39.0.tgz",
- "integrity": "sha512-3u1iFqgzl7zr004bGPYiN/5EZpRUSFddQBra8Rqll5N0/vfpqlP9I9EXqAoGacuAbX6c9Ulg/Cjqglp5VkK6UQ==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.0.tgz",
+ "integrity": "sha512-PdW+kn4eV99iP5gxWNSDQCbhMaDVej+RXL5xr6t04nbKLCBwYtA046t7ofoczHOm8u6c+45hpDKQVZqtqwkeQg==",
"dev": true,
"dependencies": {
- "playwright": "1.39.0"
+ "playwright": "1.40.0"
},
"bin": {
"playwright": "cli.js"
@@ -5111,242 +4925,183 @@
}
},
"node_modules/@react-email/body": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.0.2.tgz",
- "integrity": "sha512-SqZrZdxZlH7viwnrLvrMnVzOKpiofVAtho09bmm2siDzy0VMDGItXRzUPLcpg9vcbVJCHZRCIKoNXqA+PtokzQ==",
- "dependencies": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@react-email/body/-/body-0.0.4.tgz",
+ "integrity": "sha512-NmHOumdmyjWvOXomqhQt06KbgRxhHrVznxQp/oWiPWes8nAJo2Y4L27aPHR9nTcs7JF7NmcJe9YSN42pswK+GQ==",
+ "peerDependencies": {
"react": "18.2.0"
}
},
"node_modules/@react-email/button": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.9.tgz",
- "integrity": "sha512-eYWQ1X4RFlkKYYSPgSrT6rk98wuLOieEAGENrp9j37t1v/1C+jMmBu0UjZvwHsHWdbOMRjbVDFeMI/+MxWKSEg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.11",
+ "resolved": "https://registry.npmjs.org/@react-email/button/-/button-0.0.11.tgz",
+ "integrity": "sha512-mB5ySfZifwE5ybtIWwXGbmKk1uKkH4655gftL4+mMxZAZCkINVa2KXTi5pO+xZhMtJI9xtAsikOrOEU1gTDoww==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/column": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.7.tgz",
- "integrity": "sha512-B29wVXyIcuVprgGpLkR23waPh/twlqmugZQsCKk05JlMCQ80/Puv4Lgj4dRsIJzgyTLMwG6xq17+Uxc5iGfuaQ==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/@react-email/column/-/column-0.0.8.tgz",
+ "integrity": "sha512-blChqGU8e/L6KZiB5EPww8bkZfdyHDuS0vKIvU+iS14uK+xfAw+5P5CU9BYXccEuJh2Gftfngu1bWMFp2Sc6ag==",
"engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@react-email/components": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@react-email/components/-/components-0.0.7.tgz",
- "integrity": "sha512-GpRKV8E7EvK9OPf61f5Z8hliB3p0hTot8tslmEUVCTtX7tdL0wM2YEcZiDWU4PJcudJ/QWHJ7Y5wGzNEARcooA==",
- "dependencies": {
- "@react-email/body": "0.0.2",
- "@react-email/button": "0.0.9",
- "@react-email/column": "0.0.7",
- "@react-email/container": "0.0.8",
- "@react-email/font": "0.0.2",
- "@react-email/head": "0.0.5",
- "@react-email/heading": "0.0.8",
- "@react-email/hr": "0.0.5",
- "@react-email/html": "0.0.4",
- "@react-email/img": "0.0.5",
- "@react-email/link": "0.0.5",
- "@react-email/preview": "0.0.6",
- "@react-email/render": "0.0.7",
- "@react-email/row": "0.0.5",
- "@react-email/section": "0.0.9",
- "@react-email/tailwind": "0.0.8",
- "@react-email/text": "0.0.5",
- "react": "18.2.0"
+ "node": ">=18.0.0"
},
- "engines": {
- "node": ">=16.0.0"
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/container": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.8.tgz",
- "integrity": "sha512-MQZQxvTOoLWjJR+Jm689jltm0I/mtZbEaDnwZbNkkHKgccr++wwb9kOKMgXG777Y7tGa1JATAsZpvFYiCITwUg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@react-email/container/-/container-0.0.10.tgz",
+ "integrity": "sha512-goishY7ocq+lord0043/LZK268bqvMFW/sxpUt/dSCPJyrrZZNCbpW2t8w8HztU38cYj0qGQLxO5Qvpn/RER3w==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/font": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.2.tgz",
- "integrity": "sha512-mmkyOCAcbgytE7DfIuOBVG1YVDUZY9rPCor4o7pUEzGJiU2y/TNuV8CgNPSU/VgXeBKL/94QDjB62OrGHlFNMQ==",
- "dependencies": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/@react-email/font/-/font-0.0.4.tgz",
+ "integrity": "sha512-rN/pFlAcDNmfYFxpufT/rFRrM5KYBJM4nTA2uylTehlVOro6fb/q6n0zUwLF6OmQ4QIuRbqdEy7DI9mmJiNHxA==",
+ "peerDependencies": {
"react": "18.2.0"
}
},
"node_modules/@react-email/head": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.5.tgz",
- "integrity": "sha512-s84OxJxZMee2z5b1a+RVwY1NOSUNNf1ecjPf6n64aZmMNcNUyn4gOl7RO6xbfBrZko7TigBwsFB1Cgjxtn/ydg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/head/-/head-0.0.6.tgz",
+ "integrity": "sha512-9BrBDalb34nBOmmQVQc7/pjJotcuAeC3rhBl4G88Ohiipuv15vPIKqwy8vPJcFNi4l7yGlitfG3EESIjkLkoIw==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/heading": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.8.tgz",
- "integrity": "sha512-7atATmoHBHTk7hFYFsFFzOIBV3u1zPpsSOWkLBojdjSUdenpk2SbX8GP8/3aBhWl/tuFX9RBGcu1Xes+ZijFLg==",
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/@react-email/heading/-/heading-0.0.9.tgz",
+ "integrity": "sha512-xzkcGlm+/aFrNlJZBKzxRKkRYJ2cRx92IqmSKAuGnwuKQ/uMKomXzPsHPu3Dclmnhn3wVKj4uprkgQOoxP6uXQ==",
"dependencies": {
- "@radix-ui/react-slot": "1.0.0",
+ "@radix-ui/react-slot": "1.0.2",
"react": "18.2.0"
},
"engines": {
"node": ">=16.0.0"
}
},
- "node_modules/@react-email/heading/node_modules/@radix-ui/react-compose-refs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.0.tgz",
- "integrity": "sha512-0KaSv6sx787/hK3eF53iOkiSLwAGlFMx5lotrqD2pTjB18KbybKoEIgkNZTKC60YECDQTKGTRcDBILwZVqVKvA==",
- "dependencies": {
- "@babel/runtime": "^7.13.10"
- },
- "peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0"
- }
- },
- "node_modules/@react-email/heading/node_modules/@radix-ui/react-slot": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.0.tgz",
- "integrity": "sha512-3mrKauI/tWXo1Ll+gN5dHcxDPdm/Df1ufcDLCecn+pnCIVcdWE7CujXo8QaXOWRJyZyQWWbpB8eFwHzWXlv5mQ==",
- "dependencies": {
- "@babel/runtime": "^7.13.10",
- "@radix-ui/react-compose-refs": "1.0.0"
- },
- "peerDependencies": {
- "react": "^16.8 || ^17.0 || ^18.0"
- }
- },
"node_modules/@react-email/hr": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.5.tgz",
- "integrity": "sha512-nwB8GmSdvPlR/bWjDS07yHtgdfJqtvCaPXee3SVUY69YYP7NeDO/VACJlgrS9V2l79bj1lUpH0MJMU6MNAk5FQ==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/hr/-/hr-0.0.6.tgz",
+ "integrity": "sha512-W+wINBz7z7BRv3i9GS+QoJBae1PESNhv6ZY6eLnEpqtBI/2++suuRNJOU/KpZzE6pykeTp6I/Z7UcL0LEYKgyg==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/html": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.4.tgz",
- "integrity": "sha512-7tRYSnudYAWez+NkPWOM8yLZH7EuYFtYdiLPnzpD+pf4cdk16Gz4up531DaIX6dNBbfbyEFpQxhXZxGeJ5ZkfQ==",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/html/-/html-0.0.6.tgz",
+ "integrity": "sha512-8Fo20VOqxqc087gGEPjT8uos06fTXIC8NSoiJxpiwAkwiKtQnQH/jOdoLv6XaWh5Zt2clj1uokaoklnaM5rY1w==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/img": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.5.tgz",
- "integrity": "sha512-9ziFgBfrIAL+DpVlsraFcd2KwsTRyobLpqTnoiBYCcVZGod59xbYkmsmB3CbUosmLwPYg6AeD7Q7e+hCiwkWgg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/img/-/img-0.0.6.tgz",
+ "integrity": "sha512-Wd7xKI3b1Jvb2ZEHyVpJ9D98u0GHrRl+578b8LV24PavM/65V61Q5LN5Fr9sAhj+4VGqnHDIVeXIYEzVbWaa3Q==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/link": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.5.tgz",
- "integrity": "sha512-z+QW9f4gXBdyfhl7iYMY3td+rXKeZYK/2AGElEMsxVoywn5D0b6cF8m5w2jbf0U2V3enT+zy9yc1R6AyT59NOg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/link/-/link-0.0.6.tgz",
+ "integrity": "sha512-bYYHroWGS//nDl9yhh8V6K2BrNwAsyX7N/XClSCRku3x56NrZ6D0nBKWewYDPlJ9rW9TIaJm1jDYtO9XBzLlkQ==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/preview": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.6.tgz",
- "integrity": "sha512-mXDCc3NGpm/4W7gowBtjsTxYXowLNOLsJsYhIfrsjNJWGlVhVFB9uEHm55LjBLpxSG020g6/8LIrpJU6g22qvg==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/@react-email/preview/-/preview-0.0.7.tgz",
+ "integrity": "sha512-YLfIwHdexPi8IgP1pSuVXdAmKzMQ8ctCCLEjkMttT2vkSFqT6m/e6UFWK2l30rKm2dDsLvQyEvo923mPXjnNzg==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/render": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/@react-email/render/-/render-0.0.7.tgz",
- "integrity": "sha512-hMMhxk6TpOcDC5qnKzXPVJoVGEwfm+U5bGOPH+MyTTlx0F02RLQygcATBKsbP7aI/mvkmBAZoFbgPIHop7ovug==",
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/@react-email/render/-/render-0.0.9.tgz",
+ "integrity": "sha512-nrim7wiACnaXsGtL7GF6jp3Qmml8J6vAjAH88jkC8lIbfNZaCyuPQHANjyYIXlvQeAbsWADQJFZgOHUqFqjh/A==",
"dependencies": {
- "html-to-text": "9.0.3",
+ "html-to-text": "9.0.5",
"pretty": "2.0.0",
"react": "18.2.0",
"react-dom": "18.2.0"
},
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/@react-email/row": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.5.tgz",
- "integrity": "sha512-dir5l1M7Z/1BQqQkUrKUPIIDPt6ueEf6ScMGoBOcUh+VNNqmnqJE2Q2CH5X3w2uo6a5X7tnVhoJHGa2KTKe8Sw==",
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/row/-/row-0.0.6.tgz",
+ "integrity": "sha512-msJ2TnDJNwpgDfDzUO63CvhusJHeaGLMM+8Zz86VPvxzwe/DkT7N48QKRWRCkt8urxVz5U+EgivORA9Dum9p3Q==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@react-email/section": {
- "version": "0.0.9",
- "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.9.tgz",
- "integrity": "sha512-3EbcWJ1jUZrzquWSvXrv8Hbk9V+BGvLcMWQIli4NdIpQlddmlGKUYfXU2mB2d2pf+5ojqkGcFZZ9fWxycB84jQ==",
- "dependencies": {
+ "version": "0.0.10",
+ "resolved": "https://registry.npmjs.org/@react-email/section/-/section-0.0.10.tgz",
+ "integrity": "sha512-x9B2KYFqj+d8I1fK9bgeVm/3mLE4Qgn4mm/GbDtcJeSzKU/G7bTb7/3+BMDk9SARPGkg5XAuZm1XgcqQQutt2A==",
+ "engines": {
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
"react": "18.2.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/@react-email/tailwind": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.0.8.tgz",
- "integrity": "sha512-0BLjD5GpiyBK7YDlaDrjHIpj9eTrrZrMJud3f1UPoCZhS+0S/M8LcR8WMbQsR+8/aLGmiy4F4TGZuRQcsJEsFw==",
- "dependencies": {
- "html-react-parser": "3.0.9",
- "react": "18.2.0",
- "react-dom": "18.2.0",
- "tw-to-css": "0.0.11"
- },
- "engines": {
- "node": ">=16.0.0"
}
},
"node_modules/@react-email/text": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/@react-email/text/-/text-0.0.5.tgz",
- "integrity": "sha512-LXhHiaC6oRRsNAfOzJDos4wQA22eIdVJvR6G7uu4QzUvYNOAatDMf89jRQcKGrxX7InkS640v8sHd9jl5ztM5w==",
- "dependencies": {
- "react": "18.2.0"
- },
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/@react-email/text/-/text-0.0.6.tgz",
+ "integrity": "sha512-PDUTAD1PjlzXFOIUrR1zuV2xxguL62yne5YLcn1k+u/dVUyzn6iU/5lFShxCfzuh3QDWCf4+JRNnXN9rmV6jzw==",
"engines": {
- "node": ">=16.0.0"
+ "node": ">=18.0.0"
+ },
+ "peerDependencies": {
+ "react": "18.2.0"
}
},
"node_modules/@rushstack/eslint-patch": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz",
- "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA=="
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.6.0.tgz",
+ "integrity": "sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA=="
},
"node_modules/@scure/base": {
"version": "1.1.3",
@@ -5357,12 +5112,12 @@
}
},
"node_modules/@selderee/plugin-htmlparser2": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.10.0.tgz",
- "integrity": "sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz",
+ "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==",
"dependencies": {
"domhandler": "^5.0.3",
- "selderee": "^0.10.0"
+ "selderee": "^0.11.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
@@ -5438,11 +5193,11 @@
}
},
"node_modules/@smithy/abort-controller": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.11.tgz",
- "integrity": "sha512-MSzE1qR2JNyb7ot3blIOT3O3H0Jn06iNDEgHRaqZUwBgx5EG+VIx24Y21tlKofzYryIOcWpIohLrIIyocD6LMA==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.14.tgz",
+ "integrity": "sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5458,23 +5213,23 @@
}
},
"node_modules/@smithy/chunked-blob-reader-native": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.0.tgz",
- "integrity": "sha512-HM8V2Rp1y8+1343tkZUKZllFhEQPNmpNdgFAncbTsxkZ18/gqjk23XXv3qGyXWp412f3o43ZZ1UZHVcHrpRnCQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz",
+ "integrity": "sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw==",
"dependencies": {
- "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-base64": "^2.0.1",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/config-resolver": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.15.tgz",
- "integrity": "sha512-a2Pfocla5nSrG2RyB8i20jcWgMyR71TUeFKm8pmrnZotr/X22tlg4y/EhSvBK2oTE8MKHlKh4YdpDO2AryJbGQ==",
+ "version": "2.0.19",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.19.tgz",
+ "integrity": "sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==",
"dependencies": {
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/types": "^2.3.5",
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/types": "^2.6.0",
"@smithy/util-config-provider": "^2.0.0",
- "@smithy/util-middleware": "^2.0.4",
+ "@smithy/util-middleware": "^2.0.7",
"tslib": "^2.5.0"
},
"engines": {
@@ -5482,14 +5237,14 @@
}
},
"node_modules/@smithy/credential-provider-imds": {
- "version": "2.0.17",
- "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.17.tgz",
- "integrity": "sha512-2XcD414yrwbxxuYueTo7tzLC2/w3jj9FZqfenpv3MQkocdOEmuOVS0v9WHsY/nW6V+2EcR340rj/z5HnvsHncQ==",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz",
+ "integrity": "sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==",
"dependencies": {
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/property-provider": "^2.0.12",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/property-provider": "^2.0.15",
+ "@smithy/types": "^2.6.0",
+ "@smithy/url-parser": "^2.0.14",
"tslib": "^2.5.0"
},
"engines": {
@@ -5497,23 +5252,23 @@
}
},
"node_modules/@smithy/eventstream-codec": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.11.tgz",
- "integrity": "sha512-BQCTjxhCYRZIfXapa2LmZSaH8QUBGwMZw7XRN83hrdixbLjIcj+o549zjkedFS07Ve2TlvWUI6BTzP+nv7snBA==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz",
+ "integrity": "sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==",
"dependencies": {
"@aws-crypto/crc32": "3.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"@smithy/util-hex-encoding": "^2.0.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/eventstream-serde-browser": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.11.tgz",
- "integrity": "sha512-p9IK4uvwT6B3pT1VGlODvcVBfPVikjBFHAcKpvvNF+7lAEI+YiC6d0SROPkpjnvCgVBYyGXa3ciqrWnFze6mwQ==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.14.tgz",
+ "integrity": "sha512-41wmYE9smDGJi1ZXp+LogH6BR7MkSsQD91wneIFISF/mupKULvoOJUkv/Nf0NMRxWlM3Bf1Vvi9FlR2oV4KU8Q==",
"dependencies": {
- "@smithy/eventstream-serde-universal": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/eventstream-serde-universal": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5521,11 +5276,11 @@
}
},
"node_modules/@smithy/eventstream-serde-config-resolver": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.11.tgz",
- "integrity": "sha512-vN32E8yExo0Z8L7kXhlU9KRURrhqOpPdLxQMp3MwfMThrjiqbr1Sk5srUXc1ed2Ygl/l0TEN9vwNG0bQHg6AjQ==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.14.tgz",
+ "integrity": "sha512-43IyRIzQ82s+5X+t/3Ood00CcWtAXQdmUIUKMed2Qg9REPk8SVIHhpm3rwewLwg+3G2Nh8NOxXlEQu6DsPUcMw==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5533,12 +5288,12 @@
}
},
"node_modules/@smithy/eventstream-serde-node": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.11.tgz",
- "integrity": "sha512-Gjqbpg7UmD+YzkpgNShNcDNZcUpBWIkvX2XCGptz5PoxJU/UQbuF9eSc93ZlIb7j4aGjtFfqk23HUMW8Hopg2Q==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.14.tgz",
+ "integrity": "sha512-jVh9E2qAr6DxH5tWfCAl9HV6tI0pEQ3JVmu85JknDvYTC66djcjDdhctPV2EHuKWf2kjRiFJcMIn0eercW4THA==",
"dependencies": {
- "@smithy/eventstream-serde-universal": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/eventstream-serde-universal": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5546,12 +5301,12 @@
}
},
"node_modules/@smithy/eventstream-serde-universal": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.11.tgz",
- "integrity": "sha512-F8FsxLTbFN4+Esgpo+nNKcEajrgRZJ+pG9c8+MhLM4Odp5ejLHw2GMCXd81cGsgmfcbnzdDEXazPPVzOwj89MQ==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.14.tgz",
+ "integrity": "sha512-Ie35+AISNn1NmEjn5b2SchIE49pvKp4Q74bE9ME5RULWI1MgXyGkQUajWd5E6OBSr/sqGcs+rD3IjPErXnCm9g==",
"dependencies": {
- "@smithy/eventstream-codec": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/eventstream-codec": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5559,36 +5314,36 @@
}
},
"node_modules/@smithy/fetch-http-handler": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.3.tgz",
- "integrity": "sha512-0G9sePU+0R+8d7cie+OXzNbbkjnD4RfBlVCs46ZEuQAMcxK8OniemYXSSkOc80CCk8Il4DnlYZcUSvsIs2OB2w==",
+ "version": "2.2.7",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz",
+ "integrity": "sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==",
"dependencies": {
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/querystring-builder": "^2.0.11",
- "@smithy/types": "^2.3.5",
- "@smithy/util-base64": "^2.0.0",
+ "@smithy/protocol-http": "^3.0.10",
+ "@smithy/querystring-builder": "^2.0.14",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-base64": "^2.0.1",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/hash-blob-browser": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.11.tgz",
- "integrity": "sha512-/6vq/NiH2EN3mWdwcLdjVohP+VCng+ZA1GnlUdx959egsfgIlLWQvCyjnB2ze9Hr6VHV5XEFLLpLQH2dHA6Sgw==",
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.15.tgz",
+ "integrity": "sha512-HX/7GIyPUT/HDWVYe2HYQu0iRnSYpF4uZVNhAhZsObPRawk5Mv0PbyluBgIFI2DDCCKgL/tloCYYwycff1GtQg==",
"dependencies": {
"@smithy/chunked-blob-reader": "^2.0.0",
- "@smithy/chunked-blob-reader-native": "^2.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/chunked-blob-reader-native": "^2.0.1",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/hash-node": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.11.tgz",
- "integrity": "sha512-PbleVugN2tbhl1ZoNWVrZ1oTFFas/Hq+s6zGO8B9bv4w/StTriTKA9W+xZJACOj9X7zwfoTLbscM+avCB1KqOQ==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.16.tgz",
+ "integrity": "sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"@smithy/util-buffer-from": "^2.0.0",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -5596,12 +5351,12 @@
}
},
"node_modules/@smithy/hash-stream-node": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.11.tgz",
- "integrity": "sha512-Jn2yl+Dn0kvwKvSavvR1/BFVYa2wIkaJKWeTH48kno89gqHAJxMh1hrtBN6SJ7F8VhodNZTiNOlQVqCSfLheNQ==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.16.tgz",
+ "integrity": "sha512-4x24GFdeWos1Z49MC5sYdM1j+z32zcUr6oWM9Ggm3WudFAcRIcbG9uDQ1XgJ0Kl+ZTjpqLKniG0iuWvQb2Ud1A==",
"dependencies": {
- "@smithy/types": "^2.3.5",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -5609,11 +5364,11 @@
}
},
"node_modules/@smithy/invalid-dependency": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.11.tgz",
- "integrity": "sha512-zazq99ujxYv/NOf9zh7xXbNgzoVLsqE0wle8P/1zU/XdhPi/0zohTPKWUzIxjGdqb5hkkwfBkNkl5H+LE0mvgw==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz",
+ "integrity": "sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
}
},
@@ -5629,22 +5384,22 @@
}
},
"node_modules/@smithy/md5-js": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.11.tgz",
- "integrity": "sha512-YBIv+e95qeGvQA05ucwstmTeQ/bUzWgU+nO2Ffmif5awu6IzSR0Jfk3XLYh4mdy7f8DCgsn8qA63u7N9Lu0+5A==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.16.tgz",
+ "integrity": "sha512-YhWt9aKl+EMSNXyUTUo7I01WHf3HcCkPu/Hl2QmTNwrHT49eWaY7hptAMaERZuHFH0V5xHgPKgKZo2I93DFtgQ==",
"dependencies": {
- "@smithy/types": "^2.3.5",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/middleware-content-length": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.13.tgz",
- "integrity": "sha512-Md2kxWpaec3bXp1oERFPQPBhOXCkGSAF7uc1E+4rkwjgw3/tqAXRtbjbggu67HJdwaif76As8AV6XxbD1HzqTQ==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz",
+ "integrity": "sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==",
"dependencies": {
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/types": "^2.3.5",
+ "@smithy/protocol-http": "^3.0.10",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5652,16 +5407,16 @@
}
},
"node_modules/@smithy/middleware-endpoint": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.1.2.tgz",
- "integrity": "sha512-dua4r2EbSTRzNefz72snz+KDuXN73RCe1K+rGeemzUyYemxuh1jujFbLQbTU6DVlTgHkhtrbH0+kdOFY/SV4Qg==",
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz",
+ "integrity": "sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==",
"dependencies": {
- "@smithy/middleware-serde": "^2.0.11",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/shared-ini-file-loader": "^2.2.1",
- "@smithy/types": "^2.3.5",
- "@smithy/url-parser": "^2.0.11",
- "@smithy/util-middleware": "^2.0.4",
+ "@smithy/middleware-serde": "^2.0.14",
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/shared-ini-file-loader": "^2.2.5",
+ "@smithy/types": "^2.6.0",
+ "@smithy/url-parser": "^2.0.14",
+ "@smithy/util-middleware": "^2.0.7",
"tslib": "^2.5.0"
},
"engines": {
@@ -5669,16 +5424,16 @@
}
},
"node_modules/@smithy/middleware-retry": {
- "version": "2.0.17",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.17.tgz",
- "integrity": "sha512-ZYVU1MmshCTbEKTNc5h7/Pps1vhH5C7hRclQWnAbVYKkIT+PEGu9dSVqprzEo/nlMA8Zv4Dj5Y+fv3pRnUwElw==",
+ "version": "2.0.21",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz",
+ "integrity": "sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==",
"dependencies": {
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/service-error-classification": "^2.0.4",
- "@smithy/types": "^2.3.5",
- "@smithy/util-middleware": "^2.0.4",
- "@smithy/util-retry": "^2.0.4",
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/protocol-http": "^3.0.10",
+ "@smithy/service-error-classification": "^2.0.7",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-middleware": "^2.0.7",
+ "@smithy/util-retry": "^2.0.7",
"tslib": "^2.5.0",
"uuid": "^8.3.2"
},
@@ -5687,11 +5442,11 @@
}
},
"node_modules/@smithy/middleware-serde": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.11.tgz",
- "integrity": "sha512-NuxnjMyf4zQqhwwdh0OTj5RqpnuT6HcH5Xg5GrPijPcKzc2REXVEVK4Yyk8ckj8ez1XSj/bCmJ+oNjmqB02GWA==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz",
+ "integrity": "sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5699,11 +5454,11 @@
}
},
"node_modules/@smithy/middleware-stack": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.5.tgz",
- "integrity": "sha512-bVQU/rZzBY7CbSxIrDTGZYnBWKtIw+PL/cRc9B7etZk1IKSOe0NvKMJyWllfhfhrTeMF6eleCzOihIQympAvPw==",
+ "version": "2.0.8",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz",
+ "integrity": "sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5711,13 +5466,13 @@
}
},
"node_modules/@smithy/node-config-provider": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.2.tgz",
- "integrity": "sha512-tbYh/JK/ddxKWYTtjLgap0juyivJ0wCvywMqINb54zyOVHoKYM6iYl7DosQA0owFaNp6GAx1lXFjqGz7L2fAqA==",
+ "version": "2.1.6",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz",
+ "integrity": "sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==",
"dependencies": {
- "@smithy/property-provider": "^2.0.12",
- "@smithy/shared-ini-file-loader": "^2.2.1",
- "@smithy/types": "^2.3.5",
+ "@smithy/property-provider": "^2.0.15",
+ "@smithy/shared-ini-file-loader": "^2.2.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5725,14 +5480,14 @@
}
},
"node_modules/@smithy/node-http-handler": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.7.tgz",
- "integrity": "sha512-PQIKZXlp3awCDn/xNlCSTFE7aYG/5Tx33M05NfQmWYeB5yV1GZZOSz4dXpwiNJYTXb9jPqjl+ueXXkwtEluFFA==",
+ "version": "2.1.10",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz",
+ "integrity": "sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==",
"dependencies": {
- "@smithy/abort-controller": "^2.0.11",
- "@smithy/protocol-http": "^3.0.7",
- "@smithy/querystring-builder": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/abort-controller": "^2.0.14",
+ "@smithy/protocol-http": "^3.0.10",
+ "@smithy/querystring-builder": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5740,11 +5495,11 @@
}
},
"node_modules/@smithy/property-provider": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.12.tgz",
- "integrity": "sha512-Un/OvvuQ1Kg8WYtoMCicfsFFuHb/TKL3pCA6ZIo/WvNTJTR94RtoRnL7mY4XkkUAoFMyf6KjcQJ76y1FX7S5rw==",
+ "version": "2.0.15",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.15.tgz",
+ "integrity": "sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5752,11 +5507,11 @@
}
},
"node_modules/@smithy/protocol-http": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.7.tgz",
- "integrity": "sha512-HnZW8y+r66ntYueCDbLqKwWcMNWW8o3eVpSrHNluwtBJ/EUWfQHRKSiu6vZZtc6PGfPQWgVfucoCE/C3QufMAA==",
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz",
+ "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5764,11 +5519,11 @@
}
},
"node_modules/@smithy/querystring-builder": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.11.tgz",
- "integrity": "sha512-b4kEbVMxpmfv2VWUITn2otckTi7GlMteZQxi+jlwedoATOGEyrCJPfRcYQJjbCi3fZ2QTfh3PcORvB27+j38Yg==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz",
+ "integrity": "sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"@smithy/util-uri-escape": "^2.0.0",
"tslib": "^2.5.0"
},
@@ -5777,11 +5532,11 @@
}
},
"node_modules/@smithy/querystring-parser": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.12.tgz",
- "integrity": "sha512-fytyTcXaMzPBuNtPlhj5v6dbl4bJAnwKZFyyItAGt4Tgm9HFPZNo7a9r1SKPr/qdxUEBzvL9Rh+B9SkTX3kFxg==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz",
+ "integrity": "sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==",
"dependencies": {
- "@smithy/types": "^2.4.0",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5789,22 +5544,22 @@
}
},
"node_modules/@smithy/service-error-classification": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.4.tgz",
- "integrity": "sha512-77506l12I5gxTZqBkx3Wb0RqMG81bMYLaVQ+EqIWFwQDJRs5UFeXogKxSKojCmz1wLUziHZQXm03MBzPQiumQw==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz",
+ "integrity": "sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==",
"dependencies": {
- "@smithy/types": "^2.3.5"
+ "@smithy/types": "^2.6.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/@smithy/shared-ini-file-loader": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.1.tgz",
- "integrity": "sha512-eAYajwo2eTTVU5KPX90+V6ccfrWphrzcUwOt7n9pLOMBO0fOKlRVshbvCBqfRCxEn7OYDGH6TsL3yrx+hAjddA==",
+ "version": "2.2.5",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz",
+ "integrity": "sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5812,17 +5567,17 @@
}
},
"node_modules/@smithy/signature-v4": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.11.tgz",
- "integrity": "sha512-EFVU1dT+2s8xi227l1A9O27edT/GNKvyAK6lZnIZ0zhIHq/jSLznvkk15aonGAM1kmhmZBVGpI7Tt0odueZK9A==",
+ "version": "2.0.16",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.16.tgz",
+ "integrity": "sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==",
"dependencies": {
- "@smithy/eventstream-codec": "^2.0.11",
+ "@smithy/eventstream-codec": "^2.0.14",
"@smithy/is-array-buffer": "^2.0.0",
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-middleware": "^2.0.4",
+ "@smithy/util-middleware": "^2.0.7",
"@smithy/util-uri-escape": "^2.0.0",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -5830,13 +5585,13 @@
}
},
"node_modules/@smithy/smithy-client": {
- "version": "2.1.11",
- "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.11.tgz",
- "integrity": "sha512-okjMbuBBCTiieK665OFN/ap6u9+Z9z55PMphS5FYCsS6Zfp137Q3qlnt0OgBAnUVnH/mNGyoJV0LBX9gkTWptg==",
+ "version": "2.1.16",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.16.tgz",
+ "integrity": "sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==",
"dependencies": {
- "@smithy/middleware-stack": "^2.0.5",
- "@smithy/types": "^2.3.5",
- "@smithy/util-stream": "^2.0.16",
+ "@smithy/middleware-stack": "^2.0.8",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-stream": "^2.0.21",
"tslib": "^2.5.0"
},
"engines": {
@@ -5844,9 +5599,9 @@
}
},
"node_modules/@smithy/types": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.4.0.tgz",
- "integrity": "sha512-iH1Xz68FWlmBJ9vvYeHifVMWJf82ONx+OybPW8ZGf5wnEv2S0UXcU4zwlwJkRXuLKpcSLHrraHbn2ucdVXLb4g==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.6.0.tgz",
+ "integrity": "sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==",
"dependencies": {
"tslib": "^2.5.0"
},
@@ -5855,19 +5610,19 @@
}
},
"node_modules/@smithy/url-parser": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.12.tgz",
- "integrity": "sha512-qgkW2mZqRvlNUcBkxYB/gYacRaAdck77Dk3/g2iw0S9F0EYthIS3loGfly8AwoWpIvHKhkTsCXXQfzksgZ4zIA==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.14.tgz",
+ "integrity": "sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==",
"dependencies": {
- "@smithy/querystring-parser": "^2.0.12",
- "@smithy/types": "^2.4.0",
+ "@smithy/querystring-parser": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
}
},
"node_modules/@smithy/util-base64": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz",
- "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz",
+ "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==",
"dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
@@ -5919,13 +5674,13 @@
}
},
"node_modules/@smithy/util-defaults-mode-browser": {
- "version": "2.0.15",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.15.tgz",
- "integrity": "sha512-2raMZOYKSuke7QlDg/HDcxQdrp0zteJ8z+S0B9Rn23J55ZFNK1+IjG4HkN6vo/0u3Xy/JOdJ93ibiBSB8F7kOw==",
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz",
+ "integrity": "sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==",
"dependencies": {
- "@smithy/property-provider": "^2.0.12",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/property-provider": "^2.0.15",
+ "@smithy/smithy-client": "^2.1.16",
+ "@smithy/types": "^2.6.0",
"bowser": "^2.11.0",
"tslib": "^2.5.0"
},
@@ -5934,22 +5689,35 @@
}
},
"node_modules/@smithy/util-defaults-mode-node": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.20.tgz",
- "integrity": "sha512-kJjcZ/Lzvs3sPDKBwlhZsFFcgPNIpB3CMb6/saCakawRzo0E+JkyS3ZZRjVR3ce29yHtwoP/0YLKC1PeH0Dffg==",
+ "version": "2.0.26",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz",
+ "integrity": "sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==",
"dependencies": {
- "@smithy/config-resolver": "^2.0.15",
- "@smithy/credential-provider-imds": "^2.0.17",
- "@smithy/node-config-provider": "^2.1.2",
- "@smithy/property-provider": "^2.0.12",
- "@smithy/smithy-client": "^2.1.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/config-resolver": "^2.0.19",
+ "@smithy/credential-provider-imds": "^2.1.2",
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/property-provider": "^2.0.15",
+ "@smithy/smithy-client": "^2.1.16",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
"node": ">= 10.0.0"
}
},
+ "node_modules/@smithy/util-endpoints": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.5.tgz",
+ "integrity": "sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==",
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.1.6",
+ "@smithy/types": "^2.6.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
"node_modules/@smithy/util-hex-encoding": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
@@ -5962,11 +5730,11 @@
}
},
"node_modules/@smithy/util-middleware": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.4.tgz",
- "integrity": "sha512-Pbu6P4MBwRcjrLgdTR1O4Y3c0sTZn2JdOiJNcgL7EcIStcQodj+6ZTXtbyU/WTEU3MV2NMA10LxFc3AWHZ3+4A==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.7.tgz",
+ "integrity": "sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==",
"dependencies": {
- "@smithy/types": "^2.3.5",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5974,12 +5742,12 @@
}
},
"node_modules/@smithy/util-retry": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.4.tgz",
- "integrity": "sha512-b+n1jBBKc77C1E/zfBe1Zo7S9OXGBiGn55N0apfhZHxPUP/fMH5AhFUUcWaJh7NAnah284M5lGkBKuhnr3yK5w==",
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.7.tgz",
+ "integrity": "sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==",
"dependencies": {
- "@smithy/service-error-classification": "^2.0.4",
- "@smithy/types": "^2.3.5",
+ "@smithy/service-error-classification": "^2.0.7",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -5987,17 +5755,17 @@
}
},
"node_modules/@smithy/util-stream": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.16.tgz",
- "integrity": "sha512-b5ZSRh1KzUzC7LoJcpfk7+iXGoRr3WylEfmPd4FnBLm90OwxSB9VgK1fDZwicfYxSEvWHdYXgvvjPtenEYBBhw==",
+ "version": "2.0.21",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.21.tgz",
+ "integrity": "sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==",
"dependencies": {
- "@smithy/fetch-http-handler": "^2.2.3",
- "@smithy/node-http-handler": "^2.1.7",
- "@smithy/types": "^2.3.5",
- "@smithy/util-base64": "^2.0.0",
+ "@smithy/fetch-http-handler": "^2.2.7",
+ "@smithy/node-http-handler": "^2.1.10",
+ "@smithy/types": "^2.6.0",
+ "@smithy/util-base64": "^2.0.1",
"@smithy/util-buffer-from": "^2.0.0",
"@smithy/util-hex-encoding": "^2.0.0",
- "@smithy/util-utf8": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.2",
"tslib": "^2.5.0"
},
"engines": {
@@ -6016,9 +5784,9 @@
}
},
"node_modules/@smithy/util-utf8": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
- "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz",
+ "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==",
"dependencies": {
"@smithy/util-buffer-from": "^2.0.0",
"tslib": "^2.5.0"
@@ -6028,12 +5796,12 @@
}
},
"node_modules/@smithy/util-waiter": {
- "version": "2.0.11",
- "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.11.tgz",
- "integrity": "sha512-8SJWUl9O1YhjC77EccgltI3q4XZQp3vp9DGEW6o0OdkUcwqm/H4qOLnMkA2n+NDojuM5Iia2jWoCdbluIiG7TA==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.14.tgz",
+ "integrity": "sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA==",
"dependencies": {
- "@smithy/abort-controller": "^2.0.11",
- "@smithy/types": "^2.3.5",
+ "@smithy/abort-controller": "^2.0.14",
+ "@smithy/types": "^2.6.0",
"tslib": "^2.5.0"
},
"engines": {
@@ -6130,13 +5898,13 @@
}
},
"node_modules/@trivago/prettier-plugin-sort-imports": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.2.0.tgz",
- "integrity": "sha512-YBepjbt+ZNBVmN3ev1amQH3lWCmHyt5qTbLCp/syXJRu/Kw2koXh44qayB1gMRxcL/gV8egmjN5xWSrYyfUtyw==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@trivago/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.3.0.tgz",
+ "integrity": "sha512-r3n0onD3BTOVUNPhR4lhVK4/pABGpbA7bW3eumZnYdKaHkf1qEC+Mag6DPbGNuuh0eG8AaYj+YqmVHSiGslaTQ==",
"dependencies": {
"@babel/generator": "7.17.7",
"@babel/parser": "^7.20.5",
- "@babel/traverse": "7.17.3",
+ "@babel/traverse": "7.23.2",
"@babel/types": "7.17.0",
"javascript-natural-sort": "0.7.1",
"lodash": "^4.17.21"
@@ -6152,20 +5920,20 @@
}
},
"node_modules/@trpc/client": {
- "version": "10.40.0",
- "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.40.0.tgz",
- "integrity": "sha512-bT6BcdWjj0KzGQiimE6rB2tIaRYX0Ear4Gthb5szN/c01wrP0yC1Fbz2uCcm/QTVAwu4Lve5M+YjPoEaTHG6lg==",
+ "version": "10.44.1",
+ "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.44.1.tgz",
+ "integrity": "sha512-vTWsykNcgz1LnwePVl2fKZnhvzP9N3GaaLYPkfGINo314ZOS0OBqe9x0ytB2LLUnRVTAAZ2WoONzARd8nHiqrA==",
"funding": [
"https://trpc.io/sponsor"
],
"peerDependencies": {
- "@trpc/server": "10.40.0"
+ "@trpc/server": "10.44.1"
}
},
"node_modules/@trpc/next": {
- "version": "10.40.0",
- "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.40.0.tgz",
- "integrity": "sha512-GMOiN+2DIfUXxS2DuTuTT3FOzkuB5p6+1QglY5M9ywKFWBVTGkBnbLkTgoPGuglq+dPfcZbcSajRN22AUv5Qtg==",
+ "version": "10.44.1",
+ "resolved": "https://registry.npmjs.org/@trpc/next/-/next-10.44.1.tgz",
+ "integrity": "sha512-ez2oYUzmaQ+pGch627sRBfeEk3h+UIwNicR8WjTAM54TPcdP5W9ZyWCyO5HZTEfjHgGixYM4tCIxewdKOWY9yA==",
"funding": [
"https://trpc.io/sponsor"
],
@@ -6174,36 +5942,39 @@
},
"peerDependencies": {
"@tanstack/react-query": "^4.18.0",
- "@trpc/client": "10.40.0",
- "@trpc/react-query": "10.40.0",
- "@trpc/server": "10.40.0",
+ "@trpc/client": "10.44.1",
+ "@trpc/react-query": "10.44.1",
+ "@trpc/server": "10.44.1",
"next": "*",
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
}
},
"node_modules/@trpc/react-query": {
- "version": "10.40.0",
- "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.40.0.tgz",
- "integrity": "sha512-DpJrV3lmYNo9xtPtcg49lfh9CUFap3ZivjhlSmfe4QPf7H6xBjAE+ml4OdJ0RmKvSTFvbLSOiNdB1k5O8zIdzQ==",
+ "version": "10.44.1",
+ "resolved": "https://registry.npmjs.org/@trpc/react-query/-/react-query-10.44.1.tgz",
+ "integrity": "sha512-Sgi/v0YtdunOXjBRi7om9gILGkOCFYXPzn5KqLuEHiZw5dr5w4qGHFwCeMAvndZxmwfblJrl1tk2AznmsVu8MA==",
"funding": [
"https://trpc.io/sponsor"
],
"peerDependencies": {
"@tanstack/react-query": "^4.18.0",
- "@trpc/client": "10.40.0",
- "@trpc/server": "10.40.0",
+ "@trpc/client": "10.44.1",
+ "@trpc/server": "10.44.1",
"react": ">=16.8.0",
"react-dom": ">=16.8.0"
}
},
"node_modules/@trpc/server": {
- "version": "10.40.0",
- "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.40.0.tgz",
- "integrity": "sha512-49SUOMWzSZtu5+OdrADmJD+u+sjSE0qj1cWgYk2FY4jLkPJunLuNRuhzM7aOeBhiUjyfhg2YTfur8FN1WBmvEw==",
+ "version": "10.44.1",
+ "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.44.1.tgz",
+ "integrity": "sha512-mF7B+K6LjuboX8I1RZgKE5GA/fJhsJ8tKGK2UBt3Bwik7hepEPb4NJgNr7vO6BK5IYwPdBLRLTctRw6XZx0sRg==",
"funding": [
"https://trpc.io/sponsor"
- ]
+ ],
+ "engines": {
+ "node": ">=18.0.0"
+ }
},
"node_modules/@tsconfig/node10": {
"version": "1.0.9",
@@ -6238,85 +6009,85 @@
}
},
"node_modules/@types/bcrypt": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.1.tgz",
- "integrity": "sha512-dIIrEsLV1/v0AUNI8oHMaRRTSeVjoy5ID8oclJavtPj8CwPJoD1eFoNXEypuu6k091brEzBeOo3LlxeAH9zRZg==",
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz",
+ "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/d3-array": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.0.9.tgz",
- "integrity": "sha512-mZowFN3p64ajCJJ4riVYlOjNlBJv3hctgAY01pjw3qTnJePD8s9DZmYDzhHKvzfCYvdjwylkU38+Vdt7Cu2FDA=="
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz",
+ "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
},
"node_modules/@types/d3-color": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.2.tgz",
- "integrity": "sha512-At+Ski7dL8Bs58E8g8vPcFJc8tGcaC12Z4m07+p41+DRqnZQcAlp3NfYjLrhNYv+zEyQitU1CUxXNjqUyf+c0g=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
+ "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
},
"node_modules/@types/d3-ease": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.1.tgz",
- "integrity": "sha512-VZofjpEt8HWv3nxUAosj5o/+4JflnJ7Bbv07k17VO3T2WRuzGdZeookfaF60iVh5RdhVG49LE5w6LIshVUC6rg=="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
+ "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
},
"node_modules/@types/d3-interpolate": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.3.tgz",
- "integrity": "sha512-6OZ2EIB4lLj+8cUY7I/Cgn9Q+hLdA4DjJHYOQDiHL0SzqS1K9DL5xIOVBSIHgF+tiuO9MU1D36qvdIvRDRPh+Q==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
+ "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
"dependencies": {
"@types/d3-color": "*"
}
},
"node_modules/@types/d3-path": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.1.tgz",
- "integrity": "sha512-blRhp7ki7pVznM8k6lk5iUU9paDbVRVq+/xpf0RRgSJn5gr6SE7RcFtxooYGMBOc1RZiGyqRpVdu5AD0z0ooMA=="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.0.2.tgz",
+ "integrity": "sha512-WAIEVlOCdd/NKRYTsqCpOMHQHemKBEINf8YXMYOtXH0GA7SY0dqMB78P3Uhgfy+4X+/Mlw2wDtlETkN6kQUCMA=="
},
"node_modules/@types/d3-scale": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.6.tgz",
- "integrity": "sha512-lo3oMLSiqsQUovv8j15X4BNEDOsnHuGjeVg7GRbAuB2PUa1prK5BNSOu6xixgNf3nqxPl4I1BqJWrPvFGlQoGQ==",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz",
+ "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==",
"dependencies": {
"@types/d3-time": "*"
}
},
"node_modules/@types/d3-shape": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.4.tgz",
- "integrity": "sha512-M2/xsWPsjaZc5ifMKp1EBp0gqJG0eO/zlldJNOC85Y/5DGsBQ49gDkRJ2h5GY7ZVD6KUumvZWsylSbvTaJTqKg==",
+ "version": "3.1.6",
+ "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.6.tgz",
+ "integrity": "sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==",
"dependencies": {
"@types/d3-path": "*"
}
},
"node_modules/@types/d3-time": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.2.tgz",
- "integrity": "sha512-kbdRXTmUgNfw5OTE3KZnFQn6XdIc4QGroN5UixgdrXATmYsdlPQS6pEut9tVlIojtzuFD4txs/L+Rq41AHtLpg=="
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.3.tgz",
+ "integrity": "sha512-2p6olUZ4w3s+07q3Tm2dbiMZy5pCDfYwtLXXHUnVzXgQlZ/OyPtUz6OL382BkOuGlLXqfT+wqv8Fw2v8/0geBw=="
},
"node_modules/@types/d3-timer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.0.tgz",
- "integrity": "sha512-HNB/9GHqu7Fo8AQiugyJbv6ZxYz58wef0esl4Mv828w1ZKpAshw/uFWVDUcIB9KKFeFKoxS3cHY07FFgtTRZ1g=="
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
+ "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
},
"node_modules/@types/debug": {
- "version": "4.1.9",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.9.tgz",
- "integrity": "sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==",
+ "version": "4.1.12",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz",
+ "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==",
"dependencies": {
"@types/ms": "*"
}
},
"node_modules/@types/estree": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
- "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA=="
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
"node_modules/@types/estree-jsx": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.1.tgz",
- "integrity": "sha512-sHyakZlAezNFxmYRo0fopDZW+XvK6ipeZkkp5EAOLjdPfZp8VjZBJ67vSRI99RSCAoqXVmXOHS4fnWoxpuGQtQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.3.tgz",
+ "integrity": "sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==",
"dependencies": {
"@types/estree": "*"
}
@@ -6331,9 +6102,9 @@
}
},
"node_modules/@types/hast": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.6.tgz",
- "integrity": "sha512-47rJE80oqPmFdVDCD7IheXBrVdwuBgsYwoczFvKmwfo2Mzsnt+V9OONsYauFmICb6lQPpCuXYJWejBNs4pDJRg==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.8.tgz",
+ "integrity": "sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==",
"dependencies": {
"@types/unist": "^2"
}
@@ -6349,34 +6120,34 @@
"integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="
},
"node_modules/@types/luxon": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.2.tgz",
- "integrity": "sha512-l5cpE57br4BIjK+9BSkFBOsWtwv6J9bJpC7gdXIzZyI0vuKvNTk0wZZrkQxMGsUAuGW9+WMNWF2IJMD7br2yeQ==",
+ "version": "3.3.5",
+ "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.3.5.tgz",
+ "integrity": "sha512-1cyf6Ge/94zlaWIZA2ei1pE6SZ8xpad2hXaYa5JEFiaUH0YS494CZwyi4MXNpXD9oEuv6ZH0Bmh0e7F9sPhmZA==",
"dev": true
},
"node_modules/@types/mdast": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.13.tgz",
- "integrity": "sha512-HjiGiWedR0DVFkeNljpa6Lv4/IZU1+30VY5d747K7lBudFc3R0Ibr6yJ9lN3BE28VnZyDfLF/VB1Ql1ZIbKrmg==",
+ "version": "3.0.15",
+ "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz",
+ "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==",
"dependencies": {
"@types/unist": "^2"
}
},
"node_modules/@types/mdx": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.8.tgz",
- "integrity": "sha512-r7/zWe+f9x+zjXqGxf821qz++ld8tp6Z4jUS6qmPZUXH6tfh4riXOhAqb12tWGWAevCFtMt1goLWkQMqIJKpsA=="
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz",
+ "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg=="
},
"node_modules/@types/minimist": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz",
- "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
"dev": true
},
"node_modules/@types/ms": {
- "version": "0.7.32",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.32.tgz",
- "integrity": "sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g=="
+ "version": "0.7.34",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
+ "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g=="
},
"node_modules/@types/node": {
"version": "20.5.1",
@@ -6384,27 +6155,27 @@
"integrity": "sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg=="
},
"node_modules/@types/node-forge": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.7.tgz",
- "integrity": "sha512-uWvTDObXqNQPVprvvm7FCS/B0qexgRMmNCJCRETywf7cBm3C7uGRtGfaSqCoUlksrmY5Yn3++fvA7awBE5lAzw==",
+ "version": "1.3.10",
+ "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz",
+ "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/nodemailer": {
- "version": "6.4.11",
- "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.11.tgz",
- "integrity": "sha512-Ld2c0frwpGT4VseuoeboCXQ7UJIkK3X7Lx/4YsZEiUHtHsthWAOCYtf6PAiLhMtfwV0cWJRabLBS3+LD8x6Nrw==",
+ "version": "6.4.14",
+ "resolved": "https://registry.npmjs.org/@types/nodemailer/-/nodemailer-6.4.14.tgz",
+ "integrity": "sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/normalize-package-data": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz",
- "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A=="
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA=="
},
"node_modules/@types/parse5": {
"version": "6.0.3",
@@ -6412,14 +6183,16 @@
"integrity": "sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g=="
},
"node_modules/@types/prop-types": {
- "version": "15.7.8",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.8.tgz",
- "integrity": "sha512-kMpQpfZKSCBqltAJwskgePRaYRFukDkm1oItcAbC3gNELR20XIBcN9VRgg4+m8DKsTfkWeA4m4Imp4DDuWy7FQ=="
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
+ "devOptional": true
},
"node_modules/@types/react": {
"version": "18.2.18",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.18.tgz",
"integrity": "sha512-da4NTSeBv/P34xoZPhtcLkmZuJ+oYaCxHmyHzwaDQo9RQPBeXV+06gEk2FpqEcsX9XrnNLvRpVh6bdavDSjtiQ==",
+ "devOptional": true,
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -6436,53 +6209,88 @@
}
},
"node_modules/@types/resolve": {
- "version": "1.20.3",
- "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.3.tgz",
- "integrity": "sha512-NH5oErHOtHZYcjCtg69t26aXEk4BN2zLWqf7wnDZ+dpe0iR7Rds1SPGEItl3fca21oOe0n3OCnZ4W7jBxu7FOw=="
+ "version": "1.20.6",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz",
+ "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ=="
},
"node_modules/@types/scheduler": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.4.tgz",
- "integrity": "sha512-2L9ifAGl7wmXwP4v3pN4p2FLhD0O1qsJpvKmNin5VA8+UvNVb447UDaAEV6UdrkA+m/Xs58U1RFps44x6TFsVQ=="
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+ "devOptional": true
},
"node_modules/@types/semver": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
- "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg=="
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A=="
},
"node_modules/@types/unist": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz",
- "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw=="
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA=="
},
"node_modules/@types/ws": {
- "version": "8.5.7",
- "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.7.tgz",
- "integrity": "sha512-6UrLjiDUvn40CMrAubXuIVtj2PEfKDffJS7ychvnPU44j+KVeXmdHHTgqcM/dxLUTHxlXHiFM8Skmb8ozGdTnQ==",
+ "version": "8.5.10",
+ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz",
+ "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==",
"dependencies": {
"@types/node": "*"
}
},
- "node_modules/@typescript-eslint/parser": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
- "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
- "dev": true,
+ "node_modules/@typescript-eslint/eslint-plugin": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz",
+ "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==",
"dependencies": {
- "@typescript-eslint/scope-manager": "5.62.0",
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/typescript-estree": "5.62.0",
- "debug": "^4.3.4"
+ "@eslint-community/regexpp": "^4.5.1",
+ "@typescript-eslint/scope-manager": "6.8.0",
+ "@typescript-eslint/type-utils": "6.8.0",
+ "@typescript-eslint/utils": "6.8.0",
+ "@typescript-eslint/visitor-keys": "6.8.0",
+ "debug": "^4.3.4",
+ "graphemer": "^1.4.0",
+ "ignore": "^5.2.4",
+ "natural-compare": "^1.4.0",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
},
"peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
+ "eslint": "^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser": {
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz",
+ "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==",
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "6.8.0",
+ "@typescript-eslint/types": "6.8.0",
+ "@typescript-eslint/typescript-estree": "6.8.0",
+ "@typescript-eslint/visitor-keys": "6.8.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -6491,16 +6299,15 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
- "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
- "dev": true,
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
+ "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
"dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0"
+ "@typescript-eslint/types": "6.8.0",
+ "@typescript-eslint/visitor-keys": "6.8.0"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
@@ -6533,7 +6340,7 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
+ "node_modules/@typescript-eslint/types": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz",
"integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
@@ -6545,7 +6352,7 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
+ "node_modules/@typescript-eslint/typescript-estree": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
"integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
@@ -6571,62 +6378,6 @@
}
}
},
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
- "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
- "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
- "dev": true,
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
- "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "@typescript-eslint/visitor-keys": "5.62.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.3.7",
- "tsutils": "^3.21.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/@typescript-eslint/utils": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.8.0.tgz",
@@ -6651,61 +6402,7 @@
"eslint": "^7.0.0 || ^8.0.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
- "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz",
- "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
- "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": {
+ "node_modules/@typescript-eslint/visitor-keys": {
"version": "6.8.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
"integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
@@ -6721,29 +6418,17 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.62.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
- "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
- "dev": true,
- "dependencies": {
- "@typescript-eslint/types": "5.62.0",
- "eslint-visitor-keys": "^3.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
+ "node_modules/@ungap/structured-clone": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
+ "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
},
"node_modules/@upstash/redis": {
- "version": "1.23.4",
- "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.23.4.tgz",
- "integrity": "sha512-7KtG6RE5W7QbByDjQq7cEpwG2ir46VrEXZ8NFRn17FYSJUHKeHl6qnAqQJIR5rAItQWtyrKNYBij5IGEjUevhA==",
+ "version": "1.25.1",
+ "resolved": "https://registry.npmjs.org/@upstash/redis/-/redis-1.25.1.tgz",
+ "integrity": "sha512-ACj0GhJ4qrQyBshwFgPod6XufVEfKX2wcaihsEvSdLYnY+m+pa13kGt1RXm/yTHKf4TQi/Dy2A8z/y6WUEOmlg==",
"dependencies": {
- "isomorphic-fetch": "^3.0.0"
+ "crypto-js": "^4.2.0"
}
},
"node_modules/abbrev": {
@@ -6752,9 +6437,9 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"node_modules/acorn": {
- "version": "8.10.0",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"bin": {
"acorn": "bin/acorn"
},
@@ -6800,9 +6485,9 @@
}
},
"node_modules/acorn-walk": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz",
- "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==",
+ "version": "8.3.0",
+ "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz",
+ "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==",
"devOptional": true,
"engines": {
"node": ">=0.4.0"
@@ -6918,19 +6603,6 @@
"node": ">=10"
}
},
- "node_modules/are-we-there-yet/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/arg": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.0.tgz",
@@ -7108,9 +6780,9 @@
"integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA=="
},
"node_modules/ast-types-flow": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
- "integrity": "sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag=="
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz",
+ "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="
},
"node_modules/astring": {
"version": "1.8.6",
@@ -7189,34 +6861,36 @@
}
},
"node_modules/aws-crt": {
- "version": "1.18.1",
- "resolved": "https://registry.npmjs.org/aws-crt/-/aws-crt-1.18.1.tgz",
- "integrity": "sha512-VUUmO4wi5EUb86kNNvu7GLHvCRwQzD5uV/pYuLuQvIhdN75/IjI5ManejKZjhxmFKkuJAfk5BmxR4oFIFlKDxg==",
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/aws-crt/-/aws-crt-1.19.0.tgz",
+ "integrity": "sha512-pBRSpy4TsL/fxW7Lp1xpN1FhnxvtBXFYx3Njo/j/m8GSV3Ytq/mBetYq7vhDb7CJQmFJCWod9I0yShqjiSUuyQ==",
"hasInstallScript": true,
"dependencies": {
"@aws-sdk/util-utf8-browser": "^3.109.0",
- "@httptoolkit/websocket-stream": "^6.0.0",
- "axios": "^0.24.0",
+ "@httptoolkit/websocket-stream": "^6.0.1",
+ "axios": "^1.6.0",
"buffer": "^6.0.3",
- "crypto-js": "^4.0.0",
+ "crypto-js": "^4.2.0",
"mqtt": "^4.3.7",
"process": "^0.11.10"
}
},
"node_modules/axe-core": {
- "version": "4.8.2",
- "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz",
- "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz",
+ "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==",
"engines": {
"node": ">=4"
}
},
"node_modules/axios": {
- "version": "0.24.0",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
- "integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+ "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dependencies": {
- "follow-redirects": "^1.14.4"
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
}
},
"node_modules/axobject-query": {
@@ -7284,9 +6958,9 @@
"integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ=="
},
"node_modules/big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
"engines": {
"node": ">=0.6"
}
@@ -7344,19 +7018,6 @@
"ieee754": "^1.1.13"
}
},
- "node_modules/bl/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -7506,12 +7167,13 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -7569,9 +7231,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001549",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz",
- "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==",
+ "version": "1.0.30001564",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001564.tgz",
+ "integrity": "sha512-DqAOf+rhof+6GVx1y+xzbFPeOumfQnhYzVnZD6LAXijR77yPtm9mfOcqOnT3mpnJiZVT+kwLAFnRlZcIz+c6bg==",
"funding": [
{
"type": "opencollective",
@@ -7602,41 +7264,6 @@
"node": ">=6"
}
},
- "node_modules/canvas/node_modules/decompress-response": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
- "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
- "optional": true,
- "dependencies": {
- "mimic-response": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/canvas/node_modules/mimic-response": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
- "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
- "optional": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/canvas/node_modules/simple-get": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
- "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
- "optional": true,
- "dependencies": {
- "decompress-response": "^4.2.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
"node_modules/ccount": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
@@ -7761,11 +7388,6 @@
"url": "https://joebell.co.uk"
}
},
- "node_modules/classnames": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz",
- "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw=="
- },
"node_modules/cli-cursor": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz",
@@ -8279,19 +7901,6 @@
"typedarray": "^0.0.6"
}
},
- "node_modules/concat-stream/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/condense-newlines": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/condense-newlines/-/condense-newlines-0.2.1.tgz",
@@ -8493,9 +8102,9 @@
}
},
"node_modules/crypto-js": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz",
- "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz",
+ "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="
},
"node_modules/cssesc": {
"version": "3.0.0",
@@ -8511,7 +8120,8 @@
"node_modules/csstype": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
- "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ=="
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "devOptional": true
},
"node_modules/d3-array": {
"version": "3.2.4",
@@ -8645,6 +8255,22 @@
"node": ">= 12"
}
},
+ "node_modules/date-fns": {
+ "version": "2.30.0",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.21.0"
+ },
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -8713,17 +8339,15 @@
}
},
"node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
+ "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
+ "optional": true,
"dependencies": {
- "mimic-response": "^3.1.0"
+ "mimic-response": "^2.0.0"
},
"engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=8"
}
},
"node_modules/deep-extend": {
@@ -9055,6 +8679,38 @@
"readable-stream": "^2.0.2"
}
},
+ "node_modules/duplexer2/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/duplexer2/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexer2/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/duplexer2/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/duplexify": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
@@ -9066,11 +8722,42 @@
"stream-shift": "^1.0.0"
}
},
+ "node_modules/duplexify/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/duplexify/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/duplexify/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/duplexify/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/editorconfig": {
"version": "1.0.4",
@@ -9120,9 +8807,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.557",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.557.tgz",
- "integrity": "sha512-6x0zsxyMXpnMJnHrondrD3SuAeKcwij9S+83j2qHAQPXbGTDDfgImzzwgGlzrIcXbHQ42tkG4qA6U860cImNhw=="
+ "version": "1.4.593",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.593.tgz",
+ "integrity": "sha512-c7+Hhj87zWmdpmjDONbvNKNo24tvmD4mjal1+qqTYTrlF0/sNpAcDlU0Ki84ftA/5yj3BF2QhSGEC0Rky6larg=="
},
"node_modules/emoji-regex": {
"version": "9.2.2",
@@ -9169,25 +8856,25 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.2",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz",
- "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==",
+ "version": "1.22.3",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
+ "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
"dependencies": {
"array-buffer-byte-length": "^1.0.0",
"arraybuffer.prototype.slice": "^1.0.2",
"available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.5",
"es-set-tostringtag": "^2.0.1",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.1",
+ "get-intrinsic": "^1.2.2",
"get-symbol-description": "^1.0.0",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has": "^1.0.3",
"has-property-descriptors": "^1.0.0",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
+ "hasown": "^2.0.0",
"internal-slot": "^1.0.5",
"is-array-buffer": "^3.0.2",
"is-callable": "^1.2.7",
@@ -9197,7 +8884,7 @@
"is-string": "^1.0.7",
"is-typed-array": "^1.1.12",
"is-weakref": "^1.0.2",
- "object-inspect": "^1.12.3",
+ "object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
"object.assign": "^4.1.4",
"regexp.prototype.flags": "^1.5.1",
@@ -9211,7 +8898,7 @@
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.11"
+ "which-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -9242,24 +8929,24 @@
}
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
+ "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
"dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
+ "get-intrinsic": "^1.2.2",
+ "has-tostringtag": "^1.0.0",
+ "hasown": "^2.0.0"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
+ "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
}
},
"node_modules/es-to-primitive": {
@@ -9334,17 +9021,18 @@
}
},
"node_modules/eslint": {
- "version": "8.51.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz",
- "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==",
+ "version": "8.54.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.54.0.tgz",
+ "integrity": "sha512-NY0DfAkM8BIZDVl6PgSa1ttZbx3xHgJzSNJKYcQglem6CppHyMhRIQkBVSSMaSRnLhig3jsDbEzOjwCVt4AmmA==",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.2",
- "@eslint/js": "8.51.0",
- "@humanwhocodes/config-array": "^0.11.11",
+ "@eslint/eslintrc": "^2.1.3",
+ "@eslint/js": "8.54.0",
+ "@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
+ "@ungap/structured-clone": "^1.2.0",
"ajv": "^6.12.4",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -9397,7 +9085,129 @@
"eslint-plugin-react": "7.28.0"
}
},
- "node_modules/eslint-config-next": {
+ "node_modules/eslint-config-custom/node_modules/@next/eslint-plugin-next": {
+ "version": "12.3.4",
+ "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-12.3.4.tgz",
+ "integrity": "sha512-BFwj8ykJY+zc1/jWANsDprDIu2MgwPOIKxNVnrKvPs+f5TPegrVnem8uScND+1veT4B7F6VeqgaNLFW1Hzl9Og==",
+ "dev": true,
+ "dependencies": {
+ "glob": "7.1.7"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/@typescript-eslint/parser": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz",
+ "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/scope-manager": "5.62.0",
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/typescript-estree": "5.62.0",
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz",
+ "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/@typescript-eslint/types": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz",
+ "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz",
+ "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "@typescript-eslint/visitor-keys": "5.62.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.62.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz",
+ "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.62.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/eslint-config-next": {
"version": "12.3.4",
"resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-12.3.4.tgz",
"integrity": "sha512-WuT3gvgi7Bwz00AOmKGhOeqnyA5P29Cdyr0iVjLyfDbk+FANQKcOjFUTZIdyYfe5Tq1x4TGcmoe4CwctGvFjHQ==",
@@ -9423,19 +9233,7 @@
}
}
},
- "node_modules/eslint-config-next/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/eslint-config-next/node_modules/eslint-plugin-react": {
+ "node_modules/eslint-config-custom/node_modules/eslint-config-next/node_modules/eslint-plugin-react": {
"version": "7.33.2",
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
"integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
@@ -9465,7 +9263,7 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
- "node_modules/eslint-config-next/node_modules/resolve": {
+ "node_modules/eslint-config-custom/node_modules/eslint-config-next/node_modules/resolve": {
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
"integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
@@ -9482,7 +9280,7 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/eslint-config-next/node_modules/semver": {
+ "node_modules/eslint-config-custom/node_modules/eslint-config-next/node_modules/semver": {
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
@@ -9491,6 +9289,125 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/eslint-config-custom/node_modules/eslint-import-resolver-typescript": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
+ "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "glob": "^7.2.0",
+ "is-glob": "^4.0.3",
+ "resolve": "^1.22.0",
+ "tsconfig-paths": "^3.14.1"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "*",
+ "eslint-plugin-import": "*"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/eslint-import-resolver-typescript/node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/eslint-plugin-react": {
+ "version": "7.28.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
+ "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
+ "dev": true,
+ "dependencies": {
+ "array-includes": "^3.1.4",
+ "array.prototype.flatmap": "^1.2.5",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.3.0",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.0.4",
+ "object.entries": "^1.1.5",
+ "object.fromentries": "^2.0.5",
+ "object.hasown": "^1.1.0",
+ "object.values": "^1.1.5",
+ "prop-types": "^15.7.2",
+ "resolve": "^2.0.0-next.3",
+ "semver": "^6.3.0",
+ "string.prototype.matchall": "^4.0.6"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.5",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
+ "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.13.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/eslint-config-custom/node_modules/eslint-plugin-react/node_modules/semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/eslint-config-next": {
+ "version": "13.4.19",
+ "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz",
+ "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==",
+ "dependencies": {
+ "@next/eslint-plugin-next": "13.4.19",
+ "@rushstack/eslint-patch": "^1.1.3",
+ "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-import-resolver-typescript": "^3.5.2",
+ "eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-jsx-a11y": "^6.5.1",
+ "eslint-plugin-react": "^7.31.7",
+ "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
+ },
+ "peerDependencies": {
+ "eslint": "^7.23.0 || ^8.0.0",
+ "typescript": ">=3.3.1"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-config-prettier": {
"version": "8.10.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz",
@@ -9503,11 +9420,11 @@
}
},
"node_modules/eslint-config-turbo": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.15.tgz",
- "integrity": "sha512-76mpx2x818JZE26euen14utYcFDxOahZ9NaWA+6Xa4pY2ezVKVschuOxS96EQz3o3ZRSmcgBOapw/gHbN+EKxQ==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/eslint-config-turbo/-/eslint-config-turbo-1.10.16.tgz",
+ "integrity": "sha512-O3NQI72bQHV7FvSC6lWj66EGx8drJJjuT1kuInn6nbMLOHdMBhSUX/8uhTAlHRQdlxZk2j9HtgFCIzSc93w42g==",
"dependencies": {
- "eslint-plugin-turbo": "1.10.15"
+ "eslint-plugin-turbo": "1.10.16"
},
"peerDependencies": {
"eslint": ">6.6.0"
@@ -9532,45 +9449,29 @@
}
},
"node_modules/eslint-import-resolver-typescript": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.7.1.tgz",
- "integrity": "sha512-00UbgGwV8bSgUv34igBDbTOtKhqoRMy9bFjNehT40bXg6585PNIct8HhXZ0SybqB9rWtXj9crcku8ndDn/gIqQ==",
- "dev": true,
+ "version": "3.6.1",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
+ "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
"dependencies": {
"debug": "^4.3.4",
- "glob": "^7.2.0",
- "is-glob": "^4.0.3",
- "resolve": "^1.22.0",
- "tsconfig-paths": "^3.14.1"
+ "enhanced-resolve": "^5.12.0",
+ "eslint-module-utils": "^2.7.4",
+ "fast-glob": "^3.3.1",
+ "get-tsconfig": "^4.5.0",
+ "is-core-module": "^2.11.0",
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">=4"
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
},
"peerDependencies": {
"eslint": "*",
"eslint-plugin-import": "*"
}
},
- "node_modules/eslint-import-resolver-typescript/node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/eslint-module-utils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz",
@@ -9596,25 +9497,25 @@
}
},
"node_modules/eslint-plugin-import": {
- "version": "2.28.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz",
- "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==",
+ "version": "2.29.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz",
+ "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==",
"dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.findlastindex": "^1.2.2",
- "array.prototype.flat": "^1.3.1",
- "array.prototype.flatmap": "^1.3.1",
+ "array-includes": "^3.1.7",
+ "array.prototype.findlastindex": "^1.2.3",
+ "array.prototype.flat": "^1.3.2",
+ "array.prototype.flatmap": "^1.3.2",
"debug": "^3.2.7",
"doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.7",
+ "eslint-import-resolver-node": "^0.3.9",
"eslint-module-utils": "^2.8.0",
- "has": "^1.0.3",
- "is-core-module": "^2.13.0",
+ "hasown": "^2.0.0",
+ "is-core-module": "^2.13.1",
"is-glob": "^4.0.3",
"minimatch": "^3.1.2",
- "object.fromentries": "^2.0.6",
- "object.groupby": "^1.0.0",
- "object.values": "^1.1.6",
+ "object.fromentries": "^2.0.7",
+ "object.groupby": "^1.0.1",
+ "object.values": "^1.1.7",
"semver": "^6.3.1",
"tsconfig-paths": "^3.14.2"
},
@@ -9653,26 +9554,26 @@
}
},
"node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz",
- "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==",
+ "version": "6.8.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz",
+ "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==",
"dependencies": {
- "@babel/runtime": "^7.20.7",
- "aria-query": "^5.1.3",
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "ast-types-flow": "^0.0.7",
- "axe-core": "^4.6.2",
- "axobject-query": "^3.1.1",
+ "@babel/runtime": "^7.23.2",
+ "aria-query": "^5.3.0",
+ "array-includes": "^3.1.7",
+ "array.prototype.flatmap": "^1.3.2",
+ "ast-types-flow": "^0.0.8",
+ "axe-core": "=4.7.0",
+ "axobject-query": "^3.2.1",
"damerau-levenshtein": "^1.0.8",
"emoji-regex": "^9.2.2",
- "has": "^1.0.3",
- "jsx-ast-utils": "^3.3.3",
- "language-tags": "=1.0.5",
+ "es-iterator-helpers": "^1.0.15",
+ "hasown": "^2.0.0",
+ "jsx-ast-utils": "^3.3.5",
+ "language-tags": "^1.0.9",
"minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "semver": "^6.3.0"
+ "object.entries": "^1.1.7",
+ "object.fromentries": "^2.0.7"
},
"engines": {
"node": ">=4.0"
@@ -9681,14 +9582,6 @@
"eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
}
},
- "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
"node_modules/eslint-plugin-package-json": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/eslint-plugin-package-json/-/eslint-plugin-package-json-0.1.5.tgz",
@@ -9726,25 +9619,26 @@
}
},
"node_modules/eslint-plugin-react": {
- "version": "7.28.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz",
- "integrity": "sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==",
- "dev": true,
+ "version": "7.33.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
+ "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
"dependencies": {
- "array-includes": "^3.1.4",
- "array.prototype.flatmap": "^1.2.5",
+ "array-includes": "^3.1.6",
+ "array.prototype.flatmap": "^1.3.1",
+ "array.prototype.tosorted": "^1.1.1",
"doctrine": "^2.1.0",
+ "es-iterator-helpers": "^1.0.12",
"estraverse": "^5.3.0",
"jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.0.4",
- "object.entries": "^1.1.5",
- "object.fromentries": "^2.0.5",
- "object.hasown": "^1.1.0",
- "object.values": "^1.1.5",
- "prop-types": "^15.7.2",
- "resolve": "^2.0.0-next.3",
- "semver": "^6.3.0",
- "string.prototype.matchall": "^4.0.6"
+ "minimatch": "^3.1.2",
+ "object.entries": "^1.1.6",
+ "object.fromentries": "^2.0.6",
+ "object.hasown": "^1.1.2",
+ "object.values": "^1.1.6",
+ "prop-types": "^15.8.1",
+ "resolve": "^2.0.0-next.4",
+ "semver": "^6.3.1",
+ "string.prototype.matchall": "^4.0.8"
},
"engines": {
"node": ">=4"
@@ -9768,7 +9662,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
"integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dev": true,
"dependencies": {
"esutils": "^2.0.2"
},
@@ -9780,7 +9673,6 @@
"version": "2.0.0-next.5",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
"integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dev": true,
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -9797,15 +9689,14 @@
"version": "6.3.1",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
"bin": {
"semver": "bin/semver.js"
}
},
"node_modules/eslint-plugin-turbo": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.15.tgz",
- "integrity": "sha512-Tv4QSKV/U56qGcTqS/UgOvb9HcKFmWOQcVh3HEaj7of94lfaENgfrtK48E2CckQf7amhKs1i+imhCsNCKjkQyA==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-turbo/-/eslint-plugin-turbo-1.10.16.tgz",
+ "integrity": "sha512-ZjrR88MTN64PNGufSEcM0tf+V1xFYVbeiMeuIqr0aiABGomxFLo4DBkQ7WI4WzkZtWQSIA2sP+yxqSboEfL9MQ==",
"dependencies": {
"dotenv": "16.0.3"
},
@@ -9821,6 +9712,26 @@
"node": ">=12"
}
},
+ "node_modules/eslint-plugin-unused-imports": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz",
+ "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==",
+ "dependencies": {
+ "eslint-rule-composer": "^0.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
+ "eslint": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@typescript-eslint/eslint-plugin": {
+ "optional": true
+ }
+ }
+ },
"node_modules/eslint-rule-composer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
@@ -10146,9 +10057,9 @@
}
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -10292,16 +10203,16 @@
}
},
"node_modules/flat-cache": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz",
- "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.3",
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flat-cache/node_modules/rimraf": {
@@ -10354,7 +10265,6 @@
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
"integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
- "dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -10370,7 +10280,6 @@
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "dev": true,
"engines": {
"node": ">=14"
},
@@ -10437,9 +10346,9 @@
}
},
"node_modules/framer-motion": {
- "version": "10.16.4",
- "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.4.tgz",
- "integrity": "sha512-p9V9nGomS3m6/CALXqv6nFGMuFOxbWsmaOrdmhyQimMIlLl3LC7h7l86wge/Js/8cRu5ktutS/zlzgR7eBOtFA==",
+ "version": "10.16.5",
+ "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-10.16.5.tgz",
+ "integrity": "sha512-GEzVjOYP2MIpV9bT/GbhcsBNoImG3/2X3O/xVNWmktkv9MdJ7P/44zELm/7Fjb+O3v39SmKFnoDQB32giThzpg==",
"dependencies": {
"tslib": "^2.4.0"
},
@@ -10650,14 +10559,14 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -10912,14 +10821,6 @@
"node": ">=6"
}
},
- "node_modules/has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/has-bigints": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz",
@@ -10945,11 +10846,11 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "get-intrinsic": "^1.2.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -10997,9 +10898,20 @@
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
},
"node_modules/hash-wasm": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.10.0.tgz",
- "integrity": "sha512-a0NjBNWjavvMalm/pPSEJ00MPDjRG8rv9D5BK7dBQTLGwAOVWqnTEUggaYs5szATB5UK5ULeIQr7QJXbczAZYA=="
+ "version": "4.11.0",
+ "resolved": "https://registry.npmjs.org/hash-wasm/-/hash-wasm-4.11.0.tgz",
+ "integrity": "sha512-HVusNXlVqHe0fzIzdQOGolnFN6mX/fqcrSAOcTBXdvzrXVHwTz11vXeKRmkR5gTuwVpvHZEIyKoePDvuAR+XwQ=="
+ },
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
"node_modules/hast-util-from-parse5": {
"version": "7.1.2",
@@ -11152,19 +11064,6 @@
"readable-stream": "^3.6.0"
}
},
- "node_modules/help-me/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/hexoid": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz",
@@ -11186,21 +11085,39 @@
}
},
"node_modules/html-dom-parser": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-3.1.3.tgz",
- "integrity": "sha512-fI0yyNlIeSboxU+jnrA4v8qj4+M8SI9/q6AKYdwCY2qki22UtKCDTxvagHniECu7sa5/o2zFRdLleA67035lsA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-dom-parser/-/html-dom-parser-4.0.0.tgz",
+ "integrity": "sha512-TUa3wIwi80f5NF8CVWzkopBVqVAtlawUzJoLwVLHns0XSJGynss4jiY0mTWpiDOsuyw+afP+ujjMgRh9CoZcXw==",
"dependencies": {
"domhandler": "5.0.3",
- "htmlparser2": "8.0.1"
+ "htmlparser2": "9.0.0"
+ }
+ },
+ "node_modules/html-dom-parser/node_modules/htmlparser2": {
+ "version": "9.0.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.0.0.tgz",
+ "integrity": "sha512-uxbSI98wmFT/G4P2zXx4OVx04qWUmyFPrD2/CNepa2Zo3GPNaCaaxElDgwUrwYWkK1nr9fft0Ya8dws8coDLLQ==",
+ "funding": [
+ "https://github.com/fb55/htmlparser2?sponsor=1",
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/fb55"
+ }
+ ],
+ "dependencies": {
+ "domelementtype": "^2.3.0",
+ "domhandler": "^5.0.3",
+ "domutils": "^3.1.0",
+ "entities": "^4.5.0"
}
},
"node_modules/html-react-parser": {
- "version": "3.0.9",
- "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-3.0.9.tgz",
- "integrity": "sha512-gOPZmaCMXNYu7Y9+58k2tLhTMXQ+QN8ctNFijzLuBxJaLZ6TsN+tUpN+MhbI+6nGaBCRGT2rpw6y/AqkTFZckg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/html-react-parser/-/html-react-parser-4.0.0.tgz",
+ "integrity": "sha512-OzlOavs9lLyBxoRiXbXfODIX/nSShukMtdx3+WSMjon/FF1gJZRq0rBELoR5OswfbN56C0oKpAii7i3yzO/uVQ==",
"dependencies": {
"domhandler": "5.0.3",
- "html-dom-parser": "3.1.3",
+ "html-dom-parser": "4.0.0",
"react-property": "2.0.0",
"style-to-js": "1.1.3"
},
@@ -11209,15 +11126,15 @@
}
},
"node_modules/html-to-text": {
- "version": "9.0.3",
- "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.3.tgz",
- "integrity": "sha512-hxDF1kVCF2uw4VUJ3vr2doc91pXf2D5ngKcNviSitNkhP9OMOaJkDrFIFL6RMvko7NisWTEiqGpQ9LAxcVok1w==",
+ "version": "9.0.5",
+ "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz",
+ "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==",
"dependencies": {
- "@selderee/plugin-htmlparser2": "^0.10.0",
- "deepmerge": "^4.2.2",
+ "@selderee/plugin-htmlparser2": "^0.11.0",
+ "deepmerge": "^4.3.1",
"dom-serializer": "^2.0.0",
- "htmlparser2": "^8.0.1",
- "selderee": "^0.10.0"
+ "htmlparser2": "^8.0.2",
+ "selderee": "^0.11.0"
},
"engines": {
"node": ">=14"
@@ -11233,9 +11150,9 @@
}
},
"node_modules/htmlparser2": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz",
- "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==",
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz",
+ "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==",
"funding": [
"https://github.com/fb55/htmlparser2?sponsor=1",
{
@@ -11245,9 +11162,9 @@
],
"dependencies": {
"domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
+ "domhandler": "^5.0.3",
"domutils": "^3.0.1",
- "entities": "^4.3.0"
+ "entities": "^4.4.0"
}
},
"node_modules/http-errors": {
@@ -11331,28 +11248,21 @@
]
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"engines": {
"node": ">= 4"
}
},
"node_modules/imagescript": {
- "version": "1.2.16",
- "resolved": "https://registry.npmjs.org/imagescript/-/imagescript-1.2.16.tgz",
- "integrity": "sha512-hhy8OVNymU+cYYj8IwCbdNlXJRoMr4HRd7+efkH32eBVfybVU/5SbzDYf3ZSiiF9ye/ghfBrI/ujec/nwl+fOQ==",
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/imagescript/-/imagescript-1.2.17.tgz",
+ "integrity": "sha512-gUibUVTqbd2AeakephgVshjTL9zqh7k4Ea9yk9z8O9jjn11qU3vQWbMRDWGVzQl1t/cLeHYjclefjx8HblXo9Q==",
"engines": {
"node": ">=14.0.0"
}
},
- "node_modules/immutable": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
- "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
- "optional": true,
- "peer": true
- },
"node_modules/import-fresh": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
@@ -11426,12 +11336,12 @@
"integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q=="
},
"node_modules/internal-slot": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
- "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
+ "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
"dependencies": {
- "get-intrinsic": "^1.2.0",
- "has": "^1.0.3",
+ "get-intrinsic": "^1.2.2",
+ "hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
"engines": {
@@ -11587,11 +11497,11 @@
}
},
"node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "version": "2.13.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
+ "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -11926,9 +11836,9 @@
}
},
"node_modules/is-what": {
- "version": "4.1.15",
- "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.15.tgz",
- "integrity": "sha512-uKua1wfy3Yt+YqsD6mTUEa2zSi3G1oPlqTflgaPJ7z63vUGN5pxFpnQfeSLMFnJDEsdvOtkp1rUWkYjB4YfhgA==",
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
"engines": {
"node": ">=12.13"
},
@@ -11945,43 +11855,15 @@
}
},
"node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
},
- "node_modules/isomorphic-fetch": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz",
- "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==",
- "dependencies": {
- "node-fetch": "^2.6.1",
- "whatwg-fetch": "^3.4.1"
- }
- },
- "node_modules/isomorphic-fetch/node_modules/node-fetch": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
- "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
"node_modules/isomorphic-ws": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz",
@@ -12006,7 +11888,6 @@
"version": "2.3.6",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
"integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
- "dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -12026,9 +11907,9 @@
"integrity": "sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw=="
},
"node_modules/jiti": {
- "version": "1.20.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz",
- "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
"bin": {
"jiti": "bin/jiti.js"
}
@@ -12068,14 +11949,14 @@
}
},
"node_modules/js-beautify": {
- "version": "1.14.9",
- "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.9.tgz",
- "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==",
+ "version": "1.14.11",
+ "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.11.tgz",
+ "integrity": "sha512-rPogWqAfoYh1Ryqqh2agUpVfbxAhbjuN1SmU86dskQUKouRiggUTCO4+2ym9UPXllc2WAp0J+T5qxn7Um3lCdw==",
"dependencies": {
"config-chain": "^1.1.13",
"editorconfig": "^1.0.3",
- "glob": "^8.1.0",
- "nopt": "^6.0.0"
+ "glob": "^10.3.3",
+ "nopt": "^7.2.0"
},
"bin": {
"css-beautify": "js/bin/css-beautify.js",
@@ -12083,7 +11964,15 @@
"js-beautify": "js/bin/js-beautify.js"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
+ }
+ },
+ "node_modules/js-beautify/node_modules/abbrev": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz",
+ "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==",
+ "engines": {
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/js-beautify/node_modules/brace-expansion": {
@@ -12095,46 +11984,52 @@
}
},
"node_modules/js-beautify/node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": ">=12"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/js-beautify/node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/js-beautify/node_modules/nopt": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz",
- "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz",
+ "integrity": "sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==",
"dependencies": {
- "abbrev": "^1.0.0"
+ "abbrev": "^2.0.0"
},
"bin": {
"nopt": "bin/nopt.js"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
"node_modules/js-sdsl": {
@@ -12290,11 +12185,14 @@
"integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w=="
},
"node_modules/language-tags": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
- "integrity": "sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==",
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz",
+ "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==",
"dependencies": {
- "language-subtag-registry": "~0.3.2"
+ "language-subtag-registry": "^0.3.20"
+ },
+ "engines": {
+ "node": ">=0.10"
}
},
"node_modules/lazy-ass": {
@@ -12746,17 +12644,17 @@
}
},
"node_modules/luxon": {
- "version": "3.4.3",
- "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz",
- "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==",
+ "version": "3.4.4",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.4.tgz",
+ "integrity": "sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==",
"engines": {
"node": ">=12"
}
},
"node_modules/make-cancellable-promise": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.1.tgz",
- "integrity": "sha512-DWOzWdO3xhY5ESjVR+wVFy03rpt0ZccS4bunccNwngoX6rllKlMZm6S9ZnJ5nMuDDweqDMjtaO0g6tZeh+cCUA==",
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz",
+ "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==",
"funding": {
"url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1"
}
@@ -12790,9 +12688,9 @@
"devOptional": true
},
"node_modules/make-event-props": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.1.tgz",
- "integrity": "sha512-JhvWq/iz1BvlmnPvLJjXv+xnMPJZuychrDC68V+yCGQJn5chcA8rLGKo5EP1XwIKVrigSXKLmbeXAGkf36wdCQ==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz",
+ "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==",
"funding": {
"url": "https://github.com/wojtekmaj/make-event-props?sponsor=1"
}
@@ -13079,14 +12977,19 @@
}
},
"node_modules/merge-refs": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.1.tgz",
- "integrity": "sha512-pRPz39HQz2xzHdXAGvtJ9S8aEpNgpUjzb5yPC3ytozodmsHg+9nqgRs7/YOmn9fM/TLzntAC8AdGTidKxOq9TQ==",
- "dependencies": {
- "@types/react": "*"
- },
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.2.2.tgz",
+ "integrity": "sha512-RwcT7GsQR3KbuLw1rRuodq4Nt547BKEBkliZ0qqsrpyNne9bGTFtsFIsIpx82huWhcl3kOlOlH4H0xkPk/DqVw==",
"funding": {
"url": "https://github.com/wojtekmaj/merge-refs?sponsor=1"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/merge-stream": {
@@ -13741,11 +13644,12 @@
}
},
"node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
+ "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
+ "optional": true,
"engines": {
- "node": ">=10"
+ "node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -13898,19 +13802,6 @@
"stream-shift": "^1.0.0"
}
},
- "node_modules/mqtt/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/mqtt/node_modules/ws": {
"version": "7.5.9",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz",
@@ -13961,9 +13852,9 @@
"optional": true
},
"node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"funding": [
{
"type": "github",
@@ -14014,11 +13905,11 @@
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="
},
"node_modules/next": {
- "version": "14.0.0",
- "resolved": "https://registry.npmjs.org/next/-/next-14.0.0.tgz",
- "integrity": "sha512-J0jHKBJpB9zd4+c153sair0sz44mbaCHxggs8ryVXSFBuBqJ8XdE9/ozoV85xGh2VnSjahwntBZZgsihL9QznA==",
+ "version": "14.0.3",
+ "resolved": "https://registry.npmjs.org/next/-/next-14.0.3.tgz",
+ "integrity": "sha512-AbYdRNfImBr3XGtvnwOxq8ekVCwbFTv/UJoLwmaX89nk9i051AEY4/HAWzU0YpaTDw8IofUpmuIlvzWF13jxIw==",
"dependencies": {
- "@next/env": "14.0.0",
+ "@next/env": "14.0.3",
"@swc/helpers": "0.5.2",
"busboy": "1.6.0",
"caniuse-lite": "^1.0.30001406",
@@ -14033,15 +13924,15 @@
"node": ">=18.17.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "14.0.0",
- "@next/swc-darwin-x64": "14.0.0",
- "@next/swc-linux-arm64-gnu": "14.0.0",
- "@next/swc-linux-arm64-musl": "14.0.0",
- "@next/swc-linux-x64-gnu": "14.0.0",
- "@next/swc-linux-x64-musl": "14.0.0",
- "@next/swc-win32-arm64-msvc": "14.0.0",
- "@next/swc-win32-ia32-msvc": "14.0.0",
- "@next/swc-win32-x64-msvc": "14.0.0"
+ "@next/swc-darwin-arm64": "14.0.3",
+ "@next/swc-darwin-x64": "14.0.3",
+ "@next/swc-linux-arm64-gnu": "14.0.3",
+ "@next/swc-linux-arm64-musl": "14.0.3",
+ "@next/swc-linux-x64-gnu": "14.0.3",
+ "@next/swc-linux-x64-musl": "14.0.3",
+ "@next/swc-win32-arm64-msvc": "14.0.3",
+ "@next/swc-win32-ia32-msvc": "14.0.3",
+ "@next/swc-win32-x64-msvc": "14.0.3"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -14059,9 +13950,9 @@
}
},
"node_modules/next-auth": {
- "version": "4.24.3",
- "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.3.tgz",
- "integrity": "sha512-n1EvmY7MwQMSOkCh6jhI6uBneB6VVtkYELVMEwVaCLD1mBD3IAAucwk+90kgxramW09nSp5drvynwfNCi1JjaQ==",
+ "version": "4.24.5",
+ "resolved": "https://registry.npmjs.org/next-auth/-/next-auth-4.24.5.tgz",
+ "integrity": "sha512-3RafV3XbfIKk6rF6GlLE4/KxjTcuMCifqrmD+98ejFq73SRoj2rmzoca8u764977lH/Q7jo6Xu6yM+Re1Mz/Og==",
"dependencies": {
"@babel/runtime": "^7.20.13",
"@panva/hkdf": "^1.0.2",
@@ -14074,7 +13965,7 @@
"uuid": "^8.3.2"
},
"peerDependencies": {
- "next": "^12.2.5 || ^13",
+ "next": "^12.2.5 || ^13 || ^14",
"nodemailer": "^6.6.5",
"react": "^17.0.2 || ^18",
"react-dom": "^17.0.2 || ^18"
@@ -14101,14 +13992,14 @@
}
},
"node_modules/next-plausible": {
- "version": "3.11.2",
- "resolved": "https://registry.npmjs.org/next-plausible/-/next-plausible-3.11.2.tgz",
- "integrity": "sha512-T/5RPVYFRk4HODvcnpMPk6pe4HYHQHSwJFGUbAdyKIJWgs4jl3oq3S16D6xKSKP3AEjIwQe4YsotQrDN2ILbjA==",
+ "version": "3.11.3",
+ "resolved": "https://registry.npmjs.org/next-plausible/-/next-plausible-3.11.3.tgz",
+ "integrity": "sha512-2dpG58ryxdsr4ZI8whWQpGv0T6foRDPGiehcICpDhYfmMJmluewswQgfDA8Z37RFMXAY+6SHOPS7Xi+9ewNi2Q==",
"funding": {
"url": "https://github.com/4lejandrito/next-plausible?sponsor=1"
},
"peerDependencies": {
- "next": "^11.1.0 || ^12.0.0 || ^13.0.0",
+ "next": "^11.1.0 || ^12.0.0 || ^13.0.0 || ^14.0.0",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
@@ -14220,9 +14111,9 @@
}
},
"node_modules/nodemailer": {
- "version": "6.9.6",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.6.tgz",
- "integrity": "sha512-s7pDtWwe5fLMkQUhw8TkWB/wnZ7SRdd9HRZslq/s24hlZvBP3j32N/ETLmnqTpmj4xoBZL9fOWyCIZ7r2HORHg==",
+ "version": "6.9.7",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz",
+ "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==",
"engines": {
"node": ">=6.0.0"
}
@@ -14325,9 +14216,9 @@
}
},
"node_modules/object-inspect": {
- "version": "1.13.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.0.tgz",
- "integrity": "sha512-HQ4J+ic8hKrgIt3mqk6cVOVrW2ozL4KdvHlqpBv9vDYWx9ysAgENAdvy4FoGF+KFdhR7nQTNm5J0ctAeOwn+3g==",
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -14456,9 +14347,9 @@
}
},
"node_modules/oo-ascii-tree": {
- "version": "1.90.0",
- "resolved": "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.90.0.tgz",
- "integrity": "sha512-LixRPYQJtgVfMi9gsUPB/zxrna4DqSe+M+iRGQBAq150BiPD33nWXOj/Je7uauGsOf+NkvRjZiD1P6yW/j8hsQ==",
+ "version": "1.92.0",
+ "resolved": "https://registry.npmjs.org/oo-ascii-tree/-/oo-ascii-tree-1.92.0.tgz",
+ "integrity": "sha512-rLSPbnakn5Wb3dOIVtrmn8jfHKqWv7bROpyBiw6DExq+dOG7qC49EIs89hBhyHkvLolX0oC+0a/RMPAyHEZ+1w==",
"engines": {
"node": ">= 14.17.0"
}
@@ -14552,6 +14443,15 @@
"node": ">=8"
}
},
+ "node_modules/oslo": {
+ "version": "0.17.0",
+ "resolved": "https://registry.npmjs.org/oslo/-/oslo-0.17.0.tgz",
+ "integrity": "sha512-UJHew6zFEkJYGWjO4/ARHnX+M7umhJ6IXc6cJA2AQ3BpFwqEqaKjySOfXYuNFQddzfP2zk1aG+xYQG1ODHKwfQ==",
+ "dependencies": {
+ "@node-rs/argon2": "^1.5.2",
+ "@node-rs/bcrypt": "^1.7.3"
+ }
+ },
"node_modules/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -14657,12 +14557,12 @@
"integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw=="
},
"node_modules/parseley": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.11.0.tgz",
- "integrity": "sha512-VfcwXlBWgTF+unPcr7yu3HSSA6QUdDaDnrHcytVfj5Z8azAyKBDrYnSIfeSxlrEayndNcLmrXzg+Vxbo6DWRXQ==",
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz",
+ "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==",
"dependencies": {
"leac": "^0.6.0",
- "peberminta": "^0.8.0"
+ "peberminta": "^0.9.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
@@ -14710,7 +14610,6 @@
"version": "1.10.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
"integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
- "dev": true,
"dependencies": {
"lru-cache": "^9.1.1 || ^10.0.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -14723,10 +14622,9 @@
}
},
"node_modules/path-scurry/node_modules/lru-cache": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz",
- "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==",
- "dev": true,
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
"engines": {
"node": "14 || >=16.14"
}
@@ -14771,10 +14669,25 @@
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="
},
+ "node_modules/pdfjs-dist": {
+ "version": "3.6.172",
+ "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.6.172.tgz",
+ "integrity": "sha512-bfOhCg+S9DXh/ImWhWYTOiq3aVMFSCvzGiBzsIJtdMC71kVWDBw7UXr32xh0y56qc5wMVylIeqV3hBaRsu+e+w==",
+ "dependencies": {
+ "path2d-polyfill": "^2.0.1",
+ "web-streams-polyfill": "^3.2.1"
+ },
+ "engines": {
+ "node": ">=16"
+ },
+ "optionalDependencies": {
+ "canvas": "^2.11.2"
+ }
+ },
"node_modules/peberminta": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.8.0.tgz",
- "integrity": "sha512-YYEs+eauIjDH5nUEGi18EohWE0nV2QbGTqmxQcqgZ/0g+laPCQmuIqq7EBLVi9uim9zMgfJv0QBZEnQ3uHw/Tw==",
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz",
+ "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==",
"funding": {
"url": "https://ko-fi.com/killymxi"
}
@@ -14823,11 +14736,11 @@
}
},
"node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"engines": {
- "node": ">=6"
+ "node": ">=0.10.0"
}
},
"node_modules/pirates": {
@@ -14839,12 +14752,12 @@
}
},
"node_modules/playwright": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz",
- "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.0.tgz",
+ "integrity": "sha512-gyHAgQjiDf1m34Xpwzaqb76KgfzYrhK7iih+2IzcOCoZWr/8ZqmdBw+t0RU85ZmfJMgtgAiNtBQ/KS2325INXw==",
"dev": true,
"dependencies": {
- "playwright-core": "1.39.0"
+ "playwright-core": "1.40.0"
},
"bin": {
"playwright": "cli.js"
@@ -14857,9 +14770,9 @@
}
},
"node_modules/playwright-core": {
- "version": "1.39.0",
- "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz",
- "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==",
+ "version": "1.40.0",
+ "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.0.tgz",
+ "integrity": "sha512-fvKewVJpGeca8t0ipM56jkVSU6Eo0RmFvQ/MaCQNDYm+sdvKkMBBWTE1FdeMqIdumRaXXjZChWHvIzCGM/tA/Q==",
"dev": true,
"bin": {
"playwright-core": "cli.js"
@@ -14909,27 +14822,6 @@
"node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-css-variables": {
- "version": "0.18.0",
- "resolved": "https://registry.npmjs.org/postcss-css-variables/-/postcss-css-variables-0.18.0.tgz",
- "integrity": "sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "escape-string-regexp": "^1.0.3",
- "extend": "^3.0.1"
- },
- "peerDependencies": {
- "postcss": "^8.2.6"
- }
- },
- "node_modules/postcss-css-variables/node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "engines": {
- "node": ">=0.8.0"
- }
- },
"node_modules/postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
@@ -14965,20 +14857,26 @@
}
},
"node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"engines": {
"node": ">= 14"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
@@ -14992,6 +14890,14 @@
}
}
},
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/postcss-nested": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
@@ -15041,38 +14947,29 @@
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
"node_modules/posthog-js": {
- "version": "1.83.3",
- "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.83.3.tgz",
- "integrity": "sha512-8MQbt0zyLAW3DfAiz9QQz5m849Xsnp/uRJHxYeC7lOBmG9Yp4KLpXGKj9cdZl0jdinWohPQHsX7iG7U5jBpPAQ==",
+ "version": "1.93.2",
+ "resolved": "https://registry.npmjs.org/posthog-js/-/posthog-js-1.93.2.tgz",
+ "integrity": "sha512-0e2kqlb4kB1/Q9poLFlMF+SUrW+DCzNBHTJuUKl177euE4LChkJipSjy2vpq98qtJ2K3Hxw7ylHf2C+dZCx4RA==",
"dependencies": {
"fflate": "^0.4.1"
}
},
"node_modules/posthog-node": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-3.1.2.tgz",
- "integrity": "sha512-atPGYjiK+QvtseKKsrUxMrzN84sIVs9jTa7nx5hl999gJly1S3J5r0DApwZ69NKfJkVIeLTCJyT0kyS+7WqDSw==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/posthog-node/-/posthog-node-3.1.3.tgz",
+ "integrity": "sha512-UaOOoWEUYTcaaDe1w0fgHW/sXvFr3RO0l7yI7RUDzkZNZCfwXNO9r3pc14d1EtNppF/SHBrV5hNiZZATpf/vUw==",
"dependencies": {
- "axios": "^0.27.0",
+ "axios": "^1.6.0",
"rusha": "^0.8.14"
},
"engines": {
"node": ">=15.0.0"
}
},
- "node_modules/posthog-node/node_modules/axios": {
- "version": "0.27.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
- "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
- "dependencies": {
- "follow-redirects": "^1.14.9",
- "form-data": "^4.0.0"
- }
- },
"node_modules/preact": {
- "version": "10.18.1",
- "resolved": "https://registry.npmjs.org/preact/-/preact-10.18.1.tgz",
- "integrity": "sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==",
+ "version": "10.19.2",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.19.2.tgz",
+ "integrity": "sha512-UA9DX/OJwv6YwP9Vn7Ti/vF80XL+YA5H2l7BpCtUr3ya8LWHFzpiO5R+N7dN16ujpIxhekRFuOOF82bXX7K/lg==",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/preact"
@@ -15119,17 +15016,53 @@
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
},
- "node_modules/prebuild-install/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "node_modules/prebuild-install/node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
+ "mimic-response": "^3.1.0"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/prebuild-install/node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
}
},
"node_modules/prebuild-install/node_modules/tar-fs": {
@@ -15347,9 +15280,9 @@
}
},
"node_modules/property-information": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.3.0.tgz",
- "integrity": "sha512-gVNZ74nqhRMiIUYWGQdosYetaKc83x8oT41a0LlV3AAFCAZwCpg4vmGkq8t34+cUhp3cnM4XDiU/7xlgK7HGrg==",
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.4.0.tgz",
+ "integrity": "sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==",
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -15383,6 +15316,11 @@
"node": ">=12.0.0"
}
},
+ "node_modules/proxy-from-env": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+ },
"node_modules/ps-tree": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
@@ -15407,9 +15345,9 @@
}
},
"node_modules/punycode": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
- "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
+ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
"engines": {
"node": ">=6"
}
@@ -15552,9 +15490,9 @@
}
},
"node_modules/react-day-picker": {
- "version": "8.9.0",
- "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.9.0.tgz",
- "integrity": "sha512-XgoUgexp5KUy03lGsBDRkV+YQy73qJOLNPojeKe0dDNamrCM75PSBhMBkYVjgMSDy12LGWlbThSRK8p0kozAOA==",
+ "version": "8.9.1",
+ "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.9.1.tgz",
+ "integrity": "sha512-W0SPApKIsYq+XCtfGeMYDoU0KbsG3wfkYtlw8l+vZp6KoBXGOlhzBUp4tNx1XiwiOZwhfdGOlj7NGSCKGSlg5Q==",
"funding": {
"type": "individual",
"url": "https://github.com/sponsors/gpbl"
@@ -15642,51 +15580,6 @@
"commander": "9.4.x"
}
},
- "node_modules/react-email/node_modules/@esbuild/android-arm": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.4.tgz",
- "integrity": "sha512-rZzb7r22m20S1S7ufIc6DC6W659yxoOrl7sKP1nCYhuvUlnCFHVSbATG4keGUtV8rDz11sRRDbWkvQZpzPaHiw==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/android-arm64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.4.tgz",
- "integrity": "sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/android-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.4.tgz",
- "integrity": "sha512-MW+B2O++BkcOfMWmuHXB15/l1i7wXhJFqbJhp82IBOais8RBEQv2vQz/jHrDEHaY2X0QY7Wfw86SBL2PbVOr0g==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/react-email/node_modules/@esbuild/darwin-arm64": {
"version": "0.16.4",
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.4.tgz",
@@ -15702,276 +15595,6 @@
"node": ">=12"
}
},
- "node_modules/react-email/node_modules/@esbuild/darwin-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.4.tgz",
- "integrity": "sha512-e3doCr6Ecfwd7VzlaQqEPrnbvvPjE9uoTpxG5pyLzr2rI2NMjDHmvY1E5EO81O/e9TUOLLkXA5m6T8lfjK9yAA==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/freebsd-arm64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.4.tgz",
- "integrity": "sha512-Oup3G/QxBgvvqnXWrBed7xxkFNwAwJVHZcklWyQt7YCAL5bfUkaa6FVWnR78rNQiM8MqqLiT6ZTZSdUFuVIg1w==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/freebsd-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.4.tgz",
- "integrity": "sha512-vAP+eYOxlN/Bpo/TZmzEQapNS8W1njECrqkTpNgvXskkkJC2AwOXwZWai/Kc2vEFZUXQttx6UJbj9grqjD/+9Q==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-arm": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.4.tgz",
- "integrity": "sha512-A47ZmtpIPyERxkSvIv+zLd6kNIOtJH03XA0Hy7jaceRDdQaQVGSDt4mZqpWqJYgDk9rg96aglbF6kCRvPGDSUA==",
- "cpu": [
- "arm"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-arm64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.4.tgz",
- "integrity": "sha512-2zXoBhv4r5pZiyjBKrOdFP4CXOChxXiYD50LRUU+65DkdS5niPFHbboKZd/c81l0ezpw7AQnHeoCy5hFrzzs4g==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-ia32": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.4.tgz",
- "integrity": "sha512-uxdSrpe9wFhz4yBwt2kl2TxS/NWEINYBUFIxQtaEVtglm1eECvsj1vEKI0KX2k2wCe17zDdQ3v+jVxfwVfvvjw==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-loong64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.4.tgz",
- "integrity": "sha512-peDrrUuxbZ9Jw+DwLCh/9xmZAk0p0K1iY5d2IcwmnN+B87xw7kujOkig6ZRcZqgrXgeRGurRHn0ENMAjjD5DEg==",
- "cpu": [
- "loong64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-mips64el": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.4.tgz",
- "integrity": "sha512-sD9EEUoGtVhFjjsauWjflZklTNr57KdQ6xfloO4yH1u7vNQlOfAlhEzbyBKfgbJlW7rwXYBdl5/NcZ+Mg2XhQA==",
- "cpu": [
- "mips64el"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-ppc64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.4.tgz",
- "integrity": "sha512-X1HSqHUX9D+d0l6/nIh4ZZJ94eQky8d8z6yxAptpZE3FxCWYWvTDd9X9ST84MGZEJx04VYUD/AGgciddwO0b8g==",
- "cpu": [
- "ppc64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-riscv64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.4.tgz",
- "integrity": "sha512-97ANpzyNp0GTXCt6SRdIx1ngwncpkV/z453ZuxbnBROCJ5p/55UjhbaG23UdHj88fGWLKPFtMoU4CBacz4j9FA==",
- "cpu": [
- "riscv64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-s390x": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.4.tgz",
- "integrity": "sha512-pUvPQLPmbEeJRPjP0DYTC1vjHyhrnCklQmCGYbipkep+oyfTn7GTBJXoPodR7ZS5upmEyc8lzAkn2o29wD786A==",
- "cpu": [
- "s390x"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/linux-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.4.tgz",
- "integrity": "sha512-N55Q0mJs3Sl8+utPRPBrL6NLYZKBCLLx0bme/+RbjvMforTGGzFvsRl4xLTZMUBFC1poDzBEPTEu5nxizQ9Nlw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/netbsd-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.4.tgz",
- "integrity": "sha512-LHSJLit8jCObEQNYkgsDYBh2JrJT53oJO2HVdkSYLa6+zuLJh0lAr06brXIkljrlI+N7NNW1IAXGn/6IZPi3YQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/openbsd-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.4.tgz",
- "integrity": "sha512-nLgdc6tWEhcCFg/WVFaUxHcPK3AP/bh+KEwKtl69Ay5IBqUwKDaq/6Xk0E+fh/FGjnLwqFSsarsbPHeKM8t8Sw==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/sunos-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.4.tgz",
- "integrity": "sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/win32-arm64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.4.tgz",
- "integrity": "sha512-yYiRDQcqLYQSvNQcBKN7XogbrSvBE45FEQdH8fuXPl7cngzkCvpsG2H9Uey39IjQ6gqqc+Q4VXYHsQcKW0OMjQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/win32-ia32": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.4.tgz",
- "integrity": "sha512-5rabnGIqexekYkh9zXG5waotq8mrdlRoBqAktjx2W3kb0zsI83mdCwrcAeKYirnUaTGztR5TxXcXmQrEzny83w==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/react-email/node_modules/@esbuild/win32-x64": {
- "version": "0.16.4",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.4.tgz",
- "integrity": "sha512-sN/I8FMPtmtT2Yw+Dly8Ur5vQ5a/RmC8hW7jO9PtPSQUPkowxWpcUZnqOggU7VwyT3Xkj6vcXWd3V/qTXwultQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=12"
- }
- },
"node_modules/react-email/node_modules/@react-email/render": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/@react-email/render/-/render-0.0.6.tgz",
@@ -15986,6 +15609,18 @@
"node": ">=16.0.0"
}
},
+ "node_modules/react-email/node_modules/@selderee/plugin-htmlparser2": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.10.0.tgz",
+ "integrity": "sha512-gW69MEamZ4wk1OsOq1nG1jcyhXIQcnrsX5JwixVw/9xaiav8TCyjESAruu1Rz9yyInhgBXxkNwMeygKnN2uxNA==",
+ "dependencies": {
+ "domhandler": "^5.0.3",
+ "selderee": "^0.10.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
"node_modules/react-email/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -16056,6 +15691,21 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/react-email/node_modules/html-to-text": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.3.tgz",
+ "integrity": "sha512-hxDF1kVCF2uw4VUJ3vr2doc91pXf2D5ngKcNviSitNkhP9OMOaJkDrFIFL6RMvko7NisWTEiqGpQ9LAxcVok1w==",
+ "dependencies": {
+ "@selderee/plugin-htmlparser2": "^0.10.0",
+ "deepmerge": "^4.2.2",
+ "dom-serializer": "^2.0.0",
+ "htmlparser2": "^8.0.1",
+ "selderee": "^0.10.0"
+ },
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/react-email/node_modules/minimatch": {
"version": "5.1.6",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
@@ -16067,10 +15717,41 @@
"node": ">=10"
}
},
+ "node_modules/react-email/node_modules/parseley": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.11.0.tgz",
+ "integrity": "sha512-VfcwXlBWgTF+unPcr7yu3HSSA6QUdDaDnrHcytVfj5Z8azAyKBDrYnSIfeSxlrEayndNcLmrXzg+Vxbo6DWRXQ==",
+ "dependencies": {
+ "leac": "^0.6.0",
+ "peberminta": "^0.8.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/react-email/node_modules/peberminta": {
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.8.0.tgz",
+ "integrity": "sha512-YYEs+eauIjDH5nUEGi18EohWE0nV2QbGTqmxQcqgZ/0g+laPCQmuIqq7EBLVi9uim9zMgfJv0QBZEnQ3uHw/Tw==",
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
+ "node_modules/react-email/node_modules/selderee": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.10.0.tgz",
+ "integrity": "sha512-DEL/RW/f4qLw/NrVg97xKaEBC8IpzIG2fvxnzCp3Z4yk4jQ3MXom+Imav9wApjxX2dfS3eW7x0DXafJr85i39A==",
+ "dependencies": {
+ "parseley": "^0.11.0"
+ },
+ "funding": {
+ "url": "https://ko-fi.com/killymxi"
+ }
+ },
"node_modules/react-hook-form": {
- "version": "7.47.0",
- "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.47.0.tgz",
- "integrity": "sha512-F/TroLjTICipmHeFlMrLtNLceO2xr1jU3CyiNla5zdwsGUGu2UOxxR4UyJgLlhMwLW/Wzp4cpJ7CPfgJIeKdSg==",
+ "version": "7.48.2",
+ "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.48.2.tgz",
+ "integrity": "sha512-H0T2InFQb1hX7qKtDIZmvpU1Xfn/bdahWBN1fH19gSe4bBEqTfmlr7H3XWTaVtiK4/tpPaI1F3355GPMZYge+A==",
"engines": {
"node": ">=12.22.0"
},
@@ -16092,9 +15773,9 @@
}
},
"node_modules/react-icons": {
- "version": "4.11.0",
- "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.11.0.tgz",
- "integrity": "sha512-V+4khzYcE5EBk/BvcuYRq6V/osf11ODUM2J8hg2FDSswRrGvqiYUYPRy4OdrWaQOBj4NcpJfmHZLNaD+VH0TyA==",
+ "version": "4.12.0",
+ "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.12.0.tgz",
+ "integrity": "sha512-IBaDuHiShdZqmfc/TwHu6+d6k2ltNCf3AszxNmjJc1KUfXdEeRJOKyNvLmAHaarhzGmTSVygNdyu8/opXv2gaw==",
"peerDependencies": {
"react": "*"
}
@@ -16109,6 +15790,42 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
+ "node_modules/react-pdf": {
+ "version": "7.3.3",
+ "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.3.3.tgz",
+ "integrity": "sha512-d7WAxcsjOogJfJ+I+zX/mdip3VjR1yq/yDa4hax4XbQVjbbbup6rqs4c8MGx0MLSnzob17TKp1t4CsNbDZ6GeQ==",
+ "dependencies": {
+ "clsx": "^2.0.0",
+ "make-cancellable-promise": "^1.3.1",
+ "make-event-props": "^1.6.0",
+ "merge-refs": "^1.2.1",
+ "pdfjs-dist": "3.6.172",
+ "prop-types": "^15.6.2",
+ "tiny-invariant": "^1.0.0",
+ "tiny-warning": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-pdf/node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/react-property": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/react-property/-/react-property-2.0.0.tgz",
@@ -16159,18 +15876,6 @@
}
}
},
- "node_modules/react-resize-detector": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-8.1.0.tgz",
- "integrity": "sha512-S7szxlaIuiy5UqLhLL1KY3aoyGHbZzsTpYal9eYMwCyKqoqoVLCmIgAgNyIM1FhnP2KyBygASJxdhejrzjMb+w==",
- "dependencies": {
- "lodash": "^4.17.21"
- },
- "peerDependencies": {
- "react": "^16.0.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0"
- }
- },
"node_modules/react-rnd": {
"version": "10.4.1",
"resolved": "https://registry.npmjs.org/react-rnd/-/react-rnd-10.4.1.tgz",
@@ -16257,14 +15962,6 @@
"pify": "^2.3.0"
}
},
- "node_modules/read-cache/node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/read-pkg": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz",
@@ -16423,24 +16120,26 @@
"js-yaml": "bin/js-yaml.js"
}
},
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
- "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
+ "node_modules/read-yaml-file/node_modules/pify": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
+ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
+ "engines": {
+ "node": ">=6"
}
},
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ "node_modules/readable-stream": {
+ "version": "3.6.2",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
},
"node_modules/readdirp": {
"version": "3.6.0",
@@ -16454,22 +16153,21 @@
}
},
"node_modules/recharts": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.9.0.tgz",
- "integrity": "sha512-cVgiAU3W5UrA8nRRV/N0JrudgZzY/vjkzrlShbH+EFo1vs4nMlXgshZWLI0DfDLmn4/p4pF7Lq7F5PU+K94Ipg==",
+ "version": "2.10.1",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.10.1.tgz",
+ "integrity": "sha512-9bi0jIzxOTfEda+oYqgimKuYfApmBr0zKnAX8r4Iw56k3Saz/IQyBD4zohZL0eyzfz0oGFRH7alpJBgH1eC57g==",
"dependencies": {
- "classnames": "^2.2.5",
+ "clsx": "^2.0.0",
"eventemitter3": "^4.0.1",
"lodash": "^4.17.19",
"react-is": "^16.10.2",
- "react-resize-detector": "^8.0.4",
- "react-smooth": "^2.0.4",
+ "react-smooth": "^2.0.5",
"recharts-scale": "^0.4.4",
"tiny-invariant": "^1.3.1",
"victory-vendor": "^36.6.8"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"peerDependencies": {
"prop-types": "^15.6.0",
@@ -16485,6 +16183,14 @@
"decimal.js-light": "^2.4.1"
}
},
+ "node_modules/recharts/node_modules/clsx": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
+ "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/recharts/node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -16654,9 +16360,9 @@
}
},
"node_modules/remeda": {
- "version": "1.27.1",
- "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.27.1.tgz",
- "integrity": "sha512-va05uuDBz/E55O9wmpDdbVlwdWbHGJJy3oC0EAHSFn74MpWF3S81NVJDz/FW05bc/UDg769t1u6YPhBK/gmvLw=="
+ "version": "1.29.0",
+ "resolved": "https://registry.npmjs.org/remeda/-/remeda-1.29.0.tgz",
+ "integrity": "sha512-M3LQ14KtMdQ1879lj/kKji3zBk158s7Rwg963mEkTfQFMxnKrIEAMxJfo/+0sp/+uGgN/KMVU2MBA4LNjqf8YQ=="
},
"node_modules/repeat-string": {
"version": "1.6.1",
@@ -16692,28 +16398,16 @@
}
},
"node_modules/resend": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resend/-/resend-1.1.0.tgz",
- "integrity": "sha512-it8TIDVT+/gAiJsUlv2tdHuvzwCCv4Zwu+udDqIm/dIuByQwe68TtFDcPccxqpSVVrNCBxxXLzsdT1tsV+P3GA==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/resend/-/resend-2.0.0.tgz",
+ "integrity": "sha512-jAh0DN84ZjjmzGM2vMjJ1hphPBg1mG98dzopF7kJzmin62v8ESg4og2iCKWdkAboGOT2SeO5exbr/8Xh8gLddw==",
"dependencies": {
- "@react-email/render": "0.0.7",
- "type-fest": "3.13.0"
+ "@react-email/render": "0.0.9"
},
"engines": {
"node": ">=18"
}
},
- "node_modules/resend/node_modules/type-fest": {
- "version": "3.13.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.13.0.tgz",
- "integrity": "sha512-Gur3yQGM9qiLNs0KPP7LPgeRbio2QTt4xXouobMCarR0/wyW3F+F/+OWwshg3NG0Adon7uQfSZBpB46NfhoF1A==",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/resolve": {
"version": "1.22.8",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
@@ -16940,11 +16634,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/safe-array-concat/node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
- },
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -16982,24 +16671,6 @@
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "node_modules/sass": {
- "version": "1.69.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.4.tgz",
- "integrity": "sha512-+qEreVhqAy8o++aQfCJwp0sklr2xyEzkm9Pp/Igu9wNPoe7EZEQ8X/MBvvXggI2ql607cxKg/RKOwDj6pp2XDA==",
- "optional": true,
- "peer": true,
- "dependencies": {
- "chokidar": ">=3.0.0 <4.0.0",
- "immutable": "^4.0.0",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "bin": {
- "sass": "sass.js"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
"node_modules/scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
@@ -17021,11 +16692,11 @@
}
},
"node_modules/selderee": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.10.0.tgz",
- "integrity": "sha512-DEL/RW/f4qLw/NrVg97xKaEBC8IpzIG2fvxnzCp3Z4yk4jQ3MXom+Imav9wApjxX2dfS3eW7x0DXafJr85i39A==",
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz",
+ "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==",
"dependencies": {
- "parseley": "^0.11.0"
+ "parseley": "^0.12.0"
},
"funding": {
"url": "https://ko-fi.com/killymxi"
@@ -17050,6 +16721,20 @@
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
},
+ "node_modules/set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "dependencies": {
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/set-function-name": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
@@ -17095,11 +16780,60 @@
"url": "https://opencollective.com/libvips"
}
},
+ "node_modules/sharp/node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/sharp/node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/sharp/node_modules/node-addon-api": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA=="
},
+ "node_modules/sharp/node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -17173,25 +16907,12 @@
]
},
"node_modules/simple-get": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
+ "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
+ "optional": true,
"dependencies": {
- "decompress-response": "^6.0.0",
+ "decompress-response": "^4.2.0",
"once": "^1.3.1",
"simple-concat": "^1.0.0"
}
@@ -17334,19 +17055,6 @@
"readable-stream": "^3.0.0"
}
},
- "node_modules/split2/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
@@ -17366,9 +17074,9 @@
}
},
"node_modules/start-server-and-test": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.1.tgz",
- "integrity": "sha512-8PFo4DLLLCDMuS51/BEEtE1m9CAXw1LNVtZSS1PzkYQh6Qf9JUwM4huYeSoUumaaoAyuwYBwCa9OsrcpMqcOdQ==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-2.0.3.tgz",
+ "integrity": "sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==",
"dependencies": {
"arg": "^5.0.2",
"bluebird": "3.7.2",
@@ -17377,7 +17085,7 @@
"execa": "5.1.1",
"lazy-ass": "1.6.0",
"ps-tree": "1.2.0",
- "wait-on": "7.0.1"
+ "wait-on": "7.2.0"
},
"bin": {
"server-test": "src/bin/start.js",
@@ -17423,27 +17131,22 @@
}
},
"node_modules/streamx": {
- "version": "2.15.1",
- "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz",
- "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==",
+ "version": "2.15.5",
+ "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz",
+ "integrity": "sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg==",
"dependencies": {
"fast-fifo": "^1.1.0",
"queue-tick": "^1.0.1"
}
},
"node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
"dependencies": {
- "safe-buffer": "~5.1.0"
+ "safe-buffer": "~5.2.0"
}
},
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
- },
"node_modules/string-argv": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz",
@@ -17457,7 +17160,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -17475,7 +17177,6 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -17488,14 +17189,12 @@
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/string-width-cjs/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -17504,7 +17203,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -17516,7 +17214,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -17617,7 +17314,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -17826,9 +17522,9 @@
}
},
"node_modules/tailwindcss": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.3.tgz",
- "integrity": "sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
+ "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -17850,6 +17546,7 @@
"postcss-load-config": "^4.0.1",
"postcss-nested": "^6.0.1",
"postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0",
"resolve": "^1.22.2",
"sucrase": "^3.32.0"
},
@@ -17996,20 +17693,6 @@
"readable-stream": "3"
}
},
- "node_modules/through2/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/tiny-invariant": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
@@ -18319,39 +18002,26 @@
}
},
"node_modules/turbo": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.10.15.tgz",
- "integrity": "sha512-mKKkqsuDAQy1wCCIjCdG+jOCwUflhckDMSRoeBPcIL/CnCl7c5yRDFe7SyaXloUUkt4tUR0rvNIhVCcT7YeQpg==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.10.16.tgz",
+ "integrity": "sha512-2CEaK4FIuSZiP83iFa9GqMTQhroW2QryckVqUydmg4tx78baftTOS0O+oDAhvo9r9Nit4xUEtC1RAHoqs6ZEtg==",
"dev": true,
"bin": {
"turbo": "bin/turbo"
},
"optionalDependencies": {
- "turbo-darwin-64": "1.10.15",
- "turbo-darwin-arm64": "1.10.15",
- "turbo-linux-64": "1.10.15",
- "turbo-linux-arm64": "1.10.15",
- "turbo-windows-64": "1.10.15",
- "turbo-windows-arm64": "1.10.15"
+ "turbo-darwin-64": "1.10.16",
+ "turbo-darwin-arm64": "1.10.16",
+ "turbo-linux-64": "1.10.16",
+ "turbo-linux-arm64": "1.10.16",
+ "turbo-windows-64": "1.10.16",
+ "turbo-windows-arm64": "1.10.16"
}
},
- "node_modules/turbo-darwin-64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.10.15.tgz",
- "integrity": "sha512-Sik5uogjkRTe1XVP9TC2GryEMOJCaKE2pM/O9uLn4koQDnWKGcLQv+mDU+H+9DXvKLnJnKCD18OVRkwK5tdpoA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "darwin"
- ]
- },
"node_modules/turbo-darwin-arm64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.15.tgz",
- "integrity": "sha512-xwqyFDYUcl2xwXyGPmHkmgnNm4Cy0oNzMpMOBGRr5x64SErS7QQLR4VHb0ubiR+VAb8M+ECPklU6vD1Gm+wekg==",
+ "version": "1.10.16",
+ "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.10.16.tgz",
+ "integrity": "sha512-jqGpFZipIivkRp/i+jnL8npX0VssE6IAVNKtu573LXtssZdV/S+fRGYA16tI46xJGxSAivrZ/IcgZrV6Jk80bw==",
"cpu": [
"arm64"
],
@@ -18361,58 +18031,6 @@
"darwin"
]
},
- "node_modules/turbo-linux-64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.10.15.tgz",
- "integrity": "sha512-dM07SiO3RMAJ09Z+uB2LNUSkPp3I1IMF8goH5eLj+d8Kkwoxd/+qbUZOj9RvInyxU/IhlnO9w3PGd3Hp14m/nA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/turbo-linux-arm64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.10.15.tgz",
- "integrity": "sha512-MkzKLkKYKyrz4lwfjNXH8aTny5+Hmiu4SFBZbx+5C0vOlyp6fV5jZANDBvLXWiDDL4DSEAuCEK/2cmN6FVH1ow==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/turbo-windows-64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.10.15.tgz",
- "integrity": "sha512-3TdVU+WEH9ThvQGwV3ieX/XHebtYNHv9HARHauPwmVj3kakoALkpGxLclkHFBLdLKkqDvmHmXtcsfs6cXXRHJg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/turbo-windows-arm64": {
- "version": "1.10.15",
- "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.10.15.tgz",
- "integrity": "sha512-l+7UOBCbfadvPMYsX08hyLD+UIoAkg6ojfH+E8aud3gcA1padpjCJTh9gMpm3QdMbKwZteT5uUM+wyi6Rbbyww==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "optional": true,
- "os": [
- "win32"
- ]
- },
"node_modules/tw-to-css": {
"version": "0.0.11",
"resolved": "https://registry.npmjs.org/tw-to-css/-/tw-to-css-0.0.11.tgz",
@@ -18431,6 +18049,14 @@
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
"integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
+ "node_modules/tw-to-css/node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
"node_modules/tw-to-css/node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -18473,6 +18099,19 @@
"node": "^10 || ^12 || >=14"
}
},
+ "node_modules/tw-to-css/node_modules/postcss-css-variables": {
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/postcss-css-variables/-/postcss-css-variables-0.18.0.tgz",
+ "integrity": "sha512-lYS802gHbzn1GI+lXvy9MYIYDuGnl1WB4FTKoqMQqJ3Mab09A7a/1wZvGTkCEZJTM8mSbIyb1mJYn8f0aPye0Q==",
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "escape-string-regexp": "^1.0.3",
+ "extend": "^3.0.1"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.6"
+ }
+ },
"node_modules/tw-to-css/node_modules/postcss-import": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz",
@@ -18705,9 +18344,9 @@
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA=="
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.3.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz",
+ "integrity": "sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
@@ -18857,14 +18496,14 @@
}
},
"node_modules/universal-user-agent": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz",
- "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w=="
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz",
+ "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ=="
},
"node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
+ "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"engines": {
"node": ">= 10.0.0"
}
@@ -18899,6 +18538,38 @@
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
"integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA=="
},
+ "node_modules/unzipper/node_modules/isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
+ },
+ "node_modules/unzipper/node_modules/readable-stream": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
+ "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+ "dependencies": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "node_modules/unzipper/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+ },
+ "node_modules/unzipper/node_modules/string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dependencies": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
@@ -18928,6 +18599,11 @@
"browserslist": ">= 4.21.0"
}
},
+ "node_modules/uqr": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/uqr/-/uqr-0.1.2.tgz",
+ "integrity": "sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA=="
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -19080,9 +18756,9 @@
}
},
"node_modules/victory-vendor": {
- "version": "36.6.11",
- "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.11.tgz",
- "integrity": "sha512-nT8kCiJp8dQh8g991J/R5w5eE2KnO8EAIP0xocWlh9l2okngMWglOPoMZzJvek8Q1KUc4XE/mJxTZnvOB1sTYg==",
+ "version": "36.6.12",
+ "resolved": "https://registry.npmjs.org/victory-vendor/-/victory-vendor-36.6.12.tgz",
+ "integrity": "sha512-pJrTkNHln+D83vDCCSUf0ZfxBvIaVrFHmrBOsnnLAbdqfudRACAj51He2zU94/IWq9464oTADcPVkmWAfNMwgA==",
"dependencies": {
"@types/d3-array": "^3.0.3",
"@types/d3-ease": "^3.0.0",
@@ -19101,15 +18777,15 @@
}
},
"node_modules/wait-on": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.0.1.tgz",
- "integrity": "sha512-9AnJE9qTjRQOlTZIldAaf/da2eW0eSRSgcqq85mXQja/DW3MriHxkpODDSUEg+Gri/rKEcXUZHe+cevvYItaog==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-7.2.0.tgz",
+ "integrity": "sha512-wCQcHkRazgjG5XoAq9jbTMLpNIjoSlZslrJ2+N9MxDsGEv1HnFoVjOCexL0ESva7Y9cu350j+DWADdk54s4AFQ==",
"dependencies": {
- "axios": "^0.27.2",
- "joi": "^17.7.0",
+ "axios": "^1.6.1",
+ "joi": "^17.11.0",
"lodash": "^4.17.21",
- "minimist": "^1.2.7",
- "rxjs": "^7.8.0"
+ "minimist": "^1.2.8",
+ "rxjs": "^7.8.1"
},
"bin": {
"wait-on": "bin/wait-on"
@@ -19118,15 +18794,6 @@
"node": ">=12.0.0"
}
},
- "node_modules/wait-on/node_modules/axios": {
- "version": "0.27.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
- "integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
- "dependencies": {
- "follow-redirects": "^1.14.9",
- "form-data": "^4.0.0"
- }
- },
"node_modules/watchpack": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
@@ -19169,11 +18836,6 @@
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
},
- "node_modules/whatwg-fetch": {
- "version": "3.6.19",
- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.19.tgz",
- "integrity": "sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw=="
- },
"node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -19237,11 +18899,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/which-builtin-type/node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="
- },
"node_modules/which-collection": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
@@ -19257,12 +18914,12 @@
}
},
"node_modules/which-typed-array": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz",
- "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
"dependencies": {
"available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.4",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
"has-tostringtag": "^1.0.0"
@@ -19320,7 +18977,6 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -19338,7 +18994,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -19354,14 +19009,12 @@
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/wrap-ansi-cjs/node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -19370,7 +19023,6 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -19384,7 +19036,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -19396,7 +19047,6 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -19408,7 +19058,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -19466,9 +19115,9 @@
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
},
"node_modules/yaml": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.3.tgz",
- "integrity": "sha512-zw0VAJxgeZ6+++/su5AFoqBbZbrEakwu+X0M5HmcwUiBL7AzcuPKjj5we4xfQLp78LkEMpD0cOnUhmgOVy3KdQ==",
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
+ "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
"engines": {
"node": ">= 14"
}
@@ -19578,6 +19227,7 @@
"start-server-and-test": "^2.0.1"
},
"devDependencies": {
+ "@documenso/prisma": "*",
"@documenso/web": "*",
"@playwright/test": "^1.18.1",
"@types/node": "^20.8.2"
@@ -19604,8 +19254,8 @@
"@documenso/prisma": "*",
"luxon": "^3.4.0",
"micro": "^10.0.1",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
"react": "18.2.0",
"ts-pattern": "^5.0.5",
"zod": "^3.22.4"
@@ -19616,11 +19266,27 @@
"version": "1.0.0",
"license": "MIT",
"dependencies": {
- "@documenso/nodemailer-resend": "1.0.0",
- "@react-email/components": "^0.0.7",
+ "@documenso/nodemailer-resend": "2.0.0",
+ "@react-email/body": "0.0.4",
+ "@react-email/button": "0.0.11",
+ "@react-email/column": "0.0.8",
+ "@react-email/container": "0.0.10",
+ "@react-email/font": "0.0.4",
+ "@react-email/head": "0.0.6",
+ "@react-email/heading": "0.0.9",
+ "@react-email/hr": "0.0.6",
+ "@react-email/html": "0.0.6",
+ "@react-email/img": "0.0.6",
+ "@react-email/link": "0.0.6",
+ "@react-email/preview": "0.0.7",
+ "@react-email/render": "0.0.9",
+ "@react-email/row": "0.0.6",
+ "@react-email/section": "0.0.10",
+ "@react-email/tailwind": "0.0.9",
+ "@react-email/text": "0.0.6",
"nodemailer": "^6.9.3",
- "react-email": "^1.9.4",
- "resend": "^1.1.0"
+ "react-email": "^1.9.5",
+ "resend": "^2.0.0"
},
"devDependencies": {
"@documenso/tailwind-config": "*",
@@ -19629,6 +19295,20 @@
"tsup": "^7.1.0"
}
},
+ "packages/email/node_modules/@react-email/tailwind": {
+ "version": "0.0.9",
+ "resolved": "https://registry.npmjs.org/@react-email/tailwind/-/tailwind-0.0.9.tgz",
+ "integrity": "sha512-hVGMTVjg2u51TU8dMInc8l3R6+O2t54sx0mzQnJ2mOLwJQkfibh3HA4lmEa0V1qlv8mT/nti0vzC6QshdCxqjg==",
+ "dependencies": {
+ "html-react-parser": "4.0.0",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "tw-to-css": "0.0.11"
+ },
+ "engines": {
+ "node": ">=16.0.0"
+ }
+ },
"packages/eslint-config": {
"name": "@documenso/eslint-config",
"version": "0.0.0",
@@ -19647,304 +19327,16 @@
"typescript": "5.2.2"
}
},
- "packages/eslint-config/node_modules/@next/eslint-plugin-next": {
- "version": "13.4.19",
- "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-13.4.19.tgz",
- "integrity": "sha512-N/O+zGb6wZQdwu6atMZHbR7T9Np5SUFUjZqCbj0sXm+MwQO35M8TazVB4otm87GkXYs2l6OPwARd3/PUWhZBVQ==",
- "dependencies": {
- "glob": "7.1.7"
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.8.0.tgz",
- "integrity": "sha512-GosF4238Tkes2SHPQ1i8f6rMtG6zlKwMEB0abqSJ3Npvos+doIlc/ATG+vX1G9coDF3Ex78zM3heXHLyWEwLUw==",
- "dependencies": {
- "@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.8.0",
- "@typescript-eslint/type-utils": "6.8.0",
- "@typescript-eslint/utils": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0",
- "debug": "^4.3.4",
- "graphemer": "^1.4.0",
- "ignore": "^5.2.4",
- "natural-compare": "^1.4.0",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha",
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
+ "packages/eslint-config/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
"bin": {
- "semver": "bin/semver.js"
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=10"
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/parser": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.8.0.tgz",
- "integrity": "sha512-5tNs6Bw0j6BdWuP8Fx+VH4G9fEPDxnVI7yH1IAPkQH5RUtvKwRoqdecAPdQXv4rSOADAaz1LFBZvZG7VbXivSg==",
- "dependencies": {
- "@typescript-eslint/scope-manager": "6.8.0",
- "@typescript-eslint/types": "6.8.0",
- "@typescript-eslint/typescript-estree": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0",
- "debug": "^4.3.4"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/scope-manager": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.8.0.tgz",
- "integrity": "sha512-xe0HNBVwCph7rak+ZHcFD6A+q50SMsFwcmfdjs9Kz4qDh5hWhaPhFjRs/SODEhroBI5Ruyvyz9LfwUJ624O40g==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/types": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.8.0.tgz",
- "integrity": "sha512-p5qOxSum7W3k+llc7owEStXlGmSl8FcGvhYt8Vjy7FqEnmkCVlM3P57XQEGj58oqaBWDQXbJDZxwUWMS/EAPNQ==",
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.8.0.tgz",
- "integrity": "sha512-ISgV0lQ8XgW+mvv5My/+iTUdRmGspducmQcDw5JxznasXNnZn3SKNrTRuMsEXv+V/O+Lw9AGcQCfVaOPCAk/Zg==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "@typescript-eslint/visitor-keys": "6.8.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "packages/eslint-config/node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.8.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.8.0.tgz",
- "integrity": "sha512-oqAnbA7c+pgOhW2OhGvxm0t1BULX5peQI/rLsNDpGM78EebV3C9IGbX5HNZabuZ6UQrYveCLjKo8Iy/lLlBkkg==",
- "dependencies": {
- "@typescript-eslint/types": "6.8.0",
- "eslint-visitor-keys": "^3.4.1"
- },
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "packages/eslint-config/node_modules/doctrine": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
- "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "packages/eslint-config/node_modules/eslint-config-next": {
- "version": "13.4.19",
- "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-13.4.19.tgz",
- "integrity": "sha512-WE8367sqMnjhWHvR5OivmfwENRQ1ixfNE9hZwQqNCsd+iM3KnuMc1V8Pt6ytgjxjf23D+xbesADv9x3xaKfT3g==",
- "dependencies": {
- "@next/eslint-plugin-next": "13.4.19",
- "@rushstack/eslint-patch": "^1.1.3",
- "@typescript-eslint/parser": "^5.4.2 || ^6.0.0",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.26.0",
- "eslint-plugin-jsx-a11y": "^6.5.1",
- "eslint-plugin-react": "^7.31.7",
- "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705"
- },
- "peerDependencies": {
- "eslint": "^7.23.0 || ^8.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "packages/eslint-config/node_modules/eslint-import-resolver-typescript": {
- "version": "3.6.1",
- "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz",
- "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==",
- "dependencies": {
- "debug": "^4.3.4",
- "enhanced-resolve": "^5.12.0",
- "eslint-module-utils": "^2.7.4",
- "fast-glob": "^3.3.1",
- "get-tsconfig": "^4.5.0",
- "is-core-module": "^2.11.0",
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*"
- }
- },
- "packages/eslint-config/node_modules/eslint-plugin-react": {
- "version": "7.33.2",
- "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.33.2.tgz",
- "integrity": "sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flatmap": "^1.3.1",
- "array.prototype.tosorted": "^1.1.1",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.0.12",
- "estraverse": "^5.3.0",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.6",
- "object.fromentries": "^2.0.6",
- "object.hasown": "^1.1.2",
- "object.values": "^1.1.6",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.4",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.8"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8"
- }
- },
- "packages/eslint-config/node_modules/eslint-plugin-unused-imports": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.0.0.tgz",
- "integrity": "sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==",
- "dependencies": {
- "eslint-rule-composer": "^0.3.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "peerDependencies": {
- "@typescript-eslint/eslint-plugin": "^6.0.0",
- "eslint": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "@typescript-eslint/eslint-plugin": {
- "optional": true
- }
- }
- },
- "packages/eslint-config/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz",
- "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "packages/eslint-config/node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "bin": {
- "semver": "bin/semver.js"
+ "node": ">=14.17"
}
},
"packages/lib": {
@@ -19956,10 +19348,13 @@
"@aws-sdk/cloudfront-signer": "^3.410.0",
"@aws-sdk/s3-request-presigner": "^3.410.0",
"@aws-sdk/signature-v4-crt": "^3.410.0",
+ "@documenso/assets": "*",
"@documenso/email": "*",
"@documenso/prisma": "*",
"@documenso/signing": "*",
"@next-auth/prisma-adapter": "1.0.7",
+ "@noble/ciphers": "0.4.0",
+ "@noble/hashes": "1.3.2",
"@pdf-lib/fontkit": "^1.1.1",
"@scure/base": "^1.1.3",
"@sindresorhus/slugify": "^2.2.1",
@@ -19967,8 +19362,9 @@
"bcrypt": "^5.1.0",
"luxon": "^3.4.0",
"nanoid": "^4.0.2",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
+ "oslo": "^0.17.0",
"pdf-lib": "^1.17.1",
"react": "18.2.0",
"remeda": "^1.27.1",
@@ -20025,6 +19421,19 @@
"typescript": "5.2.2"
}
},
+ "packages/prisma/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"packages/signing": {
"name": "@documenso/signing",
"version": "1.0.0",
@@ -20047,7 +19456,7 @@
"dependencies": {
"autoprefixer": "^10.4.13",
"postcss": "^8.4.21",
- "tailwindcss": "^3.2.7",
+ "tailwindcss": "3.3.2",
"tailwindcss-animate": "^1.0.5"
},
"devDependencies": {
@@ -20066,9 +19475,12 @@
"@trpc/next": "^10.36.0",
"@trpc/react-query": "^10.36.0",
"@trpc/server": "^10.36.0",
+ "luxon": "^3.4.0",
"superjson": "^1.13.1",
+ "ts-pattern": "^5.0.5",
"zod": "^3.22.4"
- }
+ },
+ "devDependencies": {}
},
"packages/tsconfig": {
"name": "@documenso/tsconfig",
@@ -20116,7 +19528,7 @@
"framer-motion": "^10.12.8",
"lucide-react": "^0.279.0",
"luxon": "^3.4.2",
- "next": "14.0.0",
+ "next": "14.0.3",
"pdfjs-dist": "3.6.172",
"react-day-picker": "^8.7.1",
"react-hook-form": "^7.45.4",
@@ -20136,55 +19548,17 @@
"typescript": "5.2.2"
}
},
- "packages/ui/node_modules/pdfjs-dist": {
- "version": "3.6.172",
- "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.6.172.tgz",
- "integrity": "sha512-bfOhCg+S9DXh/ImWhWYTOiq3aVMFSCvzGiBzsIJtdMC71kVWDBw7UXr32xh0y56qc5wMVylIeqV3hBaRsu+e+w==",
- "dependencies": {
- "path2d-polyfill": "^2.0.1",
- "web-streams-polyfill": "^3.2.1"
+ "packages/ui/node_modules/typescript": {
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+ "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=16"
- },
- "optionalDependencies": {
- "canvas": "^2.11.2"
- }
- },
- "packages/ui/node_modules/react-pdf": {
- "version": "7.3.3",
- "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-7.3.3.tgz",
- "integrity": "sha512-d7WAxcsjOogJfJ+I+zX/mdip3VjR1yq/yDa4hax4XbQVjbbbup6rqs4c8MGx0MLSnzob17TKp1t4CsNbDZ6GeQ==",
- "dependencies": {
- "clsx": "^2.0.0",
- "make-cancellable-promise": "^1.3.1",
- "make-event-props": "^1.6.0",
- "merge-refs": "^1.2.1",
- "pdfjs-dist": "3.6.172",
- "prop-types": "^15.6.2",
- "tiny-invariant": "^1.0.0",
- "tiny-warning": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "packages/ui/node_modules/react-pdf/node_modules/clsx": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz",
- "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==",
- "engines": {
- "node": ">=6"
+ "node": ">=14.17"
}
}
}
diff --git a/package.json b/package.json
index 1b4690e18..2e708363f 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"build": "turbo run build",
"build:web": "turbo run build --filter=@documenso/web",
"dev": "turbo run dev --filter=@documenso/web --filter=@documenso/marketing",
- "start": "cd apps && cd web && next start",
+ "start": "turbo run start --filter=@documenso/web --filter=@documenso/marketing",
"lint": "turbo run lint",
"lint:fix": "turbo run lint:fix",
"format": "prettier --write \"**/*.{js,jsx,cjs,mjs,ts,tsx,cts,mts,mdx}\"",
@@ -19,6 +19,7 @@
"prisma:generate": "npm run with:env -- npm run prisma:generate -w @documenso/prisma",
"prisma:migrate-dev": "npm run with:env -- npm run prisma:migrate-dev -w @documenso/prisma",
"prisma:migrate-deploy": "npm run with:env -- npm run prisma:migrate-deploy -w @documenso/prisma",
+ "prisma:seed": "npm run with:env -- npm run prisma:seed -w @documenso/prisma",
"prisma:studio": "npm run with:env -- npx prisma studio --schema packages/prisma/schema.prisma",
"with:env": "dotenv -e .env -e .env.local --",
"reset:hard": "npm run clean && npm i && npm run prisma:generate"
@@ -46,8 +47,13 @@
"apps/*",
"packages/*"
],
- "dependencies": {
- "react-hotkeys-hook": "^4.4.1",
- "recharts": "^2.7.2"
+ "dependencies": {},
+ "overrides": {
+ "next-auth": {
+ "next": "14.0.3"
+ },
+ "next-contentlayer": {
+ "next": "14.0.3"
+ }
}
}
diff --git a/packages/app-tests/e2e/pr-711-deletion-of-documents.spec.ts b/packages/app-tests/e2e/pr-711-deletion-of-documents.spec.ts
new file mode 100644
index 000000000..12a099bbf
--- /dev/null
+++ b/packages/app-tests/e2e/pr-711-deletion-of-documents.spec.ts
@@ -0,0 +1,192 @@
+import { expect, test } from '@playwright/test';
+
+import { TEST_USERS } from '@documenso/prisma/seed/pr-711-deletion-of-documents';
+
+test.describe.configure({ mode: 'serial' });
+
+test('[PR-711]: seeded documents should be visible', async ({ page }) => {
+ const [sender, ...recipients] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ await page.getByLabel('Email').fill(sender.email);
+ await page.getByLabel('Password', { exact: true }).fill(sender.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await expect(page.getByRole('link', { name: 'Document 1 - Completed' })).toBeVisible();
+ await expect(page.getByRole('link', { name: 'Document 1 - Pending' })).toBeVisible();
+ await expect(page.getByRole('link', { name: 'Document 1 - Draft' })).toBeVisible();
+
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+
+ for (const recipient of recipients) {
+ await page.goto('/signin');
+
+ await page.getByLabel('Email').fill(recipient.email);
+ await page.getByLabel('Password', { exact: true }).fill(recipient.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await expect(page.getByRole('link', { name: 'Document 1 - Completed' })).toBeVisible();
+ await expect(page.getByRole('link', { name: 'Document 1 - Pending' })).toBeVisible();
+
+ await expect(page.getByRole('link', { name: 'Document 1 - Draft' })).not.toBeVisible();
+
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+ }
+});
+
+test('[PR-711]: deleting a completed document should not remove it from recipients', async ({
+ page,
+}) => {
+ const [sender, ...recipients] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ // sign in
+ await page.getByLabel('Email').fill(sender.email);
+ await page.getByLabel('Password', { exact: true }).fill(sender.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ // open actions menu
+ await page
+ .locator('tr', { hasText: 'Document 1 - Completed' })
+ .getByRole('cell', { name: 'Download' })
+ .getByRole('button')
+ .nth(1)
+ .click();
+
+ // delete document
+ await page.getByRole('menuitem', { name: 'Delete' }).click();
+ await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
+ await page.getByRole('button', { name: 'Delete' }).click();
+
+ await expect(page.getByRole('row', { name: /Document 1 - Completed/ })).not.toBeVisible();
+
+ // signout
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+
+ for (const recipient of recipients) {
+ await page.goto('/signin');
+
+ // sign in
+ await page.getByLabel('Email').fill(recipient.email);
+ await page.getByLabel('Password', { exact: true }).fill(recipient.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await expect(page.getByRole('link', { name: 'Document 1 - Completed' })).toBeVisible();
+
+ await page.goto(`/sign/completed-token-${recipients.indexOf(recipient)}`);
+ await expect(page.getByText('Everyone has signed').nth(0)).toBeVisible();
+
+ await page.goto('/documents');
+
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+ }
+});
+
+test('[PR-711]: deleting a pending document should remove it from recipients', async ({ page }) => {
+ const [sender, ...recipients] = TEST_USERS;
+
+ for (const recipient of recipients) {
+ await page.goto(`/sign/pending-token-${recipients.indexOf(recipient)}`);
+
+ await expect(page.getByText('Waiting for others to sign').nth(0)).toBeVisible();
+ }
+
+ await page.goto('/signin');
+
+ // sign in
+ await page.getByLabel('Email').fill(sender.email);
+ await page.getByLabel('Password', { exact: true }).fill(sender.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ // open actions menu
+ await page.locator('tr', { hasText: 'Document 1 - Pending' }).getByRole('button').nth(1).click();
+
+ // delete document
+ await page.getByRole('menuitem', { name: 'Delete' }).click();
+ await page.getByPlaceholder("Type 'delete' to confirm").fill('delete');
+ await page.getByRole('button', { name: 'Delete' }).click();
+
+ await expect(page.getByRole('row', { name: /Document 1 - Pending/ })).not.toBeVisible();
+
+ // signout
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+
+ for (const recipient of recipients) {
+ await page.goto('/signin');
+
+ // sign in
+ await page.getByLabel('Email').fill(recipient.email);
+ await page.getByLabel('Password', { exact: true }).fill(recipient.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await expect(page.getByRole('link', { name: 'Document 1 - Pending' })).not.toBeVisible();
+
+ await page.goto(`/sign/pending-token-${recipients.indexOf(recipient)}`);
+ await expect(page.getByText(/document.*cancelled/i).nth(0)).toBeVisible();
+
+ await page.goto('/documents');
+
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+
+ await page.waitForURL('/signin');
+ }
+});
+
+test('[PR-711]: deleting a draft document should remove it without additional prompting', async ({
+ page,
+}) => {
+ const [sender] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ // sign in
+ await page.getByLabel('Email').fill(sender.email);
+ await page.getByLabel('Password', { exact: true }).fill(sender.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ // open actions menu
+ await page
+ .locator('tr', { hasText: 'Document 1 - Draft' })
+ .getByRole('cell', { name: 'Edit' })
+ .getByRole('button')
+ .click();
+
+ // delete document
+ await page.getByRole('menuitem', { name: 'Delete' }).click();
+ await expect(page.getByPlaceholder("Type 'delete' to confirm")).not.toBeVisible();
+ await page.getByRole('button', { name: 'Delete' }).click();
+
+ await expect(page.getByRole('row', { name: /Document 1 - Draft/ })).not.toBeVisible();
+});
diff --git a/packages/app-tests/e2e/pr-713-add-document-search-to-command-menu.spec.ts b/packages/app-tests/e2e/pr-713-add-document-search-to-command-menu.spec.ts
new file mode 100644
index 000000000..e9ae60d0e
--- /dev/null
+++ b/packages/app-tests/e2e/pr-713-add-document-search-to-command-menu.spec.ts
@@ -0,0 +1,72 @@
+import { expect, test } from '@playwright/test';
+
+import { TEST_USERS } from '@documenso/prisma/seed/pr-713-add-document-search-to-command-menu';
+
+test('[PR-713]: should see sent documents', async ({ page }) => {
+ const [user] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ await page.getByLabel('Email').fill(user.email);
+ await page.getByLabel('Password', { exact: true }).fill(user.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await page.keyboard.press('Meta+K');
+
+ await page.getByPlaceholder('Type a command or search...').fill('sent');
+ await expect(page.getByRole('option', { name: '[713] Document - Sent' })).toBeVisible();
+
+ await page.keyboard.press('Escape');
+
+ // signout
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+});
+
+test('[PR-713]: should see received documents', async ({ page }) => {
+ const [user] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ await page.getByLabel('Email').fill(user.email);
+ await page.getByLabel('Password', { exact: true }).fill(user.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await page.keyboard.press('Meta+K');
+
+ await page.getByPlaceholder('Type a command or search...').fill('received');
+ await expect(page.getByRole('option', { name: '[713] Document - Received' })).toBeVisible();
+
+ await page.keyboard.press('Escape');
+
+ // signout
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+});
+
+test('[PR-713]: should be able to search by recipient', async ({ page }) => {
+ const [user, recipient] = TEST_USERS;
+
+ await page.goto('/signin');
+
+ await page.getByLabel('Email').fill(user.email);
+ await page.getByLabel('Password', { exact: true }).fill(user.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ await page.waitForURL('/documents');
+
+ await page.keyboard.press('Meta+K');
+
+ await page.getByPlaceholder('Type a command or search...').fill(recipient.email);
+ await expect(page.getByRole('option', { name: '[713] Document - Sent' })).toBeVisible();
+
+ await page.keyboard.press('Escape');
+
+ // signout
+ await page.getByTitle('Profile Dropdown').click();
+ await page.getByRole('menuitem', { name: 'Sign Out' }).click();
+});
diff --git a/packages/app-tests/e2e/pr-718-add-stepper-component.spec.ts b/packages/app-tests/e2e/pr-718-add-stepper-component.spec.ts
new file mode 100644
index 000000000..6e03979c0
--- /dev/null
+++ b/packages/app-tests/e2e/pr-718-add-stepper-component.spec.ts
@@ -0,0 +1,75 @@
+import { expect, test } from '@playwright/test';
+import path from 'node:path';
+
+import { TEST_USER } from '@documenso/prisma/seed/pr-718-add-stepper-component';
+
+test(`[PR-718]: should be able to create a document`, async ({ page }) => {
+ await page.goto('/signin');
+
+ const documentTitle = `example-${Date.now()}.pdf`;
+
+ // Sign in
+ await page.getByLabel('Email').fill(TEST_USER.email);
+ await page.getByLabel('Password', { exact: true }).fill(TEST_USER.password);
+ await page.getByRole('button', { name: 'Sign In' }).click();
+
+ // Upload document
+ const [fileChooser] = await Promise.all([
+ page.waitForEvent('filechooser'),
+ page.locator('input[type=file]').evaluate((e) => {
+ if (e instanceof HTMLInputElement) {
+ e.click();
+ }
+ }),
+ ]);
+
+ await fileChooser.setFiles(path.join(__dirname, '../../../assets/example.pdf'));
+
+ // Wait to be redirected to the edit page
+ await page.waitForURL(/\/documents\/\d+/);
+
+ // Set title
+ await expect(page.getByRole('heading', { name: 'Add Title' })).toBeVisible();
+
+ await page.getByLabel('Title').fill(documentTitle);
+
+ await page.getByRole('button', { name: 'Continue' }).click();
+
+ // Add signers
+ await expect(page.getByRole('heading', { name: 'Add Signers' })).toBeVisible();
+
+ await page.getByLabel('Email*').fill('user1@example.com');
+ await page.getByLabel('Name').fill('User 1');
+
+ await page.getByRole('button', { name: 'Continue' }).click();
+
+ // Add fields
+ await expect(page.getByRole('heading', { name: 'Add Fields' })).toBeVisible();
+
+ await page.getByRole('button', { name: 'User 1 Signature' }).click();
+ await page.locator('canvas').click({
+ position: {
+ x: 100,
+ y: 100,
+ },
+ });
+
+ await page.getByRole('button', { name: 'Email Email' }).click();
+ await page.locator('canvas').click({
+ position: {
+ x: 100,
+ y: 200,
+ },
+ });
+
+ await page.getByRole('button', { name: 'Continue' }).click();
+
+ // Add subject and send
+ await expect(page.getByRole('heading', { name: 'Add Subject' })).toBeVisible();
+ await page.getByRole('button', { name: 'Send' }).click();
+
+ await page.waitForURL('/documents');
+
+ // Assert document was created
+ await expect(page.getByRole('link', { name: documentTitle })).toBeVisible();
+});
diff --git a/packages/app-tests/e2e/test-auth-flow.spec.ts b/packages/app-tests/e2e/test-auth-flow.spec.ts
index 1221dbf83..9a07ec3c7 100644
--- a/packages/app-tests/e2e/test-auth-flow.spec.ts
+++ b/packages/app-tests/e2e/test-auth-flow.spec.ts
@@ -4,15 +4,15 @@ import { deleteUser } from '@documenso/lib/server-only/user/delete-user';
test.use({ storageState: { cookies: [], origins: [] } });
-/*
+/*
Using them sequentially so the 2nd test
uses the details from the 1st (registration) test
*/
test.describe.configure({ mode: 'serial' });
-const username = process.env.E2E_TEST_AUTHENTICATE_USERNAME;
-const email = process.env.E2E_TEST_AUTHENTICATE_USER_EMAIL;
-const password = process.env.E2E_TEST_AUTHENTICATE_USER_PASSWORD;
+const username = 'Test User';
+const email = 'test-user@auth-flow.documenso.com';
+const password = 'Password123';
test('user can sign up with email and password', async ({ page }: { page: Page }) => {
await page.goto('/signup');
diff --git a/packages/app-tests/package.json b/packages/app-tests/package.json
index 92cfd169d..9dcb32f7d 100644
--- a/packages/app-tests/package.json
+++ b/packages/app-tests/package.json
@@ -6,13 +6,14 @@
"main": "index.js",
"scripts": {
"test:dev": "playwright test",
- "test:e2e": "start-server-and-test \"(cd ../../apps/web && npm run start)\" http://localhost:3000 \"playwright test\""
+ "test:e2e": "start-server-and-test \"npm run start -w @documenso/web\" http://localhost:3000 \"playwright test\""
},
"keywords": [],
"author": "",
"devDependencies": {
"@playwright/test": "^1.18.1",
"@types/node": "^20.8.2",
+ "@documenso/prisma": "*",
"@documenso/web": "*"
},
"dependencies": {
diff --git a/packages/app-tests/playwright.config.ts b/packages/app-tests/playwright.config.ts
index 463b6f97d..672c2f7ef 100644
--- a/packages/app-tests/playwright.config.ts
+++ b/packages/app-tests/playwright.config.ts
@@ -28,8 +28,12 @@ export default defineConfig({
/* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */
trace: 'on-first-retry',
+
+ video: 'retain-on-failure',
},
+ timeout: 30_000,
+
/* Configure projects for major browsers */
projects: [
{
diff --git a/packages/app-tests/tsconfig.json b/packages/app-tests/tsconfig.json
new file mode 100644
index 000000000..fdefbd544
--- /dev/null
+++ b/packages/app-tests/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "extends": "@documenso/tsconfig/react-library.json",
+ "compilerOptions": {
+ "types": ["@documenso/tsconfig/process-env.d.ts"]
+ },
+ "include": ["**/*.ts", "**/*.tsx", "**/*.d.ts"],
+ "exclude": ["dist", "build", "node_modules"]
+}
diff --git a/packages/ee/package.json b/packages/ee/package.json
index c153d1b1b..c711f3843 100644
--- a/packages/ee/package.json
+++ b/packages/ee/package.json
@@ -17,8 +17,8 @@
"@documenso/prisma": "*",
"luxon": "^3.4.0",
"micro": "^10.0.1",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
"react": "18.2.0",
"ts-pattern": "^5.0.5",
"zod": "^3.22.4"
diff --git a/packages/email/components.ts b/packages/email/components.ts
new file mode 100644
index 000000000..552611c93
--- /dev/null
+++ b/packages/email/components.ts
@@ -0,0 +1,17 @@
+export * from '@react-email/body';
+export * from '@react-email/button';
+export * from '@react-email/column';
+export * from '@react-email/container';
+export * from '@react-email/font';
+export * from '@react-email/head';
+export * from '@react-email/heading';
+export * from '@react-email/hr';
+export * from '@react-email/html';
+export * from '@react-email/img';
+export * from '@react-email/link';
+export * from '@react-email/preview';
+export * from '@react-email/render';
+export * from '@react-email/row';
+export * from '@react-email/section';
+export * from '@react-email/tailwind';
+export * from '@react-email/text';
diff --git a/packages/email/mailer.ts b/packages/email/mailer.ts
index 92a30522c..3956e6a2b 100644
--- a/packages/email/mailer.ts
+++ b/packages/email/mailer.ts
@@ -42,12 +42,8 @@ const getTransport = () => {
});
}
- if (!process.env.NEXT_PRIVATE_SMTP_HOST) {
- throw new Error('SMTP transport requires NEXT_PRIVATE_SMTP_HOST');
- }
-
return createTransport({
- host: process.env.NEXT_PRIVATE_SMTP_HOST,
+ host: process.env.NEXT_PRIVATE_SMTP_HOST ?? 'localhost:2500',
port: Number(process.env.NEXT_PRIVATE_SMTP_PORT) || 587,
secure: process.env.NEXT_PRIVATE_SMTP_SECURE === 'true',
auth: {
diff --git a/packages/email/package.json b/packages/email/package.json
index 4b23512ce..d41a4c24c 100644
--- a/packages/email/package.json
+++ b/packages/email/package.json
@@ -17,11 +17,27 @@
"worker:test": "tsup worker/index.ts --format esm"
},
"dependencies": {
- "@documenso/nodemailer-resend": "1.0.0",
- "@react-email/components": "^0.0.7",
+ "@documenso/nodemailer-resend": "2.0.0",
+ "@react-email/body": "0.0.4",
+ "@react-email/button": "0.0.11",
+ "@react-email/column": "0.0.8",
+ "@react-email/container": "0.0.10",
+ "@react-email/font": "0.0.4",
+ "@react-email/head": "0.0.6",
+ "@react-email/heading": "0.0.9",
+ "@react-email/hr": "0.0.6",
+ "@react-email/html": "0.0.6",
+ "@react-email/img": "0.0.6",
+ "@react-email/link": "0.0.6",
+ "@react-email/preview": "0.0.7",
+ "@react-email/render": "0.0.9",
+ "@react-email/row": "0.0.6",
+ "@react-email/section": "0.0.10",
+ "@react-email/tailwind": "0.0.9",
+ "@react-email/text": "0.0.6",
"nodemailer": "^6.9.3",
- "react-email": "^1.9.4",
- "resend": "^1.1.0"
+ "react-email": "^1.9.5",
+ "resend": "^2.0.0"
},
"devDependencies": {
"@documenso/tailwind-config": "*",
diff --git a/packages/email/render.ts b/packages/email/render.ts
index f39aa13ba..46f0d62a5 100644
--- a/packages/email/render.ts
+++ b/packages/email/render.ts
@@ -1 +1 @@
-export { render } from '@react-email/components';
+export { render, renderAsync } from '@react-email/render';
diff --git a/packages/email/template-components/template-confirmation-email.tsx b/packages/email/template-components/template-confirmation-email.tsx
new file mode 100644
index 000000000..1036faa3e
--- /dev/null
+++ b/packages/email/template-components/template-confirmation-email.tsx
@@ -0,0 +1,41 @@
+import { Button, Section, Text } from '../components';
+import { TemplateDocumentImage } from './template-document-image';
+
+export type TemplateConfirmationEmailProps = {
+ confirmationLink: string;
+ assetBaseUrl: string;
+};
+
+export const TemplateConfirmationEmail = ({
+ confirmationLink,
+ assetBaseUrl,
+}: TemplateConfirmationEmailProps) => {
+ return (
+ <>
+
+
+
+
+ Welcome to Documenso!
+
+
+
+ Before you get started, please confirm your email address by clicking the button below:
+
+
+
+
+ Confirm email
+
+
+ You can also copy and paste this link into your browser: {confirmationLink} (link
+ expires in 1 hour)
+
+
+
+ >
+ );
+};
diff --git a/packages/email/template-components/template-document-cancel.tsx b/packages/email/template-components/template-document-cancel.tsx
new file mode 100644
index 000000000..885cb6c80
--- /dev/null
+++ b/packages/email/template-components/template-document-cancel.tsx
@@ -0,0 +1,34 @@
+import { Section, Text } from '../components';
+import { TemplateDocumentImage } from './template-document-image';
+
+export interface TemplateDocumentCancelProps {
+ inviterName: string;
+ inviterEmail: string;
+ documentName: string;
+ assetBaseUrl: string;
+}
+
+export const TemplateDocumentCancel = ({
+ inviterName,
+ documentName,
+ assetBaseUrl,
+}: TemplateDocumentCancelProps) => {
+ return (
+ <>
+
+
+
+
+ {inviterName} has cancelled the document
+
"{documentName}"
+
+
+
+ You don't need to sign it anymore.
+
+
+ >
+ );
+};
+
+export default TemplateDocumentCancel;
diff --git a/packages/email/template-components/template-document-completed.tsx b/packages/email/template-components/template-document-completed.tsx
index c67fb4017..573432284 100644
--- a/packages/email/template-components/template-document-completed.tsx
+++ b/packages/email/template-components/template-document-completed.tsx
@@ -1,7 +1,4 @@
-import { Button, Column, Img, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Button, Column, Img, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export interface TemplateDocumentCompletedProps {
@@ -20,15 +17,7 @@ export const TemplateDocumentCompleted = ({
};
return (
-
+ <>
@@ -72,7 +61,7 @@ export const TemplateDocumentCompleted = ({
-
+ >
);
};
diff --git a/packages/email/template-components/template-document-image.tsx b/packages/email/template-components/template-document-image.tsx
index d18140024..bf2212f4a 100644
--- a/packages/email/template-components/template-document-image.tsx
+++ b/packages/email/template-components/template-document-image.tsx
@@ -1,4 +1,4 @@
-import { Column, Img, Row, Section } from '@react-email/components';
+import { Column, Img, Row, Section } from '../components';
export interface TemplateDocumentImageProps {
assetBaseUrl: string;
diff --git a/packages/email/template-components/template-document-invite.tsx b/packages/email/template-components/template-document-invite.tsx
index 0e2837aa6..216a3183d 100644
--- a/packages/email/template-components/template-document-invite.tsx
+++ b/packages/email/template-components/template-document-invite.tsx
@@ -1,7 +1,4 @@
-import { Button, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Button, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export interface TemplateDocumentInviteProps {
@@ -19,15 +16,7 @@ export const TemplateDocumentInvite = ({
assetBaseUrl,
}: TemplateDocumentInviteProps) => {
return (
-
+ <>
@@ -49,7 +38,7 @@ export const TemplateDocumentInvite = ({
-
+ >
);
};
diff --git a/packages/email/template-components/template-document-pending.tsx b/packages/email/template-components/template-document-pending.tsx
index 632433ae3..f03d7bdbb 100644
--- a/packages/email/template-components/template-document-pending.tsx
+++ b/packages/email/template-components/template-document-pending.tsx
@@ -1,7 +1,4 @@
-import { Column, Img, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Column, Img, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export interface TemplateDocumentPendingProps {
@@ -18,15 +15,7 @@ export const TemplateDocumentPending = ({
};
return (
-
+ <>
@@ -52,7 +41,7 @@ export const TemplateDocumentPending = ({
We'll notify you as soon as it's ready.
-
+ >
);
};
diff --git a/packages/email/template-components/template-document-self-signed.tsx b/packages/email/template-components/template-document-self-signed.tsx
index 604dd5274..90a1d3951 100644
--- a/packages/email/template-components/template-document-self-signed.tsx
+++ b/packages/email/template-components/template-document-self-signed.tsx
@@ -1,7 +1,4 @@
-import { Button, Column, Img, Link, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Button, Column, Img, Link, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export interface TemplateDocumentSelfSignedProps {
@@ -20,15 +17,7 @@ export const TemplateDocumentSelfSigned = ({
};
return (
-
+ <>
@@ -84,7 +73,7 @@ export const TemplateDocumentSelfSigned = ({
-
+ >
);
};
diff --git a/packages/email/template-components/template-footer.tsx b/packages/email/template-components/template-footer.tsx
index 21da49130..4a9e2c7cf 100644
--- a/packages/email/template-components/template-footer.tsx
+++ b/packages/email/template-components/template-footer.tsx
@@ -1,4 +1,4 @@
-import { Link, Section, Text } from '@react-email/components';
+import { Link, Section, Text } from '../components';
export type TemplateFooterProps = {
isDocument?: boolean;
diff --git a/packages/email/template-components/template-forgot-password.tsx b/packages/email/template-components/template-forgot-password.tsx
index 1f1d0438d..c8227b2bd 100644
--- a/packages/email/template-components/template-forgot-password.tsx
+++ b/packages/email/template-components/template-forgot-password.tsx
@@ -1,7 +1,4 @@
-import { Button, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Button, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export type TemplateForgotPasswordProps = {
@@ -14,15 +11,7 @@ export const TemplateForgotPassword = ({
assetBaseUrl,
}: TemplateForgotPasswordProps) => {
return (
-
+ <>
@@ -43,7 +32,7 @@ export const TemplateForgotPassword = ({
-
+ >
);
};
diff --git a/packages/email/template-components/template-reset-password.tsx b/packages/email/template-components/template-reset-password.tsx
index 45f81be06..8788d60b8 100644
--- a/packages/email/template-components/template-reset-password.tsx
+++ b/packages/email/template-components/template-reset-password.tsx
@@ -1,7 +1,4 @@
-import { Button, Section, Tailwind, Text } from '@react-email/components';
-
-import * as config from '@documenso/tailwind-config';
-
+import { Button, Section, Text } from '../components';
import { TemplateDocumentImage } from './template-document-image';
export interface TemplateResetPasswordProps {
@@ -12,15 +9,7 @@ export interface TemplateResetPasswordProps {
export const TemplateResetPassword = ({ assetBaseUrl }: TemplateResetPasswordProps) => {
return (
-
+ <>
@@ -41,7 +30,7 @@ export const TemplateResetPassword = ({ assetBaseUrl }: TemplateResetPasswordPro
-
+ >
);
};
diff --git a/packages/email/templates/confirm-email.tsx b/packages/email/templates/confirm-email.tsx
new file mode 100644
index 000000000..b3acd1ecd
--- /dev/null
+++ b/packages/email/templates/confirm-email.tsx
@@ -0,0 +1,57 @@
+import config from '@documenso/tailwind-config';
+
+import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components';
+import type { TemplateConfirmationEmailProps } from '../template-components/template-confirmation-email';
+import { TemplateConfirmationEmail } from '../template-components/template-confirmation-email';
+import { TemplateFooter } from '../template-components/template-footer';
+
+export const ConfirmEmailTemplate = ({
+ confirmationLink,
+ assetBaseUrl,
+}: TemplateConfirmationEmailProps) => {
+ const previewText = `Please confirm your email address`;
+
+ const getAssetUrl = (path: string) => {
+ return new URL(path, assetBaseUrl).toString();
+ };
+
+ return (
+
+
+
{previewText}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/email/templates/document-cancel.tsx b/packages/email/templates/document-cancel.tsx
new file mode 100644
index 000000000..66892bccc
--- /dev/null
+++ b/packages/email/templates/document-cancel.tsx
@@ -0,0 +1,66 @@
+import config from '@documenso/tailwind-config';
+
+import { Body, Container, Head, Hr, Html, Img, Preview, Section, Tailwind } from '../components';
+import type { TemplateDocumentCancelProps } from '../template-components/template-document-cancel';
+import { TemplateDocumentCancel } from '../template-components/template-document-cancel';
+import { TemplateFooter } from '../template-components/template-footer';
+
+export type DocumentCancelEmailTemplateProps = Partial
;
+
+export const DocumentCancelTemplate = ({
+ inviterName = 'Lucas Smith',
+ inviterEmail = 'lucas@documenso.com',
+ documentName = 'Open Source Pledge.pdf',
+ assetBaseUrl = 'http://localhost:3002',
+}: DocumentCancelEmailTemplateProps) => {
+ const previewText = `${inviterName} has cancelled the document ${documentName}, you don't need to sign it anymore.`;
+
+ const getAssetUrl = (path: string) => {
+ return new URL(path, assetBaseUrl).toString();
+ };
+
+ return (
+
+
+
{previewText}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default DocumentCancelTemplate;
diff --git a/packages/email/templates/document-completed.tsx b/packages/email/templates/document-completed.tsx
index a5a1a02ba..9ee339097 100644
--- a/packages/email/templates/document-completed.tsx
+++ b/packages/email/templates/document-completed.tsx
@@ -1,20 +1,8 @@
-import {
- Body,
- Container,
- Head,
- Html,
- Img,
- Preview,
- Section,
- Tailwind,
-} from '@react-email/components';
-
import config from '@documenso/tailwind-config';
-import {
- TemplateDocumentCompleted,
- TemplateDocumentCompletedProps,
-} from '../template-components/template-document-completed';
+import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components';
+import type { TemplateDocumentCompletedProps } from '../template-components/template-document-completed';
+import { TemplateDocumentCompleted } from '../template-components/template-document-completed';
import { TemplateFooter } from '../template-components/template-footer';
export type DocumentCompletedEmailTemplateProps = Partial
;
diff --git a/packages/email/templates/document-invite.tsx b/packages/email/templates/document-invite.tsx
index fd366ad30..d6a45d5fc 100644
--- a/packages/email/templates/document-invite.tsx
+++ b/packages/email/templates/document-invite.tsx
@@ -1,3 +1,5 @@
+import config from '@documenso/tailwind-config';
+
import {
Body,
Container,
@@ -10,14 +12,9 @@ import {
Section,
Tailwind,
Text,
-} from '@react-email/components';
-
-import config from '@documenso/tailwind-config';
-
-import {
- TemplateDocumentInvite,
- TemplateDocumentInviteProps,
-} from '../template-components/template-document-invite';
+} from '../components';
+import type { TemplateDocumentInviteProps } from '../template-components/template-document-invite';
+import { TemplateDocumentInvite } from '../template-components/template-document-invite';
import { TemplateFooter } from '../template-components/template-footer';
export type DocumentInviteEmailTemplateProps = Partial & {
diff --git a/packages/email/templates/document-pending.tsx b/packages/email/templates/document-pending.tsx
index 0ed768747..f14671e10 100644
--- a/packages/email/templates/document-pending.tsx
+++ b/packages/email/templates/document-pending.tsx
@@ -1,20 +1,8 @@
-import {
- Body,
- Container,
- Head,
- Html,
- Img,
- Preview,
- Section,
- Tailwind,
-} from '@react-email/components';
-
import config from '@documenso/tailwind-config';
-import {
- TemplateDocumentPending,
- TemplateDocumentPendingProps,
-} from '../template-components/template-document-pending';
+import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components';
+import type { TemplateDocumentPendingProps } from '../template-components/template-document-pending';
+import { TemplateDocumentPending } from '../template-components/template-document-pending';
import { TemplateFooter } from '../template-components/template-footer';
export type DocumentPendingEmailTemplateProps = Partial;
diff --git a/packages/email/templates/document-self-signed.tsx b/packages/email/templates/document-self-signed.tsx
index 91b2d29f6..aa1c89b10 100644
--- a/packages/email/templates/document-self-signed.tsx
+++ b/packages/email/templates/document-self-signed.tsx
@@ -1,20 +1,8 @@
-import {
- Body,
- Container,
- Head,
- Html,
- Img,
- Preview,
- Section,
- Tailwind,
-} from '@react-email/components';
-
import config from '@documenso/tailwind-config';
-import {
- TemplateDocumentSelfSigned,
- TemplateDocumentSelfSignedProps,
-} from '../template-components/template-document-self-signed';
+import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components';
+import type { TemplateDocumentSelfSignedProps } from '../template-components/template-document-self-signed';
+import { TemplateDocumentSelfSigned } from '../template-components/template-document-self-signed';
import { TemplateFooter } from '../template-components/template-footer';
export type DocumentSelfSignedTemplateProps = TemplateDocumentSelfSignedProps;
diff --git a/packages/email/templates/forgot-password.tsx b/packages/email/templates/forgot-password.tsx
index 61df2ccc3..7fe62cd20 100644
--- a/packages/email/templates/forgot-password.tsx
+++ b/packages/email/templates/forgot-password.tsx
@@ -1,21 +1,9 @@
-import {
- Body,
- Container,
- Head,
- Html,
- Img,
- Preview,
- Section,
- Tailwind,
-} from '@react-email/components';
-
import config from '@documenso/tailwind-config';
+import { Body, Container, Head, Html, Img, Preview, Section, Tailwind } from '../components';
import { TemplateFooter } from '../template-components/template-footer';
-import {
- TemplateForgotPassword,
- TemplateForgotPasswordProps,
-} from '../template-components/template-forgot-password';
+import type { TemplateForgotPasswordProps } from '../template-components/template-forgot-password';
+import { TemplateForgotPassword } from '../template-components/template-forgot-password';
export type ForgotPasswordTemplateProps = Partial;
diff --git a/packages/email/templates/reset-password.tsx b/packages/email/templates/reset-password.tsx
index ed9929ec7..c6c1201c6 100644
--- a/packages/email/templates/reset-password.tsx
+++ b/packages/email/templates/reset-password.tsx
@@ -1,3 +1,5 @@
+import config from '@documenso/tailwind-config';
+
import {
Body,
Container,
@@ -10,15 +12,10 @@ import {
Section,
Tailwind,
Text,
-} from '@react-email/components';
-
-import config from '@documenso/tailwind-config';
-
+} from '../components';
import { TemplateFooter } from '../template-components/template-footer';
-import {
- TemplateResetPassword,
- TemplateResetPasswordProps,
-} from '../template-components/template-reset-password';
+import type { TemplateResetPasswordProps } from '../template-components/template-reset-password';
+import { TemplateResetPassword } from '../template-components/template-reset-password';
export type ResetPasswordTemplateProps = Partial;
diff --git a/packages/lib/constants/crypto.ts b/packages/lib/constants/crypto.ts
new file mode 100644
index 000000000..d911cd6cf
--- /dev/null
+++ b/packages/lib/constants/crypto.ts
@@ -0,0 +1 @@
+export const DOCUMENSO_ENCRYPTION_KEY = process.env.NEXT_PRIVATE_ENCRYPTION_KEY;
diff --git a/packages/lib/next-auth/auth-options.ts b/packages/lib/next-auth/auth-options.ts
index cd7692e52..6d59b0666 100644
--- a/packages/lib/next-auth/auth-options.ts
+++ b/packages/lib/next-auth/auth-options.ts
@@ -1,12 +1,17 @@
+///
import { PrismaAdapter } from '@next-auth/prisma-adapter';
import { compare } from 'bcrypt';
import { DateTime } from 'luxon';
-import { AuthOptions, Session, User } from 'next-auth';
+import type { AuthOptions, Session, User } from 'next-auth';
+import type { JWT } from 'next-auth/jwt';
import CredentialsProvider from 'next-auth/providers/credentials';
-import GoogleProvider, { GoogleProfile } from 'next-auth/providers/google';
+import type { GoogleProfile } from 'next-auth/providers/google';
+import GoogleProvider from 'next-auth/providers/google';
import { prisma } from '@documenso/prisma';
+import { isTwoFactorAuthenticationEnabled } from '../server-only/2fa/is-2fa-availble';
+import { validateTwoFactorAuthentication } from '../server-only/2fa/validate-2fa';
import { getUserByEmail } from '../server-only/user/get-user-by-email';
import { ErrorCode } from './error-codes';
@@ -22,13 +27,19 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
credentials: {
email: { label: 'Email', type: 'email' },
password: { label: 'Password', type: 'password' },
+ totpCode: {
+ label: 'Two-factor Code',
+ type: 'input',
+ placeholder: 'Code from authenticator app',
+ },
+ backupCode: { label: 'Backup Code', type: 'input', placeholder: 'Two-factor backup code' },
},
authorize: async (credentials, _req) => {
if (!credentials) {
throw new Error(ErrorCode.CREDENTIALS_NOT_FOUND);
}
- const { email, password } = credentials;
+ const { email, password, backupCode, totpCode } = credentials;
const user = await getUserByEmail({ email }).catch(() => {
throw new Error(ErrorCode.INCORRECT_EMAIL_PASSWORD);
@@ -44,10 +55,25 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
throw new Error(ErrorCode.INCORRECT_EMAIL_PASSWORD);
}
+ const is2faEnabled = isTwoFactorAuthenticationEnabled({ user });
+
+ if (is2faEnabled) {
+ const isValid = await validateTwoFactorAuthentication({ backupCode, totpCode, user });
+
+ if (!isValid) {
+ throw new Error(
+ totpCode
+ ? ErrorCode.INCORRECT_TWO_FACTOR_CODE
+ : ErrorCode.INCORRECT_TWO_FACTOR_BACKUP_CODE,
+ );
+ }
+ }
+
return {
id: Number(user.id),
email: user.email,
name: user.name,
+ emailVerified: user.emailVerified?.toISOString() ?? null,
} satisfies User;
},
}),
@@ -61,6 +87,7 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
id: Number(profile.sub),
name: profile.name || `${profile.given_name} ${profile.family_name}`.trim(),
email: profile.email,
+ emailVerified: profile.email_verified ? new Date().toISOString() : null,
};
},
}),
@@ -70,9 +97,10 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
const merged = {
...token,
...user,
- };
+ emailVerified: user?.emailVerified ? new Date(user.emailVerified).toISOString() : null,
+ } satisfies JWT;
- if (!merged.email) {
+ if (!merged.email || typeof merged.emailVerified !== 'string') {
const userId = Number(merged.id ?? token.sub);
const retrieved = await prisma.user.findFirst({
@@ -88,6 +116,7 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
merged.id = retrieved.id;
merged.name = retrieved.name;
merged.email = retrieved.email;
+ merged.emailVerified = retrieved.emailVerified?.toISOString() ?? null;
}
if (
@@ -97,7 +126,7 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
) {
merged.lastSignedIn = new Date().toISOString();
- await prisma.user.update({
+ const user = await prisma.user.update({
where: {
id: Number(merged.id),
},
@@ -105,6 +134,8 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
lastSignedIn: merged.lastSignedIn,
},
});
+
+ merged.emailVerified = user.emailVerified?.toISOString() ?? null;
}
return {
@@ -112,7 +143,8 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
name: merged.name,
email: merged.email,
lastSignedIn: merged.lastSignedIn,
- };
+ emailVerified: merged.emailVerified,
+ } satisfies JWT;
},
session({ token, session }) {
@@ -123,6 +155,7 @@ export const NEXT_AUTH_OPTIONS: AuthOptions = {
id: Number(token.id),
name: token.name,
email: token.email,
+ emailVerified: token.emailVerified ?? null,
},
} satisfies Session;
}
diff --git a/packages/lib/next-auth/error-codes.ts b/packages/lib/next-auth/error-codes.ts
index 26e8f5b97..c3dfafece 100644
--- a/packages/lib/next-auth/error-codes.ts
+++ b/packages/lib/next-auth/error-codes.ts
@@ -8,4 +8,15 @@ export const ErrorCode = {
INCORRECT_EMAIL_PASSWORD: 'INCORRECT_EMAIL_PASSWORD',
USER_MISSING_PASSWORD: 'USER_MISSING_PASSWORD',
CREDENTIALS_NOT_FOUND: 'CREDENTIALS_NOT_FOUND',
+ INTERNAL_SEVER_ERROR: 'INTERNAL_SEVER_ERROR',
+ TWO_FACTOR_ALREADY_ENABLED: 'TWO_FACTOR_ALREADY_ENABLED',
+ TWO_FACTOR_SETUP_REQUIRED: 'TWO_FACTOR_SETUP_REQUIRED',
+ TWO_FACTOR_MISSING_SECRET: 'TWO_FACTOR_MISSING_SECRET',
+ TWO_FACTOR_MISSING_CREDENTIALS: 'TWO_FACTOR_MISSING_CREDENTIALS',
+ INCORRECT_TWO_FACTOR_CODE: 'INCORRECT_TWO_FACTOR_CODE',
+ INCORRECT_TWO_FACTOR_BACKUP_CODE: 'INCORRECT_TWO_FACTOR_BACKUP_CODE',
+ INCORRECT_IDENTITY_PROVIDER: 'INCORRECT_IDENTITY_PROVIDER',
+ INCORRECT_PASSWORD: 'INCORRECT_PASSWORD',
+ MISSING_ENCRYPTION_KEY: 'MISSING_ENCRYPTION_KEY',
+ MISSING_BACKUP_CODE: 'MISSING_BACKUP_CODE',
} as const;
diff --git a/packages/lib/package.json b/packages/lib/package.json
index 482866d63..41558e2e0 100644
--- a/packages/lib/package.json
+++ b/packages/lib/package.json
@@ -20,10 +20,13 @@
"@aws-sdk/cloudfront-signer": "^3.410.0",
"@aws-sdk/s3-request-presigner": "^3.410.0",
"@aws-sdk/signature-v4-crt": "^3.410.0",
+ "@documenso/assets": "*",
"@documenso/email": "*",
"@documenso/prisma": "*",
"@documenso/signing": "*",
"@next-auth/prisma-adapter": "1.0.7",
+ "@noble/ciphers": "0.4.0",
+ "@noble/hashes": "1.3.2",
"@pdf-lib/fontkit": "^1.1.1",
"@scure/base": "^1.1.3",
"@sindresorhus/slugify": "^2.2.1",
@@ -31,8 +34,9 @@
"bcrypt": "^5.1.0",
"luxon": "^3.4.0",
"nanoid": "^4.0.2",
- "next": "14.0.0",
- "next-auth": "4.24.3",
+ "next": "14.0.3",
+ "next-auth": "4.24.5",
+ "oslo": "^0.17.0",
"pdf-lib": "^1.17.1",
"react": "18.2.0",
"remeda": "^1.27.1",
diff --git a/packages/lib/server-only/2fa/disable-2fa.ts b/packages/lib/server-only/2fa/disable-2fa.ts
new file mode 100644
index 000000000..5b27d5c9d
--- /dev/null
+++ b/packages/lib/server-only/2fa/disable-2fa.ts
@@ -0,0 +1,48 @@
+import { compare } from 'bcrypt';
+
+import { prisma } from '@documenso/prisma';
+import { User } from '@documenso/prisma/client';
+
+import { ErrorCode } from '../../next-auth/error-codes';
+import { validateTwoFactorAuthentication } from './validate-2fa';
+
+type DisableTwoFactorAuthenticationOptions = {
+ user: User;
+ backupCode: string;
+ password: string;
+};
+
+export const disableTwoFactorAuthentication = async ({
+ backupCode,
+ user,
+ password,
+}: DisableTwoFactorAuthenticationOptions) => {
+ if (!user.password) {
+ throw new Error(ErrorCode.USER_MISSING_PASSWORD);
+ }
+
+ const isCorrectPassword = await compare(password, user.password);
+
+ if (!isCorrectPassword) {
+ throw new Error(ErrorCode.INCORRECT_PASSWORD);
+ }
+
+ const isValid = await validateTwoFactorAuthentication({ backupCode, user });
+
+ if (!isValid) {
+ throw new Error(ErrorCode.INCORRECT_TWO_FACTOR_BACKUP_CODE);
+ }
+
+ await prisma.user.update({
+ where: {
+ id: user.id,
+ },
+ data: {
+ twoFactorEnabled: false,
+ twoFactorBackupCodes: null,
+ twoFactorSecret: null,
+ },
+ });
+
+ return true;
+};
diff --git a/packages/lib/server-only/2fa/enable-2fa.ts b/packages/lib/server-only/2fa/enable-2fa.ts
new file mode 100644
index 000000000..9f61e52a4
--- /dev/null
+++ b/packages/lib/server-only/2fa/enable-2fa.ts
@@ -0,0 +1,47 @@
+import { ErrorCode } from '@documenso/lib/next-auth/error-codes';
+import { prisma } from '@documenso/prisma';
+import { User } from '@documenso/prisma/client';
+
+import { getBackupCodes } from './get-backup-code';
+import { verifyTwoFactorAuthenticationToken } from './verify-2fa-token';
+
+type EnableTwoFactorAuthenticationOptions = {
+ user: User;
+ code: string;
+};
+
+export const enableTwoFactorAuthentication = async ({
+ user,
+ code,
+}: EnableTwoFactorAuthenticationOptions) => {
+ if (user.identityProvider !== 'DOCUMENSO') {
+ throw new Error(ErrorCode.INCORRECT_IDENTITY_PROVIDER);
+ }
+
+ if (user.twoFactorEnabled) {
+ throw new Error(ErrorCode.TWO_FACTOR_ALREADY_ENABLED);
+ }
+
+ if (!user.twoFactorSecret) {
+ throw new Error(ErrorCode.TWO_FACTOR_SETUP_REQUIRED);
+ }
+
+ const isValidToken = await verifyTwoFactorAuthenticationToken({ user, totpCode: code });
+
+ if (!isValidToken) {
+ throw new Error(ErrorCode.INCORRECT_TWO_FACTOR_CODE);
+ }
+
+ const updatedUser = await prisma.user.update({
+ where: {
+ id: user.id,
+ },
+ data: {
+ twoFactorEnabled: true,
+ },
+ });
+
+ const recoveryCodes = getBackupCodes({ user: updatedUser });
+
+ return { recoveryCodes };
+};
diff --git a/packages/lib/server-only/2fa/get-backup-code.ts b/packages/lib/server-only/2fa/get-backup-code.ts
new file mode 100644
index 000000000..e1188f37a
--- /dev/null
+++ b/packages/lib/server-only/2fa/get-backup-code.ts
@@ -0,0 +1,38 @@
+import { z } from 'zod';
+
+import { User } from '@documenso/prisma/client';
+
+import { DOCUMENSO_ENCRYPTION_KEY } from '../../constants/crypto';
+import { symmetricDecrypt } from '../../universal/crypto';
+
+interface GetBackupCodesOptions {
+ user: User;
+}
+
+const ZBackupCodeSchema = z.array(z.string());
+
+export const getBackupCodes = ({ user }: GetBackupCodesOptions) => {
+ const key = DOCUMENSO_ENCRYPTION_KEY;
+
+ if (!user.twoFactorEnabled) {
+ throw new Error('User has not enabled 2FA');
+ }
+
+ if (!user.twoFactorBackupCodes) {
+ throw new Error('User has no backup codes');
+ }
+
+ const secret = Buffer.from(symmetricDecrypt({ key, data: user.twoFactorBackupCodes })).toString(
+ 'utf-8',
+ );
+
+ const data = JSON.parse(secret);
+
+ const result = ZBackupCodeSchema.safeParse(data);
+
+ if (result.success) {
+ return result.data;
+ }
+
+ return null;
+};
diff --git a/packages/lib/server-only/2fa/is-2fa-availble.ts b/packages/lib/server-only/2fa/is-2fa-availble.ts
new file mode 100644
index 000000000..d06a0085d
--- /dev/null
+++ b/packages/lib/server-only/2fa/is-2fa-availble.ts
@@ -0,0 +1,17 @@
+import { User } from '@documenso/prisma/client';
+
+import { DOCUMENSO_ENCRYPTION_KEY } from '../../constants/crypto';
+
+type IsTwoFactorAuthenticationEnabledOptions = {
+ user: User;
+};
+
+export const isTwoFactorAuthenticationEnabled = ({
+ user,
+}: IsTwoFactorAuthenticationEnabledOptions) => {
+ return (
+ user.twoFactorEnabled &&
+ user.identityProvider === 'DOCUMENSO' &&
+ typeof DOCUMENSO_ENCRYPTION_KEY === 'string'
+ );
+};
diff --git a/packages/lib/server-only/2fa/setup-2fa.ts b/packages/lib/server-only/2fa/setup-2fa.ts
new file mode 100644
index 000000000..30ddf0ec3
--- /dev/null
+++ b/packages/lib/server-only/2fa/setup-2fa.ts
@@ -0,0 +1,76 @@
+import { base32 } from '@scure/base';
+import { compare } from 'bcrypt';
+import crypto from 'crypto';
+import { createTOTPKeyURI } from 'oslo/otp';
+
+import { ErrorCode } from '@documenso/lib/next-auth/error-codes';
+import { prisma } from '@documenso/prisma';
+import { User } from '@documenso/prisma/client';
+
+import { DOCUMENSO_ENCRYPTION_KEY } from '../../constants/crypto';
+import { symmetricEncrypt } from '../../universal/crypto';
+
+type SetupTwoFactorAuthenticationOptions = {
+ user: User;
+ password: string;
+};
+
+const ISSUER = 'Documenso';
+
+export const setupTwoFactorAuthentication = async ({
+ user,
+ password,
+}: SetupTwoFactorAuthenticationOptions) => {
+ const key = DOCUMENSO_ENCRYPTION_KEY;
+
+ if (!key) {
+ throw new Error(ErrorCode.MISSING_ENCRYPTION_KEY);
+ }
+
+ if (user.identityProvider !== 'DOCUMENSO') {
+ throw new Error(ErrorCode.INCORRECT_IDENTITY_PROVIDER);
+ }
+
+ if (!user.password) {
+ throw new Error(ErrorCode.USER_MISSING_PASSWORD);
+ }
+
+ const isCorrectPassword = await compare(password, user.password);
+
+ if (!isCorrectPassword) {
+ throw new Error(ErrorCode.INCORRECT_PASSWORD);
+ }
+
+ const secret = crypto.randomBytes(10);
+
+ const backupCodes = new Array(10)
+ .fill(null)
+ .map(() => crypto.randomBytes(5).toString('hex'))
+ .map((code) => `${code.slice(0, 5)}-${code.slice(5)}`.toUpperCase());
+
+ const accountName = user.email;
+ const uri = createTOTPKeyURI(ISSUER, accountName, secret);
+ const encodedSecret = base32.encode(secret);
+
+ await prisma.user.update({
+ where: {
+ id: user.id,
+ },
+ data: {
+ twoFactorEnabled: false,
+ twoFactorBackupCodes: symmetricEncrypt({
+ data: JSON.stringify(backupCodes),
+ key: key,
+ }),
+ twoFactorSecret: symmetricEncrypt({
+ data: encodedSecret,
+ key: key,
+ }),
+ },
+ });
+
+ return {
+ secret: encodedSecret,
+ uri,
+ };
+};
diff --git a/packages/lib/server-only/2fa/validate-2fa.ts b/packages/lib/server-only/2fa/validate-2fa.ts
new file mode 100644
index 000000000..7fc76a8bb
--- /dev/null
+++ b/packages/lib/server-only/2fa/validate-2fa.ts
@@ -0,0 +1,35 @@
+import { User } from '@documenso/prisma/client';
+
+import { ErrorCode } from '../../next-auth/error-codes';
+import { verifyTwoFactorAuthenticationToken } from './verify-2fa-token';
+import { verifyBackupCode } from './verify-backup-code';
+
+type ValidateTwoFactorAuthenticationOptions = {
+ totpCode?: string;
+ backupCode?: string;
+ user: User;
+};
+
+export const validateTwoFactorAuthentication = async ({
+ backupCode,
+ totpCode,
+ user,
+}: ValidateTwoFactorAuthenticationOptions) => {
+ if (!user.twoFactorEnabled) {
+ throw new Error(ErrorCode.TWO_FACTOR_SETUP_REQUIRED);
+ }
+
+ if (!user.twoFactorSecret) {
+ throw new Error(ErrorCode.TWO_FACTOR_MISSING_SECRET);
+ }
+
+ if (totpCode) {
+ return await verifyTwoFactorAuthenticationToken({ user, totpCode });
+ }
+
+ if (backupCode) {
+ return await verifyBackupCode({ user, backupCode });
+ }
+
+ throw new Error(ErrorCode.TWO_FACTOR_MISSING_CREDENTIALS);
+};
diff --git a/packages/lib/server-only/2fa/verify-2fa-token.ts b/packages/lib/server-only/2fa/verify-2fa-token.ts
new file mode 100644
index 000000000..fa9159517
--- /dev/null
+++ b/packages/lib/server-only/2fa/verify-2fa-token.ts
@@ -0,0 +1,33 @@
+import { base32 } from '@scure/base';
+import { TOTPController } from 'oslo/otp';
+
+import { User } from '@documenso/prisma/client';
+
+import { DOCUMENSO_ENCRYPTION_KEY } from '../../constants/crypto';
+import { symmetricDecrypt } from '../../universal/crypto';
+
+const totp = new TOTPController();
+
+type VerifyTwoFactorAuthenticationTokenOptions = {
+ user: User;
+ totpCode: string;
+};
+
+export const verifyTwoFactorAuthenticationToken = async ({
+ user,
+ totpCode,
+}: VerifyTwoFactorAuthenticationTokenOptions) => {
+ const key = DOCUMENSO_ENCRYPTION_KEY;
+
+ if (!user.twoFactorSecret) {
+ throw new Error('user missing 2fa secret');
+ }
+
+ const secret = Buffer.from(symmetricDecrypt({ key, data: user.twoFactorSecret })).toString(
+ 'utf-8',
+ );
+
+ const isValidToken = await totp.verify(totpCode, base32.decode(secret));
+
+ return isValidToken;
+};
diff --git a/packages/lib/server-only/2fa/verify-backup-code.ts b/packages/lib/server-only/2fa/verify-backup-code.ts
new file mode 100644
index 000000000..357d4994c
--- /dev/null
+++ b/packages/lib/server-only/2fa/verify-backup-code.ts
@@ -0,0 +1,18 @@
+import { User } from '@documenso/prisma/client';
+
+import { getBackupCodes } from './get-backup-code';
+
+type VerifyBackupCodeParams = {
+ user: User;
+ backupCode: string;
+};
+
+export const verifyBackupCode = async ({ user, backupCode }: VerifyBackupCodeParams) => {
+ const userBackupCodes = await getBackupCodes({ user });
+
+ if (!userBackupCodes) {
+ throw new Error('User has no backup codes');
+ }
+
+ return userBackupCodes.includes(backupCode);
+};
diff --git a/packages/lib/server-only/auth/hash.ts b/packages/lib/server-only/auth/hash.ts
index 1de2ac458..df9931c97 100644
--- a/packages/lib/server-only/auth/hash.ts
+++ b/packages/lib/server-only/auth/hash.ts
@@ -1,4 +1,4 @@
-import { hashSync as bcryptHashSync } from 'bcrypt';
+import { compareSync as bcryptCompareSync, hashSync as bcryptHashSync } from 'bcrypt';
import { SALT_ROUNDS } from '../../constants/auth';
@@ -8,3 +8,7 @@ import { SALT_ROUNDS } from '../../constants/auth';
export const hashSync = (password: string) => {
return bcryptHashSync(password, SALT_ROUNDS);
};
+
+export const compareSync = (password: string, hash: string) => {
+ return bcryptCompareSync(password, hash);
+};
diff --git a/packages/lib/server-only/auth/send-confirmation-email.ts b/packages/lib/server-only/auth/send-confirmation-email.ts
new file mode 100644
index 000000000..7defdb1bd
--- /dev/null
+++ b/packages/lib/server-only/auth/send-confirmation-email.ts
@@ -0,0 +1,56 @@
+import { createElement } from 'react';
+
+import { mailer } from '@documenso/email/mailer';
+import { render } from '@documenso/email/render';
+import { ConfirmEmailTemplate } from '@documenso/email/templates/confirm-email';
+import { prisma } from '@documenso/prisma';
+
+export interface SendConfirmationEmailProps {
+ userId: number;
+}
+
+export const sendConfirmationEmail = async ({ userId }: SendConfirmationEmailProps) => {
+ const user = await prisma.user.findFirstOrThrow({
+ where: {
+ id: userId,
+ },
+ include: {
+ VerificationToken: {
+ orderBy: {
+ createdAt: 'desc',
+ },
+ take: 1,
+ },
+ },
+ });
+
+ const [verificationToken] = user.VerificationToken;
+
+ if (!verificationToken?.token) {
+ throw new Error('Verification token not found for the user');
+ }
+
+ const assetBaseUrl = process.env.NEXT_PUBLIC_WEBAPP_URL || 'http://localhost:3000';
+ const confirmationLink = `${assetBaseUrl}/verify-email/${verificationToken.token}`;
+ const senderName = process.env.NEXT_PRIVATE_SMTP_FROM_NAME || 'Documenso';
+ const senderAdress = process.env.NEXT_PRIVATE_SMTP_FROM_ADDRESS || 'noreply@documenso.com';
+
+ const confirmationTemplate = createElement(ConfirmEmailTemplate, {
+ assetBaseUrl,
+ confirmationLink,
+ });
+
+ return mailer.sendMail({
+ to: {
+ address: user.email,
+ name: user.name || '',
+ },
+ from: {
+ name: senderName,
+ address: senderAdress,
+ },
+ subject: 'Please confirm your email',
+ html: render(confirmationTemplate),
+ text: render(confirmationTemplate, { plainText: true }),
+ });
+};
diff --git a/packages/lib/server-only/document/delete-document.ts b/packages/lib/server-only/document/delete-document.ts
new file mode 100644
index 000000000..22365a727
--- /dev/null
+++ b/packages/lib/server-only/document/delete-document.ts
@@ -0,0 +1,88 @@
+'use server';
+
+import { createElement } from 'react';
+
+import { mailer } from '@documenso/email/mailer';
+import { render } from '@documenso/email/render';
+import DocumentCancelTemplate from '@documenso/email/templates/document-cancel';
+import { prisma } from '@documenso/prisma';
+import { DocumentStatus } from '@documenso/prisma/client';
+
+import { FROM_ADDRESS, FROM_NAME } from '../../constants/email';
+
+export type DeleteDocumentOptions = {
+ id: number;
+ userId: number;
+ status: DocumentStatus;
+};
+
+export const deleteDocument = async ({ id, userId, status }: DeleteDocumentOptions) => {
+ // if the document is a draft, hard-delete
+ if (status === DocumentStatus.DRAFT) {
+ return await prisma.document.delete({ where: { id, userId, status: DocumentStatus.DRAFT } });
+ }
+
+ // if the document is pending, send cancellation emails to all recipients
+ if (status === DocumentStatus.PENDING) {
+ const user = await prisma.user.findFirstOrThrow({
+ where: {
+ id: userId,
+ },
+ });
+
+ const document = await prisma.document.findUnique({
+ where: {
+ id,
+ status,
+ userId,
+ },
+ include: {
+ Recipient: true,
+ documentMeta: true,
+ },
+ });
+
+ if (!document) {
+ throw new Error('Document not found');
+ }
+
+ if (document.Recipient.length > 0) {
+ await Promise.all(
+ document.Recipient.map(async (recipient) => {
+ const assetBaseUrl = process.env.NEXT_PUBLIC_WEBAPP_URL || 'http://localhost:3000';
+
+ const template = createElement(DocumentCancelTemplate, {
+ documentName: document.title,
+ inviterName: user.name || undefined,
+ inviterEmail: user.email,
+ assetBaseUrl,
+ });
+
+ await mailer.sendMail({
+ to: {
+ address: recipient.email,
+ name: recipient.name,
+ },
+ from: {
+ name: FROM_NAME,
+ address: FROM_ADDRESS,
+ },
+ subject: 'Document Cancelled',
+ html: render(template),
+ text: render(template, { plainText: true }),
+ });
+ }),
+ );
+ }
+ }
+
+ // If the document is not a draft, only soft-delete.
+ return await prisma.document.update({
+ where: {
+ id,
+ },
+ data: {
+ deletedAt: new Date().toISOString(),
+ },
+ });
+};
diff --git a/packages/lib/server-only/document/delete-draft-document.ts b/packages/lib/server-only/document/delete-draft-document.ts
deleted file mode 100644
index 6b0bc3511..000000000
--- a/packages/lib/server-only/document/delete-draft-document.ts
+++ /dev/null
@@ -1,13 +0,0 @@
-'use server';
-
-import { prisma } from '@documenso/prisma';
-import { DocumentStatus } from '@documenso/prisma/client';
-
-export type DeleteDraftDocumentOptions = {
- id: number;
- userId: number;
-};
-
-export const deleteDraftDocument = async ({ id, userId }: DeleteDraftDocumentOptions) => {
- return await prisma.document.delete({ where: { id, userId, status: DocumentStatus.DRAFT } });
-};
diff --git a/packages/lib/server-only/document/find-documents.ts b/packages/lib/server-only/document/find-documents.ts
index 20b7eb369..a27458a55 100644
--- a/packages/lib/server-only/document/find-documents.ts
+++ b/packages/lib/server-only/document/find-documents.ts
@@ -55,17 +55,25 @@ export const findDocuments = async ({
OR: [
{
userId,
+ deletedAt: null,
},
{
- status: {
- not: ExtendedDocumentStatus.DRAFT,
- },
+ status: ExtendedDocumentStatus.COMPLETED,
Recipient: {
some: {
email: user.email,
},
},
},
+ {
+ status: ExtendedDocumentStatus.PENDING,
+ Recipient: {
+ some: {
+ email: user.email,
+ },
+ },
+ deletedAt: null,
+ },
],
}))
.with(ExtendedDocumentStatus.INBOX, () => ({
@@ -78,26 +86,29 @@ export const findDocuments = async ({
signingStatus: SigningStatus.NOT_SIGNED,
},
},
+ deletedAt: null,
}))
.with(ExtendedDocumentStatus.DRAFT, () => ({
userId,
status: ExtendedDocumentStatus.DRAFT,
+ deletedAt: null,
}))
.with(ExtendedDocumentStatus.PENDING, () => ({
OR: [
{
userId,
status: ExtendedDocumentStatus.PENDING,
+ deletedAt: null,
},
{
status: ExtendedDocumentStatus.PENDING,
-
Recipient: {
some: {
email: user.email,
signingStatus: SigningStatus.SIGNED,
},
},
+ deletedAt: null,
},
],
}))
@@ -106,6 +117,7 @@ export const findDocuments = async ({
{
userId,
status: ExtendedDocumentStatus.COMPLETED,
+ deletedAt: null,
},
{
status: ExtendedDocumentStatus.COMPLETED,
diff --git a/packages/lib/server-only/document/get-stats.ts b/packages/lib/server-only/document/get-stats.ts
index 6e875f9be..a446b0007 100644
--- a/packages/lib/server-only/document/get-stats.ts
+++ b/packages/lib/server-only/document/get-stats.ts
@@ -1,5 +1,6 @@
import { prisma } from '@documenso/prisma';
-import { SigningStatus, User } from '@documenso/prisma/client';
+import type { User } from '@documenso/prisma/client';
+import { SigningStatus } from '@documenso/prisma/client';
import { isExtendedDocumentStatus } from '@documenso/prisma/guards/is-extended-document-status';
import { ExtendedDocumentStatus } from '@documenso/prisma/types/extended-document-status';
@@ -16,6 +17,7 @@ export const getStats = async ({ user }: GetStatsInput) => {
},
where: {
userId: user.id,
+ deletedAt: null,
},
}),
prisma.document.groupBy({
@@ -31,6 +33,7 @@ export const getStats = async ({ user }: GetStatsInput) => {
signingStatus: SigningStatus.NOT_SIGNED,
},
},
+ deletedAt: null,
},
}),
prisma.document.groupBy({
@@ -39,15 +42,27 @@ export const getStats = async ({ user }: GetStatsInput) => {
_all: true,
},
where: {
- status: {
- not: ExtendedDocumentStatus.DRAFT,
- },
- Recipient: {
- some: {
- email: user.email,
- signingStatus: SigningStatus.SIGNED,
+ OR: [
+ {
+ status: ExtendedDocumentStatus.PENDING,
+ Recipient: {
+ some: {
+ email: user.email,
+ signingStatus: SigningStatus.SIGNED,
+ },
+ },
+ deletedAt: null,
},
- },
+ {
+ status: ExtendedDocumentStatus.COMPLETED,
+ Recipient: {
+ some: {
+ email: user.email,
+ signingStatus: SigningStatus.SIGNED,
+ },
+ },
+ },
+ ],
},
}),
]);
diff --git a/packages/lib/server-only/document/resend-document.tsx b/packages/lib/server-only/document/resend-document.tsx
index 3069fc0ac..da4ffcb58 100644
--- a/packages/lib/server-only/document/resend-document.tsx
+++ b/packages/lib/server-only/document/resend-document.tsx
@@ -57,7 +57,7 @@ export const resendDocument = async ({ documentId, userId, recipients }: ResendD
throw new Error('Can not send completed document');
}
- await Promise.all([
+ await Promise.all(
document.Recipient.map(async (recipient) => {
const { email, name } = recipient;
@@ -95,5 +95,5 @@ export const resendDocument = async ({ documentId, userId, recipients }: ResendD
text: render(template, { plainText: true }),
});
}),
- ]);
+ );
};
diff --git a/packages/lib/server-only/document/search-documents-with-keyword.ts b/packages/lib/server-only/document/search-documents-with-keyword.ts
new file mode 100644
index 000000000..c4014d37f
--- /dev/null
+++ b/packages/lib/server-only/document/search-documents-with-keyword.ts
@@ -0,0 +1,81 @@
+import { prisma } from '@documenso/prisma';
+import { DocumentStatus } from '@documenso/prisma/client';
+
+export type SearchDocumentsWithKeywordOptions = {
+ query: string;
+ userId: number;
+ limit?: number;
+};
+
+export const searchDocumentsWithKeyword = async ({
+ query,
+ userId,
+ limit = 5,
+}: SearchDocumentsWithKeywordOptions) => {
+ const user = await prisma.user.findFirstOrThrow({
+ where: {
+ id: userId,
+ },
+ });
+
+ const documents = await prisma.document.findMany({
+ where: {
+ OR: [
+ {
+ title: {
+ contains: query,
+ mode: 'insensitive',
+ },
+ userId: userId,
+ deletedAt: null,
+ },
+ {
+ Recipient: {
+ some: {
+ email: {
+ contains: query,
+ mode: 'insensitive',
+ },
+ },
+ },
+ userId: userId,
+ deletedAt: null,
+ },
+ {
+ status: DocumentStatus.COMPLETED,
+ Recipient: {
+ some: {
+ email: user.email,
+ },
+ },
+ title: {
+ contains: query,
+ mode: 'insensitive',
+ },
+ },
+ {
+ status: DocumentStatus.PENDING,
+ Recipient: {
+ some: {
+ email: user.email,
+ },
+ },
+ title: {
+ contains: query,
+ mode: 'insensitive',
+ },
+ deletedAt: null,
+ },
+ ],
+ },
+ include: {
+ Recipient: true,
+ },
+ orderBy: {
+ createdAt: 'desc',
+ },
+ take: limit,
+ });
+
+ return documents;
+};
diff --git a/packages/lib/server-only/document/send-completed-email.ts b/packages/lib/server-only/document/send-completed-email.ts
index bb6d06b41..226ff43ec 100644
--- a/packages/lib/server-only/document/send-completed-email.ts
+++ b/packages/lib/server-only/document/send-completed-email.ts
@@ -32,7 +32,7 @@ export const sendCompletedEmail = async ({ documentId }: SendDocumentOptions) =>
const buffer = await getFile(document.documentData);
- await Promise.all([
+ await Promise.all(
document.Recipient.map(async (recipient) => {
const { email, name, token } = recipient;
@@ -64,5 +64,5 @@ export const sendCompletedEmail = async ({ documentId }: SendDocumentOptions) =>
],
});
}),
- ]);
+ );
};
diff --git a/packages/lib/server-only/document/send-document.tsx b/packages/lib/server-only/document/send-document.tsx
index febe619f0..25dc132ba 100644
--- a/packages/lib/server-only/document/send-document.tsx
+++ b/packages/lib/server-only/document/send-document.tsx
@@ -45,7 +45,7 @@ export const sendDocument = async ({ documentId, userId }: SendDocumentOptions)
throw new Error('Can not send completed document');
}
- await Promise.all([
+ await Promise.all(
document.Recipient.map(async (recipient) => {
const { email, name } = recipient;
@@ -96,7 +96,7 @@ export const sendDocument = async ({ documentId, userId }: SendDocumentOptions)
},
});
}),
- ]);
+ );
const updatedDocument = await prisma.document.update({
where: {
diff --git a/packages/lib/server-only/document/update-title.ts b/packages/lib/server-only/document/update-title.ts
new file mode 100644
index 000000000..ba086b9cb
--- /dev/null
+++ b/packages/lib/server-only/document/update-title.ts
@@ -0,0 +1,21 @@
+'use server';
+
+import { prisma } from '@documenso/prisma';
+
+export type UpdateTitleOptions = {
+ userId: number;
+ documentId: number;
+ title: string;
+};
+
+export const updateTitle = async ({ userId, documentId, title }: UpdateTitleOptions) => {
+ return await prisma.document.update({
+ where: {
+ id: documentId,
+ userId,
+ },
+ data: {
+ title,
+ },
+ });
+};
diff --git a/packages/lib/server-only/field/sign-field-with-token.ts b/packages/lib/server-only/field/sign-field-with-token.ts
index 04c5b0ddb..6640a6a07 100644
--- a/packages/lib/server-only/field/sign-field-with-token.ts
+++ b/packages/lib/server-only/field/sign-field-with-token.ts
@@ -37,6 +37,10 @@ export const signFieldWithToken = async ({
throw new Error(`Document ${document.id} has already been completed`);
}
+ if (document.deletedAt) {
+ throw new Error(`Document ${document.id} has been deleted`);
+ }
+
if (recipient?.signingStatus === SigningStatus.SIGNED) {
throw new Error(`Recipient ${recipient.id} has already signed`);
}
@@ -54,6 +58,7 @@ export const signFieldWithToken = async ({
field.type === FieldType.SIGNATURE || field.type === FieldType.FREE_SIGNATURE;
let customText = !isSignatureField ? value : undefined;
+
const signatureImageAsBase64 = isSignatureField && isBase64 ? value : undefined;
const typedSignature = isSignatureField && !isBase64 ? value : undefined;
@@ -61,29 +66,48 @@ export const signFieldWithToken = async ({
customText = DateTime.now().toFormat('yyyy-MM-dd hh:mm a');
}
- await prisma.field.update({
- where: {
- id: field.id,
- },
- data: {
- customText,
- inserted: true,
- Signature: isSignatureField
- ? {
- upsert: {
- create: {
- recipientId: field.recipientId,
- signatureImageAsBase64,
- typedSignature,
- },
- update: {
- recipientId: field.recipientId,
- signatureImageAsBase64,
- typedSignature,
- },
- },
- }
- : undefined,
- },
+ if (isSignatureField && !signatureImageAsBase64 && !typedSignature) {
+ throw new Error('Signature field must have a signature');
+ }
+
+ return await prisma.$transaction(async (tx) => {
+ const updatedField = await tx.field.update({
+ where: {
+ id: field.id,
+ },
+ data: {
+ customText,
+ inserted: true,
+ },
+ });
+
+ if (isSignatureField) {
+ if (!field.recipientId) {
+ throw new Error('Field has no recipientId');
+ }
+
+ const signature = await tx.signature.upsert({
+ where: {
+ fieldId: field.id,
+ },
+ create: {
+ fieldId: field.id,
+ recipientId: field.recipientId,
+ signatureImageAsBase64: signatureImageAsBase64,
+ typedSignature: typedSignature,
+ },
+ update: {
+ signatureImageAsBase64: signatureImageAsBase64,
+ typedSignature: typedSignature,
+ },
+ });
+
+ // Dirty but I don't want to deal with type information
+ Object.assign(updatedField, {
+ Signature: signature,
+ });
+ }
+
+ return updatedField;
});
};
diff --git a/packages/lib/server-only/pdf/insert-field-in-pdf.ts b/packages/lib/server-only/pdf/insert-field-in-pdf.ts
index 9da0e0bf1..dde46ba6b 100644
--- a/packages/lib/server-only/pdf/insert-field-in-pdf.ts
+++ b/packages/lib/server-only/pdf/insert-field-in-pdf.ts
@@ -2,7 +2,6 @@ import fontkit from '@pdf-lib/fontkit';
import { PDFDocument, StandardFonts } from 'pdf-lib';
import {
- CAVEAT_FONT_PATH,
DEFAULT_HANDWRITING_FONT_SIZE,
DEFAULT_STANDARD_FONT_SIZE,
MIN_HANDWRITING_FONT_SIZE,
@@ -10,12 +9,12 @@ import {
} from '@documenso/lib/constants/pdf';
import { FieldType } from '@documenso/prisma/client';
import { isSignatureFieldType } from '@documenso/prisma/guards/is-signature-field';
-import { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
+import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
export const insertFieldInPDF = async (pdf: PDFDocument, field: FieldWithSignature) => {
- // Fetch the font file from the public URL.
- const fontResponse = await fetch(CAVEAT_FONT_PATH);
- const fontCaveat = await fontResponse.arrayBuffer();
+ const fontCaveat = await fetch(process.env.FONT_CAVEAT_URI).then(async (res) =>
+ res.arrayBuffer(),
+ );
const isSignatureField = isSignatureFieldType(field.type);
diff --git a/packages/lib/server-only/user/generate-confirmation-token.ts b/packages/lib/server-only/user/generate-confirmation-token.ts
new file mode 100644
index 000000000..5676890ec
--- /dev/null
+++ b/packages/lib/server-only/user/generate-confirmation-token.ts
@@ -0,0 +1,41 @@
+import crypto from 'crypto';
+
+import { prisma } from '@documenso/prisma';
+
+import { ONE_HOUR } from '../../constants/time';
+import { sendConfirmationEmail } from '../auth/send-confirmation-email';
+
+const IDENTIFIER = 'confirmation-email';
+
+export const generateConfirmationToken = async ({ email }: { email: string }) => {
+ const token = crypto.randomBytes(20).toString('hex');
+
+ const user = await prisma.user.findFirst({
+ where: {
+ email: email,
+ },
+ });
+
+ if (!user) {
+ throw new Error('User not found');
+ }
+
+ const createdToken = await prisma.verificationToken.create({
+ data: {
+ identifier: IDENTIFIER,
+ token: token,
+ expires: new Date(Date.now() + ONE_HOUR),
+ user: {
+ connect: {
+ id: user.id,
+ },
+ },
+ },
+ });
+
+ if (!createdToken) {
+ throw new Error(`Failed to create the verification token`);
+ }
+
+ return sendConfirmationEmail({ userId: user.id });
+};
diff --git a/packages/lib/server-only/user/get-all-users.ts b/packages/lib/server-only/user/get-all-users.ts
index 71e670e7d..797d1e0b2 100644
--- a/packages/lib/server-only/user/get-all-users.ts
+++ b/packages/lib/server-only/user/get-all-users.ts
@@ -32,7 +32,7 @@ export const findUsers = async ({
});
const [users, count] = await Promise.all([
- await prisma.user.findMany({
+ prisma.user.findMany({
include: {
Subscription: true,
Document: {
@@ -45,7 +45,7 @@ export const findUsers = async ({
skip: Math.max(page - 1, 0) * perPage,
take: perPage,
}),
- await prisma.user.count({
+ prisma.user.count({
where: whereClause,
}),
]);
diff --git a/packages/lib/server-only/user/send-confirmation-token.ts b/packages/lib/server-only/user/send-confirmation-token.ts
new file mode 100644
index 000000000..5206d202e
--- /dev/null
+++ b/packages/lib/server-only/user/send-confirmation-token.ts
@@ -0,0 +1,41 @@
+import crypto from 'crypto';
+
+import { prisma } from '@documenso/prisma';
+
+import { ONE_HOUR } from '../../constants/time';
+import { sendConfirmationEmail } from '../auth/send-confirmation-email';
+
+const IDENTIFIER = 'confirmation-email';
+
+export const sendConfirmationToken = async ({ email }: { email: string }) => {
+ const token = crypto.randomBytes(20).toString('hex');
+
+ const user = await prisma.user.findFirst({
+ where: {
+ email: email,
+ },
+ });
+
+ if (!user) {
+ throw new Error('User not found');
+ }
+
+ const createdToken = await prisma.verificationToken.create({
+ data: {
+ identifier: IDENTIFIER,
+ token: token,
+ expires: new Date(Date.now() + ONE_HOUR),
+ user: {
+ connect: {
+ id: user.id,
+ },
+ },
+ },
+ });
+
+ if (!createdToken) {
+ throw new Error(`Failed to create the verification token`);
+ }
+
+ return sendConfirmationEmail({ userId: user.id });
+};
diff --git a/packages/lib/server-only/user/verify-email.ts b/packages/lib/server-only/user/verify-email.ts
new file mode 100644
index 000000000..e954df1f8
--- /dev/null
+++ b/packages/lib/server-only/user/verify-email.ts
@@ -0,0 +1,70 @@
+import { DateTime } from 'luxon';
+
+import { prisma } from '@documenso/prisma';
+
+import { sendConfirmationToken } from './send-confirmation-token';
+
+export type VerifyEmailProps = {
+ token: string;
+};
+
+export const verifyEmail = async ({ token }: VerifyEmailProps) => {
+ const verificationToken = await prisma.verificationToken.findFirst({
+ include: {
+ user: true,
+ },
+ where: {
+ token,
+ },
+ });
+
+ if (!verificationToken) {
+ return null;
+ }
+
+ // check if the token is valid or expired
+ const valid = verificationToken.expires > new Date();
+
+ if (!valid) {
+ const mostRecentToken = await prisma.verificationToken.findFirst({
+ where: {
+ userId: verificationToken.userId,
+ },
+ orderBy: {
+ createdAt: 'desc',
+ },
+ });
+
+ // If there isn't a recent token or it's older than 1 hour, send a new token
+ if (
+ !mostRecentToken ||
+ DateTime.now().minus({ hours: 1 }).toJSDate() > mostRecentToken.createdAt
+ ) {
+ await sendConfirmationToken({ email: verificationToken.user.email });
+ }
+
+ return valid;
+ }
+
+ const [updatedUser, deletedToken] = await prisma.$transaction([
+ prisma.user.update({
+ where: {
+ id: verificationToken.userId,
+ },
+ data: {
+ emailVerified: new Date(),
+ },
+ }),
+ prisma.verificationToken.deleteMany({
+ where: {
+ userId: verificationToken.userId,
+ },
+ }),
+ ]);
+
+ if (!updatedUser || !deletedToken) {
+ throw new Error('Something went wrong while verifying your email. Please try again.');
+ }
+
+ return !!updatedUser && !!deletedToken;
+};
diff --git a/packages/lib/types/next-auth.d.ts b/packages/lib/types/next-auth.d.ts
index 102678ef5..edc05ccc4 100644
--- a/packages/lib/types/next-auth.d.ts
+++ b/packages/lib/types/next-auth.d.ts
@@ -6,11 +6,11 @@ declare module 'next-auth' {
user: User;
}
- interface User extends Omit {
+ interface User extends Omit {
id: PrismaUser['id'];
name?: PrismaUser['name'];
email?: PrismaUser['email'];
- emailVerified?: PrismaUser['emailVerified'];
+ emailVerified?: string | null;
}
}
@@ -19,6 +19,7 @@ declare module 'next-auth/jwt' {
id: string | number;
name?: string | null;
email: string | null;
+ emailVerified?: string | null;
lastSignedIn?: string | null;
}
}
diff --git a/packages/lib/universal/crypto.ts b/packages/lib/universal/crypto.ts
new file mode 100644
index 000000000..405208d7f
--- /dev/null
+++ b/packages/lib/universal/crypto.ts
@@ -0,0 +1,32 @@
+import { xchacha20poly1305 } from '@noble/ciphers/chacha';
+import { bytesToHex, hexToBytes, utf8ToBytes } from '@noble/ciphers/utils';
+import { managedNonce } from '@noble/ciphers/webcrypto/utils';
+import { sha256 } from '@noble/hashes/sha256';
+
+export type SymmetricEncryptOptions = {
+ key: string;
+ data: string;
+};
+
+export const symmetricEncrypt = ({ key, data }: SymmetricEncryptOptions) => {
+ const keyAsBytes = sha256(key);
+ const dataAsBytes = utf8ToBytes(data);
+
+ const chacha = managedNonce(xchacha20poly1305)(keyAsBytes); // manages nonces for you
+
+ return bytesToHex(chacha.encrypt(dataAsBytes));
+};
+
+export type SymmetricDecryptOptions = {
+ key: string;
+ data: string;
+};
+
+export const symmetricDecrypt = ({ key, data }: SymmetricDecryptOptions) => {
+ const keyAsBytes = sha256(key);
+ const dataAsBytes = hexToBytes(data);
+
+ const chacha = managedNonce(xchacha20poly1305)(keyAsBytes); // manages nonces for you
+
+ return chacha.decrypt(dataAsBytes);
+};
diff --git a/packages/lib/universal/upload/server-actions.ts b/packages/lib/universal/upload/server-actions.ts
index ec0bde59a..69274c30c 100644
--- a/packages/lib/universal/upload/server-actions.ts
+++ b/packages/lib/universal/upload/server-actions.ts
@@ -1,5 +1,8 @@
'use server';
+import { headers } from 'next/headers';
+import { NextRequest } from 'next/server';
+
import {
DeleteObjectCommand,
GetObjectCommand,
@@ -7,10 +10,11 @@ import {
S3Client,
} from '@aws-sdk/client-s3';
import slugify from '@sindresorhus/slugify';
+import { type JWT, getToken } from 'next-auth/jwt';
import path from 'node:path';
+import { APP_BASE_URL } from '../../constants/app';
import { ONE_HOUR, ONE_SECOND } from '../../constants/time';
-import { getServerComponentSession } from '../../next-auth/get-server-component-session';
import { alphaid } from '../id';
export const getPresignPostUrl = async (fileName: string, contentType: string) => {
@@ -18,15 +22,25 @@ export const getPresignPostUrl = async (fileName: string, contentType: string) =
const { getSignedUrl } = await import('@aws-sdk/s3-request-presigner');
- const { user } = await getServerComponentSession();
+ let token: JWT | null = null;
+
+ try {
+ token = await getToken({
+ req: new NextRequest(APP_BASE_URL ?? 'http://localhost:3000', {
+ headers: headers(),
+ }),
+ });
+ } catch (err) {
+ // Non server-component environment
+ }
// Get the basename and extension for the file
const { name, ext } = path.parse(fileName);
let key = `${alphaid(12)}/${slugify(name)}${ext}`;
- if (user) {
- key = `${user.id}/${key}`;
+ if (token) {
+ key = `${token.id}/${key}`;
}
const putObjectCommand = new PutObjectCommand({
diff --git a/packages/prisma/migrations/20231025074705_add_email_confirmation_registration/migration.sql b/packages/prisma/migrations/20231025074705_add_email_confirmation_registration/migration.sql
new file mode 100644
index 000000000..95e64a744
--- /dev/null
+++ b/packages/prisma/migrations/20231025074705_add_email_confirmation_registration/migration.sql
@@ -0,0 +1,17 @@
+-- CreateTable
+CREATE TABLE "VerificationToken" (
+ "id" SERIAL NOT NULL,
+ "identifier" TEXT NOT NULL,
+ "token" TEXT NOT NULL,
+ "expires" TIMESTAMP(3) NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "userId" INTEGER NOT NULL,
+
+ CONSTRAINT "VerificationToken_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token");
+
+-- AddForeignKey
+ALTER TABLE "VerificationToken" ADD CONSTRAINT "VerificationToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/packages/prisma/migrations/20231031072857_verify_existing_users/migration.sql b/packages/prisma/migrations/20231031072857_verify_existing_users/migration.sql
new file mode 100644
index 000000000..5b082c233
--- /dev/null
+++ b/packages/prisma/migrations/20231031072857_verify_existing_users/migration.sql
@@ -0,0 +1,3 @@
+UPDATE "User"
+SET "emailVerified" = CURRENT_TIMESTAMP
+WHERE "emailVerified" IS NULL;
diff --git a/packages/prisma/migrations/20231105184518_add_2fa/migration.sql b/packages/prisma/migrations/20231105184518_add_2fa/migration.sql
new file mode 100644
index 000000000..8456bdbc6
--- /dev/null
+++ b/packages/prisma/migrations/20231105184518_add_2fa/migration.sql
@@ -0,0 +1,4 @@
+-- AlterTable
+ALTER TABLE "User" ADD COLUMN "twoFactorBackupCodes" TEXT,
+ADD COLUMN "twoFactorEnabled" BOOLEAN NOT NULL DEFAULT false,
+ADD COLUMN "twoFactorSecret" TEXT;
diff --git a/packages/prisma/migrations/20231202134005_deletedocuments/migration.sql b/packages/prisma/migrations/20231202134005_deletedocuments/migration.sql
new file mode 100644
index 000000000..37b5e5ba1
--- /dev/null
+++ b/packages/prisma/migrations/20231202134005_deletedocuments/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Document" ADD COLUMN "deletedAt" TIMESTAMP(3);
diff --git a/packages/prisma/migrations/20231205000309_add_cascade_delete_for_verification_tokens/migration.sql b/packages/prisma/migrations/20231205000309_add_cascade_delete_for_verification_tokens/migration.sql
new file mode 100644
index 000000000..26d7cce51
--- /dev/null
+++ b/packages/prisma/migrations/20231205000309_add_cascade_delete_for_verification_tokens/migration.sql
@@ -0,0 +1,5 @@
+-- DropForeignKey
+ALTER TABLE "VerificationToken" DROP CONSTRAINT "VerificationToken_userId_fkey";
+
+-- AddForeignKey
+ALTER TABLE "VerificationToken" ADD CONSTRAINT "VerificationToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/packages/prisma/schema.prisma b/packages/prisma/schema.prisma
index 8cf4152c4..75c175adc 100644
--- a/packages/prisma/schema.prisma
+++ b/packages/prisma/schema.prisma
@@ -19,23 +19,27 @@ enum Role {
}
model User {
- id Int @id @default(autoincrement())
- name String?
- email String @unique
- emailVerified DateTime?
- password String?
- source String?
- signature String?
- createdAt DateTime @default(now())
- updatedAt DateTime @default(now()) @updatedAt
- lastSignedIn DateTime @default(now())
- roles Role[] @default([USER])
- identityProvider IdentityProvider @default(DOCUMENSO)
- accounts Account[]
- sessions Session[]
- Document Document[]
- Subscription Subscription?
- PasswordResetToken PasswordResetToken[]
+ id Int @id @default(autoincrement())
+ name String?
+ email String @unique
+ emailVerified DateTime?
+ password String?
+ source String?
+ signature String?
+ createdAt DateTime @default(now())
+ updatedAt DateTime @default(now()) @updatedAt
+ lastSignedIn DateTime @default(now())
+ roles Role[] @default([USER])
+ identityProvider IdentityProvider @default(DOCUMENSO)
+ accounts Account[]
+ sessions Session[]
+ Document Document[]
+ Subscription Subscription?
+ PasswordResetToken PasswordResetToken[]
+ twoFactorSecret String?
+ twoFactorEnabled Boolean @default(false)
+ twoFactorBackupCodes String?
+ VerificationToken VerificationToken[]
@@index([email])
}
@@ -49,6 +53,16 @@ model PasswordResetToken {
User User @relation(fields: [userId], references: [id])
}
+model VerificationToken {
+ id Int @id @default(autoincrement())
+ identifier String
+ token String @unique
+ expires DateTime
+ createdAt DateTime @default(now())
+ userId Int
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
+}
+
enum SubscriptionStatus {
ACTIVE
PAST_DUE
@@ -121,6 +135,7 @@ model Document {
createdAt DateTime @default(now())
updatedAt DateTime @default(now()) @updatedAt
completedAt DateTime?
+ deletedAt DateTime?
@@unique([documentDataId])
@@index([userId])
diff --git a/packages/prisma/seed-database.ts b/packages/prisma/seed-database.ts
index 65daa357e..e9db2a30c 100644
--- a/packages/prisma/seed-database.ts
+++ b/packages/prisma/seed-database.ts
@@ -1,74 +1,22 @@
-import { DocumentDataType, Role } from '@prisma/client';
import fs from 'node:fs';
import path from 'node:path';
-import { hashSync } from '@documenso/lib/server-only/auth/hash';
-
-import { prisma } from './index';
-
const seedDatabase = async () => {
- const examplePdf = fs
- .readFileSync(path.join(__dirname, '../../assets/example.pdf'))
- .toString('base64');
+ const files = fs.readdirSync(path.join(__dirname, './seed'));
- const exampleUser = await prisma.user.upsert({
- where: {
- email: 'example@documenso.com',
- },
- create: {
- name: 'Example User',
- email: 'example@documenso.com',
- password: hashSync('password'),
- roles: [Role.USER],
- },
- update: {},
- });
+ for (const file of files) {
+ const stat = fs.statSync(path.join(__dirname, './seed', file));
- const adminUser = await prisma.user.upsert({
- where: {
- email: 'admin@documenso.com',
- },
- create: {
- name: 'Admin User',
- email: 'admin@documenso.com',
- password: hashSync('password'),
- roles: [Role.USER, Role.ADMIN],
- },
- update: {},
- });
+ if (stat.isFile()) {
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
+ const mod = require(path.join(__dirname, './seed', file));
- const examplePdfData = await prisma.documentData.upsert({
- where: {
- id: 'clmn0kv5k0000pe04vcqg5zla',
- },
- create: {
- id: 'clmn0kv5k0000pe04vcqg5zla',
- type: DocumentDataType.BYTES_64,
- data: examplePdf,
- initialData: examplePdf,
- },
- update: {},
- });
-
- await prisma.document.upsert({
- where: {
- id: 1,
- },
- create: {
- id: 1,
- title: 'Example Document',
- documentDataId: examplePdfData.id,
- userId: exampleUser.id,
- Recipient: {
- create: {
- name: String(adminUser.name),
- email: adminUser.email,
- token: Math.random().toString(36).slice(2, 9),
- },
- },
- },
- update: {},
- });
+ if ('seedDatabase' in mod && typeof mod.seedDatabase === 'function') {
+ console.log(`[SEEDING]: ${file}`);
+ await mod.seedDatabase();
+ }
+ }
+ }
};
seedDatabase()
diff --git a/packages/prisma/seed/initial-seed.ts b/packages/prisma/seed/initial-seed.ts
new file mode 100644
index 000000000..b01c2d434
--- /dev/null
+++ b/packages/prisma/seed/initial-seed.ts
@@ -0,0 +1,67 @@
+import fs from 'node:fs';
+import path from 'node:path';
+
+import { hashSync } from '@documenso/lib/server-only/auth/hash';
+
+import { prisma } from '..';
+import { DocumentDataType, Role } from '../client';
+
+export const seedDatabase = async () => {
+ const examplePdf = fs
+ .readFileSync(path.join(__dirname, '../../../assets/example.pdf'))
+ .toString('base64');
+
+ const exampleUser = await prisma.user.upsert({
+ where: {
+ email: 'example@documenso.com',
+ },
+ create: {
+ name: 'Example User',
+ email: 'example@documenso.com',
+ password: hashSync('password'),
+ roles: [Role.USER],
+ },
+ update: {},
+ });
+
+ const adminUser = await prisma.user.upsert({
+ where: {
+ email: 'admin@documenso.com',
+ },
+ create: {
+ name: 'Admin User',
+ email: 'admin@documenso.com',
+ password: hashSync('password'),
+ roles: [Role.USER, Role.ADMIN],
+ },
+ update: {},
+ });
+
+ const examplePdfData = await prisma.documentData.upsert({
+ where: {
+ id: 'clmn0kv5k0000pe04vcqg5zla',
+ },
+ create: {
+ id: 'clmn0kv5k0000pe04vcqg5zla',
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ update: {},
+ });
+
+ await prisma.document.create({
+ data: {
+ title: 'Example Document',
+ documentDataId: examplePdfData.id,
+ userId: exampleUser.id,
+ Recipient: {
+ create: {
+ name: String(adminUser.name),
+ email: adminUser.email,
+ token: Math.random().toString(36).slice(2, 9),
+ },
+ },
+ },
+ });
+};
diff --git a/packages/prisma/seed/pr-711-deletion-of-documents.ts b/packages/prisma/seed/pr-711-deletion-of-documents.ts
new file mode 100644
index 000000000..7542cdb84
--- /dev/null
+++ b/packages/prisma/seed/pr-711-deletion-of-documents.ts
@@ -0,0 +1,221 @@
+import type { User } from '@prisma/client';
+import fs from 'node:fs';
+import path from 'node:path';
+
+import { hashSync } from '@documenso/lib/server-only/auth/hash';
+
+import { prisma } from '..';
+import {
+ DocumentDataType,
+ DocumentStatus,
+ FieldType,
+ Prisma,
+ ReadStatus,
+ SendStatus,
+ SigningStatus,
+} from '../client';
+
+const PULL_REQUEST_NUMBER = 711;
+const EMAIL_DOMAIN = `pr-${PULL_REQUEST_NUMBER}.documenso.com`;
+
+export const TEST_USERS = [
+ {
+ name: 'Sender 1',
+ email: `sender1@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+ },
+ {
+ name: 'Sender 2',
+ email: `sender2@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+ },
+ {
+ name: 'Sender 3',
+ email: `sender3@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+ },
+] as const;
+
+const examplePdf = fs
+ .readFileSync(path.join(__dirname, '../../../assets/example.pdf'))
+ .toString('base64');
+
+export const seedDatabase = async () => {
+ const users = await Promise.all(
+ TEST_USERS.map(async (u) =>
+ prisma.user.create({
+ data: {
+ name: u.name,
+ email: u.email,
+ password: hashSync(u.password),
+ emailVerified: new Date(),
+ },
+ }),
+ ),
+ );
+
+ const [user1, user2, user3] = users;
+
+ await createDraftDocument(user1, [user2, user3]);
+ await createPendingDocument(user1, [user2, user3]);
+ await createCompletedDocument(user1, [user2, user3]);
+};
+
+const createDraftDocument = async (sender: User, recipients: User[]) => {
+ const documentData = await prisma.documentData.create({
+ data: {
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ });
+
+ const document = await prisma.document.create({
+ data: {
+ title: `[${PULL_REQUEST_NUMBER}] Document 1 - Draft`,
+ status: DocumentStatus.DRAFT,
+ documentDataId: documentData.id,
+ userId: sender.id,
+ },
+ });
+
+ for (const recipient of recipients) {
+ const index = recipients.indexOf(recipient);
+
+ await prisma.recipient.create({
+ data: {
+ email: String(recipient.email),
+ name: String(recipient.name),
+ token: `draft-token-${index}`,
+ readStatus: ReadStatus.NOT_OPENED,
+ sendStatus: SendStatus.NOT_SENT,
+ signingStatus: SigningStatus.NOT_SIGNED,
+ signedAt: new Date(),
+ Document: {
+ connect: {
+ id: document.id,
+ },
+ },
+ Field: {
+ create: {
+ page: 1,
+ type: FieldType.NAME,
+ inserted: true,
+ customText: String(recipient.name),
+ positionX: new Prisma.Decimal(1),
+ positionY: new Prisma.Decimal(1),
+ width: new Prisma.Decimal(1),
+ height: new Prisma.Decimal(1),
+ documentId: document.id,
+ },
+ },
+ },
+ });
+ }
+};
+
+const createPendingDocument = async (sender: User, recipients: User[]) => {
+ const documentData = await prisma.documentData.create({
+ data: {
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ });
+
+ const document = await prisma.document.create({
+ data: {
+ title: `[${PULL_REQUEST_NUMBER}] Document 1 - Pending`,
+ status: DocumentStatus.PENDING,
+ documentDataId: documentData.id,
+ userId: sender.id,
+ },
+ });
+
+ for (const recipient of recipients) {
+ const index = recipients.indexOf(recipient);
+
+ await prisma.recipient.create({
+ data: {
+ email: String(recipient.email),
+ name: String(recipient.name),
+ token: `pending-token-${index}`,
+ readStatus: ReadStatus.OPENED,
+ sendStatus: SendStatus.SENT,
+ signingStatus: SigningStatus.SIGNED,
+ signedAt: new Date(),
+ Document: {
+ connect: {
+ id: document.id,
+ },
+ },
+ Field: {
+ create: {
+ page: 1,
+ type: FieldType.NAME,
+ inserted: true,
+ customText: String(recipient.name),
+ positionX: new Prisma.Decimal(1),
+ positionY: new Prisma.Decimal(1),
+ width: new Prisma.Decimal(1),
+ height: new Prisma.Decimal(1),
+ documentId: document.id,
+ },
+ },
+ },
+ });
+ }
+};
+
+const createCompletedDocument = async (sender: User, recipients: User[]) => {
+ const documentData = await prisma.documentData.create({
+ data: {
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ });
+
+ const document = await prisma.document.create({
+ data: {
+ title: `[${PULL_REQUEST_NUMBER}] Document 1 - Completed`,
+ status: DocumentStatus.COMPLETED,
+ documentDataId: documentData.id,
+ userId: sender.id,
+ },
+ });
+
+ for (const recipient of recipients) {
+ const index = recipients.indexOf(recipient);
+
+ await prisma.recipient.create({
+ data: {
+ email: String(recipient.email),
+ name: String(recipient.name),
+ token: `completed-token-${index}`,
+ readStatus: ReadStatus.OPENED,
+ sendStatus: SendStatus.SENT,
+ signingStatus: SigningStatus.SIGNED,
+ signedAt: new Date(),
+ Document: {
+ connect: {
+ id: document.id,
+ },
+ },
+ Field: {
+ create: {
+ page: 1,
+ type: FieldType.NAME,
+ inserted: true,
+ customText: String(recipient.name),
+ positionX: new Prisma.Decimal(1),
+ positionY: new Prisma.Decimal(1),
+ width: new Prisma.Decimal(1),
+ height: new Prisma.Decimal(1),
+ documentId: document.id,
+ },
+ },
+ },
+ });
+ }
+};
diff --git a/packages/prisma/seed/pr-713-add-document-search-to-command-menu.ts b/packages/prisma/seed/pr-713-add-document-search-to-command-menu.ts
new file mode 100644
index 000000000..22e8897a9
--- /dev/null
+++ b/packages/prisma/seed/pr-713-add-document-search-to-command-menu.ts
@@ -0,0 +1,167 @@
+import type { User } from '@prisma/client';
+import fs from 'node:fs';
+import path from 'node:path';
+
+import { hashSync } from '@documenso/lib/server-only/auth/hash';
+
+import { prisma } from '..';
+import {
+ DocumentDataType,
+ DocumentStatus,
+ FieldType,
+ Prisma,
+ ReadStatus,
+ SendStatus,
+ SigningStatus,
+} from '../client';
+
+//
+// https://github.com/documenso/documenso/pull/713
+//
+
+const PULL_REQUEST_NUMBER = 713;
+
+const EMAIL_DOMAIN = `pr-${PULL_REQUEST_NUMBER}.documenso.com`;
+
+export const TEST_USERS = [
+ {
+ name: 'User 1',
+ email: `user1@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+ },
+ {
+ name: 'User 2',
+ email: `user2@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+ },
+] as const;
+
+const examplePdf = fs
+ .readFileSync(path.join(__dirname, '../../../assets/example.pdf'))
+ .toString('base64');
+
+export const seedDatabase = async () => {
+ const users = await Promise.all(
+ TEST_USERS.map(async (u) =>
+ prisma.user.create({
+ data: {
+ name: u.name,
+ email: u.email,
+ password: hashSync(u.password),
+ emailVerified: new Date(),
+ },
+ }),
+ ),
+ );
+
+ const [user1, user2] = users;
+
+ await createSentDocument(user1, [user2]);
+ await createReceivedDocument(user2, [user1]);
+};
+
+const createSentDocument = async (sender: User, recipients: User[]) => {
+ const documentData = await prisma.documentData.create({
+ data: {
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ });
+
+ const document = await prisma.document.create({
+ data: {
+ title: `[${PULL_REQUEST_NUMBER}] Document - Sent`,
+ status: DocumentStatus.PENDING,
+ documentDataId: documentData.id,
+ userId: sender.id,
+ },
+ });
+
+ for (const recipient of recipients) {
+ const index = recipients.indexOf(recipient);
+
+ await prisma.recipient.create({
+ data: {
+ email: String(recipient.email),
+ name: String(recipient.name),
+ token: `sent-token-${index}`,
+ readStatus: ReadStatus.NOT_OPENED,
+ sendStatus: SendStatus.SENT,
+ signingStatus: SigningStatus.NOT_SIGNED,
+ signedAt: new Date(),
+ Document: {
+ connect: {
+ id: document.id,
+ },
+ },
+ Field: {
+ create: {
+ page: 1,
+ type: FieldType.NAME,
+ inserted: true,
+ customText: String(recipient.name),
+ positionX: new Prisma.Decimal(1),
+ positionY: new Prisma.Decimal(1),
+ width: new Prisma.Decimal(1),
+ height: new Prisma.Decimal(1),
+ documentId: document.id,
+ },
+ },
+ },
+ });
+ }
+};
+
+const createReceivedDocument = async (sender: User, recipients: User[]) => {
+ const documentData = await prisma.documentData.create({
+ data: {
+ type: DocumentDataType.BYTES_64,
+ data: examplePdf,
+ initialData: examplePdf,
+ },
+ });
+
+ const document = await prisma.document.create({
+ data: {
+ title: `[${PULL_REQUEST_NUMBER}] Document - Received`,
+ status: DocumentStatus.PENDING,
+ documentDataId: documentData.id,
+ userId: sender.id,
+ },
+ });
+
+ for (const recipient of recipients) {
+ const index = recipients.indexOf(recipient);
+
+ await prisma.recipient.create({
+ data: {
+ email: String(recipient.email),
+ name: String(recipient.name),
+ token: `received-token-${index}`,
+ readStatus: ReadStatus.NOT_OPENED,
+ sendStatus: SendStatus.SENT,
+ signingStatus: SigningStatus.NOT_SIGNED,
+ signedAt: new Date(),
+ Document: {
+ connect: {
+ id: document.id,
+ },
+ },
+ Field: {
+ create: {
+ page: 1,
+ type: FieldType.NAME,
+ inserted: true,
+ customText: String(recipient.name),
+ positionX: new Prisma.Decimal(1),
+ positionY: new Prisma.Decimal(1),
+ width: new Prisma.Decimal(1),
+ height: new Prisma.Decimal(1),
+ documentId: document.id,
+ },
+ },
+ },
+ });
+ }
+};
diff --git a/packages/prisma/seed/pr-718-add-stepper-component.ts b/packages/prisma/seed/pr-718-add-stepper-component.ts
new file mode 100644
index 000000000..57a0ddc61
--- /dev/null
+++ b/packages/prisma/seed/pr-718-add-stepper-component.ts
@@ -0,0 +1,28 @@
+import { hashSync } from '@documenso/lib/server-only/auth/hash';
+
+import { prisma } from '..';
+
+//
+// https://github.com/documenso/documenso/pull/713
+//
+
+const PULL_REQUEST_NUMBER = 718;
+
+const EMAIL_DOMAIN = `pr-${PULL_REQUEST_NUMBER}.documenso.com`;
+
+export const TEST_USER = {
+ name: 'User 1',
+ email: `user1@${EMAIL_DOMAIN}`,
+ password: 'Password123',
+} as const;
+
+export const seedDatabase = async () => {
+ await prisma.user.create({
+ data: {
+ name: TEST_USER.name,
+ email: TEST_USER.email,
+ password: hashSync(TEST_USER.password),
+ emailVerified: new Date(),
+ },
+ });
+};
diff --git a/packages/tailwind-config/package.json b/packages/tailwind-config/package.json
index 7a2e63139..af96dc595 100644
--- a/packages/tailwind-config/package.json
+++ b/packages/tailwind-config/package.json
@@ -9,7 +9,7 @@
"dependencies": {
"autoprefixer": "^10.4.13",
"postcss": "^8.4.21",
- "tailwindcss": "^3.2.7",
+ "tailwindcss": "3.3.2",
"tailwindcss-animate": "^1.0.5"
},
"devDependencies": {
diff --git a/packages/trpc/package.json b/packages/trpc/package.json
index b003509aa..54c1d5917 100644
--- a/packages/trpc/package.json
+++ b/packages/trpc/package.json
@@ -17,7 +17,10 @@
"@trpc/next": "^10.36.0",
"@trpc/react-query": "^10.36.0",
"@trpc/server": "^10.36.0",
+ "luxon": "^3.4.0",
"superjson": "^1.13.1",
+ "ts-pattern": "^5.0.5",
"zod": "^3.22.4"
- }
+ },
+ "devDependencies": {}
}
diff --git a/packages/trpc/server/auth-router/router.ts b/packages/trpc/server/auth-router/router.ts
index f66f44325..59c51ade5 100644
--- a/packages/trpc/server/auth-router/router.ts
+++ b/packages/trpc/server/auth-router/router.ts
@@ -1,16 +1,23 @@
import { TRPCError } from '@trpc/server';
+import { ErrorCode } from '@documenso/lib/next-auth/error-codes';
+import { compareSync } from '@documenso/lib/server-only/auth/hash';
import { createUser } from '@documenso/lib/server-only/user/create-user';
+import { sendConfirmationToken } from '@documenso/lib/server-only/user/send-confirmation-token';
-import { procedure, router } from '../trpc';
-import { ZSignUpMutationSchema } from './schema';
+import { authenticatedProcedure, procedure, router } from '../trpc';
+import { ZSignUpMutationSchema, ZVerifyPasswordMutationSchema } from './schema';
export const authRouter = router({
signup: procedure.input(ZSignUpMutationSchema).mutation(async ({ input }) => {
try {
const { name, email, password, signature } = input;
- return await createUser({ name, email, password, signature });
+ const user = await createUser({ name, email, password, signature });
+
+ await sendConfirmationToken({ email: user.email });
+
+ return user;
} catch (err) {
let message =
'We were unable to create your account. Please review the information you provided and try again.';
@@ -25,4 +32,23 @@ export const authRouter = router({
});
}
}),
+
+ verifyPassword: authenticatedProcedure
+ .input(ZVerifyPasswordMutationSchema)
+ .mutation(({ ctx, input }) => {
+ const user = ctx.user;
+
+ const { password } = input;
+
+ if (!user.password) {
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: ErrorCode.INCORRECT_PASSWORD,
+ });
+ }
+
+ const valid = compareSync(password, user.password);
+
+ return valid;
+ }),
});
diff --git a/packages/trpc/server/auth-router/schema.ts b/packages/trpc/server/auth-router/schema.ts
index bdc9cd742..cc969c679 100644
--- a/packages/trpc/server/auth-router/schema.ts
+++ b/packages/trpc/server/auth-router/schema.ts
@@ -8,3 +8,5 @@ export const ZSignUpMutationSchema = z.object({
});
export type TSignUpMutationSchema = z.infer;
+
+export const ZVerifyPasswordMutationSchema = ZSignUpMutationSchema.pick({ password: true });
diff --git a/packages/trpc/server/document-router/router.ts b/packages/trpc/server/document-router/router.ts
index bd92312da..fc6ea2377 100644
--- a/packages/trpc/server/document-router/router.ts
+++ b/packages/trpc/server/document-router/router.ts
@@ -1,13 +1,16 @@
import { TRPCError } from '@trpc/server';
import { getServerLimits } from '@documenso/ee/server-only/limits/server';
+import { upsertDocumentMeta } from '@documenso/lib/server-only/document-meta/upsert-document-meta';
import { createDocument } from '@documenso/lib/server-only/document/create-document';
-import { deleteDraftDocument } from '@documenso/lib/server-only/document/delete-draft-document';
+import { deleteDocument } from '@documenso/lib/server-only/document/delete-document';
import { duplicateDocumentById } from '@documenso/lib/server-only/document/duplicate-document-by-id';
import { getDocumentById } from '@documenso/lib/server-only/document/get-document-by-id';
import { getDocumentAndSenderByToken } from '@documenso/lib/server-only/document/get-document-by-token';
import { resendDocument } from '@documenso/lib/server-only/document/resend-document';
+import { searchDocumentsWithKeyword } from '@documenso/lib/server-only/document/search-documents-with-keyword';
import { sendDocument } from '@documenso/lib/server-only/document/send-document';
+import { updateTitle } from '@documenso/lib/server-only/document/update-title';
import { setFieldsForDocument } from '@documenso/lib/server-only/field/set-fields-for-document';
import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
@@ -18,9 +21,11 @@ import {
ZGetDocumentByIdQuerySchema,
ZGetDocumentByTokenQuerySchema,
ZResendDocumentMutationSchema,
+ ZSearchDocumentsMutationSchema,
ZSendDocumentMutationSchema,
ZSetFieldsForDocumentMutationSchema,
ZSetRecipientsForDocumentMutationSchema,
+ ZSetTitleForDocumentMutationSchema,
} from './schema';
export const documentRouter = router({
@@ -94,15 +99,15 @@ export const documentRouter = router({
}
}),
- deleteDraftDocument: authenticatedProcedure
+ deleteDocument: authenticatedProcedure
.input(ZDeleteDraftDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
try {
- const { id } = input;
+ const { id, status } = input;
const userId = ctx.user.id;
- return await deleteDraftDocument({ id, userId });
+ return await deleteDocument({ id, userId, status });
} catch (err) {
console.error(err);
@@ -113,6 +118,20 @@ export const documentRouter = router({
}
}),
+ setTitleForDocument: authenticatedProcedure
+ .input(ZSetTitleForDocumentMutationSchema)
+ .mutation(async ({ input, ctx }) => {
+ const { documentId, title } = input;
+
+ const userId = ctx.user.id;
+
+ return await updateTitle({
+ title,
+ userId,
+ documentId,
+ });
+ }),
+
setRecipientsForDocument: authenticatedProcedure
.input(ZSetRecipientsForDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
@@ -160,7 +179,15 @@ export const documentRouter = router({
.input(ZSendDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
try {
- const { documentId } = input;
+ const { documentId, email } = input;
+
+ if (email.message || email.subject) {
+ await upsertDocumentMeta({
+ documentId,
+ subject: email.subject,
+ message: email.message,
+ });
+ }
return await sendDocument({
userId: ctx.user.id,
@@ -215,4 +242,23 @@ export const documentRouter = router({
});
}
}),
+
+ searchDocuments: authenticatedProcedure
+ .input(ZSearchDocumentsMutationSchema)
+ .query(async ({ input, ctx }) => {
+ const { query } = input;
+
+ try {
+ const documents = await searchDocumentsWithKeyword({
+ query,
+ userId: ctx.user.id,
+ });
+ return documents;
+ } catch (error) {
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We are unable to search for documents. Please try again later.',
+ });
+ }
+ }),
});
diff --git a/packages/trpc/server/document-router/schema.ts b/packages/trpc/server/document-router/schema.ts
index b9bea71c3..71ee9766d 100644
--- a/packages/trpc/server/document-router/schema.ts
+++ b/packages/trpc/server/document-router/schema.ts
@@ -1,6 +1,6 @@
import { z } from 'zod';
-import { FieldType } from '@documenso/prisma/client';
+import { DocumentStatus, FieldType } from '@documenso/prisma/client';
export const ZGetDocumentByIdQuerySchema = z.object({
id: z.number().min(1),
@@ -21,6 +21,13 @@ export const ZCreateDocumentMutationSchema = z.object({
export type TCreateDocumentMutationSchema = z.infer;
+export const ZSetTitleForDocumentMutationSchema = z.object({
+ documentId: z.number(),
+ title: z.string().min(1),
+});
+
+export type TSetTitleForDocumentMutationSchema = z.infer;
+
export const ZSetRecipientsForDocumentMutationSchema = z.object({
documentId: z.number(),
recipients: z.array(
@@ -58,6 +65,10 @@ export type TSetFieldsForDocumentMutationSchema = z.infer<
export const ZSendDocumentMutationSchema = z.object({
documentId: z.number(),
+ email: z.object({
+ subject: z.string(),
+ message: z.string(),
+ }),
});
export const ZResendDocumentMutationSchema = z.object({
@@ -69,6 +80,11 @@ export type TSendDocumentMutationSchema = z.infer;
+
+export const ZSearchDocumentsMutationSchema = z.object({
+ query: z.string(),
+});
diff --git a/packages/trpc/server/field-router/router.ts b/packages/trpc/server/field-router/router.ts
index b25e14d9f..7d049df0d 100644
--- a/packages/trpc/server/field-router/router.ts
+++ b/packages/trpc/server/field-router/router.ts
@@ -1,15 +1,47 @@
import { TRPCError } from '@trpc/server';
import { removeSignedFieldWithToken } from '@documenso/lib/server-only/field/remove-signed-field-with-token';
+import { setFieldsForDocument } from '@documenso/lib/server-only/field/set-fields-for-document';
import { signFieldWithToken } from '@documenso/lib/server-only/field/sign-field-with-token';
-import { procedure, router } from '../trpc';
+import { authenticatedProcedure, procedure, router } from '../trpc';
import {
+ ZAddFieldsMutationSchema,
ZRemovedSignedFieldWithTokenMutationSchema,
ZSignFieldWithTokenMutationSchema,
} from './schema';
export const fieldRouter = router({
+ addFields: authenticatedProcedure
+ .input(ZAddFieldsMutationSchema)
+ .mutation(async ({ input, ctx }) => {
+ try {
+ const { documentId, fields } = input;
+
+ return await setFieldsForDocument({
+ documentId,
+ userId: ctx.user.id,
+ fields: fields.map((field) => ({
+ id: field.nativeId,
+ signerEmail: field.signerEmail,
+ type: field.type,
+ pageNumber: field.pageNumber,
+ pageX: field.pageX,
+ pageY: field.pageY,
+ pageWidth: field.pageWidth,
+ pageHeight: field.pageHeight,
+ })),
+ });
+ } catch (err) {
+ console.error(err);
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to sign this field. Please try again later.',
+ });
+ }
+ }),
+
signFieldWithToken: procedure
.input(ZSignFieldWithTokenMutationSchema)
.mutation(async ({ input }) => {
diff --git a/packages/trpc/server/field-router/schema.ts b/packages/trpc/server/field-router/schema.ts
index 051636477..d9f207adb 100644
--- a/packages/trpc/server/field-router/schema.ts
+++ b/packages/trpc/server/field-router/schema.ts
@@ -1,5 +1,26 @@
import { z } from 'zod';
+import { FieldType } from '@documenso/prisma/client';
+
+export const ZAddFieldsMutationSchema = z.object({
+ documentId: z.number(),
+ fields: z.array(
+ z.object({
+ formId: z.string().min(1),
+ nativeId: z.number().optional(),
+ type: z.nativeEnum(FieldType),
+ signerEmail: z.string().min(1),
+ pageNumber: z.number().min(1),
+ pageX: z.number().min(0),
+ pageY: z.number().min(0),
+ pageWidth: z.number().min(0),
+ pageHeight: z.number().min(0),
+ }),
+ ),
+});
+
+export type TAddFieldsMutationSchema = z.infer;
+
export const ZSignFieldWithTokenMutationSchema = z.object({
token: z.string(),
fieldId: z.number(),
diff --git a/packages/trpc/server/profile-router/router.ts b/packages/trpc/server/profile-router/router.ts
index 0f6636650..4dcf4ca93 100644
--- a/packages/trpc/server/profile-router/router.ts
+++ b/packages/trpc/server/profile-router/router.ts
@@ -3,11 +3,13 @@ import { TRPCError } from '@trpc/server';
import { forgotPassword } from '@documenso/lib/server-only/user/forgot-password';
import { getUserById } from '@documenso/lib/server-only/user/get-user-by-id';
import { resetPassword } from '@documenso/lib/server-only/user/reset-password';
+import { sendConfirmationToken } from '@documenso/lib/server-only/user/send-confirmation-token';
import { updatePassword } from '@documenso/lib/server-only/user/update-password';
import { updateProfile } from '@documenso/lib/server-only/user/update-profile';
import { adminProcedure, authenticatedProcedure, procedure, router } from '../trpc';
import {
+ ZConfirmEmailMutationSchema,
ZForgotPasswordFormSchema,
ZResetPasswordFormSchema,
ZRetrieveUserByIdQuerySchema,
@@ -110,4 +112,25 @@ export const profileRouter = router({
});
}
}),
+
+ sendConfirmationEmail: procedure
+ .input(ZConfirmEmailMutationSchema)
+ .mutation(async ({ input }) => {
+ try {
+ const { email } = input;
+
+ return sendConfirmationToken({ email });
+ } catch (err) {
+ let message = 'We were unable to send a confirmation email. Please try again.';
+
+ if (err instanceof Error) {
+ message = err.message;
+ }
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message,
+ });
+ }
+ }),
});
diff --git a/packages/trpc/server/profile-router/schema.ts b/packages/trpc/server/profile-router/schema.ts
index 44a8a451c..ef9ca2a14 100644
--- a/packages/trpc/server/profile-router/schema.ts
+++ b/packages/trpc/server/profile-router/schema.ts
@@ -23,8 +23,13 @@ export const ZResetPasswordFormSchema = z.object({
token: z.string().min(1),
});
+export const ZConfirmEmailMutationSchema = z.object({
+ email: z.string().email().min(1),
+});
+
export type TRetrieveUserByIdQuerySchema = z.infer;
export type TUpdateProfileMutationSchema = z.infer;
export type TUpdatePasswordMutationSchema = z.infer;
export type TForgotPasswordFormSchema = z.infer;
export type TResetPasswordFormSchema = z.infer;
+export type TConfirmEmailMutationSchema = z.infer;
diff --git a/packages/trpc/server/recipient-router/router.ts b/packages/trpc/server/recipient-router/router.ts
new file mode 100644
index 000000000..913749dde
--- /dev/null
+++ b/packages/trpc/server/recipient-router/router.ts
@@ -0,0 +1,54 @@
+import { TRPCError } from '@trpc/server';
+
+import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token';
+import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
+
+import { authenticatedProcedure, procedure, router } from '../trpc';
+import { ZAddSignersMutationSchema, ZCompleteDocumentWithTokenMutationSchema } from './schema';
+
+export const recipientRouter = router({
+ addSigners: authenticatedProcedure
+ .input(ZAddSignersMutationSchema)
+ .mutation(async ({ input, ctx }) => {
+ try {
+ const { documentId, signers } = input;
+
+ return await setRecipientsForDocument({
+ userId: ctx.user.id,
+ documentId,
+ recipients: signers.map((signer) => ({
+ id: signer.nativeId,
+ email: signer.email,
+ name: signer.name,
+ })),
+ });
+ } catch (err) {
+ console.error(err);
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to sign this field. Please try again later.',
+ });
+ }
+ }),
+
+ completeDocumentWithToken: procedure
+ .input(ZCompleteDocumentWithTokenMutationSchema)
+ .mutation(async ({ input }) => {
+ try {
+ const { token, documentId } = input;
+
+ return await completeDocumentWithToken({
+ token,
+ documentId,
+ });
+ } catch (err) {
+ console.error(err);
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to sign this field. Please try again later.',
+ });
+ }
+ }),
+});
diff --git a/packages/trpc/server/recipient-router/schema.ts b/packages/trpc/server/recipient-router/schema.ts
new file mode 100644
index 000000000..ca177a3d5
--- /dev/null
+++ b/packages/trpc/server/recipient-router/schema.ts
@@ -0,0 +1,33 @@
+import { z } from 'zod';
+
+export const ZAddSignersMutationSchema = z
+ .object({
+ documentId: z.number(),
+ signers: z.array(
+ z.object({
+ nativeId: z.number().optional(),
+ email: z.string().email().min(1),
+ name: z.string(),
+ }),
+ ),
+ })
+ .refine(
+ (schema) => {
+ const emails = schema.signers.map((signer) => signer.email.toLowerCase());
+
+ return new Set(emails).size === emails.length;
+ },
+ // Dirty hack to handle errors when .root is populated for an array type
+ { message: 'Signers must have unique emails', path: ['signers__root'] },
+ );
+
+export type TAddSignersMutationSchema = z.infer;
+
+export const ZCompleteDocumentWithTokenMutationSchema = z.object({
+ token: z.string(),
+ documentId: z.number(),
+});
+
+export type TCompleteDocumentWithTokenMutationSchema = z.infer<
+ typeof ZCompleteDocumentWithTokenMutationSchema
+>;
diff --git a/packages/trpc/server/router.ts b/packages/trpc/server/router.ts
index 519096da9..bf8a03ce1 100644
--- a/packages/trpc/server/router.ts
+++ b/packages/trpc/server/router.ts
@@ -3,19 +3,22 @@ import { authRouter } from './auth-router/router';
import { documentRouter } from './document-router/router';
import { fieldRouter } from './field-router/router';
import { profileRouter } from './profile-router/router';
+import { recipientRouter } from './recipient-router/router';
import { shareLinkRouter } from './share-link-router/router';
-import { procedure, router } from './trpc';
+import { singleplayerRouter } from './singleplayer-router/router';
+import { router } from './trpc';
+import { twoFactorAuthenticationRouter } from './two-factor-authentication-router/router';
export const appRouter = router({
- health: procedure.query(() => {
- return { status: 'ok' };
- }),
auth: authRouter,
profile: profileRouter,
document: documentRouter,
field: fieldRouter,
+ recipient: recipientRouter,
admin: adminRouter,
shareLink: shareLinkRouter,
+ singleplayer: singleplayerRouter,
+ twoFactorAuthentication: twoFactorAuthenticationRouter,
});
export type AppRouter = typeof appRouter;
diff --git a/packages/trpc/server/singleplayer-router/helper.ts b/packages/trpc/server/singleplayer-router/helper.ts
new file mode 100644
index 000000000..0ec0ba42d
--- /dev/null
+++ b/packages/trpc/server/singleplayer-router/helper.ts
@@ -0,0 +1,37 @@
+import { DateTime } from 'luxon';
+import { match } from 'ts-pattern';
+
+import { FieldType, Prisma } from '@documenso/prisma/client';
+
+import type { TCreateSinglePlayerDocumentMutationSchema } from './schema';
+
+/**
+ * Map the fields provided by the user to fields compatible with Prisma.
+ *
+ * Signature fields are handled separately.
+ *
+ * @param field The field passed in by the user.
+ * @param signer The details of the person who is signing this document.
+ * @returns A field compatible with Prisma.
+ */
+export const mapField = (
+ field: TCreateSinglePlayerDocumentMutationSchema['fields'][number],
+ signer: TCreateSinglePlayerDocumentMutationSchema['signer'],
+) => {
+ const customText = match(field.type)
+ .with(FieldType.DATE, () => DateTime.now().toFormat('yyyy-MM-dd hh:mm a'))
+ .with(FieldType.EMAIL, () => signer.email)
+ .with(FieldType.NAME, () => signer.name)
+ .otherwise(() => '');
+
+ return {
+ type: field.type,
+ page: field.page,
+ positionX: new Prisma.Decimal(field.positionX),
+ positionY: new Prisma.Decimal(field.positionY),
+ width: new Prisma.Decimal(field.width),
+ height: new Prisma.Decimal(field.height),
+ customText,
+ inserted: true,
+ };
+};
diff --git a/packages/trpc/server/singleplayer-router/router.ts b/packages/trpc/server/singleplayer-router/router.ts
new file mode 100644
index 000000000..65888c835
--- /dev/null
+++ b/packages/trpc/server/singleplayer-router/router.ts
@@ -0,0 +1,176 @@
+import { createElement } from 'react';
+
+import { PDFDocument } from 'pdf-lib';
+
+import { mailer } from '@documenso/email/mailer';
+import { renderAsync } from '@documenso/email/render';
+import { DocumentSelfSignedEmailTemplate } from '@documenso/email/templates/document-self-signed';
+import { FROM_ADDRESS, FROM_NAME, SERVICE_USER_EMAIL } from '@documenso/lib/constants/email';
+import { insertFieldInPDF } from '@documenso/lib/server-only/pdf/insert-field-in-pdf';
+import { alphaid } from '@documenso/lib/universal/id';
+import { getFile } from '@documenso/lib/universal/upload/get-file';
+import { putFile } from '@documenso/lib/universal/upload/put-file';
+import { prisma } from '@documenso/prisma';
+import {
+ DocumentStatus,
+ FieldType,
+ ReadStatus,
+ SendStatus,
+ SigningStatus,
+} from '@documenso/prisma/client';
+import { signPdf } from '@documenso/signing';
+
+import { procedure, router } from '../trpc';
+import { mapField } from './helper';
+import { ZCreateSinglePlayerDocumentMutationSchema } from './schema';
+
+export const singleplayerRouter = router({
+ createSinglePlayerDocument: procedure
+ .input(ZCreateSinglePlayerDocumentMutationSchema)
+ .mutation(async ({ input }) => {
+ const { signer, fields, documentData, documentName } = input;
+
+ const document = await getFile({
+ data: documentData.data,
+ type: documentData.type,
+ });
+
+ const doc = await PDFDocument.load(document);
+
+ const createdAt = new Date();
+
+ const isBase64 = signer.signature.startsWith('data:image/png;base64,');
+ const signatureImageAsBase64 = isBase64 ? signer.signature : null;
+ const typedSignature = !isBase64 ? signer.signature : null;
+
+ // Update the document with the fields inserted.
+ for (const field of fields) {
+ const isSignatureField = field.type === FieldType.SIGNATURE;
+
+ await insertFieldInPDF(doc, {
+ ...mapField(field, signer),
+ Signature: isSignatureField
+ ? {
+ created: createdAt,
+ signatureImageAsBase64,
+ typedSignature,
+ // Dummy data.
+ id: -1,
+ recipientId: -1,
+ fieldId: -1,
+ }
+ : null,
+ // Dummy data.
+ id: -1,
+ documentId: -1,
+ recipientId: -1,
+ });
+ }
+
+ const unsignedPdfBytes = await doc.save();
+
+ const signedPdfBuffer = await signPdf({ pdf: Buffer.from(unsignedPdfBytes) });
+
+ const { token } = await prisma.$transaction(
+ async (tx) => {
+ const token = alphaid();
+
+ // Fetch service user who will be the owner of the document.
+ const serviceUser = await tx.user.findFirstOrThrow({
+ where: {
+ email: SERVICE_USER_EMAIL,
+ },
+ });
+
+ const { id: documentDataId } = await putFile({
+ name: `${documentName}.pdf`,
+ type: 'application/pdf',
+ arrayBuffer: async () => Promise.resolve(signedPdfBuffer),
+ });
+
+ // Create document.
+ const document = await tx.document.create({
+ data: {
+ title: documentName,
+ status: DocumentStatus.COMPLETED,
+ documentDataId,
+ userId: serviceUser.id,
+ createdAt,
+ },
+ });
+
+ // Create recipient.
+ const recipient = await tx.recipient.create({
+ data: {
+ documentId: document.id,
+ name: signer.name,
+ email: signer.email,
+ token,
+ signedAt: createdAt,
+ readStatus: ReadStatus.OPENED,
+ signingStatus: SigningStatus.SIGNED,
+ sendStatus: SendStatus.SENT,
+ },
+ });
+
+ // Create fields and signatures.
+ await Promise.all(
+ fields.map(async (field) => {
+ const insertedField = await tx.field.create({
+ data: {
+ documentId: document.id,
+ recipientId: recipient.id,
+ ...mapField(field, signer),
+ },
+ });
+
+ if (field.type === FieldType.SIGNATURE || field.type === FieldType.FREE_SIGNATURE) {
+ await tx.signature.create({
+ data: {
+ fieldId: insertedField.id,
+ signatureImageAsBase64,
+ typedSignature,
+ recipientId: recipient.id,
+ },
+ });
+ }
+ }),
+ );
+
+ return { document, token };
+ },
+ {
+ maxWait: 5000,
+ timeout: 30000,
+ },
+ );
+
+ const template = createElement(DocumentSelfSignedEmailTemplate, {
+ documentName: documentName,
+ assetBaseUrl: process.env.NEXT_PUBLIC_WEBAPP_URL || 'http://localhost:3000',
+ });
+
+ const [html, text] = await Promise.all([
+ renderAsync(template),
+ renderAsync(template, { plainText: true }),
+ ]);
+
+ // Send email to signer.
+ await mailer.sendMail({
+ to: {
+ address: signer.email,
+ name: signer.name,
+ },
+ from: {
+ name: FROM_NAME,
+ address: FROM_ADDRESS,
+ },
+ subject: 'Document signed',
+ html,
+ text,
+ attachments: [{ content: signedPdfBuffer, filename: documentName }],
+ });
+
+ return token;
+ }),
+});
diff --git a/packages/trpc/server/singleplayer-router/schema.ts b/packages/trpc/server/singleplayer-router/schema.ts
new file mode 100644
index 000000000..9fa56e7b1
--- /dev/null
+++ b/packages/trpc/server/singleplayer-router/schema.ts
@@ -0,0 +1,30 @@
+import { z } from 'zod';
+
+import { DocumentDataType, FieldType } from '@documenso/prisma/client';
+
+export const ZCreateSinglePlayerDocumentMutationSchema = z.object({
+ documentData: z.object({
+ data: z.string(),
+ type: z.nativeEnum(DocumentDataType),
+ }),
+ documentName: z.string(),
+ signer: z.object({
+ email: z.string().email().min(1),
+ name: z.string(),
+ signature: z.string(),
+ }),
+ fields: z.array(
+ z.object({
+ page: z.number(),
+ type: z.nativeEnum(FieldType),
+ positionX: z.number(),
+ positionY: z.number(),
+ width: z.number(),
+ height: z.number(),
+ }),
+ ),
+});
+
+export type TCreateSinglePlayerDocumentMutationSchema = z.infer<
+ typeof ZCreateSinglePlayerDocumentMutationSchema
+>;
diff --git a/packages/trpc/server/two-factor-authentication-router/router.ts b/packages/trpc/server/two-factor-authentication-router/router.ts
new file mode 100644
index 000000000..a10f7a543
--- /dev/null
+++ b/packages/trpc/server/two-factor-authentication-router/router.ts
@@ -0,0 +1,105 @@
+import { TRPCError } from '@trpc/server';
+
+import { ErrorCode } from '@documenso/lib/next-auth/error-codes';
+import { disableTwoFactorAuthentication } from '@documenso/lib/server-only/2fa/disable-2fa';
+import { enableTwoFactorAuthentication } from '@documenso/lib/server-only/2fa/enable-2fa';
+import { getBackupCodes } from '@documenso/lib/server-only/2fa/get-backup-code';
+import { setupTwoFactorAuthentication } from '@documenso/lib/server-only/2fa/setup-2fa';
+import { compareSync } from '@documenso/lib/server-only/auth/hash';
+
+import { authenticatedProcedure, router } from '../trpc';
+import {
+ ZDisableTwoFactorAuthenticationMutationSchema,
+ ZEnableTwoFactorAuthenticationMutationSchema,
+ ZSetupTwoFactorAuthenticationMutationSchema,
+ ZViewRecoveryCodesMutationSchema,
+} from './schema';
+
+export const twoFactorAuthenticationRouter = router({
+ setup: authenticatedProcedure
+ .input(ZSetupTwoFactorAuthenticationMutationSchema)
+ .mutation(async ({ ctx, input }) => {
+ const user = ctx.user;
+
+ const { password } = input;
+
+ return await setupTwoFactorAuthentication({ user, password });
+ }),
+
+ enable: authenticatedProcedure
+ .input(ZEnableTwoFactorAuthenticationMutationSchema)
+ .mutation(async ({ ctx, input }) => {
+ try {
+ const user = ctx.user;
+
+ const { code } = input;
+
+ return await enableTwoFactorAuthentication({ user, code });
+ } catch (err) {
+ console.error(err);
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to enable two-factor authentication. Please try again later.',
+ });
+ }
+ }),
+
+ disable: authenticatedProcedure
+ .input(ZDisableTwoFactorAuthenticationMutationSchema)
+ .mutation(async ({ ctx, input }) => {
+ try {
+ const user = ctx.user;
+
+ const { password, backupCode } = input;
+
+ return await disableTwoFactorAuthentication({ user, password, backupCode });
+ } catch (err) {
+ console.error(err);
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to disable two-factor authentication. Please try again later.',
+ });
+ }
+ }),
+
+ viewRecoveryCodes: authenticatedProcedure
+ .input(ZViewRecoveryCodesMutationSchema)
+ .mutation(async ({ ctx, input }) => {
+ try {
+ const user = ctx.user;
+
+ const { password } = input;
+
+ if (!user.twoFactorEnabled) {
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: ErrorCode.TWO_FACTOR_SETUP_REQUIRED,
+ });
+ }
+
+ if (!user.password || !compareSync(password, user.password)) {
+ throw new TRPCError({
+ code: 'UNAUTHORIZED',
+ message: ErrorCode.INCORRECT_PASSWORD,
+ });
+ }
+
+ const recoveryCodes = await getBackupCodes({ user });
+
+ return { recoveryCodes };
+ } catch (err) {
+ console.error(err);
+
+ if (err instanceof TRPCError) {
+ throw err;
+ }
+
+ throw new TRPCError({
+ code: 'BAD_REQUEST',
+ message: 'We were unable to view your recovery codes. Please try again later.',
+ });
+ }
+ }),
+});
diff --git a/packages/trpc/server/two-factor-authentication-router/schema.ts b/packages/trpc/server/two-factor-authentication-router/schema.ts
new file mode 100644
index 000000000..3a831845f
--- /dev/null
+++ b/packages/trpc/server/two-factor-authentication-router/schema.ts
@@ -0,0 +1,32 @@
+import { z } from 'zod';
+
+export const ZSetupTwoFactorAuthenticationMutationSchema = z.object({
+ password: z.string().min(1),
+});
+
+export type TSetupTwoFactorAuthenticationMutationSchema = z.infer<
+ typeof ZSetupTwoFactorAuthenticationMutationSchema
+>;
+
+export const ZEnableTwoFactorAuthenticationMutationSchema = z.object({
+ code: z.string().min(6).max(6),
+});
+
+export type TEnableTwoFactorAuthenticationMutationSchema = z.infer<
+ typeof ZEnableTwoFactorAuthenticationMutationSchema
+>;
+
+export const ZDisableTwoFactorAuthenticationMutationSchema = z.object({
+ password: z.string().min(6).max(72),
+ backupCode: z.string().trim(),
+});
+
+export type TDisableTwoFactorAuthenticationMutationSchema = z.infer<
+ typeof ZDisableTwoFactorAuthenticationMutationSchema
+>;
+
+export const ZViewRecoveryCodesMutationSchema = z.object({
+ password: z.string().min(6).max(72),
+});
+
+export type TViewRecoveryCodesMutationSchema = z.infer;
diff --git a/packages/tsconfig/process-env.d.ts b/packages/tsconfig/process-env.d.ts
index 491b84012..717f13ade 100644
--- a/packages/tsconfig/process-env.d.ts
+++ b/packages/tsconfig/process-env.d.ts
@@ -7,6 +7,7 @@ declare namespace NodeJS {
NEXT_PRIVATE_GOOGLE_CLIENT_SECRET?: string;
NEXT_PRIVATE_DATABASE_URL: string;
+ NEXT_PRIVATE_ENCRYPTION_KEY: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_MONTHLY_PRICE_ID: string;
NEXT_PUBLIC_STRIPE_COMMUNITY_PLAN_YEARLY_PRICE_ID: string;
@@ -62,6 +63,7 @@ declare namespace NodeJS {
VERCEL_URL?: string;
DEPLOYMENT_TARGET?: 'webapp' | 'marketing';
+ FONT_CAVEAT_URI: string;
POSTGRES_URL?: string;
DATABASE_URL?: string;
diff --git a/packages/ui/components/document/document-download-button.tsx b/packages/ui/components/document/document-download-button.tsx
index e16d236f0..a2a35e490 100644
--- a/packages/ui/components/document/document-download-button.tsx
+++ b/packages/ui/components/document/document-download-button.tsx
@@ -7,8 +7,9 @@ import { Download } from 'lucide-react';
import { getFile } from '@documenso/lib/universal/upload/get-file';
import type { DocumentData } from '@documenso/prisma/client';
-import { Button } from '@documenso/ui/primitives/button';
-import { useToast } from '@documenso/ui/primitives/use-toast';
+
+import { Button } from '../../primitives/button';
+import { useToast } from '../../primitives/use-toast';
export type DownloadButtonProps = HTMLAttributes & {
disabled?: boolean;
diff --git a/packages/ui/components/document/document-share-button.tsx b/packages/ui/components/document/document-share-button.tsx
index 5b6e9006a..b366123fb 100644
--- a/packages/ui/components/document/document-share-button.tsx
+++ b/packages/ui/components/document/document-share-button.tsx
@@ -13,8 +13,9 @@ import {
} from '@documenso/lib/constants/toast';
import { generateTwitterIntent } from '@documenso/lib/universal/generate-twitter-intent';
import { trpc } from '@documenso/trpc/react';
-import { cn } from '@documenso/ui/lib/utils';
-import { Button } from '@documenso/ui/primitives/button';
+
+import { cn } from '../../lib/utils';
+import { Button } from '../../primitives/button';
import {
Dialog,
DialogContent,
@@ -22,8 +23,8 @@ import {
DialogHeader,
DialogTitle,
DialogTrigger,
-} from '@documenso/ui/primitives/dialog';
-import { useToast } from '@documenso/ui/primitives/use-toast';
+} from '../../primitives/dialog';
+import { useToast } from '../../primitives/use-toast';
export type DocumentShareButtonProps = HTMLAttributes & {
token?: string;
diff --git a/packages/ui/components/field/field-tooltip.tsx b/packages/ui/components/field/field-tooltip.tsx
index 446b14d2d..3966e9c0c 100644
--- a/packages/ui/components/field/field-tooltip.tsx
+++ b/packages/ui/components/field/field-tooltip.tsx
@@ -1,17 +1,18 @@
import { TooltipArrow } from '@radix-ui/react-tooltip';
-import { VariantProps, cva } from 'class-variance-authority';
+import type { VariantProps } from 'class-variance-authority';
+import { cva } from 'class-variance-authority';
import { createPortal } from 'react-dom';
import { useFieldPageCoords } from '@documenso/lib/client-only/hooks/use-field-page-coords';
-import { cn } from '@documenso/ui/lib/utils';
+
+import { cn } from '../..//lib/utils';
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
-} from '@documenso/ui/primitives/tooltip';
-
-import { Field } from '.prisma/client';
+} from '../..//primitives/tooltip';
+import type { Field } from '.prisma/client';
const tooltipVariants = cva('font-semibold', {
variants: {
diff --git a/packages/ui/components/field/field.tsx b/packages/ui/components/field/field.tsx
index 054cc6376..e40b2e3d9 100644
--- a/packages/ui/components/field/field.tsx
+++ b/packages/ui/components/field/field.tsx
@@ -5,9 +5,10 @@ import React, { useEffect, useState } from 'react';
import { createPortal } from 'react-dom';
import { useFieldPageCoords } from '@documenso/lib/client-only/hooks/use-field-page-coords';
-import { Field } from '@documenso/prisma/client';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
+import type { Field } from '@documenso/prisma/client';
+
+import { cn } from '../../lib/utils';
+import { Card, CardContent } from '../../primitives/card';
export type FieldRootContainerProps = {
field: Field;
diff --git a/packages/ui/components/signing-card.tsx b/packages/ui/components/signing-card.tsx
index ab057c4e5..cda0c31c3 100644
--- a/packages/ui/components/signing-card.tsx
+++ b/packages/ui/components/signing-card.tsx
@@ -2,14 +2,16 @@
import { useCallback, useEffect, useRef, useState } from 'react';
-import Image, { StaticImageData } from 'next/image';
+import type { StaticImageData } from 'next/image';
+import Image from 'next/image';
import { animate, motion, useMotionTemplate, useMotionValue, useTransform } from 'framer-motion';
import { P, match } from 'ts-pattern';
-import { Signature } from '@documenso/prisma/client';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
+import type { Signature } from '@documenso/prisma/client';
+
+import { cn } from '../lib/utils';
+import { Card, CardContent } from '../primitives/card';
export type SigningCardProps = {
className?: string;
diff --git a/packages/ui/package.json b/packages/ui/package.json
index 2ba3dc5fe..ce452091e 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -62,7 +62,7 @@
"framer-motion": "^10.12.8",
"lucide-react": "^0.279.0",
"luxon": "^3.4.2",
- "next": "14.0.0",
+ "next": "14.0.3",
"pdfjs-dist": "3.6.172",
"react-day-picker": "^8.7.1",
"react-hook-form": "^7.45.4",
diff --git a/packages/ui/primitives/combobox.tsx b/packages/ui/primitives/combobox.tsx
index 899ccd61d..85f86056d 100644
--- a/packages/ui/primitives/combobox.tsx
+++ b/packages/ui/primitives/combobox.tsx
@@ -3,16 +3,11 @@ import * as React from 'react';
import { Check, ChevronsUpDown } from 'lucide-react';
import { Role } from '@documenso/prisma/client';
-import { cn } from '@documenso/ui/lib/utils';
-import { Button } from '@documenso/ui/primitives/button';
-import {
- Command,
- CommandEmpty,
- CommandGroup,
- CommandInput,
- CommandItem,
-} from '@documenso/ui/primitives/command';
-import { Popover, PopoverContent, PopoverTrigger } from '@documenso/ui/primitives/popover';
+
+import { cn } from '../lib/utils';
+import { Button } from './button';
+import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from './command';
+import { Popover, PopoverContent, PopoverTrigger } from './popover';
type ComboboxProps = {
listValues: string[];
diff --git a/packages/ui/primitives/document-dropzone.tsx b/packages/ui/primitives/document-dropzone.tsx
index 6987e9872..d81a3a7de 100644
--- a/packages/ui/primitives/document-dropzone.tsx
+++ b/packages/ui/primitives/document-dropzone.tsx
@@ -1,12 +1,14 @@
'use client';
-import { Variants, motion } from 'framer-motion';
+import type { Variants } from 'framer-motion';
+import { motion } from 'framer-motion';
import { Plus } from 'lucide-react';
import { useDropzone } from 'react-dropzone';
import { megabytesToBytes } from '@documenso/lib/universal/unit-convertions';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
+
+import { cn } from '../lib/utils';
+import { Card, CardContent } from './card';
const DocumentDropzoneContainerVariants: Variants = {
initial: {
diff --git a/packages/ui/primitives/document-flow/add-fields.tsx b/packages/ui/primitives/document-flow/add-fields.tsx
index f662dca8b..a8ae9f0e3 100644
--- a/packages/ui/primitives/document-flow/add-fields.tsx
+++ b/packages/ui/primitives/document-flow/add-fields.tsx
@@ -11,29 +11,27 @@ import { getBoundingClientRect } from '@documenso/lib/client-only/get-bounding-c
import { useDocumentElement } from '@documenso/lib/client-only/hooks/use-document-element';
import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer';
import { nanoid } from '@documenso/lib/universal/id';
-import { Field, FieldType, Recipient, SendStatus } from '@documenso/prisma/client';
-import { cn } from '@documenso/ui/lib/utils';
-import { Button } from '@documenso/ui/primitives/button';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
-import {
- Command,
- CommandEmpty,
- CommandGroup,
- CommandInput,
- CommandItem,
-} from '@documenso/ui/primitives/command';
-import { Popover, PopoverContent, PopoverTrigger } from '@documenso/ui/primitives/popover';
-import { Tooltip, TooltipContent, TooltipTrigger } from '@documenso/ui/primitives/tooltip';
+import type { Field, Recipient } from '@documenso/prisma/client';
+import { FieldType, SendStatus } from '@documenso/prisma/client';
-import { TAddFieldsFormSchema } from './add-fields.types';
+import { cn } from '../../lib/utils';
+import { Button } from '../button';
+import { Card, CardContent } from '../card';
+import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem } from '../command';
+import { Popover, PopoverContent, PopoverTrigger } from '../popover';
+import { useStep } from '../stepper';
+import { Tooltip, TooltipContent, TooltipTrigger } from '../tooltip';
+import type { TAddFieldsFormSchema } from './add-fields.types';
import {
DocumentFlowFormContainerActions,
DocumentFlowFormContainerContent,
DocumentFlowFormContainerFooter,
+ DocumentFlowFormContainerHeader,
DocumentFlowFormContainerStep,
} from './document-flow-root';
import { FieldItem } from './field-item';
-import { DocumentFlowStep, FRIENDLY_FIELD_TYPE } from './types';
+import type { DocumentFlowStep } from './types';
+import { FRIENDLY_FIELD_TYPE } from './types';
const fontCaveat = Caveat({
weight: ['500'],
@@ -53,7 +51,6 @@ export type AddFieldsFormProps = {
hideRecipients?: boolean;
recipients: Recipient[];
fields: Field[];
- numberOfSteps: number;
onSubmit: (_data: TAddFieldsFormSchema) => void;
};
@@ -62,10 +59,10 @@ export const AddFieldsFormPartial = ({
hideRecipients = false,
recipients,
fields,
- numberOfSteps,
onSubmit,
}: AddFieldsFormProps) => {
const { isWithinPageBounds, getFieldPosition, getPage } = useDocumentElement();
+ const { currentStep, totalSteps, previousStep } = useStep();
const {
control,
@@ -287,6 +284,10 @@ export const AddFieldsFormPartial = ({
return (
<>
+
{selectedField && (
@@ -513,15 +514,15 @@ export const AddFieldsFormPartial = ({
{
- documentFlow.onBackStep?.();
+ previousStep();
remove();
}}
onGoNextClick={() => void onFormSubmit()}
diff --git a/packages/ui/primitives/document-flow/add-signature.tsx b/packages/ui/primitives/document-flow/add-signature.tsx
index aed252083..e4e5d9253 100644
--- a/packages/ui/primitives/document-flow/add-signature.tsx
+++ b/packages/ui/primitives/document-flow/add-signature.tsx
@@ -9,35 +9,38 @@ import { match } from 'ts-pattern';
import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer';
import { sortFieldsByPosition, validateFieldsInserted } from '@documenso/lib/utils/fields';
-import { Field, FieldType } from '@documenso/prisma/client';
-import { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
-import { FieldToolTip } from '@documenso/ui/components/field/field-tooltip';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
-import { TAddSignatureFormSchema } from '@documenso/ui/primitives/document-flow/add-signature.types';
+import type { Field } from '@documenso/prisma/client';
+import { FieldType } from '@documenso/prisma/client';
+import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
+
+import { FieldToolTip } from '../../components/field/field-tooltip';
+import { cn } from '../../lib/utils';
+import { Card, CardContent } from '../card';
+import { ElementVisible } from '../element-visible';
+import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '../form/form';
+import { Input } from '../input';
+import { SignaturePad } from '../signature-pad';
+import { useStep } from '../stepper';
+import type { TAddSignatureFormSchema } from './add-signature.types';
+import { ZAddSignatureFormSchema } from './add-signature.types';
import {
DocumentFlowFormContainerActions,
DocumentFlowFormContainerContent,
DocumentFlowFormContainerFooter,
+ DocumentFlowFormContainerHeader,
DocumentFlowFormContainerStep,
-} from '@documenso/ui/primitives/document-flow/document-flow-root';
-import { DocumentFlowStep } from '@documenso/ui/primitives/document-flow/types';
-import { ElementVisible } from '@documenso/ui/primitives/element-visible';
-import { Input } from '@documenso/ui/primitives/input';
-import { SignaturePad } from '@documenso/ui/primitives/signature-pad';
-
-import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '../form/form';
-import { ZAddSignatureFormSchema } from './add-signature.types';
+} from './document-flow-root';
import {
SinglePlayerModeCustomTextField,
SinglePlayerModeSignatureField,
} from './single-player-mode-fields';
+import type { DocumentFlowStep } from './types';
export type AddSignatureFormProps = {
defaultValues?: TAddSignatureFormSchema;
documentFlow: DocumentFlowStep;
fields: FieldWithSignature[];
- numberOfSteps: number;
+
onSubmit: (_data: TAddSignatureFormSchema) => Promise | void;
requireName?: boolean;
requireSignature?: boolean;
@@ -47,11 +50,13 @@ export const AddSignatureFormPartial = ({
defaultValues,
documentFlow,
fields,
- numberOfSteps,
+
onSubmit,
requireName = false,
requireSignature = true,
}: AddSignatureFormProps) => {
+ const { currentStep, totalSteps } = useStep();
+
const [validateUninsertedFields, setValidateUninsertedFields] = useState(false);
// Refined schema which takes into account whether to allow an empty name or signature.
@@ -206,46 +211,30 @@ export const AddSignatureFormPartial = ({
};
return (
-
-
+
+
- {validateUninsertedFields && uninsertedFields[0] && (
-
- Click to insert field
-
- )}
+
+
+
-
- {localFields.map((field) =>
- match(field.type)
- .with(FieldType.DATE, FieldType.EMAIL, FieldType.NAME, () => {
- return (
-
+ Click to insert field
+
+ )}
+
+
+ {localFields.map((field) =>
+ match(field.type)
+ .with(FieldType.DATE, FieldType.EMAIL, FieldType.NAME, () => {
+ return (
+
+ );
+ })
+ .with(FieldType.SIGNATURE, () => (
+
- );
- })
- .with(FieldType.SIGNATURE, () => (
-
- ))
- .otherwise(() => {
- return null;
- }),
- )}
-
-
+ ))
+ .otherwise(() => {
+ return null;
+ }),
+ )}
+
+
+ >
);
};
diff --git a/packages/ui/primitives/document-flow/add-signature.types.tsx b/packages/ui/primitives/document-flow/add-signature.types.ts
similarity index 100%
rename from packages/ui/primitives/document-flow/add-signature.types.tsx
rename to packages/ui/primitives/document-flow/add-signature.types.ts
diff --git a/packages/ui/primitives/document-flow/add-signers.tsx b/packages/ui/primitives/document-flow/add-signers.tsx
index 14d728f0a..71be1c069 100644
--- a/packages/ui/primitives/document-flow/add-signers.tsx
+++ b/packages/ui/primitives/document-flow/add-signers.tsx
@@ -9,34 +9,39 @@ import { Controller, useFieldArray, useForm } from 'react-hook-form';
import { useLimits } from '@documenso/ee/server-only/limits/provider/client';
import { nanoid } from '@documenso/lib/universal/id';
-import { Field, Recipient, SendStatus } from '@documenso/prisma/client';
-import { Button } from '@documenso/ui/primitives/button';
-import { FormErrorMessage } from '@documenso/ui/primitives/form/form-error-message';
-import { Input } from '@documenso/ui/primitives/input';
-import { Label } from '@documenso/ui/primitives/label';
-import { useToast } from '@documenso/ui/primitives/use-toast';
+import type { Field, Recipient } from '@documenso/prisma/client';
+import { DocumentStatus, SendStatus } from '@documenso/prisma/client';
+import type { DocumentWithData } from '@documenso/prisma/types/document-with-data';
-import { TAddSignersFormSchema, ZAddSignersFormSchema } from './add-signers.types';
+import { Button } from '../button';
+import { FormErrorMessage } from '../form/form-error-message';
+import { Input } from '../input';
+import { Label } from '../label';
+import { useStep } from '../stepper';
+import { useToast } from '../use-toast';
+import type { TAddSignersFormSchema } from './add-signers.types';
+import { ZAddSignersFormSchema } from './add-signers.types';
import {
DocumentFlowFormContainerActions,
DocumentFlowFormContainerContent,
DocumentFlowFormContainerFooter,
+ DocumentFlowFormContainerHeader,
DocumentFlowFormContainerStep,
} from './document-flow-root';
-import { DocumentFlowStep } from './types';
+import type { DocumentFlowStep } from './types';
export type AddSignersFormProps = {
documentFlow: DocumentFlowStep;
recipients: Recipient[];
fields: Field[];
- numberOfSteps: number;
+ document: DocumentWithData;
onSubmit: (_data: TAddSignersFormSchema) => void;
};
export const AddSignersFormPartial = ({
documentFlow,
- numberOfSteps,
recipients,
+ document,
fields: _fields,
onSubmit,
}: AddSignersFormProps) => {
@@ -45,6 +50,8 @@ export const AddSignersFormPartial = ({
const initialId = useId();
+ const { currentStep, totalSteps, previousStep } = useStep();
+
const {
control,
handleSubmit,
@@ -123,6 +130,10 @@ export const AddSignersFormPartial = ({
return (
<>
+
@@ -218,14 +229,15 @@ export const AddSignersFormPartial = ({
void onFormSubmit()}
/>
diff --git a/packages/ui/primitives/document-flow/add-signers.types.ts b/packages/ui/primitives/document-flow/add-signers.types.ts
index 3dabd67e5..fc063ea3c 100644
--- a/packages/ui/primitives/document-flow/add-signers.types.ts
+++ b/packages/ui/primitives/document-flow/add-signers.types.ts
@@ -6,7 +6,7 @@ export const ZAddSignersFormSchema = z
z.object({
formId: z.string().min(1),
nativeId: z.number().optional(),
- email: z.string().min(1).email(),
+ email: z.string().email().min(1),
name: z.string(),
}),
),
diff --git a/packages/ui/primitives/document-flow/add-subject.tsx b/packages/ui/primitives/document-flow/add-subject.tsx
index 1bf3b2cb4..881d59c74 100644
--- a/packages/ui/primitives/document-flow/add-subject.tsx
+++ b/packages/ui/primitives/document-flow/add-subject.tsx
@@ -2,28 +2,30 @@
import { useForm } from 'react-hook-form';
-import { DocumentStatus, Field, Recipient } from '@documenso/prisma/client';
-import { DocumentWithData } from '@documenso/prisma/types/document-with-data';
-import { FormErrorMessage } from '@documenso/ui/primitives/form/form-error-message';
-import { Input } from '@documenso/ui/primitives/input';
-import { Label } from '@documenso/ui/primitives/label';
-import { Textarea } from '@documenso/ui/primitives/textarea';
+import type { Field, Recipient } from '@documenso/prisma/client';
+import { DocumentStatus } from '@documenso/prisma/client';
+import type { DocumentWithData } from '@documenso/prisma/types/document-with-data';
-import { TAddSubjectFormSchema } from './add-subject.types';
+import { FormErrorMessage } from '../form/form-error-message';
+import { Input } from '../input';
+import { Label } from '../label';
+import { useStep } from '../stepper';
+import { Textarea } from '../textarea';
+import type { TAddSubjectFormSchema } from './add-subject.types';
import {
DocumentFlowFormContainerActions,
DocumentFlowFormContainerContent,
DocumentFlowFormContainerFooter,
+ DocumentFlowFormContainerHeader,
DocumentFlowFormContainerStep,
} from './document-flow-root';
-import { DocumentFlowStep } from './types';
+import type { DocumentFlowStep } from './types';
export type AddSubjectFormProps = {
documentFlow: DocumentFlowStep;
recipients: Recipient[];
fields: Field[];
document: DocumentWithData;
- numberOfSteps: number;
onSubmit: (_data: TAddSubjectFormSchema) => void;
};
@@ -32,7 +34,6 @@ export const AddSubjectFormPartial = ({
recipients: _recipients,
fields: _fields,
document,
- numberOfSteps,
onSubmit,
}: AddSubjectFormProps) => {
const {
@@ -49,9 +50,14 @@ export const AddSubjectFormPartial = ({
});
const onFormSubmit = handleSubmit(onSubmit);
+ const { currentStep, totalSteps, previousStep } = useStep();
return (
<>
+
@@ -124,15 +130,15 @@ export const AddSubjectFormPartial = ({
void onFormSubmit()}
/>
diff --git a/packages/ui/primitives/document-flow/add-title.tsx b/packages/ui/primitives/document-flow/add-title.tsx
new file mode 100644
index 000000000..8c2a9dc7a
--- /dev/null
+++ b/packages/ui/primitives/document-flow/add-title.tsx
@@ -0,0 +1,95 @@
+'use client';
+
+import { useForm } from 'react-hook-form';
+
+import type { Field, Recipient } from '@documenso/prisma/client';
+import type { DocumentWithData } from '@documenso/prisma/types/document-with-data';
+
+import { FormErrorMessage } from '../form/form-error-message';
+import { Input } from '../input';
+import { Label } from '../label';
+import { useStep } from '../stepper';
+import type { TAddTitleFormSchema } from './add-title.types';
+import {
+ DocumentFlowFormContainerActions,
+ DocumentFlowFormContainerContent,
+ DocumentFlowFormContainerFooter,
+ DocumentFlowFormContainerHeader,
+ DocumentFlowFormContainerStep,
+} from './document-flow-root';
+import type { DocumentFlowStep } from './types';
+
+export type AddTitleFormProps = {
+ documentFlow: DocumentFlowStep;
+ recipients: Recipient[];
+ fields: Field[];
+ document: DocumentWithData;
+ onSubmit: (_data: TAddTitleFormSchema) => void;
+};
+
+export const AddTitleFormPartial = ({
+ documentFlow,
+ recipients: _recipients,
+ fields: _fields,
+ document,
+ onSubmit,
+}: AddTitleFormProps) => {
+ const {
+ register,
+ handleSubmit,
+ formState: { errors, isSubmitting },
+ } = useForm
({
+ defaultValues: {
+ title: document.title,
+ },
+ });
+
+ const onFormSubmit = handleSubmit(onSubmit);
+
+ const { stepIndex, currentStep, totalSteps, previousStep } = useStep();
+
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ void onFormSubmit()}
+ />
+
+ >
+ );
+};
diff --git a/packages/ui/primitives/document-flow/add-title.types.ts b/packages/ui/primitives/document-flow/add-title.types.ts
new file mode 100644
index 000000000..aaa8c17e4
--- /dev/null
+++ b/packages/ui/primitives/document-flow/add-title.types.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod';
+
+export const ZAddTitleFormSchema = z.object({
+ title: z.string().min(1),
+});
+
+export type TAddTitleFormSchema = z.infer;
diff --git a/packages/ui/primitives/document-flow/document-flow-root.tsx b/packages/ui/primitives/document-flow/document-flow-root.tsx
index aec74dd6c..42b70c58a 100644
--- a/packages/ui/primitives/document-flow/document-flow-root.tsx
+++ b/packages/ui/primitives/document-flow/document-flow-root.tsx
@@ -1,11 +1,12 @@
'use client';
-import React, { HTMLAttributes } from 'react';
+import type { HTMLAttributes } from 'react';
+import React from 'react';
import { motion } from 'framer-motion';
-import { cn } from '@documenso/ui/lib/utils';
-import { Button } from '@documenso/ui/primitives/button';
+import { cn } from '../../lib/utils';
+import { Button } from '../button';
export type DocumentFlowFormContainerProps = HTMLAttributes & {
children?: React.ReactNode;
diff --git a/packages/ui/primitives/document-flow/field-item.tsx b/packages/ui/primitives/document-flow/field-item.tsx
index 48e52b9a7..7583bd4b9 100644
--- a/packages/ui/primitives/document-flow/field-item.tsx
+++ b/packages/ui/primitives/document-flow/field-item.tsx
@@ -7,10 +7,11 @@ import { createPortal } from 'react-dom';
import { Rnd } from 'react-rnd';
import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer';
-import { cn } from '@documenso/ui/lib/utils';
-import { Card, CardContent } from '@documenso/ui/primitives/card';
-import { FRIENDLY_FIELD_TYPE, TDocumentFlowFormSchema } from './types';
+import { cn } from '../../lib/utils';
+import { Card, CardContent } from '../card';
+import type { TDocumentFlowFormSchema } from './types';
+import { FRIENDLY_FIELD_TYPE } from './types';
type Field = TDocumentFlowFormSchema['fields'][0];
diff --git a/packages/ui/primitives/document-flow/send-document-action-dialog.tsx b/packages/ui/primitives/document-flow/send-document-action-dialog.tsx
index f295dadfc..a70282800 100644
--- a/packages/ui/primitives/document-flow/send-document-action-dialog.tsx
+++ b/packages/ui/primitives/document-flow/send-document-action-dialog.tsx
@@ -2,7 +2,8 @@ import { useState } from 'react';
import { Loader } from 'lucide-react';
-import { Button, ButtonProps } from '@documenso/ui/primitives/button';
+import type { ButtonProps } from '../button';
+import { Button } from '../button';
import {
Dialog,
DialogContent,
@@ -11,7 +12,7 @@ import {
DialogHeader,
DialogTitle,
DialogTrigger,
-} from '@documenso/ui/primitives/dialog';
+} from '../dialog';
export type SendDocumentActionDialogProps = ButtonProps & {
loading?: boolean;
diff --git a/packages/ui/primitives/document-flow/single-player-mode-fields.tsx b/packages/ui/primitives/document-flow/single-player-mode-fields.tsx
index 04c093efc..7cecd7131 100644
--- a/packages/ui/primitives/document-flow/single-player-mode-fields.tsx
+++ b/packages/ui/primitives/document-flow/single-player-mode-fields.tsx
@@ -13,9 +13,11 @@ import {
MIN_HANDWRITING_FONT_SIZE,
MIN_STANDARD_FONT_SIZE,
} from '@documenso/lib/constants/pdf';
-import { Field, FieldType } from '@documenso/prisma/client';
-import { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
-import { FieldRootContainer } from '@documenso/ui/components/field/field';
+import type { Field } from '@documenso/prisma/client';
+import { FieldType } from '@documenso/prisma/client';
+import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature';
+
+import { FieldRootContainer } from '../../components/field/field';
export type SinglePlayerModeFieldContainerProps = {
field: FieldWithSignature;
diff --git a/packages/ui/primitives/document-flow/types.ts b/packages/ui/primitives/document-flow/types.ts
index 2c24f8c96..677dc931b 100644
--- a/packages/ui/primitives/document-flow/types.ts
+++ b/packages/ui/primitives/document-flow/types.ts
@@ -3,6 +3,8 @@ import { z } from 'zod';
import { FieldType } from '@documenso/prisma/client';
export const ZDocumentFlowFormSchema = z.object({
+ title: z.string().min(1),
+
signers: z
.array(
z.object({
@@ -51,7 +53,7 @@ export const FRIENDLY_FIELD_TYPE: Record = {
export interface DocumentFlowStep {
title: string;
description: string;
- stepIndex: number;
- onBackStep?: () => void;
- onNextStep?: () => void;
+ stepIndex?: number;
+ onBackStep?: () => unknown;
+ onNextStep?: () => unknown;
}
diff --git a/packages/ui/primitives/form/form-error-message.tsx b/packages/ui/primitives/form/form-error-message.tsx
index bb555b7f7..e429799da 100644
--- a/packages/ui/primitives/form/form-error-message.tsx
+++ b/packages/ui/primitives/form/form-error-message.tsx
@@ -1,6 +1,6 @@
import { AnimatePresence, motion } from 'framer-motion';
-import { cn } from '@documenso/ui/lib/utils';
+import { cn } from '../../lib/utils';
export type FormErrorMessageProps = {
className?: string;
diff --git a/packages/ui/primitives/form/form.tsx b/packages/ui/primitives/form/form.tsx
index 9467de3af..f500accae 100644
--- a/packages/ui/primitives/form/form.tsx
+++ b/packages/ui/primitives/form/form.tsx
@@ -1,19 +1,12 @@
import * as React from 'react';
-import * as LabelPrimitive from '@radix-ui/react-label';
+import type * as LabelPrimitive from '@radix-ui/react-label';
import { Slot } from '@radix-ui/react-slot';
import { AnimatePresence, motion } from 'framer-motion';
-import {
- Controller,
- ControllerProps,
- FieldPath,
- FieldValues,
- FormProvider,
- useFormContext,
-} from 'react-hook-form';
-
-import { cn } from '@documenso/ui/lib/utils';
+import type { ControllerProps, FieldPath, FieldValues } from 'react-hook-form';
+import { Controller, FormProvider, useFormContext } from 'react-hook-form';
+import { cn } from '../../lib/utils';
import { Label } from '../label';
const Form = FormProvider;
diff --git a/packages/ui/primitives/input.tsx b/packages/ui/primitives/input.tsx
index 1a5fba1bb..ac739c984 100644
--- a/packages/ui/primitives/input.tsx
+++ b/packages/ui/primitives/input.tsx
@@ -1,6 +1,9 @@
import * as React from 'react';
+import { Eye, EyeOff } from 'lucide-react';
+
import { cn } from '../lib/utils';
+import { Button } from './button';
export type InputProps = React.InputHTMLAttributes;
@@ -25,4 +28,38 @@ const Input = React.forwardRef(
Input.displayName = 'Input';
-export { Input };
+const PasswordInput = React.forwardRef(
+ ({ className, ...props }, ref) => {
+ const [showPassword, setShowPassword] = React.useState(false);
+
+ return (
+
+
+
+ setShowPassword((show) => !show)}
+ >
+ {showPassword ? (
+
+ ) : (
+
+ )}
+
+
+ );
+ },
+);
+
+PasswordInput.displayName = 'Input';
+
+export { Input, PasswordInput };
diff --git a/packages/ui/primitives/pdf-viewer.tsx b/packages/ui/primitives/pdf-viewer.tsx
index 62b08d2f9..07cdaf1e2 100644
--- a/packages/ui/primitives/pdf-viewer.tsx
+++ b/packages/ui/primitives/pdf-viewer.tsx
@@ -3,16 +3,16 @@
import React, { useEffect, useMemo, useRef, useState } from 'react';
import { Loader } from 'lucide-react';
-import { PDFDocumentProxy } from 'pdfjs-dist';
+import type { PDFDocumentProxy } from 'pdfjs-dist';
import { Document as PDFDocument, Page as PDFPage, pdfjs } from 'react-pdf';
import 'react-pdf/dist/esm/Page/AnnotationLayer.css';
import 'react-pdf/dist/esm/Page/TextLayer.css';
import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer';
import { getFile } from '@documenso/lib/universal/upload/get-file';
-import { DocumentData } from '@documenso/prisma/client';
-import { cn } from '@documenso/ui/lib/utils';
+import type { DocumentData } from '@documenso/prisma/client';
+import { cn } from '../lib/utils';
import { useToast } from './use-toast';
export type LoadedPDFDocument = PDFDocumentProxy;
diff --git a/packages/ui/primitives/signature-pad/signature-pad.tsx b/packages/ui/primitives/signature-pad/signature-pad.tsx
index 107627240..3497418d7 100644
--- a/packages/ui/primitives/signature-pad/signature-pad.tsx
+++ b/packages/ui/primitives/signature-pad/signature-pad.tsx
@@ -1,20 +1,12 @@
'use client';
-import {
- HTMLAttributes,
- MouseEvent,
- PointerEvent,
- TouchEvent,
- useEffect,
- useMemo,
- useRef,
- useState,
-} from 'react';
+import type { HTMLAttributes, MouseEvent, PointerEvent, TouchEvent } from 'react';
+import { useEffect, useMemo, useRef, useState } from 'react';
-import { StrokeOptions, getStroke } from 'perfect-freehand';
-
-import { cn } from '@documenso/ui/lib/utils';
+import type { StrokeOptions } from 'perfect-freehand';
+import { getStroke } from 'perfect-freehand';
+import { cn } from '../../lib/utils';
import { getSvgPathFromStroke } from './helper';
import { Point } from './point';
diff --git a/packages/ui/primitives/stepper.tsx b/packages/ui/primitives/stepper.tsx
new file mode 100644
index 000000000..d38de2eb1
--- /dev/null
+++ b/packages/ui/primitives/stepper.tsx
@@ -0,0 +1,109 @@
+import React, { createContext, useContext, useState } from 'react';
+import type { FC } from 'react';
+
+type StepContextValue = {
+ isCompleting: boolean;
+ stepIndex: number;
+ currentStep: number;
+ totalSteps: number;
+ isFirst: boolean;
+ isLast: boolean;
+ nextStep: () => void;
+ previousStep: () => void;
+};
+
+const StepContext = createContext(null);
+
+type StepperProps = {
+ children: React.ReactNode;
+ onComplete?: () => void | Promise;
+ onStepChanged?: (currentStep: number) => void;
+ currentStep?: number; // external control prop
+ setCurrentStep?: (step: number) => void; // external control function
+};
+
+export const Stepper: FC = ({
+ children,
+ onComplete,
+ onStepChanged,
+ currentStep: propCurrentStep,
+ setCurrentStep: propSetCurrentStep,
+}) => {
+ const [stateCurrentStep, stateSetCurrentStep] = useState(1);
+ const [isCompleting, setIsCompleting] = useState(false);
+
+ // Determine if props are provided, otherwise use state
+ const isControlled = propCurrentStep !== undefined && propSetCurrentStep !== undefined;
+ const currentStep = isControlled ? propCurrentStep : stateCurrentStep;
+ const setCurrentStep = isControlled ? propSetCurrentStep : stateSetCurrentStep;
+
+ const totalSteps = React.Children.count(children);
+
+ const handleComplete = async () => {
+ try {
+ if (!onComplete) {
+ return;
+ }
+
+ setIsCompleting(true);
+
+ await onComplete();
+
+ setIsCompleting(false);
+ } catch (error) {
+ setIsCompleting(false);
+
+ throw error;
+ }
+ };
+
+ const handleStepChange = (nextStep: number) => {
+ setCurrentStep(nextStep);
+ onStepChanged?.(nextStep);
+ };
+
+ const nextStep = () => {
+ if (currentStep < totalSteps) {
+ void handleStepChange(currentStep + 1);
+ } else {
+ void handleComplete();
+ }
+ };
+
+ const previousStep = () => {
+ if (currentStep > 1) {
+ void handleStepChange(currentStep - 1);
+ }
+ };
+
+ // Empty stepper
+ if (totalSteps === 0) {
+ return null;
+ }
+
+ const currentChild = React.Children.toArray(children)[currentStep - 1];
+
+ const stepContextValue: StepContextValue = {
+ isCompleting,
+ stepIndex: currentStep - 1,
+ currentStep,
+ totalSteps,
+ isFirst: currentStep === 1,
+ isLast: currentStep === totalSteps,
+ nextStep,
+ previousStep,
+ };
+
+ return {currentChild};
+};
+
+/** Hook for children to use the step context */
+export const useStep = (): StepContextValue => {
+ const context = useContext(StepContext);
+
+ if (!context) {
+ throw new Error('useStep must be used within a Stepper');
+ }
+
+ return context;
+};
diff --git a/turbo.json b/turbo.json
index 0dac59203..36b169a80 100644
--- a/turbo.json
+++ b/turbo.json
@@ -33,6 +33,7 @@
"globalDependencies": ["**/.env.*local"],
"globalEnv": [
"APP_VERSION",
+ "NEXT_PRIVATE_ENCRYPTION_KEY",
"NEXTAUTH_URL",
"NEXTAUTH_SECRET",
"NEXT_PUBLIC_PROJECT",
@@ -85,6 +86,7 @@
"VERCEL_ENV",
"VERCEL_URL",
"DEPLOYMENT_TARGET",
+ "FONT_CAVEAT_URI",
"POSTGRES_URL",
"DATABASE_URL",
"POSTGRES_PRISMA_URL",