& {
export const FundingRaised = ({ className, data, ...props }: FundingRaisedProps) => {
const formattedData = data.map((item) => ({
amount: Number(item.amount),
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
date: formatMonth(item.date as string),
}));
diff --git a/apps/marketing/src/app/(marketing)/open/metric-card.tsx b/apps/marketing/src/app/(marketing)/open/metric-card.tsx
index 6235f4f5e..f7bf59e62 100644
--- a/apps/marketing/src/app/(marketing)/open/metric-card.tsx
+++ b/apps/marketing/src/app/(marketing)/open/metric-card.tsx
@@ -1,4 +1,4 @@
-import { HTMLAttributes } from 'react';
+import type { HTMLAttributes } from 'react';
import { cn } from '@documenso/ui/lib/utils';
diff --git a/apps/marketing/src/app/(marketing)/open/salary-bands.tsx b/apps/marketing/src/app/(marketing)/open/salary-bands.tsx
index 31c254157..41754cff6 100644
--- a/apps/marketing/src/app/(marketing)/open/salary-bands.tsx
+++ b/apps/marketing/src/app/(marketing)/open/salary-bands.tsx
@@ -1,4 +1,4 @@
-import { HTMLAttributes } from 'react';
+import type { HTMLAttributes } from 'react';
import { cn } from '@documenso/ui/lib/utils';
import {
diff --git a/apps/marketing/src/app/(marketing)/oss-friends/container.tsx b/apps/marketing/src/app/(marketing)/oss-friends/container.tsx
index 0f1f66664..f2ea4e855 100644
--- a/apps/marketing/src/app/(marketing)/oss-friends/container.tsx
+++ b/apps/marketing/src/app/(marketing)/oss-friends/container.tsx
@@ -2,13 +2,14 @@
import Link from 'next/link';
-import { Variants, motion } from 'framer-motion';
+import type { Variants } from 'framer-motion';
+import { motion } from 'framer-motion';
import { cn } from '@documenso/ui/lib/utils';
import { Button } from '@documenso/ui/primitives/button';
import { Card, CardContent, CardTitle } from '@documenso/ui/primitives/card';
-import { TOSSFriendsSchema } from './schema';
+import type { TOSSFriendsSchema } from './schema';
const ContainerVariants: Variants = {
initial: {
diff --git a/apps/marketing/src/app/robots.ts b/apps/marketing/src/app/robots.ts
index cc718ff25..a222a892e 100644
--- a/apps/marketing/src/app/robots.ts
+++ b/apps/marketing/src/app/robots.ts
@@ -1,4 +1,4 @@
-import { MetadataRoute } from 'next';
+import type { MetadataRoute } from 'next';
import { getBaseUrl } from '@documenso/lib/universal/get-base-url';
diff --git a/apps/marketing/src/app/sitemap.ts b/apps/marketing/src/app/sitemap.ts
index b9becde3b..4913402f9 100644
--- a/apps/marketing/src/app/sitemap.ts
+++ b/apps/marketing/src/app/sitemap.ts
@@ -1,4 +1,4 @@
-import { MetadataRoute } from 'next';
+import type { MetadataRoute } from 'next';
import { allBlogPosts, allGenericPages } from 'contentlayer/generated';
diff --git a/apps/marketing/src/components/(marketing)/hero.tsx b/apps/marketing/src/components/(marketing)/hero.tsx
index f416cc4ca..5809bd695 100644
--- a/apps/marketing/src/components/(marketing)/hero.tsx
+++ b/apps/marketing/src/components/(marketing)/hero.tsx
@@ -96,7 +96,7 @@ export const Hero = ({ className, ...props }: HeroProps) => {
variants={HeroTitleVariants}
initial="initial"
animate="animate"
- className="text-center text-4xl font-bold leading-tight tracking-tight lg:text-[64px]"
+ className="text-center text-4xl font-bold leading-tight tracking-tight md:text-[48px] lg:text-[64px]"
>
Document signing,
finally open source.
diff --git a/apps/marketing/src/components/(marketing)/open-build-template-bento.tsx b/apps/marketing/src/components/(marketing)/open-build-template-bento.tsx
index 3c76c3547..4d4d6ad8a 100644
--- a/apps/marketing/src/components/(marketing)/open-build-template-bento.tsx
+++ b/apps/marketing/src/components/(marketing)/open-build-template-bento.tsx
@@ -1,4 +1,4 @@
-import { HTMLAttributes } from 'react';
+import type { HTMLAttributes } from 'react';
import Image from 'next/image';
diff --git a/apps/marketing/src/components/(marketing)/widget.tsx b/apps/marketing/src/components/(marketing)/widget.tsx
index 8b6c3cd8e..c4611746a 100644
--- a/apps/marketing/src/components/(marketing)/widget.tsx
+++ b/apps/marketing/src/components/(marketing)/widget.tsx
@@ -346,7 +346,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
{signatureText && (
{signatureText}
@@ -360,7 +360,7 @@ export const Widget = ({ className, children, ...props }: WidgetProps) => {
>
, 'viewBox'>;
diff --git a/apps/marketing/src/providers/next-theme.tsx b/apps/marketing/src/providers/next-theme.tsx
index 6e9122e5a..d15114606 100644
--- a/apps/marketing/src/providers/next-theme.tsx
+++ b/apps/marketing/src/providers/next-theme.tsx
@@ -3,7 +3,7 @@
import * as React from 'react';
import { ThemeProvider as NextThemesProvider } from 'next-themes';
-import { ThemeProviderProps } from 'next-themes/dist/types';
+import type { ThemeProviderProps } from 'next-themes/dist/types';
export function ThemeProvider({ children, ...props }: ThemeProviderProps) {
return {children};
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx b/apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx
index 7b6bb8a91..0fb592ea1 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/document-page-view-dropdown.tsx
@@ -118,7 +118,7 @@ export const DocumentPageViewDropdown = ({ document, team }: DocumentPageViewDro
- Logs
+ Audit Log
diff --git a/apps/web/src/components/(dashboard)/common/command-menu.tsx b/apps/web/src/components/(dashboard)/common/command-menu.tsx
index bdc6c2064..812efd4b9 100644
--- a/apps/web/src/components/(dashboard)/common/command-menu.tsx
+++ b/apps/web/src/components/(dashboard)/common/command-menu.tsx
@@ -5,7 +5,6 @@ import { useCallback, useMemo, useState } from 'react';
import { useRouter } from 'next/navigation';
import { Loader, Monitor, Moon, Sun } from 'lucide-react';
-import { useSession } from 'next-auth/react';
import { useTheme } from 'next-themes';
import { useHotkeys } from 'react-hotkeys-hook';
@@ -18,7 +17,6 @@ import {
DO_NOT_INVALIDATE_QUERY_ON_MUTATION,
SKIP_QUERY_BATCH_META,
} from '@documenso/lib/constants/trpc';
-import type { Document, Recipient } from '@documenso/prisma/client';
import { trpc as trpcReact } from '@documenso/trpc/react';
import {
CommandDialog,
@@ -71,7 +69,6 @@ export type CommandMenuProps = {
export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
const { setTheme } = useTheme();
- const { data: session } = useSession();
const router = useRouter();
@@ -93,17 +90,6 @@ export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
},
);
- const isOwner = useCallback(
- (document: Document) => document.userId === session?.user.id,
- [session?.user.id],
- );
-
- const getSigningLink = useCallback(
- (recipients: Recipient[]) =>
- `/sign/${recipients.find((r) => r.email === session?.user.email)?.token}`,
- [session?.user.email],
- );
-
const searchResults = useMemo(() => {
if (!searchDocumentsData) {
return [];
@@ -111,10 +97,10 @@ export function CommandMenu({ open, onOpenChange }: CommandMenuProps) {
return searchDocumentsData.map((document) => ({
label: document.title,
- path: isOwner(document) ? `/documents/${document.id}` : getSigningLink(document.Recipient),
- value: [document.id, document.title, ...document.Recipient.map((r) => r.email)].join(' '),
+ path: document.path,
+ value: document.value,
}));
- }, [searchDocumentsData, isOwner, getSigningLink]);
+ }, [searchDocumentsData]);
const currentPage = pages[pages.length - 1];
diff --git a/apps/web/src/components/(dashboard)/layout/menu-switcher.tsx b/apps/web/src/components/(dashboard)/layout/menu-switcher.tsx
index 95f959ab2..bb8429adc 100644
--- a/apps/web/src/components/(dashboard)/layout/menu-switcher.tsx
+++ b/apps/web/src/components/(dashboard)/layout/menu-switcher.tsx
@@ -93,7 +93,7 @@ export const MenuSwitcher = ({ user, teams: initialTeamsData }: MenuSwitcherProp
diff --git a/apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx b/apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx
index a6009e7b5..ff5428298 100644
--- a/apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx
+++ b/apps/web/src/components/(dashboard)/layout/mobile-navigation.tsx
@@ -46,7 +46,7 @@ export const MobileNavigation = ({ isMenuOpen, onMenuOpenChange }: MobileNavigat
return (
-
+
- © {new Date().getFullYear()} Documenso, Inc. All rights reserved.
+ © {new Date().getFullYear()} Documenso, Inc.
All rights reserved.
diff --git a/packages/api/v1/openapi.ts b/packages/api/v1/openapi.ts
index af0582195..55ec4d7fd 100644
--- a/packages/api/v1/openapi.ts
+++ b/packages/api/v1/openapi.ts
@@ -2,16 +2,34 @@ import { generateOpenApi } from '@ts-rest/open-api';
import { ApiContractV1 } from './contract';
-export const OpenAPIV1 = generateOpenApi(
- ApiContractV1,
- {
- info: {
- title: 'Documenso API',
- version: '1.0.0',
- description: 'The Documenso API for retrieving, creating, updating and deleting documents.',
+export const OpenAPIV1 = Object.assign(
+ generateOpenApi(
+ ApiContractV1,
+ {
+ info: {
+ title: 'Documenso API',
+ version: '1.0.0',
+ description: 'The Documenso API for retrieving, creating, updating and deleting documents.',
+ },
},
- },
+ {
+ setOperationId: true,
+ },
+ ),
{
- setOperationId: true,
+ components: {
+ securitySchemes: {
+ authorization: {
+ type: 'apiKey',
+ in: 'header',
+ name: 'Authorization',
+ },
+ },
+ },
+ security: [
+ {
+ authorization: [],
+ },
+ ],
},
);
diff --git a/packages/lib/server-only/document/search-documents-with-keyword.ts b/packages/lib/server-only/document/search-documents-with-keyword.ts
index 8125ae900..a9139f5d3 100644
--- a/packages/lib/server-only/document/search-documents-with-keyword.ts
+++ b/packages/lib/server-only/document/search-documents-with-keyword.ts
@@ -1,7 +1,6 @@
import { prisma } from '@documenso/prisma';
import { DocumentStatus } from '@documenso/prisma/client';
-
-import { maskRecipientTokensForDocument } from '../../utils/mask-recipient-tokens-for-document';
+import type { Document, Recipient, User } from '@documenso/prisma/client';
export type SearchDocumentsWithKeywordOptions = {
query: string;
@@ -79,12 +78,19 @@ export const searchDocumentsWithKeyword = async ({
take: limit,
});
- const maskedDocuments = documents.map((document) =>
- maskRecipientTokensForDocument({
- document,
- user,
- }),
- );
+ const isOwner = (document: Document, user: User) => document.userId === user.id;
+ const getSigningLink = (recipients: Recipient[], user: User) =>
+ `/sign/${recipients.find((r) => r.email === user.email)?.token}`;
+
+ const maskedDocuments = documents.map((document) => {
+ const { Recipient, ...documentWithoutRecipient } = document;
+
+ return {
+ ...documentWithoutRecipient,
+ path: isOwner(document, user) ? `/documents/${document.id}` : getSigningLink(Recipient, user),
+ value: [document.id, document.title, ...document.Recipient.map((r) => r.email)].join(' '),
+ };
+ });
return maskedDocuments;
};
diff --git a/packages/trpc/server/document-router/router.ts b/packages/trpc/server/document-router/router.ts
index 3cc61bef2..d12002674 100644
--- a/packages/trpc/server/document-router/router.ts
+++ b/packages/trpc/server/document-router/router.ts
@@ -358,6 +358,7 @@ export const documentRouter = router({
query,
userId: ctx.user.id,
});
+
return documents;
} catch (err) {
console.error(err);
diff --git a/packages/ui/primitives/avatar.tsx b/packages/ui/primitives/avatar.tsx
index c80e3a658..aa2f522fe 100644
--- a/packages/ui/primitives/avatar.tsx
+++ b/packages/ui/primitives/avatar.tsx
@@ -55,6 +55,8 @@ type AvatarWithTextProps = {
primaryText: React.ReactNode;
secondaryText?: React.ReactNode;
rightSideComponent?: React.ReactNode;
+ // Optional class to hide/show the text beside avatar
+ textSectionClassName?: string;
};
const AvatarWithText = ({
@@ -64,6 +66,7 @@ const AvatarWithText = ({
primaryText,
secondaryText,
rightSideComponent,
+ textSectionClassName,
}: AvatarWithTextProps) => (
{avatarFallback}
-
+
{primaryText}
{secondaryText}
diff --git a/packages/ui/primitives/command.tsx b/packages/ui/primitives/command.tsx
index 89777d417..89084ac12 100644
--- a/packages/ui/primitives/command.tsx
+++ b/packages/ui/primitives/command.tsx
@@ -32,7 +32,11 @@ type CommandDialogProps = DialogProps & {
const CommandDialog = ({ children, commandProps, ...props }: CommandDialogProps) => {
return (