Skip to content
Back to skills

Orpc Extend Body Parser

ASecurity

Extend the body parser for larger payloads or additional data types.

  • 8 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 12, 2026
designgit

Security analysis

A100/100

Scanned September 12, 2026

npx -y skills add ali-master/skills --skill orpc-extend-body-parser --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Orpc Extend Body Parser?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Orpc Extend Body Parser
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ali-master-orpc-extend-body-parser/badge)](https://www.skillsdirectory.com/skills/ali-master-orpc-extend-body-parser)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: oRPC Extend Body Parser
description: Extend the body parser for larger payloads or additional data types.
license: MIT
metadata:
  author: Ali Torki
  homepage: https://github.com/ali-master
  version: "1.0.0"
---

# Extend Body Parser

In some cases, you may need to extend the body parser to handle larger payloads or additional data types.

```ts
import { RPCHandler } from '@orpc/server/fetch'
import { getFilenameFromContentDisposition } from '@orpc/standard-server'

const OVERRIDE_BODY_CONTEXT = Symbol('OVERRIDE_BODY_CONTEXT')

interface OverrideBodyContext {
  fetchRequest: Request
}

const handler = new RPCHandler(router, {
  adapterInterceptors: [
    (options) => {
      return options.next({
        ...options,
        context: {
          ...options.context,
          [OVERRIDE_BODY_CONTEXT as any]: {
            fetchRequest: options.request,
          },
        },
      })
    },
  ],
  rootInterceptors: [
    (options) => {
      const { fetchRequest } = (options.context as any)[OVERRIDE_BODY_CONTEXT] as OverrideBodyContext

      return options.next({
        ...options,
        request: {
          ...options.request,
          async body() {
            const contentDisposition = fetchRequest.headers.get('content-disposition')
            const contentType = fetchRequest.headers.get('content-type')

            if (contentDisposition === null && contentType?.startsWith('multipart/form-data')) {
              // Custom multipart parsing (e.g., streaming with @mjackson/form-data-parser)
              return fetchRequest.formData()
            }

            if (
              contentDisposition !== null || (
                !contentType?.startsWith('application/json')
                && !contentType?.startsWith('application/x-www-form-urlencoded')
              )
            ) {
              // Streaming file to disk to reduce memory
              const fileName = getFilenameFromContentDisposition(contentDisposition ?? '') ?? 'blob'
              const blob = await fetchRequest.blob()
              return new File([blob], fileName, { type: blob.type })
            }

            // fallback to default
            return options.request.body()
          },
        },
      })
    },
  ],
})
```

> `adapterInterceptors` differ per adapter. This example is for Fetch.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.