Built motion from commit 953226e6.|2.6.32
[motion2.git] / server / config / triggers / index.js
index 2ebda58..99c7aa0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d98=['condition','util','../../mysqldb','jayson/promise','../logger','triggers','client','http','Chat','ChatInteraction','afterCreate','afterUpdate','closedinteraction','ChatMessage','newmessage','Sms','SmsInteraction','newinteraction','SmsMessage','Whatsapp','WhatsappInteraction','WhatsappMessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','OpenchannelInteraction','Openchannel','OpenchannelMessage','request','EventManager','then','info','Trigger,\x20%s','error','code','catch','get','motionChannel','undefined','SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20','ContactId','query','Sequelize','SELECT','contact','UserId','format','SIP/%s','name','agent','channel','incomingmessage','outgoingmessage','AfterCreateMessage','event','opened','resolve','QueryTypes','interface','AfterCreate','changed','closed','substatus','sequelize','AfterUpdate','find','fullname','internal','length','hasOwnProperty','model','hook','callback','toLowerCase'];(function(_0x47f4c2,_0x134e7b){var _0x22c63e=function(_0x5b8572){while(--_0x5b8572){_0x47f4c2['push'](_0x47f4c2['shift']());}};_0x22c63e(++_0x134e7b);}(_0x8d98,0x135));var _0x88d9=function(_0x181e15,_0x1d97ab){_0x181e15=_0x181e15-0x0;var _0x13a771=_0x8d98[_0x181e15];return _0x13a771;};'use strict';var util=require(_0x88d9('0x0'));var db=require(_0x88d9('0x1'))['db'];var jayson=require(_0x88d9('0x2'));var logger=require(_0x88d9('0x3'))(_0x88d9('0x4'));var client=jayson[_0x88d9('0x5')][_0x88d9('0x6')]({'port':0x232a});var triggers=[{'channel':_0x88d9('0x7'),'model':_0x88d9('0x8'),'event':_0x88d9('0x9'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x88d9('0x7'),'model':_0x88d9('0x8'),'event':_0x88d9('0xa'),'condition':_0x88d9('0xb'),'callback':afterUpdate},{'channel':_0x88d9('0x7'),'model':_0x88d9('0xc'),'event':_0x88d9('0x9'),'condition':_0x88d9('0xd'),'callback':afterCreateMessage},{'channel':_0x88d9('0xe'),'model':_0x88d9('0xf'),'event':_0x88d9('0x9'),'condition':_0x88d9('0x10'),'callback':afterCreate},{'channel':'Sms','model':'SmsInteraction','event':_0x88d9('0xa'),'condition':_0x88d9('0xb'),'callback':afterUpdate},{'channel':_0x88d9('0xe'),'model':_0x88d9('0x11'),'event':_0x88d9('0x9'),'condition':_0x88d9('0xd'),'callback':afterCreateMessage},{'channel':_0x88d9('0x12'),'model':_0x88d9('0x13'),'event':_0x88d9('0x9'),'condition':_0x88d9('0x10'),'callback':afterCreate},{'channel':'Whatsapp','model':_0x88d9('0x13'),'event':_0x88d9('0xa'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x88d9('0x12'),'model':_0x88d9('0x14'),'event':_0x88d9('0x9'),'condition':'newmessage','callback':afterCreateMessage},{'channel':_0x88d9('0x15'),'model':_0x88d9('0x16'),'event':'afterCreate','condition':_0x88d9('0x10'),'callback':afterCreate},{'channel':'Fax','model':'FaxInteraction','event':_0x88d9('0xa'),'condition':_0x88d9('0xb'),'callback':afterUpdate},{'channel':_0x88d9('0x15'),'model':_0x88d9('0x17'),'event':'afterCreate','condition':_0x88d9('0xd'),'callback':afterCreateMessage},{'channel':_0x88d9('0x18'),'model':_0x88d9('0x19'),'event':_0x88d9('0x9'),'condition':_0x88d9('0x10'),'callback':afterCreate},{'channel':_0x88d9('0x18'),'model':_0x88d9('0x19'),'event':_0x88d9('0xa'),'condition':_0x88d9('0xb'),'callback':afterUpdate},{'channel':_0x88d9('0x18'),'model':_0x88d9('0x1a'),'event':_0x88d9('0x9'),'condition':_0x88d9('0xd'),'callback':afterCreateMessage},{'channel':'Openchannel','model':_0x88d9('0x1b'),'event':'afterCreate','condition':'newinteraction','callback':afterCreate},{'channel':_0x88d9('0x1c'),'model':_0x88d9('0x1b'),'event':_0x88d9('0xa'),'condition':_0x88d9('0xb'),'callback':afterUpdate},{'channel':_0x88d9('0x1c'),'model':_0x88d9('0x1d'),'event':_0x88d9('0x9'),'condition':_0x88d9('0xd'),'callback':afterCreateMessage}];function request(_0x4ef9d7){return client[_0x88d9('0x1e')](_0x88d9('0x1f'),_0x4ef9d7)[_0x88d9('0x20')](function(_0x4f93d2){logger[_0x88d9('0x21')](_0x88d9('0x22'),'EventManager',_0x4f93d2);if(_0x4f93d2[_0x88d9('0x23')]){if(_0x4f93d2[_0x88d9('0x23')][_0x88d9('0x24')]===0x1f4){logger[_0x88d9('0x23')](_0x88d9('0x22'),_0x88d9('0x1f'),_0x4f93d2[_0x88d9('0x23')]);}}})[_0x88d9('0x25')](function(_0x3d010d){logger['error'](_0x88d9('0x22'),'EventManager',_0x3d010d);});}function afterCreateMessage(_0x53aa4c){return function(_0x26cb25){_0x26cb25=_0x26cb25[_0x88d9('0x26')]({'plain':!![]});_0x26cb25['channel']=_0x53aa4c;_0x26cb25[_0x88d9('0x27')]=_0x53aa4c;_0x26cb25['event']=_0x26cb25['direction'];Promise['resolve']()[_0x88d9('0x20')](function(){if(typeof _0x26cb25['ContactId']===_0x88d9('0x28'))return null;var _0x51f1b3=_0x88d9('0x29')+_0x26cb25[_0x88d9('0x2a')];return db['sequelize'][_0x88d9('0x2b')](_0x51f1b3,{'type':db[_0x88d9('0x2c')]['QueryTypes'][_0x88d9('0x2d')],'raw':!![]});})[_0x88d9('0x20')](function(_0x574362){if(_0x574362){_0x26cb25[_0x88d9('0x2e')]=_0x574362[0x0];}if(typeof _0x26cb25['UserId']==='undefined')return;return getAgent(_0x26cb25[_0x88d9('0x2f')]);})[_0x88d9('0x20')](function(_0x3d541b){if(_0x3d541b){_0x26cb25['interface']=util[_0x88d9('0x30')](_0x88d9('0x31'),_0x3d541b[_0x88d9('0x32')]);_0x26cb25[_0x88d9('0x33')]=_0x3d541b;_0x26cb25[_0x88d9('0x34')]=_0x53aa4c;return request({'event':_0x88d9('0x35'),'message':_0x26cb25});}else{return request({'event':_0x88d9('0x36'),'message':_0x26cb25});}})[_0x88d9('0x25')](function(_0x44d5aa){logger[_0x88d9('0x23')]('Trigger,\x20%s',_0x88d9('0x37'),_0x44d5aa);});};}function afterCreate(_0x3b72e9,_0x54b4f6){return function(_0xebfbdd){_0xebfbdd=_0xebfbdd[_0x88d9('0x26')]({'plain':!![]});_0xebfbdd[_0x88d9('0x34')]=_0x3b72e9;_0xebfbdd[_0x88d9('0x27')]=_0x3b72e9;_0xebfbdd[_0x88d9('0x38')]=_0x88d9('0x39');Promise[_0x88d9('0x3a')]()[_0x88d9('0x20')](function(){var _0x9370c6=_0x88d9('0x29')+_0xebfbdd[_0x88d9('0x2a')];return db['sequelize']['query'](_0x9370c6,{'type':db[_0x88d9('0x2c')][_0x88d9('0x3b')][_0x88d9('0x2d')],'raw':!![]});})[_0x88d9('0x20')](function(_0x5d91a0){if(_0x5d91a0){_0xebfbdd['contact']=_0x5d91a0[0x0];}if(typeof _0xebfbdd[_0x88d9('0x2f')]===_0x88d9('0x28'))return;return getAgent(_0xebfbdd['UserId']);})[_0x88d9('0x20')](function(_0xc78e8b){if(_0xc78e8b){_0xebfbdd[_0x88d9('0x3c')]=util[_0x88d9('0x30')](_0x88d9('0x31'),_0xc78e8b[_0x88d9('0x32')]);_0xebfbdd['agent']=_0xc78e8b;}return request({'event':_0x54b4f6,'message':_0xebfbdd});})[_0x88d9('0x25')](function(_0x35e174){logger[_0x88d9('0x23')](_0x88d9('0x22'),_0x88d9('0x3d'),_0x35e174);});};}function afterUpdate(_0x5bc160){return function(_0x5f009c){var _0x2b44fa=_0x5f009c[_0x88d9('0x3e')]('closed')&&_0x5f009c[_0x88d9('0x3f')];var _0x3660db=_0x5f009c[_0x88d9('0x3e')](_0x88d9('0x40'));if(_0x2b44fa||_0x3660db){var _0x3c21c6=_0x2b44fa?_0x88d9('0xb'):'substatus';var _0x195dc5=_0x5f009c[_0x88d9('0x26')]({'plain':!![]});_0x195dc5['channel']=_0x5bc160;_0x195dc5['motionChannel']=_0x5bc160;_0x195dc5['event']=_0x2b44fa?_0x88d9('0x3f'):'substatus';var _0x3bc9f3='SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20'+_0x195dc5[_0x88d9('0x2a')];return db[_0x88d9('0x41')][_0x88d9('0x2b')](_0x3bc9f3,{'type':db[_0x88d9('0x2c')][_0x88d9('0x3b')][_0x88d9('0x2d')],'raw':!![]})[_0x88d9('0x20')](function(_0x1f93b6){if(_0x1f93b6){_0x195dc5[_0x88d9('0x2e')]=_0x1f93b6[0x0];}if(typeof _0x195dc5[_0x88d9('0x2f')]==='undefined')return;return getAgent(_0x195dc5[_0x88d9('0x2f')]);})['then'](function(_0x49c1cd){if(_0x49c1cd){_0x195dc5[_0x88d9('0x3c')]=util['format'](_0x88d9('0x31'),_0x49c1cd[_0x88d9('0x32')]);_0x195dc5[_0x88d9('0x33')]=_0x49c1cd;}return request({'event':_0x3c21c6,'message':_0x195dc5});})[_0x88d9('0x25')](function(_0x5cf316){logger[_0x88d9('0x23')]('Trigger,\x20%s',_0x88d9('0x42'),_0x5cf316);});}};}function getAgent(_0xf0cca3){return db['User'][_0x88d9('0x43')]({'where':{'id':_0xf0cca3},'attributes':['id',_0x88d9('0x32'),_0x88d9('0x44'),'email',_0x88d9('0x45')],'raw':!![]})[_0x88d9('0x20')](function(_0x4979bd){return _0x4979bd;});}exports['default']=function(){for(var _0x57c985=0x0;_0x57c985<triggers[_0x88d9('0x46')];_0x57c985+=0x1){if(db[_0x88d9('0x47')](triggers[_0x57c985][_0x88d9('0x48')])){db[triggers[_0x57c985][_0x88d9('0x48')]][_0x88d9('0x49')](triggers[_0x57c985][_0x88d9('0x38')],triggers[_0x57c985][_0x88d9('0x4a')](triggers[_0x57c985][_0x88d9('0x34')][_0x88d9('0x4b')](),triggers[_0x57c985][_0x88d9('0x4c')]));}}};
\ No newline at end of file
+var _0xb98b=['User','find','fullname','email','internal','default','length','hasOwnProperty','hook','toLowerCase','condition','../../mysqldb','jayson/promise','triggers','client','http','Chat','afterCreate','newinteraction','afterUpdate','closedinteraction','ChatMessage','newmessage','ChatOfflineMessage','Sms','SmsInteraction','SmsMessage','Whatsapp','WhatsappInteraction','WhatsappMessage','FaxInteraction','Fax','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','OpenchannelMessage','request','EventManager','then','info','error','Trigger,\x20%s','get','motionChannel','event','direction','resolve','ContactId','SELECT\x20*\x20FROM\x20cm_contacts\x20WHERE\x20id\x20=\x20','sequelize','query','QueryTypes','SELECT','contact','UserId','undefined','name','agent','channel','outgoingmessage','AfterCreateMessage','offlineMessage','opened','Sequelize','catch','changed','closed','substatus','SIP/%s','AfterUpdate'];(function(_0x4cecbd,_0x103c9c){var _0x143b0c=function(_0x453d0d){while(--_0x453d0d){_0x4cecbd['push'](_0x4cecbd['shift']());}};_0x143b0c(++_0x103c9c);}(_0xb98b,0x12f));var _0xbb98=function(_0x30c0af,_0x45701d){_0x30c0af=_0x30c0af-0x0;var _0x357cd1=_0xb98b[_0x30c0af];return _0x357cd1;};'use strict';var util=require('util');var db=require(_0xbb98('0x0'))['db'];var jayson=require(_0xbb98('0x1'));var logger=require('../logger')(_0xbb98('0x2'));var client=jayson[_0xbb98('0x3')][_0xbb98('0x4')]({'port':0x232a});var triggers=[{'channel':_0xbb98('0x5'),'model':'ChatInteraction','event':_0xbb98('0x6'),'condition':_0xbb98('0x7'),'callback':afterCreate},{'channel':'Chat','model':'ChatInteraction','event':_0xbb98('0x8'),'condition':_0xbb98('0x9'),'callback':afterUpdate},{'channel':_0xbb98('0x5'),'model':_0xbb98('0xa'),'event':'afterCreate','condition':_0xbb98('0xb'),'callback':afterCreateMessage},{'channel':'Chat','model':_0xbb98('0xc'),'event':_0xbb98('0x6'),'condition':_0xbb98('0xb'),'callback':afterCreateOfflineMessage},{'channel':_0xbb98('0xd'),'model':_0xbb98('0xe'),'event':'afterCreate','condition':_0xbb98('0x7'),'callback':afterCreate},{'channel':_0xbb98('0xd'),'model':_0xbb98('0xe'),'event':_0xbb98('0x8'),'condition':_0xbb98('0x9'),'callback':afterUpdate},{'channel':'Sms','model':_0xbb98('0xf'),'event':_0xbb98('0x6'),'condition':_0xbb98('0xb'),'callback':afterCreateMessage},{'channel':_0xbb98('0x10'),'model':_0xbb98('0x11'),'event':_0xbb98('0x6'),'condition':_0xbb98('0x7'),'callback':afterCreate},{'channel':'Whatsapp','model':_0xbb98('0x11'),'event':_0xbb98('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0xbb98('0x10'),'model':_0xbb98('0x12'),'event':_0xbb98('0x6'),'condition':'newmessage','callback':afterCreateMessage},{'channel':'Fax','model':_0xbb98('0x13'),'event':_0xbb98('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0xbb98('0x14'),'model':_0xbb98('0x13'),'event':_0xbb98('0x8'),'condition':_0xbb98('0x9'),'callback':afterUpdate},{'channel':_0xbb98('0x14'),'model':_0xbb98('0x15'),'event':_0xbb98('0x6'),'condition':_0xbb98('0xb'),'callback':afterCreateMessage},{'channel':_0xbb98('0x16'),'model':_0xbb98('0x17'),'event':_0xbb98('0x6'),'condition':_0xbb98('0x7'),'callback':afterCreate},{'channel':_0xbb98('0x16'),'model':'MailInteraction','event':_0xbb98('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0xbb98('0x16'),'model':_0xbb98('0x18'),'event':_0xbb98('0x6'),'condition':_0xbb98('0xb'),'callback':afterCreateMessage},{'channel':_0xbb98('0x19'),'model':_0xbb98('0x1a'),'event':_0xbb98('0x6'),'condition':_0xbb98('0x7'),'callback':afterCreate},{'channel':_0xbb98('0x19'),'model':_0xbb98('0x1a'),'event':_0xbb98('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0xbb98('0x19'),'model':_0xbb98('0x1b'),'event':_0xbb98('0x6'),'condition':_0xbb98('0xb'),'callback':afterCreateMessage}];function request(_0x13a3f7){return client[_0xbb98('0x1c')](_0xbb98('0x1d'),_0x13a3f7)[_0xbb98('0x1e')](function(_0x4c35a0){logger[_0xbb98('0x1f')]('Trigger,\x20%s',_0xbb98('0x1d'),_0x4c35a0);if(_0x4c35a0[_0xbb98('0x20')]){if(_0x4c35a0['error']['code']===0x1f4){logger[_0xbb98('0x20')](_0xbb98('0x21'),_0xbb98('0x1d'),_0x4c35a0[_0xbb98('0x20')]);}}})['catch'](function(_0x116a8f){logger['error'](_0xbb98('0x21'),_0xbb98('0x1d'),_0x116a8f);});}function afterCreateMessage(_0x18af5b){return function(_0x1a8a75){_0x1a8a75=_0x1a8a75[_0xbb98('0x22')]({'plain':!![]});_0x1a8a75['channel']=_0x18af5b;_0x1a8a75[_0xbb98('0x23')]=_0x18af5b;_0x1a8a75[_0xbb98('0x24')]=_0x1a8a75[_0xbb98('0x25')];Promise[_0xbb98('0x26')]()[_0xbb98('0x1e')](function(){if(typeof _0x1a8a75[_0xbb98('0x27')]==='undefined')return null;var _0x515f98=_0xbb98('0x28')+_0x1a8a75['ContactId'];return db[_0xbb98('0x29')][_0xbb98('0x2a')](_0x515f98,{'type':db['Sequelize'][_0xbb98('0x2b')][_0xbb98('0x2c')],'raw':!![]});})[_0xbb98('0x1e')](function(_0x24b919){if(_0x24b919){_0x1a8a75[_0xbb98('0x2d')]=_0x24b919[0x0];}if(typeof _0x1a8a75[_0xbb98('0x2e')]===_0xbb98('0x2f'))return;return getAgent(_0x1a8a75[_0xbb98('0x2e')]);})['then'](function(_0x1352e4){if(_0x1352e4){_0x1a8a75['interface']=util['format']('SIP/%s',_0x1352e4[_0xbb98('0x30')]);_0x1a8a75[_0xbb98('0x31')]=_0x1352e4;_0x1a8a75[_0xbb98('0x32')]=_0x18af5b;return request({'event':'incomingmessage','message':_0x1a8a75});}else{return request({'event':_0xbb98('0x33'),'message':_0x1a8a75});}})['catch'](function(_0x297e49){logger[_0xbb98('0x20')]('Trigger,\x20%s',_0xbb98('0x34'),_0x297e49);});};}function afterCreateOfflineMessage(_0x4c1f69){return function(_0x1b70cf){_0x1b70cf=_0x1b70cf[_0xbb98('0x22')]({'plain':!![]});_0x1b70cf[_0xbb98('0x32')]=_0x4c1f69;_0x1b70cf[_0xbb98('0x23')]=_0x4c1f69;_0x1b70cf['event']=_0xbb98('0x35');return request({'event':_0x1b70cf[_0xbb98('0x24')],'message':_0x1b70cf});};}function afterCreate(_0x175a2f,_0xd32c37){return function(_0x245a9b){var _0x5ae227=_0x245a9b[_0xbb98('0x22')]({'plain':!![]});_0x5ae227[_0xbb98('0x32')]=_0x175a2f;_0x5ae227[_0xbb98('0x23')]=_0x175a2f;_0x5ae227[_0xbb98('0x24')]=_0xbb98('0x36');Promise[_0xbb98('0x26')]()['then'](function(){var _0x3d0718=_0xbb98('0x28')+_0x5ae227[_0xbb98('0x27')];return db['sequelize'][_0xbb98('0x2a')](_0x3d0718,{'type':db[_0xbb98('0x37')][_0xbb98('0x2b')][_0xbb98('0x2c')],'raw':!![]});})['then'](function(_0x56a2b0){if(_0x56a2b0){_0x5ae227[_0xbb98('0x2d')]=_0x56a2b0[0x0];}if(_0x5ae227[_0xbb98('0x2e')]){return getAgent(_0x5ae227[_0xbb98('0x2e')]);}return;})[_0xbb98('0x1e')](function(_0xe6cf1a){if(_0xe6cf1a){_0x5ae227['interface']=util['format']('SIP/%s',_0xe6cf1a[_0xbb98('0x30')]);_0x5ae227[_0xbb98('0x31')]=_0xe6cf1a;}return request({'event':_0xd32c37,'message':_0x5ae227});})[_0xbb98('0x38')](function(_0x3dce3a){logger[_0xbb98('0x20')](_0xbb98('0x21'),'AfterCreate',_0x3dce3a);});};}function afterUpdate(_0x5ddc04){return function(_0x2aac34){var _0x2f2f13=_0x2aac34[_0xbb98('0x39')](_0xbb98('0x3a'))&&_0x2aac34[_0xbb98('0x3a')];var _0x38c440=_0x2aac34[_0xbb98('0x39')](_0xbb98('0x3b'));if(_0x2f2f13||_0x38c440){var _0x3dd42a=_0x2f2f13?_0xbb98('0x9'):_0xbb98('0x3b');var _0x545fb6=_0x2aac34[_0xbb98('0x22')]({'plain':!![]});_0x545fb6[_0xbb98('0x32')]=_0x5ddc04;_0x545fb6[_0xbb98('0x23')]=_0x5ddc04;_0x545fb6[_0xbb98('0x24')]=_0x2f2f13?_0xbb98('0x3a'):_0xbb98('0x3b');var _0x18412d=_0xbb98('0x28')+_0x545fb6[_0xbb98('0x27')];return db[_0xbb98('0x29')][_0xbb98('0x2a')](_0x18412d,{'type':db['Sequelize'][_0xbb98('0x2b')][_0xbb98('0x2c')],'raw':!![]})[_0xbb98('0x1e')](function(_0x15e6ed){if(_0x15e6ed){_0x545fb6[_0xbb98('0x2d')]=_0x15e6ed[0x0];}if(typeof _0x545fb6[_0xbb98('0x2e')]===_0xbb98('0x2f'))return;return getAgent(_0x545fb6[_0xbb98('0x2e')]);})['then'](function(_0x2b63fd){if(_0x2b63fd){_0x545fb6['interface']=util['format'](_0xbb98('0x3c'),_0x2b63fd['name']);_0x545fb6[_0xbb98('0x31')]=_0x2b63fd;}return request({'event':_0x3dd42a,'message':_0x545fb6});})[_0xbb98('0x38')](function(_0x529924){logger[_0xbb98('0x20')](_0xbb98('0x21'),_0xbb98('0x3d'),_0x529924);});}};}function getAgent(_0x4b8dfc){return db[_0xbb98('0x3e')][_0xbb98('0x3f')]({'where':{'id':_0x4b8dfc},'attributes':['id',_0xbb98('0x30'),_0xbb98('0x40'),_0xbb98('0x41'),_0xbb98('0x42')],'raw':!![]})[_0xbb98('0x1e')](function(_0x3f6d60){return _0x3f6d60;});}exports[_0xbb98('0x43')]=function(){for(var _0x3b8954=0x0;_0x3b8954<triggers[_0xbb98('0x44')];_0x3b8954+=0x1){if(db[_0xbb98('0x45')](triggers[_0x3b8954]['model'])){db[triggers[_0x3b8954]['model']][_0xbb98('0x46')](triggers[_0x3b8954][_0xbb98('0x24')],triggers[_0x3b8954]['callback'](triggers[_0x3b8954]['channel'][_0xbb98('0x47')](),triggers[_0x3b8954][_0xbb98('0x48')]));}}};
\ No newline at end of file