Source: auth/register.mjs

import { API_BASE, API_AUTH, API_REGISTER } from "../settings.mjs";
import { displayError } from "../shared/displayErrorMsg.mjs";
import { displaySpinner } from "../shared/displaySpinner.mjs";
import { ErrorHandler } from "../shared/errorHandler.mjs";

// generated via https://transform.tools/json-to-jsdoc

/** @typedef {object} RegisterResponse
 * @property {object} data
 * @property {string} data.name
 * @property {string} data.email
 * @property {string} data.bio
 * @property {object} data.avatar
 * @property {string} data.avatar.url
 * @property {string} data.avatar.alt
 * @property {object} data.banner
 * @property {string} data.banner.url
 * @property {string} data.banner.alt
 */

/**
 * @description This function send a request to register a new user return
 * @async
 * @function register
 * @param {string} name user name
 * @param {string} email user email
 * @param {string} psw user password
 * @return {Promise<RegisterResponse|null|undefined>} If response is ok, return the user info. If response is not ok, return null. Returns undefined for unexpected errors.
 */
export async function register(name, email, psw) {
  try {
    displaySpinner(true, "#spinnerRegister");
    displayError(false, "#error");

    const url = API_BASE + API_AUTH + API_REGISTER;
    const request = {
      name: name,
      email: email,
      password: psw,
    };

    const response = await fetch(url, {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
      },
      body: JSON.stringify(request),
    });

    if (response.ok) {
      /** @type {RegisterResponse} */
      const data = await response.json();
      return data;
    }

    const eh = new ErrorHandler(response);
    const msg = await eh.getErrorMessage();
    displayError(true, "#error", msg);

    return null;
  } catch (ev) {
    displayError(true, "#error", "Could not register the account!");
  } finally {
    displaySpinner(false, "#spinnerRegister");
  }
}