node-catbox
Version:
A library for interacting with Catbox.moe written in TypeScript.
1 lines • 4.21 kB
JavaScript
import{openAsBlob as e}from"node:fs";import{stat as t}from"node:fs/promises";async function s(e){try{return(await t(e)).isFile()}catch{return!1}}import{resolve as r,basename as o}from"node:path";import a from"node:diagnostics_channel";var i=Symbol("catbox:request:create"),h=Symbol("litterbox:request:create"),n={create:a.channel(i)},u={create:a.channel(h)},c="depthbomb/node-catbox",l=class{_userHash;constructor(e){e&&this.setUserHash(e)}get userHash(){return this._userHash}setUserHash(e){this._userHash=e}async uploadURL(e){const{url:t}=e,s=new FormData;s.set("reqtype","urlupload"),s.set("url",t),this._userHash&&s.set("userhash",this._userHash);const r=await this._doRequest(s);if(r.startsWith("https://files.catbox.moe/"))return r;throw new Error(r)}async uploadFile(t){let{path:a}=t;if(a=r(a),!await s(a))throw new Error(`Invalid file path "${a}"`);const i=await e(a),h=new FormData;h.set("reqtype","fileupload"),h.set("fileToUpload",i,o(a)),this._userHash&&h.set("userhash",this._userHash);const n=await this._doRequest(h);if(n.startsWith("https://files.catbox.moe/"))return n;throw new Error(n)}async deleteFiles(e){if(!this._userHash)throw new Error("A user hash is required for this operation.");const{files:t}=e,s=new FormData;s.set("reqtype","deletefiles"),s.set("userhash",this._userHash),s.set("files",t.join(" "));const r=await this._doRequest(s);if(r.includes("successfully"))return!0;throw new Error(r)}async createAlbum(e){const{title:t,description:s,files:r}=e,o=new FormData;o.set("reqtype","createalbum"),o.set("title",t),o.set("desc",s),r&&r.length&&o.set("files",r.join(" ")),this._userHash&&o.set("userhash",this._userHash);const a=await this._doRequest(o);if(a.startsWith("https://catbox.moe/c/"))return a;throw new Error(a)}async editAlbum(e){if(!this._userHash)throw new Error("A user hash is required for this operation.");const{id:t,title:s,description:r,files:o}=e,a=new FormData;a.set("reqtype","editalbum"),a.set("short",t),a.set("title",s),a.set("desc",r),o&&o.length&&a.set("files",o.join(" ")),a.set("userhash",this._userHash);const i=await this._doRequest(a);if(i===`https://catbox.moe/c/${t}`)return i;throw new Error(i)}async addFilesToAlbum(e){if(!this._userHash)throw new Error("A user hash is required for this operation.");const{id:t,files:s}=e,r=new FormData;r.set("reqtype","addtoalbum"),r.set("short",t),r.set("files",s.join(" ")),r.set("userhash",this._userHash);const o=await this._doRequest(r);if(o===`https://catbox.moe/c/${t}`)return o;throw new Error(o)}async removeFilesFromAlbum(e){if(!this._userHash)throw new Error("A user hash is required for this operation.");const{id:t,files:s}=e,r=new FormData;r.set("reqtype","removefromalbum"),r.set("short",t),r.set("files",s.join(" ")),r.set("userhash",this._userHash);const o=await this._doRequest(r);if(o===`https://catbox.moe/c/${t}`)return o;throw new Error(o)}async removeAlbum(e){if(!this._userHash)throw new Error("A user hash is required for this operation.");const{id:t}=e,s=new FormData;s.set("reqtype","deletealbum"),s.set("short",t),s.set("userhash",this._userHash);const r=await this._doRequest(s);if(0===r.length)return!0;throw new Error(r)}async _doRequest(e){const t={method:"POST",headers:{"user-agent":c},body:e};n.create.hasSubscribers&&n.create.publish({request:t});return(await fetch("https://catbox.moe/user/api.php",t)).text()}};import{openAsBlob as d}from"node:fs";import{resolve as w,basename as p}from"node:path";var f=class{constructor(){}async upload(e){let{path:t,duration:r}=e;if(t=w(t),!await s(t))throw new Error(`Invalid file path "${t}"`);if(r){const e=["1h","12h","24h","72h"];if(!e.includes(r))throw new Error(`Invalid duration "${r}", accepted values are ${e.join(", ")}`)}else r="1h";const o=await d(t),a=new FormData;a.set("reqtype","fileupload"),a.set("fileToUpload",o,p(t)),a.set("time",r);const i={method:"POST",headers:{"user-agent":c},body:a};u.create.hasSubscribers&&u.create.publish({request:i});const h=await fetch("https://litterbox.catbox.moe/resources/internals/api.php",i),n=await h.text();if(n.startsWith("https://litter.catbox.moe/"))return n;throw new Error(n)}};export{l as Catbox,f as Litterbox,i as kCatboxRequestCreate,h as kLitterboxRequestCreate};