End-to-end type safety for your Google Cloud functions with tRPC.
This adapter allows you to plug in a tRPC router as a request handler for HTTP
Google Cloud functions.
This package has the following peer dependencies:
@trpc/server
@google-cloud/functions-framework
Features
- ✅ tRPC v10 support
- 🚧 tRPC v11 support
npm
npm install trpc-google-cloud-functions
Yarn
yarn add trpc-google-cloud-functions
pnpm
pnpm add trpc-google-cloud-functions
import { createCloudFunctionHandler } from 'trpc-google-cloud-functions';
import { initTRPC } from '@trpc/server';
import * as functions from '@google-cloud/functions-framework';
const t = initTRPC.create();
// create a trpc router
const router = t.router({
healthCheck: t.procedure.query(() => ({ status: 'ok' })),
});
// use the Google Cloud functions adapter
const handler = createCloudFunctionHandler({ router });
// register helloWorld cloud function
functions.http('helloWorld', handler);
Use the CreateCloudFunctionContextOptions
type that comes in this package.
While creating the context, you have access to the request
and response
objects.
The context can be used to hold things that your procedures should have access to, like user authentication or db connection.
import type { CreateCloudFunctionContextOptions } from 'trpc-google-cloud-functions';
// created for each request
export const createContext = async ({
req,
res,
}: CreateCloudFunctionContextOptions) => {
// do things like get user Auth token from header and verify it.
};
export type Context = Awaited<ReturnType<typeof createContext>>;
Use the initTRPC
builder function to initialize tRPC.
If using a context, make sure to pass the context type to the .context()
function before calling the .create()
function.
import { initTRPC } from '@trpc/server';
const t = initTRPC.context<Context>().create();
// const t = initTRPC.create(); // without a context
const appRouter = t.router({
// [...]
});
This adapter is for HTTP Google Cloud functions.
It converts your router into a request handler that can be passed directly to the http
function.
import { createCloudFunctionHandler } from 'trpc-google-cloud-functions';
import * as functions from '@google-cloud/functions-framework';
const handler = createCloudFunctionHandler({
router: appRouter,
createContext,
});
// register helloWorld cloud function
functions.http('helloWorld', handler);
Check out the example projects linked below for more.