UNPKG

node-catbox

Version:

A library for interacting with Catbox.moe written in TypeScript.

1 lines 5.17 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fs"),t=require("fs/promises");async function s(e){try{return(await t.stat.call(void 0,e)).isFile()}catch(e){return!1}}var r,a=require("stream/consumers"),o=require("path"),i=require("diagnostics_channel"),h=(r=i)&&r.__esModule?r:{default:r},n=Symbol("catbox:request:create"),u=Symbol("litterbox:request:create"),l={create:h.default.channel(n)},c={create:h.default.channel(u)},d="depthbomb/node-catbox",w=e=>`Invalid file path "${e}"`,p=(e,t)=>`Invalid duration "${e}", accepted values are ${t.join(", ")}`,f=["1h","12h","24h","72h"],m=(e=>(e.OneHour="1h",e.TwelveHours="12h",e.OneDay="24h",e.ThreeDays="72h",e))(m||{});exports.Catbox=class{constructor(e){e&&this.setUserHash(e)}get userHash(){return this._userHash}setUserHash(e){this._userHash=e}async uploadURL({url:e}){const t=new FormData;t.set("reqtype","urlupload"),t.set("url",e),this._userHash&&t.set("userhash",this._userHash);const s=await this._doRequest(t);if(s.startsWith("https://files.catbox.moe/"))return s;throw new Error(s)}async uploadFile({path:t}){if(t=o.resolve.call(void 0,t),!await s(t))throw new Error(w(t));const r=await e.openAsBlob.call(void 0,t),a=new FormData;a.set("reqtype","fileupload"),a.set("fileToUpload",r,o.basename.call(void 0,t)),this._userHash&&a.set("userhash",this._userHash);const i=await this._doRequest(a);if(i.startsWith("https://files.catbox.moe/"))return i;throw new Error(i)}async uploadFileStream({stream:e,filename:t}){const s=await a.blob.call(void 0,e),r=new FormData;r.set("reqtype","fileupload"),r.set("fileToUpload",s,t);const o=await this._doRequest(r);if(o.startsWith("https://files.catbox.moe/"))return o;throw new Error(o)}async deleteFiles({files:e}){if(!this._userHash)throw new Error("A user hash is required for this operation.");const t=new FormData;t.set("reqtype","deletefiles"),t.set("userhash",this._userHash),t.set("files",e.join(" "));const s=await this._doRequest(t);if(s.includes("successfully"))return!0;throw new Error(s)}async createAlbum({title:e,description:t,files:s}){const r=new FormData;r.set("reqtype","createalbum"),r.set("title",e),r.set("desc",t),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:e,title:t,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",e),a.set("title",t),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/${e}`)return o;throw new Error(o)}async addFilesToAlbum({id:e,files:t}){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",e),s.set("files",t.join(" ")),s.set("userhash",this._userHash);const r=await this._doRequest(s);if(r===`https://catbox.moe/c/${e}`)return r;throw new Error(r)}async removeFilesFromAlbum({id:e,files:t}){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",e),s.set("files",t.join(" ")),s.set("userhash",this._userHash);const r=await this._doRequest(s);if(r===`https://catbox.moe/c/${e}`)return r;throw new Error(r)}async removeAlbum({id:e}){if(!this._userHash)throw new Error("A user hash is required for this operation.");const t=new FormData;t.set("reqtype","deletealbum"),t.set("short",e),t.set("userhash",this._userHash);const s=await this._doRequest(t);if(0===s.length)return!0;throw new Error(s)}async _doRequest(e){const t={method:"POST",headers:{"user-agent":d},body:e};l.create.hasSubscribers&&l.create.publish({request:t});return(await fetch("https://catbox.moe/user/api.php",t)).text()}},exports.FileLifetime=m,exports.Litterbox=class{constructor(){}async upload({path:e,duration:t}){return this.uploadFile({path:e,duration:t})}async uploadFile({path:t,duration:r="1h"}){if(t=o.resolve.call(void 0,t),!await s(t))throw new Error(w(t));if(!this.isDurationValid(r))throw new Error(p(r,f));const a=await e.openAsBlob.call(void 0,t),i=new FormData;i.set("reqtype","fileupload"),i.set("fileToUpload",a,o.basename.call(void 0,t)),i.set("time",r);const h=await this._doRequest(i);if(h.startsWith("https://litter.catbox.moe/"))return h;throw new Error(h)}async uploadFileStream({stream:e,filename:t,duration:s="1h"}){if(!this.isDurationValid(s))throw new Error(p(s,f));const r=await a.blob.call(void 0,e),o=new FormData;o.set("reqtype","fileupload"),o.set("fileToUpload",r,t),o.set("time",s);const i=await this._doRequest(o);if(i.startsWith("https://litter.catbox.moe/"))return i;throw new Error(i)}isDurationValid(e){return f.includes(e)}async _doRequest(e){const t={method:"POST",headers:{"user-agent":d},body:e};c.create.hasSubscribers&&c.create.publish({request:t});return(await fetch("https://litterbox.catbox.moe/resources/internals/api.php",t)).text()}},exports.kCatboxRequestCreate=n,exports.kLitterboxRequestCreate=u;