96 lines
2.3 KiB
TypeScript
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,
|
|
},
|
|
});
|
|
}
|
|
}
|