@simulacrum/auth0-simulator
Version:
Run local instance of Auth0 API for local development and integration testing
84 lines • 3.46 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createRulesRunner = createRulesRunner;
const path_1 = __importDefault(require("path"));
const vm_1 = __importDefault(require("vm"));
const fs_1 = __importDefault(require("fs"));
const assert_ts_1 = require("assert-ts");
const parse_rules_files_ts_1 = require("./parse-rules-files.js");
function runRule(user, context, rule) {
return __awaiter(this, void 0, void 0, function* () {
yield new Promise((resolve, reject) => {
let sandbox = {
process,
Buffer,
clearImmediate,
clearInterval,
clearTimeout,
setImmediate,
setInterval,
setTimeout,
console,
require,
module,
resolve,
reject,
__simulator: Object.assign({
user,
context: Object.assign({}, context),
}),
};
let vmContext = vm_1.default.createContext(sandbox);
(0, assert_ts_1.assert)(typeof rule !== "undefined", "undefined rule");
let { code, filename } = rule;
console.debug(`executing rule ${path_1.default.basename(filename)}`);
let script = new vm_1.default.Script(`
(async function(exports) {
try {
await (${code})(__simulator.user, __simulator.context, resolve);
} catch (err) {
console.error(err);
reject();
}
})(module.exports)
`);
script.runInContext(vmContext, {
filename,
displayErrors: true,
timeout: 20000,
});
}).catch((error) => console.error(error));
});
}
function createRulesRunner(rulesPath) {
// eslint-disable-next-line @typescript-eslint/no-unused-vars
let callback = (_user, _context) => { };
if (typeof rulesPath === "undefined") {
return callback;
}
let fullPath = path_1.default.join(process.cwd(), rulesPath);
(0, assert_ts_1.assert)(fs_1.default.existsSync(fullPath), `no rules directory at ${fullPath}`);
let rules = (0, parse_rules_files_ts_1.parseRulesFiles)(rulesPath);
if (rules.length === 0) {
return callback;
}
return (user, context) => __awaiter(this, void 0, void 0, function* () {
console.debug(`applying ${rules.length} rules`);
for (let rule of rules) {
yield runRule(user, context, rule);
}
});
}
//# sourceMappingURL=rules-runner.js.map