MCPcopy
hub / github.com/blitz-js/blitz / rpcHandler

Function rpcHandler

packages/blitz-rpc/src/index-server.ts:241–361  ·  view source on GitHub ↗
(config?: RpcConfig)

Source from the content-addressed store, hash-verified

239}
240
241export function rpcHandler(config?: RpcConfig) {
242 registerBlitzErrorClasses()
243 return async function handleRpcRequest(req: NextApiRequest, res: NextApiResponse, ctx: Ctx) {
244 const resolverMap = await getResolverMap()
245 assert(resolverMap, "No query or mutation resolvers found")
246 assert(
247 Array.isArray(req.query.blitz),
248 "It seems your Blitz RPC endpoint file is not named [[...blitz]].(jt)s. Please ensure it is",
249 )
250
251 const relativeRoutePath = (req.query.blitz as string[])?.join("/")
252 const routePath = "/" + relativeRoutePath
253 const resolverName = routePath.replace(/(\/api\/rpc)?\//, "")
254 const rpcLogger = new RpcLogger(resolverName, config?.logging)
255
256 const loadableResolver = resolverMap?.[routePath]?.resolver
257 if (!loadableResolver) {
258 throw new Error("No resolver for path: " + routePath)
259 }
260
261 const {default: resolver, config: resolverConfig} = await loadableResolver()
262
263 if (!resolver) {
264 throw new Error("No default export for resolver path: " + routePath)
265 }
266
267 const resolverConfigWithDefaults = {...defaultConfig, ...resolverConfig}
268
269 if (req.method === "HEAD") {
270 // We used to initiate database connection here
271 res.status(200).end()
272 return
273 } else if (
274 req.method === "POST" ||
275 (req.method === "GET" && resolverConfigWithDefaults.httpMethod === "GET")
276 ) {
277 if (req.method === "POST" && typeof req.body.params === "undefined") {
278 const error = {message: "Request body is missing the `params` key"}
279 rpcLogger.error(error.message)
280 res.status(400).json({
281 result: null,
282 error,
283 })
284 return
285 }
286 try {
287 const data = deserialize({
288 json:
289 req.method === "POST"
290 ? req.body.params
291 : req.query.params
292 ? parse(`${req.query.params}`)
293 : undefined,
294 meta:
295 req.method === "POST"
296 ? req.body.meta?.params
297 : req.query.meta
298 ? parse(`${req.query.meta}`)

Callers 12

[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
blitzrpcroute.tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90
[[...blitz]].tsFile · 0.90

Calls 11

errorMethod · 0.95
preResolverMethod · 0.95
postResolverMethod · 0.95
nextJsSerializationMethod · 0.95
postResponseMethod · 0.95
warnMethod · 0.95
assertFunction · 0.90
getResolverMapFunction · 0.85
parseFunction · 0.85
setSessionMethod · 0.80

Tested by

no test coverage detected