1.1.0 • Published 4 months ago

@toolsplus/forge-trpc-adapter v1.1.0

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

@toolsplus/forge-trpc-adapter

Custom tRCP adapter to enable tRPC for Atlassian Forge apps.

Installation

npm install @toolsplus/forge-trpc-adapter

Note that this package has a peer dependency on @forge/resolver. If you have not installed @forge/resolver you may install before installing this package.

Usage

The following code illustrates how to create a Forge function that handles tRPC requests.

// src/index.ts
import Resolver from '@forge/resolver';
import {
  initTRPC,
  inferAsyncReturnType
} from '@trpc/server';
import {
  forgeRequestHandler,
  ResolverFunction,
  CreateForgeContextOptions
} from '@toolsplus/forge-trcp-adapter';
import { z } from 'zod';
import superjson from 'superjson';

// Initialize a context for the server
const createContext = ({ request }: CreateForgeContextOptions) => {
    // For production applications you may want to validate
    // that `request.context` is in the expected format. This
    // should also help with better Typescript type inference.
    return request.context;
}

// Get the context type
type Context = Awaited<ReturnType<typeof createContext>>;

const tRPC = initTRPC.context<Context>().create({
  transformer: superjson
});

// Create hello router
const helloRouter = tRPC.router({
  // Hello procedure
  greeting: tRPC.procedure
    .input(
      z.object({
        name: z.string(),
      }),
    )
    .query(({ input }) => `Hello, ${input.name}!`),
});

// Export the hello router type to be imported on the client side
export type HelloRouter = typeof helloRouter;

// Create a Forge function request handler that resolves
// tRPC requests
const helloResolver: ResolverFunction = forgeRequestHandler({
  router: helloRouter,
  createContext,
});

// Register the tRPC request resolver with the 'rpc' Forge 
// function key
export const tRPCResolver = new Resolver()
  .define('rpc', helloResolver)
  .getDefinitions();

Register the tRPCResolver function in the Forge app manifest, just as you would any other Forge resolver function.

# manifest.yml
modules:
  jira:projectSettingsPage:
    - key: project-settings-page
      title: Hello tRPC
      layout: blank
      resource: hello-trpc
      resolver:
        function: trpc-resolver
  function:
    - key: trpc-resolver
      handler: index.tRPCResolver
resources:
  - key: hello-trpc
    path: hello-trpc
    tunnel:
      port: 4200
app:
  id: ari:cloud:ecosystem::app/...
1.1.0

4 months ago

1.0.0

8 months ago

0.2.1

1 year ago

0.2.2

1 year ago

0.1.2

2 years ago

0.1.0

2 years ago

0.0.1

2 years ago