Áú»¢¶Ä²©

1 Objetos JavaScript adicionales

¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô general

Esta secci¨®n describe las adiciones de Áú»¢¶Ä²© al lenguaje JavaScript implementado con Duktape y las funciones globales de JavaScript compatibles.

Objetos integrados

Áú»¢¶Ä²©

El objeto Áú»¢¶Ä²© proporciona interacci¨®n con la funcionalidad interna de Áú»¢¶Ä²©.

²Ñ¨¦³Ù´Ç»å´Ç ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
log(loglevel, mensaje) Escribe el <mensaje> en el registro de Áú»¢¶Ä²© usando el nivel de registro <loglevel> (consulte el par¨¢metro DebugLevel del archivo de configuraci¨®n).

Ejemplo:

Áú»¢¶Ä²©.log(3, "esta es una entrada de registro escrita con el nivel de registro 'Advertencia'")

Puede utilizar los siguientes alias:

Alias Alias de
console.log(objeto) Áú»¢¶Ä²©.log(4, JSON.stringify(objeto))
console.warn(objeto) Áú»¢¶Ä²©.log(3, JSON.stringify(objeto))
console.error(objeto) Áú»¢¶Ä²©.log(2, JSON.stringify(objeto))

El tama?o total de todos los mensajes registrados est¨¢ limitado a 8 MB por cada ejecuci¨®n del script.

²Ñ¨¦³Ù´Ç»å´Ç ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
sleep(delay) Retrasa la ejecuci¨®n de JavaScript en delay milisegundos.

Ejemplo (retrasar la ejecuci¨®n 15 segundos):

Áú»¢¶Ä²©.sleep(15000)

HttpRequest

Este objeto encapsula el identificador cURL que permite realizar solicitudes HTTP simples. Los errores se lanzan como excepciones.

La inicializaci¨®n de m¨²ltiples objetos HttpRequest est¨¢ limitada a 10 por cada ejecuci¨®n del script.

²Ñ¨¦³Ù´Ç»å´Ç ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
addHeader(value) Agrega el campo de encabezado HTTP. Este campo se utiliza para todas las solicitudes siguientes hasta que se borre con el m¨¦todo clearHeader().
La longitud total de los campos de encabezado que se pueden agregar a un ¨²nico objeto HttpRequest est¨¢ limitada a 128 Kbytes (caracteres especiales y nombres de encabezado incluidos).
clearHeader() Borra el encabezado HTTP. Si no se establecen campos de encabezado, HttpRequest establecer¨¢ el tipo de contenido en aplicaci¨®n/json si los datos que se publican tienen formato JSON; texto/sin formato en caso contrario.
connect(url) Env¨ªa la solicitud HTTP CONNECT a la URL y devuelve la respuesta.
customRequest(m¨¦todo, url, datos) Permite especificar cualquier m¨¦todo HTTP en el primer par¨¢metro. Env¨ªa la solicitud del m¨¦todo a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
delete(url, datos) Env¨ªa la solicitud HTTP DELETE a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
getHeaders(<asArray>) Devuelve el objeto de los campos de encabezado HTTP recibidos.
El par¨¢metro asArray puede establecerse en "true" (por ejemplo, getHeaders(true)), "false" o no estar definido . Si se establece en "verdadero", los valores del campo de encabezado HTTP recibidos se devolver¨¢n como matrices; esto debe usarse para recuperar los valores de los campos de m¨²ltiples encabezados con el mismo nombre.
Si no se establece o se establece en "falso", los valores de los campos del encabezado HTTP recibidos se devolver¨¢n como cadenas.
get(url, datos) Env¨ªa una solicitud HTTP GET a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
head(url) Env¨ªa la solicitud HTTP HEAD a la URL y devuelve la respuesta.
options(url) Env¨ªa la solicitud HTTP OPTIONS a la URL y devuelve la respuesta.
patch(url, datos) Env¨ªa la solicitud HTTP PATCH a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
put(url, datos) Env¨ªa la solicitud HTTP PUT a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
post(url, datos) Env¨ªa la solicitud HTTP POST a la URL con la carga ¨²til datos opcional y devuelve la respuesta.
getStatus() Devuelve el c¨®digo de estado de la ¨²ltima solicitud HTTP.
setProxy(proxy) Establece el proxy HTTP al valor "proxy". Si este par¨¢metro est¨¢ vac¨ªo, no se utiliza ning¨²n proxy.
setHttpAuth(m¨¢scara de bits, nombre de usuario, contrase?a) Establece los m¨¦todos de autenticaci¨®n HTTP habilitados (HTTPAUTH_BASIC, HTTPAUTH_DIGEST, HTTPAUTH_NEGOTIATE, HTTPAUTH_NTLM, HTTPAUTH_NONE) en el par¨¢metro 'bitmask'.
HTTPAUTH El indicador _NONE permite deshabilitar la autenticaci¨®n HTTP.
Ejemplos:
request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC, nombre de usuario, contrase?a)
request.setHttpAuth(HTTPAUTH_NONE)
trace(url, datos) Env¨ªa la solicitud HTTP TRACE a la URL con la carga ¨²til datos opcional y devuelve la respuesta.

