patreon-api.ts
v0.6.0
Published
Typescript library for the V2 Patreon API
Downloads
471
Maintainers
Readme
Patreon TS
Typescript library for the V2 Patreon API with Typescript types that strongly reflect your request.
You might be looking for patreon-js for JavaScript, patreon-api-types for less strict types and no client or another package in between.
Installation
npm install patreon-api.ts
pnpm add patreon-api.ts
yarn add patreon-api.ts
Usage
[!CAUTION] This package does not include v1 of the Patreon API and starts with API v2
The default API version for this package is 2
and might change in major versions.
When the default API version is changed, old versions will still receive updates.
You can not import this module by API version since it is unlikely that Patreon will release a new version any time soon.
import { type Campaign } from 'patreon-api.ts';
Platform
To check for compatibility with this package, look if your platform:
- has the globals:
fetch
,URL
andURLSearchParams
- for node.js:
v18
or higher
- for node.js:
- supports
ES2020
- supports
createHmac
of thenode:crypto
module
Clients
Creator token
If you don't need to handle Oauth2 requests, but only your own creator profile, the first example will get you started. It is recommended to sync your token to your database or store it somewhere safe, so the token is not lost.
import { PatreonCreatorClient, PatreonStore } from 'patreon-api.ts'
const creatorClient = new PatreonCreatorClient({
oauth: {
clientId: process.env.PATREON_CLIENT_ID!,
clientSecret: process.env.PATREON_CLIENT_SECRET!,
// Either set the token in the options
// or configure a store and call <Client>.initialize()
token: {
access_token: process.env.PATREON_CREATOR_ACCESS_TOKEN!,
refresh_token: process.env.PATREON_CREATOR_REFRESH_TOKEN!,
},
},
store: new PatreonStore.Fetch('<url>'),
})
// Use the token of the creator with the current app, instead of Oauth2 callback
// Will call store.put, to sync it with an external DB
// After fetching, you can directly call the V2 API and the token is stored with store.put
await creatorClient.initialize()
User oauth2
For handling Oauth2 requests, add redirectUri
and if specified a state
to the options.
Then fetch the token for the user with request url.
Note that for handling Oauth2 requests the client will not cache or store the tokens anywhere in case you need to refresh it!
import { PatreonUserClient } from 'patreon-api.ts'
// Minimal configuration for handling Oauth2
const userClient = new PatreonUserClient({
oauth: {
clientId: process.env.PATREON_CLIENT_ID!,
clientSecret: process.env.PATREON_CLIENT_SECRET!,
redirectUri: '<uri>',
}
})
export default {
// The Oauth2 callback request with the code parameter
fetch: async (request) => {
const instance = await userClient.createInstance(request)
await instance.fetchIdentity(<query>)
}
}
Store
There are 3 built-in methods of retreiving and storing tokens:
- Manual loading and storing, see the example below
- Fetch: use an external server that accepts
GET
andPUT
requests - KV: store the (creator) token in a KV-like storage system (present on a lot of edge-runtimes).
// Use stored tokens in a database
// And directly call the `store.get` method on starting the client
const storeClient = new PatreonCreatorClient({
oauth: {
clientId: process.env.PATREON_CLIENT_ID!,
clientSecret: process.env.PATREON_CLIENT_SECRET!,
},
name: '<application>', // The application name in the dashboard
store: {
get: async () => {
// Get your stored token
return <never>{
access_token: '<token>',
//...refresh, expires, etc.
}
},
put: async (token) => {
console.log(JSON.stringify(token))
}
}
})
Webhooks
You can interact with the webhooks API using one of the clients above. This library also exposes functions to create a webhook server.
import { parseWebhookRequest } from 'patreon-api.ts'
export default {
async fetch (request) {
const { verified, payload, event } = await parseWebhookRequest(request, env.WEBHOOK_SECRET)
if (!verified) return new Response('Invalid request', { status: 403 })
// handle your event
}
}
Examples
[!NOTE] In API v2, all attributes must be explicitly requested.
Changelog
Detailed changes are listed for each release in the changelog.
For upcoming releases, see the roadmap for planned changes.
Contributing
See the code of conduct and the contributing guide for how to contribute. You can also support the development by writing guides, posts and templates or by funding the maintainers.