UNPKG

@aikidosec/firewall

Version:

Zen by Aikido is an embedded Application Firewall that autonomously protects Node.js apps against common and critical attacks, provides rate limiting, detects malicious traffic (including bots), and more.

42 lines (41 loc) 1.62 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.wrapNewInstance = wrapNewInstance; const AgentSingleton_1 = require("../AgentSingleton"); const wrapDefaultOrNamed_1 = require("./wrapDefaultOrNamed"); /** * Intercepts the creation of a new instance of a class, to wrap it's methods and properties. */ function wrapNewInstance(subject, className, pkgInfo, interceptor) { const agent = (0, AgentSingleton_1.getInstance)(); if (!agent) { throw new Error("Can not wrap new instance if agent is not initialized"); } try { return (0, wrapDefaultOrNamed_1.wrapDefaultOrNamed)(subject, className, function wrap(original) { return function wrap() { // eslint-disable-next-line prefer-rest-params const args = Array.from(arguments); // @ts-expect-error It's a constructor const newInstance = new original(...args); try { const returnVal = interceptor(newInstance); if (returnVal) { return returnVal; } } catch (error) { if (error instanceof Error) { agent.onFailedToWrapMethod(pkgInfo.name, className || "default export", error); } } return newInstance; }; }); } catch (error) { if (error instanceof Error) { agent.onFailedToWrapMethod(pkgInfo.name, className || "default export", error); } } }