A standalone TypeScript client that calls the Payload REST API with types inferred from the generated Payload config types. It exposes typed find, create, update and delete methods for collections and globals, plus auth operations. Custom endpoints can be declared and called with typed params, query and body. Version 3 targets Payload 3.
A typesafe rest api client for the payload cms.
Installation
npm i payload-rest-client49
Stars
6
Forks
3
Open Issues
1 years ago
Last Updated
134
Weekly Downloads
v3.0.5
npm Version
56.3 KB
Unpacked Size
0
Dependencies
Trends appear after 7 days of data. Daily snapshots have not started yet.
Trends appear after 7 days of data. Daily snapshots have not started yet.
Each point is npm's rolling 7-day download count.
Health Score
Composite score based on GitHub activity, stars, npm downloads, publish recency, dependency count, and package size.
Badge for your README
[](https://payloaddirectory.dev/plugins/704946675-root)<a href="https://payloaddirectory.dev/plugins/704946675-root"><img src="https://payloaddirectory.dev/badge/704946675-root.svg" alt="Payload Directory"></a>README
# payload-rest-client
A typesafe rest api client for the [payload cms](https://payloadcms.com).
## Quick Start
1. Assume you have a users (auth enabled) and a posts collection with following fields:
```ts
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;
}
```
2. Create the client:# payload-rest-client
A typesafe rest api client for the [payload cms](https://payloadcms.com).
## Quick Start
1. Assume you have a users (auth enabled) and a posts collection with following fields:
```ts
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;
}
```
2. Create the client:
```ts
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",
});
```
3. Now you can use all available queries for all collections and globals in a typesafe way:
```ts
// 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>
```
## Custom Endpoints
1. Define input and output types for alle custom endpoints:
```ts
import { CustomEndpoint } from "payload-rest-client";
/**
* shape of generic CustomEndpoint type
*
* type Input = {
* params?: Record<string, string>;
* query?: Record<string, any>;
* body?: any;
* };
*
* type Output = any;
*
* type CustomEndpoint<Input, Output>;
*/
type CustomEndpoints = {
greet: CustomEndpoint<{
params: { name: string };
query: { locale: Locales };
}, string>,
};
```
2. Add it to `createClient` function:
```diff
-const client = createClient<Config, Locales>({
- apiUrl: "http://localhost:4000/api",
-});
+const client = createClient<Config, Locales, CustomEndpoints>({
+ apiUrl: "http://localhost:4000/api",
+ customEndpoints: {
+ greet: { method: "GET", path: params => `hello/${params.name}` },
+ },
+});
```
3. Call custom endpoints like this:
```ts
const greeting = await client.custom.greet({
params: { name: "John Doe" },
query: { locale: "en" },
});
```
## API
[Full documentation of the rest api](https://payloadcms.com/docs/rest-api/overview)
### Client options
- apiUrl: string;
- cache?: RequestCache;
- headers?: HeadersInit;
- debug?: boolean;
- getAdditionalFetchOptions?: (params: GetAdditionalFetchOptionsParams) => any;
- customFetchFn? (input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
- customEndpoints?: Record<String, CustomEndpointFactory>;
### 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.5
- Infer id params (`string` or `number`) from type.
### v 3.0.4
- Added custom endpoints
### 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` and `join` params
- Added `count` api
mcp
Adds Model Context Protocol capabilities to Payload so AI clients can work with your CMS
9889.1k/wk45.4kv3
payload assist
DTO utilities and config validation rules to control what Payload endpoints and collection reads return
539/wk0v3
fields select
Select specific fields in Local API and REST API responses, like GraphQL field selection
4726/wk334v3
openapi
Generate OpenAPI 3 documents from your Payload config, including collections, globals and custom endpoints
360/wk142v1
payload graphql view plugin
Adds a GraphQL IDE view to Payload collections and globals in the admin panel
150/wk5v2
payload plugin openapi
Generate OpenAPI 3.0, 3.1 or 3.2 specs from your Payload config and serve them with Scalar or Swagger UI
80437/wk18v4