UNPKG

hasura-node-types

Version:

Add Hasura types, event trigger and action wrapper for common web frameworks

137 lines 5.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateScheduledTriggerPayload = exports.validateEventPayload = exports.validateActionPayload = exports.printLog = exports.getEventUserRole = exports.getEventUserID = exports.getActionUserRole = exports.getActionUserID = exports.defaultLogger = void 0; /* eslint-disable @typescript-eslint/no-unsafe-member-access */ const types_1 = require("./types"); const LEVEL_INFO = "info"; const LEVEL_DEBUG = "debug"; const LEVEL_WARN = "warn"; const LEVEL_ERROR = "error"; exports.defaultLogger = { log: console.log, debug: console.debug, info: console.log, warn: console.warn, error: console.error, }; // common getters for actions function getActionUserID(payload) { return payload.session_variables ? payload.session_variables[types_1.XHasuraUserID] : null; } exports.getActionUserID = getActionUserID; function getActionUserRole(payload) { return payload.session_variables ? payload.session_variables[types_1.XHasuraRole] : null; } exports.getActionUserRole = getActionUserRole; // common getters for event trigger function getEventUserID(payload) { return payload.event && payload.event.session_variables ? payload.event.session_variables[types_1.XHasuraUserID] : null; } exports.getEventUserID = getEventUserID; function getEventUserRole(payload) { return payload.event && payload.event.session_variables ? payload.event.session_variables[types_1.XHasuraRole] : null; } exports.getEventUserRole = getEventUserRole; function printLog(logger, payload) { if (logger.log && typeof logger.log === "function") { // print general log, support bunyan and console.log return logger.log(payload); } const level = !payload.level ? "info" : [LEVEL_INFO, LEVEL_DEBUG, LEVEL_WARN, LEVEL_ERROR].includes(payload.level) ? payload.level : "info"; return logger[level](payload); } exports.printLog = printLog; function assert(isPassed, message) { if (!isPassed) { throw new types_1.HasuraActionError({ message, extensions: { code: types_1.VALIDATION_ERROR, }, }); } } function preValidateBody(payload) { assert(payload && typeof payload === "object" && !Array.isArray(payload), "empty or invalid body. Did you use `body-parser` json middleware?"); return payload; } function assertObject(input, message) { assert(input && typeof input === "object" && !Array.isArray(input), message); } function isValidDate(d) { if (!d) { return false; } switch (typeof d) { case "string": case "number": return !isNaN(new Date(d).getTime()); case "object": return d instanceof Date && !isNaN(new Date(d).getTime()); default: return false; } } function validateActionPayload(input) { var _a; const payload = preValidateBody(input); assert(!!((_a = payload.action) === null || _a === void 0 ? void 0 : _a.name), "empty hasura action name"); assert(!!(payload.session_variables && payload.session_variables[types_1.XHasuraRole]), "invalid session_variables; user role property exists by default"); assertObject(payload.input, "invalid action input"); return payload; } exports.validateActionPayload = validateActionPayload; function validateEventPayload(input) { var _a, _b, _c, _d; const payload = preValidateBody(input); assert(!!payload.id, "empty hasura event trigger id"); assert(!!((_a = payload.trigger) === null || _a === void 0 ? void 0 : _a.name), "empty hasura event trigger name"); assert(!!(((_b = payload.table) === null || _b === void 0 ? void 0 : _b.name) && ((_c = payload.table) === null || _c === void 0 ? void 0 : _c.schema)), "empty hasura event trigger table"); assert(isValidDate(payload.created_at), "created_at is invalid date"); assert(!!(((_d = payload.event) === null || _d === void 0 ? void 0 : _d.session_variables) && payload.event.session_variables[types_1.XHasuraRole]), "invalid session_variables; user role exists by default"); assertObject(payload.event.data, "invalid event data"); switch (payload.event.op) { case types_1.INSERT: assert(!payload.event.data.old, "old data of INSERT event must be null"); assertObject(payload.event.data.new, "new data of INSERT event must be an object"); break; case types_1.UPDATE: assertObject(payload.event.data.old, "old data of UPDATE event must be an object"); assertObject(payload.event.data.new, "new data of UPDATE event must be an object"); break; case types_1.DELETE: assertObject(payload.event.data.old, "old data of DELETE event must be an object"); assert(!payload.event.data.new, "new data of DELETE event must be null"); break; case types_1.MANUAL: assert(!payload.event.data.old, "old data of MANUAL event must be null"); assertObject(payload.event.data.new, "new data of MANUAL event must be an object"); break; default: assert(false, `invalid Hasura event trigger operation: ${payload.event.op}`); } return payload; } exports.validateEventPayload = validateEventPayload; function validateScheduledTriggerPayload(input) { const payload = preValidateBody(input); assert(!!payload.id, "empty hasura scheduled trigger id"); assert(!!payload.name, "empty hasura scheduled trigger name"); assert(isValidDate(payload.scheduled_time), `scheduled_time is invalid: ${payload.scheduled_time}`); return payload; } exports.validateScheduledTriggerPayload = validateScheduledTriggerPayload; //# sourceMappingURL=utils.js.map