UNPKG

9.04 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/Bot.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEAYO,iBAAoB,IAApB;AAAA;AAAA;AAAA;AAAA;AAAA,6CACE,sBAAY;AAAA,qBAAW,WAAW;AAAA,uBAAM,SAAN;AAAA,eAAX,EAA4B,IAA5B,CAAX;AAAA,aAAZ,CADF;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,G;kBAAe,I;;;;;AAZtB;;;;AACA;;;;AACA;;AACA;;;;AACA;;;;AACA;;;;AACA;;;;;;QAEQ,Q;QAAU,O;;;AAElB,IAAM,YAAY,EAAlB;;IAMM,G;;;AAMJ,eAAY,KAAZ,EAAmB,YAAnB,EAAgD;AAAA,QAAf,KAAe,yDAAP,KAAO;AAAA;;AAAA;;AAG9C,UAAK,MAAL,GAAc,KAAd;AACA,UAAK,MAAL,GAAc,KAAd;AACA,UAAK,aAAL,GAAqB,YAArB;AAL8C;AAM/C;;;;;sFAEU,E,EAAI,O;YAaL,I,EAEI,G;;;;;AAdZ,oBAAI,KAAK,MAAT,EAAiB;AACf,0BAAQ,GAAR,CAAY,EAAC,WAAW,EAAC,IAAI,EAAL,EAAZ,EAAsB,SAAS,UAAU,QAAQ,MAAR,EAAV,GAA6B,OAA5D,EAAZ;AACD;;;;uBAGO,qBAAM,6CAAN,EAAqD;AACzD,0BAAQ,MADiD;AAEzD,yBAAO,EAAC,cAAc,KAAK,MAApB,EAFkD;AAGzD,wBAAM,EAAC,WAAW,EAAC,IAAI,EAAL,EAAZ,EAAsB,gBAAtB;AAHmD,iBAArD,C;;;;;;;;;;qBAMF,aAAE,I;;;;;AACA,oB,GAAO,aAAE,I;;AACb,oBAAI;AACI,qBADJ,GACU,KAAK,KAAL,CAAW,aAAE,IAAb,EAAmB,KAD7B;;AAEF,0BAAU,IAAI,IAAJ,IAAY,SAAtB,YAAoC,IAAI,OAAJ,IAAe,YAAnD;AACD,iBAHD,CAGE,OAAO,EAAP,EAAW;;AAEZ;;sBAEK,MAAM,IAAN,C;;;;;;;;;;;;;;;;;;;;;;sFAOI,E;YAAI,M,yDAAS,kC;YAAoC,K,yDAAQ,K;;YACjE,G,EACF,K,QAMK,I;;;;;;AAPH,mB,GAAM,KAAK,M;AACb,qB;;sBAEA,SAAS,UAAU,GAAV,C;;;;;AACX,wBAAQ,UAAU,GAAV,CAAR;AACA,sBAAM,SAAN,GAAkB,IAAlB;;;;;;uBAEqB,0DAAyC,EAAzC,EAA+C;AAClE,yBAAO,EAAC,cAAc,KAAK,MAApB,EAA4B,cAA5B,EAD2D,EACtB,MAAM;AADgB,iBAA/C,C;;;;AAAd,oB,QAAA,I;;;AAIP,wBAAQ,IAAR;AACA,sBAAM,SAAN,GAAkB,KAAlB;;AAEA,oBAAI,KAAJ,EAAW;AACT,4BAAU,GAAV,IAAiB,KAAjB;AACD;;;kDAGI,K;;;;;;;;;;;;;;;;;;;sFAGW,K;;;YACZ,I,EACA,O,EAaA,Q,EA0CA,W,EAeE,Q;;;;;AAvEF,oB,GAAO,KAAK,KAAL,CAAW,yBAAe,KAAf,CAAX,C;AACP,uB,GAAU,KAAK,KAAL,CAAW,CAAX,EAAc,SAAd,CAAwB,CAAxB,C;;AAChB,sCAAc,OAAd,EAAuB,QAAQ,OAA/B;AACA,uBAAO,QAAQ,OAAf;;AAEA,wBAAQ,GAAR,GAAc,KAAd;;AAEA,wBAAQ,MAAR,CAAe,KAAf;AAAA,gFAAuB,kBAAO,MAAP,EAAe,KAAf;AAAA,wBACf,KADe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCACD,OAAK,SAAL,CAAe,QAAQ,MAAR,CAAe,EAA9B,EAAkC,MAAlC,EAA0C,KAA1C,CADC;;AAAA;AACf,iCADe;;AAErB,kDAAc,QAAQ,MAAtB,EAA8B,KAA9B;AAFqB,8DAGd,QAAQ,MAHM;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAvB;AAAA;AAAA;AAAA;AAAA;;qBAMI,QAAQ,Q;;;;;AACN,wB,GAAW,E;;;AAEf,oBAAI;AACF,6BAAW,KAAK,KAAL,CAAW,QAAQ,QAAR,CAAiB,OAA5B,CAAX;AACD,iBAFD,CAEE,OAAO,CAAP,EAAU;;AAEX;;AAED,oBAAI,SAAS,cAAT,CAAwB,MAAxB,CAAJ,EAAqC;AACnC,0BAAQ,QAAR,GAAmB,QAAnB;AACA,0BAAQ,IAAR,GAAe,SAAS,IAAxB;AACA,0BAAQ,KAAR,GAAgB,SAAS,KAAzB;;AAEA,uBAAK,IAAL,CAAU,UAAV,EAAsB,QAAQ,KAA9B,EAAqC,OAArC,EAA8C,QAAQ,IAAtD;;AAEA,sBAAI,SAAS,cAAT,CAAwB,OAAxB,CAAJ,EAAsC;AACpC,yBAAK,IAAL,CAAU,QAAQ,KAAlB,EAAyB,OAAzB,EAAkC,QAAQ,IAA1C;AACD;AACF,iBAVD,MAUO;AACL,uBAAK,IAAL,CAAU,kBAAV,EAA8B,OAA9B,EAAuC,QAAQ,QAA/C;AACD;;;;;qBAKC,QAAQ,Q;;;;;AACV,sCAAc,OAAd,EAAuB,QAAQ,QAA/B;AACA,wBAAQ,SAAR,GAAoB,QAAQ,QAAR,CAAiB,IAArC;;AAEA,uBAAO,QAAQ,QAAf;;AAEA,qBAAK,IAAL,CAAU,UAAV,EAAsB,OAAtB,EAA+B,QAAQ,SAAvC;;;;qBAIE,QAAQ,K;;;;;AACV,wBAAQ,KAAR,GAAgB,QAAQ,KAAR,CAAc,GAAd,IAAqB,IAArC;AACA,wBAAQ,KAAR,GAAgB,QAAQ,KAAxB;AACA,qBAAK,IAAL,CAAU,OAAV,EAAmB,OAAnB,EAA4B,QAAQ,KAApC;;;;AAII,2B,GAAc,iBAAE,OAAF,CAAU,QAAQ,WAAlB,EAA+B,MAA/B,C;;;AAEpB,oBAAI,YAAY,KAAhB,EAAuB;AACrB,0BAAQ,MAAR,GAAiB,YAAY,KAAZ,CAAkB,GAAlB,CAAsB;AAAA,2BAAK,EAAE,OAAF,CAAU,GAAf;AAAA,mBAAtB,CAAjB;AACD;;AAED,oBAAI,YAAY,KAAhB,EAAuB;AACrB,0BAAQ,MAAR,GAAiB,YAAY,KAAZ,CAAkB,GAAlB,CAAsB;AAAA,2BAAK,EAAE,OAAF,CAAU,GAAf;AAAA,mBAAtB,CAAjB;AACD;;AAED,oBAAI,YAAY,KAAhB,EAAuB;AACrB,0BAAQ,KAAR,GAAgB,YAAY,KAAZ,CAAkB,GAAlB,CAAsB;AAAA,2BAAK,EAAE,OAAF,CAAU,GAAf;AAAA,mBAAtB,EAA0C,CAA1C,CAAhB;AACD;;AAED,oBAAI,YAAY,QAAhB,EAA0B;AAClB,0BADkB,GACP,YAAY,QAAZ,CAAqB,CAArB,CADO;;AAExB,0BAAQ,QAAR,8BAAuB,QAAvB,EAAoC,SAAS,OAAT,CAAiB,WAArD;AACA,yBAAO,QAAQ,QAAR,CAAiB,OAAxB;AACD;;AAED,wBAAQ,MAAR,GAAiB,KAAK,MAAtB;;AAEA,uBAAO,QAAQ,WAAf;;AAEA,qBAAK,IAAL,CAAU,SAAV,EAAqB,OAArB;;;;;;;;;;;;;;;;;;6BAGO;AAAA;;AACP,UAAM,SAAS,qBAAf;;AAEA,aAAO,GAAP,CAAW,qBAAW,IAAX,EAAX;;AAEA,aAAO,GAAP,CAAW,GAAX,EAAgB,UAAC,GAAD,EAAM,GAAN,EAAc;AAC5B,YAAI,IAAI,KAAJ,CAAU,kBAAV,MAAkC,OAAK,aAA3C,EAA0D;AACxD,cAAI,IAAJ,CAAS,IAAI,KAAJ,CAAU,eAAV,CAAT;AACD,SAFD,MAEO;AACL,cAAI,IAAJ,CAAS,+BAAT;AACD;AACF,OAND;;AAQA,aAAO,IAAP,CAAY,GAAZ,EAAiB,UAAC,GAAD,EAAM,GAAN,EAAc;AAC7B,eAAK,aAAL,CAAmB,IAAI,IAAvB;AACA,YAAI,IAAJ,GAAW,MAAX,CAAkB,GAAlB;AACD,OAHD;;AAKA,aAAO,MAAP;AACD;;;;;AAxKG,G,CACG,O;AADH,G,CAEG,Q;AAFH,G,CAIG,I,GAAO,I;QAuKR,G,GAAA,G;kBAEO,G","file":"Bot.js","sourcesContent":["import EventEmitter from 'events';\nimport bodyParser from 'body-parser';\nimport {Router} from 'express';\nimport Elements from './Elements.js';\nimport Buttons from './Buttons.js';\nimport fetch from './libs/fetch.js';\nimport _ from 'lodash';\n\nexport {Elements, Buttons};\n\nconst userCache = {};\n\nexport async function wait(time) {\n return new Promise(resolve => setTimeout(() => resolve(), time));\n}\n\nclass Bot extends EventEmitter {\n static Buttons = Buttons;\n static Elements = Elements;\n\n static wait = wait;\n\n constructor(token, verification, debug = false) {\n super();\n\n this._token = token;\n this._debug = debug;\n this._verification = verification;\n }\n\n async send(to, message) {\n if (this._debug) {\n console.log({recipient: {id: to}, message: message ? message.toJSON() : message});\n }\n\n try {\n await fetch('https://graph.facebook.com/v2.6/me/messages', {\n method: 'post',\n query: {access_token: this._token},\n body: {recipient: {id: to}, message}\n });\n } catch (e) {\n if (e.text) {\n let text = e.text;\n try {\n const err = JSON.parse(e.text).error;\n text = `${err.type || 'Unknown'}: ${err.message || 'No message'}`;\n } catch (ee) {\n // ignore\n }\n\n throw Error(text);\n } else {\n throw e;\n }\n }\n }\n\n async fetchUser(id, fields = 'first_name,last_name,profile_pic', cache = false) {\n const key = id + fields;\n let props;\n\n if (cache && userCache[key]) {\n props = userCache[key];\n props.fromCache = true;\n } else {\n const {body} = await fetch(`https://graph.facebook.com/v2.6/${id}`, {\n query: {access_token: this._token, fields}, json: true\n });\n\n props = body;\n props.fromCache = false;\n\n if (cache) {\n userCache[key] = props;\n }\n }\n\n return props;\n }\n\n async handleMessage(input) {\n const body = JSON.parse(JSON.stringify(input));\n const message = body.entry[0].messaging[0];\n Object.assign(message, message.message);\n delete message.message;\n\n message.raw = input;\n\n message.sender.fetch = async (fields, cache) => {\n const props = await this.fetchUser(message.sender.id, fields, cache);\n Object.assign(message.sender, props);\n return message.sender;\n };\n\n if (message.postback) {\n let postback = {};\n\n try {\n postback = JSON.parse(message.postback.payload);\n } catch (e) {\n // ignore\n }\n\n if (postback.hasOwnProperty('data')) {\n message.postback = postback;\n message.data = postback.data;\n message.event = postback.event;\n\n this.emit('postback', message.event, message, message.data);\n\n if (postback.hasOwnProperty('event')) {\n this.emit(message.event, message, message.data);\n }\n } else {\n this.emit('invalid-postback', message, message.postback);\n }\n\n return;\n }\n\n if (message.delivery) {\n Object.assign(message, message.delivery);\n message.delivered = message.delivery.mids;\n\n delete message.delivery;\n\n this.emit('delivery', message, message.delivered);\n return;\n }\n\n if (message.optin) {\n message.param = message.optin.ref || true;\n message.optin = message.param;\n this.emit('optin', message, message.optin);\n return;\n }\n\n const attachments = _.groupBy(message.attachments, 'type');\n\n if (attachments.image) {\n message.images = attachments.image.map(a => a.payload.url);\n }\n\n if (attachments.video) {\n message.videos = attachments.video.map(a => a.payload.url);\n }\n\n if (attachments.audio) {\n message.audio = attachments.audio.map(a => a.payload.url)[0];\n }\n\n if (attachments.location) {\n const location = attachments.location[0];\n message.location = {...location, ...location.payload.coordinates};\n delete message.location.payload;\n }\n\n message.object = body.object;\n\n delete message.attachments;\n\n this.emit('message', message);\n }\n\n router() {\n const router = new Router();\n\n router.use(bodyParser.json());\n\n router.get('/', (req, res) => {\n if (req.query['hub.verify_token'] === this._verification) {\n res.send(req.query['hub.challenge']);\n } else {\n res.send('Error, wrong validation token');\n }\n });\n\n router.post('/', (req, res) => {\n this.handleMessage(req.body);\n res.send().status(200);\n });\n\n return router;\n }\n}\n\nexport {Bot};\n\nexport default Bot;\n"]}
\No newline at end of file