UNPKG

lemoncloud-engine-js

Version:

lemoncloud.io - Lemon Engine Modle of Node for Robust Micro-service based on DynamoDB + ElastiCache + Elasticsearch.

1 lines 4.34 kB
"use strict";var _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};exports=module.exports=function(e,t){if(!e)throw new Error("_$(global instance pool) is required!");e._;var f=e.U,h=e.log,p=(e.inf,e.err),y=f.NS("CHAT","yellow");function g(e){return v(404,e)}function b(e){return v(503,e)}function v(e,t){return{statusCode:e,headers:{"Access-Control-Allow-Origin":"*","Access-Control-Allow-Credentials":!0},body:JSON.stringify(t)}}function r(e,t,r){t.callbackWaitsForEmptyEventLoop=!1;var n=e.queryStringParameters||{},o=e.pathParameters||{},i=decodeURIComponent(o.type||""),a=decodeURIComponent(o.id||""),u=(a||"GET"!==e.httpMethod?e.httpMethod:"LIST")||"",s=decodeURIComponent(o.cmd||""),c=!u&&e.Records?"EVENT":{LIST:"LIST",GET:"GET",PUT:"PUT",POST:"POST",DELETE:"DELETE"}[u],d=e.body&&("string"==typeof e.body&&(e.body.startsWith("{")||e.body.startsWith("["))?JSON.parse(e.body):e.body)||e.Records&&{records:e.Records}||null;d||h(y,"#"+c+":"+s+" ("+u+", "+i+"/"+a+")...."),d&&h(y,"#"+c+":"+s+" ("+u+", "+i+"/"+a+").... body.len=",d?f.json(d).length:-1);var _={_id:a,_param:n,_body:d,_ctx:t},m=Promise.resolve(_),l=function(e,t,r){var n=null;switch(e){case"LIST":n=E;break;case"GET":n=T,"0"===t&&"self-test"===r&&(n=S);break;case"PUT":n=P;break;case"POST":n=w;break;case"DELETE":n=I}return n}(c,a,s);if(!l)return r(null,g({MODE:c}));try{m.then(function(e){var t=e._id,r=e._param,n=e._body,o=e._ctx;return l(t,r,n,o)}).then(function(e){return e&&"object"===(void 0===e?"undefined":_typeof(e))&&(e=f.cleanup(e)),r(null,function(e){return v(200,e)}(e)),!0}).catch(function(e){return p(y,"!!! callback@1 with err",e),0<=(e&&e.message||"").indexOf("404 NOT FOUND")?r(null,g(e.message)):r(null,b(e.message||e)),!1})}catch(e){r(e,b(e.message))}}r.do_list_chat=E,r.do_get_chat=T,r.do_put_chat=P,r.do_post_chat=w,r.do_delete_chat=I;var o="chat",i={id:"ID",parent:"Parent Chat ID (for reply)",group:"Group/Org ID",name:'Tag (should be "#")',nick:"Sender Nickname",message:"Short Message",description:"Long Message body",image:"Sender Avatar",state:"State",source:"Creator ID",target:"Target ID",created_at:"Created Time",updated_at:"Updated Time"},a=require("./_meta-api")(e),n=require("./user-api")(e),u=function(n){n=n||{};var e=Object.keys(i).reduce(function(e,t,r){return void 0!==n[t]&&(e[t]=n[t]),e},{});return void 0!==n._id&&(e._id=n._id),e},s=function(e){return e.type=o,e},c=function(e){return void 0!==e.name&&(e.name=(""+e.name).trim()),a.do_chain_on_update_parent(e)},d=function(e){return a.do_chain_on_update_group(e)},_=function(r){return void 0!==r.source?n.do_get_user(r.source).then(function(e){var t=(r.name||"#sms").trim();return r.name=t,r.source=e.id,r.nick=r.nick||e.nick||e.name,r.image=e.image,r}):r},m=function(t){return void 0!==t.target?n.do_get_user(t.target).then(function(e){return t.target=e.id,t}):t};function E(e,t,r,n){return h(y,"do_list_chat("+e+")...."),(t=t||{}).type=o,a.do_list_meta(e,t).then(function(e){var t=e.list||[];return e.list=t.map(u),e})}function T(e,t,r,n){return h(y,"do_get_chat("+e+")...."),(t=t||{}).type=o,a.do_get_meta(e,t).then(u)}function S(e,t,r,n){return h(y,"do_self_test_chat("+e+")...."),(t=t||{}).type=o,a.do_self_test_meta(e,t)}function P(t,e,r,n){h(y,"do_put_chat("+t+")....");var o=r||e;return o?(o._id=f.N(t,0),Promise.resolve(o).then(u).then(s).then(c).then(d).then(function(e){return a.do_put_meta(t,e)})):Promise.reject(new Error("node is required!"))}function w(t,e,r,n){if(h(y,"do_post_chat("+t+")...."),"0"!==t&&0!==t)return Promise.reject(new Error("invalid ID:"+t));var o=r||e;if(!o)return Promise.reject(new Error("node is required!"));t=f.N(t,0);return Promise.resolve(o).then(u).then(s).then(function(e){(e.source||"").trim();if(!e.source)return Promise.reject(new Error("source is required!"));(e.message||"").trim();return e.message?e:Promise.reject(new Error("message is required!"))}).then(_).then(m).then(c).then(d).then(function(e){return a.do_post_meta(t,e)}).then(u)}function I(t,e,r,n){h(y,"do_delete_chat("+t+")....");var o=r||e;return o?(t=f.N(t,0),Promise.resolve(o).then(u).then(s).then(function(e){return a.do_delete_meta(t,e)})):Promise.reject(new Error("node is required!"))}return r};