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