npm.io
1.15.0 • Published 1 week ago

@orpc/server

Licence
MIT
Version
1.15.0
Deps
11
Size
348 kB
Vulns
0
Weekly
0
Stars
5.5K

Typesafe APIs Made Simple

oRPC is a powerful combination of RPC and OpenAPI, makes it easy to build APIs that are end-to-end type-safe and adhere to OpenAPI standards


Highlights

  • End-to-End Type Safety: Ensure type-safe inputs, outputs, and errors from client to server.
  • First-Class OpenAPI: Built-in support that fully adheres to the OpenAPI standard.
  • Contract-First Development: Optionally define your API contract before implementation.
  • First-Class OpenTelemetry: Seamlessly integrate with OpenTelemetry for observability.
  • Framework Integrations: Seamlessly integrate with TanStack Query (React, Vue, Solid, Svelte, Angular), SWR, Pinia Colada, and more.
  • Server Actions: Fully compatible with React Server Actions on Next.js, TanStack Start, and other platforms.
  • Standard Schema Support: Works out of the box with Zod, Valibot, ArkType, and other schema validators.
  • Native Types: Supports native types like Date, File, Blob, BigInt, URL, and more.
  • Lazy Router: Enhance cold start times with our lazy routing feature.
  • SSE & Streaming: Enjoy full type-safe support for SSE and streaming.
  • Multi-Runtime Support: Fast and lightweight on Cloudflare, Deno, Bun, Node.js, and beyond.
  • Extendability: Easily extend functionality with plugins, middleware, and interceptors.

Documentation

You can find the full documentation here.

Packages

@orpc/server

Build your API or implement API contract. Read the documentation for more information.

import type { IncomingHttpHeaders } from 'node:http'
import { ORPCError, os } from '@orpc/server'
import * as z from 'zod'

const PlanetSchema = z.object({
  id: z.number().int().min(1),
  name: z.string(),
  description: z.string().optional(),
})

export const listPlanet = os
  .input(
    z.object({
      limit: z.number().int().min(1).max(100).optional(),
      cursor: z.number().int().min(0).default(0),
    }),
  )
  .handler(async ({ input }) => {
    // your list code here
    return [{ id: 1, name: 'name' }]
  })

export const findPlanet = os
  .input(PlanetSchema.pick({ id: true }))
  .handler(async ({ input }) => {
    // your find code here
    return { id: 1, name: 'name' }
  })

export const createPlanet = os
  .$context<{ headers: IncomingHttpHeaders }>()
  .use(({ context, next }) => {
    const user = parseJWT(context.headers.authorization?.split(' ')[1])

    if (user) {
      return next({ context: { user } })
    }

    throw new ORPCError('UNAUTHORIZED')
  })
  .input(PlanetSchema.omit({ id: true }))
  .handler(async ({ input, context }) => {
    // your create code here
    return { id: 1, name: 'name' }
  })

export const router = { planet: { list: listPlanet, find: findPlanet, create: createPlanet } }

Sponsors

If you find oRPC valuable and would like to support its development, you can do so here: GitHub Sponsors.

Platinum Sponsor
ScreenshotOne.com
ScreenshotOne.com
Silver Sponsor
村上さん
村上さん
Generous Sponsors
LN Markets
LN Markets
Sponsors
Reece McDonald
Reece McDonald
nk
nk
supastarter
supastarter
Dexter Miguel
Dexter Miguel
herrfugbaum
herrfugbaum
Ryota Murakami
Ryota Murakami
David Cramer
David Cramer
Valerii Petryniak
Valerii Petryniak
Valerii Strilets
Valerii Strilets
Kyle Mistele
Kyle Mistele
christ12938
christ12938
Ryan Soderberg
Ryan Soderberg
shota
shota
Ellis Driscoll
Ellis Driscoll
Backers
David Walsh
David Walsh
Robbe Vaes
Robbe Vaes
Aidan Sunbury
Aidan Sunbury
soonoo
soonoo
Kevin Porten
Kevin Porten
Denis
Denis
Christopher Kapic
Christopher Kapic
Tom Ballinger
Tom Ballinger
Sam
Sam
Titoine
Titoine
Igor Makowski
Igor Makowski
hanayashiki
hanayashiki
Lev Dubinets
Lev Dubinets
Kelly Peilin Chan
Kelly Peilin Chan
Alex
Alex
Andrey Gubanov
Andrey Gubanov
Past Sponsors

Maxie Stijn Timmer あわわわとーにゅ Zuplo motopods Francisco Hermida Théo LUDWIG Abhay Ramesh shr.ink oü 0x4e32 Ryuz happyboy yicchi Saksham Roman Hrynevych rokitg Omar Khatib Yu-Sabo Bapusaheb Patil grim Nelson Lai Lê Cao Nguyên Robert Soriano Andrew Peters Ryan Vogel SKostyukovich Peter Adam Fabworks Novak Antonijevic Laduni Estu Syalwa Chen, Zhi-Yuan Illarion Koperski Anees Iqbal Sefa Eyeoglu natt Adam Tkaczyk plancraft Nicholas

License

Distributed under the MIT License. See LICENSE for more information.

Keywords