Ejemplo:

try {
           Áú»¢¶Ä²©.log(4, 'valor del script de jira webhook='+valor);
         
           var result = {
               'tags': {
                   'endpoint': 'jira'
               }
           },
           params = JSON.parse(value),
           req = new HttpRequest(),
           fields = {},
           resp;
         
           req.addHeader('Content-Type: application/json');
           req.addHeader('Authorization: Basic '+params.authentication);
         
           fields.summary = params.summary;
           fields.description = ±è²¹°ù¨¢³¾±ð³Ù°ù´Ç²õ.description;
           fields.project = {"key": params.project_key};
           fields.issuetype = {"id": params.issue_id};
           resp = req.post('https://jira.example.com/rest/api/2/issue/',
               JSON.stringify({"fields": fields})
           );
         
           if ( (req.getStatus() != 201) {
               throw 'C¨®digo de respuesta: '+req.getStatus();
           }
         
           resp = JSON.parse(resp);
           result.tags.issue_id = resp.id;
           result.tags.issue_key = resp.key;
       } catch (error) {
           Áú»¢¶Ä²©.log(4, 'fall¨® la creaci¨®n del problema de jira json: '+JSON.stringify({"fields": fields}));
           Áú»¢¶Ä²©.log(4, 'Error al crear el problema de Jira: '+error);
         
           result = {};
       }
         
       return JSON.stringify(result);

XML

El objeto XML permite el procesamiento de datos XML en la m¨¦trica y el preprocesamiento del descubrimiento de bajo nivel y webhooks.

Para utilizar un objeto XML, el servidor/proxy debe estar compilado con soporte libxml2.

²Ñ¨¦³Ù´Ç»å´Ç ¶Ù±ð²õ³¦°ù¾±±è³¦¾±¨®²Ô
XML.query(datos, ±ð³æ±è°ù±ð²õ¾±¨®²Ô) Recupera el contenido del nodo usando XPath. Devuelve nulo si no se encuentra el nodo.
±ð³æ±è°ù±ð²õ¾±¨®²Ô: una ±ð³æ±è°ù±ð²õ¾±¨®²Ô XPath;
datos: datos XML como una cadena.
XML.toJson(data) Convierte datos en formato XML a JSON.
XML.fromJson(object) Convierte datos en formato JSON a XML.

Ejemplo:

Entrada:

<menu>
           <food type = "breakfast">
               <name>Chocolate</name>
               <price>$5.95</price>
               <description></description>
               <calories>650</calories>
           </food>
       </menu>

Salida:

{
           "menu": {
               "food": {
                   "@type": "breakfast",
                   "name": "Chocolate",
                   "price": "$5.95",
                   "description": null,
                   "calories": "650"
               }
           }
       }
Reglas de serializaci¨®n

La conversi¨®n de XML a JSON se procesar¨¢ de acuerdo con las siguientes reglas (para conversiones de JSON a XML se aplican reglas invertidas):

1. Los atributos XML se convertir¨¢n en claves que tendr¨¢n sus nombres antepuestos por "@".

Ejemplo:

Entrada:

 <xml foo="FOO">
          <bar>
            <baz>BAZ</baz>
          </bar>
        </xml>

±Ê°ù´Ç»å³Ü³¦³¦¾±¨®²Ô:

 {
          "xml": {
            "@Foo Foo",
            "bar": {
              "baz": "BAZ"
            }
          }
        }

2. Los elementos de cierre autom¨¢tico (<foo/>) se convertir¨¢n como si tuvieran valor nulo.

Ejemplo:

Entrada:

<xml>
         <foo/>
       </xml>

Salida:

{
         "xml": {
           "foo": null
         }
       }

3. Los atributos vac¨ªos (con valor "") se convertir¨¢n como si tuvieran un valor de cadena vac¨ªa.

Ejemplo:

Entrada:

<xml>
         <foo bar="" />
       </xml>

Salida:

{
         "xml": {
           "foo": {
             "@bar": ""
           }
         }
       }

4. Varios nodos secundarios con el mismo nombre de elemento se convertir¨¢n en una ¨²nica clave que tiene una matriz de valores como valor.

Ejemplo:

Entrada:

<xml>
         <foo>BAR</foo>
         <foo>BAZ</foo>
         <foo>QUX</foo>
       </xml>

Salida:

{
         "xml": {
           "foo": ["BAR", "BAZ", "QUX"]
         }
       }

5. Si un elemento de texto no tiene atributos ni hijos, ser¨¢ convertido como una cadena.

Ejemplo:

Entrada:

<xml>
           <foo>BAZ</foo>
       </xml>

Salida:

{
         "xml": {
           "foo": "BAZ"
          }
       }

6. Si un elemento de texto no tiene hijos, pero tiene atributos: el contenido de texto se convertir¨¢ en un elemento con la clave '#text' y el contenido como valor; Los atributos se convertir¨¢n como se describe en la regla 1 de serializaci¨®n.

Ejemplo:

Entrada:

<xml>
         <foo bar="BAR">
           BAZ
         </foo>
       </xml>

Salida:

{
         "xml": {
           "foo": {
             "@bar": "BAR",
             "#text": "BAZ"
           }
         }
       }

Funciones globales de JavaScript

Se han implementado funciones globales adicionales de JavaScript con Duktape:

  • btoa(datos) - codifica los datos en una cadena base64
  • atob(base64_string) - decodifica cadena base64
try {
           b64 = btoa("cadena utf8");
           utf8 = atob(b64);
       }
       catch (error) {
           return {'error.name': error.name, 'error.message': error.message}
       }
  • md5(datos) - calcula el hash MD5 de los datos

  • sha256(datos) - calcula el hash SHA256 de los datos

  • hmac('<tipo de hash>',key,data) - devuelve el hash HMAC como una cadena con formato hexadecimal; Se admiten los tipos de hash MD5 y SHA256; Los ±è²¹°ù¨¢³¾±ð³Ù°ù´Ç²õ clave y de datos admiten datos binarios. Ejemplos:

    • hmac('md5',clave,datos)
    • hmac('sha256',clave,datos)
  • sign(hash,key,data) - devuelve la firma calculada (firma RSA con SHA-256) como una cadena, donde:
    hash: solo se permite 'sha256'; de lo contrario, se genera un error;
    clave - la clave privada. Debe corresponder al est¨¢ndar PKCS#1 o PKCS#8. La clave se puede proporcionar de diferentes formas:

    • con espacios en lugar de nuevas l¨ªneas;
    • con ''s con escape o sin escape en lugar de nuevas l¨ªneas;
    • sin nuevas l¨ªneas como una cadena de una sola l¨ªnea;
    • como una cadena con formato JSON.

    La clave tambi¨¦n se puede cargar desde una macro de usuario/macro secreta/b¨®veda.

    datos: los datos que se firmar¨¢n. Puede ser una cadena (tambi¨¦n se admiten datos binarios) o un b¨²fer (Uint8Array/ArrayBuffer).
    Se utiliza OpenSSL o GnuTLS para calcular las firmas. Si Áú»¢¶Ä²© se cre¨® sin ninguna de estas bibliotecas de cifrado, se generar¨¢ un error ('falta la biblioteca OpenSSL o GnuTLS').
    Esta funci¨®n es compatible desde Áú»¢¶Ä²© 6.4.1.