payload-rest-client
payload-rest-client copied to clipboard
payload-rest-client
A typesafe rest api client for the payload cms.
Quick Start
- Assume you have a users (auth enabled) and a posts collection with following fields:
interface User {
id: string;
email: string;
name: string;
password: string;
createdAt: string;
updatedAt: string;
}
interface Post {
id: string;
title: string;
content: string;
createdAt: string;
updatedAt: string;
}
- Create the client:
import { createClient } from "payload-rest-client";
import { Config } from "./payload-types"; // auto generated types from payload
type Locales = "de" | "en";
const client = createClient<Config, Locales>({
apiUrl: "http://localhost:4000/api",
});
- Now you can use all available queries for all collections and globals in a typesafe way:
// if you wan't to use protected routes, use login api...
const loginResponse = await client.collections.users.login({
email: process.env.PAYLOAD_API_EMAIL,
password: process.env.PAYLOAD_API_PASSWORD,
});
// ...and create another client with authorization header
const protectedClient = createClient<Config, Locales>({
apiUrl: "http://localhost:4000/api",
headers: {
"Authorization": `Bearer ${loginResponse.token}`,
},
});
const posts = await protectedClient.collections.posts.find({
sort: "title", // only top level keys (optionally prefixed with "-") of Post allowed
locale: "de", // only defined locales allowed
limit: 10,
page: 2,
});
console.log(posts); // type of posts is FindResult<Post>
API
Full documentation of the rest api
Client options
- apiUrl: string;
- cache?: RequestCache;
- headers?: HeadersInit;
- debug?: boolean;
- getAdditionalFetchOptions?: (params: GetAdditionalFetchOptionsParams) => any;
- customFetchFn? (input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
Collections
- find: (params?: FindParams<T, LOCALES>) => Promise<FindResult<T>>;
- findById: (params: FindByIdParams<LOCALES>) => Promise<T>;
- count: (params: CountParams<T>) => Promise<CountResult>;
- create: (params: CreateParams<T, LOCALES>) => Promise<CreateResult<T>>;
- createDraft: (params: CreateDraftParams<T, LOCALES>) => Promise<CreateDraftResult<T>>;
- update: (params: UpdateParams<T, LOCALES>) => Promise<UpdateResult<T>>;
- updateById: (params: UpdateByIdParams<T, LOCALES>) => Promise<UpdateByIdResult<T>>;
- delete: (params?: DeleteParams<T, LOCALES>) => Promise<DeleteResult<T>>;
- deleteById: (params: DeleteByIdParams<LOCALES>) => Promise<T>;
Collections with auth enabled (additional to above)
- login: (params: LoginParams) => Promise<LoginResult<T>>;
- logout: (params: LogoutParams) => Promise<LogoutResult>;
- unlock: (params: UnlockParams) => Promise<UnlockResult>;
- refresh-token: (params: RefreshTokenParams) => Promise<RefreshTokenResult>;
- me: (params: MeParams) => Promise<MeResult<T>>;
- forgot-password: (params: ForgotPasswordParams) => Promise<ForgotPasswordResult>;
- reset-password: (params: ResetPasswordParams) => Promise<ResetPasswordResult<T>>;
Globals
- get: (params?: BaseParams<LOCALES>) => Promise<T>;
- update: (params: UpdateGlobalParams<T, LOCALES>) => Promise<T>;
Others
- access: () => Promise<AccessResult>;
Changelog
v 3.0.3
- Added option to use custom fetch function
v 3.0.2
- Export error types
- Added access api
v 3.0.1
- Better type inference for joins
v 3.0.0
- Payload 3 (for Payload 2 use older versions)
- Added
select
,populate
andjoin
params - Added
count
api