UNPKG

tusk-mastodon

Version:

Async Mastodon API client for node

58 lines (52 loc) 1.78 kB
/** * For each `/:param` fragment in path, move the value in params * at that key to path. If the key is not found in params, throw. * * @param {Object} params Object used to build path. * @param {string} path String to transform. * @return {string} Modified path */ exports.moveParamsIntoPath = (params, path) => { const rgxParam = /\/:(\w+)/g; return path.replace(rgxParam, (hit) => { const paramName = hit.slice(2); const suppliedVal = params[paramName]; if (!suppliedVal) { throw new Error(`Mastodon: Params object is missing a required parameter for this request: ${paramName}`); } delete params[paramName]; return `/${suppliedVal}`; }); }; /** * Attach error information from the response body to the error object. * * @param {Error} err Error instance to which body info will be attached. * @param {Object} body JSON object that is the deserialized HTTP response body received from Mastodon. */ exports.attachBodyInfoToError = (err, body) => { err.mastodonReply = body; if (!body) return; err.allErrors = err.allErrors || []; // Ensure allErrors is an array if (body.error) { err.message = body.error; err.allErrors.push(body); } else if (body.errors && body.errors.length) { err.message = body.errors[0].message; err.code = body.errors[0].code; err.allErrors.push(...body.errors); } }; /** * Create a new Mastodon error object. * * @param {string} [message] Optional error message. * @return {Error} A new error object. */ exports.makeMastodonError = (message) => { const err = new Error(message || ""); err.code = null; err.allErrors = []; err.mastodonReply = null; return err; };