From c89ca83f44c6d38a2731cf642f837cba5ce22345 Mon Sep 17 00:00:00 2001 From: David Nguyen Date: Tue, 4 Nov 2025 11:55:07 +1100 Subject: [PATCH] fix: redirect v2 beta url --- apps/remix/server/router.ts | 14 ++++++++++---- apps/remix/server/trpc/hono-trpc-open-api.ts | 4 ++-- packages/lib/constants/app.ts | 1 + .../attachment/create-attachment.ts | 2 +- .../attachment/delete-attachment.ts | 2 +- .../envelope-router/attachment/find-attachments.ts | 2 +- .../attachment/update-attachment.ts | 2 +- .../envelope-router/create-envelope-items.ts | 2 +- .../server/envelope-router/delete-envelope-item.ts | 2 +- .../envelope-fields/delete-envelope-field.ts | 2 +- .../envelope-fields/get-envelope-field.ts | 2 +- .../envelope-fields/update-envelope-fields.ts | 2 +- .../delete-envelope-recipient.ts | 2 +- .../envelope-recipients/get-envelope-recipient.ts | 2 +- .../update-envelope-recipients.ts | 2 +- .../envelope-router/update-envelope-items.ts | 2 +- packages/trpc/server/open-api.ts | 9 +++++---- 17 files changed, 31 insertions(+), 23 deletions(-) diff --git a/apps/remix/server/router.ts b/apps/remix/server/router.ts index 5eb448933..8f3cd6f40 100644 --- a/apps/remix/server/router.ts +++ b/apps/remix/server/router.ts @@ -8,7 +8,7 @@ import type { Logger } from 'pino'; import { tsRestHonoApp } from '@documenso/api/hono'; import { auth } from '@documenso/auth/server'; -import { API_V2_BETA_URL } from '@documenso/lib/constants/app'; +import { API_V2_BETA_URL, API_V2_URL } from '@documenso/lib/constants/app'; import { jobsClient } from '@documenso/lib/jobs/client'; import { getIpAddress } from '@documenso/lib/universal/get-ip-address'; import { logger } from '@documenso/lib/utils/logger'; @@ -90,8 +90,14 @@ app.use('/api/jobs/*', jobsClient.getApiHandler()); app.use('/api/trpc/*', reactRouterTrpcServer); // Unstable API server routes. Order matters for these two. -app.get(`${API_V2_BETA_URL}/openapi.json`, (c) => c.json(openApiDocument)); -app.use(`${API_V2_BETA_URL}/*`, cors()); -app.use(`${API_V2_BETA_URL}/*`, async (c) => openApiTrpcServerHandler(c)); +app.get(`${API_V2_URL}/openapi.json`, (c) => c.json(openApiDocument)); +app.use(`${API_V2_URL}/*`, cors()); +app.use(`${API_V2_URL}/*`, async (c) => openApiTrpcServerHandler(c)); + +// Redirect /api/v2-beta to /api/v2. +app.all('/api/v2-beta/*', (c) => { + const newPath = c.req.path.replace(API_V2_BETA_URL, API_V2_URL); + return c.redirect(newPath, 301); +}); export default app; diff --git a/apps/remix/server/trpc/hono-trpc-open-api.ts b/apps/remix/server/trpc/hono-trpc-open-api.ts index ec0362910..8d9f28ec8 100644 --- a/apps/remix/server/trpc/hono-trpc-open-api.ts +++ b/apps/remix/server/trpc/hono-trpc-open-api.ts @@ -1,6 +1,6 @@ import type { Context } from 'hono'; -import { API_V2_BETA_URL } from '@documenso/lib/constants/app'; +import { API_V2_URL } from '@documenso/lib/constants/app'; import { AppError, genericErrorCodeToTrpcErrorCodeMap } from '@documenso/lib/errors/app-error'; import { createTrpcContext } from '@documenso/trpc/server/context'; import { appRouter } from '@documenso/trpc/server/router'; @@ -9,7 +9,7 @@ import { handleTrpcRouterError } from '@documenso/trpc/utils/trpc-error-handler' export const openApiTrpcServerHandler = async (c: Context) => { return createOpenApiFetchHandler({ - endpoint: API_V2_BETA_URL, + endpoint: API_V2_URL, router: appRouter, createContext: async () => createTrpcContext({ c, requestSource: 'apiV2' }), req: c.req.raw, diff --git a/packages/lib/constants/app.ts b/packages/lib/constants/app.ts index 5c2f39a65..43e6d6d8a 100644 --- a/packages/lib/constants/app.ts +++ b/packages/lib/constants/app.ts @@ -12,6 +12,7 @@ export const NEXT_PRIVATE_INTERNAL_WEBAPP_URL = export const IS_BILLING_ENABLED = () => env('NEXT_PUBLIC_FEATURE_BILLING_ENABLED') === 'true'; export const API_V2_BETA_URL = '/api/v2-beta'; +export const API_V2_URL = '/api/v2'; export const SUPPORT_EMAIL = env('NEXT_PUBLIC_SUPPORT_EMAIL') ?? 'support@documenso.com'; diff --git a/packages/trpc/server/envelope-router/attachment/create-attachment.ts b/packages/trpc/server/envelope-router/attachment/create-attachment.ts index 598f33c5b..3dfb47e9b 100644 --- a/packages/trpc/server/envelope-router/attachment/create-attachment.ts +++ b/packages/trpc/server/envelope-router/attachment/create-attachment.ts @@ -13,7 +13,7 @@ export const createAttachmentRoute = authenticatedProcedure path: '/envelope/attachment/create', summary: 'Create attachment', description: 'Create a new attachment for an envelope', - tags: ['Envelope Attachment'], + tags: ['Envelope Attachments'], }, }) .input(ZCreateAttachmentRequestSchema) diff --git a/packages/trpc/server/envelope-router/attachment/delete-attachment.ts b/packages/trpc/server/envelope-router/attachment/delete-attachment.ts index 99ea7dccc..be29b4de8 100644 --- a/packages/trpc/server/envelope-router/attachment/delete-attachment.ts +++ b/packages/trpc/server/envelope-router/attachment/delete-attachment.ts @@ -13,7 +13,7 @@ export const deleteAttachmentRoute = authenticatedProcedure path: '/envelope/attachment/delete', summary: 'Delete attachment', description: 'Delete an attachment from an envelope', - tags: ['Envelope Attachment'], + tags: ['Envelope Attachments'], }, }) .input(ZDeleteAttachmentRequestSchema) diff --git a/packages/trpc/server/envelope-router/attachment/find-attachments.ts b/packages/trpc/server/envelope-router/attachment/find-attachments.ts index b75ad8803..e04b8d1be 100644 --- a/packages/trpc/server/envelope-router/attachment/find-attachments.ts +++ b/packages/trpc/server/envelope-router/attachment/find-attachments.ts @@ -15,7 +15,7 @@ export const findAttachmentsRoute = maybeAuthenticatedProcedure path: '/envelope/attachment', summary: 'Find attachments', description: 'Find all attachments for an envelope', - tags: ['Envelope Attachment'], + tags: ['Envelope Attachments'], }, }) .input(ZFindAttachmentsRequestSchema) diff --git a/packages/trpc/server/envelope-router/attachment/update-attachment.ts b/packages/trpc/server/envelope-router/attachment/update-attachment.ts index 9fc48eb70..63733bb73 100644 --- a/packages/trpc/server/envelope-router/attachment/update-attachment.ts +++ b/packages/trpc/server/envelope-router/attachment/update-attachment.ts @@ -13,7 +13,7 @@ export const updateAttachmentRoute = authenticatedProcedure path: '/envelope/attachment/update', summary: 'Update attachment', description: 'Update an existing attachment', - tags: ['Envelope Attachment'], + tags: ['Envelope Attachments'], }, }) .input(ZUpdateAttachmentRequestSchema) diff --git a/packages/trpc/server/envelope-router/create-envelope-items.ts b/packages/trpc/server/envelope-router/create-envelope-items.ts index c5d0acffa..c223136e9 100644 --- a/packages/trpc/server/envelope-router/create-envelope-items.ts +++ b/packages/trpc/server/envelope-router/create-envelope-items.ts @@ -20,7 +20,7 @@ export const createEnvelopeItemsRoute = authenticatedProcedure path: '/envelope/item/create-many', summary: 'Create envelope items', description: 'Create multiple envelope items for an envelope', - tags: ['Envelope Item'], + tags: ['Envelope Items'], }, }) .input(ZCreateEnvelopeItemsRequestSchema) diff --git a/packages/trpc/server/envelope-router/delete-envelope-item.ts b/packages/trpc/server/envelope-router/delete-envelope-item.ts index 22802c669..bb671a047 100644 --- a/packages/trpc/server/envelope-router/delete-envelope-item.ts +++ b/packages/trpc/server/envelope-router/delete-envelope-item.ts @@ -18,7 +18,7 @@ export const deleteEnvelopeItemRoute = authenticatedProcedure path: '/envelope/item/delete', summary: 'Delete envelope item', description: 'Delete an envelope item from an envelope', - tags: ['Envelope Item'], + tags: ['Envelope Items'], }, }) .input(ZDeleteEnvelopeItemRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-fields/delete-envelope-field.ts b/packages/trpc/server/envelope-router/envelope-fields/delete-envelope-field.ts index 531154d5c..3b14b2b8f 100644 --- a/packages/trpc/server/envelope-router/envelope-fields/delete-envelope-field.ts +++ b/packages/trpc/server/envelope-router/envelope-fields/delete-envelope-field.ts @@ -20,7 +20,7 @@ export const deleteEnvelopeFieldRoute = authenticatedProcedure path: '/envelope/field/delete', summary: 'Delete envelope field', description: 'Delete an envelope field', - tags: ['Envelope Field'], + tags: ['Envelope Fields'], }, }) .input(ZDeleteEnvelopeFieldRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-fields/get-envelope-field.ts b/packages/trpc/server/envelope-router/envelope-fields/get-envelope-field.ts index 72a01cf11..db8bba27f 100644 --- a/packages/trpc/server/envelope-router/envelope-fields/get-envelope-field.ts +++ b/packages/trpc/server/envelope-router/envelope-fields/get-envelope-field.ts @@ -13,7 +13,7 @@ export const getEnvelopeFieldRoute = authenticatedProcedure path: '/envelope/field/{fieldId}', summary: 'Get envelope field', description: 'Returns an envelope field given an ID', - tags: ['Envelope Field'], + tags: ['Envelope Fields'], }, }) .input(ZGetEnvelopeFieldRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.ts b/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.ts index 62814959f..8748e3826 100644 --- a/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.ts +++ b/packages/trpc/server/envelope-router/envelope-fields/update-envelope-fields.ts @@ -13,7 +13,7 @@ export const updateEnvelopeFieldsRoute = authenticatedProcedure path: '/envelope/field/update-many', summary: 'Update envelope fields', description: 'Update multiple envelope fields for an envelope', - tags: ['Envelope Field'], + tags: ['Envelope Fields'], }, }) .input(ZUpdateEnvelopeFieldsRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-recipients/delete-envelope-recipient.ts b/packages/trpc/server/envelope-router/envelope-recipients/delete-envelope-recipient.ts index b5dee5927..d33f34df0 100644 --- a/packages/trpc/server/envelope-router/envelope-recipients/delete-envelope-recipient.ts +++ b/packages/trpc/server/envelope-router/envelope-recipients/delete-envelope-recipient.ts @@ -13,7 +13,7 @@ export const deleteEnvelopeRecipientRoute = authenticatedProcedure path: '/envelope/recipient/delete', summary: 'Delete envelope recipient', description: 'Delete an envelope recipient', - tags: ['Envelope Recipient'], + tags: ['Envelope Recipients'], }, }) .input(ZDeleteEnvelopeRecipientRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-recipients/get-envelope-recipient.ts b/packages/trpc/server/envelope-router/envelope-recipients/get-envelope-recipient.ts index bd3d99e7a..55322dff6 100644 --- a/packages/trpc/server/envelope-router/envelope-recipients/get-envelope-recipient.ts +++ b/packages/trpc/server/envelope-router/envelope-recipients/get-envelope-recipient.ts @@ -15,7 +15,7 @@ export const getEnvelopeRecipientRoute = authenticatedProcedure path: '/envelope/recipient/{recipientId}', summary: 'Get envelope recipient', description: 'Returns an envelope recipient given an ID', - tags: ['Envelope Recipient'], + tags: ['Envelope Recipients'], }, }) .input(ZGetEnvelopeRecipientRequestSchema) diff --git a/packages/trpc/server/envelope-router/envelope-recipients/update-envelope-recipients.ts b/packages/trpc/server/envelope-router/envelope-recipients/update-envelope-recipients.ts index 52d3e0741..6169465b4 100644 --- a/packages/trpc/server/envelope-router/envelope-recipients/update-envelope-recipients.ts +++ b/packages/trpc/server/envelope-router/envelope-recipients/update-envelope-recipients.ts @@ -13,7 +13,7 @@ export const updateEnvelopeRecipientsRoute = authenticatedProcedure path: '/envelope/recipient/update-many', summary: 'Update envelope recipients', description: 'Update multiple recipients for an envelope', - tags: ['Envelope Recipient'], + tags: ['Envelope Recipients'], }, }) .input(ZUpdateEnvelopeRecipientsRequestSchema) diff --git a/packages/trpc/server/envelope-router/update-envelope-items.ts b/packages/trpc/server/envelope-router/update-envelope-items.ts index b9f61091b..8a5621a7c 100644 --- a/packages/trpc/server/envelope-router/update-envelope-items.ts +++ b/packages/trpc/server/envelope-router/update-envelope-items.ts @@ -16,7 +16,7 @@ export const updateEnvelopeItemsRoute = authenticatedProcedure path: '/envelope/item/update-many', summary: 'Update envelope items', description: 'Update multiple envelope items for an envelope', - tags: ['Envelope Item'], + tags: ['Envelope Items'], }, }) .input(ZUpdateEnvelopeItemsRequestSchema) diff --git a/packages/trpc/server/open-api.ts b/packages/trpc/server/open-api.ts index c55042f93..678650e31 100644 --- a/packages/trpc/server/open-api.ts +++ b/packages/trpc/server/open-api.ts @@ -6,10 +6,11 @@ import { appRouter } from './router'; export const openApiDocument = { ...generateOpenApiDocument(appRouter, { - title: 'Documenso v2 beta API', - description: 'Subject to breaking changes until v2 is fully released.', - version: '0.0.0', - baseUrl: `${NEXT_PUBLIC_WEBAPP_URL()}/api/v2-beta`, + title: 'Documenso v2 API', + description: + 'Welcome to the Documenso v2 API.\n\nThis API provides access to our system, which you can use to integrate applications, automate workflows, or build custom tools.', + version: '1.0.0', + baseUrl: `${NEXT_PUBLIC_WEBAPP_URL()}/api/v2`, securitySchemes: { apiKey: { type: 'apiKey',