| 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', |
| |
| 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, |
| }, |
| }); |
| } |
| } |
|
|