UNPKG

fully-api

Version:

API framework for Fully Stacked, LLC REST-ful APIs

120 lines 5.11 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Models = void 0; const ErrorObj_1 = require("./ErrorObj"); const Q = require('q'); const fs_1 = __importDefault(require("fs")); const aws_sdk_1 = __importDefault(require("aws-sdk")); const path = require('path'); const rootDir = path.dirname(require.main.filename); // =============================================================================== // UTILITY FUNCTIONS // =============================================================================== class Models { constructor(s, file) { this.s3 = new aws_sdk_1.default.S3(); this.settings = s; this.file = file; } init(b, f, rs) { const deferred = Q.defer(); let md; this.bucket = b; this.file = f ? f : this.file; this.remoteSettings = rs; // if(this.file.substring(0,2) !== './') {this.file = './'+this.file;} if (this.remoteSettings == null || this.remoteSettings === false) { try { md = require(this.file); deferred.resolve(true); } catch (e) { const errorObj = new ErrorObj_1.ErrorObj(403, 'md0001', __filename, 'init', 'unauthorized', 'Failure to initialize models. Models.json not found at path' + this.file, null); deferred.reject(errorObj); } this.data = md; deferred.resolve(true); } else { this.s3.getObject({ Bucket: this.bucket, Key: this.file }, function (err, res) { if (!err) { const f = JSON.parse(res.Body.toString()); Models.prototype.data = f; deferred.resolve(true); } else { const errorObj = new ErrorObj_1.ErrorObj(500, 'm0002', __filename, 'init', 'error getting file from S3', 'S3 error', err); deferred.reject(errorObj); } }); } return deferred.promise; } reload() { const m = this; const deferred = Q.defer(); m.init(this.bucket, this.file, this.remoteSettings) .then(function (res) { deferred.resolve(res); }) .fail(function (err) { if (err !== undefined && err !== null && typeof (err.addToError) === 'function') { deferred.reject(err.addToError(__filename, 'reload')); } else { const errorObj = new ErrorObj_1.ErrorObj(500, 'm1002', __filename, 'reload', 'error reloading configs', 'Error reloading configs', err); deferred.reject(errorObj); } }); return deferred.promise; } save(doNetworkReload) { const deferred = Q.defer(); if (this.remoteSettings == null || this.remoteSettings === false) { const fswrite = Q.denodeify(fs_1.default.writeFile); fswrite(this.file, JSON.stringify(this.constructor.prototype.data, null, 4)) .then(function (write_res) { deferred.resolve(true); }) .fail(function (err) { const errorObj = new ErrorObj_1.ErrorObj(500, 'm0003', __filename, 'save', 'error with fswrite()', 'External Error', err); deferred.reject(errorObj); }); } else { this.s3.putObject({ Bucket: this.bucket, Key: this.file, Body: JSON.stringify(this.constructor.prototype.data, null, 4) }, function (err, save_res) { if (!err) { if (doNetworkReload === true) { this.settings.reloadNetwork() .then(function (reload_res) { deferred.resolve(true); }) .fail(function (err) { if (err !== undefined && err !== null && typeof (err.addToError) === 'function') { deferred.reject(err.addToError(__filename, 'save')); } else { const errorObj = new ErrorObj_1.ErrorObj(500, 'm1003', __filename, 'save', 'error reloading network', 'Error reloading network', err); deferred.reject(errorObj); } }); } else { deferred.resolve(true); } } else { const errorObj = new ErrorObj_1.ErrorObj(500, 'm0004', __filename, 'save', 'error writing models file to s3', 'S3 error', err); deferred.reject(errorObj); } }); } return deferred.promise; } ; } exports.Models = Models; //# sourceMappingURL=models.js.map