npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@bff-recipe/types

v1.2.0

Published

TypeScript type definitions for bff-recipe Spring Boot aggregator

Readme

@bff-recipe/types

TypeScript type definitions for bff-recipe — a Backend For Frontend aggregation library for Spring Boot.

This package contains only type definitions. It adds zero bytes to your runtime bundle when used with import type.

Install

npm install @bff-recipe/types --save-dev

Usage

Define your API response types

These come from your backend — OpenAPI codegen, Smithy, or hand-written:

interface Account {
  accountId: string;
  billingGroupId: string;
  plan: 'FREE' | 'PRO' | 'ENTERPRISE';
}

interface InvoiceList {
  items: { id: string; amount: number; status: string }[];
  total: number;
}

Type your BFF request and response

import type { RecipeRequest, RecipeResponse } from '@bff-recipe/types';
import axios from 'axios';

// Define what your recipe returns
type PaymentsPage = {
  getAccount: Account;
  getInvoices: InvoiceList;
};

// Build the request — RecipeRequest gives you autocomplete on ingredients
const request: RecipeRequest = {
  ingredients: [
    { id: 'getAccount', params: { accountId: 'acc-123' } },
    {
      id: 'getInvoices',
      map: { query: { billingGroupId: 'getAccount::body::${billingGroupId}' } },
    },
  ],
};

// Type the response — each ingredient's body is fully typed
const { data } = await axios.post<RecipeResponse<PaymentsPage>>(
  '/bff/payments',
  request
);

data.results.getAccount.body.plan;           // ✓ 'FREE' | 'PRO' | 'ENTERPRISE'
data.results.getInvoices.body.items[0].amount; // ✓ number
data.results.getAccount.status;              // ✓ number (HTTP status)
data.results.nonExistent;                    // ✗ compile error

Works with any HTTP client

The types are framework-agnostic. Use them with whatever you already have:

// fetch
const res = await fetch('/bff/payments', { method: 'POST', body: JSON.stringify(request) });
const data: RecipeResponse<PaymentsPage> = await res.json();

// ky
const data = await ky.post('/bff/payments', { json: request }).json<RecipeResponse<PaymentsPage>>();

// generated SDK
const data = await sdk.bff.execute<RecipeResponse<PaymentsPage>>(request);

Exported Types

| Type | Purpose | |---|---| | RecipeRequest | The request body sent to POST /bff/{recipe} | | RecipeResponse<T> | Typed response — maps ingredient IDs to their response bodies | | IngredientResult<T> | Single ingredient result: { status, body } | | IngredientInput | Single ingredient in a request: { id, params, map, body, ... } | | DebugInfo | Debug details when debug: true is requested |

Documentation

Full docs at tayyab23.github.io/bff

License

MIT