
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@arcaelas/bridge
Advanced tools
Library that works as a bridge between the different technologies of a project, either to negotiate the consumption of a Rest API or a Serverless.
La computación sin servidor (serverless por sus siglas en ingles) es un modelo de desarrollo en el que un proveedor en la nube (AWS, Azure, Google Cloud Platform, entre otros) es responsable de ejecutar un fragmento de código mediante la asignación dinámica de los recursos.
Existen varias alternativas, entre las mas comunes tenemos:
La documentación asociada a cada uno de estos servicios, se encuentra en el sitio oficial del los responsables.
Suministro ágil de los recursos en tiempo real, incluso en caso de picos de carga imprevisibles o un crecimiento desproporcionado |
Los bridge (Puentes) son una estructura de código que permite a los desarrolladores interceptar solicitudes y respuestas del cliente/servidor, comunmente se utilizan con servicios de ServerLess (leer arriba).
Por este motivo Arcaelas Insiders desarrollado un "Bridge Extensible" para realizar estas tareas, las estructura implementada en nuestra librería se asemeja mucho a Express JS, aún si ya conoces de la estructura de ExpressJS te recomendamos continuar la lectura de este documento.
Antes de comenzar a utilizar nuestra librería será necesario instalarla:
npm i --save @arcaelas/bridge
import Bridge from '@arcaelas/bridge'
// or
const Bridge = require('@arcaelas/bridge');
El tipado se incluye dentro del modulo, no se requiere instalación adicional.
const router = new Bridge();
Ahora bien, si queremos anexar procesadores genéricos para nuestra solicitud, podríamos utilizar el método use() del Objeto router.
Vamos a interceptar todas las solicitudes al router y verificaremos que contengan un token de Autenticación en las cabeceras de la solicitud.
router.use((req, res, next)=>{
// Verificamos que se haya enviado el token de sesión
if( !req.headers.has("Authenticate") )
next( new Error("Se requiere una sesión iniciada"), 401 );
else next();
});
Si se envió algun token se continúa procesando la solicitud, en caso opuesto se detiene el proceso y se resuelve la solicitud con un error (Se requiere una sesión iniciada) y un código de Error HTTP (401 - Unauthorized).
El código de error es opcional, podríamos no incluirlo (por defecto es 502 - Bad Gateway).
El error enviado a travéz de la función next() podría ser de tipo string siempre y cuando sea distinto a route.
Llamamos next() al fallar la verificación, esto se debe a que los bridge interceptan las solicitudes solo una vez para evitar bucles infinitos o errores de memoria
Tener en cuenta que llamar la función next() NO detiene el progreso de la función, esto quiere decir que el código después de next() se sigue leyendo, para evitar el progreso de la función se recomienda utilizar return next(); en caso de ser necesario.
Asumiendo que nuestro router posee un CRUD de productos, vamos a incluír el siguiente código como ejemplo:
// Si tienes el ejemplo anterior incluído en tu código ya no será necesario verificar la sesión.
router.post("/products", async (req, res, next)=>{
/* Necesitas clonar la solicitud para evitar la ruptura del stream */
req = req.clone()
const db = window.localStorage;
const products = JSON.parse(db.getItem("products") || '[]');
/* No realizamos esta conversión de datos de forma automática debido a ciertas incompatibilidades con los posibles valores de BodyInit, pero en un futuro no muy lejano agregaremos más funcionalidades. */
if( req.headers.get("content-type")?.match('form-data') ){
const body = {}
const form = await req.clone().formData()
form.forEach((key, value)=>{
body[key] = value
})
}
else if(req.headers.get('content-type')?.match('application/json')){
const body = await req.clone().json()
}
body.id = products.length + 1
/* Almacenamos el producto en nuesta lista. */
products.push( body );
db.setItem("products", JSON.stringify( products) );
res.send({
data: body
});
/*Tip: Podríamos utilizar next("Guardado", 200); */
});
Perfecto, hasta ahora hemos aprendido a interceptar las solicitudes y procesarlas.
Pero... ¿De que sirve procesar solicitudes que no son enviadas?, vamos a enviar algunas solicitudes a nuestro Bridge.
router.fetch("/products",{
method:"POST",
body: JSON.stringfy({
price: 1260.15,
title:"Smart Phone",
description: "Gold Edition",
}),
})
.then(async res=>{
if( res.ok ) return res.json(); // Convertimos la respuesta a formato JSON
throw new Error( await res.text() ); // Enviamos un error en caso de existir alguno.
})
.then(response=>{
if( response.data ) alert("El producto fué almacenado.");
else alert("Ups! Tuvimos un problema al almacenar el producto.");
})
.catch(err=> alert( err.message ))
Estos son solo algunos de los posibles usos de la librería, en breve estaremos anexando más ejemplos de las funcionalidades y los alcances de la librería.
¿Want to discuss any of my open source projects, or something else?Send me a direct message on Twitter.
If you already use these libraries and want to support us to continue development, you can sponsor us at Github Sponsors.
FAQs
Library that works as a bridge between the different technologies of a project, either to negotiate the consumption of a Rest API or a Serverless.
We found that @arcaelas/bridge demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.

Research
A malicious package uses a QR code as steganography in an innovative technique.

Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.