Middleware: withFeatureFlag

Feature-flag middleware.

Examples

Example 1

import { withFeatureFlag } from '@supabase/middleware/feature-flag'

export default {
  fetch: withFeatureFlag(
    {
      name: 'beta-checkout',
      evaluate: (req) => req.headers.get('x-beta') === '1',
    },
    async (_req, ctx) => Response.json({ feature: ctx.featureFlag.name }),
  ),
}

Pluggable providers — use whatever you like in evaluate:

withFeatureFlag({
  name: 'beta-checkout',
  evaluate: async (req) => {
    const userId = req.headers.get('x-user-id') ?? 'anon'
    return await posthog.isFeatureEnabled('beta-checkout', userId)
  },
})

Placed after an auth entry, evaluate reads the caller it verified:

pipeline(
  [
    withUser(),
    withFeatureFlag({
      name: 'beta-checkout',
      evaluate: (_req, ctx) => {
        const { user } = ctx as { user?: { id: string } }
        return user !== undefined && betaTesters.has(user.id)
      },
    }),
  ],
  handler,
)