fix: add empty success responses (#1600)

This commit is contained in:
David Nguyen
2025-01-20 19:47:39 +11:00
committed by GitHub
parent 7c1e0f34e8
commit 74bb230247
5 changed files with 43 additions and 16 deletions

View File

@@ -1,6 +1,5 @@
import { TRPCError } from '@trpc/server'; import { TRPCError } from '@trpc/server';
import { DateTime } from 'luxon'; import { DateTime } from 'luxon';
import { z } from 'zod';
import { getServerLimits } from '@documenso/ee/server-only/limits/server'; import { getServerLimits } from '@documenso/ee/server-only/limits/server';
import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app';
@@ -42,6 +41,7 @@ import {
ZFindDocumentAuditLogsQuerySchema, ZFindDocumentAuditLogsQuerySchema,
ZFindDocumentsRequestSchema, ZFindDocumentsRequestSchema,
ZFindDocumentsResponseSchema, ZFindDocumentsResponseSchema,
ZGenericSuccessResponse,
ZGetDocumentByIdQuerySchema, ZGetDocumentByIdQuerySchema,
ZGetDocumentByTokenQuerySchema, ZGetDocumentByTokenQuerySchema,
ZGetDocumentWithDetailsByIdRequestSchema, ZGetDocumentWithDetailsByIdRequestSchema,
@@ -52,6 +52,7 @@ import {
ZSearchDocumentsMutationSchema, ZSearchDocumentsMutationSchema,
ZSetPasswordForDocumentMutationSchema, ZSetPasswordForDocumentMutationSchema,
ZSetSigningOrderForDocumentMutationSchema, ZSetSigningOrderForDocumentMutationSchema,
ZSuccessResponseSchema,
ZUpdateDocumentRequestSchema, ZUpdateDocumentRequestSchema,
ZUpdateDocumentResponseSchema, ZUpdateDocumentResponseSchema,
} from './schema'; } from './schema';
@@ -326,7 +327,7 @@ export const documentRouter = router({
}, },
}) })
.input(ZDeleteDocumentMutationSchema) .input(ZDeleteDocumentMutationSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { documentId } = input; const { documentId } = input;
@@ -339,6 +340,8 @@ export const documentRouter = router({
teamId, teamId,
requestMetadata: ctx.metadata, requestMetadata: ctx.metadata,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**
@@ -481,18 +484,20 @@ export const documentRouter = router({
}, },
}) })
.input(ZResendDocumentMutationSchema) .input(ZResendDocumentMutationSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { documentId, recipients } = input; const { documentId, recipients } = input;
return await resendDocument({ await resendDocument({
userId: ctx.user.id, userId: ctx.user.id,
teamId, teamId,
documentId, documentId,
recipients, recipients,
requestMetadata: ctx.metadata, requestMetadata: ctx.metadata,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**

View File

@@ -34,6 +34,19 @@ import {
import { ZCreateRecipientSchema } from '../recipient-router/schema'; import { ZCreateRecipientSchema } from '../recipient-router/schema';
/**
* Required for empty responses since we currently can't 201 requests for our openapi setup.
*
* Without this it will throw an error in Speakeasy SDK when it tries to parse an empty response.
*/
export const ZSuccessResponseSchema = z.object({
success: z.literal(true),
});
export const ZGenericSuccessResponse = {
success: true,
} satisfies z.infer<typeof ZSuccessResponseSchema>;
export const ZDocumentTitleSchema = z export const ZDocumentTitleSchema = z
.string() .string()
.trim() .trim()

View File

@@ -1,5 +1,3 @@
import { z } from 'zod';
import { createDocumentFields } from '@documenso/lib/server-only/field/create-document-fields'; import { createDocumentFields } from '@documenso/lib/server-only/field/create-document-fields';
import { createTemplateFields } from '@documenso/lib/server-only/field/create-template-fields'; import { createTemplateFields } from '@documenso/lib/server-only/field/create-template-fields';
import { deleteDocumentField } from '@documenso/lib/server-only/field/delete-document-field'; import { deleteDocumentField } from '@documenso/lib/server-only/field/delete-document-field';
@@ -13,6 +11,7 @@ import { updateDocumentFields } from '@documenso/lib/server-only/field/update-do
import { updateTemplateFields } from '@documenso/lib/server-only/field/update-template-fields'; import { updateTemplateFields } from '@documenso/lib/server-only/field/update-template-fields';
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata'; import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
import { ZGenericSuccessResponse, ZSuccessResponseSchema } from '../document-router/schema';
import { authenticatedProcedure, procedure, router } from '../trpc'; import { authenticatedProcedure, procedure, router } from '../trpc';
import { import {
ZCreateDocumentFieldRequestSchema, ZCreateDocumentFieldRequestSchema,
@@ -200,7 +199,7 @@ export const fieldRouter = router({
}, },
}) })
.input(ZDeleteDocumentFieldRequestSchema) .input(ZDeleteDocumentFieldRequestSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { fieldId } = input; const { fieldId } = input;
@@ -211,6 +210,8 @@ export const fieldRouter = router({
fieldId, fieldId,
requestMetadata: ctx.metadata, requestMetadata: ctx.metadata,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**
@@ -396,7 +397,7 @@ export const fieldRouter = router({
}, },
}) })
.input(ZDeleteTemplateFieldRequestSchema) .input(ZDeleteTemplateFieldRequestSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { fieldId } = input; const { fieldId } = input;
@@ -406,6 +407,8 @@ export const fieldRouter = router({
teamId, teamId,
fieldId, fieldId,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**

View File

@@ -1,5 +1,3 @@
import { z } from 'zod';
import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token'; import { completeDocumentWithToken } from '@documenso/lib/server-only/document/complete-document-with-token';
import { rejectDocumentWithToken } from '@documenso/lib/server-only/document/reject-document-with-token'; import { rejectDocumentWithToken } from '@documenso/lib/server-only/document/reject-document-with-token';
import { createDocumentRecipients } from '@documenso/lib/server-only/recipient/create-document-recipients'; import { createDocumentRecipients } from '@documenso/lib/server-only/recipient/create-document-recipients';
@@ -13,6 +11,7 @@ import { updateDocumentRecipients } from '@documenso/lib/server-only/recipient/u
import { updateTemplateRecipients } from '@documenso/lib/server-only/recipient/update-template-recipients'; import { updateTemplateRecipients } from '@documenso/lib/server-only/recipient/update-template-recipients';
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata'; import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
import { ZGenericSuccessResponse, ZSuccessResponseSchema } from '../document-router/schema';
import { authenticatedProcedure, procedure, router } from '../trpc'; import { authenticatedProcedure, procedure, router } from '../trpc';
import { import {
ZCompleteDocumentWithTokenMutationSchema, ZCompleteDocumentWithTokenMutationSchema,
@@ -200,7 +199,7 @@ export const recipientRouter = router({
}, },
}) })
.input(ZDeleteDocumentRecipientRequestSchema) .input(ZDeleteDocumentRecipientRequestSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { recipientId } = input; const { recipientId } = input;
@@ -211,6 +210,8 @@ export const recipientRouter = router({
recipientId, recipientId,
requestMetadata: ctx.metadata, requestMetadata: ctx.metadata,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**
@@ -391,7 +392,7 @@ export const recipientRouter = router({
}, },
}) })
.input(ZDeleteTemplateRecipientRequestSchema) .input(ZDeleteTemplateRecipientRequestSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { recipientId } = input; const { recipientId } = input;
@@ -401,6 +402,8 @@ export const recipientRouter = router({
userId: ctx.user.id, userId: ctx.user.id,
teamId, teamId,
}); });
return ZGenericSuccessResponse;
}), }),
/** /**

View File

@@ -1,5 +1,3 @@
import { z } from 'zod';
import { getServerLimits } from '@documenso/ee/server-only/limits/server'; import { getServerLimits } from '@documenso/ee/server-only/limits/server';
import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error';
import { getDocumentWithDetailsById } from '@documenso/lib/server-only/document/get-document-with-details-by-id'; import { getDocumentWithDetailsById } from '@documenso/lib/server-only/document/get-document-with-details-by-id';
@@ -24,6 +22,7 @@ import { toggleTemplateDirectLink } from '@documenso/lib/server-only/template/to
import { updateTemplate } from '@documenso/lib/server-only/template/update-template'; import { updateTemplate } from '@documenso/lib/server-only/template/update-template';
import type { Document } from '@documenso/prisma/client'; import type { Document } from '@documenso/prisma/client';
import { ZGenericSuccessResponse, ZSuccessResponseSchema } from '../document-router/schema';
import { authenticatedProcedure, maybeAuthenticatedProcedure, router } from '../trpc'; import { authenticatedProcedure, maybeAuthenticatedProcedure, router } from '../trpc';
import { import {
ZCreateDocumentFromDirectTemplateRequestSchema, ZCreateDocumentFromDirectTemplateRequestSchema,
@@ -195,7 +194,7 @@ export const templateRouter = router({
}, },
}) })
.input(ZDeleteTemplateMutationSchema) .input(ZDeleteTemplateMutationSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { templateId } = input; const { templateId } = input;
@@ -203,6 +202,8 @@ export const templateRouter = router({
const userId = ctx.user.id; const userId = ctx.user.id;
await deleteTemplate({ userId, id: templateId, teamId }); await deleteTemplate({ userId, id: templateId, teamId });
return ZGenericSuccessResponse;
}), }),
/** /**
@@ -352,7 +353,7 @@ export const templateRouter = router({
}, },
}) })
.input(ZDeleteTemplateDirectLinkRequestSchema) .input(ZDeleteTemplateDirectLinkRequestSchema)
.output(z.void()) .output(ZSuccessResponseSchema)
.mutation(async ({ input, ctx }) => { .mutation(async ({ input, ctx }) => {
const { teamId } = ctx; const { teamId } = ctx;
const { templateId } = input; const { templateId } = input;
@@ -360,6 +361,8 @@ export const templateRouter = router({
const userId = ctx.user.id; const userId = ctx.user.id;
await deleteTemplateDirectLink({ userId, teamId, templateId }); await deleteTemplateDirectLink({ userId, teamId, templateId });
return ZGenericSuccessResponse;
}), }),
/** /**