postiz/apps/sdk/src/index.ts

96 lines
2.3 KiB
TypeScript

import { CreatePostDto } from '@gitroom/nestjs-libraries/dtos/posts/create.post.dto';
import { GetPostsDto } from '@gitroom/nestjs-libraries/dtos/posts/get.posts.dto';
import fetch, { FormData } from 'node-fetch';
function toQueryString(obj: Record<string, any>): string {
const params = new URLSearchParams();
Object.entries(obj).forEach(([key, value]) => {
if (value !== undefined && value !== null) {
params.append(key, String(value));
}
});
return params.toString();
}
export default class Postiz {
constructor(
private _apiKey: string,
private _path = 'https://api.postiz.com'
) {}
async post(posts: CreatePostDto) {
return (
await fetch(`${this._path}/public/v1/posts`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: this._apiKey,
},
body: JSON.stringify(posts),
})
).json();
}
async postList(filters: GetPostsDto) {
return (
await fetch(`${this._path}/public/v1/posts?${toQueryString(filters)}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: this._apiKey,
},
})
).json();
}
async upload(file: Buffer, extension: string) {
const formData = new FormData();
const type =
extension === 'png'
? 'image/png'
: extension === 'jpg'
? 'image/jpeg'
: extension === 'gif'
? 'image/gif'
: extension === 'jpeg'
? 'image/jpeg'
: 'image/jpeg';
const blob = new Blob([file], { type });
formData.append('file', blob, extension);
return (
await fetch(`${this._path}/public/v1/upload`, {
method: 'POST',
// @ts-ignore
body: formData,
headers: {
Authorization: this._apiKey,
},
})
).json();
}
async integrations() {
return (
await fetch(`${this._path}/public/v1/integrations`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: this._apiKey,
},
})
).json();
}
deletePost(id: string) {
return fetch(`${this._path}/public/v1/posts/${id}`, {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
Authorization: this._apiKey,
},
});
}
}