11import { createHTTPServer } from '@trpc/server/adapters/standalone' ;
2- import { createOpenApiHttpHandler , generateOpenApiDocument } from '@usevenice/trpc-openapi' ;
3- import http from 'http ' ;
2+ import { createOpenApiExpressMiddleware , generateOpenApiDocument } from '@usevenice/trpc-openapi' ;
3+ import express from 'express ' ;
44import { renderTrpcPanel } from 'trpc-panel' ;
55import { z } from 'zod' ;
66import { createContext , t } from './context' ;
77import { engagementRouter } from './routers/engagement' ;
88
99export const metaRouter = t . router ( {
10- hello : t . procedure
11- . meta ( { openapi : { method : 'GET' , path : '/hello' } } )
12- . input ( z . void ( ) )
13- . output ( z . string ( ) )
14- . query ( ( ) => 'world' ) ,
1510 getOpenApiSpec : t . procedure
1611 . meta ( { openapi : { method : 'GET' , path : '/openapi.json' } } )
1712 . input ( z . void ( ) )
@@ -21,36 +16,45 @@ export const metaRouter = t.router({
2116
2217export const appRouter = t . mergeRouters ( t . router ( { engagement : engagementRouter } ) , metaRouter ) ;
2318
19+ const port = 3000 ;
20+
2421export const openApiSpec = generateOpenApiDocument ( appRouter , {
2522 title : 'Supaglue OpenAPI' ,
2623 openApiVersion : '3.1.0' ,
2724 version : '0.0.1' ,
28- baseUrl : ' http://localhost:3000' ,
25+ baseUrl : ` http://localhost:${ port } ` ,
2926} ) ;
3027
3128if ( require . main === module ) {
32- // trpc server
29+ // openapi server, running in the Docker container with express
30+ const app = express ( ) ;
31+ app . get ( '/' , ( _req , res ) => {
32+ res . send ( 'Our current API routes' ) ;
33+ } ) ;
34+ app . use (
35+ createOpenApiExpressMiddleware ( {
36+ router : appRouter ,
37+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38+ createContext : ( { req } ) => createContext ( { headers : req . headers } ) ,
39+ } )
40+ ) ;
41+
42+ app . listen ( port , ( ) => {
43+ // eslint-disable-next-line no-console
44+ console . log ( `Server is running on port ${ port } ` ) ;
45+ } ) ;
46+
47+ // trpc server, running in api routes in next.js for our internal management ui use
3348 createHTTPServer ( {
3449 router : appRouter ,
3550 // eslint-disable-next-line @typescript-eslint/no-explicit-any
3651 createContext : ( { req } ) => createContext ( { headers : req . headers } ) ,
3752 middleware ( req , res , next ) {
3853 if ( req . url === '/_panel' ) {
39- res . end ( renderTrpcPanel ( appRouter , { url : 'http://localhost:3000 ' } ) ) ;
54+ res . end ( renderTrpcPanel ( appRouter , { url : 'http://localhost:3001 ' } ) ) ;
4055 return ;
4156 }
4257 next ( ) ;
4358 } ,
44- } ) . listen ( 3000 ) ;
45-
46- // openapi server
47- http
48- . createServer (
49- createOpenApiHttpHandler ( {
50- router : appRouter ,
51- // eslint-disable-next-line @typescript-eslint/no-explicit-any
52- createContext : ( { req } ) => createContext ( { headers : req . headers } ) ,
53- } )
54- )
55- . listen ( 3001 ) ;
59+ } ) . listen ( 3001 ) ;
5660}
0 commit comments