G. Carpeta « libclienteweb »

Versión para imprimir.

A. libclienteweb / conexionMqttPerdida.js

1
/**
2
 * @param {{
3
 *   errorCode: number,
4
 *   errorMessage: string
5
 *  }} responseObject
6
 */
7
export function conexionMqttPerdida(responseObject) {
8
 if (responseObject.errorCode !== 0) {
9
  const mensaje = "Conexión MQTT terminada " + responseObject.errorMessage
10
  console.error(mensaje)
11
  alert(mensaje)
12
 }
13
}

B. libclienteweb / creaIdCliente.js

1
/**
2
 * Añade caracteres al azar a una raíz, para obtener un clientId único.
3
 * @param {string} raiz 
4
 */
5
export function creaIdCliente(raiz) {
6
 const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
7
 for (var i = 0; i < 15; i++) {
8
  raiz += chars.charAt(Math.floor(Math.random() * chars.length))
9
 }
10
 return raiz
11
}

C. libclienteweb / enviaMensajeMqtt.js

1
// @ts-nocheck
2
/**
3
 * Envá un valor al servidor de MQTT y es reenviado a todos los dispositivos
4
 * suscritos al tópico indicado
5
 * @param {Paho.MQTT.Client} cliente
6
 * @param {string} mensaje
7
 * @param {string} topico
8
 */
9
export function enviaMensajeMqtt(cliente, mensaje, topico) {
10
 const mensajeMqtt = new Paho.MQTT.Message(mensaje)
11
 mensajeMqtt.destinationName = topico
12
 cliente.send(mensajeMqtt)
13
}

D. libclienteweb / falloEnLaConexionMqtt.js

1
/**
2
 * @param {{errorMessage: string}} res
3
 */
4
export function falloEnLaConexionMqtt(res) {
5
 console.error(res)
6
 const mensaje = "Fallo en conexión MQTT: " + res.errorMessage
7
 alert(mensaje)
8
}

E. libclienteweb / manejaErrores.js

1
import { muestraError } from "./muestraError.js"
2
3
/**
4
 * Intercepta Response.prototype.json para capturar errores de parseo
5
 * y asegurar que se reporten correctamente en navegadores Chromium.
6
 */
7
{
8
 const originalJson = Response.prototype.json
9
10
 Response.prototype.json = function () {
11
  // Llamamos al método original usando el contexto (this) de la respuesta
12
  return originalJson.call(this)
13
   .catch((/** @type {any} */ error) => {
14
    // Corrige un error de Chrome que evita el manejo correcto de errores.
15
    throw new Error(error)
16
   })
17
 }
18
}
19
20
window.onerror = function (
21
 /** @type {Event | string} */ _event,
22
 /** @type {string | undefined} */ _fuente,
23
 /** @type {number | undefined} */ _numeroDeLinea,
24
 /** @type {number | undefined} */ _numeroDeColumna,
25
 /** @type {Error | undefined} */ error
26
) {
27
 muestraError(error)
28
 return true
29
}
30
31
window.addEventListener('unhandledrejection', event => {
32
 muestraError(event.reason)
33
 event.preventDefault()
34
})

F. libclienteweb / muestraError.js

1
import { ProblemDetailsError } from "./ProblemDetailsError.js"
2
3
/**
4
 * Muestra los datos de una Error en la consola y en un cuadro de alerta.
5
 * @param { unknown } error descripción del error.
6
 */
7
export function muestraError(error) {
8
9
 if (error instanceof ProblemDetailsError) {
10
11
  const problemDetails = error.problemDetails
12
13
  let mensaje =
14
   typeof problemDetails["title"] === "string" ? problemDetails["title"] : ""
15
  if (typeof problemDetails["detail"] === "string") {
16
   if (mensaje !== "") {
17
    mensaje += "\n"
18
   }
19
   mensaje += problemDetails["detail"]
20
  }
21
  if (mensaje === "") {
22
   mensaje = "Error"
23
  }
24
  console.error(error, problemDetails)
25
  alert(mensaje)
26
27
 } else if (
28
  typeof error === "object" && error !== null && "message" in error
29
 ) {
30
31
  console.error(error)
32
  alert(error.message)
33
34
 } else {
35
36
  console.error("Error", error)
37
  alert("Error")
38
39
 }
40
41
}

G. libclienteweb / ProblemDetailsError.js

1
export class ProblemDetailsError extends Error {
2
3
 /**
4
  * Detalle de los errores devueltos por un servicio.
5
  * Crea una instancia de ProblemDetailsError.
6
  * @param {any} problemDetails Objeto con la descripcipon del error.
7
  */
8
 constructor(problemDetails) {
9
10
  super(
11
   typeof problemDetails["detail"] === "string"
12
    ? problemDetails["detail"]
13
    : (
14
     typeof problemDetails["title"] === "string"
15
      ? problemDetails["title"]
16
      : "Error"
17
    )
18
  )
19
20
  this.problemDetails = problemDetails
21
22
 }
23
24
}