const glob = require("glob"); const path = require("path"); const fs = require("fs-extra"); const dayjs = require("dayjs"); const axios = require("axios"); const conf = require(`../../../conf.json`); const Checkjson = require(`./Checkjson.js`); const { promiseHooks } = require("v8"); const currentmod = "Odmdb"; const log = conf.api.activelog.includes(currentmod); /** * This manage Objects for indexing, searching, checking and act to CRUD * @objectPathName = objectpath/objectname * objectpath/objectname/conf.json * /idx/all_key1.json = {key1value:{object}} * lst_key1.json = [key1valA,key1val2,...] * key2_key1.json = {key2value:[key1value]} * all_key1_filtername = {key1value:{object}} * /itm/apxidvalue.json * in conf.json: * { * "name": "object name ex:'nations'", * "schema": "relativ schema from dirapi dirtown ex:'adminapi/schema/nations.json'"", * "lastupdateschema": 0, time stamp last schema update * "lastupdatedata":0 time stamp last itm update * } * * Specifics key in schema to apxtri: * apxid : the field value to use to store item apx * apxuniquekey : list of field that has to be unique you cannot have 2 itm with same key value * apxidx : list of index file /idx/ * { "name":"lst_fieldA", "keyval": "alias" }, => lst_fieldA.json = [fieldAvalue1,...] { "name":"all_fieldA", "keyval": "fieldA" }, => all_fieldA.json = if fieldA in apxuniquekey = {fieldAvalue1:{object}} not in apxuniquekey = {fieldAvalue1:[{object}]} { "name":"word_fieldA", "keyval": "fieldA", "objkey": ["fieldB"]}, => word_fieldA.json if fieldA in apxuniquekey = {fieldAvalue1:fieldBvalue,} if fieldA not in uniquekey = {fieldAvalue1: [fieldBv1,fieldBv2,]} { "name":"word_fieldA", "keyval": "fieldA", "objkey": ["fieldB","fieldC"]}, => word_fieldA.json if fieldA in apxuniquekey = {fieldAvalue1:{fieldB:val,fieldC:val},} if fieldA not in uniquekey = {fieldAvalue1: [{fieldB:val,fieldC:val},]} * apxaccessrights : list of profil with CRUD accesrights **/ const Odmdb = {}; /** *const Checkjson = require(`../../../adminapi/apxtri/models/Checkjson`); @api syncObject * @param {string} url to an existing object conf (/objectname/conf.json) * @param {timestamp} timestamp * 0 => rebuild local object from all_{idapx}.json * >0 => update itm and idx search by datetime * @param */ Odmdb.syncObject = () => {}; /** * @api createObject: create a space to host object * * @source {string} "new", url, * @schemapath {string} path to create or replace a schema ${schemaPath}/schema/ * @objectPath {string} path where object are store * @objectName {string} name of the object * @schema {object} the json schema for this object * @lgjson {object} the json file for a specific language * @lg {string} the 2 letters language * * Setup a new object localy => * source * * - from scratch => * Create * - from a synchronization * Download from source all_{apxid}.json * * */ Odmdb.createObject = ( source, schemaPath, objectPath, objectName, schema, lgjson, lg ) => { if (!fs.existsSync(schemaPath)) { return { status: 404, ref: "Odmdb", info: "pathnamedoesnotexist", moreinfo: { fullpath: schemaPath }, }; } if (!fs.existsSync(objectPath)) { return { status: 404, ref: "Odmdb", info: "pathnamedoesnotexist", moreinfo: { fullpath: objectPath }, }; } // store schema file if not empty undefined or {} if ( schema && !(Object.keys(schema).length === 0 && schema.constructor === Object) ) { fs.outputJSONSync(`${schemaPath}/schema/${objectName}.json`, schema, { spaces: 2, }); } if ( lgjson && lg && !(Object.keys(lgjson).length === 0 && lgjson.constructor === Object) ) { fs.outputJSONSync(`${schemaPath}/lg/${objectName}_${lg}.json`, lgjson, { spaces: 2, }); } //create environnement object with the new schema config if (!fs.existsSync(`${objectPath}/${objectName}`)) { fs.outputJsonSync( `${objectPath}/${objectName}/idx/confjson`, { schema: `${schemaPath}/schema/${objectName}.json` }, { spaces: 2 } ); } return { status: 200 }; }; /** * Update an object * @param {string} objectPathname * @param {object} meta update request * lg: * lgobj: object to store in /lg/objectname_lg.json * schema: an update schema * @return {status, ref:"Odmdb", msg:"", data} * * Create a tmp object env and check existing object to identify any issues * If all is fine then apply change by replacing */ Odmdb.updateObject = (objectPathname, meta) => {}; /** * Get a schema from objectPathname * * todo only local schema => plan a sync each 10minutes * @schemaPath local path adminapi/schema/objectName.json or /tribename/schema/objectName * @validschema boolean if necessary to check schema or not mainly use when change schema; * @lg language you want to get schema * @return {status:200,data:{conf:"schemaconf",schema:"schemacontent"} } */ Odmdb.Schema = (objectPathname, validschema, lg = "en") => { const replacelg = (data) => { // data.en version schema de base, data.fr version schema traduite Object.keys(data.lg).forEach((k) => { console.log(k); if (data.lg[k].title) data.en[k].title = data.lg[k].title; if (data.lg[k].description) data.en[k].description = data.lg[k].description; if (data.lg.properties) { console.log("properties"); console.log(data.en.properties); console.log(data.lg.properties); const res = replacelg({ en: data.en.properties, lg: data.lg.properties, }); data.lg.properties = res.lg; data.en.properties = res.en; } }); return data; }; const getschemalg = (schemaPath, lg) => { if (schemaPath.slice(-5) != ".json") schemaPath += ".json"; if (schemaPath.substring(0, 4) == "http") { // lance requete http pour recuperer le schema avec un await axios } else { schemaPath = `../../${schemaPath}`; if (log) console.log( currentmod, "resolve path schemaPath:", path.resolve(schemaPath) ); if (!fs.existsSync(schemaPath)) { return {}; } else { let schemalg = fs.readJsonSync(schemaPath); if (lg != "en") { let lgtrans = {}; try { lgtrans = fs.readJsonSync( schemaPath .replace("/schema/", "/schema/lg/") .replace(".json", `_${lg}.json`) ); const res = replacelg({ en: schemalg, lg: lgtrans }); //console.log(res.en.title,res.lg.title) schemalg = res.en; } catch (err) { // console.log('Err',err) // no translation file deliver en by default } } return schemalg; } } }; const convoptionstoenum = (propertie, lg) => { if (!propertie.options) return propertie; if (!propertie.options["$ref"]) { propertie.msg = "missingref"; return propertie; } let optionsfile; let optionstype; if (propertie.options["$ref"].includes("/options/")) { propertie.comment = `options:${propertie.options["$ref"]}}`; optionstype = "options"; optionsfile = path.resolve( `../../${propertie.options["$ref"]}_${lg}.json` ); } if (propertie.options["$ref"].includes("/idx/")) { (propertie.comment = `itms:${propertie.options["$ref"]}}`), (optionstype = "idx"); optionsfile = path.resolve(`../../${propertie.options["$ref"]}.json`); } if (log) console.log(currentmod, "Lien vers options:", optionsfile); if (!fs.existsSync(optionsfile)) { propertie.msg = "missingref"; return propertie; } else { delete propertie.options; if (optionstype == "options") { propertie.enum = fs.readJSONSync(optionsfile).lst_idx; } if (optionstype == "idx") { propertie.enum = fs.readJSONSync(optionsfile); } } return propertie; }; if (log) console.log(currentmod, `${objectPathname}/conf.json`); const res = { status: 200, ref: "Odmdb", msg: "getschema", data: {}, }; if (fs.existsSync(`${objectPathname}/conf.json`)) { res.data.conf = fs.readJsonSync(`${objectPathname}/conf.json`); res.data.schema = getschemalg(res.data.conf.schema, lg); } else { res.data.conf = {}; } if (!res.data.schema || Object.keys(res.data.schema).length == 0) { return { status: 404, ref: "Odmdb", msg: "schemanotfound", data: { objectPathname: path.resolve(objectPathname), schema: {} }, }; } // get $ref from $def if (res.data.schema["$defs"]) { Object.keys(res.data.schema["$defs"]).forEach((ss) => { Object.keys(res.data.schema["$defs"][ss].properties).forEach((pp) => { res.data.schema["$defs"][ss].properties[pp] = convoptionstoenum( res.data.schema["$defs"][ss].properties[pp], lg ); }); }); } Object.keys(res.data.schema.properties).forEach((p) => { if ( res.data.schema.properties[p].type == "object" && res.data.schema.properties[p]["$ref"] ) { let subschema; const localdef = res.data.schema.properties[p]["$ref"].includes("#/"); if ( localdef && !( res.data.schema["$defs"] && res.data.schema["$defs"][propertie["$ref"]] ) ) { res.status = 404; res.msg = "missinglocalref"; res.data.missingref = propertie; return res; } if (localdef) { res.data.schema.properties[p] = res.data.schema["$defs"][res.data.schema.properties[p]["$ref"]]; } else { subschema = Odmdb.Schema( path.resolve(res.data.schema.properties[p]["$ref"]), validschema, lg ); if (subschema.status == 200) { res.data.schema.properties[p] = subschema.data.schema; } else { subschema.data.originschemaproperty = p; return subschema; } } } if (res.data.schema.properties[p].options) { //remplace options par enum:[] res.data.schema.properties[p] = convoptionstoenum( res.data.schema.properties[p], lg ); } }); if (!res.data.schema.apxid) { return { status: 406, ref: "Odmdb", msg: "missingprimarykey", data: {}, }; } if (res.data.schema.apxidx) { //add apxidx to apxuniquekey in case not if (!res.data.schema.apxuniquekey) { return { status: 406, ref: "Odmdb", msg: "missingapxuniquekey", data: {}, }; } if (!res.data.schema.apxuniquekey.includes(res.data.schema.apxid)) { res.data.schema.apxuniquekey.push(res.data.schema.apxid); } //`../../${req.session.header.xtribe}/objects/persons` res.data.schema.apxidx.forEach((idx) => { if ( idx.objkey && !res.data.schema.apxuniquekey.includes(idx.keyval) && !idx.objkey.includes(res.data.schema.apxid) ) { return { status: 406, ref: "Odmdb", msg: "unconsistencyapxidx", data: { name: idx.name, keyval: idx.keyval, objkey: idx.objkey, apxid: res.data.schema.apxid, }, }; } }); } if (validschema || 1 == 1) { // return {status:200, ref, msg} or {status!:200,multimsg:[{ref,msg;data}]} const check = Checkjson.schema.validation(res.data.schema); if (check.status != 200) { res.multimsg = check.multimsg; res.status = check.status; } } return res; }; Odmdb.search = (objectPathname, objsearch, role) => { /* if (fields exist): return data:{id:{field:value}]} else: return data:[id] exemple: objsearch= { apxid:['toto','titi'],fields:['firstname'] } return data:{toto:{firstname:"Paul"},titi:"fistname:"Jacques"} ADD HERE OTHER OPTION USING IDX FOR PERFORMANCE example: search exact match hill in townId heavy search={txt:"hill",algo:"match",fieldstring:"toxnId"} light search={txt:"hill", algo:"match", indexfilter:{"key":"townId","value":[]}} light search={txt:"hill", algo:"match", indexfilter:{"key":"nationId","value":"ants"}} */ const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; //console.log(getschema.data); const apxid = getschema.data.schema.apxid; let subsearch = objsearch.apxid ? objsearch.apxid : fs.readJSONSync(`${objectPathname}/idx/lst_${apxid}.json`); // ADD HERE OTHER FILTRATION SEARCH depending of question if (objsearch.condition) { // remove or add in subsearch } if (objsearch.fields) { const resultat = {}; //console.log(getschema.data.schema.apxaccessrights); //console.log(role); const accessright = Odmdb.accessright( getschema.data.schema.apxaccessrights, role ); //console.log(accessright); if (objsearch.fields == "all") { //console.log(getschema.data) objsearch.fields = Object.keys(getschema.data.schema.properties); } const ifields = {}; subsearch.forEach((i) => { const ifields = {}; if (fs.existsSync(`${objectPathname}/itm/${i}.json`)) { const itm = fs.readJSONSync(`${objectPathname}/itm/${i}.json`); if (itm.owner && itm.owner == role.xalias) { role.xprofils.push("owner"); } else { role.xprofils = role.xprofils.filter((e) => e !== "owner"); } objsearch.fields.forEach((f) => { if (accessright.R.length == 0 || accessright.R.includes(f)) { ifields[f] = itm[f]; } else { //ifields[f] = "unauthorized"; } }); } else { ifields.notfound = true; } resultat[i] = ifields; }); return { status: 200, ref: "Odmdb", msg: "resultsearchlist", data: resultat, }; } else { return { status: 200, ref: "Odmdb", msg: "resultsearchlist", data: [subsearch], }; } }; Odmdb.r = (objectPathname, apxid, role) => { const itmf = `${objectPathname}/itm/${apxid}.json`; if (!fs.existsSync(itmf)) { return { status: 404, ref: "Odmdb", msg: "persondoesnotexist", data: { person: apxid }, }; } const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; const itm = fs.readJsonSync(itmf); if (itm.owner && itm.owner == role.xalias) { role.xprofils.push("owner"); } const accessright = Odmdb.accessright( getschema.data.schema.apxaccessrights, role ); if (!accessright.R) { return { status: 403, ref: "Odmdb", msg: "profilnotallow", data: { person: apxid }, }; } const data = {}; accessright.R.forEach((p) => { data[p] = itm[p]; }); return { status: 200, ref: "Odmdb", msg: "profilallow", data }; }; /** * To get an array of item (itm) per primarykey with a list of field * Object are store in objectPath/objectName/conf.json contain * * @objectPathname where object are store (where /object/conf.json indicate where the schema is) * @uuidprimarykeyList list of uuid requested * @role {xalias,xprofiles} allow to get accessright come from header * @propertiesfilter (optionnal) key to return for each object (if undefined then return all) * @Return {status:200; data:{uuid:{data filter by @propertiesfilter},uuid:"notfound"}} ASUP doit ĂȘtre gerer au niveau des view des index */ Odmdb.ASUPreads = (objectPathname, apxidlist, role, propertiesfilter) => { const res = { status: 200, data: {} }; const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; // Test if readable at least if owner role.xprofils.push("owner"); const accessright = (Odmdb.accessright = (getschema.data.schema.apxaccessright, role.xprofils)); if (!accessright.R) { return { status: 403, ref: "Odmdb", msg: "profilnotallow", data: { crud: "R", accessright }, }; } apxidlist.forEach((id) => { if (fs.existsSync(`${objectPathname}/itm/${id}.json`)) { const objectdata = fs.readJsonSync(`${objectPathname}/itm/${id}.json`); if (objectdata.owner && objectdata.owner == role.xalias) { if (!role.xprofils.includes("owner")) role.xprofils.push("owner"); } else { if (role.xprofils.includes("owner")) role.xprofils = role.xprofils.filter((e) => e !== "owner"); } const accessright = Odmdb.accessright( getschema.data.schema.apxaccessright, role ); if (!accessright.R) { res.data[id] = "forbiden"; } else { let newpropertiesfilter = Object.keys(objectdata); if (accessright.R.length > 0) { const setaccess = new Set(accessright.R); if (!propertiesfilter) propertiesfilter = Object.keys(objectdata); newpropertiesfilter = propertiesfilter.filter((f) => setaccess.has(f) ); } const objinfo = {}; newpropertiesfilter.forEach((k) => { if (objectdata[k]) objinfo[k] = objectdata[k]; }); res.data[id] = objinfo; } } else { res.data[id] = "notfound"; } }); return res; }; /** * Convert profils in accessright * @param {*} apxaccessright from schema object {profilname:{R}} * @param {*} role {xprofils,xalias} accessible after isAuthenticated * @returns access right to C create if present, to read (properties list or all if empty), to Update properties list or all if empty, D elete * example: {"C":[],"R":[properties list],"U":[properties ist],"D":[]} */ Odmdb.accessright = (apxaccessrights, role) => { //if (log) console.log(currentmod,"apxaccessrights",apxaccessrights) //if (log) console.log(currentmod,"role",role) const accessright = {}; console.log(); role.xprofils.forEach((p) => { if (apxaccessrights[p]) { Object.keys(apxaccessrights[p]).forEach((act) => { if (!accessright[act]) { accessright[act] = apxaccessrights[p][act]; } else { if (accessright[act].length != 0) { //case where [] that mean all accessright on any properties accessright[act] = [ ...new Set([...accessright[act], ...apxaccessrights[p][act]]), ]; } } //if (log) console.log(currentmod,act,accessright[act]) }); } }); return accessright; }; /** * CUD a data itm into objectPathname if checkJson is valid * and update idx * idx is upto date for unique properties but not for list * @param {string} objectpathname folder name where object are stored * @param {object} itm an object respecting the checkJson schema in objectPathname/conf.json * @param {string} crud: C reate U pdate D elete * @param {array} role {xprofils,xalias} xprofils list of profils like anonymous,pagans, person owner is deuce if object properties owner is alias * */ Odmdb.cud = (objectPathname, crud, itm, role, runindex = true) => { const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; if (!itm[getschema.data.schema.apxid]) { return { status: 406, ref: "Odmdb", msg: "apxidmissing", data: { missingkey: getschema.data.schema.apxid }, }; } fs.ensureDirSync(`${objectPathname}/itm/`); fs.ensureDirSync(`${objectPathname}/idx/`); const existid = fs.existsSync( `${objectPathname}/itm/${itm[getschema.data.schema.apxid]}.json` ); if (log) console.log(currentmod, "Pass schema itm existid = ", existid); /*const pathindex = `${objectPathname}/idx/lst_${getschema.data.schema.apxid}.json`; if (!fs.existsSync(pathindex)) { fs.outputJSONSync(pathindex, []); fs.ensureDirSync(`${objectPathname}/itm/`); } const existid = fs .readJSONSync(pathindex) .includes(itm[getschema.data.schema.apxid]); */ if (existid && crud == "C") { return { status: 406, ref: "Odmdb", msg: "alreadyexist", data: { objectname: path.basename(objectPathname), key: getschema.data.schema.apxid, val: itm[getschema.data.schema.apxid], }, }; } if (!existid && ["U", "D"].includes(crud)) { return { status: 404, ref: "Odmdb", msg: "doesnotexist", data: { objectname: path.basename(objectPathname), key: getschema.data.schema.apxid, val: itm[getschema.data.schema.apxid], }, }; } const feedbackinfo = {}; const itmold = existid ? fs.readJSONSync( `${objectPathname}/itm/${itm[getschema.data.schema.apxid]}.json` ) : {}; if (existid && itmold.owner && itmold.owner == role.xalias) { role.xprofils.push("owner"); } if (!existid && crud == "C" && !itm.owner) { // set owner cause this is a Create itm.owner = role.xalias; role.xprofils.push("owner"); } //get accessright {C:[],R:[],U:[],D:[]} if exist means authorize, if array contain properties (for R and U) right is only allowed on properties const accessright = Odmdb.accessright( getschema.data.schema.apxaccessrights, role ); if (log) console.log(currentmod, "Accessright to: ", accessright); if (getschema.data.schema.apxaccessrights.contextrules) { //Need to check context to validate accessright //require('../../') } if ( (crud == "C" && !accessright.C) || (crud == "D" && !accessright.D) || (crud == "U" && !accessright.U) ) { if (log) console.log(currentmod, "Forbidden accessright:", accessright); return { status: 403, ref: "Odmdb", msg: "profilnotallow", data: { crud, accessright }, }; } //delete or save if (crud == "D") { itmold["dt_delete"] = dayjs().toISOString(); fs.outputJSONSync( `${objectPathname}/delitm/${itmold[getschema.data.schema.apxid]}.json`, itmold ); fs.rmSync( `${objectPathname}/itm/${itmold[getschema.data.schema.apxid]}.json` ); } else { // if Create Update erase old version let itmtostore = itm; if (crud == "U" && accessright.U.length > 0) { itmtostore = itmold; const keynotallow = Object.keys(itm).filter( (el) => !accessright.U.includes(el) ); if (keynotallow.length > 0) { feedbackinfo.keynotallow = keynotallow; } accessright.U.forEach(async (p) => { itmtostore[p] = itm[p]; }); itmtostore.dt_update = dayjs().toISOString(); } Object.keys(itmtostore).forEach((k) => { //Manage base64 case image to convert ans store in webp if (k.includes("imgbase64_") && itmtostore[k] != "") { fs.ensureDirSync(`${objectPathname}/img/`); const imgb64 = itmtostore[k].replace(/^data:image\/(png|png|gif|bmp|jpg|jpeg);base64,/,"");//.replace(/\+/g," "); const extension = itmtostore[k].split(";base64,")[0].split("/")[1]; const newk = k.split("_").slice(1).join("_"); const filenameimg = `/img/${ itmtostore[getschema.data.schema.apxid] }_${newk}.${extension}`; if (!getschema.data.schema.properties[newk]) { if (log) console.log( currentmod, " Check your schema it miss a propertie because imgbase64_blabla must have a blabla propertie to host the pathfile image" ); } else { const objectname = objectPathname.split("/").slice(-1)[0]; itmtostore[newk] = `/objectimg/${objectname}${filenameimg}`; //const webp = require("webp-converter"); //const buf = Buffer.from(itmtostore[k], 'base64'); //const imgwebp = await webp.bufferToWebp(buf); //@TODO use sharp to resize img with attribut sizeHW in propertie fs.writeFileSync(`${objectPathname}/${filenameimg}`, imgb64,{encoding:"base64"}); itmtostore[k] = ""; } } }); if (crud == "C") itmtostore.dt_create = dayjs().toISOString(); // check consistency of datatostore const chkdata = Checkjson.schema.data( getschema.data.schema, itmtostore, false ); if (chkdata.status != 200) { if (log) console.log(currentmod, "Unconsistency data", chkdata); return chkdata; } if (log) console.log(currentmod, "Data compliance with schema"); if (!getschema.data.schema.apxuniquekey) getschema.data.schema.apxuniquekey = []; if (log) console.log( currentmod, `${objectPathname}/itm/${chkdata.data.apxid}.json` ); if (log) console.log(currentmod, chkdata.data.itm); fs.outputJSONSync( `${objectPathname}/itm/${chkdata.data.apxid}.json`, chkdata.data.itm ); } //if (log) console.log(currentmod,"getschema", getschema); //rebuild index if requested if (log) console.log(currentmod, "runidx", runindex); if (runindex) Odmdb.runidx(objectPathname, getschema.data.schema); getschema.data.conf.lastupdatedata = dayjs().toISOString(); fs.outputJSONSync(`${objectPathname}/conf.json`, getschema.data.conf); return { status: 200, ref: "Odmdb", msg: "cudsuccessfull", data: feedbackinfo, }; }; /** * apxidx:[list of index file * { name: string, // filename in /idx/name.json * type: array (list of unique value found in keyval), example: [val1, val2, val3,....] eventualy filter * view (only unique key and object with objkey eventually filter by filter ) example: {idalias:{itm}} * distribution (=> {val of keyval:[apxid itm value]} with ) * keyval:string, // a propertie of type string or array * objkeys:[] and array of properties if empty [] means all properties, if 1 element => an array of this properties * filter : an eval function base on itm data (itm.key) that return true (return data item) or false (ignore item) * */ Odmdb.runidx = (objectPathname, schema) => { if (log) console.log(currentmod, `idx for ${objectPathname}`); if (!schema || !schema.apxid) { const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; schema = getschema.data.schema; } const ventil = {}; schema.apxidx.forEach((id) => { ventil[id.name] = id; if (id.keyval.includes(".")) { // Means keyval is an object that can be only string for an idx ventil[id.name].isobject = true; ventil[id.name].isunique = false; ventil[id.name].nbobjkey = 0; ventil[id.name].keyvaltype = "string"; ventil[id.name].filter = id.filter ? id.filter.replace(/;/g, "") : ""; // check integrity of string ventil[id.name].data = {}; } else { ventil[id.name].isunique = schema.apxuniquekey.includes(id.keyval); ventil[id.name].nbobjkey = id.objkey ? id.objkey.length : 0; ventil[id.name].keyvaltype = schema.properties[id.keyval].type; ventil[id.name].filter = id.filter ? id.filter.replace(/;/g, "") : ""; // check integrity of string ventil[id.name].data = ventil[id.name].type == "array" ? [] : {}; } }); glob.sync(`${objectPathname}/itm/*.json`).forEach((i) => { const itm = fs.readJSONSync(i); Object.keys(ventil).forEach((n) => { let keep = true; if (ventil[n].filter != "") { try { keep = eval(ventil[n].filter); } catch (err) { keep = false; } } if (keep && ventil[n].type == "array" && itm[ventil[n].keyval]) { if (ventil[n].keyvaltype == "array") { itm[ventil[n].keyval].forEach((v) => { if (!ventil[n].data.includes(v)) ventil[n].data.push(v); }); } else { if (!ventil[n].data.includes(itm[ventil[n].keyval])) ventil[n].data.push(itm[ventil[n].keyval]); } } if ( keep && ventil[n].type == "view" && ventil[n].isunique && itm[ventil[n].keyval] ) { if (ventil[n].nbobjkey == 0) ventil[n].data[itm[ventil[n].keyval]] = itm; if (ventil[n].nbobjkey == 1) ventil[n].data[itm[ventil[n].keyval]] = itm[ventil[n].objkey[0]]; if (ventil[n].nbobjkey > 1) { const objdata = {}; Object.keys(itm).forEach((k) => { if (ventil[n].objkey.includes(k)) objdata[k] = itm[k]; }); ventil[n].data[itm[ventil[n].keyval]] = objdata; } } if (keep && ventil[n].type == "distribution" && itm[ventil[n].keyval]) { const listval = ventil[n].keyvaltype == "string" ? [itm[ventil[n].keyval]] : itm[ventil[n].keyval]; // itm[ventil[n].keyval] is an array listval.forEach((val) => { if (!ventil[n].data[val]) ventil[n].data[val] = []; ventil[n].data[val].push(itm[schema.apxid]); }); } if ( keep && ventil[n].type == "distribution" && ventil[n].isobject && itm[ventil[n].keyval.split(".")[0]] ) { let itmval = JSON.parse(JSON.stringify(itm)); if (log) console.log(currentmod, ventil[n].keyval); if (log) console.log(currentmod, itmval); ventil[n].keyval .split(".") .forEach((i) => (itmval = itmval[i] ? itmval[i] : null)); if (itmval) { if (!ventil[n].data[itmval]) ventil[n].data[itmval] = []; ventil[n].data[itmval].push(itm[schema.apxid]); } } }); }); Object.keys(ventil).forEach((n) => { //if (log) console.log(currentmod,`${objectPathname}/idx/${ventil[n].name}.json`) fs.outputJSON( `${objectPathname}/idx/${ventil[n].name}.json`, ventil[n].data ); }); }; /** * create/update idx from itm(s) * * @param {string} objectPathname * @param {object} itm item to Create or to Update or {} if crud == I or crud == D * @param {object} itmold (current item) if crud == U or D to get previous itm before change or {} if crud==I or C * @param {letter} crud CUDI C add, U update, D delete I reindex * @param {array} idx if specific request to rebuild list of idx only if [] then use schema one * @param {object} schema if empty it use schema from Odmdb.Schema().data.schema * * example create alias 12 name fred: * Odmdb.idxfromitm('../../../ndda/persons',"C",{alias:'12',name:"fred"},{},[], {person schema}) * example update alias 12 in name freddy: * Odmdb.idxfromitm('../../../ndda/persons',"U",{alias:'12',name:"freddy"},{alias:'12',name:"fred"},[], {person schema}) * example delete alias 12: * Odmdb.idxfromitm('../../../ndda/persons',"D",{},{alias:'12',name:"fred"},[], {person schema}) * example to rebuild all index from scratch * Odmdb.idxfromitm('../../../ndda/persons',"I",{},{},[], {person schema}) * example to rebuild only publickey_alias index from scratch * Odmdb.idxfromitm('../../../ndda/pagans',"I",{},{},[{ name:"publickey_alias",keyval:"publickey",objkey:["alias"]}], {pagans schema}) * */ Odmdb.ASUPidxfromitm = ( objectPathname, crud, itm, itmold, idxs = [], schema ) => { if (log) console.log(currentmod, `idxfromitem for ${objectPathname} action:${crud}`); if (!schema || !schema.apxid) { const getschema = Odmdb.Schema(objectPathname, true); if (getschema.status != 200) return getschema; schema = getschema.data.schema; } if (log) console.log(currentmod, schema.apxuniquekey); const itms = crud == "I" ? glob.sync(`${objectPathname}/itm/*.json`) : [itm]; if (log) console.log(currentmod, itms); if (crud == "I") { //reinit all idx idxs.forEach((idx) => { fs.remove(`${objectPathname}/idx/${idx.name}.json`); }); } let idxtoreindex = []; //store index that has to be reprocessto get full context idxs = idxs.length == 0 ? schema.apxidx : idxs; // get all index if none itms.forEach((i) => { if (crud == "I") { itm = fs.readJSONSync(i); } //if (log) console.log(currentmod,itm); idxs.forEach((idx) => { const keyvalisunique = schema.apxuniquekey.includes(idx.keyval); // check if keyval is unique mean store as an object (or string) else store as an array const idxsrc = `${objectPathname}/idx/${idx.name}.json`; const idxinit = idx.name.substring(0, 4) == "lst_" ? [] : {}; // select type of idx (array or object) let idxfile = !fs.existsSync(idxsrc) ? idxinit : fs.readJSONSync(idxsrc); if (idx.name.substring(0, 4) == "lst_") { if (["D", "U"].includes(crud)) { if (keyvalisunique) { idxfile = idxfile.filter((e) => e !== itmold[idx.keyval]); } else { idxtoreindex.push(idx); //@todo } } if (log) console.log(currentmod, idx.keyval); if (log) console.log(currentmod, itm[idx.keyval]); if ( ["C", "U", "I"].includes(crud) && !idxfile.includes(itm[idx.keyval]) ) { idxfile.push(itm[idx.keyval]); } } else { if (!idx.objkey) { //mean all properties idx.objkey = Object.keys(schema.properties); } if (keyvalisunique && idx.objkey.length == 1) { if (["D", "U"].includes(crud)) { delete idxfile[itmold[idx.keyval]]; } else { idxfile[itm[idx.keyval]] = itm[idx.objkey[0]]; } } if (keyvalisunique && idx.objkey.length > 1) { if (["D", "U"].includes(crud)) { delete idxfile[itmold[idx.keyval]]; } else { const itmfilter = {}; idx.objkey.forEach((i) => { if (itm[i]) itmfilter[i] = itm[i]; }); idxfile[itm[idx.keyval]] = itmfilter; } } if (!keyvalisunique && idx.objkey.length == 1) { if ( ["D", "U"].includes(crud) && idxfile[itmold[idx.keyval]].IndexOf(itmold[idx.objkey[0]]) > -1 ) { // U because need to remove previous value before adding it idxfile[itmold[idx.keyval]].splice( idxfile[itmold[idx.keyval]].IndexOf(itmold[idx.objkey[0]]), 1 ); } if (["C", "U", "I"].includes(crud)) { if (!idxfile[itm[idx.keyval]]) idxfile[itm[idx.keyval]] = []; if (!idxfile[itm[idx.keyval]].includes(itm[idx.objkey[0]])) { idxfile[itm[idx.keyval]].push(itm[idx.objkey[0]]); } } } if (!keyvalisunique && idx.objkey.length > 1) { if (["D", "U"].includes(crud) && idxfile[itmold[idx.keyval]]) { // U because need to remove previous value before adding it let arrayofit = []; idxfile[itmold[idx.keyval]].forEach((it) => { if (it[schema.apxid] != itm[schema.apxid]) arrayofit.push(it); }); idxfile[itmold[idx.keyval]] = arrayofit; } if (["C", "U", "I"].includes(crud)) { const itmfilter = {}; idx.objkey.forEach((i) => { if (itm[i]) itmfilter[i] = itm[i]; }); if (!idxfile[itm[idx.keyval]]) idxfile[itm[idx.keyval]] = []; idxfile[itm[idx.keyval]].push(itmfilter); } } } fs.outputJSONSync(idxsrc, idxfile); }); }); if (crud != "I") { //update lastupdatedata to inform something change const confschema = fs.readJSONSync(`${objectPathname}/conf.json`); confschema.lastupdatedata = dayjs().toISOString(); fs.outputJSONSync(`${objectPathname}/conf.json`, confschema); } return { status: 200, ref: "Odmdb", msg: "successreindex", data: {} }; }; Odmdb.updatefromidxall = (objectname, idxname, data, lastupdate) => { /** * Update all itm of objectname from index idx/idxname with data * if itm exist in local and not in data then /ojectname/conf.json.lastupdate = now * not then /ojectname/conf.json.lastupdate = lastupdate * this way mean next time server A want to refresh from B its lastupdate < than on A */ let conflastupdate = 0; let localidx = {}; if (fs.existsSync(`../nationchains/${objectname}/idx/${idxname}`)) { localidx = fs.readJsonSync(`../nationchains/${objectname}/idx/${idxname}`); } Object.keys(data).forEach((id) => { if (localidx[id]) { if ( localidx[id].dt_update && data[id].dt_update && localidx[id].dt_update > data[id].dt_update ) { // means local information is fresher than the one in data for replacement // .toISIString ex: 2019-01-25T02:00:00.000Z' conflastupdate = dayjs().toISOString(); } else { // replace itm with data localidx[id] = data[id]; fs.outputJsonSync( `../nationchains/${objectname}/itm/${id}.json`, data[id] ); } } else { // add itm localidx[id] = data[id]; fs.outputJsonSync( `../nationchains/${objectname}/itm/${id}.json`, data[id] ); } }); //check if it miss id in fresher update means conf.lastupdate will be now to indicate Object.keys(localidx).forEach((id) => { if (!data[id]) { conflastupdate = dayjs().toISOString(); } }); // update the object files if (conflastupdate == 0) conflastupdate = lastupdate; fs.outputJSONSync(`../nationchains/${objectname}/idx/${idxname}`, localidx); const objconf = fs.readJsonSync(`../nationchains/${objectname}/conf.json`); objconf.lastupdate = conflastupdate; fs.outputJsonSync(`../nationchains/${objectname}/conf.json`, objconf); return { status: 200, ref: "Odmdb.js", info: "Successfullupdate", data: { objectname, idxname, lastupdate }, }; }; const imgbase64test="iVBORw0KGgoAAAANSUhEUgAABAAAAAQACAIAAADwf7zUAAAgAElEQVR4nOzBAQEAAACCIP+vbkhAAADAiWoAAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAAeFENAAD//+zDAQ0AAADCoPdPbRBhQwAA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DQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA///swwENAAAAwqD3T20QYUMAAHhRDQAA//8DAPN8JmZgsrlSAAAAAElFTkSuQmCC" module.exports = Odmdb;