node-catbox
Version:
A library for interacting with Catbox.moe written in TypeScript.
1 lines • 4.31 kB
JavaScript
;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("path"),o=require("diagnostics_channel"),i=(r=o)&&r.__esModule?r:{default:r},h=Symbol("catbox:request:create"),n=Symbol("litterbox:request:create"),u={create:i.default.channel(h)},l={create:i.default.channel(n)},c="depthbomb/node-catbox";exports.Catbox=class{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:r}=t;if(r=a.resolve.call(void 0,r),!await s(r))throw new Error(`Invalid file path "${r}"`);const o=await e.openAsBlob.call(void 0,r),i=new FormData;i.set("reqtype","fileupload"),i.set("fileToUpload",o,a.basename.call(void 0,r)),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 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,a=new FormData;a.set("reqtype","createalbum"),a.set("title",t),a.set("desc",s),r&&r.length&&a.set("files",r.join(" ")),this._userHash&&a.set("userhash",this._userHash);const o=await this._doRequest(a);if(o.startsWith("https://catbox.moe/c/"))return o;throw new Error(o)}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:a}=e,o=new FormData;o.set("reqtype","editalbum"),o.set("short",t),o.set("title",s),o.set("desc",r),a&&a.length&&o.set("files",a.join(" ")),o.set("userhash",this._userHash);const i=await this._doRequest(o);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 a=await this._doRequest(r);if(a===`https://catbox.moe/c/${t}`)return a;throw new Error(a)}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 a=await this._doRequest(r);if(a===`https://catbox.moe/c/${t}`)return a;throw new Error(a)}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};u.create.hasSubscribers&&u.create.publish({request:t});return(await fetch("https://catbox.moe/user/api.php",t)).text()}},exports.Litterbox=class{constructor(){}async upload(t){let{path:r,duration:o}=t;if(r=a.resolve.call(void 0,r),!await s(r))throw new Error(`Invalid file path "${r}"`);if(o){const e=["1h","12h","24h","72h"];if(!e.includes(o))throw new Error(`Invalid duration "${o}", accepted values are ${e.join(", ")}`)}else o="1h";const i=await e.openAsBlob.call(void 0,r),h=new FormData;h.set("reqtype","fileupload"),h.set("fileToUpload",i,a.basename.call(void 0,r)),h.set("time",o);const n={method:"POST",headers:{"user-agent":c},body:h};l.create.hasSubscribers&&l.create.publish({request:n});const u=await fetch("https://litterbox.catbox.moe/resources/internals/api.php",n),d=await u.text();if(d.startsWith("https://litter.catbox.moe/"))return d;throw new Error(d)}},exports.kCatboxRequestCreate=h,exports.kLitterboxRequestCreate=n;