Headers
On this page
The headers option may be used with any of our HTTP links: httpBatchLink, httpBatchStreamLink, httpLink, or httpSubscriptionLink.
headers can be both an object or a function. If it's a function it will get called dynamically for every HTTP request.
utils/trpc.ts
import { function createTRPCClient<TRouter extends AnyRouter>(opts: CreateTRPCClientOptions<TRouter>): TRPCClient<TRouter>createTRPCClient, function httpBatchLink<TRouter extends AnyRouter>(opts: HTTPBatchLinkOptions<TRouter["_def"]["_config"]["$types"]>): TRPCLink<TRouter>httpBatchLink } from '@trpc/client';
import type { type AppRouter = Router<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>> & DecorateCreateRouterOptions<{}>
AppRouter } from './server';
let let token: stringtoken: string;
export function function setToken(newToken: string): voidsetToken(newToken: stringnewToken: string) {
/**
* You can also save the token to cookies, and initialize from
* cookies above.
*/
let token: stringtoken = newToken: stringnewToken;
}
export const const trpc: TRPCClient<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>
trpc = createTRPCClient<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>(opts: CreateTRPCClientOptions<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>): TRPCClient<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<...>>>
createTRPCClient<type AppRouter = Router<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>> & DecorateCreateRouterOptions<{}>
AppRouter>({
links: TRPCLink<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>[]
links: [
httpBatchLink<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>(opts: HTTPBatchLinkOptions<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}>): TRPCLink<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{}>>>
httpBatchLink({
url: string | URLurl: 'http://localhost:3000',
/**
* Headers will be called on each request.
*/
headers?: HTTPHeaders | ((opts: {
opList: NonEmptyArray<Operation>;
}) => HTTPHeaders | Promise<HTTPHeaders>) | undefined
headers() {
return {
type Authorization: stringAuthorization: let token: stringtoken,
};
},
}),
],
});Example with auth login
auth.ts
const const result: {
accessToken: string;
}
result = await const trpc: TRPCClient<BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
auth: BuiltRouter<{
ctx: object;
meta: object;
errorShape: DefaultErrorShape;
transformer: false;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
username: string;
password: string;
};
output: {
accessToken: string;
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>;
}>>>
trpc.auth: DecoratedProcedureRecord<{
transformer: false;
errorShape: DefaultErrorShape;
}, DecorateCreateRouterOptions<{
login: MutationProcedure<{
input: {
username: string;
password: string;
};
output: {
accessToken: string;
};
meta: object;
errorShape: DefaultErrorShape;
}>;
}>>
auth.login: {
mutate: Resolver<{
input: {
username: string;
password: string;
};
output: {
accessToken: string;
};
errorShape: DefaultErrorShape;
transformer: false;
}>;
}
login.mutate: (input: {
username: string;
password: string;
}, opts?: TRPCProcedureOptions) => TRPCTaggedPromise<{
accessToken: string;
}, DefaultErrorShape>
mutate({ username: stringusername: 'user', password: stringpassword: 'pass' });
function setToken(token: string): voidsetToken(const result: {
accessToken: string;
}
result.accessToken: stringaccessToken);The token can be whatever you want it to be. It's entirely up to you whether that's just a client-side
variable that you update the value of on success or whether you store the token and pull it from local storage.